install.sh: clone+sed pour la substitution disque (pas de mecanisme --disk cote disko seul)
This commit is contained in:
+38
-20
@@ -24,29 +24,43 @@ for _ in $(seq 1 30); do
|
|||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
|
|
||||||
# Installe en 3 étapes séparées (partition -> swap sur le disque cible ->
|
# Installe en 4 étapes séparées (clone -> partition -> swap sur le disque
|
||||||
# vrai build) au lieu d'un seul `disko-install`. Raison : disko-install
|
# cible -> vrai build) au lieu d'un seul `disko-install`. Raison : disko-
|
||||||
# fait tout d'un coup dans le tmpfs RAM de l'environnement live, qui sature
|
# install fait tout d'un coup dans le tmpfs RAM de l'environnement live,
|
||||||
# sur les PC à peu de RAM (4 Go) avant même de toucher le disque cible.
|
# qui sature sur les PC à peu de RAM (4 Go) avant même de toucher le
|
||||||
# Un swapfile posé sur /mnt (une fois partitionné) donne accès aux ~200 Go
|
# disque cible. Un swapfile posé sur /mnt (une fois partitionné) donne
|
||||||
# du disque comme mémoire virtuelle pendant la vraie construction — méthode
|
# accès aux ~200 Go du disque comme mémoire virtuelle pendant la vraie
|
||||||
# documentée officiellement pour les machines à RAM limitée, voir
|
# construction — méthode documentée officiellement pour RAM limitée
|
||||||
# wiki.nixos.org/wiki/Swap et le manuel NixOS (section installation).
|
# (wiki.nixos.org/wiki/Swap, manuel NixOS section installation).
|
||||||
#
|
#
|
||||||
# Point non confirmé à 100% : que `disko` (seul, pas `disko-install`)
|
# Le clone local est nécessaire car la commande `disko` seule (contrairement
|
||||||
# accepte le même `--disk main <device>` que `disko-install`. La doc de
|
# à `disko-install`) n'a AUCUN mécanisme de substitution de disque nommé
|
||||||
# référence de disko ne montre que `--argstr`, mais disko-install n'étant
|
# (`--disk`/diskMappings n'existe que dans install-cli.nix, utilisé
|
||||||
# qu'un wrapper autour de disko, c'est très probable que ça marche pareil.
|
# uniquement par disko-install — vérifié dans le code source de
|
||||||
# Si la commande le refuse, l'erreur sera explicite.
|
# nix-community/disko : fichiers disko, disko-install, cli.nix). On substitue
|
||||||
|
# donc le vrai disque directement dans une copie locale du fichier disko
|
||||||
|
# avec sed, puis on pointe `disko` ET `nixos-install` sur ce même clone
|
||||||
|
# (chemin local, pas l'URL distante) pour que le partitionnement et le
|
||||||
|
# système construit restent cohérents entre eux.
|
||||||
do_install() {
|
do_install() {
|
||||||
local flake_url="$1"
|
local remote_url="$1" # URL flake (git+https://...), pour cloner
|
||||||
local attr="$2"
|
local attr="$2"
|
||||||
|
local disko_rel_path="$3" # diskos/plain.nix ou diskos/luks.nix
|
||||||
|
|
||||||
|
local repo_dir="/tmp/install-repo"
|
||||||
|
local clone_url="${remote_url#git+}" # git clone ne comprend pas le préfixe git+
|
||||||
|
|
||||||
|
echo "Récupération de la config ($attr)..."
|
||||||
|
rm -rf "$repo_dir"
|
||||||
|
git clone --depth 1 "$clone_url" "$repo_dir"
|
||||||
|
|
||||||
|
echo "Substitution du disque cible dans la config disko..."
|
||||||
|
sed -i "s#/dev/placeholder#$DEVICE#" "$repo_dir/$disko_rel_path"
|
||||||
|
|
||||||
echo "Partitionnement de $DEVICE..."
|
echo "Partitionnement de $DEVICE..."
|
||||||
nix run --no-write-lock-file --refresh 'github:nix-community/disko' -- \
|
nix run --no-write-lock-file --refresh 'github:nix-community/disko' -- \
|
||||||
--mode destroy,format,mount \
|
--mode destroy,format,mount \
|
||||||
--flake "${flake_url}#${attr}" \
|
"$repo_dir/$disko_rel_path"
|
||||||
--disk main "$DEVICE"
|
|
||||||
|
|
||||||
echo "Swap temporaire sur le disque cible (RAM limitée sur certains PC du parc)..."
|
echo "Swap temporaire sur le disque cible (RAM limitée sur certains PC du parc)..."
|
||||||
dd if=/dev/zero of=/mnt/.install-swapfile bs=1M count=4096 status=none
|
dd if=/dev/zero of=/mnt/.install-swapfile bs=1M count=4096 status=none
|
||||||
@@ -59,8 +73,10 @@ do_install() {
|
|||||||
# (mankier.com/8/nixos-install, miroir du manuel officiel). Le mot de
|
# (mankier.com/8/nixos-install, miroir du manuel officiel). Le mot de
|
||||||
# passe root est de toute façon déjà déclaré (initialPassword) dans la
|
# passe root est de toute façon déjà déclaré (initialPassword) dans la
|
||||||
# config cible, --no-root-passwd évite juste tout risque de prompt
|
# config cible, --no-root-passwd évite juste tout risque de prompt
|
||||||
# interactif qui bloquerait un install non surveillé.
|
# interactif qui bloquerait un install non surveillé. --flake pointe sur
|
||||||
nixos-install --root /mnt --flake "${flake_url}#${attr}" --no-channel-copy --no-root-passwd
|
# le clone local (avec le disque déjà substitué), pas l'URL distante,
|
||||||
|
# pour rester cohérent avec ce qui a été partitionné.
|
||||||
|
nixos-install --root /mnt --flake "${repo_dir}#${attr}" --no-channel-copy --no-root-passwd
|
||||||
|
|
||||||
swapoff /mnt/.install-swapfile
|
swapoff /mnt/.install-swapfile
|
||||||
rm -f /mnt/.install-swapfile
|
rm -f /mnt/.install-swapfile
|
||||||
@@ -101,7 +117,7 @@ case "$CHOICE" in
|
|||||||
# --- Branche flotte : rien d'autre à saisir -----------------------
|
# --- Branche flotte : rien d'autre à saisir -----------------------
|
||||||
echo
|
echo
|
||||||
echo "Installation du profil générique 'usagers' sur $DEVICE..."
|
echo "Installation du profil générique 'usagers' sur $DEVICE..."
|
||||||
do_install "$FLEET_REPO" "usagers"
|
do_install "$FLEET_REPO" "usagers" "diskos/plain.nix"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
2)
|
2)
|
||||||
@@ -131,10 +147,12 @@ case "$CHOICE" in
|
|||||||
|
|
||||||
echo
|
echo
|
||||||
echo "Installation du profil '$ATTR' sur $DEVICE..."
|
echo "Installation du profil '$ATTR' sur $DEVICE..."
|
||||||
|
DISKO_REL_PATH="diskos/plain.nix"
|
||||||
if [[ "$ATTR" == *-luks ]]; then
|
if [[ "$ATTR" == *-luks ]]; then
|
||||||
echo "Disque chiffré : disko va demander une passphrase LUKS pendant le partitionnement."
|
echo "Disque chiffré : disko va demander une passphrase LUKS pendant le partitionnement."
|
||||||
|
DISKO_REL_PATH="diskos/luks.nix"
|
||||||
fi
|
fi
|
||||||
do_install "$AUTHED_URL" "$ATTR"
|
do_install "$AUTHED_URL" "$ATTR" "$DISKO_REL_PATH"
|
||||||
|
|
||||||
# Le système installé doit pouvoir continuer à tirer ses mises à jour
|
# Le système installé doit pouvoir continuer à tirer ses mises à jour
|
||||||
# du repo privé tout seul : on lui laisse un netrc, jamais commité,
|
# du repo privé tout seul : on lui laisse un netrc, jamais commité,
|
||||||
|
|||||||
Reference in New Issue
Block a user