Linux : paquets et dépots
Plutôt que de copier des fichiers avec des scripts, il peut être plus utile de proposer des paquets deb (pour les Linux basés sur Debian, Ubuntu, Mint…).
Version simple
https://www.it-connect.fr/creer-un-paquet-debian-deb/
https://doc.ubuntu-fr.org/tutoriel/creer_un_paquet
https://doc.ubuntu-fr.org/tutoriel/creation_deb
Mais comment les créer ?
Il faut préparer ce paquet dans un dossier dédié qui contient :
- Un dossier “DEBIAN” avec des fichiers spécifiques
- une arborescence qui reproduit l'arborescence avec les chiers à ajouter dedans.
Exemple si on veut copier des fichiers dans /usr/share/backgrounds/cemea
On aura un dossier “fondsecran” qui contient :
DEBIAN/control
(et d'autres plus ou moins utiles changelog, compat, copyright, rules, dir…)usr/share/backgrounds/cemea/
qui contient les fichiers image
Le fichier control comprend les informations minimales sur ce paquet : nom, mainteneur (vous),catégorie, description, dépendances, version…
DEBIAN/control
:
Package: icecat Version: 3.5.1 Architecture: i386 Maintainer: Gnuzilla Project Section: web Priority: optional Installed-Size: 29700 Description: Decouvrez une version totalement libre de firefox IceCat est un fork totalement libre de Firefox, maintenu par le projet GnuZilla.
Cas d'un fichier monprogramme.desktop
pour avoir une icone dans les menus (à placer dans usr/share/applications/)
[DesktopEntry] Version=3.5.1 Encoding=UTF-8 Name=IceCat GenericName=IceCat Comment=Navigateur Web (Firefox totalement libre) Exec=icecat Icon=/opt/icecat/icons/mozicon128.png Terminal=false Type=Application Categories=Application;Network; Name[fr_FR]=IceCat
On peut aussi créer des fichiers spécifiques dans DEBIAN qui s'exécuterent avant, ou après l'installation ou la désinstallation (respectivement preinst, postin, prerm, postrm). Ces fichiers sont des fichiers bash avec des commandes classiques qui seront exécutées en tant que root.
Création du paquet
dpkg-deb –build nomdudossier # celui qui contient DEBIAN
Cette commande créera le fichier nomdudossier.deb
Installation du paquet
Pour tester l'installation du paquet :
sudo dpkg -i nomdudossier.deb
Et testez, retestez, re-re-testez…
Création d'un dépot apt
https://doc.ubuntu-fr.org/tutoriel/comment_creer_depot (avec reprepro)
Principe : on prépare un dossier en local, on le configure, on dépose ses paquets, on lance un script qui va créer l'arborescence qui va bien. On signe son dépot et on envoie sa cleg sur les serveurs d'Ubuntu. Puis on coper son disser local sur un dossier distant accessible par le web. Et on ajouter le dépot dans ses dépots perso et on lance une mise à jour avec installation des paquets.
Installation reprepro
sudo apt install reprepro
mkdir apt mkdir -p ./apt/conf mkdir -p ./apt/incoming
Création du fichier ./apt/conf/distributions
Origin: Votre Nom Label: Label de votre société (ou autre) Suite: stable Codename: bionic Version: 18.04 Architectures: i386 amd64 source #(en fonction de vos besoin) Components: main restricted universe multiverse #(en fonction de vos besoin) Description: Votre Description
Mettre vos .deb dans le dossier incoming. A relancer en cas de mise à jour du dépot.
cd apt reprepro -Vb . includedeb (distribution) incoming/*.deb
Tester localement
Tester avec un sources.list (déplacer le dossier dans /var/www par exemple si problème d'accès par _apt):
deb file:/lieu_de_mon_dossier/apt stable main contrib non-free
Puis
sudo apt-get update
Signer son dépot
Signer le dépot avec une clef GPG à préparer. Puis à publier sur les serveurs de clef d'Ubuntu :
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key XXXXX # ou XXXX est l'identifiant (court) de votre clef
Rajouter dans ./apt/conf/distributions
SignWith: XXXXXXXX # où XXXX est l'identifiant (court) de votre clef
Puis dans apt/, lancer :
reprepro --ask-passphrase export
Et entrer le mot de passe de votre clef PGP
Envoyer son dépot à distance
Copier votre dossier distant dans un site accessible en http comme http://depot.cemea.org
Et changer votre fichier local de sources.list : /etc/apt/sources.list.d/depotcemea.list
deb [allow-insecure=yes] http://depot.cemea.org focal main contrib universe multiverse restricted # allow-insecure si le dépot n'est pas signé
TODO
- Gérer d'autres dépots
- Ajouter des paquets .deb
- Affiner le lieu de stockage des paquets selon les options universe multiverse contrib… Identifier les paquets pour amd64, i386.
Astuces - debug
Dans le cas particulier où un paquet serait bloqué en cours d'installation :
mv /var/lib/dpkg/info/PAQUET.* /tmp/ dpkg --remove --force-remove-reinstreq PAQUET
Clef GPG de dépot expiré
Cas où un dépot à été ajouté et sa clef a expiré.
Exemple :
Err :6 https://packages.sury.org/php buster InRelease Les signatures suivantes ne sont pas valables : EXPKEYSIG B188E2B695BD4743 DEB.SURY.ORG Automatic Signing Key <deb@sury.org>
apt-key list sury donne :
pub rsa3072 2019-03-18 [SC] [expirée : 2021-03-17] 1505 8500 A023 5D97 F5D1 0063 B188 E2B6 95BD 4743 uid [ expirée ] DEB.SURY.ORG Automatic Signing Key <deb@sury.org>
L'identifiant de la clef est ici B188E2B695BD4743 (4 derniers 4-uplets).
Donc on récupère la nouvelle clef à partir des serveurs de clef avec cet identifiant :
sudo apt-key adv --keyserver keys.gnupg.net --recv-keys B188E2B695BD4743
Et c'est tout bon !
apt-key list sury renvoie :
pub rsa3072 2019-03-18 [SC] [expires: 2024-02-16] 1505 8500 A023 5D97 F5D1 0063 B188 E2B6 95BD 4743 uid [ unknown] DEB.SURY.ORG Automatic Signing Key <deb@sury.org> sub rsa3072 2019-03-18 [E] [expires: 2024-02-16]