Како направити Дебиан пакет за креирање

Debian Package Creation Howto



1. Предговор

Бити одговоран за машину значи бринути се о хардверу, као и о софтверским компонентама. Као што се види у свакодневном животу као администратор система, много је боље инсталирати софтвер као софтверски пакет, а не гомилу изворних датотека. Ово смањује трошкове правилног одржавања система.

Пакете који су доступни од вашег жељеног дистрибутера валидира и надзире администратор пакета. Тестирао је софтвер и уверава се да се уклапа у остале софтверске пакете доступне у дистрибуцији. Надаље, пакет је потписан ГПГ кључем од одржаватеља пакета. Ово гарантује интегритет пакета и показује вам да је пакет из поузданог извора.







Формат пакета зависи од ваше дистрибуције Линука. Одабрани формати су следећи:



deb

Пакети који се користе у: Дебиан ГНУ/Линук , Убунту , Армбијски , Линук Минт , Кноппик



rpm

Пакети који се користе у: Црвени шешир , Федора , ЦентОС , ОпенСусе





tgz and txz

Пакети који се користе у: Слацкваре

tar.xz

Пакети који се користе у: Арцх Линук



Овај документ објашњава како се укратко гради пакет за Дебиан ГНУ/Линук. За детаљне информације о формату Дебиан пакета и алатима за одржавање Линук система заснованог на `деб` можете погледати Дебиан књигу управљања пакетима [дпмб] За израду пакета за Дебиан ГНУ/Линук ови документи су неопходни:

  • Водич за Дебиан Нев Маинтаинер [днмг]
  • Референца Дебиан програмера [ГДР]
  • Водич за Дебиан паковање [моћи]
  • Приручник за Дебиан политику [дпм]

Пакет са којим ћемо радити носи назив `хелловорлд` и има број верзије 0.1. У сврху демонстрације, он једноставно садржи једну Питхон скрипту која емитује чувену поруку Хелло, ворлд !:

#!/usr/bin/python print ('Hello, world!') 

2. Захтеви

2.1. ГПГ кључ

Као корак 1, нека ваш ГПГ кључ буде доступан. Касније ће за потписивање пакета бити потребан кључ. Имајте на уму да су непотписани пакети неповерљиви и не могу бити део Дебиан универзума.

У случају да још немате ГПГ кључ, креирајте га. Можете следити три доленаведена корака. Прва команда генерише нови кључ, друга извози ваш нови кључ у засебну датотеку, а трећа додаје кључ вашем личном привеску.

$ gpg --gen-key $ gpg -a --output ~/.gnupg/YOUR_NAME.gpg --export 'YOUR NAME' $ gpg --import ~/.gnupg/YOUR_NAME.gpg 

Током креирања проверите да ли је име _ ВАШЕ ИМЕ_ тачно. Уобичајено је да се користи комбинација имена и презимена. Ово име ће тада морати бити потпуно исто у пакету, при креирању `контролне` датотеке Дебиан пакета. За више информација о ГПГ -у погледајте ГНУ приручник о приватности [гпх].

2.2. Ланац алата за паковање

Да бисте изградили Дебиан пакет са изворним кодом, на вашем систему су потребни следећи софтверски пакети:

  • градити-битан
  • аутоцонф
  • аутомаке
  • аутотоолс-дев
  • дх-маке
  • дебхелпер
  • девсцриптс
  • факероот
  • кутилс
  • линтиан
  • пбуилдер

Као кориснички `роот`, можете их инсталирати помоћу следеће команде:

# apt-get install build-essential autoconf automake autotools-dev dh-make debhelper devscripts fakeroot xutils lintian pbuilder 

2.3. Припремите софтвер за паковање

Морамо припремити директоријум за изградњу пакета. Направите директоријум за припрему окружења у којем ћемо изградити пакет:

$ mkdir -p ~./build/helloworld/0.1 

Копирајте `тар.гз` компримовану архиву у директоријум:

$ cp helloworld-0.1.tar.gz ~./build/helloworld/0.1 

Промените у директоријум и извуците пакет:

$ cd ~./build/helloworld/0.1 ~/build/helloworld/0.1$ tar -xzf helloworld-0.1.tar.gz 

Сада директоријум садржи изворни код у засебном директоријуму и компримовану архиву:

~/build/helloworld/0.1$ ls helloworld-0.1 helloworld-0.1.tar.gz 

3. Дебијанизација

На овом месту ћемо додати датотеке које су специфичне за Дебиан пакет. Зато је овај корак назван _Дебианизатион_ софтвера. То се ради у неколико појединачних корака.

3.1 Припремите структуру пакета

Промените у директоријум који чува цео изворни код пакета. У нашем примеру пакет садржи само датотеку `хелловорлд.пи`:

~$ cd build/helloworld/0.1/helloworld-0.1 ~/build/helloworld/0.1/helloworld-0.1$ ls helloworld.py 

Додајмо датотеке које су специфичне за Дебиан пакет. Алат `дх_маке` долази у игру. Прекидач `-е` користи дату адресу као адресу е-поште у пољу` Маинтаинер` датотеке `дебиан/цонтрол`. Уместо тога, за прављење пакета користите своју адресу е -поште. Имајте на уму да користите исту адресу е -поште која одговара вашем ГПГ кључу.

Прекидач `-ф` користи дату датотеку као изворну архиву извора и прескаче копирање тренутног програмског стабла у` програм.ориг`.

~/build/helloworld/0.1/helloworld-0.1$ dh_make -e [email protected] -f ../helloworld-0.1.tar.gz 

На упит ће се тражити да одаберете врсту пакета који треба да се креира. Да бисте изабрали _једин бинарни_ тип `с`.

Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch? [s/i/m/l/k/n] s Maintainer name : Frank Hofmann Email-Address : [email protected] Date : Sat, 04 Nov 2017 21:16:13 +0100 Package Name : helloworld Version : 0.1 License : blank Type of Package : Single Hit to confirm: Currently there is no top level Makefile. This may require additional tuning. Done. Please edit the files in the debian/ subdirectory now. You should also check that the helloworld Makefiles install into $DESTDIR and not in / . 

Ово резултира имеником под називом `дебиан`:

~/build/helloworld/0.1/helloworld-0.1$ ls debian helloworld.py 

Овај директоријум садржи све датотеке специфичне за пакет.

3.2. Подесите контролну датотеку

Датотека `дебиан/цонтрол` задржава зависности које су потребне _за изградњу_ пакета. Помоћу команде `дпкг -депцхецк -д./Цонфигуре` добијате листу са свим потребним пакетима. У нашем случају није потребан додатни пакет јер је Питхон језик који се тумачи.

Затим морамо уредити датотеку `дебиан/цонтрол` и додати вредности специфичне за пакет. За наш пример то изгледа овако:

Source: helloworld Section: python Priority: optional Maintainer: Frank Hofmann < [email protected] > Build-Depends: debhelper (>= 9) Standards-Version: 3.9.5 Homepage: http://www.efho.de/ #Vcs-Git: git://anonscm.debian.org/collab-maint/helloworld.git #Vcs-Browser: http://anonscm.debian.org/?p=collab-maint/helloworld.git;a=summary Package: helloworld Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, python Description: Prints Hello World in Python Prints Hello World in Python 

3.3. Прилагодите датотеку ауторских права

Датотека `дебиан/цопиригхт` садржи информације о лиценци за програмски пакет. Припремљен је за објављивање путем ГНУ јавне лиценце 2 (ГПЛв2). За наш пример то изгледа овако:

Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: helloworld Source: http://www.efho.de/ Files: debian/* Copyright: 2017 Frank Hofmann < [email protected] > License: GPL-2+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . On Debian systems, the complete text of the GNU General Public License version 2 can be found in '/usr/share/common-licenses/GPL-2'. 

3.4. Подесите датотеку дневника промена

Након информација о ауторским правима, датотеку `дебиан/цхангелог` потребно је прилагодити. У нашем примеру додајемо информације Инитиал релеасе.

helloworld (0.1-1) unstable; urgency=low * Initial release -- Frank Hofmann < [email protected] > Sat, 04 Nov 2017 21:16:13 +0100 

То је све што нам је до сада потребно - сада коначно можемо да направимо пакет.


4. Направите пакет

Да бисмо направили пакет, морамо да се померимо горе на један директоријум и покренемо следећу команду:

~/build/helloworld/0.1/helloworld-0.1$ dpkg-buildpackage -rfakeroot

Опција `-рфакероот` дозвољава` дпкг-буилдпацкаге` да покреће команде као привилеговани корисник уз помоћ наредбе `факероот`. Ово је потребно за припрему пакета и креирање датотека и директоријума.
Горња команда резултира дужом листом излазних порука (приказаних овде у немачком језичком окружењу):

dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellversion 0.1-1 dpkg-buildpackage: Quelldistribution unstable dpkg-buildpackage: Quellen geändert durch Frank Hofmann < [email protected] > dpkg-buildpackage: Host-Architektur amd64 dpkg-source --before-build helloworld-0.1 fakeroot debian/rules clean dh clean dh_testdir dh_auto_clean dh_clean dpkg-source -b helloworld-0.1 dpkg-source: Information: Quellformat 3.0 (quilt) wird verwendet dpkg-source: Information: helloworld wird unter Benutzung des existierenden ./helloworld_0.1.orig.tar.gz gebaut dpkg-source: Information: helloworld wird in helloworld_0.1-1.debian.tar.xz gebaut dpkg-source: Information: helloworld wird in helloworld_0.1-1.dsc gebaut debian/rules build dh build dh_testdir dh_auto_configure dh_auto_build dh_auto_test fakeroot debian/rules binary dh binary dh_testroot dh_prep dh_auto_install dh_installdocs dh_installchangelogs dh_perl dh_link dh_compress dh_fixperms dh_strip dh_makeshlibs dh_shlibdeps dh_installdeb dh_gencontrol dpkg-gencontrol: Warnung: Feld Depends von Paket helloworld: unbekannte Substitutionsvariable ${shlibs:Depends} dh_md5sums dh_builddeb dpkg-deb: Paket helloworld wird in ../helloworld_0.1-1_amd64.deb gebaut. dpkg-genchanges <../helloworld_0.1-1_amd64.changes dpkg-genchanges: kompletter Quellcode beim Hochladen hinzufügen dpkg-source --after-build helloworld-0.1 dpkg-buildpackage: Alles hochzuladen (Originalquellen enthalten) signfile helloworld_0.1-1.dsc Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren. Benutzer: 'Frank Hofmann (Hofmann EDV) < [email protected] > ' 4096-Bit RSA Schlüssel, ID D431AC07, erzeugt 2014-09-05 

4.1. Валидација пакета

Честитамо - успели сте да направите Дебиан пакет - да! Сада, погледајмо детаљније пакет. Овде на сцену ступа `линтиан`. Овај алат потврђује ваш пакет како би открио кршења строгих правила које Дебиан пакети морају испунити.

Да бисте покренули тестове, упишите следећу команду:

lintian helloworld_0.1-1_amd64.deb 

Алат не проналази кршења правила, али и правописне грешке и погрешне знакове. Прекидач `–педантиц` тражи од` линтиан` да буде много критичнији него иначе. Као што видите испод, `линтиан` је помало мрзовољан и открио је три упозорења и једну грешку.

Осим првог упозорења, лако можемо усрећити `линтиан` и прилагодити садржај пакета према постављеном правилу. Упозорење `нев-пацкаге-схоулд-цлосе-итп-буг` значи да не постоји извештај о грешци у односу на пакет ИТП (ИТП значи _ намењен пакету_). За обичан Дебиан пакет, извештај о грешци мора да се пошаље програму за праћење грешака за пакет ИТП да би обавестио друге да намеравате да почнете са паковањем овог софтвера.

4.2. Упозорење: `реадме-дебиан-цонтаинс-дебмаке-темплате

Датотека `РЕАДМЕ.Дебиан` има за циљ да сачува додатне белешке у вези са овим пакетом. `дх_маке` нам је направио ову датотеку:

helloworld for Debian --------------------- -- Frank Hofmann < [email protected] > Sat, 04 Nov 2017 21:16:13 +0100 

У нашем примеру немамо додатне информације, па можемо избрисати датотеку.

4.3. Упозорење: `опис-почиње-са-водећим-размацима`

Ово упозорење се појављује јер дужи опис нашег пакета у датотеци `дебиан/цонтрол` почиње са више од једног размака. Чим уклонимо један размак, упозорење ће нестати.

4.4. Грешка: `десцриптион-синопсис-ис-дуплицате`

Сваки пакет захтева и кратак и дужи опис у `дебиан/цонтрол`. Ова грешка се јавља јер су оба описа идентична. Грешка је нестала чим смо проширили дужи опис.


5. Линкови и референце

- [ддр] Андреас Бартх, Адам Ди Царло, Рапхаел Хертзог, Луцас Нуссбаум, Цхристиан Сцхварз, Иан Јацксон: Референца Дебиан програмера
- [Днмг] Јосип Родин, Осаму Аоки: Водич за Дебиан Нев Маинтаинер
- [дпмб] Акел Бецкерт, Франк Хофманн: Књига о управљању пакетима Дебиан
- [дпм] Приручник за Дебиан политику
- [моћи] Водич за Дебиан паковање
- [гпх] Приручник о приватности ГНУ -а
- [лусхпаиПацкаге] Алек Лусхпаи: Како створити дебиан пакет из извора


6. Захвалнице

Аутор се захваљује Акел Бецкерт и Геролд Руппрецхт за њихову подршку и критичаре током припреме овог чланка.