Nix
Nix is a purely functional package manager that aims to make package management reliable and reproducible.
Installation
There are three choices for a Nix installation, one is supported by Arch Linux, the next officially supported by Nix, and the last not being supported at all.
Upstream installation script
Download the file with curl --proto '=https' --tlsv1.2 -sSfL https://nixos.org/nix/install -o nix-install.sh, view it: less ./nix-install.sh, and run the script ./nix-install.sh --daemon to start Nix installation.
curl some-url | sh, as the Nix documentation suggests, is considered as a security risk, because it executes unknown code, that might even be corrupted during the download. Therefore it is recommended to manually download the script and check it, before executing it.archlinux-nix
archlinux-nixAUR can be used to 'bootstrap' an Arch Linux compatible Nix system by setting up the required groups and permissions.
After installing nix and archlinux-nixAUR, list the available commands:
$ archlinux-nix
To complete the installation, follow all of these steps:
Prepare Arch for the Nix installation:
# archlinux-nix setup-build-group # setup build groups # archlinux-nix bootstrap # bootstrap the system
Configure a default Nix channel and update it:
$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable
$ nix-channel --update
$ nix-env -u
After first install, and before rebooting, activate Nix in each new shell:
$ source /etc/profile.d/nix{,-daemon}.sh
This makes Nix's daemon (and package manager) functional without rebooting. It updates your PATH to Nix's liking. Check it by echo $PATH. Run this in each new shell session until you have restarted.
Configuration
To have the Nix daemon launched at boot time, enable nix-daemon.service.
Add required users to the group in order to access the daemon socket.
Add a channel and update it.
$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable
$ nix-channel --update
Tips and tricks
With the shell configured, the following should install hello into your updated PATH: .
If you installed Nix from the official repositories, you must add the directory to your PATH manually.
$ nix-env -iA nixpkgs.hello
Run and make sure it is in the right PATH. If it works, you can remove it simply by
$ nix-env --uninstall hello
Or you can check the list of installed program by (q stands for query)
$ nix-env -q
You can also check generations by
$ nix-env --list-generations
Check more details in the nix-env(1) manual.
Max jobs
By default, nix only uses one builder. The following will allow nix to use as many jobs as the number of CPUs:
/etc/nix/nix.conf
max-jobs = auto
Troubleshooting
Permission denied
Running or as user produces
cannot connect to daemon at '/nix/var/nix/daemon-socket/socket: permission denied
If you just installed nix, you need to reboot.
Too many open files
Some builds may run into an error such as
error: opening directory '/nix/store/...': Too many open files
Edit nix-daemon.service and increase the file limit
[Service] LimitNOFILE=65536
Warning message about root user channels
warning: Nix search path entry '/nix/var/nix/profiles/per-user/root/channels' does not exist, ignoring
If the above message shows up when using Nix, the root user will need to update their channels.
# nix-channel --update
Stale sandbox paths
error: while setting up the build environment: executing '/usr/bin/bash': No such file or directory error: builder for '/nix/store/mh8hl6c7gyyqrnzrln4j2jxg79n32slf-nixpkgs-21.11pre300283.f930ea227ce.drv' failed with exit code 1 error: build of '/nix/store/mh8hl6c7gyyqrnzrln4j2jxg79n32slf-nixpkgs-21.11pre300283.f930ea227ce.drv' failed error: program '/usr/bin/nix-env' failed with exit code 100
If migrating from archlinux-nixAUR to nix, make sure to clear out from as there might be stale paths that have been garbage-collected already.
Broken coreutils
There is currently a problem with the provided by the nix package where the busybox provided coreutils override the build environment. One workaround is to install the busybox
# nix-build 'channel:nixpkgs-unstable' -A busybox-sandbox-shell --out-link /opt/busybox-nix
and update the nix configuration to use it
Other sandbox issues
error: while setting up the build environment: mounting /proc: Operation not permitted error: program '/usr/bin/nix-env' failed with exit code 1
1: package 'utils' in options("defaultPackages") was not found
2: package 'stats' in options("defaultPackages") was not found
Error: .onLoad failed in loadNamespace() for 'utils', details:
call: system(paste(which, shQuote(names[i])), intern = TRUE, ignore.stderr = TRUE)
error: cannot popen '/nix/store/fnkvlbls29d01jcx3wsdnhykyrl7087r-which-2.21/bin/which 'uname' 2>/dev/null', probable reason 'Cannot allocate memory'
The issue is known upstream: #2311, #3000, and #4636.
nixpkgs expects to be built with the sandbox on.The most common fix is to disable sandboxing in the configuration file, then Restart the service.