Aller au contenu

Uploader votre premier paquet

Ce que vous allez apprendre :

  • Comment construire un paquet .deb minimal à partir de zéro
  • Comment l'uploader sur Repod et observer le pipeline s'exécuter
  • Comment l'installer sur une machine cliente avec apt install

Durée : ~15 minutes Prérequis : Repod démarré en local (voir Démarrage rapide), curl, jq, dpkg-deb


Étape 1 — Construire un paquet .deb minimal

Créons un paquet simple qui installe un script shell.

# Créer l'arborescence du paquet
mkdir -p ~/hello-repod/DEBIAN
mkdir -p ~/hello-repod/usr/local/bin

# Le script que notre paquet va installer
cat > ~/hello-repod/usr/local/bin/hello-repod << 'EOF'
#!/bin/bash
echo "Hello from Repod! Package management that actually works."
EOF
chmod +x ~/hello-repod/usr/local/bin/hello-repod

# Le fichier control — métadonnées du paquet
cat > ~/hello-repod/DEBIAN/control << 'EOF'
Package: hello-repod
Version: 1.0.0
Architecture: all
Maintainer: Your Name <[email protected]>
Description: A demo package for Repod
 This package was created to demonstrate the Repod upload pipeline.
EOF

# Construire le .deb
dpkg-deb --build ~/hello-repod ~/hello-repod_1.0.0_all.deb

Vous devriez voir :

dpkg-deb: building package 'hello-repod' in '/root/hello-repod_1.0.0_all.deb'.


Étape 2 — Obtenir un token d'authentification

TOKEN=$(curl -s -X POST http://localhost:8000/api/v1/auth/token \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"YourPassword1!"}' \
  | jq -r .access_token)

echo "Token: ${TOKEN:0:20}..."

Allez sur http://localhost:3003 et connectez-vous. L'interface web gère l'authentification automatiquement — continuez à l'étape 3 dans le navigateur.


Étape 3 — Uploader le paquet

curl -X POST http://localhost:8000/api/v1/upload/ \
  -H "Authorization: Bearer $TOKEN" \
  -F "file=@$HOME/hello-repod_1.0.0_all.deb" \
  -F "distribution=jammy"

Réponse :

{
  "name": "hello-repod",
  "version": "1.0.0",
  "arch": "all",
  "distribution": "jammy",
  "status": "indexed",
  "pipeline": {
    "format": "ok",
    "sha256": "ok",
    "clamav": "clean",
    "grype": "no_findings",
    "gpg": "ok",
    "deps": "ok"
  }
}

  1. Cliquer sur Upload dans la barre latérale gauche
  2. Glisser hello-repod_1.0.0_all.deb dans la zone d'upload
  3. Sélectionner jammy dans le menu déroulant de distribution
  4. Cliquer Upload et observer les étapes du pipeline apparaître en temps réel

Le pipeline exécute 6 vérifications automatiquement. Un paquet propre comme celui-ci passe tout en quelques secondes.

Et si une CVE est détectée ?

Si l'étape d'analyse CVE détecte une vulnérabilité (selon votre politique), le paquet passe au statut pending_review. Il ne sera pas publié tant qu'un utilisateur avec le rôle maintainer ou admin ne l'a pas revu et approuvé. Voir le Workflow de revue CVE.


Étape 4 — Vérifier qu'il est dans le dépôt

# Vérifier via l'API
curl -s -H "Authorization: Bearer $TOKEN" \
  "http://localhost:8000/api/v1/packages/?q=hello-repod" | jq .

# Vérifier directement l'index APT
curl -s "http://localhost/repos/dists/jammy/main/binary-all/Packages" \
  | grep -A5 "Package: hello-repod"

Étape 5 — Installer depuis une machine cliente

Sur n'importe quelle machine qui doit utiliser votre dépôt (peut être la même machine pour ce tutoriel) :

# 1. Faire confiance à la clé GPG du dépôt
curl -sL http://localhost/repos/dists/jammy/Release.gpg \
  | gpg --dearmor \
  | sudo tee /etc/apt/trusted.gpg.d/repod.gpg > /dev/null

# 2. Ajouter la source du dépôt
echo "deb http://localhost/repos jammy main" \
  | sudo tee /etc/apt/sources.list.d/repod.list

# 3. Mettre à jour et installer
sudo apt update
sudo apt install hello-repod

# 4. L'exécuter !
hello-repod

Sortie attendue :

Hello from Repod! Package management that actually works.


Résolution de problèmes

L'upload échoue avec 'invalid distribution'

Le nom de distribution doit correspondre à une distribution configurée dans votre dépôt. Noms courants : focal, jammy, noble, bookworm, bullseye. Vérifiez Paramètres → Sources APT dans l'interface web pour voir les distributions disponibles.

Le pipeline indique 'CVE found — pending review'

Votre politique CVE est réglée sur review pour la sévérité détectée. Allez dans Sécurité → File de revue dans l'interface web. Vous y verrez les détails de la CVE et pourrez approuver ou rejeter le paquet.

apt update échoue avec 'NO_PUBKEY'

La clé GPG n'a pas été importée correctement. Ré-exécutez la première commande de l'étape 5. Assurez-vous que l'URL est accessible depuis la machine cliente (remplacez localhost par l'IP de votre serveur si vous êtes sur une machine différente).


Étapes suivantes