GuixSD

Installation of GuixSD in Dual Boot with Debian Testing/Sid

For real-time support from the community, you can connect to the #guix channel on irc.freenode.net. There you can get help about anything related to both the Guix System Distribution and GNU Guix.

This document is under GNU Free Documentation License. Indeed, the following handbook borrows a number of procedures from the official documentation.

Copyright (C) 2019 Hubert Lombard.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled https://www.gnu.org/software/guix/manual/html_node/GNU-Free-Documentation-License.html``GNU Free Documentation License''.

On Wednesday, January 9th 2019, I succeeded the (classic) installation of GuixSD 0.16.0 in Dual Boot with Debian testing/sid on a Laptop Packard Bell EasyNote TE (without worrying about GPT or EFI).

Downloading and burning Supergrub2disk (or copy it on a USB stick) is highly recommanded, especially in this circumstances of a dual-boot installation with Debian Testing/Sid. It can really help you... https://www.supergrubdisk.org/category/download/supergrub2diskdownload/

Download GuixSD, the GNU Guix Software Distribution:

https://www.gnu.org/software/guix/download/

Copy of the image to a USB Stick

To copy the image to a USB stick, I have followed these steps:

1. Decompress the image using the xz command:

$ xz -d guixsd-install-0.16.0.x86_64-linux.iso.xz

2. Insert a USB stick of 1 GiB or more into your machine, and determine its device name. Assuming that the USB stick is known as /dev/sdX, copy the image with:

# dd if=guixsd-install-0.16.0.x86_64-linux.iso of=/dev/sdb
# sync
Access to /dev/sdX usually requires root privileges.

Burning on a DVD

To copy the image to a DVD, follow these steps:

1. Decompress the image using the xz command:

$ xz -d guixsd-install-0.16.0.x86_64-linux.iso.xz

2. Insert a blank DVD into your machine, and determine its device name. Assuming that the DVD drive is known as /dev/srX, copy the image with:

# growisofs -dvd-compat -Z /dev/srX=guixsd-install-0.16.0.system.iso

Sources manual:

https://www.gnu.org/software/guix/manual/html_node/Preparing-for-Installation.html#Preparing-for-Installation

The installation image uses the US qwerty keyboard layout. If I want to change it, I can use the loadkeys command. For example, the following command selects the fr keyboard layout:

# loadkeys fr

I will not address the question of Wi-Fi here, since my connection is very slow. However, it's fine about the hardware, which is not a restricted thing in my case (Qualcomm Atheros AR9485 Wireless Network Adapter (rev 01). For infos about the Wi-Fi, see below:

https://www.gnu.org/software/guix/manual/html_node/Preparing-for-Installation.html#Networking

Some wifi cards require the use of a non-free firmware.

For another laptop, I had to order a usb wifi card Technoethical N150 Mini Wireless USB Adapter for GNU/Linux-libre at:

https://tehnoetic.com/adapters/tehnoetic-wireless-adapter-gnu-linux-libre-tet-n150

I have used the wired connection (RJ45 cable).

# ifconfig -a

Wired interfaces have a name starting with ‘e’; for example, the interface corresponding to the first on-board Ethernet controller is called ‘eno1’.

# ifconfig enp2s0f0 up

At this point, I need to acquire an IP address. On a network where IP addresses are automatically assigned via DHCP, I can run:

# dhclient -v enp2s0f0

Try to ping a server to see if networking is up and running:

# 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

Disk Partitioning

GPT or EFI: The tests I have done in virtual machines have not been very conclusive, I do not know too much about the subject. If you want to use GPT or EFI, please refer to the documentation:

https://www.gnu.org/software/guix/manual/html_node/Preparing-for-Installation.html#Disk-Partitioning

In my case, knowing that I will not have to worry about this question, here we go:

# cfdisk
Device     Boot     Start     End         Sectors    Size   Id Type
/dev/sda1            2048    532542415   532540368    254G  83 Linux
/dev/sda2       532543486    976771071   444227586  211.8G   5 Extended
  /dev/sda5     968720384    976771071   8050688      3.9G  82 Linux swap / Solaris
  /dev/sda6 *   532543488    968720383   436176896    208G  83 Linux
Free space      976771072    976773167        2096      1M

GuixSD will be installed on /dev/sda6. Concerning your own installation, it's better to enable the boot option * now...

Preferably, assigning file systems a label so that I can easily and reliably refer to them in file-system declarations (see File Systems). This is typically done using the -L option of mkfs.ext4 and related commands. So, assuming the target root partition lives at /dev/sda6, a file system with the label my-root can be created with:

# mkfs.ext4 -L my-root /dev/sda6

Mount the target file system under /mnt with a command like (again, assuming my-root is the label of the root file system):

# mount LABEL=my-root /mnt

I have an installed swap partition on /dev/sda5 for debian, why not use it? I ran:


# mkswap /dev/sda5
# swapon /dev/sda5

Proceeding with the Installation

With the target partitions ready and the target root mounted on /mnt, I'm ready to go. First:

# herd start cow-store /mnt

This makes /gnu/store copy-on-write, such that packages added to it during the installation phase are written to the target disk on /mnt rather than kept in memory. This is necessary because the first phase of the guix system init command (see below) entails downloads or builds to /gnu/store which, initially, is an in-memory file system.

Creating the System configuration directory:

# mkdir /mnt/etc

Creating the next (empty for now) configuration file:

# touch /etc/configuration/perso.scm

Note: you can also edit an existing file already in /etc/configuration (for example 'desktop.scm', or 'bare-bones.scm' and modify it as you wish.)

To adapt the configuration of the computer to my needs, I use vi, knowing only this one:

# vi /etc/configuration/perso.scm
_____________________________________________________________

;; Operating system configuration for a full
;; "desktop" environment with gnome and
;; gnome-shell

(use-modules (gnu) (gnu system nss))
(use-service-modules desktop networking ssh)
(use-package-modules bootloaders certs gnome screen ssh)

(operating-system
  (host-name "gnu")
  (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, and /dev/sda6 the
;; target partition for the GuixSD installation.
(bootloader (grub-configuration (target "/dev/sda") (menu-entries
	               (list
			(menu-entry
		        (label "Debian GNU/Linux")
	                (linux "/boot/vmlinuz-4.19.0-1-amd64")
	                (linux-arguments '("root=/dev/sda1"))
	                (initrd "/boot/initrd.img-4.19.0-1-amd64"))))))
	      
(file-systems (cons (file-system
                      (device (file-system-label "my-root"))
                      (mount-point "/")
                      (type "ext4"))
	             %base-file-systems))

(swap-devices '("/dev/sda5"))

(users (cons (user-account
              (name "hubert")
              (comment "GuixSD user")
              (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* gvfs                 ;for users mounts
                 nss-certs            ;for HTTPS access
                 screen
                 openssh
                %base-packages))

;; Add GNOME and/or Xfce---we can choose at the log-in
;; screen with F1.
(services (cons* (gnome-desktop-service)
                 (console-keymap-service "fr")
                %desktop-services))

;; Allow resolution of '.local' host names with mDNS.
(name-service-switch %mdns-host-lookup-nss)) 
____________________________________________________________________

Copy of this file renamed 'config.scm' to '/mnt/etc'

# cp /etc/configuration/perso.scm /mnt/etc/config.scm

Once I am done preparing the configuration file, the new system must be initialized (remember that the target root file system is mounted under /mnt):

# guix system init /mnt/etc/config.scm /mnt

This copies all the necessary files and installs GRUB on /dev/sda, unless you pass the --no-bootloader option. For more information, see Invoking guix system.

This command may trigger downloads or builds of missing packages, which can take some time.

It seemed to be going well:

Copy on /mnt [#####################################################]

Installation is finished, I can...

# reboot

First reboot

TTY* Consoles

During the first access session user, I found that I did not have the opportunity to go in full console with Ctrl-Alt-F1, Ctrl-Alt-F2, etc ... It was because of the bios , it was necessary to activate the TTY consoles in the "Main" tab 'Function Key Behavior' [Functions Keys] Now, Ctrl-Alt-F1 log me in full console, Ctrl-Alt-F2 too, and Ctrl-Alt- F3, Ctrl-Alt-F4 ... etc. Alt-F7 also works.

AZERTY keyboard

In console, the root account has the azerty keyboard. As for my GNOME session, it was still in QWERTY, I had to configure (graphically) "All Settings" / 'Region & Language' where I added Language 'French' and in 'Input Sources': 'French (alt.)'

It only remained for me to choose 'fr' in the Gnome-Shell bar of the desktop, and the keyboard became AZERTY.

Updates

root@gnu ~# guix pull
root@gnu ~# guix system reconfigure /etc/config.scm
root@gnu ~# guix package -u
hubert@gnu ~$ guix pull
hubert@gnu ~$ guix package -u
root@gnu ~# reboot

After the reboot, I get the Linux-Libre 4.20.0 kernel

Maintenance

I have launched the 2 following commands:

$ export PATH="$HOME/.config/guix/current/bin:$PATH"
$ export INFOPATH="$HOME/.config/guix/current/share/info:$INFOPATH"

Source :

https://www.gnu.org/software/guix/manual/en/html_node/Invoking-guix-pull.html#Invoking-guix-pull

Installation of softwares

root@gnu ~# guix package -i vim
hubert@gnu ~$ guix package -i markdown

(markdown converts a text file into a html file into a single command line).

hubert@gnu ~$ guix package -i vlc

SSH

I put my ssh access for ovh in the nautilus bookmarks and it works.

This system always gives me satisfaction, my installation dating from February 2018 on the other mobile still works.

https://www.gnu.org/software/guix/blog/2018/gnu-guix-and-guixsd-0.16.0-released/ Extraits :

"Using the new inferior mechanism, you can now interact with a different revision of Guix and even compose packages from different revisions of Guix.

The output of the command-line tools has been significantly improved: important events are colorized, the guix package and the guix system no longer display build logs, and the guix build colorizes build logs (in a similar way to that of Emacs-Guix).

Guix had reproducible versions and now it has "reproducible source code downloads": when a package refers to a Git repository that has disappeared (which is unfortunately not uncommon!), The command can be retrieved from from Software Heritage. This makes GuixSD one of the first distributions to rely on long-term archives.

Rust packages are now fully initialized from sources, from mrustc, a Rust compiler written in C. This is a win over this yogurt software example, and GuixSD is probably the first distribution to reach this goal.

guix system reconfigure will always load system service overrides. That way, when you find it useful, you will be able to execute

herd restart SERVICE
for updates."

A funny thing that I read I do not know where: "GuixSD is [sort of] a Gentoo for adults", it's funny... Me, I do not know much in programming, I rather found that it could be within the reach of a free software end user.

Previous: My attemps to tame GuixSD.