Как создать файл DEB вручную?

46

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

Это возможно?

маргаритка
источник
Не очень хороший ответ вы выбираете?
Gigamegs
@David, на самом деле я сделал это с помощью «dpkg-deb», это намного проще, поэтому я выбрал Gilles, перечислив файлы в папке с пакетом, чтобы получить четкое представление о файле для размещения там. Так что я думаю, что его ответ лучше ..
Дейзи
Я также перечисляю все файлы в пакете.
Gigamegs
11
@ Давид, я имею в виду, утверждать, что его ответ является производным, это одно, а "не очень хороший ответ"? Ответ Жиля превосходен; не имеет значения, был ли ваш ответ первым, он гораздо более полный. И нет ничего плохого в том, чтобы взять существующий ответ и расширить его; это хорошо
Майкл Мрозек

Ответы:

57

Создание исходного пакета

Я рекомендую сделать пакет с исходным кодом. Установите build-essential , debhelper , dh-make . Перейдите в каталог, в котором находятся файлы, которые вы хотите установить (имя каталога должно иметь форму $PACKAGE-$VERSION, например, myapp-4.2-1для вашей первой попытки упаковки Myapp V4.2), и запустите dh_make --createorig. Ответь на вопросы. Debhelper создаст базовую инфраструктуру, необходимую для сборки пакета, сгенерировав файлы в подкаталоге, называемые debianкак некоторые обязательные файлы, так и шаблоны для необязательных файлов. Вам может понадобиться изменить некоторые из этих файлов:

  • Отредактируйте, debian/rulesчтобы собрать то, что требует сборки, и установите файлы в нужном месте. Если вам просто нужно скопировать некоторые файлы, а не компилировать что-либо, просто отредактируйте файл, debian/installчтобы указать, какие файлы должны быть установлены и куда.
  • Отредактируйте, debian/copyrightчтобы добавить информацию о лицензии вашего пакета и информацию о том, где можно получить последнюю версию (если применимо).
  • Отредактируйте, debian/changelogчтобы удалить ссылку на ITP (это актуально, только если вы работаете над проектом Debian). Переименовать debian/postinst.exв debian/postinstи добавить свои команды после установки там. Если вы позже обновите свой пакет, запустите, debchange -iчтобы добавить запись в журнал изменений или отредактируйте файл в Emacs (с установленным dpkg-dev-el ).

Запустите dpkg-buildpackage -rfakeroot -us -ucсборку .debпакета (удалите, -us -ucесли хотите подписать пакет с помощью ключа PGP).

Создание бинарного пакета напрямую

Если вы решите создать двоичный пакет напрямую, не собирая его из исходного пакета, что не очень легко, потому что инструментов для облегчения процесса не так много, вам понадобится некоторое базовое знакомство с форматом пакетов deb. Это описано в Руководстве по политике Debian , в частности гл. 3 (формат бинарных пакетов) , гл. 5 (контрольные файлы) , гл. 6 (сценарии установки) и приложение B (манипулирование двоичным пакетом) .

Вы должны убедиться, что ваш пакет устанавливает ожидаемые файлы /usr/share/doc/copyright(содержащие лицензию на содержимое пакета, а также где найти последнюю версию пакета) и /usr/share/doc/changelog.Debian.gz(содержащие журнал изменений пакета deb). Они вам не нужны, если вы собираетесь использовать пакет только внутри компании, но лучше иметь их.

О Debian и его производных

Если у вас есть инструменты Debian, используйте dpkg-debдля создания пакета. В каталог, содержащий данные для установки, добавьте каталог, называемый DEBIANна верхнем уровне, содержащий управляющие файлы и сценарии сопровождающего.

$ ls mypackage-42
DEBIAN etc usr var
$ dpkg-deb -b mypackage-42

Трудный путь

Если у вас нет инструментов Debian, создайте архив файлов, которые вы хотите упаковать data.tar.gz, с отдельным архивом контрольных файлов control.tar.gz(без подкаталогов) и текстовым файлом debian-binaryс текстом 2.0.

cd mypackage-42
tar czf ../data.tar.gz [a-z]*
cd DEBIAN
tar czf ../../control.tar.gz *
cd ../..
echo 2.0 > debian-binary
ar r mypackage-42.deb debian-binary control.tar.gz data.tar.gz

Вы должны по крайней мере, управляющий файл с полями Package, Maintainer, Priority, Architecture, Installed-Size, Version, и любые необходимые декларации зависимостей.

Сценарий, который будет выполнен после установки, вызывается postinst. Обязательно сделайте его исполняемым. Это идет рядом control.

Преобразование двоичного пакета из другого формата

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

Жиль "ТАК - перестань быть злым"
источник
3
ИМО это копия с моего ответа? Как вы думаете?
Gigamegs
1
Ответ предполагает, что OP знает, как использовать emacs. Emacs действительно необходим здесь? Для редактирования журналов изменений, я думаю, можно использовать dch -i.
Фахим Митха
Что arделает то tar, чего нет?
ммст
@mmstick Это другой формат. Я не знаю, почему дизайнеры формата deb решили использовать ar здесь.
Жиль "ТАК - перестань быть злым"
1
Если вы хотите изменить имя и адрес электронной почты, которые dh_make --createorigвы используете, вам нужно export DEBEMAIL="me@example.com"и export DEBFULLNAME="Firstname Lastname"заранее.
Райан
10

Прежде всего вам нужно создать папку сборки и архив ваших файлов: tar czvf data.tar.gz files

Затем в папке сборки вы должны создать управляющий файл с некоторыми полезными данными:

 Package: xxxxxx
 Version: 0.0.1
 Section: user/hidden 
 Priority: optional
 Architecture: armel
 Installed-Size: `du -ks usr|cut -f 1`
 Maintainer: Your Name <xxx@xxx.xx>
 Description: This is optional, but creates warnings if left out

Затем вы можете независимо добавлять сценарии оболочки preinst, postint, prerm и postrm для управления поведением файлов до установки и после установки, а также до и после удаления файла .deb, а затем вы можете создать управляющий архив с помощью tar: tar czvf control.tar.gz control preinst postinst prerm postrm

Тогда вам нужен DEBiAN двоичный файл: echo 2.0 > debian-binary. В вашей папке сборки у вас должны быть следующие файлы: debian-binary control.tar.gzи data.tar.gz.

Наконец, вам нужен arпакет для создания файла .deb:ar -r xxx.deb debian-binary control.tar.gz data.tar.gz

Gigamegs
источник
1
По поводу ar -r xxx.deb debian-binary control.tar.gz data.tar.gzэтого стоит подчеркнуть, что порядок важен: контроль должен предшествовать данным.
Hibou57
@Bytemain, голос с наибольшим количеством голосов действительно выглядит частично на основе вашего текста, но он добавляет к нему детали и лучше читается. последовательность, которую мы можем скопировать / вставить, делает ее особенно привлекательной.
Мариотомо
3

Я делаю много пакетов, и сделать полный пакет не является тривиальным вопросом. Положительным моментом является то, что файлы и скрипты работают намного меньше. Вы можете создать такой пакет очень просто с помощью инструмента, известного как debreate .

Debreate - это действительно простой графический интерфейс для простого создания пакетов DEB. Вы можете просто указать, какие файлы, куда они идут, и если / что должно выполняться после / предустановки / удаления. Раньше я делал все свои пакеты стандартным способом, но после того, как я начал использовать этот инструмент, я вернусь только тогда, когда это необходимо.

Дж. М. Беккер
источник
1

Познакомился с Zimbra 7 в Debian, используя его пакеты Ubuntu. (Я упрямый, мне нравится Debian> bUbuntu, несмотря на то, что Zimbra выпускается только для Ubuntu.) Не уверен, как я работал над этим раньше, я уверен, что мне не нужно было делать это, когда я устанавливал это ранее!

mkdir new
for i in *.deb
 do echo `date`: working on $i
 ar x $i
 cd control
 rm * 2> /dev/null
 tar -xzpvf ../control.tar.gz
 tr "_" "-" < control > control2
 mv -v control2 control
 tar -czpvf ../control.tar.gz .
 cd ..
 ar r new/$i debian-binary control.tar.gz data.tar.gz
done
rm -rf debian-binary control.tar.gz data.tar.gz control

Все ваши новые файлы .deb будут в new/.

Примечание : это было на сжатие - dpkg на wheezy теперь имеет --force-bad-version.

математический
источник
1

Для быстрого создания пакетов вы можете воспользоваться программой checkinstall. Он выполняет установку программы, наблюдает за изменениями и создает пакет deb или rpm.

Undefine
источник
Это звучит как отличный вариант для отслеживания пакетов, которые вы должны установить из исходного кода. Можете ли вы предложить более подробную информацию? Например, в процессе установки вы можете изменять символические ссылки, удалять файлы, редактировать конфигурационные файлы, добавлять демоны и т. Д. В какой степени пользователи проверяют, устанавливают ли треки и отменяют ли эти изменения? Можете ли вы легко изменить его вывод, добавив сценарии prerm и postrm?
AatG
посмотрите на wiki.debian.org/CheckInstall. Если вы хотите что-то изменить во время установки, проще всего изменить Makefile, чтобы изменить раздел установки. prerm / postrm - я не нашел способа его изменить. Это просто для небольших программ, чтобы просто удалить.
неопределенный
-4
$ apt-get install build-essential dh-make debhelper devscripts
$ wget http://nmap.org/dist/nmap-LAST.tar.bz2
$ tar xf nmap-LAST.tar.bz2
$ cd nmap-LAST
$ dh_make -s -e youremail@site.org -f ../nmap-LAST.tar.bz2
$ apt-get install libgtk2.0-dev flex bison libpcap0.8-dev \
  libpcre3-dev binutils-dev python-all-dev
$ dpkg-buildpackage
Killinks
источник