Créer son dépôt Debian
Introduction
Debian est la distribution la plus utilisée et connue. En tant que Workstation (Via Ubuntu Desktop) ou en serveur, nous n’avons de cesse d’utiliser Debian dans notre quotidien. Et si Debian est si forte, c’est avant-tout grâce au nombre de personnes qui s’en servent et font vivre la suite de logiciels disponibles sur cette distribution.
Et si installer un programme se fait facilement via les fichiers .deb
, l’usage d’un dépôt (centralisant ces .deb
) devient une nécessité lorsque l’on doit administrer un grand nombreux de machines.
Qu’est-ce qu’Aptly ?
Aptly est un programme permet de créer et gérer un dépôt de paquet. Celui-ci est très souple et permet notamment de faire un miroir à partir d’un autre dépôt.
Le fonctionnement de Aptly est simple, nous ajoutons un dépôt (Miroir, ou local), nous importons des fichiers deb
si le dépôt est local, nous créons une snapshot, et nous la publions sur un serveur web.
Oui, ça fait beaucoup d’étapes, mais ne vous inquiétez pas : celles-ci sont assez faciles à réaliser.
Génération Couple GPG (Optionnel)
Par sécurité, je vous invite à créer un couple de clé gpg, qui sera utilisé pour signer votre dépôt et empêcher une quelconque attaque MITM.
gpg --full-generate-key # Laissez les choix par défaut
Je vous conseille vivement de sauvegarder le mot de passe de la clé (Et à ce qu’il soit sécurisé, ex: mimbko2v59MAPu;qM2HX!YdN7ioMT
). Celui-ci ne sera pas récupérable si vous le perdez.
Les clés créées sont accessibles de cette manière :
# gpg --list-keys
/root/.gnupg/pubring.kbx
------------------------
pub rsa3072 2023-02-11 [SC]
2DB7FDA5442C053973F9F3CAB55A4CDD19C23946
uid [ ultime ] Quentin JOLY (Aptly Repo) <[email protected]>
sub rsa3072 2023-02-11 [E]
Vous pouvez exporter la clé pour la placer dans le futur site créé par Aptly, vos utilisateurs vous remercieront plus tard.
mkdir -p ~/.aptly/public/
gpg --armor --output ~/.aptly/public/gpg --export 2DB7FDA5442C053973F9F3CAB55A4CDD19C23946
Installer Aptly
Pour installer Aptly, je vous invite à télécharger le binaire et à le placer dans votre PATH
.
cd /tmp \
&& wget -q -O - https://github.com/aptly-dev/aptly/releases/download/v1.5.0/aptly_1.5.0_linux_amd64.tar.gz | tar xvzf - \
&& mv aptly_1.5.0_linux_amd64/aptly /usr/bin/aptly
Créer votre dépôt privé
Via cette documentation, nous avons appris à créer nos propres deb
. J’ai donc créé quelques paquets exemple à stocker dans 2 dépôts différents : stable et unstable.
Voici mon architecture :
├── stable
│ └── kompose_1.28.0-1_amd64.deb
└── unstable
├── foobar_1-1_all.deb
├── hello-world_1-1_amd64.deb
└── hello-world_1-1_arm64.deb
le paquet Hello-World est décliné en 2 versions : amd64 et arm64.
Commençons par créer notre dépôt unstable :
aptly repo create unstable
Une fois le dépôt créé, nous pouvons vérifier que notre dépôt est créé et vide avec la commande aptly repo show -with-packages unstable
.
# aptly repo show -with-packages unstable
Name: unstable
Comment:
Default Distribution:
Default Component: main
Number of packages: 0
Packages:
Le dépôt est vide, nous allons maintenant ajouter notre dossier unstable/
pour qu’il y importe les deb
.
aptly repo add unstable unstable/
On re-vérifie les packages présents sur le dépôt.
# aptly repo show -with-packages unstable
Name: unstable
Comment:
Default Distribution:
Default Component: main
Number of packages: 3
Packages:
foo_1_all
hello-world_1_amd64
hello-world_1_arm64
À présent, nous créons notre snapshot à partir du dépôt unstable. (celle-ci portera le même nom que le dépôt : unstable)
aptly snapshot create unstable from repo unstable
Nous vérifions la snapshot avec la commande aptly snapshot show -with-packages unstable
.
Désormais, nous pouvons créer les fichiers du dépôt (En réutilisant la clé GPG que nous avons créée en haut de la page).
aptly publish snapshot -architectures="amd64,arm64" -distribution="unstable" -gpg-key="2DB7FDA5442C053973F9F3CAB55A4CDD19C23946" unstable
Nous avons donc la structure du dépôt (celle que nous devrons exposer en site) dans ~/.aptly/public/
.
├── dists
│ └── unstable
│ ├── Contents-amd64.gz
│ ├── Contents-arm64.gz
│ ├── InRelease
│ ├── main
│ │ ├── binary-amd64
│ │ │ ├── Packages
│ │ │ ├── Packages.bz2
│ │ │ ├── Packages.gz
│ │ │ └── Release
│ │ ├── binary-arm64
│ │ │ ├── Packages
│ │ │ ├── Packages.bz2
│ │ │ ├── Packages.gz
│ │ │ └── Release
│ │ ├── Contents-amd64.gz
│ │ └── Contents-arm64.gz
│ ├── Release
│ └── Release.gpg
├── gpg
└── pool
└── main
├── f
│ └── foo
│ └── foobar_1-1_all.deb
└── h
└── hello-world
├── hello-world_1-1_amd64.deb
└── hello-world_1-1_arm64.deb
Nous pouvons d’ores-et-déjà tester notre dépôt en créant un serveur web temporaire via la commande aptly serve
.
Mais avant de rendre accessible notre dépôt, créons la seconde section stable:
aptly repo create stable
aptly repo add stable stable/
aptly snapshot create stable from repo stable
aptly publish snapshot -architectures="amd64,arm64" -distribution="stable" -gpg-key="2DB7FDA5442C053973F9F3CAB55A4CDD19C23946" stable
Nous pouvons tester via aptly serve
.
# aptly serve
Serving published repositories, recommended apt sources list:
# ./stable [amd64, arm64] publishes {main: [stable]: Snapshot from local repo [stable]}
deb http://192.168.1.102:8080/ stable main
# ./unstable [amd64, arm64] publishes {main: [unstable]: Snapshot from local repo [unstable]}
deb http://192.168.1.102:8080/ unstable main
Starting web server at: :8080 (press Ctrl+C to quit)...
Ajoutons la clé GPG du dépôt puis créons le fichier de notre dépôt dans /etc/apt/sources.list.d/private.list
.
wget -O - -q http://192.168.1.102:8080/gpg | sudo apt-key add -
echo -n "deb http://192.168.1.102:8080/ stable main
deb http://192.168.1.102:8080/ unstable main" | sudo tee /etc/apt/sources.list.d/private.list
Le package hello-world
affiche Hello-World Amd64
sur les processeurs Amd64, et Hello-World Arm
.
Testons sur ma machine personnelle :
sudo apt update
sudo apt install hello-world
hello-world
# Hello-World Amd64
et sur une Raspberry pi :
sudo apt install hello-world
hello-world
# Hello-World Arm
Exposer le dépôt
Si aptly serve
permet de tester son dépôt en le rendant accessible, il est nécéssaire d’utiliser un réel serveur web comme Nginx ou Apache2.
J’ai donc installé nginx
et édité le fichier /etc/nginx/sites-available/default
(Je ne détaillerai que très peu cette partie).
server {
listen 80 default_server;
listen [::]:80 default_server;
root /root/.aptly/public/;
allow all;
autoindex on;
server_name _;
}
Il faut bien penser à donner les permissions à www-data au dossier /root/.aptly/
.
Avertissement
This is a warning.
Dans cet article, je reste en utilisateur root
. Aptly n’impose pas l’usage de cet utilisateur, vous pouvez (et même devez) utiliser un utilisateur dédié à ça
Faire du Nettoyage
Pour Supprimer les dépôts que nous avons créés, il suffit juste d’exécuter ces commandes dans l’ordre.
- Supprimer la snapshot du site
- Supprimer la snapshot
- Supprimer le dépôt
# Pour le dépôt unstable
aptly publish drop unstable
aptly snapshot drop unstable
aptly repo drop unstable
# Pour le dépôt stable
aptly publish drop stable
aptly snapshot drop stable
aptly repo drop stable