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 脱离。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

扫码去手机上看