Initial commit
This commit is contained in:
commit
36a0ab9b94
16 changed files with 394 additions and 0 deletions
42
README.md
Normal file
42
README.md
Normal file
|
@ -0,0 +1,42 @@
|
|||
# NixOS
|
||||
|
||||
Ce repo contient la configuration NixOS des différentes machines présentes dans
|
||||
l'infrastructure de Aurore et ce décompose en plusieurs partie :
|
||||
|
||||
- [hosts](./hosts) : contient la configuration spécifique à chaque machine,
|
||||
typiquement la configuration réseau,
|
||||
- [profiles](./profiles) : contient la configuration des différents modules
|
||||
utilisé,
|
||||
- [disks](./disks) : contient la configuration [disko](https://github.com/nix-community/disko)
|
||||
des machines.
|
||||
|
||||
## Installation d'une machine
|
||||
|
||||
Si la configuration est déjà écrite, il faut alors suivre les étapes
|
||||
suivantes :
|
||||
|
||||
1. S'assurer que la machine a accès à internet et possède un serveur DNS,
|
||||
1. Importer les fichiers de configurations,
|
||||
1. Si nécéssaire, il faut de générer le fichier `hardware-configuration.nix`
|
||||
à l'aide de la commande `nixos-generate-config --no-filesystems --root .`
|
||||
puis de l'ajouter dans la configuration,
|
||||
1. Vérifier que la configuration `disko` utilisée est compatible, la
|
||||
commande `lsblk` devrait être suffisant pour cela,
|
||||
1. Partitionner les disques : l'usage de `disko` simplifie cette étape. En
|
||||
effet, il suffit d'exécuter la commande :
|
||||
`nix run github:nix-community/disko --extra-experimental-features "nix-command flakes" -- --mode disko --flake <path>#<nom>`
|
||||
`disko` s'occupe automatiquement du montage des partitions créer,
|
||||
1. Créer le répertoire `/mnt/etc/nixos` et ajouter les fichiers de
|
||||
configuration dans ce répertoire,
|
||||
1. Installer NixOS : `nixos-install --flake <path>#<nom>`,
|
||||
1. Si tout s'est bien passé, un mot de passe vous sera demandé pour le mot
|
||||
de passe root. Entrer celui-ci puis `poweroff` ou `reboot`.
|
||||
1. Penser à push la configuration ainsi écrite.
|
||||
|
||||
Remarque :
|
||||
|
||||
> S'il n'y a pas suffisamment de place mémoire sur le disque d'installation
|
||||
> lors du partitionnement des disques avec disko, il est possible d'étendre le
|
||||
> nix-store en utilisant la RAM à l'aide de la commande :
|
||||
> `mount -o remount,size=3G,noatime /nix/.rw-store`
|
||||
> Cependant, cela peut être risquer s'il n'y a pas suffisamment de RAM.
|
34
disks/layout_vm.nix
Normal file
34
disks/layout_vm.nix
Normal file
|
@ -0,0 +1,34 @@
|
|||
{ ... }:
|
||||
|
||||
{
|
||||
disko.devices = {
|
||||
disk = {
|
||||
main = {
|
||||
device = "/dev/sda";
|
||||
type = "disk";
|
||||
content = {
|
||||
type = "gpt";
|
||||
partitions = {
|
||||
ESP = {
|
||||
end = "1G";
|
||||
type = "EF00";
|
||||
content = {
|
||||
type = "filesystem";
|
||||
format = "vfat";
|
||||
mountpoint = "/boot";
|
||||
};
|
||||
};
|
||||
root = {
|
||||
size = "100%";
|
||||
content = {
|
||||
type = "filesystem";
|
||||
format = "ext4";
|
||||
mountpoint = "/";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
103
flake.lock
Normal file
103
flake.lock
Normal file
|
@ -0,0 +1,103 @@
|
|||
{
|
||||
"nodes": {
|
||||
"disko": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1758160037,
|
||||
"narHash": "sha256-fXelTdjdILspZ1IUU9aICB1+PXwSFiF8j+7ujwo1VpQ=",
|
||||
"owner": "nix-community",
|
||||
"repo": "disko",
|
||||
"rev": "4f554162fff88e77655073d352eec0cea71103a2",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "disko",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-parts": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": "nixpkgs-lib"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1756770412,
|
||||
"narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "4524271976b625a4a605beefd893f270620fd751",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1758070117,
|
||||
"narHash": "sha256-uLwwHFCZnT1c3N3biVe/0hCkag2GSrf9+M56+Okf+WY=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "e9b7f2ff62b35f711568b1f0866243c7c302028d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-25.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-lib": {
|
||||
"locked": {
|
||||
"lastModified": 1754788789,
|
||||
"narHash": "sha256-x2rJ+Ovzq0sCMpgfgGaaqgBSwY+LST+WbZ6TytnT9Rk=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nixpkgs.lib",
|
||||
"rev": "a73b9c743612e4244d865a2fdee11865283c04e6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "nixpkgs.lib",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"disko": "disko",
|
||||
"flake-parts": "flake-parts",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"treefmt-nix": "treefmt-nix"
|
||||
}
|
||||
},
|
||||
"treefmt-nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1758206697,
|
||||
"narHash": "sha256-/DbPkh6PZOgfueCbs3uzlk4ASU2nPPsiVWhpMCNkAd0=",
|
||||
"owner": "numtide",
|
||||
"repo": "treefmt-nix",
|
||||
"rev": "128222dc911b8e2e18939537bed1762b7f3a04aa",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "treefmt-nix",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
54
flake.nix
Normal file
54
flake.nix
Normal file
|
@ -0,0 +1,54 @@
|
|||
{
|
||||
description = "La flake de aurore";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
|
||||
flake-parts.url = "github:hercules-ci/flake-parts";
|
||||
|
||||
treefmt-nix = {
|
||||
url = "github:numtide/treefmt-nix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
disko = {
|
||||
url = "github:nix-community/disko";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
|
||||
outputs =
|
||||
inputs@{
|
||||
self,
|
||||
nixpkgs,
|
||||
flake-parts,
|
||||
disko,
|
||||
...
|
||||
}:
|
||||
flake-parts.lib.mkFlake { inherit inputs; } {
|
||||
imports = [ inputs.treefmt-nix.flakeModule ];
|
||||
|
||||
systems = [ "x86_64-linux" ];
|
||||
|
||||
flake = with nixpkgs.lib; {
|
||||
nixosConfigurations =
|
||||
let
|
||||
defaultConfig = [
|
||||
./profiles/common
|
||||
|
||||
disko.nixosModules.disko
|
||||
];
|
||||
defaultVM = [
|
||||
./profiles/vm
|
||||
./disks/layout_vm.nix
|
||||
] ++ defaultConfig;
|
||||
in {
|
||||
jitsi = nixosSystem {
|
||||
specialArgs = inputs;
|
||||
modules = [
|
||||
./hosts/vm/jitsi
|
||||
] ++ defaultVM;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
46
hosts/vm/jitsi/default.nix
Normal file
46
hosts/vm/jitsi/default.nix
Normal file
|
@ -0,0 +1,46 @@
|
|||
{ ... }:
|
||||
|
||||
{
|
||||
networking = {
|
||||
hostName = "jitsi";
|
||||
domain = "pub.infra.auro.re";
|
||||
};
|
||||
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
|
||||
systemd.network = {
|
||||
enable = true;
|
||||
links = {
|
||||
"10-pub" = {
|
||||
matchConfig.MACAddress = "ae:ae:ae:74:db:e1";
|
||||
linkConfig.Name = "pub";
|
||||
};
|
||||
};
|
||||
networks = {
|
||||
"10-pub" = {
|
||||
domains = [
|
||||
"pub.infra.auro.re"
|
||||
"auro.re"
|
||||
];
|
||||
matchConfig.Name = "pub";
|
||||
linkConfig.RequiredForOnline = "routable";
|
||||
address = [
|
||||
"45.66.111.216/27"
|
||||
"2a09:6840:215::1:216/64"
|
||||
];
|
||||
routes = [
|
||||
{ Gateway = "45.66.111.204"; }
|
||||
{ Gateway = "2a09:6840:215::1"; }
|
||||
];
|
||||
dns = [
|
||||
"10.206.1.1"
|
||||
"10.206.1.2"
|
||||
"2a09:6840:206::1:1"
|
||||
"2a09:6840:206::1:2"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
system.stateVersion = "25.05";
|
||||
}
|
12
profiles/common/default.nix
Normal file
12
profiles/common/default.nix
Normal file
|
@ -0,0 +1,12 @@
|
|||
{ ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./locale.nix
|
||||
./networking.nix
|
||||
./nix.nix
|
||||
./ntp.nix
|
||||
./ssh.nix
|
||||
./tmp.nix
|
||||
];
|
||||
}
|
7
profiles/common/locale.nix
Normal file
7
profiles/common/locale.nix
Normal file
|
@ -0,0 +1,7 @@
|
|||
{ ... }:
|
||||
|
||||
{
|
||||
i18n.defaultLocale = "en_US.UTF-8";
|
||||
console.keyMap = "fr";
|
||||
time.timeZone = "Europe/Paris";
|
||||
}
|
5
profiles/common/networking.nix
Normal file
5
profiles/common/networking.nix
Normal file
|
@ -0,0 +1,5 @@
|
|||
{ ... }:
|
||||
|
||||
{
|
||||
networking.useDHCP = false;
|
||||
}
|
13
profiles/common/nix.nix
Normal file
13
profiles/common/nix.nix
Normal file
|
@ -0,0 +1,13 @@
|
|||
{ ... }:
|
||||
|
||||
{
|
||||
nix = {
|
||||
settings = {
|
||||
experimental-features = [
|
||||
"flakes"
|
||||
"nix-command"
|
||||
];
|
||||
auto-optimise-store = true;
|
||||
};
|
||||
};
|
||||
}
|
11
profiles/common/ntp.nix
Normal file
11
profiles/common/ntp.nix
Normal file
|
@ -0,0 +1,11 @@
|
|||
{ ... }:
|
||||
|
||||
{
|
||||
services.timesyncd = {
|
||||
enable = true;
|
||||
servers = [
|
||||
"ntp-1.int.infra.auro.re"
|
||||
"ntp-2.int.infra.auro.re"
|
||||
];
|
||||
};
|
||||
}
|
19
profiles/common/programs.nix
Normal file
19
profiles/common/programs.nix
Normal file
|
@ -0,0 +1,19 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
programs = {
|
||||
git.enable = true;
|
||||
htop.enable = true;
|
||||
neovim.enable = true;
|
||||
screen.enable = true;
|
||||
tmux.enable = true;
|
||||
vim.enable = true;
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
bat
|
||||
fd
|
||||
helix
|
||||
inetutils
|
||||
];
|
||||
}
|
9
profiles/common/ssh.nix
Normal file
9
profiles/common/ssh.nix
Normal file
|
@ -0,0 +1,9 @@
|
|||
{ ... }:
|
||||
|
||||
{
|
||||
services.openssh = {
|
||||
enable = true;
|
||||
|
||||
settings.PermitRootLogin = "no";
|
||||
};
|
||||
}
|
10
profiles/common/tmp.nix
Normal file
10
profiles/common/tmp.nix
Normal file
|
@ -0,0 +1,10 @@
|
|||
{ ... }:
|
||||
|
||||
{
|
||||
boot = {
|
||||
tmp = {
|
||||
useTmpfs = true;
|
||||
cleanOnBoot = true;
|
||||
};
|
||||
};
|
||||
}
|
8
profiles/vm/default.nix
Normal file
8
profiles/vm/default.nix
Normal file
|
@ -0,0 +1,8 @@
|
|||
{ ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
./virtualisation.nix
|
||||
];
|
||||
}
|
14
profiles/vm/hardware-configuration.nix
Normal file
14
profiles/vm/hardware-configuration.nix
Normal file
|
@ -0,0 +1,14 @@
|
|||
{ lib, modulesPath, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[ (modulesPath + "/profiles/qemu-guest.nix")
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = [ "ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod" ];
|
||||
boot.initrd.kernelModules = [ "dm-snapshot" ];
|
||||
boot.kernelModules = [ ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
}
|
7
profiles/vm/virtualisation.nix
Normal file
7
profiles/vm/virtualisation.nix
Normal file
|
@ -0,0 +1,7 @@
|
|||
{ ... }:
|
||||
|
||||
{
|
||||
boot.kernelParams = [ "console=ttyS0,115200" ];
|
||||
|
||||
services.qemuGuest.enable = true;
|
||||
}
|
Loading…
Reference in a new issue