使用febootstrap 安装 centos6 的 chroot jails 环境
喜欢乱安装各种开源库,经常把系统搞得不能用。另外最近工作中申请到一台较高配置的服务器,与兄弟们多人共享,需要找一个防止互相影响的方法。
基本想法有两种:
1.安装虚拟机
2.使用chroot jail
基于码农的劣根性,对于虚拟机带来的性能损失彻底抵制,加上从来没有玩过jail系统,决定丢弃vm,试试jail
母系统centos 6 ,jail系统 centos 6
1. 安装febootstrap: sudo yum install -y febootstrap
2. 指定rootfs的路径:export ROOTFS=/disk9/centos6_rootfs
3. 使用febootstrap安装jail系统:febootstrap centos6 $ROOTFS
4.创建tmp目录
mkdir $ROOTFS/tmp
chmod 777 $ROOTFS/tmp
5.登陆脚本:login_rootfs.sh
************************************
$ cat login_rootfs.sh
#!/bin/bash
usage(){
echo `basename $0 []`
}
mount_chrootfs_proc(){
mountpoint $ROOTFS/proc >/dev/null 2>&1
if [ $? -ne 0 ]
then
echo "mounting /proc for chrootfs"
sudo mount -o bind /proc $ROOTFS/proc
fi
}
user="developer"
if [ $# -ge 1 ]
then
user=$1
fi
mount_chrootfs_proc
sudo chroot --userspec=$user $ROOTFS /bin/bash --login
************************************
$chmod a+x login_rootfs.sh
6. cp /etc/resolv.conf $ROOTFS/etc/ (否则dns不通)
cp -R /usr/lib/locale/* $ROOTFS/usr/lib/locale/
使用locale命令验证
./login_rootfs.sh root
locale
exit
7.添加用户
./login_rootfs.sh root
useradd developerls
exit
#为developer用户添加sudo权限
#vi $ROOTFS/etc/sudoers
8. 生成设备文件
rm -rf $ROOTFS/dev/urandom
sudo mknod $ROOTFS/dev/urandom c 1 9
sudo chown :users $ROOTFS/dev/urandom 注意:将替换为当前木系统用户名
(解决yum不能用问题)
rm -rf $ROOTFS/dev/random
sudo mknod $ROOTFS/dev/random c 1 8
sudo chown :users $ROOTFS/dev/random
chmod 666 $ROOTFS/dev/random
rm -rf $ROOTFS/dev/null
sudo mknod $ROOTFS/dev/null c 1 3
sudo chown :users $ROOTFS/dev/null
chmod 666 $ROOTFS/dev/null
./login_rootfs.sh root(上面的三个应该也可以登录后创建吧)
rm -rf ptmx
mknod ptmx c 5 2
rm -rf console
mknod console c 5 1
chmod 600 console
chmod 600 ptmx
rm -rf tty
mknod tty c 5 0
rm -rf zero
mknod zero c 1 5
rm -rf full
mknod full c 1 7
chmod 666 zero full tty
9.使用yum 安装所需工具
./login_rootfs.sh root
yum install -y autoconf automake gcc gcc-c++ tar git
...
exit
10. 使用developer登录并工作
./login_rootfs.sh
11.待解决的问题
1)因为 chroot jail环境不是通过login 方式进来的,所以环境变量HOME的值为/root ,这个导致以其他用户进来时用户目录全部不对。
2)who am i命令不可用,这个问题的原因和上面的一样,都是没有调用login,没有声称/var/log/utmp 和 wtmp
看来不经过login的过程还存在很多问题的
临时解决办法,在/etc/profile.d/目录下添加一个文件,文件名随便起,但后缀必须是.sh,我的是my_walk_around_env.sh
$cat /etc/profile.d/my_walk_around_env.sh
if [ "x$USER" != "xroot" ]
then
export HOME=/home/$USER
cd ~
fi
3)bash历史命令出不来,这个很egg pain,找个时间解决下
哪位如果知道怎样做更加优雅,请不吝指教,谢谢!