Як створити пакет деб, який встановлює ряд файлів


23

Я хотів би створити абсолютно новий пакет деб, щоб встановити ряд файлів. Якщо це взагалі можливо, я хотів би зняти папку, що містить ці файли, як частину інсталяції, у відоме місце папки. У противному випадку деякі знання про те, як упакувати вихідні папки та файли, були б дуже корисними.

Питання - чи це можливо і якщо так - як?

Наведемо приклад:

~/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

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


Це врешті-решт стане серією окремих пакетів PPA для запуску.

Те, що я віддаю перевагу (але, можливо, не зможу досягти цього), - це звести свою упаковку до мінімуму - створити серію пакунків із шаблону та налагодити мінімальний мінімум (changelog і т. Д. + Файл tar / файл та папка) .


Гм ... чому ви хочете .deb робити видобуток дьогтю ? Чому б просто не взяти вихідний код з дьогтю і не створити деб з нуля з джерелом?
Thomas Ward

2
Можливо, ви блукаєте тарболом з іншого місця, стилю Adobe-Flash.
jrg

@jrg, який завантажує інсталятор .bin, а не тарбол. стиль упаковки Adobe не забезпечує джерело (його закрите джерело). Концепція, однак, однакова, завантажте код з іншого місця, а потім витягніть / встановіть (я тут ніт = прискіпливий: P)
Thomas Ward

@LordofTime Однакова різниця. ; p
jrg

Відповіді:


31

Нижче я припускаю, що джерело є відкритим (наприклад, сценарії Python), які не пов'язані ні з якою архітектурою (наприклад, amd64 або i386), отже, "всі". Якщо у вас є джерело C, вам потрібно використовувати його Architecture: amd64 i386у вихідному controlфайлі.


створення пакету, готового до Launchpad

Це врешті-решт стане серією окремих пакетів PPA для запуску.

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

Стартовий панель приймає лише вихідні пакети, тому створіть файл, rulesякий встановлює файли в потрібних місцях. Для зручності я використовую дехельпер . Каталог з вашими файлами повинен виглядати так:

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

debian/copyrightФайл також може бути корисний для інформування користувачів про ліцензії , пов'язаних з пакетом. Я не думаю, що вам потрібен postinstсценарій, оскільки вам потрібно лише витягнути деякі файли. compatповинен містити рівень сумісності дебхелера, скажімо, "8". ( для отримання детальної інформації зверніться до сторінки керівництва від дехелера )

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 New Maintainers був дуже цінним для мене, щоб зрозуміти це, рекомендується прочитати. Приклад упаковки можна знайти на 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.


3
+1 абсолютний геній - кланяюся вам, сер. Спасибі!
fossfreedom

Дякуємо за цю чудову допомогу! Хоча були проблеми з контрольним файлом, хоча, врешті-решт, він спрацював, але не запитуйте мене як;)
Герхард Бургер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.