Ajout iso custom

iso
korenstin 2025-06-14 14:12:39 +02:00
parent 89ae1f5475
commit 43642f94d6
3 changed files with 178 additions and 0 deletions

View File

@ -79,6 +79,14 @@
specialArgs = inputs; specialArgs = inputs;
modules = [ ./hosts/vm/vaultwarden ] ++ baseModules; modules = [ ./hosts/vm/vaultwarden ] ++ baseModules;
}; };
cransIso = nixosSystem {
system = "x86_64-linux";
specialArgs = inputs;
modules = [
./hosts/iso
./modules/crans/locale.nix
];
};
}; };
}; };

View File

@ -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/<nom>.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/<nom>.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
<la liste des disques apparaît>
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`.

View File

@ -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";
}