Bonjour,
Et si tu étudiais directement le contenu d'un paquet quelconque de la distribution ? Tu y verrais les fichiers et dossiers indispensables au fonctionnement de "apt" et "dpkg", ils ne sont pas nombreux ni très complexes en fait.
On peut bien évidemment empaqueter des binaires prêts à installer sans compilation, des scripts de différents interpréteurs (bash, python, java, etc.) ou des fichiers sources à compiler accompagnés des procédures de compilation et installation (des scripts en fait), tout est envisageable.
user@user-Ubuntu-Mate:~$ dpkg-deb --help
Syntaxe : dpkg-deb [<option> ...] <commande>
Commandes :
-b|--build <répertoire> [<deb>] Construire une archive.
-c|--contents <deb> Lister le contenu.
-I|--info <deb> [<cfile>...] Afficher les informations sur
la sortie standard.
-W|--show <deb> Montrer des informations sur
le paquet.
-f|--field <deb> [<cfield>...] Afficher le(s) champ(s) sur la
sortie standard.
-e|--control <deb> [<répertoire>] Extraire l'information de contrôle.
-x|--extract <deb> <répertoire> Extraire les fichiers.
-X|--vextract <deb> <répertoire> Extraire et lister les fichiers.
-R|--raw-extract <deb> <répertoire>
Extraire les informations et les fichiers de contrôle.
--ctrl-tarfile <deb> Produire l'archive tar de contrôle.
--fsys-tarfile <deb> Produire l'archive tar de système de fichiers.
-?, --help Afficher ce message.
--version Afficher la version.
<deb> est le nom de fichier d'une archive au format Debian.
<cfile> est le nom d'un composant fichier administratif.
<cfield> est le nom d'un champ dans le fichier « control » principal.
Options:
-v, --verbose Enable verbose output.
-D, --debug Enable debugging output.
--showformat=<format> Use alternative format for --show.
--deb-format=<format> Select archive format.
Allowed values: 0.939000, 2.0 (default).
--nocheck Suppress control file check (build bad
packages).
--root-owner-group Forces the owner and groups to root.
--[no-]uniform-compression Use the compression params on all members.
-z# Set the compression level when building.
-Z<type> Set the compression type used when building.
Allowed types: gzip, xz, zstd, none.
-S<strategy> Set the compression strategy when building.
Allowed values: none; extreme (xz);
filtered, huffman, rle, fixed (gzip).
Syntaxe du formatage :
Un formatage est une chaîne qui sera affichée pour chaque paquet.
Elle peut contenir les échappements classiques \n (nouvelle ligne),
\r (retour à la ligne) ou \\ (backslash). Des informations sur
les paquets peuvent être incluses en utilisant la syntaxe
${var[;width]} (taille). Les champs seront alignés à droite, à moins que la
taille spécifiée ne soit négative, auquel cas un alignement à gauche
sera appliqué.
Utilisez « dpkg » pour installer et supprimer des paquets de votre
système, ou bien « apt » ou encore « aptitude » pour une gestion
conviviale des paquets.
Les paquets dépaquetés en utilisant « dpkg-deb --extract » seront
incorrectement installés !
user@user-Ubuntu-Mate:~$
Cette commande appliquée à un paquet simple avec l'option -R (ou --raw-extract) te permettra de recréer l'arborescence qui a permis de créer le paquet en d'y décompresser son contenu :
dpkg-deb -R <paquet> <répertoire>
Un paquet contient toujours au moins deux dossiers : DEBIAN et l'arborescence de l'application à installer (souvent usr/...).
Le dossier DEBIAN contient le protocole d'installation qui, dans des cas basiques, peut se résumer au seul fichier "control". Exemple :
Package: omnimages
Version: 0.1.1
Architecture: all
Installed-Size: 18
Depends: zenity, jhead, exiv2, imagemagick, libimage-exiftool-perl, rsync
Section: misc
Maintainer: erresse <erresse@free.fr>
Priority: optional
Description: Utilitaire de traitements divers des images
Omnimages réunit une somme d'utilitaires pour le traitement des images
Il permet de travailler notamment sur des photos jpeg provenant d'un APN
exploiter les métadonnées de l'entête EXIF, créer ou modifier l'entête.
(Opérations : renommer, classer, redimensionner, dater, etc...)
Ce fichier décrit l'application et indique au système comment installer le paquet avec quelles dépendances, etc.
L'arborescence de l'application est fonction de ce que le développeur veut installer et à quels endroits le faire. Exemple :
user@user-Ubuntu-Mate:/data/user/Developpement/paquets$ find omnimages_0.1_all
omnimages_0.1_all
omnimages_0.1_all/usr
omnimages_0.1_all/usr/bin
omnimages_0.1_all/usr/bin/omnimages
omnimages_0.1_all/usr/share
omnimages_0.1_all/usr/share/applications
omnimages_0.1_all/usr/share/applications/omnimages.desktop
omnimages_0.1_all/usr/share/icons
omnimages_0.1_all/usr/share/icons/omnimages.png
omnimages_0.1_all/usr/share/doc
omnimages_0.1_all/usr/share/doc/omnimages
omnimages_0.1_all/usr/share/doc/omnimages/copyright
omnimages_0.1_all/usr/share/doc/omnimages/README.md
omnimages_0.1_all/usr/share/doc/omnimages/changelog.gz
omnimages_0.1_all/DEBIAN
omnimages_0.1_all/DEBIAN/control
user@user-Ubuntu-Mate:/data/user/Developpement/paquets$
Ici, le système va copier les données dans les répertoires "/usr/..." et subordonnés, selon qu'on a du programme, de la doc, des images ou des lanceurs, etc.