Greboca  

Suport technique et veille technologique

Suport technique et veille technologique

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.

LinuxFr.org : les journaux  -  Nixos la distribution reproductible et déclaratif.

 -  29 mai - 

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:

  • définir mon hostname:
networking.hostName = "debiancerlinux"; # Define your hostname.
  • mes locales:
  # 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

par seb95

LinuxFr.org : les journaux

LinuxFr.org : Journaux

Nouvelle version de Grammalecte pour Firefox

 -  30 août - 

Grammalecte est un correcteur grammatical et typographique libre, pour la langue française. Il est bien connu sur LinuxFr.org (voir l’étiquette) : (...)


Taack-ui version 0.5.4

 -  23 août - 

Bonjour à toutes et tous,TaackUI est un framework (ou cadriciel) pour créer des applications d’entreprise (c.a.d. beaucoup de formulaires, aspect (...)


Fin d’OCSP chez Let’s Encrypt : quid ?

 -  15 août - 

Sommaire Contexte Certificat X.509 et autorité de certification Let’s Encrypt Validation du certificat OCSP - Online Certificate Status Protocol, (...)


Proxmox_GK : un utilitaire shell pour déployer vos invités LXC/QEMU, avec Cloud-init

 -  3 août - 

Sommaire Que peut-il faire ? Modes de déploiement flexible Customisation et templating Structure fonctionnelle Conclusion Aller plus loin : (...)


AES-XTS dans le noyau Linux 6.10

 -  23 juillet - 

Le dernier noyau Linux publié est le 6.10 et il incorpore le travail d'Eric Biggers qui a cherché à optimiser les performances de l'algorithme de (...)