2010-12-30 4 views
0

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

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

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

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

ответ

1

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

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

+6

Говоря «не делай этого», на самом деле не решается проблема, связанная с желанием узнать, как работает dpkg. –

2

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

2

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

Я сделал свой собственный скрипт сборки perl, который был простым, а затем указанным, поэтому я могу легко его поддерживать.

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

4

У меня была такая же проблема в скрипте 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+")

1

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

dpkg -i -D1110 mydeb.deb 

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

 Смежные вопросы

  • Нет связанных вопросов^_^