Linux下面总有那么些闭源程序。但是也非常好用,μtorrent就是其中一个。但是Debian 5 lenny的Glibc库是2.7的。μtorrent硬编码来必须使用Glibc 2.11系列才行。现在的主流发行版 包括Debian6和Ubuntu,都是Glibc 2.11系列的。
但是服务器什么的 不是想重装就重装的。VPS不可能也没必要跑虚拟机,没办法咱们用Chroot在Debian 5 lenny中chroot Port 安装Debian 6 squeeze.
本文参考了 http://www.debian.org/releases/stable/i386/apds03.html.en
文件系统准备略,我们这使用网络安装,使用加拿大镜像http://ftp.ca.debian.org/debian/
[bash]apt-get install debootstrap -y
mkdir /debian6
debootstrap --arch i386 squeeze /debian6 http://ftp.ca.debian.org/debian/[/bash]
等待提示Base system installed successfully.基本系统就安装完毕了
现在 chroot into it。
[bash]LANG=C chroot /debian6 /bin/bash
#让Debian6能跑起来
mount -t proc proc /proc
mount -t devpts devpts /dev/pts
mount -t sysfs sysfs /sys
#更换一下源,然后想装什么装这么
[/bash]
由于udev的使用,dev目录下的东西现在是自动生成的 如果你想在这个chroot环境里面直接操控宿主机的硬件 可以使用mount --bind或者mount -o bind来做(在宿主机运行命令)
[bash]mount -o bind /dev /debian6/dev[/bash]
如果你想把宿主机的proc和sys目录也这样绑定过来 当然也可以
再开一个终端,拷贝宿主机的DNS设定到这里来
[bash]cp /etc/resolv.conf /debian6/etc/
cp /etc/locale.gen /debian6/etc/
#后面自己别忘记了运行下locale-gen
[/bash]
为了和宿主机的命令行终端看起来不一样,防止搞混淆,编辑.bashrc,在PS1=那一行前面加上
debian_chroot=debian_chroot
写fstab
[text]# UNCONFIGURED FSTAB FOR BASE SYSTEM
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
devpts /dev/pts devpts rw 0 0[/text]
基本上到这里就可以用了 你可以像使用一个Debian 6一样使用他,只要你chroot进这个环境,你就拥有了全套Debian6下面的C库什么的。所有μtorrent在这个环境下也能顺利运行。
升级宿主机的C库是有风险的,我们通过chroot port来规避了这样的风险,在不重装系统的前提下“移植”整套Debian6的东西到Debian5里面来了。这个方法同样也适用于CentOS(CentOS的套件只能用老掉牙来形容。)。
现在我用着的一个VPS就是基于OpenVZ虚拟化的,所以这个Debian6拥有EL的内核,Debian 5的宿主。感觉像俄罗斯套娃。
可能遇到的问题
在chroot环境下非root用户执行screen提示Cannot open your terminal '/dev/pts/0' - please check.
这是因为/dev/pts/0已经在宿主机的root用户上打开了。解决办法就是用script在wrap一层就可以了
比如
[bash]sudo -Hu nobody script /dev/null
screen[/bash]
或者直接[bash]sudo -Hu nobody script /dev/null -c screen[/bash]
不懂的路过
test