4个稳定版本
1.2.2 | 2021年5月2日 |
---|---|
1.2.1 | 2021年3月12日 |
1.1.1 | 2021年1月9日 |
Unix APIs 排名第 555
每月下载 22 次
17KB
276 行
nix-user-chroot
Rust 对 lethalman 版本的重写,以明确许可证情况。这个分支还使得使用nix沙盒成为可能!
作为普通用户运行和安装nix,无需root权限。Nix-user-chroot需要用户命名空间来完成其任务(从Linux 3.8开始可用)。请注意,在某些Linux发行版(如Red Hat Linux、CentOS)中使用默认内核时,对于未授权用户来说此功能不可用。它应该在Ubuntu、Debian和Arch Linux中可用。
检查您的内核是否支持未授权用户的用户命名空间
$ unshare --user --pid echo YES
YES
输出应为 YES
。如果命令不存在,可以检查内核编译选项
$ zgrep CONFIG_USER_NS /proc/config.gz
CONFIG_USER_NS=y
在某些系统(如Debian或Ubuntu)上,内核配置在另一个位置,因此请使用
$ grep CONFIG_USER_NS /boot/config-$(uname -r)
CONFIG_USER_NS=y
在基于Debian的系统上,此功能可能默认禁用。但是,它们提供了一个sysctl开关,可以在运行时启用它。
在RedHat / CentOS 7.4上,用户命名空间默认禁用,但可以通过以下方式启用
- 通过
grubby
将namespace.unpriv_enable=1
添加到内核引导参数中 echo "user.max_user_namespaces=15076" >> /etc/sysctl.conf
以增加允许的命名空间数量,超过默认的0。
有关更多详细信息,请参阅 RedHat 文档
下载静态二进制文件
检出 最新版本 并下载与您的架构匹配的二进制文件。
使用cargo安装
$ cargo install nix-user-chroot
从源代码构建
$ git clone https://github.com/nix-community/nix-user-chroot
$ cd nix-user-chroot
$ cargo build --release
如果您使用rustup,还可以构建一个静态链接版本
$ rustup target add x86_64-unknown-linux-musl
$ cargo build --release --target=x86_64-unknown-linux-musl
安装
这将从chroot下载并解压最新的nix二进制tar包
$ mkdir -m 0755 ~/.nix
$ nix-user-chroot ~/.nix bash -c "curl -L https://nixos.org/nix/install | bash"
本文中描述的安装方法在NixOS上无法正常工作,因为您从一个空的nix存储开始,因此缺少bash和coreutils等工具。在NixOS上,您根本不需要使用nix-user-chroot
,因为您可以使用以下命令获得类似的功能:nix run --store ~/.nix nixpkgs.bash nixpkgs.coreutils
用法
安装后,您始终可以使用以下方式进入nix用户chroot:
$ nix-user-chroot ~/.nix bash -l
您现在位于一个用户chroot,其中/
由您的用户所有,因此/nix
也由您的用户所有。其他所有内容都是从真实根目录绑定挂载的。
nix配置不在/etc/nix
中,而在/nix/etc/nix
中,这样您就可以修改它。这是通过NIX_CONF_DIR
完成的,您可以在任何时候覆盖它。
Nixpkgs中的具有OpenGL或CUDA支持的库和应用程序需要从/run/opengl-driver/lib加载库。为了方便,nix-user-chroot将把/nix/var/nix/opengl-driver/lib(如果存在)绑定挂载到该位置。您仍然需要在这里链接系统库,因为它们的原始位置是发行版相关的。例如,在Ubuntu 20.04上支持CUDA:
$ mkdir -p /nix/var/nix/opengl-driver/lib
$ ln -s /usr/lib/x86_64-linux-gnu/libcuda.so.1 /nix/var/nix/opengl-driver/lib
如果您第一次进入nix用户chroot时此目录不存在,您需要重新进入以将/run/opengl-driver/lib挂载。
愿望清单
这些是作者希望看到的功能,如果您想参与这项工作,请告诉我
添加一个--install
标志
而不是
$ mkdir -m 0755 ~/.nix
$ nix-user-chroot ~/.nix bash -c "curl -L https://nixos.org/nix/install | bash"
它应该是这样的
$ nix-user-chroot --install
这假设我们默认将安装到$XDG_DATA_HOME
或$HOME/.data/nix
添加一个setuid版本
由于并非所有Linux发行版默认允许用户命名空间,因此我们需要为那些安装setuid二进制文件的包提供包以实现相同的功能。
类似的项目
依赖项
~1.5MB
~37K SLoC