From 43642f94d6c13bf455b65eaa47303d2a7c331af2 Mon Sep 17 00:00:00 2001 From: korenstin Date: Sat, 14 Jun 2025 14:12:39 +0200 Subject: [PATCH] Ajout iso custom --- flake.nix | 8 ++++ hosts/iso/README.md | 71 +++++++++++++++++++++++++++++++ hosts/iso/default.nix | 99 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 178 insertions(+) create mode 100644 hosts/iso/README.md create mode 100644 hosts/iso/default.nix diff --git a/flake.nix b/flake.nix index c212442..cc4b427 100644 --- a/flake.nix +++ b/flake.nix @@ -79,6 +79,14 @@ specialArgs = inputs; modules = [ ./hosts/vm/vaultwarden ] ++ baseModules; }; + cransIso = nixosSystem { + system = "x86_64-linux"; + specialArgs = inputs; + modules = [ + ./hosts/iso + ./modules/crans/locale.nix + ]; + }; }; }; diff --git a/hosts/iso/README.md b/hosts/iso/README.md new file mode 100644 index 0000000..b63d3aa --- /dev/null +++ b/hosts/iso/README.md @@ -0,0 +1,71 @@ +# Iso + +La configuration présente dans le dossier iso contient une configuration custom +ayant pour but de simplifier l'installation des VM au CR@NS. + +## Création de l'iso + +Pour configurer l'iso, il suffit d'éditer les fichiers de configuration. + +Pour générer l'iso, il suffit d'éxécuter la commande suivante : + +```bash +nix build .#nixosConfigurations.cransIso.config.system.build.isoImage +``` + +Une fois générer, l'iso se trouve dans le dossier `result/iso`. il est alors +possible de le renommer puis de le rendre accessible sur les hyperviseurs avec +au choix : + + - envoyer le fichier depuis l'interface graphique de proxmox + - en l'envoyant avec la commande + `scp result/iso/.iso sam.adm.crans.org:/var/lib/vz/template/iso/` + +Remarque : quelque soit la solution choisie, pensez à procéder de la même façon +pour tout les hyperviseurs. + +il est également possible de vérifier si l'iso est opérationnel à en procédant +ainsi : + +```bash +nix-shell -p qemu +qemu-system-x86_64 -enable-kvm -m 256 -cdrom result/iso/.iso +``` + +## Installation d'une VM + +Pour l'installation d'une VM, il faut commencer par booter sur l'iso custom. +Une fois cela effectuer, la configuration réseau doit être effectuer. + +Un script permettant de simplifier celle ci est disponible à l'aide de la +commande `crans-ip-config`. Il vous est alors demandé un id qui correspond au +numéro de la VM. + +Pour simplifier le partitionnement du disque, vous pouvez éxécuter la commande +`crans-disk-config`. Il vous sera alors demander le disque à considérer. + +ATTENTION /!\ : la configuration automatique des disques ne permet de faire +uniquement la configuration la plus basique (une seule parition en ext4). +Pour des configurations plus complexe, veuillez voir des +[documentations](../README.md) plus détailler et ne pas utiliser le script. + +Récapitulatif des commandes : + +```bash +$ sudo su +$ crans-ip-config +id : 42 # a priori, l'id est supérieur à 100 +vlan 10, interface enxXX : 18 +souhaitez-vous configurer le vlan 3 ? (o/n)O +vlan 3, interface ensXX : 19 + +$ crans-disk-config + +disque : sda +Veuillez déplacer le fichier /mnt/etc/nixos/hardware-configuration.nix à +l'emplacement de la vm en cours d'installation. +Pensez également à vous mettre sur la branche appropriée +``` + +À ce niveau là, la connexion ssh sur le nouveau serveur est possible avec le +mot de passe `crans`. diff --git a/hosts/iso/default.nix b/hosts/iso/default.nix new file mode 100644 index 0000000..e4e9462 --- /dev/null +++ b/hosts/iso/default.nix @@ -0,0 +1,99 @@ +{ pkgs, lib, modulesPath, ... }: + +{ + imports = [ + (modulesPath + "/installer/cd-dvd/installation-cd-minimal.nix") + ]; + + networking = { + hostName = "crans-iso"; + dhcpcd.enable = false; + nameservers = [ "172.16.10.128" ]; + }; + + nix = { + settings.experimental-features = [ "nix-command" "flakes" ]; + extraOptions = "experimental-features = nix-command flakes"; + }; + + boot = { + kernelParams = [ "console=ttyS0,115200" ]; + kernelPackages = pkgs.linuxPackages_latest; + supportedFilesystems = lib.mkForce [ "btrfs" "vfat" "zfs"]; + }; + + services.openssh = { + enable = true; + }; + + nixpkgs.config.allowUnfree = true; + + # Enable some utility programs. + programs.git.enable = true; + programs.htop.enable = true; + programs.neovim.enable = true; + programs.screen.enable = true; + programs.tmux.enable = true; + programs.vim.enable = true; + + environment.systemPackages = + let crans-ip-config = + ( + pkgs.writeShellScriptBin "crans-ip-config" + '' + #!/usr/bin/env bash + echo -n "ID : " + read ID + ip -c l + echo -n "vlan 10, interface ensXX : " + read INTERFACE10 + ip addr add 172.16.10.$ID/24 dev ens$INTERFACE10 + echo -n "souhaitez-vous configurer le vlan 3 ? (o/N)" + read REP + if [[ "$REP" == [oOyY] ]]; then + echo -n "vlan 3, interface ensXX : " + read INTERFACE3 + ip addr add 172.16.3.$ID/24 dev ens$INTERFACE3 + ip route add default via 172.16.3.99 + else + ip route add default via 172.16.10.101 + fi + '' + ); + crans-disk-config = + ( + pkgs.writeShellScriptBin "crans-disk-config" + '' + #!/usr/bin/env bash + lsblk + echo -n "disque /dev/XXX : " + read DISK + parted /dev/$DISK -- mklabel msdos + parted /dev/$DISK -- mkpart primary 1MB 100% + parted /dev/$DISK -- set 1 boot on + mkfs.ext4 -L nixos /dev/$DISK + mount /dev/$DISK /mnt + nixos-generate-config --root /mnt + cp /mnt/etc/nixos/hardware-configuration.nix /root/ + rm -rf /mnt/etc/nixos + git clone https://gitlab.adm.crans.org/nounous/nixos.git /mnt/etc/nixos + cp /root/hardware-configuration.nix /mnt/etc/nixos/ + rm /root/hardware-configuration.nix + echo "Veuillez déplacer le fichier /mnt/etc/nixos/hardware-configuration.nix à l'emplacement de la vm en cours d'installation." + echo "Pensez également à vous mettre sur la branche appropriée" + '' + ); + in with pkgs; [ + bat + fd + helix + nfs-utils + ripgrep + shelldap + crans-ip-config + crans-disk-config + ]; + + users.users.root.password = "crans"; + +}