technique:paquet_depot

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…).

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.

dpkg-deb –build nomdudossier # celui qui contient DEBIAN

Cette commande créera le fichier nomdudossier.deb

Pour tester l'installation du paquet :

sudo dpkg -i nomdudossier.deb

Et testez, retestez, re-re-testez…

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.

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 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 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

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é

- 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.

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

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]
  • technique/paquet_depot.txt
  • Dernière modification: 2021/04/20 23:35
  • de francoisa