Aller au contenu

Creation : Juillet 5, 2019 5:55 PM MAJ : juillet 17, 2019 7:05 PM

NixOs : mes recettes perso

Pourquoi cette page?

Le but de ce document est de garder trace de mes configurations. Ce sont souvent des choses simples mais qui bien que décrites dans la documentation ne sont pas toujours trés claires pour le béotien.

Surtout au début


Mettre à jour le système.

En tant que root passer la commande.

nixos-rebuild dont les arguments et options permettent de reconstruire l'environnement du système

l'option --help : permets de connaitre la syntaxe des options

  1. nixos-rebuild dry-build pour connaitre ce qui sera reconstruit
  2. nixos-rebuild build reconstruit une configuration mais ne l'active pas

  1. nixos-rebuild boot Construit èt n'active pas la nouvelle configuration, l' installe au niveau grub
  2. nixos-rebuild switch Construit et active la nouvelle configuration , l'installe au niveau de grub
  3. nixos-rebuild switch --upgrade : Construit et active la nouvelle configuration , l'installe au niveau de grub apràs avoir été cherché la dernière pour le channel.

NOTA : Toutes les modifications de configuration expliquées ci-dessous ne seront prises en compte que suite au lancement de la commande: nix-rebuild switch | nixos-rebuild switch --upgrade


Exemple : Tester ce qui va être reconstruit

nixos-rebuild dry-build avec le channel courant

nicos-rebuild dry-build --upgrade permets de connaitre tout ce qui va être mis à jour.

si on lance la commande : nixos-rebuild switch --upgrade


Changer le channel

Cette commande est utile pour passer d'un channel stable à unstable et inversement, ou bien pour changer de version.

nix-channel --add https://nixos.org/channels/nixos-version nixos

Mettre à jour le channel nix-channel --update Cette commande est l'équivalent de apt updatesous debian.


Gestion des utilisateurs et groupes

Dans la distribution Nixos les utilisateurs du systeme sont déclarés dans le fichier /etc/nixos/configuration.nix

Nixos installe par défaut des utilisateurs et groupes pour le systeme.. vous devez ajouter vos utilisateurs dans le fichier de configuration. Il en est de même pour les groupes

Ajouter un groupe

users.groups.postgres.gid = 1100 ;


Ajouter un utilisateur

Cela se fait en ajoutant dans le fichier configuration.nix l'utilisateur. * Le code est le suivant :

users.users.postgres = { isNormalUser = true; home = "/home/postgres"; group = "postgres" ; description = "postgres test"; extraGroups = [ "wheel" "networkmanager" ]; };


Installer des logiciels

Avec NixOs l'installation d'un logiciel peut s'éxécuter à plusieurs niveaux

  • système
  • utilisateur
  • profil utilisateur -- n'existe pas
  • Environnement : nix-shell

Système

Pour cela on utilise la configuration systeme voir le chapitre 6 du manual

Ainsi l'ajout dans la configuration de 'installation du paquets geany entrainera que l'application sera vu par tous les utilisateurs dans le path suivant:

/run/current-system/sw/bin/geany

Aprés la mise à jour du systeme


Utilisateur.

Exemple : installation de youtube-dl

  1. le package existe - il ? nix-env -q youtube-dl > youtube-dl-2019.06.08

  2. installation nix-env -iA nixos.youtube-dl La commande youtube-dl sera alors dans le path suivant : /home/pboizot/.nix-profile/bin/youtube-dl


Profil utilisateur

Cette notion n'existe pas sous Nixos, toutefois il est possible de créer des liens symboliques qui pointent vers les binaires de /nixos/store.

nix-build '\<nixpkgs>' -A postgresql_11 -o ~/app/binary/pg11 nix-build '\<nixpkgs>' -A postgresql_10 -o ~/app/binary/pg10

On aura alors pg10 -> /nix/store/17s870z83pdxiydnxdg23hyk8141fdw8-postgresql-10.9 pg11 -> /nix/store/88yxsbssvzrv22wymwy7m7ghpxy2fgnj-postgresql-11.4

On pourra ainsi mettre en place un script permettant de travailler soit avec une version soit avec une autre.


Solution fournie par un membre du forum : Discourt

Cette maniere de procéder permets de créer des liens symboliques vers les paquets qui sont aussi des racines GC, c'est-à-dire que leurs dépendances ne seront pas supprimées par le garbage collector jusqu'à ce que les liens symboliques eux-mêmes soient supprimés


Environnement

Le chapitre 10 de nix-pills aborde l'utilisation de nix-shell pour construire un environnement de developpement avec les bons packages.


Une utilisation simple de nix-shell, installant un package temporairement. Il est possible de lancer un environnement avec la commande nix-shell.

exemple : nix-shell -p postgresql_11

these paths will be fetched (5.22 MiB download, 23.10 MiB unpacked): /nix/store/88yxsbssvzrv22wymwy7m7ghpxy2fgnj-postgresql-11.4 /nix/store/y7wjpszq6hpc14azjzzdk8v9z67qyjqb-postgresql-11.4-lib copying path '/nix/store/y7wjpszq6hpc14azjzzdk8v9z67qyjqb-postgresql-11.4-lib' from 'https://cache.nixos.org'... copying path '/nix/store/88yxsbssvzrv22wymwy7m7ghpxy2fgnj-postgresql-11.4' from 'https://cache.nixos.org'...


Installer une VM VirtualBox

installation initiale

Le processus est assez simple puisqu'il existe une Appliance VirtualBox VirtualBox appliance, 64-bit Intel/AMD

La doc tient en qq lignes.


This is a demo appliance for VirtualBox (in OVA format) that has X11 and Plasma 5 enabled, as well as the VirtualBox guest additions. To use it, download the OVA file, open VirtualBox, run “File → Import Appliance” from the menu, select the OVA file, and click “Import”. You can then start the virtual machine. When the KDE login screen appears, you can log in as user demo, password demo. To obtain a root shell, run sudo -i in the KDE terminal (konsole).


Remarques 1. La configuration clavier : anglaise 2. Editeur par défaut nano 3. Utilisateur en login auto

Pour changer tout ceux-ci on procedera à une mise à niveau du système puis à des modifications du fichier configuration.nix


Mise à niveau du systeme

nixox-rebuild switch --upgrade


Modification de configuration.nix

  1. Création d'un utilisateur (ajout)

    users.users.pierre = { isNormalUser = true; home = "/home/pierre"; description = "pierre test"; extraGroups = [ "wheel" "networkmanager" ]; };


  1. Changement de la configuartion clavier

# Enable X11 services.xserver.enable = true ; services.xserver.layout = "ch"; services.xserver.xkbVariant = "fr"; services.xserver.xkbOptions = "eurosign:e" ;

  1. Modification de la timezone

    time.timeZone = "Europe/Zurich";


  1. Ajout de vim

    environment.systemPackages = with pkgs; [ wget vim ];


  1. Suppression du login automatique

Changer la ligne

{ config, pkgs, ... }: par { config, pkgs, lib, ... }:

Ajouter la suppression en ajoutant cette surcharge

'services.xserver.displayManager.sddm.autoLogin.enable = lib.mkForce false;' car il est impossible de modifier le fichier de demo.nix se trouvant dans le répertoire '/nix/var/nix/profiles/per-user/root/channels/nixos/nixos/modules/profiles'


  1. Relance de la configuration nixos-rebuild switch --upgrade

  2. reboot


Où est la configuration ?

Dans le fichier configuration.nix il y a un import.

imports = [ nixpkgs/nixos/modules/installer/virtualbox-demo.nix ];

Qu'est-ce qui est importé ?

la commande : nix-instantiate --find-file nixpkgs/nixos/modules/installer/virtualbox-demo.nix nous donne l'emplacement des fichiers '/nix/var/nix/profiles/per-user/root/channels/nixos/nixos/modules/installer/virtualbox-demo.nix'


En lisant les fichiers on peut explorer la configuration....

cat /nix/var/nix/profiles/per-user/root/channels/nixos/nixos/modules/installer/virtualbox-demo.nix

imports = [ ../virtualisation/virtualbox-image.nix ../installer/cd-dvd/channel.nix ../profiles/demo.nix ../profiles/clone-config.nix ];


Intéressons nous au fichier demo.nix

cat /nix/var/nix/profiles/per-user/root/channels/nixos/nixos/modules/profiles/demo.nix

{ ... }:

{ imports = [ ./graphical.nix ];

users.users.demo = { isNormalUser = true; description = "Demo user account"; extraGroups = [ "wheel" ]; password = "demo"; uid = 1000; };


services.xserver.displayManager.sddm.autoLogin = { enable = true; relogin = true; user = "demo"; }; }

D'où la surcharge : services.xserver.displayManager.sddm.autoLogin.enable = lib.mkForce false;


Surcharger

Nous avons vu dans le paragraphe précédent une surcharge pour inactiver le login automatique.

Je vous propose de voir coment régler par une surcharge un probleme d'icone sur une application.


Le problème

Une application n'affiche pas d'icones car KDE n'intègre pas les icones :hicolor-icon-theme Tootle sans icone


La solution

Créer un fichier config.nix dans l'environnement de l'utilisateur : /home/\/.config/nixpkgs avec le code :

{ packageOverrides = pkgs: { tootle = pkgs.tootle.override { hicolor-icon-theme = pkgs.gnome3.adwaita-icon-theme; }; }; }


Résultat

C'est mieux avec des icones

Tootle avec icone