![]() |
|
Requisiti: I requisiti di la sezione chiamata “Pacchettizzare da zero” con l'aggiunta di debhelper e dh-make |
Come creatore di pacchetti, raramente creerai pacchetti dal nulla come abbiamo fatto nella sezione precedente. Come puoi immaginare, gran parte delle procedure e delle informazioni nel file rules
, per esempio, sono comuni ad altri pacchetti. Per rendere la creazione dei pacchetti più semplice e più efficiente, puoi usare debhelper per agevolare l'esecuzione di queste procedure. Debhelper è una seria di script Perl (con prefisso dh_) che automatizzano il processo della creazione dei pacchetti. Con questi script, creare un pacchetto Debian diventa piuttosto semplice.
In questo esempio, costruiremo ancora il pacchetto GNU Hello, ma questa volta confrontando il nostro lavoro con il pacchetto di Ubuntu hello-debhelper. Ancora una volta, crea una directory di lavoro:
mkdir ~/hello-debhelper cd ~/hello-debhelper
Now, get the source code of GNU Hello from GNU Project's website:
wget http://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz
Quindi, scarica il pacchetto sorgente di Ubuntu:
mkdir ubuntu cd ubuntu apt-get source hello-debhelper cd ..
Come nell'esempio precedente, la prima cosa da fare è scompattare l'archivio sorgente originale (upstream).
tar -xzvf hello-2.1.1.tar.gz
Instead of copying the upstream tarball to
hello_2.1.1.orig.tar.gz
, as we did in the
previous example, we will let dh_make
do the work for us. It will also create a template of the debian/
directory.
The only thing you have to do is rename the source folder, so it is in the form of <packagename>-<version> where packagename is lowercase. In this case, we want to name the package hello-debhelper. So, we rename the directory:
mv hello-2.1.1 hello-debhelper-2.1.1
Now, from the package's directory, run dh_make:
cd hello-debhelper-2.1.1 dh_make -e your.maintainer@address -f ../hello-2.1.1.tar.gz
dh_make will then ask you a series of questions about your package:
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: Invio
![]() |
|
Esegui dh_make -e solo una volta. Se lo esegui nuovamente dopo la prima volta, non funzionerà correttamente. Se vuoi cambiarlo o hai commesso un errore, cancella la directory dei sorgenti e scompatta l'archivio nuovamente. Quindi entra nella directory dei sorgenti e riprova. |
Lanciare dh_make -e effettua due operazioni:
Crea il file hello_2.1.1.orig.tar.gz
nella directory superiore,
Crea i file base necessari in debian/
e parecchi file modello (.ex) che possono essere utili.
Il programma Hello non è molto complesso e, come abbiamo potuto vedere in la sezione chiamata “Pacchettizzare da zero”, crearne un pacchetto non necessita di molto altro se non i file basilari. Quindi, rimuoviamo i file .ex
:
cd debian rm *.ex *.EX
For hello, you will also not need
some of the files into the debian
directory:
README.Debian
: the README file for
specific Debian issues, not the program's README.
dirs
: Used by dh_installdirs
to create needed directories.
docs
: Used by dh_installdocs
to install program documentation.
info
: Used by dh_installinfo
to install the info file.
Keep in mind that for most packages, these files are required. For more information on them, see la sezione chiamata “File esempio di dh_make”.
A questo punto, dovresti avere solo i file changelog
, compat
, control
, copyright
, and rules
nella directory debian
. Da la sezione chiamata “Pacchettizzare da zero”, l'unico file nuovo è compat
, un file che contiene la versione di debhelper da usare (in this case 4).
Dovrai modificare il changelog
leggermente in questo caso per mostrare che questo pacchetto è chiamato hello-debhelper invece che hello:
hello-debhelper (2.1.1-1) edgy; urgency=low * Revisione iniziale -- Captain Packager <packager@coolness.com> Thu, 6 Apr 2006 10:07:19 -0700
Usando debhelper, l'unica cosa da modificare in control
sono il nome (sostituendo hello con hello-debhelper) e aggiungendo debhelper (>= 4.0.0) al campo Build-Depends relativo al pacchetto sorgente. Il pacchetto per Ubuntu di hello-debhelper assomiglia a:
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.
Possiamo copiare il file copyright
e gli script postinst
e prerm
dal pacchetto per Ubuntu hello-debhelper dato che non sono stati modificati rispetto a la sezione chiamata “Pacchettizzare da zero”. Copiamo anche il file rules
in modo da poterlo analizzare.
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 .
L'ultimo file che dobbiamo analizzare è rules
, dove la potenza dello script debhelper può essere messa in rilievo. La versione debhelper di rules
è leggermente più piccola (54 linee contro le 72 nella versione da la sezione chiamata “rules”).
La versione di debhelper assomiglia a:
#!/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 # Non ci sono file dipendenti da una specifica architettura da # caricare generati da questo pacchetto. Se ce ne fossero stati, # sarebbero dovuti essere inclusi qui. 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
Osserva che le procedure quali controllare se sei nella giusta directory(dh_testdir), accertarsi che tu stia creando il pacchetto con i privilegi di root (dh_testroot), installare la documentazione (dh_installdocs e dh_installchangelogs), e fare pulizia dopo la creazione (dh_clean) sono gestite automaticamente. Parecchi pacchetti molto più complicati di hello hanno file rules
non più grandi dato che gli script di debhelper gestiscono la maggior parte delle procedure. Per una lista completa degli script di debhelper, si veda la sezione chiamata “Elenco degli script debhelper”. Inoltre sono molto ben documentati nelle rispettive pagine man. E' un utile esercizio leggere le pagine di manuale (sono scritte molto bene e non sono lunghe) per ogni script usato nel file rules
precedente.
Ora che abbiamo analizzato i file nella directory debian
per hello-debhelper, possiamo costruire i pacchetti sorgenti (and binari). Per prima cosa, entriamo nella directory dei sorgenti:
cd ..
Ora costruiamo il pacchetto sorgente usando debuild, un script interprete per dpkg-buildpackage:
debuild -S
il pacchetto binario, usando pbuilder:
sudo pbuilder build ../*.dsc
infine controllare il pacchetto sorgene per errori frequenti usando lintian:
cd .. lintian -i *.dsc