• No results found

Inleiding tot het maken van Debian-pakketten

N/A
N/A
Protected

Academic year: 2022

Share "Inleiding tot het maken van Debian-pakketten"

Copied!
90
0
0

Bezig met laden.... (Bekijk nu de volledige tekst)

Hele tekst

(1)

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

(2)

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

(3)

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

(4)

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

(5)

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

(6)

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

(7)

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

(8)

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

(9)

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)

(10)

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

(11)

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

(12)

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

(13)

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

(14)

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

(15)

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

(16)

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

(17)

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

(18)

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

(19)

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

(20)

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

(21)

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")

(22)

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

(23)

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

(24)

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

(25)

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

(26)

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

(27)

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

(28)

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

(29)

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

(30)

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

(31)

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

(32)

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

(33)

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 ]

(34)

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

(35)

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

(36)

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

(37)

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)

(38)

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

(39)

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

(40)

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

(41)

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

(42)

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

(43)

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)

(44)

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

(45)

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

(46)

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

(47)

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

(48)

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

(49)

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

(50)

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

(51)

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

(52)

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

(53)

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/

(54)

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

(55)

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

(56)

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

(57)

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

(58)

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

(59)

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/

(60)

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

(61)

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

(62)

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

(63)

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

(64)

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

(65)

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

(66)

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

(67)

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

(68)

Oplossingen voor de praktijkoefeningen

Inleiding tot het maken van Debian-pakketten 68 / 90

(69)

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

(70)

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

(71)

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)

(72)

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

(73)

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

(74)

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

(75)

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

(76)

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

(77)

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

(78)

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

(79)

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

(80)

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

(81)

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

(82)

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

(83)

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

(84)

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

(85)

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

(86)

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

(87)

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

(88)

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

(89)

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

Referenties

GERELATEERDE DOCUMENTEN

De extra uren worden per heel klokuur afgeschreven van een pakket 3 – Vlinder De grens van een extra eenheid (kwartier of uur) ligt op 8

 Wanneer het pakket wordt opgezegd, dan komen de uren te vervallen..  Dit pakket is

Wanneer u dus het instal- latieprogramma opstart vanaf een USB-stick in een andere modus dan die welke gebruikt wordt voor het opstarten van een reeds geïnstalleerd systeem op de

BranDweerkazern CharleroI De brandweerkazerne is een iconisch project voor de vernieuwing van Charleroi en is het resultaat van een samenwerking tussen Philippe Samyn &amp;

Waaronder de Boètegewoeëne Boètezitting en dagelijks van 9:00 tot 23:00 uur verschillende programma’s en het beste uit ons rijke archief:.. •

Kan door een ongeval de bestuurder niet meer verder rijden en kan geen van de inzittenden de auto besturen.. Of is sprake van diefstal van

De speler heeft drie keer een norm gehaald van 2600 rating punten, en heeft ook een (virtuele) rating gehad van minimaal 2500 rating punten. Meester (IM): De twee na

Een eventuele uitkering wordt elk jaar geïndexeerd met 3%, voor deze indexatie geldt dan geen maximum bedrag meer. Het verzekerde bedrag mag niet hoger zijn dan 80% van