64-bit Linux 下裝 32-bit 環境
換了電腦近半年,要用的東西都裝得七七八八。卻有一些軟件根本沒有 64-bit 版本,例如 Java-plugin、flash player 和 OpenOffice.org。有關公司或團體好像也無意推出 64-bit 版本
終於把心一橫,下定決心,根據 “The Debian GNU/Linux AMD64 HOW-TO”,裝了 32-bit 系統。並使用 chroot 環境把 32-bit 和 64-bit 軟件分開
首先,揀定一個目錄,作為 32-bit 系統的根目錄。
fat-penguin:~# mkdir -p /opt/chroot/sid-i386
使用 debootstrap,安裝基本要用的軟件。可惜 debootstrap 不懂認 stable,testing 和 unstable 等代號。不過問題不大,反正 sid 是永遠的 unstable…
fat-penguin:~# debootstrap –arch i386 sid /opt/chroot/sid-i386/ ftp://ftp.hk.debian.org/debian
安裝完了一堆東西,可以進入 chroot 環境玩玩(絕對懷疑此步驟有無必要。不過,自己有這樣做,唯有照錄)
fat-penguin:~# chroot /opt/chroot/sid-i386/
fat-penguin:/# apt-get install libx11-6
離開 chroot 環境,修改 /etc/ld.so.conf,以加上 32-bit 函式庫
/usr/X11R6/lib
/usr/lib/atlas
# chroot i386 system libs
/opt/chroot/sid-i386/lib
/opt/chroot/sid-i386/usr/lib
/opt/chroot/sid-i386/usr/X11R6/lib
/opt/chroot/sid-i386/usr/local/lib
之後把 32-bit 的 loader(ld-linux.so.2) link 好,並執行 ldconfig 讓系統可以用到 32-bit 的函式庫。
fat-penguin:~# ln -sf /opt/choot/sid-i386/lib/ld-linux.so.2 /lib/ld-linux.so.2
fat-penguin:/lib# ldconfig
如果裝了 ia32-libs,本身已有一個 symoblic link。不過,既然安裝完整的 32-bit 環境,還要 ia32-libs 作甚?乾脆一併鏟掉!
再修改真正的 /etc/fstab,讓 chroot 環境下可用到真正的檔案。這裡會用 mount 的 –bind 參數,讓一個子目錄甚致檔案在另一個地方出現,做出類似跨檔案系統的 hardlink 效果
/home /opt/chroot/sid-i386/home none bind 0 0
/tmp /opt/chroot/sid-i386/tmp none bind 0 0
proc /opt/chroot/sid-i386/proc proc defaults 0 0
/etc/passwd /opt/chroot/sid-i386/etc/passwd none bind 0 0
/etc/shadow /opt/chroot/sid-i386/etc/shadow none bind 0 0
/etc/group /opt/chroot/sid-i386/etc/group none bind 0 0
/usr/share/fonts /opt/chroot/sid-i386/usr/share/fonts none bind 0 0
mount 進有關目錄和檔案
fat-penguin:/opt/chroot/sid-i386/etc# mv passwd i386passwd #其實刪去也沒所謂
fat-penguin:/opt/chroot/sid-i386/etc# mv shadow i386shadow
fat-penguin:/opt/chroot/sid-i386/etc# mv group i386group
fat-penguin:/opt/chroot/sid-i386/etc# touch passwd
fat-penguin:/opt/chroot/sid-i386/etc# touch shadow
fat-penguin:/opt/chroot/sid-i386/etc# touch group
fat-penguin:/opt/chroot/sid-i386/etc# mount /opt/chroot/sid-i386/home/
fat-penguin:/opt/chroot/sid-i386/etc# mount /opt/chroot/sid-i386/tmp/
fat-penguin:/opt/chroot/sid-i386/etc# mount /opt/chroot/sid-i386/proc/
fat-penguin:/opt/chroot/sid-i386/etc# mount /opt/chroot/sid-i386/etc/passwd
fat-penguin:/opt/chroot/sid-i386/etc# mount /opt/chroot/sid-i386/etc/shadow
fat-penguin:/opt/chroot/sid-i386/etc# mount /opt/chroot/sid-i386/etc/group
這時,root 用戶已可以 chroot 到 /opt/chroot/sid-i386 目錄下執行 32-bit 程式。不過,普通用戶不能 chroot…你說怎麼辦?怎麼辦?怎麼辦?
這問題早有人問過,並有了答案︰dchroot。安裝後,修改 /etc/schroot/schroot.conf
[sid]
description=Debian sid (unstable)
location=/opt/chroot/sid-i386
priority=3
users=fatpenguin
root-groups=root
aliases=unstable,default
重點是要把可以用這個 chroot 的用戶加到 users 中。之後便可用 dchroot -c sid -d
這個做法不怎麼方便。可在 /usr/local/bin(或 /opt/bin)建立一些 script 簡化︰
fat-penguin:/usr/local/bin# cat do_dchroot
#!/bin/shARGS=”"for i in “$@” ;
do
ARGS=”$ARGS '$i'”
doneexec dchroot -c sid -d -q “`basename $0`” “$ARGS”
fat-penguin:/usr/local/bin# ln -s do_dchroot openoffice
fat-penguin:/usr/local/bin# ln -s do_dchroot oowriter
fat-penguin:/usr/local/bin# ln -s do_dchroot oocalc
只需執行 /usr/local/bin/openoffice 便行了
(本來想在 symbolic link 加上 32,但要在 do_dchroot 中刪去…老了…shell script 怎樣寫?!)
要注意,jdk5 已經在 sid 出現,但是在 non-free distribution 裡(幸好我試 sid…)
參考資料︰
(0)