====== Installation et premières configurations du système GNU GuixSD ====== * Objet : Installer et commencer à configurer GuixSD * Niveau requis : {{tag>avisé}} * Commentaires : // https://www.gnu.org/software/guix/manual/html_node/GNU-Free-Documentation-License.html // * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) ===== Introduction ===== **Comment j'ai installé GuixSD 0.14 sur un HP ProBook 6460b (nécessitant un adaptateur USB sans fil pour GNU/Linux-libre)** **Edit : **Pour l'installation de la version **0.16 en Dual-boot avec Debian**, c'est par ici : **[[https://debian-facile.org/utilisateurs:gonzoleri:tutos:guixsd-0.16-en-dual-boot-avec-debian-testing-sid]]** **Prérequis** : - Il est très hautement recommandé de télécharger et graver **Superdisk grub2** **[[https://www.supergrubdisk.org/category/download/supergrub2diskdownload]]**. Il est possible que vous en ayez besoin lors du redémarrage. C'est ce qui s'est produit chez moi. Heureusement, je l'avais déjà; il m'a permis de finaliser avec succès l'ensemble de la procédure. - Pour le **Wi-Fi** avoir un adaptateur USB sans fil pour GNU/Linux-libre : **[[https://tehnoetic.com/adapters]]** ou bien du matériel Wi-Fi ne nécessitant pas de pilote propriétaire. (Il m'a fallu utiliser la connexion filaire pour l'installation). - Savoir que pour les partitionnements **EFI** et **GPT**, vous devrez suivre les liens indiqués plus bas à l'étape du partitionnement (Ces options n'étant pas adaptées à mon cas de figure). ===== Installation ===== J'ai ensuite téléchargé **GuixSD**, la distribution de logiciels GNU Guix : **[[https://www.gnu.org/software/guix/download/]]** Démarrage à partir d'un DVD gravé avec '**guixsd-install-0.14.0.x86_64-linux.iso**' Sources du manuel : **[[https://www.gnu.org/software/guix/manual/html_node/Preparing-for-Installation.html#Preparing-for-Installation]]** L'image d'installation utilise la disposition du clavier qwerty. Si je veux le changer, je peux utiliser la commande **loadkeys**. Par exemple, la commande suivante sélectionne la disposition du clavier **fr**, donc allons-y : # loadkeys fr Pour avoir le Wi-Fi, voir ci-dessous : **[[https://www.gnu.org/software/guix/manual/html_node/Preparing-for-Installation.html#Networking]]** Ma carte wifi nécessite l'utilisation d'un firmware non libre (Broadcom Limited BCM4313 802.11bgn Wireless Network Adapter). Je décide de commander une carte wifi **USB Adaptateur USB sans fil Mini Technoethical N150 pour GNU/Linux-libre** à l'adresse : **[[https://tehnoetic.com/adapters/tehnoetic-wireless-adapter-gnu-linux-libre-tet-n150]]** En attendant, par le biais de mon joli câble rj45, j'exécute la commande suivante pour voir comment mes interfaces réseau sont nommées : # ifconfig -a Les interfaces filaires ont un nom commençant par ‘**e**’; Par exemple, l’interface correspondant au premier contrôleur Ethernet intégré est appelée «**eno1**». # ifconfig enp0s25 up À ce stade, je dois faire l'acquisition d'une adresse IP. Les adresses IP étant automatiquement attribuées via DHCP, je peux exécuter: # dhclient -v enp0s25 Essayons d’envoyer une requête ping à un serveur pour voir si la mise en réseau est opérationnelle : (sachant que j'habite dans une zone non dégroupée, vitesse 2.0 Mbs :/ ) # ping -c 3 gnu.org PING gnu.org (208.118.235.148): 56 data bytes 64 bytes from 208.118.235.148: icmp_seq=0 ttl=51 time=138.917 ms 64 bytes from 208.118.235.148: icmp_seq=1 ttl=51 time=139.388 ms 64 bytes from 208.118.235.148: icmp_seq=2 ttl=51 time=138.998 ms --- gnu.org ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max/stddev = 138.917/139.101/139.388/0.206 ms **Partitionnement** **GPT** ou **EFI** : Les tests que j'ai effectués dans les machines virtuelles n'ayant pas été très concluants, je n'en sais pas trop sur le sujet. Si vous souhaitez utiliser GPT ou EFI, veuillez vous reporter à la documentation : **[[https://www.gnu.org/software/guix/manual/html_node/Preparing-for-Installation.html#Disk-Partitioning ]]** Dans mon cas, sachant que je n'aurai pas à m'inquiéter de cette question pour cause d'ordinateur datant de 2011, c'est parti : # cfdisk Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 479995903 479993856 228.9G 83 Linux /dev/sda2 479995904 488397167 8401264 4G 82 Linux swap De préférence, attribuez une étiquette aux systèmes de fichiers afin de pouvoir les consulter facilement et de manière fiable dans les déclarations de système de fichiers (voir Systèmes de fichiers). Cela se fait généralement à l'aide de l'option **-L** de **mkfs.ext4** et des commandes associées. En supposant que la partition racine cible se trouve dans **/dev/sda1**, vous pouvez créer un système de fichiers portant le libellé **my-root** avec la commande suivante, personnellement, j'ai fait : # mkfs.ext4 -L my-root /dev/sda1 Monter le système de fichiers cible sous **/mnt** avec cette commande (encore une fois, en supposant que **my-root** est l’étiquette du système de fichiers racine) : # mount LABEL=my-root /mnt Ma partition de swap étant **/dev/sda2**, j'ai exécuté : # mkswap /dev/sda2 # swapon /dev/sda2 **Procédons à l'installation** Avec les partitions cibles prêtes et la racine cible montée sur **/mnt**, on est bon. Premièrement : # herd start cow-store /mnt Cela crée une copie en écriture de **/gnu/store**, de telle sorte que les packages qui lui sont ajoutés au cours de la phase d’installation soient écrits sur le disque cible sur **/mnt** plutôt que conservés en mémoire. Cela est nécessaire car la première phase de la commande **guix system init** implique le téléchargement ou la compilation dans **/gnu/store**, qui est initialement un système de fichiers en mémoire. Création du répertoire cible de configuration du système : # mkdir /mnt/etc Création du prochain fichier de configuration (vide pour l'instant) : # touch /etc/configuration/perso.scm **Remarque :** vous pouvez également éditer un fichier existant déjà dans **/etc/configuration** (par exemple, "**desktop.scm**" ou "**bare-bones.scm**" et le modifier à votre guise). Pour adapter la configuration de l'ordinateur à mes besoins, j'ai utilisé **vi** , ne connaissant que celui-ci. Nano et Zile sont toutefois disponibles. # vi /etc/configuration/perso.scm ;; This is an operating system configuration template ;; for a "desktop" setup, without full-blown desktop ;; environments. "host-name" is my own laptop. (use-modules (gnu) (gnu system nss)) (use-service-modules desktop) (use-package-modules bootloaders certs ratpoison suckless wm) (operating-system (host-name "lxx-xxx-xx-xx-xxx-xxx-xx6") (timezone "Europe/Paris") (locale "en_US.utf8") ;; Assuming /dev/sda is the target hard disk, and "my-root" is ;; the label of the target root file system. (bootloader (grub-configuration (target "/dev/sda"))) (file-systems (cons (file-system (device "my-root") (title 'label) (mount-point "/") (type "ext4")) %base-file-systems)) (swap-devices '("/dev/sda2")) (users (cons (user-account (name "hubert") (comment "Cathy's brother") (group "users") (supplementary-groups '("wheel" "netdev" "audio" "video")) (home-directory "/home/hubert")) %base-user-accounts)) ;; Add a bunch of window managers; we can choose one at ;; the log-in screen with F1. (packages (cons* ratpoison i3-wm i3status dmenu ;window managers nss-certs ;for HTTPS access %base-packages)) ;; Use the "desktop" services, which include the X11 ;; log-in service, networking with Wicd, and more. (services %desktop-services) ;; Allow resolution of '.local' host names with mDNS. (name-service-switch %mdns-host-lookup-nss)) Faisons maintenant une copie de ce fichier renommé '**config.scm**' sur '**/mnt/etc**' # cp /etc/configuration/perso.scm /mnt/etc/config.scm Une fois la préparation du fichier de configuration terminée, le nouveau système doit être initialisé (rappelez-vous que le système de fichiers racine cible est monté sur **/mnt**) : # guix system init /mnt/etc/config.scm /mnt Ceci copie tous les fichiers nécessaires et installe **GRUB** sur **/dev/sda**, à moins que vous ne passiez l’option **--no-bootloader** . Cette commande peut déclencher des téléchargements ou des versions des packages manquants, ce qui peut prendre un certain temps. Copie sur /mnt [##########################] L'installation est terminée, je peux redémarrer : # reboot ====Supergrub2disk \o/==== Après le redémarrage, un message comme celui-ci: "**No Operating System installed, please install on hard disk**" J'ai réussi à démarrer grâce au **superdisk grub2** que j'avais gravé sur un CD **\o/** **[[https://www.supergrubdisk.org/category/download/supergrub2diskdownload/]]** Après avoir inséré le CD **superdisk grub2**, j'ai fini par trouver l'existence de cette ligne : gnu linux-libre J'ai validé et GuixSD a démarré **\(^ o ^)/** On dirait que **superdisk grub2** a restauré **grub** ...? (J'ai également fait basculer l'indicateur d' amorçage avec **cfdisk** , un détail passé inaperçu lors de l'étape de partitionnement). Ça ressemble à ça maintenant : # cfdisk Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 479995903 479993856 228.9G 83 Linux /dev/sda2 479995904 488397167 8401264 4G 82 Linux swap Plus besoin du CD superdisk grub2, le démarrage est maintenant autonome. Je ne sais pas s'il faut remercier **Superdisk grub2** ou **cfdisk** pour la restauration du démarrage, mais l'installation est un succès. **Ctrl-Alt-F2** pour passer en pleine console. l'accès à root est vide (autorisé) Il suffit d'appuyer sur [Entrée]. Après m'être créé un mot de passe utilisateur (moi, l'utilisateur final...) # passwd hubert New password: Retype new password: passwd: password updated successfully ...l'utilisateur que je suis peut maintenant se connecter avec mon compte utilisateur. Choix '**i3**': un bureau minimal. La souris est ok. Choix '**Ratpoison**' : "Can't logging in ..." Pas de souris, rien ... Depuis la console, **Alt-F7** est utilisé pour passer à **X11**. **Ctrl-Alt-F2** et partez à l'exploration! Un champ de possibilités va enfin être dévoilé ;) Pour voir la suite sur **xfce**, **GNOME**, **ssh** et plus encore : ===== Utilisation ===== **Mes tentatives pour apprivoiser GuixSD** Les packages sont installés ou mis à niveau vers la dernière version disponible dans la distribution actuellement disponible sur votre ordinateur local. Pour mettre à jour cette distribution, avec les outils Guix, **vous devez exécuter guix pull** : la commande télécharge le dernier code source Guix et les dernières descriptions de paquetages et le déploie. Le code source est téléchargé depuis un référentiel Git. Une fois l'opération terminée, **guix package** utilisera les packages et les versions de package de cette copie de Guix qui vient d'être récupérée. De plus, toutes les commandes Guix et tous les modules Scheme seront également repris de cette dernière version. De nouvelles sous-commandes guix ajoutées par la mise à jour sont également disponibles. Tout utilisateur peut mettre à jour sa copie Guix à l'aide de **guix pull**. L'effet est limité à l'utilisateur qui exécute guix pull. Par exemple, lorsque l'utilisateur root exécute guix pull, cela n'a aucun effet sur la version de Guix visualisée par l'utilisateur, et inversement. Pour les mises à jour, j’utilise les lignes de commande suivantes (à noter, la commande **guix package -u** vient après celle de **guix pull** : $ guix pull $ guix package -u $ sudo guix system reconfigure /etc/config.scm Maintenant, je veux modifier 'config.scm' pour affiner la configuration. **Vi(m)** n'est pas encore installé. Un regard sur la configuration du système me montre comment ajouter **gnome** et **xfce** : **[[https://www.gnu.org/software/guix/manual/html_node/Using-the-Configuration-System.html#Using-the-Configuration-System]]** # vim /etc/config.scm ;; This is an operating system configuration template ;; for a "desktop" setup with GNOME and Xfce and ;; where "host-name" is my own laptop. (use-modules (gnu) (gnu system nss)) (use-service-modules desktop) (use-package-modules certs gnome) (operating-system (host-name "lxx-xxx-xx-xx-xxx-xxx-xx6") (timezone "Europe/Paris") (locale "en_US.utf8") ;; Assuming /dev/sda is the target hard disk, and "my-root" is ;; the label of the target root file system. (bootloader (grub-configuration (target "/dev/sda"))) (file-systems (cons (file-system (device "my-root") (title 'label) (mount-point "/") (type "ext4")) %base-file-systems)) (swap-devices '("/dev/sda2")) (users (cons (user-account (name "hubert") (comment "Cathy's brother") (group "users") (supplementary-groups '("wheel" "netdev" "audio" "video")) (home-directory "/home/hubert")) %base-user-accounts)) ;; This is where we specify system-wide packages. (packages (cons* nss-certs ;for HTTPS access gvfs ;for user mounts %base-packages)) ; Add GNOME and/or Xfce---we can choose at the log-in ;; screen with F1. Use the "desktop" services, which ;; include the X11 log-in service, networking with Wicd, ;; and more. (services (cons* (gnome-desktop-service) (xfce-desktop-service) %desktop-services)) ;; Allow resolution of '.local' host names with mDNS. (name-service-switch %mdns-host-lookup-nss)) **Invocation de guix system** **[[https://www.gnu.org/software/guix/manual/html_node/Invoking-guix-system.html#Invoking-guix-system]]** Maintenant que j'ai modifié la configuration du système, demandons à **guix system** de le reconfigurer : $ sudo guix system reconfigure /etc/config.scm # reboot La nouvelle version du noyau est proposée. Dans ma session utilisateur, je choisis le bureau par défaut **xfce** Après quelques instants, le bureau **xfce** apparaît. Cela semble bien fonctionner, le navigateur **Web** de GNOME fonctionne parfaitement et il est fluide. Je vais de surprises en surprises, même **GNOME** s’ouvre sans problèmes et le look est très sympa. Dans le navigateur **Web**, je peux voir des vidéos et la carte son fonctionne très bien. À ce stade, je remarque que les sessions de bureau prennent quelques instants pour démarrer. J'essaie de continuer, car je dois appliquer les paramètres régionaux **fr** pour le clavier, **ssh** en mode utilisateur et essayer d'apprendre les règles de l'administrateur à la gestion des utilisateurs, de leurs droits, etc. "Tout utilisateur peut mettre à jour sa copie Guix en utilisant '**guix pull**', et l'effet est limité à l'utilisateur qui exécute guix pull. Par exemple, lorsque l'utilisateur root exécute 'guix pull', cela n'a aucun effet sur la version de Guix que cet utilisateur utilise. Alice voit, et vice versa. " $ guix pull ............................................................................... GNU Guix mis à jour et déployé avec succès sous '/home/hubert/.config/guix/latest' Pour une mise à jour complète: $ guix package -u $ sudo guix system reconfigure /etc/config.scm Vivant dans une zone numérique fracturée, je peux parfois observer un temps très long lors de la mise à jour de la session utilisateur par cette dernière commande. Une douzaine d'heures est parfois nécessaire. Une fois il m'avait fallu 22 heures et une autre fois 24 heures, ce furent les 2 seules fois. Je pense que c'est très différent dans les villes, peut-être 3 ou 4 heures ? En mode utilisateur, je peux ajouter mon hébergement Web distant dans un **signet Nautilus** et **ssh** fonctionne parfaitement ;) C'est la première fois de ma vie que je suis confronté à un système aussi impressionnant de stabilité et de cohérence. Mais je me demande parfois comment trouver mes marques et commencer à apprivoiser le système. Le canal irc est une mine d'infos et l'accueil vraiment sympa : **[[https://www.gnu.org/software/guix/contact/irc/]]** Et voilà, c'est un retour de ce que je réussis à faire en tant qu'utilisateur final de Logiciel Libre plus ou moins expérimenté ^_^