diff --git a/README b/README deleted file mode 100644 index e057167..0000000 --- a/README +++ /dev/null @@ -1,11 +0,0 @@ -# nixos-template-base - -Ce dépôt stocke une configuration générique des machines. -Une recette dite "config-generator" adapte la configuration selon le nom de la machine (FQDN). - -Actuellement, les scripts contiennent un peu de configuration spécifique pour les machines des mainteneurs. - -# Lien pour install sur machine distante - -* https://nixos.org/wiki/How_to_install_NixOS_from_Linux#Installing_through_a_chroot -* https://github.com/NixOS/nixpkgs/issues/13305 diff --git a/README.md b/README.md new file mode 100644 index 0000000..6e04aef --- /dev/null +++ b/README.md @@ -0,0 +1,41 @@ +# nixos-template-base + +Ce dépôt stocke une configuration générique des machines. +Une recette dite "config-generator" adapte la configuration selon le nom de la machine (FQDN). + +Actuellement, les scripts contiennent un peu de configuration spécifique pour les machines des mainteneurs. + +# Lien pour install sur machine distante + +* https://nixos.org/wiki/How_to_install_NixOS_from_Linux#Installing_through_a_chroot +* https://github.com/NixOS/nixpkgs/issues/13305 + +# Notes pour l'upgrade de 16.03 vers 16.09 + +* mettre le dépôt base sur la branche upgrade-16.09 +* changer le channel nixos : ```nix-channel --add https://nixos.org/channels/nixos-16.09 nixos``` +* activer x11 dans le configuration.nix + +~~~ +services.xserver.enable = true; +~~~ + +* remplacer le bootloader si gummiboot était utilisé + +~~~ +boot.loader.gummiboot.enable = true; +~~~ + +devient + +~~~ +boot.loader.systemd-boot.enable = true; +~~~ + +Pour résoudre les soucis d'upgrade, il est conseillé : +* de désactiver tous les imports (sauf `hardware.nix`) +* d'ajouter `.../localisation.nix` dans les imports sous peine d'être en clavier US +* d'ajouter ```nixpkgs.config.allowUnfree = true;``` +* d'ajouter `vim` aux paquets +* de réactiver petit à petit les lignes désactivées + diff --git a/config-generator.nix b/config-generator.nix index ff07362..4eab55f 100644 --- a/config-generator.nix +++ b/config-generator.nix @@ -42,6 +42,8 @@ in edition-photo = mkEnableOption "Profil pour la création/édition de photos."; edition-video = mkEnableOption "Profil pour la création/édition de video."; fail2ban = mkEnableOption "Profil pour activer Fail2ban."; + hydra-builder = mkEnableOption "Profil pour une machine qui compile pour hydra."; + hydra-core = mkEnableOption "Profil pour un serveur hydra."; jeux = mkEnableOption "Profil pour les jeux vidéos."; laptop = mkEnableOption "Profil pour les outils spécifiques aux ordinateurs portables.."; locate = mkEnableOption "Profil pour activer la fonction locate."; @@ -53,10 +55,27 @@ in online-ipv6 = mkEnableOption "Profil pour activer l'IPv6 de online.net"; print = mkEnableOption "Profil pour activer cups & pouvoir imprimer."; rabbitmq = mkEnableOption "Profil pour activer le service de messagerie AMQP."; + radicale = mkEnableOption "Profil pour activer le service d'hébergement de calendrier + tâches & contacts."; swap = mkEnableOption "Profil pour que le swap soit activé."; virtualbox = mkEnableOption "Profil pour l'utilisation de VirtualBox."; xmonad = mkEnableOption "Profil pour activer le gestionnaire de fenêtres xmonad."; znc = mkEnableOption "Profil pour activer le relais IRC ZNC."; + + tincAddress = mkOption { + default = ""; + example = "192.168.1.1"; + description = "Adresse du noeud tinc local"; + type = lib.types.string; + }; + tincExtraConfig = mkOption { + default = ""; + example = '' + Mode = router + ConnecTo = bar + ''; + description = "Configuration supplémentaire pour tinc"; + type = lib.types.string; + }; }; #* Utilisé pour avoir des raccourcis de machine r6d.computers = { @@ -171,6 +190,7 @@ in r6d.config-generator = { docker = true; + radicale = true; }; }) (mkIf comp.isRadx { @@ -181,6 +201,8 @@ in }; r6d.config-generator = { + hydra-builder = true; + hydra-core = true; print = true; virtualbox = true; }; @@ -201,6 +223,8 @@ in r6d.config-generator = { laptop = true; + tincAddress = "192.168.12.2/24"; + tincExtraConfig = "ConnectTo = phenom_dubronetwork_fr"; }; }) (mkIf comp.isMonstre { @@ -254,6 +278,7 @@ in nix-serve-server = true; laptop = true; edition-photo = true; + tincAddress = "192.168.12.1/24"; }; }) (mkIf comp.isRollo { diff --git a/public/app-client-internet.nix b/public/app-client-internet.nix index 90b9211..f098f35 100644 --- a/public/app-client-internet.nix +++ b/public/app-client-internet.nix @@ -25,7 +25,7 @@ environment.systemPackages = with pkgs; [ ## Mail & Discussion (texte, audio) clawsMail hexchat - kde5.quasselClient + quasselClient mumble mutt pidgin diff --git a/public/app-developpement.nix b/public/app-developpement.nix index 4afe3d5..4fbf463 100644 --- a/public/app-developpement.nix +++ b/public/app-developpement.nix @@ -38,7 +38,7 @@ mkIf cfg.developpement { ## Rust cargo # récupération des dépendances + compilation projet rust - rustPlatform.rustc # pour les appels depuis les scripts + rustc # pour les appels depuis les scripts ## Visualisation & outils de diff gource # visualisation en mouvement de l'historique git diff --git a/public/environment.nix b/public/environment.nix index 916650e..b7a7782 100644 --- a/public/environment.nix +++ b/public/environment.nix @@ -12,7 +12,7 @@ in nix.buildCores = 0; # The NixOS release to be compatible with for stateful data such as databases. - system.stateVersion = "16.03"; + system.stateVersion = "16.09"; # copies the NixOS configuration file (usually /etc/nixos/configuration.nix) and links it from the resulting system (getting to /run/current-system/configuration.nix) system.copySystemConfiguration = true; @@ -20,6 +20,12 @@ in # On autorise les paquets non-libres nixpkgs.config.allowUnfree = true; + # Lancement de dbus pour les utilisateurs + services.dbus.socketActivated = true; + + # NixOS Hardening + #security.grsecurity.enable = true; + # Paquets environment = { systemPackages = with pkgs; [ @@ -39,6 +45,7 @@ in p7zip # compression de fichier parted # partitionnement de disque pciutils + pinentry # pour taper les mots de passe gpg psmisc # fournis les utilitaires comme killall, fuser, pstree python # python -- python -m SimpleHTTPServer 8000 python34Packages.glances # monitoring @@ -53,6 +60,7 @@ in ]; shellAliases = { byobu = "byobu-tmux"; + gpg = "gpg2"; jacques-a-dit = "sudo"; tree = "tree -C"; tree1 = "tree -d -L 1"; diff --git a/public/network.nix b/public/network.nix new file mode 100644 index 0000000..cd89819 --- /dev/null +++ b/public/network.nix @@ -0,0 +1,18 @@ +{ config, lib, pkgs, ... }: + +let + inherit (lib) mkIf mkMerge mkThenElse; + cfg = config.r6d.config-generator; + computers = config.r6d.computers; + profiles = config.r6d.profiles; +in + +mkIf true { + + # fix: Hostname -s renvoie "Unknown host" alors que hostname renvoie la bonne valeur + # Il s'avère que hostname vérifie la validité du FQDN et du reverse. + # Fixer ces paramètres dans les hosts permet de faire tomber en marche + networking.extraHosts = '' + 127.0.0.1 ${config.networking.hostName} + ''; +} diff --git a/public/public.nix b/public/public.nix index 2e0eaf7..2d43287 100644 --- a/public/public.nix +++ b/public/public.nix @@ -12,6 +12,7 @@ in # installées systématiquement ./environment.nix ./localisation.nix + ./network.nix #./network-ipv6.nix ./sudo.nix ./service-haveged.nix @@ -33,6 +34,8 @@ in ./auto-upgrade.nix # mise à jour automatique du système ./laptop.nix # appli & configuration adaptée pour un PC portable ./print.nix # configuration de base de cups + ./service-hydra-build.nix # service de construction de paquet. -> la machine compile des paquets + ./service-hydra-core.nix # service pour l'instance d'hydra ./service-laptop.nix # services spécifiques aux pc portables ./service-locate.nix # service locate ./swap.nix # définition de l'utilisation du swap diff --git a/public/service-hydra-build.nix b/public/service-hydra-build.nix new file mode 100644 index 0000000..98a6453 --- /dev/null +++ b/public/service-hydra-build.nix @@ -0,0 +1,32 @@ +{ config, lib, pkgs, ... }: + +let + inherit (lib) mkIf mkMerge mkThenElse; + cfg = config.r6d.config-generator; + computers = config.r6d.computers; + profiles = config.r6d.profiles; +in + +mkIf cfg.hydra-builder { + + # Paquets + environment.systemPackages = with pkgs; [ + ]; + + # Services + + + virtualisation.virtualbox.host.enable = true; + nix.gc.automatic = true; + + users.users."hydrabld" = { + description = "Execution des jobs hydra"; + group = "nixbld"; + extraGroups = [ "nixbld" ]; + isNormalUser = true; + + openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGYpjcWJCf8dXpv2LmoIaNVbwZXEC50QUU6Az+lqeD89 hydra radx" + ]; + }; +} diff --git a/public/service-hydra-core.nix b/public/service-hydra-core.nix new file mode 100644 index 0000000..c34249a --- /dev/null +++ b/public/service-hydra-core.nix @@ -0,0 +1,60 @@ +{ config, lib, pkgs, ... }: + +let + inherit (lib) mkIf mkMerge mkThenElse; + cfg = config.r6d.config-generator; + computers = config.r6d.computers; + profiles = config.r6d.profiles; +in + +mkIf cfg.hydra-core { + + # Paquets + environment.systemPackages = with pkgs; [ + ]; + + # Services + + ## Hydra + # 2. créer un utilisateur pour gérer hydra + # su - hydra + # hydra-create-user jpierre03 --password xxx --role 'admin' + + services.hydra = { + enable = true; + hydraURL = "http://hydra.${config.networking.hostName}"; + notificationSender = "hydra@${config.networking.hostName}"; + listenHost = "localhost"; + minimumDiskFree = 50; # Go + }; + + ## Ménage + #nix.gc.automatic = true; + + ## Délégation des actions de compilation à la compilefarm + + ### Machines connues + # 2. récupérer la clef publique du serveur ssh : ssh-keyscan localhost + l'ajouter dans les knownHosts + + programs.ssh.knownHosts = { + "monstre.dubronetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBTTrLhq1Cwm0rpnwEIxSLqVrJWZnt+/9dt+SKd8NiIc"; + "pedro.dubronetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM7fjo2ysLqlfSo6BKnc6I6m1ayoPrbwEEyTKZmUzsOD"; + "ocean.prunetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINCaRuTl8iCTUE4XInOpkSlwQj5Re4w4Iq+gNIlJe8pA"; + "radx.prunetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGyoXdTEnxSgZTMfRfVH+bpOGZJtJpydAijcRGsZik7U"; + "rollo.dubronetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID4lWgS/sVdcZvnAAN+lBSOcCL9ISdAUsjp1kh9lalNu"; + }; + + # une fois installé : + # 1. créer chef SSH : ssh-keygen -C "hydra@pedro.dubronetwork.fr" -N "" -f /etc/nixos/id_buildfarm + # ssh-keygen -t ed25519 -C "hydra MACHINE" -f /etc/nixos/hydra-ssh-key + # accessible à hydra.pedro.dubnronetwork.fr + + nix = { + distributedBuilds = true; + buildMachines = [ + # { hostName = "pedro.dubronetwork.fr"; maxJobs = 2; speedFactor = 10; sshKey = "/etc/nixos/id_buildfarm"; sshUser = "root"; system = "x86_64-linux"; } + ]; + extraOptions = "auto-optimise-store = true"; + }; + +} diff --git a/public/service-x11.nix b/public/service-x11.nix index b92b0e4..93e8b16 100644 --- a/public/service-x11.nix +++ b/public/service-x11.nix @@ -12,13 +12,11 @@ mkIf profiles.isDesktop { # Services # Enable the X11 windowing system. services.xserver = { - enable = true; + #enable = true; layout = "fr"; xkbOptions = "eurosign:e"; displayManager.lightdm.enable = true; windowManager.awesome.enable = true; - startGnuPGAgent = true; - startOpenSSHAgent = false; # pas compatible avec l'agent GnuPG inputClassSections = ['' Identifier "Marble Mouse" MatchProduct "Logitech USB Trackball"