init
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
# Pas de shebang ici : ce fichier est injecté comme corps de script par
|
||||
# pkgs.writeShellScriptBin dans installer-base.nix (qui ajoute déjà
|
||||
# `#!...` + `set -euo pipefail`).
|
||||
#
|
||||
# Installeur unique pour les deux repos :
|
||||
# - branche "flotte" -> nixos_fleet (public, jamais chiffré)
|
||||
# - branche "utilisateur nommé" -> nixos_users (privé, chiffrement au choix)
|
||||
# Ce script ne contient aucun secret : le token du repo privé est saisi en
|
||||
# direct, jamais stocké dans ce fichier ni dans un repo git.
|
||||
|
||||
FLEET_REPO="git+https://gitea.miniclic.net/Damien/Nixos_Fleet.git"
|
||||
USERS_REPO_HOST="gitea.miniclic.net"
|
||||
USERS_REPO_PATH="Damien/Nixos_Users.git"
|
||||
|
||||
echo "=== Installeur Nixos_Fleet ==="
|
||||
echo "1) PC de la flotte (générique)"
|
||||
echo "2) Poste utilisateur nommé"
|
||||
read -rp "Choix [1/2] : " CHOICE
|
||||
|
||||
# --- Détection automatique du disque cible -------------------------------
|
||||
# On exclut les disques amovibles (la clé USB de boot elle-même) et les
|
||||
# loop/rom. S'il en reste plusieurs (rare), on prend le plus gros et on le
|
||||
# signale clairement dans les logs plutôt que de bloquer sur un menu.
|
||||
echo
|
||||
echo "Détection du disque cible..."
|
||||
mapfile -t CANDIDATES < <(
|
||||
lsblk -dn -b -o NAME,TYPE,RM,SIZE |
|
||||
awk '$2 == "disk" && $3 == 0 { print $4, $1 }' |
|
||||
sort -rn
|
||||
)
|
||||
|
||||
if [ "${#CANDIDATES[@]}" -eq 0 ]; then
|
||||
echo "Aucun disque fixe détecté. Abandon." >&2
|
||||
exec bash
|
||||
fi
|
||||
|
||||
DEVICE="/dev/$(echo "${CANDIDATES[0]}" | awk '{print $2}')"
|
||||
if [ "${#CANDIDATES[@]}" -gt 1 ]; then
|
||||
echo "ATTENTION : plusieurs disques fixes détectés, le plus gros a été retenu : $DEVICE"
|
||||
printf ' %s\n' "${CANDIDATES[@]}"
|
||||
else
|
||||
echo "Disque retenu : $DEVICE"
|
||||
fi
|
||||
|
||||
case "$CHOICE" in
|
||||
1)
|
||||
# --- Branche flotte : rien d'autre à saisir -----------------------
|
||||
echo
|
||||
echo "Installation du profil générique 'usagers' sur $DEVICE..."
|
||||
nix run 'github:nix-community/disko#disko-install' -- --write-efi-boot-entries \
|
||||
--flake "${FLEET_REPO}#usagers" \
|
||||
--disk main "$DEVICE"
|
||||
;;
|
||||
|
||||
2)
|
||||
# --- Branche utilisateur nommé -------------------------------------
|
||||
read -rp "Utilisateur (thomas/clara/jade/oreo) : " USER_PROFILE
|
||||
USER_PROFILE=$(echo "$USER_PROFILE" | tr '[:upper:]' '[:lower:]' | xargs)
|
||||
case "$USER_PROFILE" in
|
||||
thomas|clara|jade|oreo) ;;
|
||||
*)
|
||||
echo "Utilisateur inconnu : $USER_PROFILE" >&2
|
||||
exec bash
|
||||
;;
|
||||
esac
|
||||
|
||||
read -rp "Chiffrer le disque ? [o/N] : " ENCRYPT
|
||||
ATTR="$USER_PROFILE"
|
||||
if [[ "$ENCRYPT" =~ ^[oOyY] ]]; then
|
||||
ATTR="${USER_PROFILE}-luks"
|
||||
fi
|
||||
|
||||
read -rsp "Token Gitea (repo privé Nixos_Users) : " TOKEN
|
||||
echo
|
||||
|
||||
# Le token n'est utilisé qu'en mémoire/ligne de commande pour ce fetch
|
||||
# ponctuel : il n'est jamais écrit dans un fichier suivi par git.
|
||||
AUTHED_URL="git+https://${TOKEN}@${USERS_REPO_HOST}/${USERS_REPO_PATH}"
|
||||
|
||||
echo
|
||||
echo "Installation du profil '$ATTR' sur $DEVICE..."
|
||||
if [[ "$ATTR" == *-luks ]]; then
|
||||
echo "Disque chiffré : disko va demander une passphrase LUKS pendant le partitionnement."
|
||||
fi
|
||||
nix run 'github:nix-community/disko#disko-install' -- --write-efi-boot-entries \
|
||||
--flake "${AUTHED_URL}#${ATTR}" \
|
||||
--disk main "$DEVICE"
|
||||
|
||||
# Le système installé doit pouvoir continuer à tirer ses mises à jour
|
||||
# du repo privé tout seul : on lui laisse un netrc, jamais commité,
|
||||
# jamais dans le Nix store (nix.settings.netrc-file dans le repo
|
||||
# nixos_users pointe vers ce même chemin).
|
||||
#
|
||||
# ATTENTION : le format exact attendu par Gitea (login=token vs
|
||||
# login+password séparés) dépend de la version/config du serveur —
|
||||
# à vérifier sur l'instance réelle avant le déploiement pilote.
|
||||
mkdir -p /mnt/etc/nix
|
||||
{
|
||||
echo "machine ${USERS_REPO_HOST}"
|
||||
echo "login ${TOKEN}"
|
||||
echo "password x-oauth-basic"
|
||||
} > /mnt/etc/nix/netrc
|
||||
chmod 600 /mnt/etc/nix/netrc
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Choix invalide." >&2
|
||||
exec bash
|
||||
;;
|
||||
esac
|
||||
|
||||
echo
|
||||
echo "Installation terminée. Redémarrage dans 10s (Ctrl-C pour annuler et inspecter /mnt)..."
|
||||
sleep 10
|
||||
reboot
|
||||
Reference in New Issue
Block a user