Manipuler les paquets Debian


Debian a la réputation de délivrer des paquets de qualité, libre et indépendant de la volonté des autres.

Pour connaître les versions disponible d'un paquet sur chacune des versions de la distribution Debian, le tracker peut bien aider. En fonction du choix de vouloir maintenir un paquet, des mentors bénévoles peuvent être disponible.

Ci-dessous, se trouve deux tutoriels qui exprime des cas d'utilisations concret sur les paquets.

Modifier un paquet source

Admettons que nous voulons modifier le comportement en Grep dans le but de lui enlever la capacité à détecter les expressions rationnelles de Perl.

Dans un 1er temps, on télécharge les métadonnées (.dsc):

dget http://ftp.debian.org/debian/pool/main/g/grep/grep_2.12-2.dsc

Puis on télécharge les sources :

dpkg-source -x grep_2.12-2.dsc

Déplaçons-nous dans le dossier suivant pour y apporter nos modifications :

cd grep-2.12/

Vu que nous allons le modifier et peut-être le partager, par principe on édite le changelog :

dch -i
grep (2.12-2.1) unstable; urgency=low

  * Désactivation des expressions rationnelles de Perl. 

 -- root <root@local.net>  Sat, 21 Jan 2017 17:08:22 +0100

...

On ajouter l'option suivants dans les paramètres de ce fichier :

nano debian/rules

Vers la ligne 27 on insère ceci :

--disable-perl-regexp

Ce qui donne :

./configure $(CROSS) --prefix=/usr --disable-perl-regexp --exec-prefix=/ --mandir=\$${prefix}/share/man --infodir=\$${prefi$...

Enfin on peut reconstruire le paquet :

debuild

Si tout c'est bien passé, alors notre nouveau paquet se trouve à cet emplacement :

ls ../grep*.deb
-rw-r--r-- 1 root root 279K janv. 21 17:21 ../grep_2.12-2.1_amd64.deb

Ainsi, si je l'installe on obtient cette réponse :

dpkg -i grep_2.12-2.1_amd64.deb 
dpkg : avertissement : dégradation (« downgrade ») de grep depuis 2.20-4.1 vers 2.12-2.1
(Lecture de la base de données... 166463 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de grep_2.12-2.1_amd64.deb ...
Dépaquetage de grep (2.12-2.1) sur (2.20-4.1) ...
Paramétrage de grep (2.12-2.1) ...
Traitement des actions différées (« triggers ») pour install-info (5.2.0.dfsg.1-6) ...
Traitement des actions différées (« triggers ») pour man-db (2.7.0.2-5) ...

Que du bonheur, ça fonctionne!

Créer son propre paquet

Les paquets sont désigné par l'extension .deb et il y a besoin de respecter quelques formalités pour créer son paquet minimal. Pour comprendre facilement la procédure suivante, notre projet va être simple. On affichera un message dans la console lors de l'exécution d'une la commande “crier”.

Organisation du paquet

Donc le paquet aura pour nom : crier

L'arborescence de notre projet devra ressembler à ceci, créons ces dossiers :

mon_projet/
   debian/
     control
     postinst
   usr/
     bin/
       crier

Avec les commandes ci-dessous:

mkdir -vp mkdir -vp mon_projet/debian mon_projet/usr/bin/
touch mon_projet/debian/control mon_projet/debian/postinst mon_projet/usr/bin/crier

On remarquera que usr/bin/crier représente l'emplacement de notre futur programme.

  • control : est un fichier regroupant la définition du programme.
  • postinst : est un fichier qui sera appelé après avoir installé le programme.

Procédure

Les commandes qui vont suivre seront toujours lancé depuis le dossier parent du projet.

Comme indiqué précédemment, on souhaite afficher un message personnalisé une fois que le programme est installé. Voici une solution :

nano mon_projet/debian/postinst

#!/bin/bash
RED='\033[1;33m'
NC='\033[0m' # No Color
printf "${RED}Install ok!${NC}\n"
chmod 755 mon_projet/debian/postinst

On créer ensuite un fichier qui affichera les informations lié au programme :

# nano mon_projet/debian/control

Package: crier
Version : 1.0
Section : base
Priority: optional
Architecture: all
Depends: bash
Maintainer: Bruno TATU <brunotatu@sfr.fr>
Description: Un programme qui crie!
Homepage: http://wiki.bruno-tatu.com

On créer notre code source qui est en fait un simple script écrit en bash :

nano mon_projet/usr/bin/crier

#!/bin/bash
RED='\033[1;32m'
NC='\033[0m' # No Color
printf "${RED}Yeeeah!${NC}\n"

On compresse le dossier du projet :

dpkg-deb --build mon_projet

Nous avons maintenant notre paquet “mon_projet.deb” disponible!

Pour l'installer rien de plus simple :

dpkg -i projet.deb

Lançons notre programme !

crier

D'autres commandes

  • Comparer deux versions avec les métadonnées :
debdiff grep_2.12-2.dsc grep_2.12-2.1.dsc
  • Lister le contenu d'un paquet :
ar tv grep_2.12-2.1_amd64.deb
  • Ajouter une clé publique d'un dépôt :
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B48AD6246925553