Почему при установке не удается создать пакет deb, созданный вручную, и файл не может быть создан? - PullRequest
0 голосов
/ 30 декабря 2010

Я создал Perl-скрипт, который создает двоичный пакет deb с нуля. Я создал данные, контроль и т. Д. Но когда я запускаю dpkg -i в моем пакете deb, он жалуется, что не может получить файлы из данных. Пример: невозможно создать .dpkg-new (во время обработки): нет такого файла или каталога.

Я скачал несколько пакетов .deb, и они не используют сценарий preinst для создания структуры каталогов.

Я думаю, что делаю что-то не так, считаю, что мне нужно создать свои собственные каталоги в preinst, но это кажется неправильным ... возможно, я что-то упустил?

Нужно ли создавать каталоги, куда мои файлы из данных будут копироваться в preinst sh, или dpkg должен это делать, и я делаю что-то не так?

Ответы [ 5 ]

4 голосов
/ 19 января 2012

У меня была такая же проблема в скрипте Ruby, который я написал.

Я генерировал список файлов для передачи в tar при создании архива data.tar.gz. Когда я разархивирую и разархивирую архив вручную, он нормально выкачается, но dpkg потерпит неудачу.

Оказывается, список файлов должен также включать каждый каталог для создания.

Обратите внимание, что когда я создавал data.tar.gz, я собрал его почти с теми же параметрами, что и dpkg-deb / build.c в источнике dpkg-1.15.8.11.

execlp(TAR, "tar", "-cf", "-", "--format=gnu", "--null", "-T", "-", "--no-recursion", NULL);

Вместо этого я использовал

IO.popen("gnutar -czf - --format=gnu -T - --no-recursion", "r+")

2 голосов
/ 23 января 2011

В дополнение к тому, что сказал @Arrowmaster, проверьте http://www.debian.org/doc/debian-policy/ для подробного объяснения файлов.После создания самого пакета вы можете проверить его с помощью инструмента lintian, чтобы увидеть, есть ли что-то очевидное, что вы могли пропустить.

2 голосов
/ 02 февраля 2011

Если кто-то ищет решение проблемы:
"Создайте пакет deb из файла спецификации rpm."
Смотрите здесь http://www.deepnet.cx/debbuild/

Я сделал мойСобственный скрипт сборки на Perl намного проще, чем упомянутый выше, так что я могу легко его поддерживать.

Некоторые полезные знания, полученные в процессе:
0. deb - это архивный архив, содержащий 3 файла, порядок файлов важен.
1. Скрипты из control.tar.gz должен быть выполнен исполняемым.
2. хорошо иметь сценарий предварительной установки для создания каталогов, если директорий не существует.
3. иногда dpkg решает распаковать ваши zip-архивы (это произошло, если zip был единственным файломв файле data.tar.gz), так что проверьте это в скрипте postinstall.
4. Когда вы tar.gz, некоторые файлы обязательно перейдите в каталог, содержащий структуру каталогов для вашего tar.

1 голос
/ 20 июня 2012

Есть много причин для этого. Вам действительно нужно запустить:

dpkg -i -D1110 mydeb.deb

И опубликуйте результат, чтобы иметь надежду, что кто-то сможет решить проблему.

1 голос
/ 22 января 2011

Вы не должны пытаться вручную создавать двоичный пакет .deb вручную. Руководство новых сопровождающих Debian описывает, как начать создавать пакет Debian с использованием правильных инструментов.

Ваш созданный вручную пакет может выглядеть правильно для вас, но, поскольку он не устанавливается, он, очевидно, явнолибо в незначительной форме, которую вы не заметили, либо в более серьезной, невидимой для вас форме (например, большинство людей не понимают, что .deb на самом деле является архивом ar).

...