Linux:Créer un package Debian

De Djjnet.

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
Outils personnels
Google AdSense