正如用户模式 linux 网站
(
安装用户模式 linux 与一般的内核安装本质上是相同的 首先安装内核源码(加入用户模式 linux 恰当补丁), 然后以通常的习惯配置用户模式 linux 内核:
# emerge sys-kernel/usermode-sources # cd /usr/src/uml/linux # make menuconfigARCH=um # make linuxARCH=um # cp linux /usr/local/bin/linux
确保
# nano -w /etc/env.d/00basic # env-update # source /etc/profile
我强烈建议阅读用户模式 linux 文档, but the
不过基本的观点就是运行
安装用户模式 linux 工具也不会有伤害的。
# emerge sys-apps/usermode-utilities
这些工具会简化用户模式 linux 虚拟系统和宿主系统 之间的网络(在各种事情中)。
用户模式 linux所需的
生成
# mkdir /mnt/loop # mount -o loop /path/to/build-<TAB>.iso /mnt/loop
设置 chroot 与一般 Gentoo Linux 的建造基本一致。
# mkdir /mnt/gentoo # cd /mnt/gentoo # tar xvjpf /path/to/build-<TAB>.tar.bz2
接着卸载 .iso。你不再需要它了。
Bootstrap 并且建造系统。跟随安装指导就好了:)
增加任何你想要得到的软件包。随意给你的虚拟
Gentoo 系统一个主机名,如果你愿意的话。在
在此,记得设置你的 root 密码。
# passwd
退出 chroot,卸载所有绑定加载, tar 起新的 Gentoo 发布,并清理。
# cd /mnt/gentoo # tar cvjpf ~/gentoo.tbz2 * # cd # rm -rf /mnt/gentoo
我们的 Gentoo chroot 尺寸大约 300 MB,
所以
# dd if=/dev/zero of=root_fs seek=500 count=1 bs=1M # mke2fs -F root_fs # mount -o loop root_fs /mnt/loop # tar xvjpf gentoo.tbz2 -C /mnt/loop # umount /mnt/loop
有0.5 GB 的交换空间也不错。
# dd if=/dev/zero of=swap_fs seek=500 count=1 bs=1M # mkswap -f swap_fs
现在看看是否工作!
# linux ubd0=root_fs ubd1=swap_fs
运气好的话你应该能够登录你的用户模式 linux Gentoo 系统。 这个用户模式 Gentoo linux 版本和完全功能的差距仅仅是虚拟机器到宿主机器的网络。
感谢 Martin Schlemmer (Azarah),我现在知道了
如何在用户模式系统内使用网络。
思想是我们建立一个包含用户模式系统和宿主系统的私有网络,
然后用户模式系统把所有的通信包都路由到宿主系统,
它再将包发送到网上。
确保宿主内核有
Networking --> IP: Netfilter Configuration --> IP tables support
--> Full NAT --> MASQUERADE target support 和
Network Device Support --> Ethertap network tap
编译为模块;然后在
# modprobe tun # modprobe iptable_nat # iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # echo 1 > /proc/sys/net/ipv4/ip_forward
iptables 那行在我们用户模式系统和互联网之间设置 IP 伪装
(在我们这里通过
现在开动用户模式系统,来看看网络是否已经起作用了。
# linux ubd0=root_fs ubd1=swap_fs eth0=ethertap,tap0,,192.168.0.254(登录到用户模式系统) # ifconfig eth0 192.168.0.1 up # ping -c 2 192.168.0.254 PING 192.168.0.254 (192.168.0.254): 56 octets data 64 octets from 192.168.0.254: icmp_seq=0 ttl=255 time=0.8 ms 64 octets from 192.168.0.254: icmp_seq=1 ttl=255 time=0.6 ms --- 192.168.0.254 ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 0.6/0.7/0.8 ms route add default gw 192.168.0.254 netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.0.0 0.0.0.0 255.255.255.0 U 40 0 0 eth0 0.0.0.0 192.168.0.254 0.0.0.0 UG 40 0 0 eth0 scp user@192.168.0.254:/etc/resolv.conf /etc/resolv.conf(如果需要) ping -c 2 www.gentoo.org PING www.gentoo.org (207.170.82.202): 56 octets data 64 octets from 207.170.82.202: icmp_seq=0 ttl=240 time=119.6 ms 64 octets from 207.170.82.202: icmp_seq=1 ttl=240 time=92.0 ms --- www.gentoo.org ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 92.0/105.8/119.6 ms
在用户模式系统中,我们把私有 IP 地址192.168.0.1分配给用户模式的 eth0 界面,
并启动界面。宿主主机的私有 IP 是192.168.0.254,我们 ping 它,以确定我们的网络确实已经起来了。
route 那行增加一个缺省网关,即我们的宿主主机。
我们用 scp 拿回一个可以工作的
也许 Gentoo Linux 测试的真实意图是P 从用户模式 linux 引导 .iso, 并且在用户模式 linux 虚拟系统完全安装 Gentoo。
引导 .iso或者从.iso 取得 initrd,巧妙直接。
# mount -o loop /path/to/build-<TAB>.iso /mnt/loop # cp /mnt/loop/isolinux/rescue.gz . # linux load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=22000 \ > initrd=rescue.gz root=/dev/ram0 ubd0=root_fs ubd1=swap_fs \ > ubd2=/dev/cdroms/cdrom0 eth0=ethertap,tap0,,192.168.0.254
现在你基本上可以按部就班的遵从 Gentoo 安装文档,
即使你需要知道根文件系统是