Krav: Kraven från “Paketera från scratch” samt debhelper och dh-make
Som en paketerare kommer du sällan att skapa paket från scratch som vi gjorde i förra avdelningen. Som du kanske förstår är mycket av uppgifterna och informationen i till exempel rules
-filen gemensamt mellan paket. För att göra paketering lättare och mer effektivt kan du använda debhelper för att få hjälp med de här uppgifterna. Debhelper är en uppsättning Perl-skript (alla har ett namn som börjar med dh_) som automatiserar paket-byggandet. Med de här skripten blir det ganska enkelt att bygga Debianpaket.
I det här exemplet kommer vi åter att bygga paketet GNU Hello, men den här gången kommer vi jämföra vårt jobb med Ubuntu-paketet hello-debhelper. Åter igen, skapa en katalog där du kommer arbeta:
mkdir ~/hello-debhelper cd ~/hello-debhelper wget http://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz mkdir ubuntu cd ubuntu
Ladda sedan ner Ubuntus källpaket
apt-get source hello-debhelper cd ..
Precis som i senaste exemplet är det första vi behöver göra att packa upp den ursprungliga (uppströms) tarbollen.
tar -xzvf hello-2.1.1.tar.gz
Istället för att kopiera uppströmstarbollen till hello_2.1.1.orig.tar.gz
som vi gjorde i förra exemplet låter vi dh_make göra jobbet åt oss. Det enda du behöver göra är att döpa om källmappen så att namnet blir i formen <paketnamn>-<version> där paketnamn är skrivet med gemener. I det här exemplet får vi automatiskt en källkatalog med rätt namn när vi untarar tarbollen, så vi behöver bara gå in i den.
cd hello-2.1.1
För att göra den ursprungliga "debianisationen" av källkoden kommer vi att använda dh_make.
dh_make -e din.e-post@adress -f ../hello-2.1.1.tar.gz
dh_make kommer sedan ställa en rad frågor till dig:
Type of package: single binary, multiple binary, library, kernel module or cdbs?
[s/m/l/k/b] s
Maintainer name : Captain Packager
Email-Address : packager@coolness.com
Date : Thu, 6 Apr 2006 10:07:19 -0700
Package Name : hello
Version : 2.1.1
License : blank
Type of Package : Single
Hit <enter> to confirm: Enter
Kör bara dh_make -e en gång. Om du kör det igen efter att ha kört det en första gång kommer det inte att fungera. Om du vill ändra på det eller om du gjorde ett misstag, ta bort källkatalogen och untara uppströmstarbollen igen. Gå sedan in i källkatalogen och försök igen.
När du kör dh_make -e händer två saker:
Filen hello_2.1.1.orig.tar.gz
skapas i katalogen ovanför den du är i.
De grundläggande filerna som behövs i debian/
och många mallfiler (.ex) som kanske behövs skapas.
Programmet Hello är inte särskillt komplicerat, och som vi såg i “Paketera från scratch” krävs det inte mycket mer än de grundläggande filerna för att paketera det. Vi tar därför bort alla .ex
-filer:
cd debian rm *.ex *.EX
För hello behöver du inte heller README.Debian
(en README som är Debian-specifik, inte programmets README), dirs
(används av dh_installdirs för att skapa de kataloger som behövs), docs
(används av dh_installdocs för at installera programmets dokumentation), eller info
(används av dh_installinfo för att installera info-filen) i katalogen debian
. För mer information om dessa filer, läs “Exempelfiler för dh_make”.
Vid det här laget bör du bara ha filerna changelog
, compat
, control
, copyright
och rules
i katalogen debian
. Jämfört med “Paketera från scratch” är den enda nyheten compat
, som är en fil som innehåller versionen på debhelper (i det här fallet 4).
Du behöver justera filen changelog
en smula för att visa att det här paketet heter hello-debhelper, och inte bara hello:
hello-debhelper (2.1.1-1) dapper; urgency=low * Initial release -- Captain Packager <packager@coolness.com> Thu, 6 Apr 2006 10:07:19 -0700
Genom att använda debhelper behöver du i control
bara ändra namnet (byt ut hello mot hello-debhelper) och lägga till debhelper (>= 4.0.0) till fältet Build-Depends i källpaketet. Ubuntus paket för hello-debhelper ser ut såhär:
Source: hello-debhelper Section: devel Priority: extra Maintainer: Capitan Packager <packager@coolness.com> Standards-Version: 3.6.1 Build-Depends: debhelper (>= 4) Package: hello-debhelper Architecture: any Depends: ${shlibs:Depends} Conflicts: hello Provides: hello Replaces: hello Description: The classic greeting, and a good example The GNU hello program produces a familiar, friendly greeting. It allows non-programmers to use a classic computer science tool which would otherwise be unavailable to them. . Seriously, though: this is an example of how to do a Debian package. It is the Debian version of the GNU Project's `hello world' program (which is itself an example for the GNU Project). . This is the same as the hello package, except it uses debhelper to make the deb. Please see debhelper as to what it is.
Vi kan kopiera filen copyright
och skripten postinst
och prerm
från Ubuntus hello-debhelper-paket, eftersom de inte har ändrat sig sedan “Paketera från scratch”. Vi kommer även att kopiera filen rules
så vi kan inspektera den.
cp ../../ubuntu/hello-debhelper-2.1.1/debian/copyright . cp ../../ubuntu/hello-debhelper-2.1.1/debian/postinst . cp ../../ubuntu/hello-debhelper-2.1.1/debian/prerm . cp ../../ubuntu/hello-debhelper-2.1.1/debian/rules.
Den sista filen vi behöver titta på är rules
, där kraften i debhelper-skripten visas. debhelpers version av rules
är något kortare (54 rader jämfört med 72 i versionen från “rules”).
Versionen från debhelper ser ut såhär:
#!/usr/bin/make -f package = hello-debhelper CC = gcc CFLAGS = -g -Wall ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) CFLAGS += -O2 endif #export DH_VERBOSE=1 clean: dh_testdir dh_clean rm -f build -$(MAKE) -i distclean install: build dh_clean dh_installdirs $(MAKE) prefix=$(CURDIR)/debian/$(package)/usr \ mandir=$(CURDIR)/debian/$(package)/usr/share/man \ infodir=$(CURDIR)/debian/$(package)/usr/share/info \ install build: ./configure --prefix=/usr $(MAKE) CC="$(CC)" CFLAGS="$(CFLAGS)" touch build binary-indep: install # There are no architecture-independent files to be uploaded # generated by this package. If there were any they would be # made here. binary-arch: install dh_testdir -a dh_testroot -a dh_installdocs -a NEWS dh_installchangelogs -a ChangeLog dh_strip -a dh_compress -a dh_fixperms -a dh_installdeb -a dh_shlibdeps -a dh_gencontrol -a dh_md5sums -a dh_builddeb -a binary: binary-indep binary-arch .PHONY: binary binary-arch binary-indep clean checkroot
Notera att uppgifter som att testa om du är i rätt katalog (dh_testdir), kontrollera att du bygger paketet med root-rättigheter (dh_testroot), installera dokumentation dh_installdocs och dh_installchangelogs) och städa undan när paketet är byggt (dh_clean) hanteras automatiskt. Många paket som är mycket mer komplicerade än hello har lika små rules
-filer eftersom debhelper-skripten hanterar de flesta uppgifterna. För en komplett lista över debhelper-skript, läs “Lista över debhelper-skript”. De är också väl dokumenterade i sina respektive man-sidor. Det är en användbar övning att läsa man-sidor (de är välskrivna och inte särskillt långa) för vart och ett av hjälpskripten som används i ovastående rules
-fil.
Nu när vi har gått igenom filerna i katalogen debian
för hello-debhelper kan vi bygga käll- och binärpaketen. Vi går först tillbaka till källkatalogen:
cd ..
Nu kan vi bygga källpaketet med debuild, ett skript som kör dpkg-buildpackage:
debuild -S
det binära paketet, med pbuilder:
sudo pbuilder build ../*.dsc
och till slut leta i källpaketet med lintian:
cd .. lintian -i *.dsc