Linux:Créer un package Debian
En cours de rédaction
Sommaire |
La source
Préparer le package
Utiliser debconf pour poser une question à l'installation d'un package
Je vais prendre un cas concret, nous réalisons un package qui permet de configurer le daemon ntpd. Deux serveurs NTP sont disponibles entre deux datacenter. Nous souhaitons configurer l'un ou l'autre selon l'emplacement du serveur client.
Pour cela, nous commençons par créer un fichier templates dans le dossier debian (ou DEBIAN selon la méthode de création du package, sale celle-ci ;) ) qui va inclure la question :
Template: nom_du_package/datacenter Type: select Choices: clichy, saint-denis Default: saint-denis Description: Choose where is installed the server :
Puis nous ajoutons un fichier config toujours dans le même dossier, contenant l'appel à l’interaction avec l'utilisateur.
#!/bin/bash . /usr/share/debconf/confmodule db_input critical nom_du_package/datacenter || true db_go db_get nom_du_package/datacenter
Enfin, il faut maintenant utiliser les réponses depuis postinst. Si debconf n'a pas encore été initialisé, c'est à ce moment que dpkg le fera.
#!/bin/bash
case "$1" in
configure)
. /usr/share/debconf/confmodule
db_get nom_du_package/datacenter || true
DATACENTER=$RET
CONFIG_NTP=/etc/ntp.conf
if [ -f /etc/ntp.conf ];then
sed -i -e '/^server .\.debian.pool.ntp.org iburst/d' $CONFIG_NTP
else
echo "Package ntp isn't installed or $CONFIG_NTP isn't found"
fi
grep -qE "^server ntp[1-2]*\.exemple.com" $CONFIG_NTP
if [ $? -eq 1 ];then
case $DATACENTER in
clichy)
sed -i -e "s/\(filegen clockstats .*\)/\1\n\nserver ntp1.exemple.com iburst\n#server ntp2.exemple.com iburst\n/" $CONFIG_NTP
;;
saint-denis)
sed -i -e "s/\(filegen clockstats .*\)/\1\n\n#server ntp1.exemple.com iburst\nserver ntp2.exemple.com iburst\n/" $CONFIG_NTP
;;
esac
db_stop
echo "Apply configuration..."
/etc/init.d/ntp restart
fi
;;
abort-upgrade|abort-remove|abort-deconfigure)
;;
*)
echo "postinst called with unknown argument \`$1'" >&2
exit 1
;;
esac
exit 0
Attention de ne pas oublier db_stop (qui envoie la commande STOP à debconf) sinon debconf empêche l'arrêt de l'installation du package car il attend la fin de la relance du daemon ntp. Aucune erreur n'est fournie, le daemon se relance correctement mais le package ne finie pas.
Divers
dch --create --package ouroboros-keyring -v 0.1 -- Initial Release dch -m -v 0.1-1 -- Test dch -c DEBIAN/changelog -m -v 0.3-2 -- Added ouroboros-keyring depends
> DEBIAN/files dpkg-gencontrol -pouroboros-exploitation -cDEBIAN/control -lDEBIAN/changelog -fDEBIAN/files -P/tmp/ouroboros-build/DEBIAN dpkg-genchanges -b -cDEBIAN/control -lDEBIAN/changelog -fDEBIAN/files > ../ouroboros-exploitation_0.3-1_all.changes
debsign -k40D7AC19 package_version_arch.changes

