User-Mode Linux(UML)折腾笔记

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
拉取内核代码:
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 脱离。

发表回复

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

扫码去手机上看