add generate release + client install script

This commit is contained in:
Grégory Lebreton 2026-03-06 15:28:14 +01:00
parent 432c1a626f
commit 458f944e61

View File

@ -4,15 +4,16 @@ set -e
# ============================================================
# CONFIGURATION — modifiez ces variables selon vos besoins
# ============================================================
DOMAIN="deb.legaragenumerique.fr" # adresse du dépôt
GPG_KEY_NAME="gn-depot"
EMAIL="admin@lgn.dev"
DIST_NAME="stable" # Nom de la distribution : stable, focal, bookworm, etc.
COMPONENT="main" # Composante : main, contrib, non-free, etc.
ARCH="amd64" # Architecture : amd64, arm64, all, etc.
DIST_NAME="stable" # Nom de la distribution : stable, focal, bookworm, etc.
COMPONENT="main" # Composante : main, contrib, non-free, etc.
ARCH="amd64" # Architecture : amd64, arm64, all, etc.
REPO_ORIGIN="GN-depot" # Nom affiché dans le fichier Release
REPO_LABEL="GN-depot" # Label affiché dans le fichier Release
REPO_ORIGIN="GN-depot" # Nom affiché dans le fichier Release
REPO_LABEL="GN-depot" # Label affiché dans le fichier Release
REPO_DESCRIPTION="Dépôt du garage numérique"
# Priorité du dépôt recommandée pour les clients (générée dans le fichier .pref)
@ -50,8 +51,8 @@ make_keys() {
echo "🔐 Génération des clés GPG"
# S'assurer que le dossier destination existe
mkdir -p "$(dirname "$KEY_PUBLIC")" # ← ligne ajoutée
mkdir -p "$(dirname "$KEY_PRIVATE")" # ← ligne ajoutée
mkdir -p "$(dirname "$KEY_PUBLIC")"
mkdir -p "$(dirname "$KEY_PRIVATE")"
cat > example-pgp-key.batch <<EOF
Key-Type: RSA
@ -68,7 +69,6 @@ EOF
gpg --armor --export "$GPG_KEY_NAME" > "$KEY_PUBLIC"
gpg --armor --export-secret-keys "$GPG_KEY_NAME" > "$KEY_PRIVATE"
chmod 600 "$KEY_PRIVATE"
# Pas besoin du cp : KEY_PUBLIC est déjà dans ./apt-repo/
}
# ------------------------------------------------------------
@ -130,7 +130,6 @@ sign_packages() {
gpg --import /workspace/secret/pgp-key.private
echo "⚙️ Génération de Release"
# Appeler generate_release depuis le bon répertoire (on est déjà dans ./apt-repo)
generate_release "$(pwd)" > "dists/$DIST_NAME/Release"
echo "🔏 Signature du Release"
@ -149,7 +148,7 @@ sign_packages() {
# Génération du fichier de priorité pour les clients
# ------------------------------------------------------------
generate_client_pref() {
local pref_file="./apt-repo/mon-depot.pref"
local pref_file="./apt-repo/gn-depot.pref"
cat > "$pref_file" <<EOF
# Copiez ce fichier dans /etc/apt/preferences.d/ sur vos machines clientes
# pour définir la priorité de ce dépôt.
@ -162,7 +161,7 @@ generate_client_pref() {
# >1000 → installe même en cas de régression de version
Package: *
Pin: origin $(hostname -f 2>/dev/null || echo "votre-domaine.tld")
Pin: origin $DOMAIN
Pin-Priority: $REPO_PRIORITY
EOF
echo "📄 Fichier de priorité client généré : $pref_file"
@ -172,17 +171,58 @@ EOF
# Génération du sources.list pour les clients
# ------------------------------------------------------------
generate_client_sources() {
local sources_file="./apt-repo/mon-depot.list"
local domain
domain=$(hostname -f 2>/dev/null || echo "votre-domaine.tld")
local sources_file="./apt-repo/gn-depot.list"
cat > "$sources_file" <<EOF
# Copiez ce fichier dans /etc/apt/sources.list.d/ sur vos machines clientes
deb [arch=$ARCH signed-by=/usr/share/keyrings/mon-depot.gpg] https://$domain $DIST_NAME $COMPONENT
deb [arch=$ARCH signed-by=/usr/share/keyrings/gn-depot.gpg] https://$DOMAIN $DIST_NAME $COMPONENT
EOF
echo "📄 Fichier sources.list client généré : $sources_file"
}
# ------------------------------------------------------------
# Génération du script d'installation du dépôt pour les clients
# ------------------------------------------------------------
generate_install_script() {
cat > ./apt-repo/install-repo.sh <<EOF
#!/bin/bash
set -e
DOMAIN="$DOMAIN"
DIST="$DIST_NAME"
COMPONENT="$COMPONENT"
ARCH="$ARCH"
PRIORITY="$REPO_PRIORITY"
LABEL="$REPO_LABEL"
echo "🔑 Ajout de la clé GPG..."
wget -qO /etc/apt/trusted.gpg.d/gn-depot.asc "https://\$DOMAIN/pgp-key.public"
echo "📋 Ajout du dépôt..."
echo "deb [arch=\$ARCH signed-by=/etc/apt/trusted.gpg.d/gn-depot.asc] https://\$DOMAIN \$DIST \$COMPONENT" \
> /etc/apt/sources.list.d/gn-depot.list
echo "⚙️ Définition de la priorité (\$PRIORITY)..."
cat > /etc/apt/preferences.d/gn-depot.pref <<PREF
Package: *
Pin: release l=\$LABEL
Pin-Priority: \$PRIORITY
PREF
echo "🔄 Mise à jour des dépôts..."
apt update
echo ""
echo "✅ Dépôt installé avec succès !"
echo " Priorité : \$PRIORITY"
echo " Utilisez : sudo apt install <paquet>"
EOF
chmod +x ./apt-repo/install-repo.sh
echo "📄 Script d'installation client généré : install-repo.sh"
}
# ============================================================
# MAIN
# ============================================================
@ -199,6 +239,7 @@ cp ./depot/* "$POOL_DIR/" 2>/dev/null || true
sign_packages
generate_client_pref
generate_client_sources
generate_install_script
echo "🚀 Lancement du serveur Gunicorn"
cd /workspace
@ -207,7 +248,7 @@ gunicorn -b 0.0.0.0:8000 server:app
echo ""
echo "✅ Dépôt APT disponible"
echo " 📡 URL : https://votre-domaine.tld"
echo " 🔑 Clé pub : https://votre-domaine.tld/pgp-key.public"
echo " 📋 Sources : https://votre-domaine.tld/mon-depot.list"
echo " ⚙️ Priorité : https://votre-domaine.tld/mon-depot.pref"
echo " 📡 URL : https://${DOMAIN}"
echo " 🔑 Clé pub : https://${DOMAIN}/pgp-key.public"
echo " 📋 Sources : https://${DOMAIN}/gn-depot.list"
echo " ⚙️ Priorité : https://${DOMAIN}/gn-depot.pref"