Как создать пакет deb, который устанавливает серию файлов

23

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

Вопрос - возможно ли это, и если да - то как?

Позволяет привести пример:

~/mypluginfolder/содержит файлы x, yвложенная папка называетсяabc , так и внутри , что еще один файл с именем z.

Я хочу, чтобы очернить эту папку: tar -cvf myfiles.tar ~/mypluginfolder

Я полагаю, мой Debian пакет будет выглядеть

myfiles.tar.gz
myfiles+ppafoss_0.1-1/
   myfiles.tar
   DEBIAN
      changelog, compat, control, install, rules source

Можно ли как - то распаковать myfiles.tarв известном месте папки, например ,

/usr/share/rhythmbox/plugins/

Таким образом, конечный результат будет выглядеть так:

/usr/share/rhythmbox/plugins/mypluginfolder
/usr/share/rhythmbox/plugins/mypluginfolder\x
/usr/share/rhythmbox/plugins/mypluginfolder\y
/usr/share/rhythmbox/plugins/mypluginfolder\abc\z

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


Это в конечном счете станет серией индивидуального Launchpad пакетов PPA.

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

свобода ископаемых
источник
Эм ... почему вы хотите .deb , чтобы сделать выделение смолы ? Почему бы просто не взять исходный код из смолы и создание Deb с нуля с источником?
Томас Уорд
2
Возможность может быть то , что вы WGET архив из другого места, глинобитных флэш - стиле.
JRG
@jrg, который загружает .bin установщик, не тарболом. глинобитный стиль упаковки оленьей кожи обеспечить источник (ее с закрытыми исходными кодами). Концепция, тем не менее, по - прежнему то же самое, загрузить код из других источников, а затем извлечь / установить (я веду себя NIT = разборчивы здесь: P)
Томас Уорд
@LordofTime же разница. ; р
JRG

Ответы:

31

Ниже, я предполагаю , что источник является открытым (например , скрипты на Python) , которые , следовательно , не связаны с какой - либо архитектуры (например , amd64 или i386), следовательно , «все», Если у вас есть какой - то источник C, вам нужно использовать Architecture: amd64 i386в исходном controlфайле.


создание пакета готовых для Launchpad

Это в конечном счете станет серией индивидуального Launchpad пакетов PPA.

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

Launchpad принимает только пакеты с исходными текстами, поэтому создать rulesчто устанавливает файлы в нужных местах. Для удобства я буду использовать debhelper . Каталог с файлами должен выглядеть следующим образом :

debian/changelog
debian/control
debian/rules
debian/compat
mypluginfolder/...

debian/copyrightФайл также может быть полезен для информирования пользователей о лицензиях , связанных с пакетом. Я не думаю , что вам нужен postinstсценарий , так как вам нужно только извлечь некоторые файлы. compatдолжен содержать уровень compatilbility debhelper, скажем , «8». (пожалуйста , обратитесь к странице руководства по debhelper для более подробной информации)

changelogФайл можно редактировать с помощью dchкоманды, доступной из devscriptsпакета. rules( С использованием debhelper) должна содержать:

#!/usr/bin/make -f
%:
    dh $@
override_dh_install:
    dh_install mypluginfolder/ /usr/share/rhythmbox/plugins

Сделайте его исполняемым с помощью chmod 755 debian/rules. Исходный пакет может быть построен с использованием debuild -S. Убедитесь, что в директории с именем <package-name>-<version>. Более подробная информации о override_поведении и dhкомандах можно найти на странице руководства .

Руководство разработчика Debian было очень ценным для меня , чтобы понять это, это рекомендуется чтение. Пример упаковки можно найти на https://github.com/Bumblebee-Project/bumblebee-ppa .


создание пакета из существующего дерева файлов

dpkg-deb -bможет быть использовано для создания тарболов из существующего дерева файлов. Во- первых, начните с создания каталога , который должен быть назван в честь вашего пакета. Я предполагаю , что вы хотите назвать его myplugin, и положил его в /usr/share/rhythmbox/plugins/mypluginfolder.DEBIAN

mkdir -p myplugin/usr/share/rhythmbox/plugins/mypluginfolder
mkdir myplugin/DEBIAN

Скопируйте файлы:

cp -r ~/mypluginsfolder myplugin/usr/share/rhythmbox/plugins

Далее, вам потребуется так называемый контрольный файл , расположенный в myplugin/DEBIAN/controlкотором описывается пакет. Содержимое такого файла помещаются ниже:

Package: myplugin
Version: 1.0-1
Maintainer: You <whatever@contact.address>
Architecture: all
Description: plugins for Rhythmbox
 Longer description here
 .
 As you can see, new paragraph are split by a single dot,
 and lines have to be indented by one space.

Теперь, вы можете дополнительно проверить содержимое упаковки. Следующая команда выводит список директорий и файлов Записи содержимого myplugin:

find myplugin -ls

Если вы удовлетворены, сборки пакета в текущем каталоге:

dpkg-deb -b myplugin .

Новый файл появится, названный , как <package>_<version>_<architecture>.debчто в этом примере myplugin_1.0-1_all.deb. Вы можете использовать lessпрограмму , чтобы заглянуть в файл. Например, less myplugin_1.0-1_all.deb.

Lekensteyn
источник
3
+1 абсолютный гений - Я преклоняюсь перед вами , сэр. Благодарность!
fossfreedom
Спасибо за эту большую помощь! Если бы некоторые проблемы с файлом управления , хотя, в конце концов , это сработало, но не спрашивайте меня , как;)
Герхард Бергер