Aujourd’hui, les grandes entreprises et administrations publiques hésitent entre continuer à utiliser des logiciels propriétaires ou basculer vers les Logiciels Libres. Pourtant, la plupart des logiciels libres sont capables de bien traiter les données issues des logiciels propriétaire, et parfois avec une meilleur compatibilité.
C’est alors la barrière de la prise en main qui fait peur, et pourtant...
Les logiciels libres
L’aspect « Logiciel Libre » permet une évolution rapide et une plus grande participation des utilisateurs. Les aides et tutoriels foisonnent sur Internet ou sont directement inclus dans le logiciel lui-même.
Enfin, les concepteurs sont plus proches des utilisateurs, ce qui rend les logiciels libres plus agréable à utiliser et conviviaux.
Grâce à la disponibilité des logiciels libres, vous trouverez facilement des services de support techniques et la licence n’est plus un frein à l’utilisation de ces logiciels par votre personnel.
Notre support technique concerne essentiellement les logiciels libres, que ce soit sous forme de services ponctuels ou de tutoriels.
- Mai 2024 -
Voila Nixos, c'est le genre de distribution que quand on t'explique ça te fait penser à un truc futile, pour geeks, un truc pour développeurs et non pour être utilisé en simple utilisateur du dimanche, c'est totalement abstrait, on ne voit pas ce que ça peut apporter, du moins pas autant qu'une fois dans les mains, puis on se dit que ça demande des efforts, beaucoup car tout est à réapprendre sauf que ce qu'on y apprend est pour cette distribution et ne s'applique pas aux autres. Une fois qu'on la lance, c'est le bordel, on y comprends pas des masses, ça change beaucoup de ce qu'on connaît, on est perdu, on doit se taper un wiki et toute la documentation qu'on peut trouver… Enfin on tente des choses, mais chaque changement demande de rebuilder l'OS, comme avec un générateur de sites statiques (GSS), oui c'est ça si on veut comprendre ce que c'est que Nixos, faut prendre l'exemple des GSS, les distributions classiques (Arch, Debian, Fedora, Gentoo, openSUSE, Slack, Ubuntu…) sont comme les CMS, comme un Wordpress, un PluXml, ou encore un SPIP, on donne en directe ce que l'on veut et il nous donne directement ce que l'on souhaite, si on fait un changement c'est de suite que ça s'opère, généralement la configuration est explosé en plusieurs endroits. Si il y a une couille dans le pâté, c'est foutu, pas de retours en arrière, pas de sauvegardes, pas de possibilités de rattraper sans faire des sauvegardes par nous même. Or, Nixos est comme un GSS, comme Astro, Eleventy, Hexo, Hugo, Jeckyll, Pelican, Zola; on a un fichier pour régler comme on le souhaite, généralement un unique fichier mais on peut l'exploser pour qu'il soit plus visible, et lui va interpréter ce fichier pour construire notre site selon ce qu'on y a mit dedans, après une phase de build/compilation, le site est là. Comme pour les GSS, c'est un coup à prendre, au début on trouve ça durs et on ne voit pas trop les bénéfices, puis une fois dedans, on se demande comment on a pu faire autrement.
je l'ai donc installé une nouvelle fois, l'installation est vraiment facile avec l'installateur graphique qui nous pond un fichier de conf pré-mâché qui n'attends par la suite que les modifications voulues par l'utilisateur. Sinon, il y a l'autre façon de l'installer (Minimal ISO image), celui qui ne dépaysera pas les utilisateurs de Arch ou Gentoo, il suffit de booter sur un live usb et lire la documentation. L'administration est inexistante tout comme la maintenance qui pourra se faire automatiser mais j'en parlerais plus loin.
C'est simple, tout se passe dans le fichier /etc/nixos/configuration.nix
qui contient l'état désiré du système (ce que veut l'utilisateur) et la commande nixos-rebuild
applique et s'occupe de tout. Voyons voir un cas concret, prenons mon fichier:
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running ‘nixos-help’).
{ config, pkgs, ... }:
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
];
# Bootloader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
boot.supportedFilesystems = [ "ntfs" ];
networking.hostName = "debiancerlinux"; # Define your hostname.
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Enable networking
networking.networkmanager.enable = true;
# Set your time zone.
time.timeZone = "Europe/Paris";
# Select internationalisation properties.
i18n.defaultLocale = "fr_FR.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "fr_FR.UTF-8";
LC_IDENTIFICATION = "fr_FR.UTF-8";
LC_MEASUREMENT = "fr_FR.UTF-8";
LC_MONETARY = "fr_FR.UTF-8";
LC_NAME = "fr_FR.UTF-8";
LC_NUMERIC = "fr_FR.UTF-8";
LC_PAPER = "fr_FR.UTF-8";
LC_TELEPHONE = "fr_FR.UTF-8";
LC_TIME = "fr_FR.UTF-8";
};
# Enable the X11 windowing system.
services.xserver.enable = true;
# Enable the GNOME Desktop Environment.
#services.xserver.displayManager.gdm.enable = true;
#services.xserver.desktopManager.gnome.enable = true;
services.gnome.games.enable = true;
# Enable the KDE Plasma Desktop Environment.
#services.xserver.displayManager.sddm.enable = true;
#services.xserver.desktopManager.plasma5.enable = true;
# Enable autres bureaux.
services.xserver.displayManager.lightdm.enable = true;
services.xserver.desktopManager.xfce.enable = true;
services.xserver.desktopManager.mate.enable = true;
#services.xserver.windowManager.xmonad.enable = true;
#services.xserver.windowManager.twm.enable = true;
#services.xserver.windowManager.icewm.enable = true;
#services.xserver.windowManager.i3.enable = true;
#services.xserver.windowManager.herbstluftwm.enable = true;
# Activer l'autologin.
services.xserver.displayManager.autoLogin.enable = true;
services.xserver.displayManager.autoLogin.user = "sebastien";
services.xserver.videoDrivers = [ "nvidia" ];
#services.xserver.displayManager.defaultSession = "gnome";
# Pour l'utilisation de flatpak:
services.flatpak.enable = true;
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
#xdg.portal.config.common.default = "gtk";
# Configure keymap in X11
services.xserver = {
layout = "fr";
xkbVariant = "";
};
# Configure console keymap
console.keyMap = "fr";
# Enable CUPS to print documents.
services.printing.enable = true;
services.printing.drivers = [ pkgs.hplip ];
services.avahi.enable = true;
# for a WiFi printer
services.avahi.openFirewall = true;
# for an USB printer
#services.ipp-usb.enable = true;
# scan
hardware.sane.enable = true;
hardware.sane.extraBackends = [ pkgs.hplipWithPlugin ];
# Activer le Bluetooth
hardware.bluetooth.enable = true;
#hardware.bluetooth.package = [ pkgs.bluez ];
services.blueman.enable = true;
hardware.bluetooth.powerOnBoot = false;
# Enable sound with pipewire.
sound.enable = true;
hardware.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
# If you want to use JACK applications, uncomment this
#jack.enable = true;
# use the example session manager (no others are packaged yet so this is enabled by default,
# no need to redefine it in your config for now)
#media-session.enable = true;
};
# Enable touchpad support (enabled default in most desktopManager).
# services.xserver.libinput.enable = true;
# Define a user account. Don't forget to set a password with ‘passwd’.
users.users.sebastien = {
isNormalUser = true;
description = "Sebastien CHAVAUX";
extraGroups = [ "networkmanager" "wheel" "scanner" "lp" "disk" ];
packages = with pkgs; [
# firefox
# thunderbird
];
};
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
# vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
appimage-run
amber-theme
amule
aspell
aspellDicts.fr
blueman
bashInteractiveFHS
#bluez
bluez-tools
brasero
cataclysm-dda
claws-mail
deluge
detox
dgen-sdl
discord
enchant
fceux
firefox
filezilla
flare
#flatpak
gimp
git
glaxnimate
gnome.gnome-boxes
gnome.gnome-tweaks
gnome-multi-writer
gnomeExtensions.gsconnect
gnome.simple-scan
hexchat
hplip
htop
hugo
humanity-icon-theme
hunspell
hunspellDicts.fr-moderne
hunspellDicts.fr-any
hunspellDicts.fr-classique
ispell
libsForQt5.ghostwriter
libsForQt5.kdenlive
libsForQt5.soundkonverter
libsForQt5.libkdegames
libreoffice
gspell
mc
minidlna
minetest
mldonkey
mplayer
mpv
neofetch
nestopia
nodejs_18
ntfs3g
obs-studio
p7zip
pitivi
qbittorrent
quodlibet
retroarchFull
rocksndiamonds
scummvm
smplayer
soundconverter
sound-juicer
the-legend-of-edgar
thunderbird
typora
ubuntu_font_family
vlc
wesnoth
wget
wine-staging
#vscode-with-extensions
vscode-fhs
xsane
xarchiver
xfce.thunar-archive-plugin
xfce.thunar-volman
xfce.xfce4-pulseaudio-plugin
#xfce.xfce4-volumed-pulse
yaru-theme
yt-dlp
zeroadPackages.zeroad-unwrapped
zola
# wget
];
# Some programs need SUID wrappers, can be configured further or are
# started in user sessions.
# programs.mtr.enable = true;
# programs.gnupg.agent = {
# enable = true;
# enableSSHSupport = true;
# };
# List services that you want to enable:
# Enable the OpenSSH daemon.
#services.openssh.enable = true;
#services.openssh.openFirewall = true;
#services.openssh.ports = [ 4444 ];
# Open ports in the firewall.
#networking.firewall.allowedTCPPorts = [ 4444 ];
#networking.firewall.allowedUDPPorts = [ 4444 ];
# Or disable the firewall altogether.
networking.firewall.enable = true;
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. It‘s perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "23.11"; # Did you read the comment?
system.autoUpgrade.enable = true;
system.autoUpgrade.allowReboot = false;
system.autoUpgrade.channel = "https://channels.nixos.org/nixos-23.11";
nix.optimise.automatic = true;
nix.gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 7d";
};
nix.settings.auto-optimise-store = true;
##Commandes Experimentales
nix.settings.experimental-features = [ "flakes" "nix-command" ];
}
Commençons par le langage, c'est du nix
, c'est spécial, c'est pas pire que d'autres, c'est pas mieux, je trouve que le fichier de conf est compréhensible, d'après Wikipedia c'est un langage de programmation fonctionnel paresseux. Perso, je trouve que ça me fait penser de loin à JS, en même temps je ne suis pas développeur.
Maintenant qu'on a fait cet aparté, reprenons, ce fichier (configuration.nix) placé au bon endroit (/etc/nixos/) suivit d'un sudo nixos-rebuild switch
va demander au système de construire comme je l'entends mon OS:
networking.hostName = "debiancerlinux"; # Define your hostname.
# Set your time zone.
time.timeZone = "Europe/Paris";
# Select internationalisation properties.
i18n.defaultLocale = "fr_FR.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "fr_FR.UTF-8";
LC_IDENTIFICATION = "fr_FR.UTF-8";
LC_MEASUREMENT = "fr_FR.UTF-8";
LC_MONETARY = "fr_FR.UTF-8";
LC_NAME = "fr_FR.UTF-8";
LC_NUMERIC = "fr_FR.UTF-8";
LC_PAPER = "fr_FR.UTF-8";
LC_TELEPHONE = "fr_FR.UTF-8";
LC_TIME = "fr_FR.UTF-8";
};
- activer l'interface graphique avec l'environnement qui va bien:
# Enable the X11 windowing system.
services.xserver.enable = true;
# Enable the GNOME Desktop Environment.
#services.xserver.displayManager.gdm.enable = true;
#services.xserver.desktopManager.gnome.enable = true;
services.gnome.games.enable = true;
# Enable the KDE Plasma Desktop Environment.
#services.xserver.displayManager.sddm.enable = true;
#services.xserver.desktopManager.plasma5.enable = true;
# Enable autres bureaux.
services.xserver.displayManager.lightdm.enable = true;
services.xserver.desktopManager.xfce.enable = true;
services.xserver.desktopManager.mate.enable = true;
#services.xserver.windowManager.xmonad.enable = true;
#services.xserver.windowManager.twm.enable = true;
#services.xserver.windowManager.icewm.enable = true;
#services.xserver.windowManager.i3.enable = true;
#services.xserver.windowManager.herbstluftwm.enable = true;
- activer l'autologin pour mon utilisateur:
# Activer l'autologin.
services.xserver.displayManager.autoLogin.enable = true;
services.xserver.displayManager.autoLogin.user = "sebastien";
- utiliser les pilotes proprios de Nvidia:
services.xserver.videoDrivers = [ "nvidia" ];
#services.xserver.displayManager.defaultSession = "gnome";
Bon, je pense que vous avez compris un peu l'idée et que c'est assez explicite pour ne pas passer au scribe ligne par ligne, mais rajoutons tout de même le choix des paquets (logiciels) qu'on veut, ceux-ci sont déclarables au niveau de l'utilisateur (users.users.sebastien
) ou au niveau du système (environment.systemPackages
). Je peux déclarer les paquets pour l'ensemble des utilisateurs (typiquement les trucs tel que neofetch
, htop
, mc
) et je peux installer des paquets qui ne seront visibles qu'au niveau de l'utilisateur. Je pourrai très bien créer un second utilisateur et lui donner une autre liste de paquets, il n'aura pas les mêmes programmes d'installés, en gros il ne verra pas les programmes qui sont pour moi et moi je ne verrai pas les siens à moins qu'ils fassent partie de la déclaration du système ou qu'on l'a en commun et si paquets communs y a, les données sont mutualisés pour économiser de la place. Bref, chacun peut avoir son OS personnalisé sans empiéter sur celui des autres.
Si quelque chose ne va pas, il ne construit pas le système et nous préviens de ce qui ne va pas, nous donnant même un exemple de ce qui est attendu. Si c'est bon, il build (littéralement c'est de la compilation) et on reboot, on s'aperçoit alors qu'il nous a fait une ligne de plus dans le grub avec l'ancien système et le nouveau.
Alors pourquoi NixOS est mieux pour moi? C'est assez simple à comprendre, Debian était déjà ennuyeuse car elle nécessite une maintenance proche de zéro, avec Nixos on est sur du zéro maintenance puisque celle-ci se résume à l'édition du fichier configuration.nix
, rien d'autre. Si ce fichier ne bouge pas, il n'y a rien de changé, on peut aussi automatiser les mises à jour, mais on verra plus bas. Si changement, nixpkg va s'occuper de tout, tout seul, d'une façon invisible, comme par magie, un peu comme une boite noire et incompréhensible, c'est efficace, ça "justemarchecommeilfaut"!
De manière un peu obscure, cette magie s'occupe de désinstaller et d'installer ce qui est demandé, générer les configurations des services, faire une sauvegarde avant et après le build… C'est tellement puissant que je peux versionner ma config avec git. C'est tout aussi facilement que je reviens en arrière si je ne suis pas satisfait de mes changements.
Bref, le système est toujours dans un état propre et à jour. J'aime cette sensation du tank que ça procure, puisque le système aussi est versionné. Chaque nouveau nixos-rebuild
exécuté avec succès, ajoute une nouvelle entrée dans Grub pour charger votre système nouvellement créé. Actuellement, je peux choisir de booter sur différentes générations du système (différentes options sont disponibles tel que "NixOS generation 35 - 2024-05-15" ou "NixOS generation 36 - 2024-05-15") qui me permettent de facilement démarrer à un état antérieur du système. C'est simple, magique, ça "justemarche", j'adhère…
La gestion des paquets est vraiment originale, il n'y en a pas, pas comme on l'entends classiquement dans les autres distributions! C'est très simple je demande au système que tel logiciel soit disponible en l'ajoutant dans la liste des applications de configuration.nix
(vu plus haut) et lui s'occupe de tout. À l'inverse, je ne veux plus d'un logiciel, je supprime (ou commente) sa ligne dans configuration.nix
, c'est tout. Mon système est propre et il le reste, pas de dépendances restantes, pas de restes de configurations, ni de fichiers…
Exemple d'applications ajoutées:
environment.systemPackages = with pkgs; [
# vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
appimage-run
amber-theme
amule
aspell
aspellDicts.fr
Exemple d'applications retirées:
environment.systemPackages = with pkgs; [
# vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
#appimage-run
amber-theme
#amule
aspell
aspellDicts.fr
Notez que pour supprimer les logiciels appimage-run
et amule
j'ai seulement commenté (rajouté un # devant) les lignes et que j'aurais très bien pu supprimer les lignes directement.
Tous les fichiers de l'OS sont en lecture seule, il n'est pas possible d'éditer un fichier de configuration pour ajouter ou changer une option. Par exemple, pour Lightdm, il n'y aura pas de fichier lightdm.conf dans /ect pour automatiser la connexion d'un utilisateur, il suffira de rajouter deux lignes dans configuration.nix
:
# Activer l'autologin.
services.xserver.displayManager.autoLogin.enable = true;
services.xserver.displayManager.autoLogin.user = "sebastien";
Mais allons plus loin, admettons que je veux tester un truc, je sais pas moi, par exemple Element
un client pour matrix, juste le tester car il y a plein d'autres clients et je veux faire mon choix, pas la peine de l'installer, Nixos ou plutôt la commande Nix
va créer un nouvel environnement temporaire (shell) où le programme est disponible. Tant que je ne quitte pas le shell, j'aurais le programme , si je quitte le shell, l’environnement est détruit. J'aime bien ce que je lis un peu partout en parlant de Nixos: Pensez containers, mais sans les containers. Plus concrètement, sous Linux (et ailleurs aussi), quand on appelle un binaire ls
par exemple, le shell (bash par exemple) va chercher le chemin dans $PATH
, Nix utilise ça pour permettre de faire des "virtualenv" généralisés, quand on fait un nix-shell
, ça met temporairement dans le $PATH
le chemin des paquets demandés. Nix-env
(je n'en parle pas plus car on perd la puissance de Nix
pour l'utiliser comme un simple gestionnaire de paquets classique, style DNF
, APT
, Pacman
…) fonctionne pareil, sauf que ça le met dans virtualenv global (celui de la session utilisateur). En gros nix-shell
c'est comme bash -c 'source venv/bin/activate; bash'
, si on sort du shell les dépendances disparaissent. Prenons un cas concret, je vais repartir sur mon exemple avec Element
que je n'ai pas sur mon système:
[sebastien@debiancerlinux:~/git/11ty]$ element
The program 'element' is not in your PATH. It is provided by several packages.
You can make it available in an ephemeral shell by typing one of the following:
nix-shell -p element
nix-shell -p elements
nix-shell -p elementsd
nix-shell -p element-web
nix-shell -p element-desktop
nix-shell -p element-web-unwrapped
...
Je l'installe temporairement dans un shell et je le lance depuis celui-ci:
[sebastien@debiancerlinux:~/git/11ty]$nix-shell -p element-desktop
[nix-shell:~/git/11ty]$ element-desktop
Voila, je peux l'utiliser comme si il était réellement installer en durs sur mon système…
Pour quitter le shell:
[nix-shell:~/git/11ty]$ exit
exit
[sebastien@debiancerlinux:~/git/11ty]$
Ça permet de créer des environnements de développement reproductibles qu'on pourra partager. On fait notre shell.nix
qui aura tout le nécessaire à notre projet et un nix-shell
plus tard ça roule.
C'est une nouvelle façon de voir l'informatique, il n'y a plus de sens d'installer à tout va des applications qu'on utilise rarement, ces trucs dont je n'ai besoin que trop ponctuellement. Et puis les autres applications que j'utilise quotidiennement, voir plusieurs fois par jour et que je continue d'indiquer dans mon configuration.nix
.
Commentaires :
voir le flux Atom
ouvrir dans le navigateur