Vine 4.1 を最小構成で install し、コンパクトな Vine の環境を構築。 但し、package の download が出来ないと困るので lftp、wget の2つは 追加で導入しておく。
現状、Vine 4.1 と VineSeed x86 では toolchain が変わっているため、 apt-get dist-upgrade が必須。 apt-get upgrade では、ライブラリの互換が取れず立ち上がらない。 (浮動小数点なんちゃらの連発で逝ってしまう)
VineSeed 環境に移行後、reboot する。 再度、apt-get update, apt-get upgrade をして更新漏れの確認。
適当な mirror から、VineSeed/x86_64/RPMS.main の package を すべて download する。 また、VineSeed/x86_64/pool から compat32-* package をすべて download する。
とりあえず、devel package は不要なので、
mkdir devel mv *-devel*rpm devel
とかして目障りにならないところに移動しておく。
Vine 4.1CR をベースにした場合では Wnn 関係が入っているので停止。 package も削除する。 network 関係(iptables, ppp, rp-pppoe, postfix など)も当面不要なので ネットワーク接続を維持できる最小環境を残し、停止、package 削除する。
ここで可能な限り package を絞らないとあとで苦労が増える。
/etc/ld.so.conf に /lib64と /usr/lib64 を加える。
/sbin/mkinitrd を書き換えて、cp が使われるようにする。 (あとで strip コマンドが死ぬため)
# if [ -x /usr/bin/strip ]; then # /usr/bin/strip -g $verbose /lib/modules/$kernel/$MODULE -o $MNTIMAGE/lib/$(basename $MODULE) # else cp $verbose -a /lib/modules/$kernel/$MODULE $MNTIMAGE/lib # fi
vi などのエディタが使えなくなると困るのでこの段階で更新してしまう。
glibc の更新をする。
現状のパッケージで、依存関係を満たすのは以下の通り。
rpm -Uvh --force --ignorearch glibc-2.5-12vl3.x86_64.rpm \ glibc-common-2.5-12vl3.x86_64.rpm \ glibc-headers-2.5-12vl3.x86_64.rpm \ glibc-kernheaders-2.6.12.1-0vl2.x86_64.rpm \ compat32-glibc-2.5-12vl3.i686.rpm \ zlib-1.2.3-0vl5.x86_64.rpm \ compat32-zlib-1.2.3-0vl5.i686.rpm \ bzip2-1.0.3-0vl2.x86_64.rpm \ compat32-bzip2-1.0.3-0vl2.i686.rpm \ tzdata-2007d-1vl1.noarch.rpm
(細かい package のバージョンは更新によって日々変わる)
上記の内容を file に落とし bash に食わせて実行する。 (あとでもう1度実行するため) 「package 内部 script の実行が出来ない」というエラーが出るが無視する。
rpm -Uvh --force kernel-2.6.16-0vl85.x86_64.rpm
で突っ込む。
/boot に kernel が入っているか、initrd image が出来ているかを確認する。
grub の対話モード(コマンドラインモード)で x86_64 kernel で boot する。 boot してきたら uname -a をして x86_64 になっていることを確認する。
手順6の手順をもう1度実行する。 今度はスクリプトのエラーも出ない。
rpm を更新する。 現状のパッケージで、依存関係を満たすのは以下の通り。
rpm -Uvh --force --ignorearch rpm-4.4.2.1-0vl2.x86_64.rpm \ rpm-libs-4.4.2.1-0vl2.x86_64.rpm \ beecrypt-4.1.2-9vl4.x86_64.rpm \ elfutils-libelf-0.126-0vl1.x86_64.rpm \ libexpat-1.95.8-0vl6.x86_64.rpm \ compat32-libexpat-1.95.8-0vl6.i686.rpm \ neon-0.26.3-0vl1.x86_64.rpm \ popt-1.10.2.1-0vl2.x86_64.rpm \ sqlite3-3.4.2-0vl1.x86_64.rpm \ openssl-0.9.8e-0vl2.x86_64.rpm \ compat32-openssl-0.9.8e-0vl2.i686.rpm \ libgcc-4.1.2-0vl12.x86_64.rpm \ libstdc++34-4.1.2-0vl12.x86_64.rpm \ ncurses-5.4-0vl3.x86_64.rpm \ compat32-ncurses-5.4-0vl3.i686.rpm \ readline-5.1-0vl1.x86_64.rpm \ compat32-readline-5.1-0vl1.i686.rpm
apt を更新する。 現状のパッケージで、依存関係を満たすのは以下の通り。
rpm -Uvh --force apt-0.5.15lorg3.2-0vl13.x86_64.rpm \ libxml2-2.6.27-0vl1.x86_64.rpm \ compat32-libxml2-2.6.27-0vl1.i686.rpm
/etc/rpm/platform を確認する。
athlon-redhat-linux などになっていたら x86_64-redhat-linux に修正する。
install 済みの i386 package を x86_64 package で置き換える。
rpm -qa --qf "%{ARCH}-%{OS} %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" | grep i386
などとすれば install 済みの i386 package の一覧を表示してくれる。
hoge という package を更新する場合は、
という手順を行う。
これを、i386 package が無くなるまで行う。
library の更新時に、まだ入れ替えていない i386 package への依存が出る場合、
i386 package が無くなったら、apt-get check して依存関係に矛盾が無いことを 確認する。 reboot して正常に起動することを確認する。
手順4で package 数がきっちり絞ってあれば、package 数 100個弱、 所要時間3時間程度。
この作業は支援スクリプトが欲しい。apt の偉大さを再認識する3時間。
compat32 がある下位のライブラリから更新していくと楽。 ライブラリの入れ替えが終わればあとは単純作業になるハズ。
この時点で、apt の機能が使えるようになっているハズ。 追加で必要となる package を随時 apt で導入していく。
必要な package は随時入れること。
gcc の確認。
ls -l /etc/alternatives/gcc をして alternatives のリンクが gcc-3.x になっていたら、
rpm -Uvh --replacefiles --force \ gcc-4.1.2-0vl12.x86_64.rpm \ gcc-cpp-4.1.2-0vl12.x86_64.rpm \
をして復旧。
$ rpm --eval=%{_arch} x86_64 $ rpm --eval=%{_lib} lib64
となることを確認する
なってないなら手順11を確認する。
$ echo $HOSTTYPE x86_64
となることを確認する
この文書はいわもと(satoshi.iwamoto @ nifty.ne.jp)が書きました。 転載自由です。
無保証です。package は随時更新されますのですぐに古くなります。
Thanks to 鈴木さん、今野さん、中村さん、川口さん、VineSeed-x86_64 ML
を参考にしました。