我正在使用它reprepro
来创建部分本地 Debian 镜像。我的conf/updates
文件如下所示:
Name: update-wheezy
Method: http://ftp.tu-graz.ac.at/mirror/debian
Suite: wheezy
Components: main contrib non-free
Architectures: i386
FilterList: purge mirror.packages
FilterList
指向mirror.packages
包含所有当前安装的软件包的文件。我使用以下命令创建此文件dpkg
:
dpkg --get-selections > conf/mirror.packages
到目前为止一切顺利。它运行良好。但后来我注意到我的本地存储库中缺少一些包。 的输出dpkg --get-selections
包含一些以 结尾的包名称行:i386
。示例:
libxxf86dga1:i386 install
libxxf86vm1:i386 install
lighttpd install
正是这些i386
-packages 缺失了。我通过删除后缀解决了这个问题:
dpkg --get-selections | sed 's/:i386//g' > conf/mirror.packages
现在我的问题是:
- 这是 reprepro 中的错误吗?还是我做错了什么?手册页指出
FilterList
采用的输出格式dpkg --get-selections
。 - 有没有什么方法可以
dpkg
抑制这种架构? - 为什么有些软件包有
:i386
后缀,但大多数没有? - 为什么架构是软件包名称的一部分?同一系统上可能存在来自不同架构的同一软件包吗?
答案1
:i386 不是软件包名称的一部分,而是软件包所针对的体系结构的指示。这是因为 Debian 引入了对从多个体系结构(“多体系结构”)安装软件包的支持。
看https://wiki.debian.org/Multiarch了解更多信息。
我不确定是什么决定了某个特定软件包的架构是否显示。起初我以为只有当软件包来自其他架构时才会显示,但从 nharrer 的评论来看,我显然搞错了。查看 nharrer 的列表并思考我看到的其他上下文:<architecture>,我认为它可能显示所有“multi-arch:same”软件包
我怀疑 reprepro 中的过滤列表功能早于 multiarch,不理解 :i386 的含义,因此将其视为包名称的一部分。