再インストールせずに 32bit版 debian を 64bit版 debian へ手動で更新したので,手順をメモします.
手順は大まかに言うと
- カーネルだけ 64bit 化
- 64bit カーネルで再起動.この時点ではプログラム,ライブラリは32bitのまま
- 64bit版の apt-get が出来るchroot環境を用意
- apt-get で プログラム・ライブラリを64bit 版のものに差し替え
という流れになります.
なおこの作業は,手順を間違うと,システムが起動しなくなるなど,非常に罠が多いです.実際に挑戦するときは,最悪再インストールすることも念頭において作業してください.
予備知識
現在のカーネルが32bit版か64bit版かを確認するには "uname" コマンドを使います.
$ uname -m
i686
i686 なら現在のカーネルは32bit版.x86_64なら64bit版です.
Linuxの64bit版カーネルには"32bitエミュレーション*1"という機能があり,カーネルは64bit,バイナリ(コマンドとかライブラリ)は32bitという組み合わせが可能です.
バイナリが32bit版か64bit版かを確認するには "file" コマンドを使います.
$ file /bin/ls /bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
と "32-bit"とか"Intel 80386"があるのが 32bit版.
$ file /bin/ls /bin/ls: ELF 64-bit LSB executable, x86-64, ...
と "64bit"とか "x86-64" と表示されるのが 64bit版です.
カーネルだけ64bit化
まず,カーネル周りだけ64bit化します.
sudo apt-get install amd64-libs linux-image-2.6-amd64
これで再起動します.
再起動後,unameコマンドでカーネルが64bit化されていることを確認.
$ uname -m
x86_64
ただしこの状態では,まだシステムの大部分は 32bit モードで動作しています.たとえば /bin/ls は
$ file /bin/ls /bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
となり"80386"つまり32bitのまま.
そこで,apt-get を使って,32bit版バイナリをどんどん64bit版バイナリに差し替えていきます.
各パッケージを64bit化
まず作業用に pure 64bit なchroot環境を作成します.作業は root で行います.
# mkdir /chroot64 # apt-get install debootstrap # debootstrap --arch amd64 sid /chroot64 http://ftp.debian.org/debian
ディレクトリを bind マウントします
# mkdir -p /chroot64/old # mount -o bind / /chroot64/old # mount -o bind /chroot64/var/cache/apt/archives /var/cache/apt/archives
chrootで pure 64bitな環境に切り替えます
# chroot /chroot64
# apt-get install ia32-libs libc6-i386 openssh-server openssh-client mc
# apt-get dist-upgrade
以上で,切り替え完了です.