Compare commits

...
2 Commits
2 changed files with 47 additions and 6 deletions
+44 -6
View File
@@ -24,6 +24,48 @@ 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 ->
# vrai build) au lieu d'un seul `disko-install`. Raison : disko-install
# fait tout d'un coup dans le tmpfs RAM de l'environnement live, qui sature
# sur les PC à peu de RAM (4 Go) avant même de toucher le disque cible.
# Un swapfile posé sur /mnt (une fois partitionné) donne accès aux ~200 Go
# du disque comme mémoire virtuelle pendant la vraie construction — méthode
# documentée officiellement pour les machines à RAM limitée, voir
# wiki.nixos.org/wiki/Swap et le manuel NixOS (section installation).
#
# Point non confirmé à 100% : que `disko` (seul, pas `disko-install`)
# accepte le même `--disk main <device>` que `disko-install`. La doc de
# référence de disko ne montre que `--argstr`, mais disko-install n'étant
# qu'un wrapper autour de disko, c'est très probable que ça marche pareil.
# Si la commande le refuse, l'erreur sera explicite.
do_install() {
local flake_url="$1"
local attr="$2"
echo "Partitionnement de $DEVICE..."
nix run --no-write-lock-file --refresh 'github:nix-community/disko' -- \
--mode destroy,format,mount \
--flake "${flake_url}#${attr}" \
--disk main "$DEVICE"
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
chmod 600 /mnt/.install-swapfile
mkswap /mnt/.install-swapfile
swapon /mnt/.install-swapfile
echo "Construction et installation du système (peut prendre plusieurs minutes)..."
# --no-channel-copy, --no-root-passwd : confirmés dans le man nixos-install
# (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
# config cible, --no-root-passwd évite juste tout risque de prompt
# interactif qui bloquerait un install non surveillé.
nixos-install --root /mnt --flake "${flake_url}#${attr}" --no-channel-copy --no-root-passwd
swapoff /mnt/.install-swapfile
rm -f /mnt/.install-swapfile
}
echo "=== Installeur Nixos_Fleet ===" echo "=== Installeur Nixos_Fleet ==="
echo "1) PC de la flotte (générique)" echo "1) PC de la flotte (générique)"
echo "2) Poste utilisateur nommé" echo "2) Poste utilisateur nommé"
@@ -59,9 +101,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..."
nix run --no-write-lock-file --refresh 'github:nix-community/disko#disko-install' -- --write-efi-boot-entries \ do_install "$FLEET_REPO" "usagers"
--flake "${FLEET_REPO}#usagers" \
--disk main "$DEVICE"
;; ;;
2) 2)
@@ -94,9 +134,7 @@ case "$CHOICE" in
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."
fi fi
nix run --no-write-lock-file --refresh 'github:nix-community/disko#disko-install' -- --write-efi-boot-entries \ do_install "$AUTHED_URL" "$ATTR"
--flake "${AUTHED_URL}#${ATTR}" \
--disk main "$DEVICE"
# 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é,
+3
View File
@@ -41,6 +41,9 @@ in
]; ];
i18n.defaultLocale = "fr_FR.UTF-8"; i18n.defaultLocale = "fr_FR.UTF-8";
# i18n.defaultLocale ne règle pas le clavier de la console — option
# séparée, absente jusqu'ici pour ce host (vérifié : wiki.nixos.org/wiki/Keyboard_Layout_Customization).
console.keyMap = "fr";
boot.loader.systemd-boot.enable = true; boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true; boot.loader.efi.canTouchEfiVariables = true;