Как мне создать многоархивную deb?

Я пытаюсь создать пакет, который будет установлен на Ubuntu 12.04 - 13. * на 1386 и amd64. Я понял, что на amd64 единственная разница в том, что мне нужно установить 32-битные библиотеки. в зависимости от ia32-libs работает, когда она есть в системе (даже если она избыточна), но у 13. * такого пакета нет. Поэтому я пытаюсь установить через расширение:: i386. Когда я делаю sudo apt-get install blah:i386 ...etc, это работает нормально.

Следующий управляющий файл выдает сообщение: «Зависимость не достижима: libgcc1: i386» от 12.04.

Package: foo
Version: 1.0-1
Section: base
Priority: optional
Maintainer: bar@gmail.com
Architecture: all
Depends: libgcc1:i386, gcc-4.6-base:i386, libstdc++5:i386, libstdc++6:i386, libsasl2-2:i386, libgstreamermm-0.10-2:i386, libfreetype6:i386,
 libfontconfig1:i386, libX11-6:i386, libXrender1:i386, libice6:i386, libxext6:i386, libsm6:i386
Description: foo is awesome
 Foo is really awesome
Installed-Size: 71140

Поэтому, как говорят в нескольких других местах, я создал следующий файл управления:

Package: foo-amd64
Version: 1.0-1
Section: base
Priority: optional
Maintainer: bar@gmail.com
Architecture: amd64
Depends: foo, libgcc1:i386, gcc-4.6-base:i386, libstdc++5:i386, libstdc++6:i386, libsasl2-2:i386, libgstreamermm-0.10-2:i386, libfreetype6:i386,
 libfontconfig1:i386, libX11-6:i386, libXrender1:i386, libice6:i386, libxext6:i386, libsm6:i386
Description: foo is awesome
 Foo is really awesome
Installed-Size: 71140

Package: foo
Version: 1.0-1
Section: base
Priority: optional
Maintainer: bar@gmail.com
Architecture: i386
Depends: gksu
Multi-Arch: foreign
Description: foo is awesome
 Foo is really awesome
Installed-Size: 71140

Этот файл управления даже не скомпилируется, поскольку я получаю следующее сообщение об ошибке: dpkg-deb: error: parsing file 'foo/DEBIAN/control' near line 25 package 'foo': several package info entries found, only one allowed. Как мне сделать это правильно?

РЕДАКТИРОВАТЬ: Этот пакет не поставляется с источником. Он поставляется с скомпилированными 32-битными двоичными файлами, поэтому необходимо зависеть от 32-битной версии библиотек.

3
задан 26 December 2013 в 22:31

1 ответ

Вы не должны создавать разделенное имя пакетов для получения мультидуги. Просто введите:

Package: foo-amd64
Version: 1.0-1
Section: base
Priority: optional
Maintainer: bar@gmail.com
Architecture: any
Multi-Arch: same
Depends: foo, libgcc1, gcc-4.6-base, libstdc++5, libstdc++6, libsasl2-2, libgstreamermm-0.10-2, libfreetype6,
 libfontconfig1, libX11-6, libXrender1, libice6, libxext6, libsm6
Description: foo is awesome
 Foo is really awesome
Installed-Size: 71140

Это должно создать обоих, amd64 и i386 пакеты, зависящие Ваша переменная среды сборки. Существуют различные способы, которыми можно преобразовать пакеты в мультидугу при использовании рецептов вместо этого:

горячекатаный (1) и автоинструменты

Самый простой пакет для преобразования является тем, который использует autoconf, восходящий и горячекатаный (1) в упаковке Debian.

  1. Сборка - зависит от debhelper (> = 9).
  2. Добавьте Предварительно зависит: $ {misc:Pre-зависит} к любому пакету, перечисленному в debian/control, который обеспечивает общую библиотеку.
  3. Обновите debian/compat к '9'.
  4. Случаи замены /usr/lib/ в debian/*.install с /usr/lib/*/.
  5. Если /usr/lib (или подкаталог), перечислен как цель установки в debian/*.install, или цель ссылки в debian/*.links, необходимо будет заменить значением $ (DEB_HOST_MULTIARCH) в этот файл. См. 'Динамический debian /* файлы ниже.
  6. Любые случаи/usr/lib в debian/rules должны быть заменены/usr/lib/$ (DEB_HOST_MULTIARCH).
  7. Если необходимо было использовать $ (DEB_HOST_MULTIARCH) в debian/rules на любом из двух предыдущих шагов, установите DEB_HOST_MULTIARCH в debian/rules путем вызова: DEB_HOST_MULTIARCH? = $ (окружают dpkg-архитектуру-qDEB_HOST_MULTIARCH).
  8. После того как Вы создали пакет и проверили, что общий пакет библиотеки содержит только ожидаемые файлы, и что Ваш-dev пакет все еще работает, отметьте эту общую Мультидугу пакета библиотеки: то же в debian/control.
  9. Mark общий пакет (который является "всем"), Мультидуга: внешний в debian/control, если это может быть необходимо общему пакету библиотеки.

При переопределении команд debhelper в debian/rules, несмотря на использование горячекатаного (1) для остальной части сборки, Вы, возможно, должны следовать инструкциям ниже, чтобы классический debhelper изменил mv, CP или команды комнаты, используемые Вашими правилами переопределения.

Существует больше примеров в Debian упаковочное руководство по внедрению https://wiki.debian.org/Multiarch/Implementation. Можно также использовать lithian для проверки пакета в полностью соответствии.

2
ответ дан 26 December 2013 в 22:31

Другие вопросы по тегам:

Похожие вопросы: