
Я использую 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
-пакетов и не хватает. Я обошел это, удалив суффикс:
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 появилась раньше мультиархитектуры, не понимает, что означает :i386, и поэтому рассматривает его как часть имени пакета.