Usermode linux原理,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

启动(默认只读):

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值