Gentoo Linux 开发者的用户模式
原文更新:2003年9月30日内容简介:本指南揭示了 Gentoo Linux 开发者如何设置用户模式 linux,来测试有潜在系统破坏的改变。
1. 获得用户模式 用户模式 Linux
正如用户模式 linux 网站 (http://用户模式-linux.sourceforge.net) 所述, 用户模式 linux 允许用户“自包含运行 Linux”。特别的,用户模式 linux 提供了虚拟机,用户可以在上面“运行毛病软件,尝试新的 Linux 内核或发布,在 Linux 内部敲敲打打,全都不会使你的主要 Linux 冒风险。” 对于 Gentoo 核心软件包,比如 sys-apps/baselayout 或是 sys-libs/glibc 的改变有潜在的系统破坏性或是使它无法引导;通过用户模式 linux 我们可以测试这些改变而不用担心破坏现存的系统。
安装用户模式 linux 与一般的内核安装本质上是相同的首先安装内核源码(加入用户模式 linux 恰当补丁),然后以通常的习惯配置用户模式 linux 内核:
代码 1.1 |
# emerge sys-kernel/usermode-sources# cd /usr/src/uml/linux# make menuconfig ARCH=um# make linux ARCH=um# cp linux /usr/local/bin/linux |
警告:ARCH=um 参数是非常重要的! |
重要: 为了使用户模式 linux 内核恰当的引导 Gentoo 系统, 内核不能配置为缺省自动加载 /dev (devfs)。 同样,你也要肯定确保你内核编译中有 tmpfs(虚拟内存文件系统),因为缺省的 Gentoo linux引导脚本在一个小的 tmpfs 分区存储他们的信息。(用户模式linux 的网站上的二进制内核包含自动加载/dev,同时他们编译了 tmpfs;还是不要麻烦他们了。) |
我强烈建议阅读用户模式 linux 文档, but the 不过基本的观点就是运行 /usr/local/bin/linux 程序,引导用户模式内核并且试着带起存储在文件 root_fs 中的系统,位于恰当的工作目录。
安装用户模式 linux 工具也不会有伤害的。
代码 1.2 |
# emerge sys-apps/usermode-utilities |
这些工具会简化用户模式 linux 虚拟系统和宿主系统之间的网络(在各种事情中)。
2. 创建 root_fs
制造 Gentoo chroot
用户模式 linux所需的 root_fs 文件 是一个包含整个 Gentoo Linux 文件系统的单独文件。要生成这个文件,你需要在宿主内核(非用户模式)使用 Loopback 设备支持。
生成 root_fs 文件本身会是我们的最后一步。首先,我们会在一般的 chroot 生成 Gentoo 文件系统。我们需要可用的 stage 压缩包,可以单独下载,从 liveCD 中解出,从 liveCD .iso 文件中解出。
代码 2.1: 加载 liveCD .iso |
# mkdir /mnt/loop# mount -o loop /path/to/build-<TAB>.iso /mnt/loop |
设置 chroot 与一般 Gentoo Linux 的建造基本一致。
代码 2.2 |
# mkdir /mnt/gentoo# cd /mnt/gentoo# tar xvjpf /path/to/build-<TAB>.tar.bz2 |
接着卸载 .iso。你不再需要它了。
代码 2.3 |
# cp /etc/resolv.conf /mnt/gentoo/etc/# mount -o bind /proc /mnt/gentoo/proc# mkdir -p /mnt/gentoo/usr/portage/distfiles# mkdir -p /mnt/gentoo/usr/portage/packages# mount -o bind /usr/portage/distfiles /mnt/gentoo/usr/portage/distfiles# mount -o bind /usr/portage/packages /mnt/gentoo/usr/portage/packages# chroot /mnt/gentoo /bin/bash# emerge sync# env-update# source /etc/profile |
通过绑定加载 /usr/portage/distfiles 和 /usr/portage/packages,我们避免了下载或建造已经在 Gentoo 主机上已经存在的软件包。
以通常习惯 Bootstrap 和建造系统:
代码 2.4 |
# cd /usr/portage# nano -w /etc/make.conf# nano -w /etc/make.profile/packages # nano -w /usr/portage/profiles/package.mask# scripts/bootstrap.sh && emerge --usepkg system |
警告:/etc/make.profile/packages 文件需要编辑以便从缺省系统中除去 virtual/bootloader ebuild (只需从“*virtual/bootloader”行的开头除去“*”)。 virtual/bootloader ebuild 试着加载 /boot 分区,在我们的 chroot 中会失败。 |
注释: 确保你检查 /etc/make.profile/packages 和 /usr/portage/profiles/package.mask 保证任何你要安装的将测试软件包没有隐藏掉。在写作时,scripts/bootstrap.sh 能够从源码编译 bootstrap 包。要使用已经存在的软件包,增加 alias emerge="emerge --usepkg" 到你的 bootstrap 脚本顶上面的什么位置。 |
增加任何你想要得到的软件包。随意给你的虚拟 Gentoo 系统一个主机名,如果你愿意的话。在 /etc/fstab 中,你需要 /dev/ROOT 为 /dev/ubd/0,一种 ext2,ext3,或 reiserfs 文件系统类型。设置 /dev/SWAP 为 /dev/ubd/1,和注释掉的 /dev/BOOT。
在此,记得设置你的 root 密码。
代码 2.5: 设置 root 密码 |
# passwd |
退出 chroot,卸载所有绑定加载, tar 起新的 Gentoo 发布,并清理:
代码 2.6 |
# exit# umount /mnt/gentoo/usr/portage/distfiles# umount /mnt/gentoo/usr/portage/packages# umount /mnt/gentoo/proc# du -ks /mnt/gentoo# cd /mnt/gentoo# tar cvjpf ~/gentoo.tbz2 *# cd# rm -rf /mnt/gentoo |
你也要考虑回顾 Gentoo Linux x86 安装指南的最后步骤。
建造 root_fs
我们的 Gentoo chroot 尺寸大约 300 MB,所以 root_fs 大致需要那个大小。我们会选取 0.5 GB 作为合理的大小。
代码 2.7 |
# 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 的交换空间也不错。
[page_break]代码 2.8 |
# dd if=/dev/zero of=swap_fs seek=500 count=1 bs=1M# mkswap -f swap_fs |
现在看看是否工作!
代码 2.9 |
# linux ubd0=root_fs ubd1=swap_fs |
注释: 用户模式 linux 使用 xterms 作为引导时的虚拟控制台,所以你需要确保你运行用户模式 linux 的终端 $DISPLAY 设置恰当。(需要恰当的 xhost/xauth 权限)。 |
运气好的话你应该能够登录你的用户模式 linux Gentoo 系统。这个用户模式 Gentoo linux 版本和完全功能的差距仅仅是虚拟机器到宿主机器的网络。
3. 网络
感谢 Martin Schlemmer (Azarah),我现在知道了如何在用户模式系统内使用网络。思想是我们建立一个包含用户模式系统和宿主系统的私有网络,然后用户模式系统把所有的通信包都路由到宿主系统,它再将包发送到网上。确保宿主内核有 Networking --> IP: Netfilter Configuration --> IP tables support --> Full NAT --> MASQUERADE target support 和 Network Device Support --> Ethertap network tap 编译为模块;然后