28.07.2014 19:53

Installing GNU system with guix

First what is this? This is a future distribution system of GNU packages, that create a complete operating system. Guix is a package manager that makes this all possible to happen. While GNU at all is a project with long history and many components are widely used in Linux distributions the idea of building complete GNU system with Guix is relatively new and in alfa stage.

Getting The System

Everything is described in



wget ftp://alpha.gnu.org/gnu/guix/gnu-usb-install-0.7.x86_64.xz
unxz gnu-usb-install-0.7.x86_64.xz
dd if=gnu-usb-install-0.7.x86_64 of=/dev/sdX bs=512

Boot the machine from USB, you are logged in as root

dhclient eth0 (make sure the name of the device is correct)
fdisk /dev/sda (create sda1 with linux ext4 fs)
mkfs.ext4 /dev/sda1
mount /dev/sda1 /mnt
deco start cow-store /mnt
cp /etc/configuration-template.scm /mnt/config.scm
zile /mnt/config.scm

modify to suite your needs, if you do not need to use label for root fs just comment with ;; and change device "root" to "/dev/sda1". Change the grub-configuration device to "/dev/sda. Save and quit (C-x C-c)."

guix system init /mnt/config.scm /mnt

Now this takes few minutes to download the data a install grub. Reboot.

The fun begins.

This is a linux-libre, the only GFX card working out of the box are those from Intel, rest should work as VESA. Otherwise you may get firmware loading errors and delays.

You may have troubles with your ETH card. Generally do not forget to hand start atm

dhclient eth0

The package system is completely different. Whole system basicaly resides in /gnu/store, the rest is mostly a bunch of symlinks.

Every user can have his system profile, the one for root is under /root/.guix....

Primary installation method is "build" - i.e. build a package from source. If you want to use a substitutes (prebuild packages), you have to authorize the source

guix archive --authorize < /gnu/store/<long-hash>-guix-0.<somebuild>/share/guix/hydra.gnu.org.pub

Installing a "package" is

guix package -i <packagename>

if substitutes or any other dependency is not present, it is build. Every package can have its own dependecy on other package of various version. All are build in /gnu/store. You may have many version of perl, gcc.. whatever together.

To get a list of available packages type

guix package -A | grep <name>

If you want to install Xorg

guix package -i xorg-server xf86-video-intel xf86-input-keyboard xf86-input-mouse

starting e.g. Xorg -configure will print "Missing output drivers". Why? You have to supply the Xorg with the correct path to your system profile

Xorg -modulepath  /root/.guix-profile/lib/xorg/modules/

OK, you've set your Xorg, now lets start e.g. sshd

guix package -i lsh

This is a GNU ssh, but you may use also openssh, halfway to go, need to generate a yarrow seed, not yet found a way to make lsh run as dmd service, but you may try to make a service file

mkdir -p /var/spool/lsh
lsh-make-seed -o /var/spool/lsh/yarrow-seed-file
lsh-keygen  > /etc/lsh_host_key
/gnu/store/*-lsh-2.1/sbin/lshd --daemonic --root-login

About Guile, scheme...

The complete OS is based on scheme (a lisp dialect) language. The init system dmd (daemon managing daemons) is in scheme, init scripts are in scheme, config files are in scheme, guix is in scheme, package definitions are in scheme.

The scheme is interpreted by Guile. Scheme (.scm) could be precompiled to ".go".

deco status dmd 

shows existing services while

deco detailed-status dmd

shows details of every runing service.

For Windows ones - installing in VirtualBox

Downloaded image is just a copy of a raw disk, you need to convert it to VDI

"C:\Program Files\Oracle\VirtualBox\VBoxManage" convertfromraw gnu-usb-install-version-linux-i686 gnu.vdi --format vdi

Attach it as a new SATA storage to new VB machine, enable PAE in System/Processor tab, otherwise it may crash. Add another disk image to install to and after a boot continue from beginning of this article.

Email comment