Creazione di un pacchetto debian .deb
| Attenzione questo articolo è ancora incompleto. Sentiti libero di contribuire cliccando sul tasto edit. |
Installazione pacchetti sviluppatore
apt-get install dpkg-dev file gcc g++ libc6-dev make patch perl dh-make fakeroot devscripts lintian linda
Creazione di un pacchetto per uno script
Si supponga di voler installare:
- uno script
- un file di configurazione
- un file di cron
Supponiamo che lo script si chiami backup-remoto legga la sua configurazione da backup-remoto.conf e sia eseguito tutte le notti alle 20:00
Preparazione delle directory
export PKGHOME="~/debian-packages" export PKGNAME="backup-remoto" mkdir -p $PKGHOME/$PKGNAME/$PKGNAME-1.0.0 cd $PKGHOME/$PKGNAME/$PKGNAME-1.0.0
Copiare in questa directory lo script ed il file di configurazione.
Preparazione del Makefile
Occorre creare un Makefile funzionante per l'installazione, in quanto viene usate da dpkg per installare il pacchetto.
Un esempio è:
export PKGHOME="~/debian-packages"
export PKGNAME="backup-remoto"
cd $PKGHOME/$PKGNAME/$PKGNAME-1.0.0
cat > Makefile <<'EOFile'
SBIN = $(DESTDIR)/usr/sbin
ETC = $(DESTDIR)/etc
DOC = $(DESTDIR)/usr/share/doc
PKG = backup-remoto
.PHONY: all install clean
all: ;
clean: ;
install:
install -d $(SBIN)
install -m 755 ./$(PKG) $(SBIN)/$(PKG)
# installa l'eseguibile
install -d $(DOC)/$(PKG)
install -m 644 ./README $(DOC)/$(PKG)/README
# installa la documentazione
install -d $(ETC)/$(PKG)
install -m 644 ./$(PKG).conf $(ETC)/$(PKG)/$(PKG).conf
installa il file di configurazione
install -d $(ETC)/cron.d
install -m 644 ./$(PKG).cron $(ETC)/cron.d/$(PKG)
installa il file di cron
EOFile
Preparazione del file cron
Questo è un file di esempio:
export PKGHOME="~/debian-packages" export PKGNAME="backup-remoto" cd $PKGHOME/$PKGNAME/$PKGNAME-1.0.0 cat > $PKGNAME.cron <<EOFile #m h dom mon dow user command 0 20 * * * root /usr/sbin/$PKGNAME > /dev/null EOFile
Creazione della tarball
export PKGHOME="~/debian-packages" export PKGNAME="backup-remoto" cd $PKGHOME/$PKGNAME/$PKGNAME-1.0.0 cd .. tar cvzf $PKGNAME-1.0.0.tar.gz $PKGNAME-1.0.0
Debianizzazione
export PKGHOME="~/debian-packages" export PKGNAME="backup-remoto" cd $PKGHOME/$PKGNAME/$PKGNAME-1.0.0 export DEBFULLNAME="Gabriele Vivinetto" export DEBEMAIL=gabriele.mailing@rvmgroup.it dh_make -e gabriele.mailing@rvmgroup.it -f ../$PKGNAME-1.0.0.tar.gz
Ora la situazione dovrebbe essere:
export PKGHOME="~/debian-packages" export $PKGNAME="backup-remoto" cd $PKGHOME/$PKGNAME ls total 28 drwxr-xr-x 3 mnt.vvngrl mnt.vvngrl 4096 2006-03-16 19:58 . drwxr-xr-x 3 mnt.vvngrl mnt.vvngrl 4096 2006-03-16 19:58 .. -rwxr-xr-x 1 mnt.vvngrl mnt.vvngrl 2023 2006-03-16 19:43 backup-remoto -rw-r--r-- 1 mnt.vvngrl mnt.vvngrl 1158 2006-03-16 19:46 backup-remoto.conf -rw-r--r-- 1 mnt.vvngrl mnt.vvngrl 140 2006-03-16 19:47 backup-remoto.cron drwxr-xr-x 2 mnt.vvngrl mnt.vvngrl 4096 2006-03-16 19:58 debian -rw-r--r-- 1 mnt.vvngrl mnt.vvngrl 452 2006-03-16 19:09 Makefile
Customizazione del file control
Il file control contiene i parametri essenziali per la descrizione del pacchetto, il suo tagging e soprattutto le dipendenze.
Analizare lo script, e per ogni binario richiamato, trovare il pacchetto corrispondente e la versione.
Ad esempio, nello script si usa ilcomando "ssh", quindi, utiliando i comandi di seguito, si ottengono le stringe da inserire come dipendenze, seprate da ", ":
export BIN_NAME="ssh" export COLUMNS=132 DEBPKG_NAME=$(dpkg -S $(which $BIN_NAME) | cut -f 1 --delim=":") DEBPKG_VERSION=$(dpkg -l $(dpkg -S $(which $BIN_NAME) | cut -f 1 --delim=":") | grep $(dpkg -S $(which $BIN_NAME) | cut -f 1 --delim=":") | tr -s " " | cut -f 3 --delim=" ") echo "$DEBPKG_NAME (>= $DEBPKG_VERSION)"
Inserire le dipendenze nella riga
Depends:
export PKGHOME="~/debian-packages"
export PKGNAME="backup-remoto"
cd $PKGHOME/$PKGNAME/$PKGNAME-1.0.0/debian
vi control
Inserire *una* breve Descrizione nella riga
Description:
Inserire di seguito, indentando di una colonna una descrizione al massimo di 60 caratteri.
Attenzione: andare a capo manualmente, scrivere ogni riga terminata da <invio>
Customizazione del file copyright
Questo file di solito è sufficente
export PKGHOME="~/debian-packages"
export PKGNAME="backup-remoto"
cd $PKGHOME/$PKGNAME/$PKGNAME-1.0.0/debian
cat > copyright <<EOFile
This package was debianized by Gabriele Vivinetto <gabriele.mailing@rvmgroup.it> on
$(date -R)
It was downloaded from http://people.rvmgroup.it/gabriele.vivinetto
Copyright Holder: Gabriele Vivinetto <gabriele.mailing@rvmgroup.it>
License: GNU GPL
EOFile
Preparazione / Personalizzazione del Makefile
cat > Makefile <<'EOFile'
SBIN = $DESTDIR/usr/sbin
ETC = $DESTDIR/etc
DOC = $DESTDIR/usr/share/doc
install: odmrd-target
install -d $(SBIN)
install -m755 ./odmrd09rc9.pl $(SBIN)/odmrd
install -m755 ./odmrspool $(SBIN)/odmrspool
install -d ./odmrd.conf $(ETC)/odmrd/odmrd.conf
install -d $(DESTDIR)/usr/share/doc/odmrd
cp -a readme.html $(DESTDIR)/usr/share/doc/odmrd
adduser --system odmr
addgroup --system odmr
EOFile
Preparazione del pacchetto in formato tar.gz
lynx plonk.de
mkdir odmrd09rc9
cd odmrd09rc9
tar xvzf ../odmrd09rc9.tar.gz
cd ..
mv odmrd09rc9 odmrd-0.9.0rc9
cd odmrd-0.9.0rc9
wget http://plonk.de/sw/odmr/odmrspool.pl
Creazione del control file
cd debian
cat > control <<'EOFile'
Source: odmrd
Section: mail
Priority: extra
Maintainer: Gabriele Vivinetto <gabriele.mailing@rvmgroup.it-f>
Build-Depends: debhelper (>= 4.0.0)
Standards-Version: 3.6.1
Package: odmrd
Architecture: all
Depends: postfix (>= 2.1.5-9), libmime-perl (>= 5.417-1), libdbd-mysql-perl (>= 2.9006-1) ${shlibs:Depends}, ${misc:Depends}
Description: An On Demad Mail Relay Daemon that uses ATRN to deliver Mail
ODMR is "SMTP with Dynamic IP Addresses". It uses an "Authenticated TURN"
(ATRN) to deliver queued mail to a mailserver with a dynamic IP address.
It works with Postfix (and Exim too).
EOFile
Preparazione degli altri file
cat >copyright <<'EOFile'
This package was debianized by Gabriele Vivinetto <gabriele.mailing@rvmgroup.it-f> on
Fri, 17 Jun 2005 17:12:48 +0200.
It was downloaded from http://plonk.de/sw/odmr/
Copyright Holder: Jakob Hirsch <odmrd@plonk.de>
License: GNU GPL
EOFile
Creazione del pacchetto
cd ..
dpkg-buildpackage -rfakeroot
Aggiornamento del pacchetto
Aggiornamento in caso di correzione BUG
Modificare il Changelog:
export DEBFULLNAME="Gabriele Vivinetto"
export DEBEMAIL=gabriele.mailing@rvmgroup.it
dch -i
Applicare le correzioni necessarie ai sorgenti.
Riscostruire il pacchetto:
dpkg-buildpackage -rfakeroot
Ora si può caricare nel repository il pacchetto costruito, che avrà versione x.y.z-+1
Script di upload dei pacchetti
Questo script è utile per caricare via scp i pacchetti creati sl proprio repository.
#!/bin/bash
test $1 || {
echo "Usage: upload-debrvm package.deb"
exit 1
}
SHORTNAME=$(echo $1 | cut -f 1 --delim="_")
echo "* Uploading $SHORTNAME"
scp -pq $1 support.rvmgroup.it:/var/www/rvmgroup.it/support/html/debian/binary
echo "* Cleaning upd and updating repository"
#scp -pq /home/mnt.vvngrl/bin/update_repository support.rvmgroup.it:/var/www/rvmgroup.it/support/html/debian/
cat | ssh support.rvmgroup.it "
cat > /var/www/rvmgroup.it/support/html/debian/update_repository;
cd /var/www/rvmgroup.it/support/html/debian;
chmod +x ./update_repository;
./update_repository $SHORTNAME;
rm -f ./update_repository;
dpkg-scanpackages binary/ /dev/null | gzip -9c > binary/Packages.gz" <<'EOFile'
#!/bin/bash
cd /var/www/rvmgroup.it/support/html/debian
SHORTNAME=$1
RIGHE=$(/bin/ls -1 binary/$SHORTNAME* | wc -l)
RIGHE_DA_CANC=$(($RIGHE - 1))
if (( $RIGHE > 0 ))
then
for DATA in $( find . -name $SHORTNAME\* | head -n $RIGHE_DA_CANC)
do
echo "* Deleting $DATA"
rm -f $DATA
done
fi
EOFile