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