Créer un package Debian

Il m’est arrivé récemment d’avoir besoin de déployer un agent sur plusieurs machines à travers le monde, de manière simple et automatique.

Au début j’utilisait un script Python complet (pour l’installation et pour l’agent final), puis je me suis tourné sur la version « package » complet que pouvait offrir un système tel que Debian ou Ubuntu. Je pense compiler les packages pour d’autres distribution pour un panel plus large.

Pour se faire, que votre package soit un script ou un programme compilé, il faut l’ordonner correctement. En effet, la structure du package sera la structure finale sur le poste client.

Pour ma part, j’ai créé un répertoire

/package/myagent/

L’arborescence de ce répertoire est de la sorte (pour mon cas, vous pouvez l’adapter) :

DEBIAN/
  control
  postinst
  postrm
etc/
  init.d/
    myagent
  myagent/
    config.cfg
usr/
  bin/
    myagent
  share/
    doc/
      README
      copyright 
      changelog

DEBIAN/control va contenir toutes les informations concernant le package (les * sont obligatoires)

Package*
Source
Version*
Section (recommended)
Priority (recommended)
Architecture*
Essential
Depends et al
Installed-Size
Maintainer*
Description*
Homepage
Built-Using

Exemple :

Package: myagent
Version: 0.0.1
Architecture: all
Priority: optional
Depends: python3
Maintainer: Fabien <contact@email.com>
Description: MyLittleAgent

DEBIAN/postinst : c’est un script qui sera exécuté à la fin de l’installation, ici l’initialisation du script de démarrage.

#!/bin/sh
update-rc.d -f myagent defaults

De même, DEBIAN/prerm est appelé avant la suppression du package :

#!/bin/sh
if [ "$1" = "remove" ]; then
rm /usr/bin/myagent/*.pyc
update-rc.d -f myagent remove
fi

Il existe différents fichiers (preinst, postinst, prerm, postrm…). Les fichiers doivent avoir des droits en 755.
Le fichier DEBIAN/md5sums va contenir tous les checksum (en md5) des fichiers du package. Pour générer le fichier md5sums, on peut utiliser le code suivant (à exécuter  depuis /package/myagent )

 find . -type f ! -regex '.*.hg.*' ! -regex '.*?debian-binary.*' ! -regex '.*?DEBIAN.*' -printf '%P ' | xargs md5sum > DEBIAN/md5sums

On peut enfin créer le paquet :

dpkg-deb --build /package/myagent

Pour l’installer en mode local (et faire vos essais), vous pouvez utiliser les actions suivantes pour installer et supprimer votre paquet.

dpkg -i myagent.deb
dpkg --remove --purge myagent

Vous pouvez également le rajouter à votre propre serveur de paquets.