LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1179|回复: 2

平行世界——并行运行多套系统、并行编译、并行X-window

[复制链接]
发表于 2008-5-26 02:24:09 | 显示全部楼层 |阅读模式
我们总有各种各样的理由,在单机环境安装多套 GNU/Linux 系统。

  • 我想要尝试各种 GNU/Linux 发行版,如 LFS、gentoo、debian……。
  • 我想要运行同一个 GNU/Linux 发行版的多个拷贝,如debian sid、lenny、etch。
  • 我想要高安全性、易用性共存,需要一个小巧的根文件系统只读的主系统,用于监控、备份、救援、管理,一个桌面系统,用于开发、办公、娱乐,一个服务器系统,用于sshd、httpd、ftpd。
  • 我有高配置的机器,想要高性能、高兼容性共存,想要运行多个平台架构兼容的 GNU/Linux 系统,如x86_64硬件环境下x86_64、i686两种架构的系统。
  • 我想通过并行运行的X-window登录不同的系统
为什么还要不停的重启机器切换系统?
为什么还要使用性能受限的虚拟机?
为什么不更近一步发掘系统潜力,让多套系统并行运行?有如神奇的平行世界。

〇、主系统、附属系统、内核、根文件系统
主系统是第一个启动的 GNU/Linux 系统。
附属系统 主系统 启动后,同时运行的 GNU/Linux 系统。
主系统 内核、根文件系统 组成。
附属系统可仅包括根文件系统,不需要内核。

多个同时运行的 GNU/Linux 系统,共享主系统的内核及内核模块,主系统内核同时对多个系统提供支持。
如 x86_64 硬件环境,应优选 x86_64 系统作主系统,并使用打开 32bit 兼容支持 x86_64 内核,
Executable file formats / Emulations ---> IA32 Emulation。

不建议使用主系统之外系统提供的内核模块,应根据需要统一编译主系统内核。
强调安全性的话,应使用禁用内核模块的内核。

主系统、附属系统可采用任意常规方法安装。
附属系统安装过程中可以不安装内核。

一、同时运行相同平台架构的多个 GNU/Linux 系统
下面的chroot.sh脚本可用来临时运行另一个 GNU/Linux 系统,可置于/sbin
  1. #!/bin/sh
  2. CHROOT_DIR="$1"
  3. shift
  4. CHROOT_ARG="$@"
  5. [ "${CHROOT_DIR}" = "" ] && echo "chroot dir is null!" && exit 1
  6. [ ! -d ${CHROOT_DIR} ] && echo "chroot dir ${CHROOT_DIR} isn't exist!" && exit 1
  7. BIND_DIR="proc sys dev dev/shm dev/pts"
  8. REVERSE_DIR=
  9. cd ${CHROOT_DIR}
  10. for x in ${BIND_DIR}; do
  11.   [ -d $x ] && mount --bind /$x $x && REVERSE_DIR="$x ${REVERSE_DIR}"
  12. done
  13. /sbin/[color=red]chroot[/color] . ${CHROOT_ARG}
  14. for x in ${REVERSE_DIR}; do
  15.   umount $x
  16. done
复制代码
另一个 GNU/Linux 系统的根文件系统位于/rootfs。
以root帐号登录,运行
  1. /sbin/chroot.sh /rootfs
复制代码
即可取得另一个 GNU/Linux 系统的 root shell。

二、同时运行兼容平台架构的多个 GNU/Linux 系统
x86_64 GNU/Linux 系统为主系统;
i686 GNU/Linux 系统为附属系统,根文件系统位于/rootfs;

以root帐号登录,运行
  1. /usr/bin/[color=red]linux32[/color] /sbin/chroot.sh /rootfs
复制代码
即可取得 i686 GNU/Linux 系统的 root shell。

linux32由setarch提供。

三、设置多个 GNU/Linux 系统跟随主系统自动启动、退出
另一个 GNU/Linux 系统的根文件系统位于/rootfs;

我们准备用虚拟控制台tty6登录这个 GNU/Linux 系统。

修改主系统下/etc/inittab,由
  1. 6:2345:respawn:/sbin/agetty -I '\033(K' tty6 38400
复制代码
如果是上面情况一修改为
  1. 6:2345:respawn:/sbin/chroot /rootfs /sbin/agetty -I '\033(K' tty6 38400
复制代码
如果是上面情况二修改为
  1. 6:2345:respawn:/usr/bin/linux32 /sbin/chroot /rootfs /sbin/agetty -I '\033(K' tty6 38400
复制代码

添加下面到启动脚本,如/etc/init.d/rc.local
  1. mount --bind /proc /rootfs/proc
  2. mount --bind /sys /rootfs/sys
  3. mount --bind /dev /rootfs/dev
  4. mount --bind /dev/shm /rootfs/dev/shm
  5. mount --bind /dev/pts /rootfs/dev/pts
复制代码

重启后即可通过tty6登录另一个 GNU/Linux 系统。



四、并行编译
以上面情况二为例说明:
主系统 x86_64,有构建CLFS-Sysroot x86的脚本/i686-pc-linux-gnu/new_os.sh,直接登录主系统,执行 /i686-pc-linux-gnu/new_os.sh;
附属系统 i686,有构建CLFS-Sysroot x86_64-pure64的脚本/x86_64-unknown-linux-gnu/new_os.sh,使用二或三给出的方法得到shell,执行/x86_64-unknown-linux-gnu/new_os.sh。

上面构建交叉编译工具链、构建交叉编译 temp system 的过程比一个一个单独执行大幅缩短。

在我自己的双核x86_64、单条内存、单块硬盘机器上,同时构建两个系统仅比单独构建一个系统多出若干分钟。

多用的时间主要浪费在硬盘读写过程,同时构建两个系统时cpu利用率大部分时间稳定在85%以上,峰值接近100%,解包时最低为30%左右。

如果再使用 make -j N 进一步提高 cpu 利用率也是可能的,只是天热,我不忍心再进一步虐待机器。

构建系统的方法请参考 Sysroot 方式从源码构建完全本地编译的 GNU/Linux 系统

五、并行X
关键是关闭X-window默认的tcp监听,这样才能同时运行多个X,建立如下~/.xserverrc 或 /etc/X11/xinit/xserverrc
  1. exec X -nolisten tcp
复制代码

目前,我暂时使用startx来启动不常用的系统。
常用系统使用gdm管理。

六、多个 GNU/Linux 系统共享设置
/etc/resolv.conf
/etc/mtab
(待续)
 楼主| 发表于 2008-5-26 03:56:50 | 显示全部楼层
保留,添加资源

构建系统的方法 [color="Blue"]Sysroot 方式从源码构建完全本地编译的 GUN/Linux 系统

发行版最小系统安装方法搜集
gentoo
debian
arch
回复 支持 反对

使用道具 举报

发表于 2008-5-26 07:27:13 | 显示全部楼层
继续关注中......
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表