Inleiding tot het maken van Debian-pakketten
Lucas Nussbaum
packaging-tutorial@packages.debian.org Vertaling naar het Nederlands door
Frans Spiesschaert
en het Nederlandstalig lokalisatieteam
version 0.27 – 2021-01-08
Over deze handleiding
I Doel:u vertellen wat u echt moet weten over het maken van Debian-pakketten
I Bestaande pakketten aanpassen I Uw eigen pakketten maken
I In interactie treden met de Debian-gemeenschap I Een intensieve gebruiker van Debian worden I Behandelt de belangrijkste punten, maar is niet volledig
I U zult meer documentatie moeten lezen
I Het grootste deel van de inhoud is ook van toepassing op de van Debian afgeleide distributies
I Met inbegrip van Ubuntu
Inleiding tot het maken van Debian-pakketten 2 / 90
Overzicht
1 Inleiding
2 Broncodepakketten maken
3 Pakketten bouwen en testen
4 Praktijkoefening 1: het grep-pakket aanpassen
5 Geavanceerde verpakkingsonderwerpen
6 Pakketten onderhouden in Debian
7 Conclusies
8 Extra praktijkoefeningen
9 Oplossingen voor de praktijkoefeningen
Overzicht
1 Inleiding
2 Broncodepakketten maken
3 Pakketten bouwen en testen
4 Praktijkoefening 1: het grep-pakket aanpassen
5 Geavanceerde verpakkingsonderwerpen
6 Pakketten onderhouden in Debian
7 Conclusies
8 Extra praktijkoefeningen
9 Oplossingen voor de praktijkoefeningen
Inleiding tot het maken van Debian-pakketten 4 / 90
Debian
I GNU/Linux distributie
I eerste belangrijke distributie die “openlijk in de geest van GNU”
ontwikkeld werd
I Niet-commercieel, samen gemaakt door meer dan 1.000 vrijwilligers I drie belangrijke kenmerken:
I Kwaliteit – cultuur van technische uitmuntendheid We geven een release vrij wanneer deze klaar is
I Vrijheid – ontwikkelaars en gebruikers zijn gebonden door het Sociaal Contract
Bevorderen van de cultuur van Vrije Software sinds 1993 I Onafhankelijkheid – geen (enkel) bedrijf babysit op Debian
En een open besluitvormingproces (doe-ocratie + democratie) I Liefhebber in de beste betekenis: gedaan uit liefde ervoor
Debian-pakketten
I .deb-bestanden (binaire pakketten)
I Een zeer krachtige en handige manier om software naar gebruikers te brengen
I Een van de twee meest voorkomende pakketformaten (samen met RPM) I Universeel:
I 30.000 binaire pakketten in Debian
→ het merendeel van de beschikbare vrije software wordt in Debian verpakt!
I Voor 12 ports (architecturen), waaronder 2 niet-Linux (Hurd;
KFreeBSD)
I Ook gebruikt door 120 van Debian afgeleide distributies
Inleiding tot het maken van Debian-pakketten 6 / 90
De Deb-pakketindeling
I .deb-bestand: een ar-archief
$ ar tv w g e t _ 1 .12 -2.1 _ i 3 8 6 . deb
rw - r - - r - - 0/0 4 Sep 5 1 5 : 4 3 2 0 1 0 debian - b i n a r y rw - r - - r - - 0/0 2 4 0 3 Sep 5 1 5 : 4 3 2 0 1 0 c o n t r o l . tar . gz rw - r - - r - - 0/0 7 5 1 6 1 3 Sep 5 1 5 : 4 3 2 0 1 0 d a t a . tar . gz
I debian-binary: versie van de deb-bestandsindeling, "2.0\n"
I control.tar.gz: metadata over het pakket
control, md5sums, (pre|post)(rm|inst), triggers, shlibs, . . . I data.tar.gz: data-bestanden van het pakket
I U zou uw .deb-bestanden handmatig kunnen aanmaken
http://tldp.org/HOWTO/html_single/Debian-Binary-Package-Building-HOWTO/
I Maar de meeste mensen doen het niet op die manier
Deze inleiding: Debian-pakketten maken op de manier van Debian
Hulpmiddelen die u nodig heeft
I Een Debian- (of Ubuntu)-systeem (met systeembeheerders-toegang) I Enkele pakketten:
I build-essential: bevat de vereisten van de pakketten waarvan wordt aangenomen dat ze beschikbaar zijn op de machine van de
ontwikkelaar (onnodig om deze te vermelden in het controleveld Build-Depends: van uw pakket)
I waaronder de vereistedpkg-dev, welke basale
Debian-specifieke hulpmiddelen voor het aanmaken van pakketten bevat
I devscripts: bevat veel nuttige scripts voor Debian-onderhouders Veel andere hulpmiddelen zullen ook later vermeld worden, zoalsdebhelper, cdbs, quilt, pbuilder, sbuild, lintian, svn-buildpackage, git-buildpackage, . . .
Installeer deze wanneer u ze nodig heeft.
Inleiding tot het maken van Debian-pakketten 8 / 90
Algemene werkwijze bij het verpakken
Web bovenstroom-broncode Debian spiegelserver
broncodepakket waar het meeste manuele werk gebeurt
één van de vele binaire pakketten .deb dh_make
apt-get source dget
debuild(bouwen en testen metlin- tian) of dpkg-buildpackage
installeren (debi) uploaden (dput)
Voorbeeld: dash opnieuw bouwen
1 Installeer pakketten nodig om dash te bouwen, plus devscripts sudo apt-get build-dep dash
(vereist deb-src-regels in /etc/apt/sources.list)
sudo apt-get install --no-install-recommends devscripts fakeroot
2 Maak een werkmap aan en ga er binnen:
mkdir /tmp/debian-tutorial ; cd /tmp/debian-tutorial
3 Haal het broncodepakket dash op apt-get source dash
(Daarvoor moet u deb-src-regels hebben in uw /etc/apt/sources.list)
4 Bouw het pakket cd dash-*
debuild -us -uc (-us -uc om pakket niet te ondertekenen met GPG)
5 Controleer of het werkte
I Er staan enkele nieuwe .deb-bestanden in de bovenliggende map
6 Bekijk de map debian/
I Daar vindt het verpakkingswerk plaats
Inleiding tot het maken van Debian-pakketten 10 / 90
Overzicht
1 Inleiding
2 Broncodepakketten maken
3 Pakketten bouwen en testen
4 Praktijkoefening 1: het grep-pakket aanpassen
5 Geavanceerde verpakkingsonderwerpen
6 Pakketten onderhouden in Debian
7 Conclusies
8 Extra praktijkoefeningen
9 Oplossingen voor de praktijkoefeningen
Broncodepakket
I Eén broncodepakket kan meerdere binaire pakketten geven
bijv. de broncode libtar genereert de binaire pakketten libtar0 en libtar-dev I Twee soorten pakketten: (gebruik bij twijfel non-native)
I Native (eigen) pakketten: normaal Debian-specifieke software (dpkg, apt) I Non-native (niet-eigen) pakketten: buiten Debian ontwikkelde software I Hoofdbestand: .dsc (meta-gegevens)
I Andere bestanden zijn afhankelijk van de versie van de broncode-indeling I 1.0 of 3.0 (native): pakket_versie.tar.gz
I 1.0 (non-native):
I pkt_ver.orig.tar.gz: bovenstroomse broncode I pkt_debver.diff.gz: patch voor het toevoegen van
Debian-specifieke aanpassingen I 3.0 (quilt):
I pkt_ver.orig.tar.gz: bovenstroomse broncode
I pkt_debver.debian.tar.gz: tar-archief met Debian-wijzigingen (Zie dpkg-source(1) voor exacte details)
Inleiding tot het maken van Debian-pakketten 12 / 90
Voorbeeld broncodepakket (wget_1.12-2.1.dsc)
F o r m a t : 3.0 ( q u i l t ) S o u r c e : wg et
B i n a r y : wg et A r c h i t e c t u r e : any V e r s i o n : 1.1 2 - 2.1
M a i n t a i n e r : N oel K o t h e < n o e l @ d e b i a n . org >
H o m e p a g e : htt p :// www . gnu . org / s o f t w a r e / wge t / S t a n d a r d s - V e r s i o n : 3 . 8 . 4
Build - D e p e n d s : d e b h e l p e r ( > > 5.0.0) , gettext , texinfo , libssl - dev ( >= 0.9.8) , dpatch , i n f o 2 m a n
C h e c k s u m s - Sh a1 :
50 d 4 e d 2 4 4 1 e 6 7 [ . . ] 1 e e 0 e 9 4 2 4 8 2 4 6 4 7 4 7 w g e t _ 1 .12 . o rig . tar . gz d 4 c 1 c 8 b b e 4 3 1 d [.. ] d d 7 c e f 3 6 1 1 4 8 3 0 8 w g e t _ 1 . 12 -2. 1. d e b i a n . tar . gz C h e c k s u m s - S h a 2 5 6 :
75 78 e d 0 9 7 4 e 1 2 [ ..] d c b a 6 5 b 5 7 2 2 4 6 4 7 4 7 w g e t _ 1 .12 . o rig . tar . gz 1 e 9 b 0 c 4 c 0 0 e a e [ . . ] 8 9 c 4 0 2 a d 7 8 4 8 3 0 8 w g e t _ 1 .12 -2. 1. d e b i a n . tar . gz F i l e s :
1 4 1 4 6 1 b 9 c 0 4 e 4 [ . . ] 9 d 1 f 2 a b f 8 3 2 4 6 4 7 4 7 w g e t _ 1 .12 . o rig . tar . gz e 9 3 1 2 3 c 9 3 4 e 3 c [ . . ] 2 f 3 8 0 2 7 8 c 2 4 8 3 0 8 w g e t _ 1 . 12 -2. 1. d e b i a n . tar . gz
Een bestaand broncodepakket ophalen
I Uit het archief van Debian:
I apt-get source pakket
I apt-get source pakket=versie I apt-get source pakket/release
(U moet deb-src-regels hebben in sources.list) I Van het internet:
I dget url-naar.dsc
I dget http://snapshot.debian.org/archive/debian-archive/
20090802T004153Z/debian/dists/bo/main/source/web/
wget_1.4.4-6.dsc
(snapshot.d.o bevat alle Debian-pakketten sinds 2005) I Van het (opgegeven) versiebeheersysteem:
I debcheckout pakket
I Extraheer na het downloaden met dpkg-source -x file.dsc
Inleiding tot het maken van Debian-pakketten 14 / 90
Een basaal broncodepakket aanmaken
I Download de bovenstroomse broncode
(bovenstroomse broncode = die van de originele softwareontwikkelaars) I Hernoem naar <bron_pakket >_<bovenstroom_versie >.orig.tar.gz
(bijvoorbeeld: simgrid_3.6.orig.tar.gz) I Pak uit
I Hernoem de map naar <bron_pakket >-<bovenstroom_versie >
(voorbeeld: simgrid-3.6)
I cd <bron_pakket >-<bovenstroom_versie > && dh_make (uit het pakketdh-make)
I Er bestaan enkele alternatieven voor dh_make voor specifieke groepen pakketten:dh-make-perl, dh-make-php, . . .
I Er werd een map debian/ aangemaakt met daarin een heleboel bestanden
Bestanden in debian/
Alle verpakkingswerk gebeurt door bestanden in debian/ te wijzigen I Hoofdbestanden:
I control – meta-gegevens over het pakket (vereisten, enz.) I rules – geeft aan hoe het pakket gebouwd moet worden I copyright – auteursrechtinformatie voor het pakket I changelog – geschiedenis van het Debian-pakket I Andere bestanden:
I compat I watch
I dh_install* targets
*.dirs, *.docs, *.manpages, . . . I onderhoudsscripts
*.postinst, *.prerm, . . . I source/format
I patches/ – indien u de bovenstroomse broncode moet aanpassen I Verschillende bestanden hebben een op RFC 822 (mail-kopregels)
gebaseerde indeling
Inleiding tot het maken van Debian-pakketten 16 / 90
debian/changelog
I Vermeldt de Debian verpakkingswijzigingen I Vermeldt de huidige versie van het pakket
1.2.1.1-5
Debian revisie Upstream
versie I Handmatig ingevoerd of bewerkt metdch
I Een changelog-item aanmaken voor een nieuwe release:dch -i I Speciale indeling om automatisch Debian of Ubuntu bugs te sluiten
Debian: Closes: #595268; Ubuntu: LP: #616929
I Geïnstalleerd als /usr/share/doc/pakket /changelog.Debian.gz
m p i c h 2 ( 1 . 2 . 1 . 1 - 5 ) u n s t a b l e ; u r g e n c y = low
* Use / usr / bin / p y t h o n i n s t e a d of / usr / bin / p y t h o n 2 .5. A l l o w to d r o p d e p e n d e n c y on p y t h o n 2 .5. C l o s e s : # 5 9 5 2 6 8
* M a k e / usr / bin / m p d r o o t s e t u i d . T h i s is the d e f a u l t a f t e r the i n s t a l l a t i o n of m p i c h 2 f r o m source , too . LP : # 6 1 6 9 2 9 + Add c o r r e s p o n d i n g l i n t i a n o v e r r i d e .
- - L u c a s N u s s b a u m < l u c a s @ d e b i a n . org > Wed , 15 Sep 2 0 1 0 1 8 : 1 3 : 4 4 + 0 2 0 0
debian/control
I Pakket-metagegevens
I Voor het broncodepakket zelf
I Voor elk binair pakket dat uit deze broncode gebouwd wordt I Pakketnaam, sectie, prioriteit, onderhouder, uploaders, bouw-vereisten,
vereisten, beschrijving, homepagina, . . .
I Documentatie: Debian beleidshandboek hoofdstuk 5
https://www.debian.org/doc/debian-policy/ch-controlfields
S o u r c e : w g e t S e c t i o n : web
P r i o r i t y : i m p o r t a n t
M a i n t a i n e r : N o e l K o t h e < n o e l @ d e b i a n . org >
Build - D e p e n d s : d e b h e l p e r ( > > 5.0.0) , gettext , texinfo , libssl - dev ( >= 0.9.8) , dpatch , i n f o 2 m a n
S t a n d a r d s - V e r s i o n : 3 . 8 . 4
H o m e p a g e : h t t p :// www . gnu . org / s o f t w a r e / w g e t /
P a c k a g e : w g e t A r c h i t e c t u r e : any
D e p e n d s : $ { s h l i b s : D e p e n d s } , $ { m i s c : D e p e n d s } D e s c r i p t i o n : r e t r i e v e s f i l e s f r o m the web
W g e t is a n e t w o r k u t i l i t y to r e t r i e v e f i l e s f r o m the Web
Inleiding tot het maken van Debian-pakketten 18 / 90
Architectuur: all of any
Twee soorten binaire pakketten:
I Pakketten met verschillende inhoud voor elke Debian-architectuur I Bijvoorbeeld: C-programma
I Architecture: any in debian/control
I Of, als het enkel werkt op een deelgroep architecturen:
Architecture: amd64 i386 ia64 hurd-i386
I buildd.debian.org: bouwt alle andere architecturen voor u na het uploaden
I Genaamd pakket _versie _architectuur.deb I Pakketten met dezelfde inhoud op alle architecturen
I Bijvoorbeeld: Perl-bibliotheek
I Architecture: all in debian/control I Genaamd pakket _versie _all.deb
Uit een broncodepakket kan een mengeling van Architecture: any en Architecture: all binaire pakketten gegenereerd worden
debian/rules
I Make-bestand
I Interface die gebruikt wordt om Debian-pakketten te bouwen I Beschreven in Debian beleidshandboek, hoofdstuk 4.8
https://www.debian.org/doc/debian-policy/ch-source#s-debianrules I Vereiste doelen:
I build, build-arch, build-indep: moet alle configuratie en compilatie uitvoeren
I binary, binary-arch, binary-indep: binaire pakketten bouwen I dpkg-buildpackage aanroept binary om alle pakketten te
bouwen of binary-arch om enkel de Architecture: any-pakketten te bouwen I clean: de broncodemap opruimen
Inleiding tot het maken van Debian-pakketten 20 / 90
Verpakkingshulpprogramma’s – debhelper
I U kunt in debian/rules rechtstreeks shell-code schrijven I Zie het pakket rsync voor een voorbeeld
I Beter (voor de meeste pakketten): een verpakkingshulpprogramma I Het populairste is:debhelper (voor 98% van de pakketten gebruikt) I Doelstellingen:
I Gewone taken opnemen in door alle pakketten gebruikt gereedschap I Sommige verpakkingsfouten in eenmaal oplossen voor alle pakketten
dh_installdirs, dh_installchangelogs, dh_installdocs, dh_installexamples, dh_install, dh_installdebconf, dh_installinit, dh_link, dh_strip, dh_compress, dh_fixperms, dh_perl, dh_makeshlibs, dh_installdeb, dh_shlibdeps, dh_gencontrol, dh_md5sums, dh_builddeb, . . .
I Wordt aangeroepen vanuit debian/rules
I Configureerbaar met commandoparameters of bestanden in debian/
pakket.docs, pakket.examples, pakket.install, pakket.manpages, ...
I Hulpprogramma’s van derden voor bepaalde groepen pakketten:
python-support, dh_ocaml, . . .
I Klaar: debian/compat: compatibiliteit met Debhelperversie (gebruik "7")
debian/rules met debhelper (1/2)
#!/ usr / bin / m a k e - f
# V e r w i j d e r c o m m e n t a a r t e k e n om b r e e d s p r a k i g e m o d u s aan te z e t t e n .
# e x p o r t D H _ V E R B O S E =1
b u i l d :
$ ( M A K E )
# docbook - naar - man d e b i a n / p a k k e t n a a m . s g m l > p a k k e t n a a m .1
c l e a n :
d h _ t e s t d i r d h _ t e s t r o o t
rm - f build - s t a m p c o n f i g u r e - s t a m p
$ ( M A K E ) c l e a n d h _ c l e a n
i n s t a l l : b u i l d d h _ t e s t d i r d h _ t e s t r o o t d h _ c l e a n - k d h _ i n s t a l l d i r s
# H i e r c o m m a n d o ’ s v o o r p a k k e t i n s t a l l a t i e in d e b i a n / p a k k e t n a a m .
$ ( M A K E ) D E S T D I R = $ ( C U R D I R )/ d e b i a n / p a k k e t n a a m i n s t a l l
Inleiding tot het maken van Debian-pakketten 22 / 90
debian/rules met debhelper (2/2)
# H i e r a r c h i t e c t u u r - o n a f h a n k e l i j k e b o u w b e s t a n d e n . binary - i n d e p : b u i l d i n s t a l l
# H i e r a r c h i t e c t u u r - a f h a n k e l i j k e b o u w b e s t a n d e n . binary - a r c h : b u i l d i n s t a l l
d h _ t e s t d i r d h _ t e s t r o o t
d h _ i n s t a l l c h a n g e l o g s d h _ i n s t a l l d o c s d h _ i n s t a l l e x a m p l e s d h _ i n s t a l l
d h _ i n s t a l l m a n d h _ l i n k d h _ s t r i p d h _ c o m p r e s s d h _ f i x p e r m s d h _ i n s t a l l d e b d h _ s h l i b d e p s d h _ g e n c o n t r o l d h _ m d 5 s u m s d h _ b u i l d d e b
b i n a r y : binary - i n d e p binary - a r c h
. P H O N Y : b u i l d c l e a n binary - i n d e p binary - a r c h b i n a r y i n s t a l l c o n f i g u r e
CDBS
I Met debhelper is er nog steeds veel redundantie tussen pakketten I Hulpprogramma’s van het tweede niveau met algemene functionaliteit
I Bijv. bouwen met ./configure && make && make install of CMake I CDBS:
I Geïntroduceerd in 2005, gebaseerd op geavanceerde GNU make-magie
I Documentatie: /usr/share/doc/cdbs/
I Ondersteunt Perl, Python, Ruby, GNOME, KDE, Java, Haskell, . . . I Maar sommige mensen haten het:
I Soms moeilijk om het bouwen van pakketten aan te passen:
"kromme puinhoop make-bestanden en omgevingsvariabelen"
I Trager dan debhelper zelf (veel nutteloos aanroepen van dh_*)
#!/ usr / bin / m a k e - f
i n c l u d e / usr / s h a r e / c d b s /1/ r u l e s / d e b h e l p e r . mk i n c l u d e / usr / s h a r e / c d b s /1/ c l a s s / a u t o t o o l s . mk
# een a c t i e t o e v o e g e n na het b o u w e n b u i l d / m i j n p a k k e t ::
/ bin / b a s h d e b i a n / s c r i p t s / foo . sh
Inleiding tot het maken van Debian-pakketten 24 / 90
Dh (ook bekend als Debhelper 7 of dh7)
I Geïntroduceerd in 2008 als een CDBS-doder I dh commando dat dh_* aanroept
I Eenvoudige debian/rules, enkel opsomming overrides (overschrijvingen) I Makkelijker aan te passen dan CDBS
I Doc: man-pagina’s (debhelper(7), dh(1)) + dia’s van DebConf9-presentatie
http://kitenet.net/~joey/talks/debhelper/debhelper-slides.pdf
#!/ usr / bin / m a k e - f
%:
dh $@
o v e r r i d e _ d h _ a u t o _ c o n f i g u r e :
d h _ a u t o _ c o n f i g u r e - - - - with - kitchen - s i n k
o v e r r i d e _ d h _ a u t o _ b u i l d : m a k e w o r l d
Klassieke debhelper vs CDBS vs dh
I Aanhang:
Klassieke debhelper: 15% CDBS: 15% dh: 68%
I Welk moet ik leren?
I Wellicht een beetje van allemaal
I U moet debhelper kennen om dh en CDBS te gebruiken I Mogelijk moet u CDBS-pakketten aanpassen
I Welk moet ik gebruiken voor een nieuw pakket?
I dh (enig hulpmiddel met een groeiende aanhang)
2005 2007 2010 2013 2016
0 20 40 60 80
Jaar
Marktaandeel(%)
debhelper dh CDBS
Inleiding tot het maken van Debian-pakketten 26 / 90
Overzicht
1 Inleiding
2 Broncodepakketten maken
3 Pakketten bouwen en testen
4 Praktijkoefening 1: het grep-pakket aanpassen
5 Geavanceerde verpakkingsonderwerpen
6 Pakketten onderhouden in Debian
7 Conclusies
8 Extra praktijkoefeningen
9 Oplossingen voor de praktijkoefeningen
Pakketten bouwen
I apt-get build-dep mijnpakket
Installeert build-dependencies (voor reeds in Debian aanwezig pakket) Ofmk-build-deps -ir(voor een pakket dat nog niet geüpload werd) I debuild: bouwen, testen met lintian, ondertekenen met GPG I Het is ook mogelijk om rechtstreeksdpkg-buildpackageaan te roepen
I Gewoonlijk met dpkg-buildpackage -us -uc
I Het is best om pakketten te bouwen in een zuivere & minimale omgeving I pbuilder– hulpprogramma om een pakket te bouwen in een chroot Goede documentatie: https://wiki.ubuntu.com/PbuilderHowto (optimalisatie:cowbuilder ccache distcc)
I schrootensbuild: gebruikt op de Debian bouwachtergronddiensten (minder eenvoudig dan pbuilder, wel LVM-momentopname mogelijk zie: https://help.ubuntu.com/community/SbuildLVMHowto ) I Genereert .deb-bestanden en een .changes-bestand
I .changes: beschrijft wat gebouwd werd; gebruikt om het pakket te uploaden
Inleiding tot het maken van Debian-pakketten 28 / 90
Pakketten installeren en testen
I Het pakket lokaal installeren:debi(zal gebruik maken van .changes om te weten wat geïnstalleerd moet worden)
I De inhoud van het pakket tonen:debc ../mijnpakket<TAB>.changes I Het pakket vergelijken met een eerdere versie:
debdiff ../mijnpakket_1_*.changes ../mijnpakket_2_*.changes of om de broncode te vergelijken:
debdiff ../mijnpakket_1_*.dsc ../mijnpakket_2_*.dsc I Het pakket controleren met lintian (statische analysator):
lintian ../mijnpakket<TAB>.changes
lintian -i: geeft meer informatie over de fouten lintian -EviIL +pedantic: toont meer problemen
I Het pakket naar Debian uploaden (dput) (daarvoor is configuratie nodig) I Een persoonlijk Debian-archief beheren metrepreproofaptly
Documentatie:
https://wiki.debian.org/HowToSetupADebianRepository
Overzicht
1 Inleiding
2 Broncodepakketten maken
3 Pakketten bouwen en testen
4 Praktijkoefening 1: het grep-pakket aanpassen
5 Geavanceerde verpakkingsonderwerpen
6 Pakketten onderhouden in Debian
7 Conclusies
8 Extra praktijkoefeningen
9 Oplossingen voor de praktijkoefeningen
Inleiding tot het maken van Debian-pakketten 30 / 90
Praktijkoefening 1: het grep-pakket aanpassen
1 Ga naar http://ftp.debian.org/debian/pool/main/g/grep/ en download versie 2.12-2 van het pakket
I Indien het broncodepakket niet automatisch uitgepakt wordt, pak het dan uit met dpkg-source -x grep_*.dsc
2 Bekijk de bestanden in debian/.
I Hoeveel binaire pakketten worden uit dit bronpakket gegenereerd?
I Welk verpakkingshulpprogramma wordt gebruikt voor dit pakket?
3 Bouw het pakket
4 Nu gaan we het pakket aanpassen. Voeg een changelog-item toe en verhoog het versienummer.
5 Schakel ondersteuning voor perl-regexp uit (is een ./configure-optie)
6 Bouw het pakket nogmaals
7 Vergelijk het originele en het nieuwe pakket met debdiff
8 Installeer het nieuwgebouwde pakket
Overzicht
1 Inleiding
2 Broncodepakketten maken
3 Pakketten bouwen en testen
4 Praktijkoefening 1: het grep-pakket aanpassen
5 Geavanceerde verpakkingsonderwerpen
6 Pakketten onderhouden in Debian
7 Conclusies
8 Extra praktijkoefeningen
9 Oplossingen voor de praktijkoefeningen
Inleiding tot het maken van Debian-pakketten 32 / 90
debian/copyright
I Copyright- en licentie-informatie in verband met broncode en verpakking I Traditioneel geschreven als een tekstbestand
I Nieuwe machine-leesbare indeling:
https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
F o r m a t : h t t p s :// www . d e b i a n . org / doc / p a c k a g i n g - m a n u a l s / c o p y r i g h t - f o r m a t / 1 . 0 / U p s t r e a m - N a m e : X S o l i t a i r e
S o u r c e : ftp :// ftp . e x a m p l e . com / pub / g a m e s F i l e s : *
C o p y r i g h t : C o p y r i g h t 1 9 9 8 J o h n Doe < j d o e @ e x a m p l e . com >
L i c e n s e : GPL -2+
Dit p r o g r a m m a is v r i j e s o f t w a r e ; u mag het v e r s p r e i d e n [ . . . ]
.
Op Debian - s y s t e m e n is de v o l l e d i g e t e k s t van de GNU G e n e r a l P u b l i c L i c e n s e v e r s i e 2 te v i n d e n in het b e s t a n d
‘/ usr / s h a r e / common - l i c e n s e s / GPL -2 ’.
F i l e s : d e b i a n /*
C o p y r i g h t : C o p y r i g h t 1 9 9 8 J a n e S m i t h < j s m i t h @ e x a m p l e . net >
L i c e n s e :
[ L I C E N T I E T E K S T ]
De bovenstroomse broncode aanpassen
Vaak nodig:
I Bugs repareren of Debian-specifieke aanpassingen toevoegen I Reparaties uit een recentere bovenstroomse versie naar een eerdere
versie overbrengen (backport) Verschillende manieren om dit te doen:
I De bestanden rechtstreeks wijzigen I Eenvoudig
I Maar geen mogelijkheid om de wijzigingen bij te houden en te documenteren
I Patch-systemen gebruiken
I Maakt het makkelijker om uw aanpassingen terug te koppelen naar de bovenstroomse ontwikkelaar
I Helpt het delen van de reparaties met afgeleide distributies I Geeft meer zicht op de veranderingen
http://patch-tracker.debian.org/ (momenteel uitgezet)
Inleiding tot het maken van Debian-pakketten 34 / 90
Patch-systemen
I Principe: wijzigingen worden als patches opgeslagen in debian/patches/
I Toegepast of niet toegepast tijdens het bouwen
I Vroeger: meerdere toepassingen – simple-patchsys (cdbs), dpatch,quilt I Elk van hen ondersteunt twee debian/rules-targets:
I debian/rules patch: alle patches toepassen I debian/rules unpatch: geen patches toepassen
I Meer documentatie: https://wiki.debian.org/debian/patches I Nieuwe bronpakketindeling met ingebouwd patch-systeem: 3.0
(quilt)
I Aanbevolen werkwijze I U moet quilt leren
https://perl-team.pages.debian.net/howto/quilt.html I Patch-systeem-agnostisch hulpmiddel in devscripts: edit-patch
Documentatie van patches
I Standaard kopregels bij het begin van de patch
I Gedocumenteerd in DEP-3 - Richtlijnen voor het merken van patches http://dep.debian.net/deps/dep3/
D e s c r i p t i o n : S n e l h e i d van m o r r e l e n met w i d g e t s r e p a r e r e n Te s n e l m o r r e l e n met w i d g e t s gaf e x p l o s i e g e v a a r .
F o r w a r d e d : h t t p :// l i s t s . e x a m p l e . com / 2 0 1 0 / 0 3 / 1 2 3 4 . h t m l A u t h o r : J o h n Doe < johndoe - g u e s t @ u s e r s . a l i o t h . d e b i a n . org >
Applied - U p s t r e a m : 1.2 , h t t p :// bzr . foo . com / f r o b n i c a t o r / r e v i s i o n / 1 2 3 Last - U p d a t e : 2010 -03 -29
- - - a / src / w i d g e t s . c +++ b / src / w i d g e t s . c
@@ -101 ,9 +101 ,6 @@ s t r u c t {
Inleiding tot het maken van Debian-pakketten 36 / 90
Dingen doen tijdens installatie en verwijdering
I Het pakket uitpakken volstaat soms niet
I Systeemgebruikers maken/verwijderen, diensten starten/stoppen, alternatives beheren
I Gebeurt in maintainerscripts
preinst, postinst, prerm, postrm
I Met debhelper kan men fragmenten voor algemene acties genereren I Documentatie:
I Debian Beleidshandboek, hoofdstuk 6
https://www.debian.org/doc/debian-policy/ch-maintainerscripts
I Debian Referentiehandleiding voor ontwikkelaars, hoofdstuk 6.4
https://www.debian.org/doc/developers-reference/best-pkging-practices.html
I https://people.debian.org/~srivasta/MaintainerScripts.html
I De gebruiker een vraag stellen I Moet metdebconf gebeuren
I Documentatie: debconf-devel(7) (pakket debconf-doc)
Bovenstroomse versies volgen
I Waar gekeken moet worden, opgeven in debian/watch (zie uscan(1))
v e r s i o n =3
h t t p :// t m r c . mit . edu / m i r r o r / t w i s t e d / T w i s t e d /(\ d \.\ d )/ \ Twisted - ( [ \ d \ . ] * ) \ . tar \. bz2
I Er zijn geautomatiseerde volgers van nieuwe bovenstroomse versies, welke de onderhouder via verschillende instrumentenborden informeren, zoals https://tracker.debian.org/ en https://udd.debian.org/dmd/
I uscan: een handmatige controle uitvoeren
I uupdate: uw pakket proberen opwaarderen naar de laatste bovenstroomse versie
Inleiding tot het maken van Debian-pakketten 38 / 90
Verpakken met een versiecontrolesysteem
I Diverse middelen beheren aftakkingen en tags voor uw verpakkingswerk:
svn-buildpackage, git-buildpackage I Bijvoorbeeld: git-buildpackage
I upstream-tak om bovenstroom te volgen met upstream/versie -tags I master-tak volgt het Debian-pakket
I debian/versie -tags voor elke upload
I pristine-tar-tak om bovenstroom-tarball te kunnen herbouwen Doc: http://honk.sigxcpu.org/projects/git-buildpackage/
manual-html/gbp.html
I Vcs-*-velden in debian/control om het archief te vinden I https://wiki.debian.org/Salsa
Vcs - B r o w s e r : h t t p s :// s a l s a . d e b i a n . org / d e b i a n / d e v s c r i p t s Vcs - Git : h t t p s :// s a l s a . d e b i a n . org / d e b i a n / d e v s c r i p t s . git
Vcs - B r o w s e r : h t t p s :// s a l s a . d e b i a n . org / perl - t e a m / m o d u l e s / p a c k a g e s / libwww - p e r l Vcs - Git : h t t p s :// s a l s a . d e b i a n . org / perl - t e a m / m o d u l e s / p a c k a g e s / libwww - p e r l . git
I VCS-agnostische interface: debcheckout, debcommit, debrelease I debcheckout grep → haalt het broncodepakket op uit Git
Pakketten geschikt maken voor een eerdere release (backport)
I Bedoeling: een recentere versie van een pakket op een ouder systeem gebruiken
bijv. mutt uit Debian unstable gebruiken op Debian stable I Algemeen idee:
I Het broncodepakket uit Debian unstable nemen
I Het aanpassen zodat het gebouwd kan worden en goed werkt op Debian stable
I Soms onbeduidend (geen aanpassingen nodig) I Soms moeilijk
I Soms onmogelijk (veel niet-beschikbare vereisten) I Sommige van deze zogenaamde backports worden door het
Debian-project ondersteund en ter beschikking gesteld http://backports.debian.org/
Inleiding tot het maken van Debian-pakketten 40 / 90
Overzicht
1 Inleiding
2 Broncodepakketten maken
3 Pakketten bouwen en testen
4 Praktijkoefening 1: het grep-pakket aanpassen
5 Geavanceerde verpakkingsonderwerpen
6 Pakketten onderhouden in Debian
7 Conclusies
8 Extra praktijkoefeningen
9 Oplossingen voor de praktijkoefeningen
Debian-archief en suites
security stable-updates stable
oldstable archive.d.o
backports stable-proposed-updates
stable-new testing unstable
experimental
testing-proposed-updates ontwikkelaar
veiligheidsteam
stable release stable
tussen- release
uploads van pakketten pakketbewegingen tussen suites ontwikkeling test intern productie
voorbereiding van volgende release stable
release- beheer
Gebaseerd op een diagram van Antoine Beaupré. https://salsa.debian.org/debian/package- cycle
Inleiding tot het maken van Debian-pakketten 42 / 90
Ontwikkelingssuites
I Nieuwe pakketversies worden geüpload naarunstable (sid) I Pakketten verschuiven vanunstable naar testing op basis van
verschillende criteria (bijv. was gedurende 10 dagen in unstable zonder regressies)
I Nieuwe pakketten kunnen ook geüpload worden naar:
I experimental (voor meer experimentele pakketten, zoals wanneer de nieuwe versie niet klaar is om die welke nu in unstable zit, te
vervangen)
I testing-proposed-updates, om de versie in testing te updaten zonder viaunstable te gaan (dit wordt zelden gebruikt)
Bevriezen en uitbrengen
I Op een gegeven moment in de release-cyclus neemt het release-team de beslissing om testing te bevriezen: automatische verschuivingen van unstable naar testing worden gestopt en vervangen door een handmatig nazicht
I Wanneer het release-teamtesting klaar voor release beschouwt:
I De suitetesting wordt de nieuwe suite stable I Op dezelfde wijze wordt het oudestable oldstable I Niet-ondersteunde releases worden verplaatst naar
archive.debian.org
I Zie https://release.debian.org/
Inleiding tot het maken van Debian-pakketten 44 / 90
Stable release suites and management
I Verschillende suites stellen pakketten uit stable ter beschikking:
I stable: de hoofdsuite
I security suite met updates welke ter beschikking gesteld wordt op security.debian.org, gebruikt door het veiligheidsteam. Updates worden aangekondigd op de mailinglijst debian-security-announce I stable-updates: geen veiligheidsupdates, maar die toch met spoed
geïnstalleerd moeten worden (zonder te wachten op de volgende tussenrelease): antivirusdatabases, tijdzonegerelateerde pakketten, enz. Aangekondigd op de mailinglijst debian-stable-announce I backports: nieuwe upstream-versie, gebaseerd op de testing-versie I De suitestable wordt om de enkele maanden geüpdatet via
tussenreleases van stable (dit betreft enkel bugreparaties)
I Pakketten voor de volgende stable-tussenrelease worden geüpload naarstable-proposed-updates en nagezien door het releaseteam I De releaseoldstable heeft dezelfde reeks suites
Verschillende wijzen van bijdragen aan Debian
I Slechtste manier om bij te dragen:
1 Uw eigen toepassing verpakken
2 Deze in Debian binnenbrengen
3 Verdwijnen
I Bettere manieren om bij te dragen:
I Meewerken met verpakkingsteams
I Veel teams focussen op een reeks pakketten en zoeken hulp I Lijst te vinden op https://wiki.debian.org/Teams
I Excellente manier om te leren van meer ervaren medewerkers I Bestaande niet-onderhouden pakketten adopteren (verweesde
pakketten)
I Nieuwe software binnenbrengen in Debian
I Liefst enkel wanneer deze voldoende interessant/bruikbaar is I Bestaan er reeds voor Debian verpakte alternatieven?
Inleiding tot het maken van Debian-pakketten 46 / 90
Verweesde pakketten adopteren
I Veel niet-onderhouden pakketten in Debian
I Volledige lijst + proces: https://www.debian.org/devel/wnpp/
I Geïnstalleerd op uw computer: wnpp-alert Of beter: how-can-i-help
I Verschillende toestanden:
I Orphaned (Verweesd): het pakket wordt niet onderhouden U mag het gerust adopteren
I RFA: Request For Adopter (Adoptant gevraagd)
Onderhouder zoekt een adoptant, maar blijft intussen verder werken Adopteer het gerust. Een e-mail naar de huidige onderhouder is beleefd I ITA: Intent To Adopt (Adoptie-intentie)
Iemand is zinnens het pakket te adopteren. Bied uw hulp aan!
I RFH: Request For Help (Hulp gevraagd) De onderhouder is op zoek naar hulp
I Niet-gedetecteerde niet-onderhouden pakketten → nog niet verweesd I Bij twijfel navragen op debian-qa@lists.debian.org
of #debian-qa op irc.debian.org
Een pakket adopteren: een voorbeeld
F r o m : Jij < j i j @ j o u w d o m e i n >
To : 6 4 0 4 5 4 @ b u g s . d e b i a n . org , c o n t r o l @ b u g s . d e b i a n . org Cc : F r a n c o i s M a r i e r < f r a n c o i s @ d e b i a n . org >
S u b j e c t : ITA : v e r b i s t e - - F r e n c h c o n j u g a t o r
r e t i t l e 6 4 0 4 5 4 ITA : v e r b i s t e - - F r e n c h c o n j u g a t o r o w n e r 6 4 0 4 5 4 !
t h a n k s
Hi ,
I am u s i n g v e r b i s t e and I am w i l l i n g to t a k e c a r e of the p a c k a g e .
Cheers ,
Jij
I Het is beleefd om de vroegere onderhouder te contacteren (in het
bijzonder wanneer het een RFA betreft en het pakket niet verweesd werd) I Zeer goede gewoonte om het bovenstrooms project te contacteren
Inleiding tot het maken van Debian-pakketten 48 / 90
Uw pakket in Debian krijgen
I Geen enkele officiële status nodig om uw pakket in Debian te krijgen
1 Dien eenITP-bugrapport (Intent To Package) (verpakkingsintentie) in met reportbug wnpp
2 Maak uw broncodepakket klaar
3 Zoek een ontwikkelaar van Debian die uw pakket zal sponsoren I Officiële status (wanneer u een ervaren pakketonderhouder bent):
I Debian Maintainer (DM) (onderhouder van Debian):
Toelating om uw eigen pakketten te uploaden Zie https://wiki.debian.org/DebianMaintainer I Debian Developer (DD) (ontwikkelaar van Debian):
Lid van het Debian-project; kan stemmen en elk pakket uploaden
Te controleren zaken voor u sponsoring vraagt
I Debian besteedtveel aandacht aan kwaliteit
I Algemeenzijn sponsors moeilijk te vinden en hebben het druk I Zorg ervoor dat uw pakket klaar is voor u om sponsoring vraagt I Te controleren zaken:
I Vermijd ontbrekende build-dependencies: zorg ervoor dat uw pakket probleemloos kan gebouwd worden in een zuivere sid chroot
I Het gebruik van pbuilder is aanbevolen
I Voer het commando lintian -EviIL +pedantic uit op uw pakket I Fouten moeten hersteld worden, alle ander problemen zouden
opgelost moeten worden I Test uiteraard uitgebreid uw pakket I Vraag bij twijfel hulp
Inleiding tot het maken van Debian-pakketten 50 / 90
Waar vindt u hulp?
Hulp die u nodig zult hebben:
I Advies en antwoorden op uw vragen, nazicht van code I Sponsoring voor uw uploads wanneer uw pakket klaar is U kunt hulp krijgen bij:
I Andere leden van een verpakkingsteam
I Lijst van teams: https://wiki.debian.org/Teams
I De groepDebian Mentors (indien uw pakket niet bij een team past) I https://wiki.debian.org/DebianMentorsFaq
I Mailinglijst: debian-mentors@lists.debian.org (ook een goede manier om al doende te leren) I IRC: #debian-mentors op irc.debian.org I http://mentors.debian.net/
I Documentatie: http://mentors.debian.net/intro-maintainers I Gelokaliseerde mailinglijsten (hulp krijgen in uw eigen taal)
I debian-devel-{french,italian,portuguese,spanish}@lists.d.o I Basislijst: https://lists.debian.org/devel.html
I Of gebruikerslijsten: https://lists.debian.org/users.html
Meer documentatie
I Ontwikkelaarshoek van Debian https://www.debian.org/devel/
Links naar veel informatiebronnen over de ontwikkeling van Debian I Gids voor onderhouders van Debian
https://www.debian.org/doc/manuals/debmake-doc/
I Referentiehandleiding voor ontwikkelaars van Debian https://www.debian.org/doc/developers-reference/
Hoofdzakelijk over werkwijzen van Debian, maar ook sommige goede verpakkingsmethodes (deel 6)
I Debian beleidshandboek
https://www.debian.org/doc/debian-policy/
I Alle vereisten waaraan een pakket moet voldoen I Specifieke beleidsrichtlijnen voor Perl, Java, Python, . . . I Verpakkingshandleiding voor Ubuntu
http://developer.ubuntu.com/resources/tools/packaging/
Inleiding tot het maken van Debian-pakketten 52 / 90
Instrumentenborden voor Debian-onderhouders
I Toegespitst op broncodepakket:
https://tracker.debian.org/dpkg
I Toegespitst op onderhouder/team: Developer’s Packages Overview (DDPO - Pakketoverzicht voor ontwikkelaars)
https://qa.debian.org/developer.php?login=
pkg-ruby-extras-maintainers@lists.alioth.debian.org I TODO-lijst georiënteerd: Debian Maintainer Dashboard (DMD)
https://udd.debian.org/dmd/
Het Debian Bug Tracking System (BTS) gebruiken
I Bugvolgsysteem - Een vrij unieke manier voor bugbeheer I Webinterface voor het bekijken van bugs
I E-mailinterface om veranderingen aan te brengen aan bugs I Information toevoegen aan bugs:
I Schrijf naar 123456@bugs.debian.org (sluit de indiener niet in, voeg daarvoor 123456-submitter@bugs.debian.org toe)
I De toestand van een bug wijzigen:
I Stuur commando’s naar control@bugs.debian.org I Commandoregelinterface: bts-commando in devscripts
I Documentatie: https://www.debian.org/Bugs/server-control I Bugs rapporteren: gebruik reportbug
I Gewoonlijk gebruikt met een lokale mail-server: installeer ssmtp of nullmailer
I Of gebruik reportbug --template en stuur dan (handmatig) naar submit@bugs.debian.org
Inleiding tot het maken van Debian-pakketten 54 / 90
Het BTS gebruiken: voorbeelden
I Een e-mail sturen naar de bug en de indiener:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=680822#10 I Taggen en de ernst wijzigen:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=680227#10 I Opnieuw toewijzen, de ernst wijzigen, een nieuwe titel geven . . . :
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=680822#93 I notfound, found, notfixed, fixed zijn voor versie-opvolging
Zie https://wiki.debian.org/HowtoUseBTS#Version_tracking I Usertags (gebruikerslabels) gebruiken: https:
//bugs.debian.org/cgi-bin/bugreport.cgi?msg=42;bug=642267 Zie https://wiki.debian.org/bugs.debian.org/usertags I BTS-documentatie:
I https://www.debian.org/Bugs/
I https://wiki.debian.org/HowtoUseBTS
Meer geïnteresseerd in Ubuntu?
I Ubuntu beheert vooral de divergentie met Debian I Geen echte focus op specifieke pakketten
Eerder samenwerking met Debian-teams
I Beveelt meestal aan nieuwe pakketten eerst naar Debian te uploaden https://wiki.ubuntu.com/UbuntuDevelopment/NewPackages I Mogelijk een betere werkwijze:
I U engageren in een Debian-team en fungeren als brug met Ubuntu I De divergentie helpen verkleinen, triage van bugs in Launchpad I Verschillende hulpmiddelen van Debian kunnen behulpzaam zijn:
I De Ubuntu-kolom op het pakketoverzicht voor ontwikkelaars I Ubuntu-vakje in het pakketvolgsysteem
I Bug-e-mails uit launchpad ontvangen via het PTS
Inleiding tot het maken van Debian-pakketten 56 / 90
Overzicht
1 Inleiding
2 Broncodepakketten maken
3 Pakketten bouwen en testen
4 Praktijkoefening 1: het grep-pakket aanpassen
5 Geavanceerde verpakkingsonderwerpen
6 Pakketten onderhouden in Debian
7 Conclusies
8 Extra praktijkoefeningen
9 Oplossingen voor de praktijkoefeningen
Conclusies
I U heeft nu een volledig overzicht over verpakken voor Debian I Maar u zult meer documentatie moeten lezen
I Goede praktijken evolueerden in de loop der jaren I Gebruik bij twijfel het verpakkingshulpprogrammadh
en de indeling3.0 (quilt)
Feedback: packaging-tutorial@packages.debian.org
Inleiding tot het maken van Debian-pakketten 58 / 90
Juridische zaken
Copyright ©2011–2019 Lucas Nussbaum – lucas@debian.org
Dit document is vrije software: u kunt het verder verspreiden en/of wijzigen, onder (volgens uw voorkeur):
I De bepalingen van de GNU General Public License, zoals gepubliceerd door de Free Software Foundation, versie 3 of (volgens uw goeddunken) een recentere versie.
http://www.gnu.org/licenses/gpl.html
I De bepalingen van de Creative Commons Attribution-ShareAlike 3.0 Unported License.
http://creativecommons.org/licenses/by-sa/3.0/
Meewerken aan deze handleiding
I Meewerken:
I apt-get source packaging-tutorial I debcheckout packaging-tutorial I git clone
https://salsa.debian.org/debian/packaging-tutorial.git I https://salsa.debian.org/debian/packaging-tutorial I Open bugs: bugs.debian.org/src:packaging-tutorial I Feedback geven:
I mailto:packaging-tutorial@packages.debian.org
I Wat zou nog toegevoegd moeten worden aan deze handleiding?
I Wat zou verbeterd moeten worden?
I reportbug packaging-tutorial
Inleiding tot het maken van Debian-pakketten 60 / 90
Overzicht
1 Inleiding
2 Broncodepakketten maken
3 Pakketten bouwen en testen
4 Praktijkoefening 1: het grep-pakket aanpassen
5 Geavanceerde verpakkingsonderwerpen
6 Pakketten onderhouden in Debian
7 Conclusies
8 Extra praktijkoefeningen
9 Oplossingen voor de praktijkoefeningen
Praktijkoefening 2: GNUjump verpakken
1 Download GNUjump 1.0.8 van
http://ftp.gnu.org/gnu/gnujump/gnujump-1.0.8.tar.gz
2 Creëer er een Debian-pakket voor
I De build-dependencies installeren, zodat u het pakket kunt bouwen I Bugs repareren
I Een basaal werkend pakket bekomen
I Afronden met het invullen van debian/control en andere bestanden
3 Veel plezier
Inleiding tot het maken van Debian-pakketten 62 / 90
Praktijkoefening 2: GNUjump verpakken (tips)
I Gebruik dh_make om een basaal werkend pakket te bekomen
I Om te beginnen is het creëren van een 1.0 broncodepakket makkelijker dan 3.0 (quilt) (pas dat aan in debian/source/format)
I Ontbrekende bouwvereisten (build-dependencies) vinden: zoek welk bestand ontbreekt en gebruik apt-file om ontbrekende pakket te vinden I Indien u op de volgende foutmelding stoot:
/ usr / bin / ld : S D L _ r o t o z o o m . o : u n d e f i n e d r e f e r e n c e to s y m b o l ’ c e i l @ @ G L I B C _ 2 .2.5 ’ // lib / x86_64 - linux - gnu / l i b m . so .6: e r r o r a d d i n g s y m b o l s : DSO m i s s i n g f r o m c o m m a n d l i n e c o l l e c t 2 : e r r o r : ld r e t u r n e d 1 e x i t s t a t u s
M a k e f i l e : 3 7 6 : r e c i p e for t a r g e t ’ gnujump ’ f a i l e d
moet u -lm toevoegen aan de commandoregel voor de linker:
Bewerk src/Makefile.am en vervang
g n u j u m p _ L D F L A G S = $ ( a l l _ l i b r a r i e s )
door
g n u j u m p _ L D F L A G S = - Wl , - - as - n e e d e d g n u j u m p _ L D A D D = $ ( a l l _ l i b r a r i e s ) - lm
En geef daarna het commando autoreconf -i
Praktijkoefening 3: een Java-bibliotheek verpakken
1 Bekijk snel enige documentatie over het verpakken van Java:
I https://wiki.debian.org/Java
I https://wiki.debian.org/Java/Packaging
I https://www.debian.org/doc/packaging-manuals/java-policy/
I /usr/share/doc/javahelper/tutorial.txt.gz
2 Download IRClib van http://moepii.sourceforge.net/
3 Verpak het
Inleiding tot het maken van Debian-pakketten 64 / 90
Praktijkoefening 4: een Ruby gem verpakken
1 Bekijk snel enige documentatie over het verpakken van Ruby:
I https://wiki.debian.org/Ruby I https://wiki.debian.org/Teams/Ruby
I https://wiki.debian.org/Teams/Ruby/Packaging I gem2deb(1), dh_ruby(1) (in het pakket gem2deb)
2 Maak een basaal Debian-broncodepakket van de peach-gem:
gem2deb peach
3 Verbeter het, zodat het een volwaardig Debian-pakket wordt
Praktijkoefening 5: een Perl-module verpakken
1 Bekijk snel enige documentatie over het verpakken van Perl:
I https://perl-team.pages.debian.net
I https://wiki.debian.org/Teams/DebianPerlGroup I dh-make-perl(1), dpt(1) (in het pakket pkg-perl-tools)
2 Maak een basaal Debian-broncodepakket van de Acme CPAN-distributie:
dh-make-perl --cpan Acme
3 Verbeter het, zodat het een volwaardig Debian-pakket wordt
Inleiding tot het maken van Debian-pakketten 66 / 90
Overzicht
1 Inleiding
2 Broncodepakketten maken
3 Pakketten bouwen en testen
4 Praktijkoefening 1: het grep-pakket aanpassen
5 Geavanceerde verpakkingsonderwerpen
6 Pakketten onderhouden in Debian
7 Conclusies
8 Extra praktijkoefeningen
9 Oplossingen voor de praktijkoefeningen
Oplossingen voor de praktijkoefeningen
Inleiding tot het maken van Debian-pakketten 68 / 90
Praktijkoefening 1: het grep-pakket aanpassen
1 Ga naar http://ftp.debian.org/debian/pool/main/g/grep/ en download versie 2.12-2 van het pakket
2 Bekijk de bestanden in debian/.
I Hoeveel binaire pakketten worden uit dit bronpakket gegenereerd?
I Welk verpakkingshulpprogramma wordt gebruikt voor dit pakket?
3 Bouw het pakket
4 Nu gaan we het pakket aanpassen. Voeg een changelog-item toe en verhoog het versienummer.
5 Schakel ondersteuning voor perl-regexp uit (is een ./configure-optie)
6 Bouw het pakket nogmaals
7 Vergelijk het originele en het nieuwe pakket met debdiff
8 Installeer het nieuwgebouwde pakket
De broncode ophalen
1 Ga naar http://ftp.debian.org/debian/pool/main/g/grep/ en download versie 2.12-2 van het pakket
I Gebruik dget om het .dsc-bestand te downloaden:
dget http://cdn.debian.net/debian/pool/main/g/grep/grep_2.12-2.dsc I Indien u een deb-src-regel heeft voor een release van Debian met daarin
grep versie 2.12-2 (zoek dit uit op https://tracker.debian.org/grep), kunt u apt-get source grep=2.12-2 gebruiken
of apt-get source grep/release (bijv. grep/stable) of, indien u geluk heeft: apt-get source grep
I Het broncodepakket grep bestaat uit drie bestanden:
I grep_2.12-2.dsc
I grep_2.12-2.debian.tar.bz2 I grep_2.12.orig.tar.bz2
Dit is typerend voor de indeling "3.0 (quilt)".
I Pak indien nodig de broncode uit met dpkg-source -x grep_2.12-2.dsc
Inleiding tot het maken van Debian-pakketten 70 / 90
Rondkijken en het pakket bouwen
2 Bekijk de bestanden in debian/
I Hoeveel binaire pakketten worden uit dit bronpakket gegenereerd?
I Welk verpakkingshulpprogramma wordt gebruikt voor dit pakket?
I Volgens debian/control wordt uit dit pakket slechts één binair pakket gegenereerd, genaamd grep.
I Volgens debian/rules is dit pakket typerend voor een klassiek verpakken met debhelper zonder CDBS of dh te gebruiken. Men kan de
verschillende aanroepen van dh_*-commando’s zien in debian/rules.
3 Bouw het pakket
I Gebruik apt-get build-dep grep om de build-dependencies (bouwvereisten) op te halen
I Daarna debuild of dpkg-buildpackage -us -uc (Neemt ongeveer 1 min in beslag)
Het changelog-bestand bewerken
4 Nu gaan we het pakket aanpassen. Voeg een changelog-item toe en verhoog het versienummer.
I debian/changelog is a tekstbestand. U kunt het handmatig bewerken om er een nieuw item aan toe te voegen.
I Of u kunt dch -i gebruiken, wat een item zal toevoegen en de editor zal openen
I De naam en e-mail kunnen gedefinieerd worden met de omgevingsvariabelen DEBFULLNAME en DEBEMAIL
I Bouw nadien het pakket opnieuw: een nieuwe versie van het pakket wordt gebouwd
I Het versiebeheer van pakketten wordt uitgelegd in sectie 5.6.12 van het beleidshandboek van Debian
https://www.debian.org/doc/debian-policy/ch-controlfields
Inleiding tot het maken van Debian-pakketten 72 / 90
Perl-regexp-ondersteuning uitzetten en herbouwen
5 Schakel ondersteuning voor perl-regexp uit (is een ./configure-optie)
6 Bouw het pakket nogmaals
I Controleer met ./configure --help: de optie om Perl regexp uit te zetten is --disable-perl-regexp
I Bewerk debian/rules en zoek de regel ./configure I Voeg --disable-perl-regexp toe
I Bouw opnieuw met debuild of dpkg-buildpackage -us -uc
De pakketten vergelijken en testen
7 Vergelijk het originele en het nieuwe pakket met debdiff
8 Installeer het nieuwgebouwde pakket
I Vergelijk de binaire pakketten: debdiff ../*changes I Vergelijk de broncodepakketten: debdiff ../*dsc I Installeer het net gebouwde pakket: debi
Of dpkg -i ../grep_<TAB>
I grep -P foo werkt niet langer!
Herinstalleer de vroegere versie van het pakket:
I apt-get install --reinstall grep=2.6.3-3 (= vroegere versie)
Inleiding tot het maken van Debian-pakketten 74 / 90
Praktijkoefening 2: GNUjump verpakken
1 Download GNUjump 1.0.8 van
http://ftp.gnu.org/gnu/gnujump/gnujump-1.0.8.tar.gz
2 Creëer er een Debian-pakket voor
I De build-dependencies installeren, zodat u het pakket kunt bouwen I Een basaal werkend pakket bekomen
I Afronden met het invullen van debian/control en andere bestanden
3 Veel plezier
Stap voor stap. . .
I wget http://ftp.gnu.org/gnu/gnujump/gnujump-1.0.8.tar.gz I mv gnujump-1.0.8.tar.gz gnujump_1.0.8.orig.tar.gz
I tar xf gnujump_1.0.8.orig.tar.gz I cd gnujump-1.0.8/
I dh_make -f ../gnujump-1.0.8.tar.gz I Type pakket: enkel binair (momenteel) gnujump - 1 . 0 . 8 $ ls d e b i a n /
c h a n g e l o g g n u j u m p . d e f a u l t . ex p r e i n s t . ex c o m p a t g n u j u m p . doc - bas e . EX p r e r m . ex c o n t r o l in it . d . ex R E A D M E . D e b i a n c o p y r i g h t m a n p a g e .1. ex R E A D M E . s o u r c e
do cs m a n p a g e . sg ml . ex r u l e s
emacsen - i n s t a l l . ex m a n p a g e . xml . ex s o u r c e emacsen - r e m o v e . ex m enu . ex w a t c h . ex emacsen - s t a r t u p . ex p o s t i n s t . ex
g n u j u m p . c ron . d . ex p o s t r m . ex
Inleiding tot het maken van Debian-pakketten 76 / 90
Stap voor stap. . . (2)
I Kijk naar debian/changelog, debian/rules, debian/control (automatisch ingevuld doordh_make)
I In debian/control:
Build-Depends: debhelper (>= 7.0.50 ), autotools-dev
Vermeldt de build-dependencies = pakketten, nodig om pakket te bouwen I Probeer het pakket ongewijzigd te bouwen met debuild (dankzij
dh-magie)
I En voeg build-dependencies toe tot het gebouwd kan worden
I Suggestie: gebruik apt-cache search en apt-file om de pakketten te zoeken
I Voorbeeld:
c h e c k i n g for sdl - c o n f i g ... no
c h e c k i n g for SDL - v e r s i o n >= 1 . 2 . 0 . . . no [ . . . ]
c o n f i g u r e : e r r o r : *** SDL v e r s i o n 1 . 2 . 0 not f o u n d !
→ Voeg libsdl1.2-dev toe aan Build-Depends en installeer het.
I Beter: gebruikpbuilder om in een zuivere omgeving te bouwen
Stap voor stap. . . (3)
I Vereiste build-dependencies zijn libsdl1.2-dev, libsdl-image1.2-dev, libsdl-mixer1.2-dev
I Dan zult u wellicht tegen een andere foutmelding aanlopen:
/ usr / bin / ld : S D L _ r o t o z o o m . o : u n d e f i n e d r e f e r e n c e to s y m b o l ’ c e i l @ @ G L I B C _ 2 .2.5 ’ // lib / x86_64 - linux - gnu / l i b m . so .6: e r r o r a d d i n g s y m b o l s : DSO m i s s i n g f r o m c o m m a n d l i n e c o l l e c t 2 : e r r o r : ld r e t u r n e d 1 e x i t s t a t u s
M a k e f i l e : 3 7 6 : r e c i p e for t a r g e t ’ gnujump ’ f a i l e d
I Dit probleem wordt veroorzaakt door bitrot: gnujump werd niet aangepast na linker-wijzigingen.
I Indien u indelingsversie1.0 voor broncode gebruikt, kunt u de bovenstroomse broncode rechtstreeks aanpassen.
I Bewerk src/Makefile.am en vervang
g n u j u m p _ L D F L A G S = $ ( a l l _ l i b r a r i e s )
door
g n u j u m p _ L D F L A G S = - Wl , - - as - n e e d e d g n u j u m p _ L D A D D = $ ( a l l _ l i b r a r i e s ) - lm
I En geef daarna het commando autoreconf -i
Inleiding tot het maken van Debian-pakketten 78 / 90
Stap voor stap. . . (4)
I Als u broncode-indelingsversie3.0 (quilt) gebruikt, gebruik dan quilt om een patch klaar te maken. (zie https://wiki.debian.org/UsingQuilt)
I export QUILT_PATCHES=debian/patches I mkdir debian/patches
quilt new linker-fixes.patch quilt add src/Makefile.am
I Bewerk src/Makefile.am en vervang
g n u j u m p _ L D F L A G S = $ ( a l l _ l i b r a r i e s )
door
g n u j u m p _ L D F L A G S = - Wl , - - as - n e e d e d g n u j u m p _ L D A D D = $ ( a l l _ l i b r a r i e s ) - lm
I quilt refresh
I Omdat src/Makefile.am gewijzigd werd, is aanroep van autoreconf bij bouwen nodig. Dat automatisch doen met dh kan door dh-aanroep in debian/rules te wijzigen van: dh $ --with autotools-dev naar: dh $ --with autotools-dev --with autoreconf
Stap voor stap. . . (5)
I Nu zou het pakket probleemloos gebouwd moeten kunnen worden.
I Gebruik debc om de inhoud van het gegenereerde pakket op te lijsten en debi om het te installeren en te testen.
I Test het pakket met lintian
I Hoewel het geen strikte vereiste is, is het aanbevolen dat pakketten die naar Debian geüpload worden, lintian-clean zijn
I Meer problemen zijn te vinden met lintian -EviIL +pedantic I Enkele hints:
I Verwijder de bestanden die u niet nodig heeft, uit debian/
I Vul debian/control in
I Installeer het uitvoerbaar programma in /usr/games door dh_auto_configure te overschrijven
I Gebuik hardening-compilatievlaggen voor verhoogde veiligheid.
Zie https://wiki.debian.org/Hardening
Inleiding tot het maken van Debian-pakketten 80 / 90
Stap voor stap. . . (6)
I Vergelijk uw pakket met het pakket dat reeds voor Debian verpakt is:
I Dit splits de gegevensbestanden af in een tweede pakket dat identiek is voor alle architecturen (→ bespaart ruimte in het Debian-archief) I Het installeert een .desktop-bestand (voor het menu van
GNOME/KDE) en geeft het ook een plaats in het Debian-menu I Het repareert enkele kleinere problemen met patches
Praktijkoefening 3: een Java-bibliotheek verpakken
1 Bekijk snel enige documentatie over het verpakken van Java:
I https://wiki.debian.org/Java
I https://wiki.debian.org/Java/Packaging
I https://www.debian.org/doc/packaging-manuals/java-policy/
I /usr/share/doc/javahelper/tutorial.txt.gz
2 Download IRClib van http://moepii.sourceforge.net/
3 Verpak het
Inleiding tot het maken van Debian-pakketten 82 / 90
Stap voor stap. . .
I apt-get install javahelper
I Creëer een basaal broncodepakket: jh_makepkg I Bibliotheek
I Geen
I Standaard vrije compiler/runtime I Kijk naar en repareer debian/*
I dpkg-buildpackage -us -uc of debuild I lintian, debc, enz.
I Vergelijk uw resultaat met het broncodepakket libirclib-java
Praktijkoefening 4: een Ruby gem verpakken
1 Bekijk snel enige documentatie over het verpakken van Ruby:
I https://wiki.debian.org/Ruby I https://wiki.debian.org/Teams/Ruby
I https://wiki.debian.org/Teams/Ruby/Packaging I gem2deb(1), dh_ruby(1) (in het pakket gem2deb)
2 Maak een basaal Debian-broncodepakket van de peach-gem:
gem2deb peach
3 Verbeter het, zodat het een volwaardig Debian-pakket wordt
Inleiding tot het maken van Debian-pakketten 84 / 90
Stap voor stap. . .
gem2deb peach:
I Downloadt het gem van rubygems.org
I Creëert een geschikt .orig.tar.gz-archief en pakt het uit
I Initialiseert een Debian broncodepakket op basis van de gem-metadata I Genaamd ruby-gemnaam
I Tracht het Debian binaire pakket te bouwen (dit kan mislukken) dh_ruby (zit in gem2deb) en voert de Ruby-specifieke taken uit:
I C-uitbreidingen bouwen voor elke Ruby-versie I Bestanden naar hun doelmap kopiëren I shebangs in uitvoerbare scripts updaten
I Testen uitvoeren die gedefinieerd worden in debian/ruby-tests.rb, debian/ruby-tests.rake, of debian/ruby-test-files.yaml, evenals verschillende andere controles
Stap voor stap. . . (2)
Verbeter het gegenereerde pakket:
I Voer debclean uit om de broncodeboom op te ruimen. Kijk naar debian/.
I changelog en compat zouden correct moeten zijn I Bewerk debian/control: verbeter Description
I Schrijf een passend copyright-bestand op basis van de bovenstroomse bestanden
I Bouw het pakket
I Vergelijk uw pakket met het pakket ruby-peach uit het Debian-archief
Inleiding tot het maken van Debian-pakketten 86 / 90
Praktijkoefening 5: een Perl-module verpakken
1 Bekijk snel enige documentatie over het verpakken van Perl:
I https://perl-team.pages.debian.net
I https://wiki.debian.org/Teams/DebianPerlGroup I dh-make-perl(1), dpt(1) (in het pakket pkg-perl-tools)
2 Maak een basaal Debian-broncodepakket van de Acme CPAN-distributie:
dh-make-perl --cpan Acme
3 Verbeter het, zodat het een volwaardig Debian-pakket wordt
Stap voor stap. . .
dh-make-perl --cpan Acme:
I Downloadt het tar-archief uit het CPAN
I Creëert een passend .orig.tar.gz-archief en pakt het uit
I Initialiseert een Debian broncodepakket, gebaseerd op de metagegevens van de distributie
I Genaamd libdistnaam -perl
Inleiding tot het maken van Debian-pakketten 88 / 90
Stap voor stap. . . (2)
Verbeter het gegenereerde pakket:
I debian/changelog, debian/compat, debian/libacme-perl.docs en debian/watch zouden correct moeten zijn
I Bewerk debian/control: verbeter Description en verwijder de standaardtekst onderaan
I Bewerk debian/copyright: verwijder de paragraaf met standaardtekst bovenaan, voeg jaren van copyright toe aan de Files: * stanza