Ade Malsasa Akbar contact
Senior author, Open Source enthusiast.
Friday, April 23, 2021 at 21:27

This is my note as a beginner on using Guix in my computing. Because this is a beginner article, it'll be fun, as we'll also find something similar to checkpoints as we find at video games here. Now let's go!


Subscribe to UbuntuBuzz Telegram Channel to get article updates.

 

About Guix


Guix is a program you put on operating system you are using to install, update, and configure tens of thousands of computer software applications automatically from a central repository maintained by GNU Guix Project. In other words, Guix for an Ubuntu user is similar to APT but portable, can be installed on other GNU/Linux distros, and independent, has its own software packages can run on any distro not dependent to any of them. Visit guix.gnu.org to learn more.




Features


With Guix you can...

... revive your old computers (32 bit) with latest software and their updates,

... obtain software you want in whatever GNU/Linux distro you're using,

... run two different versions of a software at a same time, and

... get an alternative to Flatpak or Snap technology,

... without root (administrator) privilege to do these all.



Requirements


- A computer, either 64 or 32 bit is fine.

- A GNU/Linux operating system, either Ubuntu or other one is fine.

- Internet access. 

- Basic ability on command lines.


Installing Guix


To present this article to you all, dear readers, I run Guix program on top of a Debian laptop and not install a whole GuixSD operating system. To achieve that, I run several commands explained below. The result, once installed, we can invoke guix command from Terminal. These are my practice to the official Guix documentation Binary Installation.

 [Picture 1. Guix program installation by a script]


First command:

$ wget https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh

Note: Debian does not include wget by default so I need to install it first by issuing its command line $ sudo apt-get install wget before I proceed.


Second command:

$ chmod +x guix-install.sh


Third command:

$ sudo ./guix-install.sh

Note: Mageia by default does not include sudo so if we use Mageia as a basis, we should install sudo first by issuing its command line $ su; # dnf install sudo; # exit before we proceed.


Fourth command:

$ wget 'https://sv.gnu.org/people/viewgpg.php?user_id=15145' -qO - | sudo -i gpg --import -

Note: this command requires internet access and should result in Ludovic Courtes' digital key. He is the founder of Guix.

 

Fifth command:

$ sudo ./guix-install.sh

 

Sixth command:

Answer yes to the question. 

 

Seventh command:

$ guix pull

Note: this command downloads, installs, and prepares a foundation to Guix so user can later install software. In Ubuntu language, this means it downloads the minimum dependencies a system should have such as gcc, glibc, bash, etc. In my experiment, this takes up to 2GB download size. I suggest you to use a broadband connection (2MB/s or later) to finish this.

 

Last command:

$ GUIX_PROFILE="$HOME/.guix-profile"
$ . "$GUIX_PROFILE/etc/profile"

 
Finally, I must log out and log in again to finish all Guix setup.  

 [Picture 2. guix pull in action]

 

Lessons learned:

- We can take benefits of Guix on Ubuntu, openSUSE, Mageia, and other GNU/Linux distros other than GuixSD itself.

- We can easily install Guix thanks to the script provided which automates everything.

- The command guix pull did the setup of Guix minimum system by downloading multiple packages.

- Some distro does not include several important programs by default such as sudo (Mageia) and wget (Debian).

 

Check Guix

To tell myself that Guix is ready, I check my running processes or services for a program named guix-daemon. See the greens below.

master@master:~$ ps aux | grep -i guix
root 769 0.0 0.1 8824 3332 ? Ss 04:03 0:00 /var/guix/profiles/per-user/root/current-guix/bin/guix-daemon --build-users-group=guixbuild
...
master@master:~$
systemctl status guix-daemon
guix-daemon.service - Build daemon for GNU Guix
Loaded: loaded (/etc/systemd/system/guix-daemon.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-04-22 04:03:58 WIB; 1h 42min ago
Main PID: 769 (guix-daemon)
Tasks: 1 (limit: 8192)
Memory: 6.1M
CPU: 1.954s
CGroup: /system.slice/guix-daemon.service
└─769 /var/guix/profiles/per-user/root/current-guix/bin/guix-daemon --build-users-group=guixbuild

...
master@master:~$

 

Begin Guix

 

Everything begins from the boss command:

$ guix describe

So we know our Guix system as a whole. We will need this when we ask about Guix to the online community.

master@master:~$ guix describe
Generation 2 Apr 21 2021 21:58:10 (current)
guix f8acd1a
repository URL: https://git.savannah.gnu.org/git/guix.git
branch: master
commit: f8acd1aeefe2ff5183f58c7e10a1cec4793cffb7
...

Then we see installed packages on our system:

$ guix package --list-installed

We will often utilize this command to see what packages installed and what elses no longer installed on our Guix system.

master@master:~$ guix package --list-installed
geany 1.37.1 out /gnu/store/jrmp8cm7a5yd6xpv1j2nlj8ib7cxwjn5-geany-1.37.1
glibc-utf8-locales 2.31 out /gnu/store/395pvii4bcjqxvdv7h0drq10lxi01sv1-glibc-utf8-locales-2.31
nmap 7.80 out /gnu/store/b4ks9f477sk7z862a9yd9ns1s0flf3dx-nmap-7.80
fping 5.0 out /gnu/store/kjyrv173ykb7h266k0sqgijkr40kl0nr-fping-5.0
wget 1.20.3 out /gnu/store/qxfwz1k6lnp0kw0cg1pf5hqr0s13p7fk-wget-1.20.3
testdisk 7.1 out /gnu/store/ximcd9i3yh7spclr5vq34shih3das5d7-testdisk-7.1

...

However, for first time use, of course it will be empty.

 

Check Disk Space

 

I do disk space checking multiple times. I do commands below before and after I do guix pull and guix install.

$ df -h /
$ du -h /gnu
$ du -h /var/guix
$ baobab # my favorite tool at GNOME

Before guix pull:

As you can see below, my /gnu and /var directories are both like that. By the time being, /gnu will grow tremendous amount.

 

After guix pull:

See /gnu directory, it grows from 500MB to 2000MB. However, /var/guix grows very little.



Install Software


Software installation process in Guix is unique on its own way as appeared below. Unlike APT, Guix does not tell total amount of download as a whole but only as parts as it will tell us again and again to download this amount then that amount. Below is my process of installing Geany the small but complete text editor. This is already a second attempt (6MB) after a removal while the first one were very much larger (700MB).

master@master:~$ guix install geany
The following package will be installed:
geany 1.37.1

substitute: /gnu/store/pwcp239kjf7lnj5i4lkdzcfcxwcfyk72-bash-minimal-5.0.16/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.utf8)
6.2 MB will be downloaded
/gnu/store/pwcp239kjf7lnj5i4lkdzcfcxwcfyk72-bash-minimal-5.0.16/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.utf8)
geany-1.37.1 3.4MiB 721KiB/s 00:05 [##################] 100.0%

The following derivation will be built:
/gnu/store/qc9gm3xhmjzs4wvw654vmpqgm44krqdg-profile.drv

building CA certificate bundle...
building fonts directory...
generating GLib schema cache...
creating GTK+ icon theme cache...
building cache files for GTK+ input methods...
building directory of Info manuals...
building database for manual pages...
building XDG desktop file cache...
building XDG MIME database...
building profile with 3 packages...
master@master:~$

The picture is like below:

To search for a software, we use command for searching. After that, we use the package name we found with the install command (e.g. type libreoffice instead of LibreOffice).

$ guix search [keywords]

master@master:~$ guix search text editor # results edited
name: vim
name: vim-full
name: tepl
name: pluma
name: ne
name: nano
name: mousepad

...


Size of an Installed Software

We can check how much exactly a package with its dependencies by size in megabytes.

$ guix size [package_name]

master@master:~$ guix size geany
substitute: /gnu/store/pwcp239kjf7lnj5i4lkdzcfcxwcfyk72-bash-minimal-5.0.16/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.utf8)
store item total self
/gnu/store/rv567nsh90bqz5gfh6sh1g84jccxcifa-llvm-11.0.0 220.0 148.6 19.4%
/gnu/store/7disnxqw8i3n4zhw5s0xj9kkdckkmr1p-mesa-20.2.4 389.1 141.6 18.5%
/gnu/store/18hp7flyb3yid3yp49i6qcdq0sbi5l1n-guile-3.0.2 132.8 53.2 7.0%
/gnu/store/n2cnp2fivxq10kxqalcv2q41wzsyj9yd-gtk+-3.24.24 744.3 49.1 6.4%
/gnu/store/ckwyq3y43i33s5fl9hb6c51418rh1qwj-icu4c-66.1 110.2 38.1 5.0%
/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31 38.4 36.7 4.8%
/gnu/store/yf81h4xdajc6jbxs5amqajai9w0yfixb-ghostscript-with-cups-9.52 222.0 33.9 4.4%
/gnu/store/01b4w3m6mp55y531kyi1g8shh722kwqm-gcc-7.5.0-lib 71.0 32.6 4.3%
...
total: 765.0 MiB
master@master:~$

Example above showing that Geany with its dependencies is amount to 700 megabytes. One more example below:

master@master:~$ guix size fping
store item total self
/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31 38.4 36.7 51.7%
/gnu/store/01b4w3m6mp55y531kyi1g8shh722kwqm-gcc-7.5.0-lib 71.0 32.6 45.9%
/gnu/store/mmhimfwmmidf09jw1plw3aw1g1zn2nkh-bash-static-5.0.16 1.6 1.6 2.3%
/gnu/store/kjyrv173ykb7h266k0sqgijkr40kl0nr-fping-5.0 71.1 0.1 0.1%
total: 71.1 MiB
master@master:~$

These two examples are different programs namely Geany and fping. However, they share several dependencies (in other words, they require several same programs) which are already installed in the system. Once a dependency installed, further programs which need that dependency will not cause redundancy as the required one only installed once. This indicates that Guix holds dynamic linking views rather than the static linking ones -- just the same as Unix and GNU. To me, this tells that Guix is as opposite to AppImage as technology choices to get software for users.


Play Checkpoints


Guix features generations, or I prefer to call them checkpoints, they are player's saved points in time, where each point in Guix is not how much we defeat some monsters but (in my observation) how much programs we install. Sum of actions we do in a checkpoint is called transaction and it may be either install or remove. Installing a program creates a checkpoint, further install adds more checkpoints, and just as video games we can go back to a previous checkpoint if we fail at a point. This "go back" is called rollback in Guix. There is another way, that is, player can jump between checkpoints he made, and this is called switch-generation in Guix. As you can guess, of course a player can see all checkpoints he made, and this is called list-generations in Guix.

$ guix package --list-generations
$ guix package --switch-generation
$ guix package --roll-back
 
For example, below I have several checkpoints after doing install and remove several times. 

[Picture 3. Checkpoints I made in my Guix system.]
 
From checkpoint list, we know that I am at Checkpoint 15 right now indicated with (current) where I defeated a monster installed a program named recutils. If I do list installed packages here, I got a result telling us all monsters defeated all programs installed from all time up to Checkpoint 15.

Let's assume I fail at Checkpoint 15 and want to respawn back in previous stage, I do rollback, so currently I am alive again in Checkpoint 14. Here, I cannot run recutils anymore, neither remove it, because in Checkpoint 14 there is no recutils. As an addition, in Checkpoint 14 of course I cannot run testdisk, the sword I got program I installed at previous stages afar and stolen by goblin removed at several checkpoints before this. Makes sense, right?

Let's assume I want to go back to my earliest stage, Checkpoint 6, I do switch-generation, Guix jumped me there. In this stage I can run testdisk again, the program I removed at Checkpoint 7, which is of course not available at Checkpoint 14. It is very similar to checkpoints in a video game.

Do you wonder why my earliest stage is Checkpoint 6 and not 1? Because I deleted them all with delete-generations. 

Uninstall Guix

 

Finally, if we wish to remove Guix completely from the system, then imagine deleting video game's data. We only need to delete two folders and several other things as Guix in fact only store /gnu and /var/guix in our computer. In reality, I learned from Arch Wiki and Guix Forum the procedures like below.

$ sudo systemctl stop guix-daemon.service
$ sudo rm -rfv /etc/systemd/system/guix-daemon.service # if existent
$ sudo rm -rfv /etc/systemd/system/guix-daemon.service.d # if existent
$ sudo rm -rfv /etc/profile.d/guix.sh # if existent
$ sudo rm -rfv /gnu # the place of all programs
$ sudo rm -rfv /var/guix
$ sudo rm -rfv ~/.profile/guix


Afterwords

 

That's how I try GNU Guix! There are of course many things uncovered in this simple article such as how to repackage installed software and advanced things like containerization. However, I wish Let's Try Guix can give other people a picture in how a normal Ubuntu Desktop user take benefits from it. See you next time!



This article is licensed under CC BY-SA 3.0.