LinuxSir.cn,穿越时空的Linuxsir!

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

gentoo系统能在debian系统下以chroot方式运行吗

[复制链接]
发表于 2009-12-21 22:16:54 | 显示全部楼层 |阅读模式
我现在的机器里装了Debian/testing和Gentoo。

Debian的fstab:

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
/dev/sda3       /               ext3    errors=remount-ro 0       1
/dev/sda1       /boot           ext3    defaults        0       2
/dev/sda11      /home           ext3    defaults        0       2
/dev/sda7       /opt            ext3    defaults        0       2
/dev/sda8       /tmp            ext3    defaults        0       2
/dev/sda5       /usr            ext3    defaults        0       2
/dev/sda6       /var            ext3    defaults        0       2
/dev/sda2       none            swap    sw              0       0
/dev/hda        /media/cdrom0   udf,iso9660 user,noauto     0       0
/dev/sda10        /mnt/gentoo        ext3        defaults        0        2

Gentoo的fstab:

/dev/sda10                /                ext3                errors=remount-ro        0 1
/dev/sda9                /boot                ext2                defaults,noatime        1 2
/dev/sda2                none                swap                sw                0 0
/dev/cdrom                /mnt/cdrom        udf,iso9660        noauto,user        0 0
/dev/sda11                /home                ext3                defaults        0 2

我现在打算这样做:
Gentoo的根目录挂载到debian的/mnt/gentoo
Gentoo的/boot和/home分区不挂载。
启动Debian后以chroot方式进到/mnt/gentoo:
mount -t proc none /mnt/gentoo/proc
mount -o bind /dev /mnt/gentoo/dev
chroot /mnt/gentoo /bin/bash

然后在chroot的环境下进行一些源码的编译等命令行工作,Debian里处理其它事务。
但是我知道chroot不可能提供一个完整的系统环境。
比如两个系统都访问相同的/proc、/dev文件系统(/dev下的设备文件在两个系统下的设置有些差异)。
再比如Gentoo环境下的/lib/modules目录下的内核模块可能会被装载到Gentoo内核空间。再比如Gentoo环境下/etc/init.d/目录下的服务都没有启动也不应该启动,但有可能有些Gentoo程序需要这些服务却又无法访问Debian系统的服务(socket/lock/pipe/pid等类型文件都不在chroot环境下)。

对于/proc和/dev我了解不多,不知道该怎么做。
/mnt/gentoo/lib/modules我打算备份后链接到/lib/modules不知道是否可行。
/mnt/gentoo/etc/init.d目录我想备份后清空,宁愿程序报错也不愿意某些程序自动启动这些服务。
因为我在Gentoo下只用root操作并且不启动系统服务daemon,所以用户和组的设置冲突影响应该不大。

暂时想到的问题和解决方法就只有这些,请各位看看这样能否满足我的编译环境的需求,以及还有哪些风险我没注意到。
发表于 2009-12-21 22:34:20 | 显示全部楼层
能否说一下这样做的目的是什么?debian目前负责什么工作,gentoo又准备拿来做什么?proc和dev两边看到都是一样的,dev的内容由debian下面的udev负责维护。至于内核modules完全不用担心,如果由核心发起的modprobe由debian负责接收,gentoo里面用户发起的modprobe装载chroot以后的内容,只要拷贝或者bind一份debian下面和当前内核版本一样的modules就可以了。两边的服务根据情况酌情处理,不需要unix socket通讯的单纯网络服务原则上可以并存,前提是双方listen端口没冲突。
回复 支持 反对

使用道具 举报

发表于 2009-12-21 22:36:10 | 显示全部楼层
Post by zeyata;2057942
然后在chroot的环境下进行一些源码的编译等命令行工作,Debian里处理其它事务。
但是我知道chroot不可能提供一个完整的系统环境。


当然不完整了,又不是虚拟化。

Post by zeyata;2057942
比如两个系统都访问相同的/proc、/dev文件系统(/dev下的设备文件在两个系统下的设置有些差异)。


/dev的布局由内核与udev的版本有关,/proc由内核决定。这两个一般不会有问题的。

Post by zeyata;2057942
再比如Gentoo环境下的/lib/modules目录下的内核模块可能会被装载到Gentoo内核空间。


Gentoo下编译的内核所使用的内核模块,固然是不可能被Debian下的内核使用的。一个系统里只能运行一个内核(虚拟化除外),这句话想表达什么?

Post by zeyata;2057942
再比如Gentoo环境下/etc/init.d/目录下的服务都没有启动也不应该启动,但有可能有些Gentoo程序需要这些服务却又无法访问Debian系统的服务(socket/lock/pipe/pid等类型文件都不在chroot环境下)。


可以把/var/run绑定过去,注意两个系统里用户和组的ID要保持一致。

Post by zeyata;2057942
/mnt/gentoo/etc/init.d目录我想备份后清空,宁愿程序报错也不愿意某些程序自动启动这些服务。
因为我在Gentoo下只用root操作并且不启动系统服务daemon,所以用户和组的设置冲突影响应该不大。


只要不启动udev这样在Debian里已经启动的服务,理论上是没问题的。

但是,在一个chroot下的Gentoo里启动某个服务会导致其依赖的其它一连串服务启动,其中就包括一些初始化系统的操作(如udev),这个很恶心的。所以不要轻易尝试。

当然,两个系统里对于两者及其ID的映射可能不尽相同,手动调整一致就好了。
回复 支持 反对

使用道具 举报

发表于 2009-12-21 22:48:01 | 显示全部楼层
google "gentoo prefix"
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-21 23:18:26 | 显示全部楼层
Post by lifc;2057948
能否说一下这样做的目的是什么?debian目前负责什么工作,gentoo又准备拿来做什么?proc和dev两边看到都是一样的,dev的内容由debian下面的udev负责维护。至于内核modules完全不用担心,如果由核心发起的modprobe由debian负责接收,gentoo里面用户发起的modprobe装载chroot以后的内容,只要拷贝或者bind一份debian下面和当前内核版本一样的modules就可以了。两边的服务根据情况酌情处理,不需要unix socket通讯的单纯网络服务原则上可以并存,前提是双方listen端口没冲突。


我现在装的Gentoo还不是一个完整的系统,但我目前有很多事需要用到桌面。所以想通过这个方法来一边干活一边安装gentoo系统的其它组件,没其它特殊原因。gentoo打算装成一个纯命令行的环境,用来学习和参考。

----------
Post by zeyata;2057942

再比如Gentoo环境下的/lib/modules目录下的内核模块可能会被装载到Gentoo内核空间。

这句话打错了,应该是:
再比如Gentoo环境下的/lib/modules目录下的内核模块可能会被装载到Debian内核空间。
----------
Post by coderoar;2057949

可以把/var/run绑定过去,注意两个系统里用户和组的ID要保持一致。

/var/run能解决问题吗,Gentoo和Debian系统服务好像有很多小差异。同样的服务可能是有不同的程序提供的,这样的话Gentoo里的client根据Gentoo的设置还是找不到Debian里对应的服务。
Post by coderoar;2057949

但是,在一个chroot下的Gentoo里启动某个服务会导致其依赖的其它一连串服务启动,其中就包括一些初始化系统的操作(如udev),这个很恶心的。所以不要轻易尝试。

看来我还是小心为上。

多谢两位。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-21 23:20:38 | 显示全部楼层
Post by zhllg;2057962
google "gentoo prefix"

这个方法好,正在看,多谢。
回复 支持 反对

使用道具 举报

发表于 2009-12-21 23:26:53 | 显示全部楼层
Post by zeyata;2057985

[QUOTE=coderoar;2057949]可以把/var/run绑定过去,注意两个系统里用户和组的ID要保持一致。

/var/run能解决问题吗,Gentoo和Debian系统服务好像有很多小差异。同样的服务可能是有不同的程序提供的,这样的话Gentoo里的client根据Gentoo的设置还是找不到Debian里对应的服务。[/QUOTE]

所以说配置嘛,先一致化用户和组,再微调路径。反正都是同样的程序,只不过默认配置可能有一定差异而已。其实不同发行版在表面上的差距没有想象的那么大。
---
引用的格式好乱,名字也错了。
回复 支持 反对

使用道具 举报

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

本版积分规则

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