Получить список зависимостей для пакета Debian на неродном хосте - PullRequest
0 голосов
/ 09 ноября 2011

Я поддерживаю и публикую пакет с открытым исходным кодом, который необходимо собрать для Windows и Linux. Я выбрал кросс-компиляцию с mingw и использовал пакеты Debian для сборки и поддержки двоичных файлов для моих пакетов Windows. То есть я определил архитектуры Debian mingw-i686 и mingw-amd64, массируя небольшие модификации в dpkg-cross и некоторые установочные сценарии Debian для учета схемы именования PE (* .dll, * .dll.a вместо .so. и * .so) и начали сборку.

Это прошло очень хорошо, и до недавнего времени я мог легко собрать установку Windows, используя Inno Setup, из расписания установки, то есть списка .deb, которые должны быть установлены для моего пакета. Этот список был сгенерирован с помощью chroot-ed apt-get (с --print-uris) и выглядел так:

/projects/www/debian/dev/pool/dists/experimental/main/base/libfreetype6_2.4.4-1+mingw.1_mingw-amd64.deb
/projects/www/debian/dev/pool/dists/experimental/main/base/libwxmsw2.8_2.8.10.1-3.1_mingw-amd64.deb
[...]

В основном я использовал apt для разрешения зависимостей и Inno Setup для установки.

Конечно, реальной системы Debian для mingw-i686 не существует, поэтому я не смог запустить apt нативно. Я взломал решение, поместив необходимые файлы в каталог и используя apt-get -o RootDir=, чтобы изменить корень apt в этот каталог. Это работало, так как apt-get никогда не находился в этом каталоге, а только искал там его базы данных.

В последнее время в тестирование Debian была добавлена ​​новая apt-версия, и эта apt-версия действительно фактически выполняет загрузку в RootDir. Итак, мое решение RootDir стало практически неосуществимым, и для правильной настройки chroot потребовалось бы немало усилий.

У кого-нибудь есть идеи, как я могу получить список пакетов любым другим способом? То есть получить список .deb и всех их зависимостей для конкретного пакета на неродной архитектуре?

1 Ответ

0 голосов
/ 09 ноября 2011

Я нашел решение, исправив свой apt.

Я столкнулся с двумя разными проблемами: во-первых, apt с иностранными версиями, похоже, в настоящее время не работает в тестировании, поскольку multi-arch dpkg нееще здесь.Apt пытается вызвать dpkg --print-foreign-architectures, что не удается, потому что это многоархивный вызов dpkg, а dpkg еще не так далеко.Это должно быть исправлено путем явной установки APT :: Architectures.

Во-вторых, я мог бы пере-root состояния apt, только вызвав apt как:

APT_CONFIG=apt.conf apt-get

и используя этот файл конфигурации:

APT::Architecture "@ARCH@";
APT::Architectures { "@ARCH@"; }
Dir::State      "@TREE@/var/lib/apt";
Dir::Cache      "@TREE@/var/cache/apt";
Dir::Etc        "@TREE@/etc/apt";
Dir::Parts      "@TREE@/etc/apt/apt.conf.d";
Dir::State::status "@TREE@/var/lib/dpkg/status";
APT::Get::Assume-Yes    "true";

с @ TREE @, замененным моим подготовленным, чистым apt-деревом, и @ ARCH @, замененным моей архитектурой (mingw-i686).Все это было в прекрасной документации, хотя немного скрыто.

...