dpkg-deb собирает неверный пакет

Я хочу создать простой пакет Debian, содержащий программу на Python (foo).

$ ls -R dist/
dist/:
DEBIAN  usr

dist/DEBIAN:
control

dist/usr:
local

dist/usr/local:
bin

dist/usr/local/bin:
foo

$ cat dist/DEBIAN/control 
Package: foo
Version: 0.0.0
Architecture: amd64
Maintainer: ...
Depends: gettext, python-pip, tar
Section: admin
Priority: optional
Description: ...

Когда я использую dpkg-deb в Debian 9, создается действительный пакет:

$ dpkg-deb --version
Debian 'dpkg-deb' package archive backend version 1.18.24 (amd64).
...
$ dpkg-deb -b dist foo.deb
...
$ dpkg-deb -c foo.deb
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/local/
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/local/bin/
-rwxr-xr-x gerald/gerald  3786 2017-12-28 13:51 ./usr/local/bin/foo

Но когда я использую ту же команду в Ubuntu 14.04, пакет не может быть установлен:

$ dpkg-deb --version
Debian `dpkg-deb' package archive backend version 1.17.5 (amd64).
...
$ dpkg-deb -b dist foo.deb
...
$ dpkg-deb -c foo.deb
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./DEBIAN/
-rw-r--r-- gerald/gerald   297 2017-12-28 13:51 ./DEBIAN/control
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/local/
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/local/bin/
-rwxr-xr-x gerald/gerald  3786 2017-12-28 13:51 ./usr/local/bin/foo
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/local/
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/local/bin/
-rwxr-xr-x gerald/gerald  3786 2017-12-28 13:51 ./usr/local/bin/foo
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/local/
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/local/bin/
-rwxr-xr-x gerald/gerald  3786 2017-12-28 13:51 ./usr/local/bin/foo
drwxr-xr-x gerald/gerald     0 2017-12-28 13:51 ./usr/local/bin/
-rwxr-xr-x gerald/gerald  3786 2017-12-28 13:51 ./usr/local/bin/foo
-rwxr-xr-x gerald/gerald  3786 2017-12-28 13:51 ./usr/local/bin/foo
$ sudo dpkg -i foo.deb
(Reading database ... 430408 files and directories currently installed.)
Preparing to unpack foo.deb ...
Unpacking foo ...
dpkg: error processing archive foo.deb (--install):
trying to overwrite '/DEBIAN/control', which is also in package bar
Errors were encountered while processing:
foo.deb
0
задан 28 December 2017 в 18:06

1 ответ

Во-первых, я должен отметить следующее: dpkg-deb - это хакерский подход к созданию пакета. Он следует только минимальному уровню и зависит от существующих системных библиотек в качестве зависимостей сборки. В свою очередь, это не очень надежный метод для создания пакетов , которые вы хотите распространять за пределами вашей конкретной системы по этой причине, среди прочего (например, dpkg версия и несоответствия требований из-за стандартов Debian, требуемых в данная система).

Вот почему Ubuntu Packaging Guide рекомендует полностью собирать пакеты в пределах pbuilder и следовать шаблонам dh_make для совершенно новых пакетов (которые фактически извлекают данные из руководства по пакетированию Debian для некоторых бит, хе)


Теперь я взял очень базовый подход к упаковке, и сделал очень простой пакет, содержащий только один скрипт .

Вы заметите, что у меня есть немного больше в моем каталоге DEBIAN/. Большинство файлов здесь являются стандартными файлами, созданными с помощью dh_make, как если бы я начинал следовать руководству по упаковке для создания пакета. Тем не менее, я только что переименовал debian/, который он создает в DEBIAN/, сохранил файл install, но конкретно сказал ему, что мне нужно было сделать с установкой, сохранил файл postinst, потому что я слишком ленив, чтобы chmod +x сценарий перед установкой (поэтому сценарий postinst установит его как исполняемый) и т. д. Вы можете посмотреть конкретные детали в свое время.

Теперь, с вышеупомянутой «структурой» пакета, в контейнере LXD 14.04 (потому что я везде запускаю 16.04, поэтому образы LXD помогают мне иметь более старые версии для тестирования вещей), я запустил dpkg-deb и получил некоторую приятность:

root@trusty-deb-tests:~/temptests# dpkg-deb -b testingdata-0.0.1/
dpkg-deb: warning: 'testingdata-0.0.1//DEBIAN/control' contains user-defined field 'Build-Depends'
dpkg-deb: warning: 'testingdata-0.0.1//DEBIAN/control' contains user-defined field 'Standards-Version'
dpkg-deb: warning: ignoring 2 warnings about the control file(s)

dpkg-deb: building package `testingdata' in `testingdata-0.0.1.deb'.
root@trusty-deb-tests:~/temptests# ls
testingdata-0.0.1  testingdata-0.0.1.deb
root@trusty-deb-tests:~/temptests# dpkg-deb -c testingdata-0.0.1.deb
drwxrwxr-x root/root         0 2017-12-28 15:09 ./
drwxrwxr-x root/root         0 2017-12-28 15:09 ./dist/
-rw-r--r-- root/root        15 2017-12-28 15:09 ./dist/hellothere.sh
root@trusty-deb-tests:~/temptests#

Итак, во-первых, я считаю что-то странным в вашей упаковке. Даже если я удаляю все, кроме контрольного файла на моей стороне, он все равно работает должным образом, хотя он не знает, как записывать файлы, и не распознает, как записать в нужное место с моим ' тест».

Нечто конкретное для вашей посылки разорено. Я бы посоветовал вам «начать» с базового уровня, который у меня есть в том репозитории GitHub, который я связал, и продолжить свой путь оттуда. (Наличие файла install внутри папки DEBIAN также является хорошей практикой, поэтому вы знаете, что и где устанавливается).

0
ответ дан 28 December 2017 в 18:06

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

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