15/11/2024

Commandes et Système

Créer un paquet Debian (.deb)

I. Présentation

Dans ce tutoriel, nous allons apprendre à créer un paquet Debian ( les fameux fichiers .deb).

Qu'est ce qu'un paquet ?

Un paquet est un fichier compressé contenant les informations d'installation et les fichiers constituants une application, un plugin, une librairie, un driver, etc. On peut assimiler un paquet par un fichier "Setup.exe" sous Windows par exemple. Un paquet permet donc d'échanger et d'installer facilement un ensemble de commande et/ou de fonctionnalité sur un système donné.

Pourquoi doit on spécifier un paquet "Debian" ?

Le libre ayant une grande diversité de logiciel et de format, on y trouve logiquement plusieurs formats de système d'installation. Un paquet "Debian" est un paquet qui se termine par l'extension ".deb" et qui peut être installé facilement sur tous les systèmes Debian et dérivés (dont Ubuntu fait partie !).

II. Mise en place de l'environnement de test

Nous allons dés à présent créer notre paquet en devenir. Celui-ci sera pour notre tutoriel juste un script qui affichera la date actuelle avec un petit message. Nous créons donc un script sur notre machine :

vim itconnect.sh

et nous y mettons ce contenu :

#!/bin/bash
echo "Nous sommes le `date`."

 Et on lui donne les droits d'exécution

chmod og+x itconnect.sh

Voila, notre petit programme est prêt à devenir un paquet !

III. Construction de l'architecture du paquet

Nous allons maintenant créer l'architecture que doit avoir un paquet Debian avant de le transformer définitivement en paquet. En effet, tous les paquets Debian doivent être composés de fichiers clés qui servent à leur installation et leur intégration dans le système. On crée donc un répertoire portant le nom de notre script :

mdkir itconnect

 Dans ce dossier, nous créons un répertoire "DEBIAN" qui contiendra des scripts de pré et post installation, de pré et post désinstallation et d'information du paquet :

mkdir itconnect/DEBIAN

Nous créons également l'arborescence de notre paquet. Par exemple si nous voulons que notre script "itconnect.sh" s'installe dans /usr/bin lors de l'installation du .deb, nous créons un répertoire "usr/bin" dans notre répertoire :

mkdir -p itconnect/usr/bin

et nous y mettons notre script :

mv itconnect.sh itconnect/usr/bin

Note : Pour un application contenant plusieurs fichiers dans plusieurs arborescences différentes, le principe reste le même. On crée les répertoires dans notre répertoire source comme s'il s'agissait de la racine d'un serveur ( par exemple pour mettre une configuration dans "/etc/" on créera le dossier "itconnect/etc" et on mettra notre fichier à l'intérieur).

Un exemple visuel pour une application avec plus de fichier que notre paquet de test :

PaquetDeb01
Exemple d'architecture des composants d'un paquet

IV. Création des informations d'installation du paquet

Maintenant que notre script (ou tout autre fichier d'une application) a son arborescence finale reproduite dans le dossier que nous transformerons en paquet (.deb), nous allons passer au fichier qui va aider le système à comprendre l'application lors de son installation. Il s'agit d'un fichier nommé "control" que nous allons créer dans le répertoire "itconnect/DEBIAN" :

vim itconnect/DEBIAN/control

Nous allons maintenant remplir ce fichier de façon à ce qu'il soit compris par une distribution basée sur Debian lors de son installation :

Package: itconnect
Version: 12.0
Section: base
Priority: optional
Architecture: all
Depends: bash
Maintainer: dev <[email protected]>
Description: Affiche la date dans le terminal
Homepage: http://it-connect.fr

 Une petite description des différentes informations indiquées :

  • "Package" : Le nom du paquet.
  • "Version" : La version de votre paquet.
  • "Section" : Les archives dans Debian sont réparties en différentes parties : main (logiciels libres), non-free (logiciels non libres), et contrib (logiciels libres qui dépendent de logiciels non libres). Chacune d'entre elles est divisée en sections qui classent les paquets en catégories grossières. Entre autres existent "admin" pour les programmes destinés aux administrateurs, "devel" pour les outils de programmation, "doc" pour la documentation, etc. ( source : http://packages.debian.org/wheezy/ ).
  • "Priority" : Décrit l'importance pour l'utilisateur d'installer ce paquet, on peut y assigner plusieurs valeurs "optional" qui convient pour les paquets récents, il existe également "standard", "required" ou "important".
  • "Architecture" : Présente les architectures sur lesquelles le paquet binaire peut être compilé. Cette valeur est en général une des suivantes en fonction du type de paquet binaire. On peut y assigner deux valeurs principales. "any" le paquet créé va dépendre de l'architecture sur laquelle il est installé; "all" le paquet créé est indépendant de l'architecture (fichier texte par exemple).
  • "Depends" : Permet d'indiquer les éventuelles dépendances d'un paquet.
  • "Maintainer" : Nom et adresse mail du responsable du paquet.
  • "Description" : Description du paquet et de ses fonctions.
  • "Homepage" : Lien vers le site web ou la page de présentation du paquet.

On pourrait également ajouter l'information "Depends" où l'on indiquerais les éventuelles dépendances de notre paquet et leurs versions. (par exemple "Depends: libc6 (>= 2.1)" ).

En plus de ce fichier obligatoire, nous pouvons ajouter des scripts qui s’exécuteront avant et après l'installation du paquet ou encore avant et/ou après la désinstallation du paquet. Pour qu'un script rédigé soit exécuté au moment voulu de l'installation ou de la désinstallation du paquet, il doit être nommé correctement :

  • "preinst" : Exécuté avant l'installation
  • "postinst" : Exécuté après l'installation
  • "prerm" : Exécuté avant la suppression
  • "postrm" : Exécuté après la suppression

Pour faire un exemple, nous allons créer un script qui s'exécutera avant l'installation du paquet et qui affichera juste "bonjour" sur le terminal :

vim itconnect/DEBIAN/preinst

On saisi alors :

#!/bin/bash
echo "bonjour !"

Il faut également donner les bons droits à ce (ou ces) script(s) :

chmod 755 itconnect/DEBIAN/preinst

Voici donc l'architecture de notre futur paquet :

PaquetDeb02
Architecture paquet Debian

V. Compilation

Nous pouvons à présent transformer ce répertoire en paquet qui pourra alors être installé de façon simple sur toute les distributions Debian. On utilisera cette commande :

dpkg-deb --build itconnect

On se retrouvera ensuite avec un fichier "itconnect.deb". Notre paquet est construit !

VI. Installation de notre paquet

Pour installer notre paquet, il suffit de saisir la commande suivante :

dpkg -i itconnect.deb

Note : Lors d'une installation avec "apt-get install" ou "aptitude install" par exemple, la machine se contente de trouver le paquet voulu sur les différents dépôts, de le télécharger puis d'effectuer cette même commande pour installer le paquet .deb téléchargé depuis les dépôts.

On remarque d'ailleurs l'exécution de notre script "preinst" qui nous dit bonjour :

PaquetDeb03
Installation de notre paquet .deb

On se retrouve donc avec notre script "itconnect" dans "/usr/bin" :

PaquetDeb04

Celui-ci devient donc également une commande :

PaquetDeb05

VII. Désinstallation du paquet

Notre paquet étant un paquet comme les autres installés sur le système, on peut maintenant avoir des informations sur celui-ci avec les commandes "apt-get" et "aptitude" et donc le désinstaller :

apt-get remove itconnect

 

 

author avatar
Mickael Dorigny Co-founder
Co-fondateur d'IT-Connect.fr. Auditeur/Pentester chez Orange Cyberdéfense.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

4 commentaires sur “Créer un paquet Debian (.deb)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.