chroot 使用 ================================================================================ **创建工作目录/创建 rootfs 环境** .. code-block:: mkdir -p alpine-linux-x86-64 .. code-block:: curl -O https://dl-cdn.alpinelinux.org/alpine/v3.23/releases/x86_64/alpine-minirootfs-3.23.2-x86_64.tar.gz .. code-block:: tar -vxf alpine-minirootfs-3.23.2-x86_64.tar.gz -C alpine-linux-x86-64 **配置 DNS** .. code-block:: cp /etc/resolv.conf alpine-linux-x86-64/etc/resolv.conf # 或使用自定义 DNS echo "nameserver 114.114.114.114" > alpine-linux-x86-64/etc/resolv.conf **挂载文件系统** .. code-block:: sudo mount -t proc /proc alpine-linux-x86-64/proc sudo mount --rbind /sys alpine-linux-x86-64/sys sudo mount --make-rprivate alpine-linux-x86-64/sys sudo mount --rbind /dev alpine-linux-x86-64/dev sudo mount --make-rprivate alpine-linux-x86-64/dev - `/proc` 是虚拟文件系统,可以挂载到多个不同的挂载点 - `/sys` 是虚拟文件系统,普通 `bind` 只绑定目录本身,不会递归绑定子目录,必须使用 `--rbind` 挂载 - `/dev` 是设备文件系统,普通 `bind` 只绑定目录本身,不会递归绑定子目录,必须使用 `--rbind` 挂载 - `--make-rprivate` 是私有模式,否则可能卸载失败,target is busy **进入 chroot 环境** .. code-block:: # 单个命令 sudo chroot alpine-linux-x86-64 apk update sudo chroot alpine-linux-x86-64 apk add bash # 多个命令(使用 sh -c) sudo chroot alpine-linux-x86-64 /bin/sh -c "apk update && apk add bash" # 多个命令(使用 heredoc,需要指定 shell) sudo chroot alpine-linux-x86-64 /bin/sh <