Nix (package manager): Difference between revisions
imported>Mic92 sandbox cannot be enabled single builds |
imported>Mic92 proot/nix-user-chroot |
||
Line 47: | Line 47: | ||
After that being done, you can use all Nix commands as a normal user without any special permissions (for example by using <code>sudo</code>) | After that being done, you can use all Nix commands as a normal user without any special permissions (for example by using <code>sudo</code>) | ||
== Install Nix without root permissions == | |||
By using [https://github.com/lethalman/nix-user-chroot nix-user-chroot] or [https://github.com/proot-me/PRoot proot] | |||
you can use nix on systems, where you have no permission to create `/nix`. | |||
<code>nix-user-chroot</code> is the preferred and faster option. However it might not run on older linux kernels | |||
or kernels without user namespace support. With the following command you can test | |||
whether your system support user namespaces: | |||
<syntaxHighlight lang="bash"> | |||
unshare --user --pid echo YES | |||
</syntaxHighlight> | |||
The output should be <code>YES</code>. | |||
If the command is absent an alternative is to check the kernel compile options. | |||
<syntaxHighlight lang="bash"> | |||
zgrep CONFIG_USER_NS /proc/config.gz | |||
# On some systems like Debian or Ubuntu the kernel configuration is in a different place | |||
grep CONFIG_USER_NS /boot/config-$(uname -r) | |||
</syntaxHighlight> | |||
If the output of this command is <code>CONFIG_USER_NS=y</code> your system supports user namespaces. | |||
=== nix-user-chroot === | |||
<code>nix-user-chroot</code> will create an environment, in which you can bind mount an directory to <code>/nix</code>. | |||
The mountpoint will be only visible within this environment. | |||
<code>nix-user-chroot</code> can be build the following way. This assumes a c compiler and make is installed. | |||
<syntaxHighlight lang="bash"> | |||
git clone https://github.com/lethalman/nix-user-chroot.git | |||
cd nix-user-chroot | |||
make | |||
</syntaxHighlight> | |||
The last step created an executable called <code>nix-user-chroot</code>. | |||
<code>nix-user-chroot</code> can be used to install nix. | |||
In this example the nix store will be installed to <code>~/.nix</code>: | |||
<syntaxHighlight lang="bash"> | |||
mkdir -m 0755 ~/.nix | |||
./nix-user-chroot/nix-user-chroot ~/.nix bash | |||
</syntaxHighlight> | |||
This will start a new shell in which you can run the install script of nix: | |||
<syntaxHighlight lang="bash"> | |||
curl https://nixos.org/nix/install | sh | |||
</syntaxHighlight> | |||
Note that you can only use nix and the installed programs within the shell started by <code>nix-user-chroot</code>. | |||
=== PRoot === | |||
Precompiled proot binaries can be downloaded from [https://github.com/proot-me/proot-static-build/releases here] | |||
The following commands will install nix the nix store to <code>~/.nix</code> | |||
<syntaxHighlight lang="bash"> | |||
chmod +x proot_5.1.1_x86_64_rc2--no-seccomp # first make sure the executable bit is set on the binary | |||
mkdir ~/.nix | |||
./proot_5.1.1_x86_64_rc2--no-seccomp ~/.nix | |||
</syntaxHighlight> | |||
This will start a new shell, where nix can be installed: | |||
<syntaxHighlight lang="bash"> | |||
curl https://nixos.org/nix/install | sh | |||
</syntaxHighlight> | |||
Note that you can only use nix and the installed programs within the shell started by PRoot. | |||
== Common Errors == | == Common Errors == |