User-Mode Linux(UML)折腾笔记
拉取内核代码:
git clone --depth 1 git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
编译内核:
make defconfig ARCH=um
make menuconfig ARCH=um
make ARCH=um
下载 rootfs:
https://uk.images.linuxcontainers.org/images/alpine/
Alpine 镜像体积小巧,容易使用。
官方 rootfs 默认不带 OpenRC,所以从这里下载。
制作启动镜像:
dd if=/dev/zero of=rootfs.img bs=1M count=128
mkfs.ext4 rootfs.img
mkdir rootfs
sudo mount -o loop rootfs.img rootfs
sudo tar xvf rootfs.tar.xz -C rootfs
sudo chroot rootfs /bin/sh
passwd
# 设置 root 密码
vi /etc/network/interfaces
# 文件内容见下方
echo 'nameserver 223.5.5.5' > /etc/resolv.conf
exit
/etc/network/interfaces
auto eth0
iface eth0 inet static
address 10.0.0.2
netmask 255.255.255.0
gateway 10.0.0.1
取消挂载镜像:
sudo umount rootfs
rmdir rootfs
初始化宿主机网络:
ip tuntap add tap0 mode tap group users
chown root:users /dev/net/tun
ip addr add 10.0.0.1/24 dev tap0
ip link set tap0 up
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
把自己加入到 users 用户组(使用 root 则无视):
usermod -a -G users <username>
启动(默认只读):
./linux ubd0=rootfs.img mem=128M eth0=tuntap,tap0,,10.0.0.1
不需要 root 权限。
安全停止:
uml 内部执行 halt。
以读写方式启动:
./linux rw ubd0=rootfs.img mem=128M eth0=tuntap,tap0,,10.0.0.1
直接修改 rootfs.img。
以 COW(copy-on-write,写时复制)方式启动:
./linux rw ubd0=data.cow,rootfs.img mem=128M eth0=tuntap,tap0,,10.0.0.1
不会修改 rootfs.img,新数据写入到 data.cow 文件中。
如果某些镜像启动后不提示登录,而是显示 /dev/pts/x:
screen /dev/pts/x
Ctrl+A+D 可从 screen 脱离。
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
近期评论