我有一个复杂的场景,大多数复杂的部分都在工作:
- SD 卡包含在 LUKS/BTRFS 文件系统上安装的 Fedora 23 Raspberry Pi。
- Fedora 23 x86-64 VM 用于管理 RPi 的 Fedora SD 卡安装。
- 我可以将 SD 卡很好地安装到我的 VM 中,并使用静态构建的 QEMU ARM 对其进行 chroot,但由于某种原因,这确实很难获得。
但是,在我的 chroot 中,我无法访问网络。当我在 Ubuntu/Debian 中做过类似的事情时,我总是可以访问网络。我已经禁用了 SELinux :(
,并做了很多绑定安装以使事情正常工作,但我无法访问网络。我复制了/etc/sysconfig/network-scripts/ifcfg-enp0s3
,并尝试了我能想到的所有其他方法。
我的 chroot 设置看起来像这样:
cryptsetup luksOpen /dev/sdXN picrypt
mount -t btrfs /dev/mapper/picrypt /mnt
mount -t proc none /mnt/proc
mount -t sysfs none /mnt/sys
mount --bind /dev /mnt/dev
mount --bind /dev/pts /mnt/dev/pts
mount --bind /run /mnt/run
chroot /mnt/
我注意到从主机的角度来看,安装了更多的文件系统,但我假设它们是自动继承的,只是由于某种原因没有出现在 chroot 中。以下是我的主人所知道的坐骑:
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=2013260k,nr_inodes=503315,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime,seclabel)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mapper/fedora-root on / type ext4 (rw,relatime,seclabel,data=ordered)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=22,pgrp=1,timeout=0,minproto=5,maxproto=5,direct)
mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel)
tmpfs on /tmp type tmpfs (rw,seclabel)
debugfs on /sys/kernel/debug type debugfs (rw,relatime,seclabel)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel)
nfsd on /proc/fs/nfsd type nfsd (rw,relatime)
/dev/sda1 on /boot type ext4 (rw,relatime,seclabel,data=ordered)
/dev/mapper/fedora-home on /home type ext4 (rw,relatime,seclabel,data=ordered)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
tmpfs on /run/user/42 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=404748k,mode=700,uid=42,gid=42)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=404748k,mode=700,uid=1000,gid=1000)
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
/dev/sr0 on /run/media/naftuli/VBOXADDITIONS_5.0.20_106931 type iso9660 (ro,nosuid,nodev,relatime,uid=1000,gid=1000,iocharset=utf8,mode=0400,dmode=0500,uhelper=udisks2)
/dev/sdXN on /run/media/naftuli/PI-BOOT type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)
tmpfs on /home/naftuli/tmp type tmpfs (rw,relatime,seclabel,mode=700,uid=1000,gid=1000)
我的 chroot 知道很多小于这个:
/dev/mapper/picrypt on / type btrfs (rw,relatime,seclabel,compress=lzo,space_cache,subvolid=5,subvol=/)
none on /proc type proc (rw,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=2013260k,nr_inodes=503315,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
sysfs on /sys type sysfs (ro,relatime,seclabel)
为了获得具有网络支持的工作 chroot,我真的需要安装全部将那些/sys
子文件系统放入我的 chroot 中?
答案1
要为 chroot 会话设置网络,您需要将 DNS 配置复制到 chroot 环境中:
cp /etc/resolv.conf /mnt/etc/resolv.conf
或者
ln -s /etc/resolv.conf /mnt/etc/resolv.conf
答案2
如果您使用代理,那么您还需要将代理设置复制到 chroot 环境。
sudo cp /etc/apt/apt.conf /path/to/chroot/etc/apt/apt.conf
/etc/apt/apt.conf 可能看起来像这样
Acquire::http::proxy "http://192.168.120.100:80/";
Acquire::https::proxy "https://192.168.120.100:80/";
Acquire::ftp::proxy "ftp://192.168.120.100:80/";
答案3
以下是我在 Debian Linux 上的案例。如果没有 chroot session ,请执行以下操作。
- ls -lah /etc/resolv.conf 因为是软链接,所以实际文件在/tmp/resolv.conf
- 然后 cp -rf /tmp/resolv.conf /mnt/etc/resolv.conf。 (假设您已将磁盘映像安装在 /mnt 上)然后互联网在 chroot 会话中工作:)
答案4
今天在 Ubuntu 18.04.1 上工作我必须使用:
sudo rsync -avh --devices --specials /run/systemd/resolve /target/run/systemd
为了在 chroot 中有一个有效的网络连接。
您必须验证解析目录是否位于 chroot 源和目标上的同一位置,因为它们可能会随着不断发展的更新过程而发生变化。就我而言,缺少几周的更新:
来源:VERSION="18.04.2 LTS(仿生海狸)"
目标:VERSION="18.04.1 LTS(仿生海狸)"