Paketera med Debhelper
Föregående
Nästa

Paketera med Debhelper

Viktigt

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

Observera

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:

  1. Filen hello_2.1.1.orig.tar.gz skapas i katalogen ovanför den du är i.

  2. 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.

Bygga och ta bort källpaketet

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
Föregående
Nästa
Hem