diff options
author | EuAndreh <eu@euandre.org> | 2020-02-06 03:58:52 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2020-02-06 03:58:52 -0300 |
commit | ccadc0bdf0436cefe76318567d358f27a46bf3e5 (patch) | |
tree | 58d52309b1ea2b6b7c3a08feed04deb5d64b83d2 /_posts/2018-07-17-running-guix-on-nixos.md | |
parent | Add code metadata annotation (diff) | |
parent | Setup publish environment variables (diff) | |
download | euandre.org-ccadc0bdf0436cefe76318567d358f27a46bf3e5.tar.gz euandre.org-ccadc0bdf0436cefe76318567d358f27a46bf3e5.tar.xz |
Merge branch 'jekyll'
Diffstat (limited to '')
-rw-r--r-- | _posts/2018-07-17-running-guix-on-nixos.md (renamed from site/posts/2018-07-17-running-guix-on-nixos.org) | 102 |
1 files changed, 74 insertions, 28 deletions
diff --git a/site/posts/2018-07-17-running-guix-on-nixos.org b/_posts/2018-07-17-running-guix-on-nixos.md index d28b8d2..e409f3c 100644 --- a/site/posts/2018-07-17-running-guix-on-nixos.org +++ b/_posts/2018-07-17-running-guix-on-nixos.md @@ -1,15 +1,30 @@ --- title: Running Guix on NixOS date: 2018-07-17 +layout: post +lang: en +ref: running-guix-on-nixos --- -I wanted to run Guix on a NixOS machine. Even though the Guix manual explains how to do it [[https://www.gnu.org/software/guix/manual/en/html_node/Binary-Installation.html#Binary-Installation][step by step]], I needed a few extra ones to make it work properly. +I wanted to run +Guix on a NixOS machine. Even though the Guix manual explains how to do it +[step by step][0], I needed a few extra ones to make it work properly. -I couldn't just install GuixSD because my wireless network card doesn't have any free/libre drivers (yet). -** Creating =guixbuilder= users -Guix requires you to create non-root users that will be used to perform the builds in the isolated environments. +[0]: https://www.gnu.org/software/guix/manual/en/html_node/Binary-Installation.html#Binary-Installation -The [[https://www.gnu.org/software/guix/manual/en/html_node/Build-Environment-Setup.html#Build-Environment-Setup][manual]] already provides you with a ready to run (as root) command for creating the build users: -#+BEGIN_SRC bash -n +I couldn't just install GuixSD because my wireless network card +doesn't have any free/libre drivers (yet). + +## Creating `guixbuilder` users + +Guix requires you to create non-root users that will be used to perform +the builds in the isolated environments. + +The [manual][1] already provides you with a ready to run (as root) command for +creating the build users: + +[1]: https://www.gnu.org/software/guix/manual/en/html_node/Build-Environment-Setup.html#Build-Environment-Setup + +```bash groupadd --system guixbuild for i in `seq -w 1 10`; do @@ -18,9 +33,15 @@ do -c "Guix build user $i" --system \ guixbuilder$i; done -#+END_SRC -However, In my personal NixOS I have disabled [[https://nixos.org/nixos/manual/index.html#sec-user-management][=users.mutableUsers=]], which means that even if I run the above command it means that they'll be removed once I rebuild my OS: -#+BEGIN_SRC shell -n +``` + +However, In my personal NixOS I have disabled [`users.mutableUsers`][2], which +means that even if I run the above command it means that they'll be removed once +I rebuild my OS: + +[2]: https://nixos.org/nixos/manual/index.html#sec-user-management + +```shell $ sudo nixos-rebuild switch (...) removing user ‘guixbuilder7’ @@ -34,9 +55,12 @@ removing user ‘guixbuilder2’ removing user ‘guixbuilder8’ removing user ‘guixbuilder5’ (...) -#+END_SRC -Instead of enabling =users.mutableUsers= I could add the Guix users by adding them to my system configuration: -#+BEGIN_SRC nix -n +``` + +Instead of enabling `users.mutableUsers` I could add the Guix users by +adding them to my system configuration: + +```nix { config, pkgs, ...}: { @@ -77,15 +101,26 @@ Instead of enabling =users.mutableUsers= I could add the Guix users by adding th }; }; } -#+END_SRC -Here I used =fold= and the =//= operator to merge all of the configuration sets into a single =extraUsers= value. -** Creating the =systemd= service -One other thing missing was the =systemd= service. +``` + +Here I used `fold` and the `//` operator to merge all of the +configuration sets into a single `extraUsers` value. -First I couldn't just copy the =.service= file to =/etc= since in NixOS that folder isn't writable. But also I wanted the service to be better integrated with the OS. +## Creating the `systemd` service -That was a little easier than creating the users, all I had to do was translate the provided [[https://git.savannah.gnu.org/cgit/guix.git/tree/etc/guix-daemon.service.in?id=00c86a888488b16ce30634d3a3a9d871ed6734a2][=guix-daemon.service.in=]] configuration to an equivalent Nix expression -#+BEGIN_SRC ini -n +One other thing missing was the `systemd` service. + +First I couldn't just copy the `.service` file to `/etc` since in NixOS +that folder isn't writable. But also I wanted the service to be better +integrated with the OS. + +That was a little easier than creating the users, all I had to do was translate +the provided [`guix-daemon.service.in`][3] configuration to an equivalent Nix +expression + +[3]: https://git.savannah.gnu.org/cgit/guix.git/tree/etc/guix-daemon.service.in?id=00c86a888488b16ce30634d3a3a9d871ed6734a2 + +```ini # This is a "service unit file" for the systemd init system to launch # 'guix-daemon'. Drop it in /etc/systemd/system or similar to have # 'guix-daemon' automatically started. @@ -107,9 +142,11 @@ TasksMax=8192 [Install] WantedBy=multi-user.target -#+END_SRC -This sample =systemd= configuration file became: -#+BEGIN_SRC nix -n +``` + +This sample `systemd` configuration file became: + +```nix guix-daemon = { enable = true; description = "Build daemon for GNU Guix"; @@ -123,9 +160,12 @@ guix-daemon = { }; wantedBy = [ "multi-user.target" ]; }; -#+END_SRC -There you go! After running =sudo nixos-rebuild switch= I could get Guix up and running: -#+BEGIN_SRC bash -n +``` + +There you go! After running `sudo nixos-rebuild switch` I could get Guix +up and running: + +```bash $ guix package -i hello The following package will be installed: hello 2.10 /gnu/store/bihfrh609gkxb9dp7n96wlpigiv3krfy-hello-2.10 @@ -142,9 +182,15 @@ Creating manual page database... 2 packages in profile $ hello Hello, world! -#+END_SRC +``` + Some improvements to this approach are: -1. looking into [[https://nixos.org/nixos/manual/index.html#sec-writing-modules][NixOS modules]] and trying to bundle everything together into a single logical unit; -2. [[https://www.gnu.org/software/guix/manual/en/html_node/Requirements.html#Requirements][build Guix from source]] and share the Nix store and daemon with Guix. + +1. looking into [NixOS modules][4] and trying to bundle everything together + into a single logical unit; +2. [build Guix from source][5] and share the Nix store and daemon with Guix. Happy Guix/Nix hacking! + +[4]: https://nixos.org/nixos/manual/index.html#sec-writing-modules +[5]: https://www.gnu.org/software/guix/manual/en/html_node/Requirements.html#Requirements |