wiki:VineSeed_x86_64_setup_iwamoto

VineSeed -> VineSeed x86_64 への更新手順

  1. 最小環境での VineSeed 環境の作成

Vine 4.1 を最小構成で install し、コンパクトな Vine の環境を構築。 但し、package の download が出来ないと困るので lftp、wget の2つは 追加で導入しておく。

  1. Vine 4.1 -> VineSeed x86 への更新

apt line を VineSeed に書き換えて、VineSeed x86 環境へ移行。

現状、Vine 4.1 と VineSeed x86 では toolchain が変わっているため、 apt-get dist-upgrade が必須。 apt-get upgrade では、ライブラリの互換が取れず立ち上がらない。 (浮動小数点なんちゃらの連発で逝ってしまう)

VineSeed 環境に移行後、reboot する。 再度、apt-get update, apt-get upgrade をして更新漏れの確認。

  1. package の download

適当な mirror から、VineSeed/x86_64/RPMS.main の package を すべて download する。 また、VineSeed/x86_64/pool から compat32-* package をすべて download する。

とりあえず、devel package は不要なので、

 mkdir devel
 mv *-devel*rpm devel

とかして目障りにならないところに移動しておく。

  1. 不要なサービスの停止、package 削除

Vine 4.1CR をベースにした場合では Wnn 関係が入っているので停止。 package も削除する。 network 関係(iptables, ppp, rp-pppoe, postfix など)も当面不要なので ネットワーク接続を維持できる最小環境を残し、停止、package 削除する。

ここで可能な限り package を絞らないとあとで苦労が増える。

  1. ld.so.conf、mkinitrd の書き換え

/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 などのエディタが使えなくなると困るのでこの段階で更新してしまう。

  1. glibc まわりの更新(その1)

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 の実行が出来ない」というエラーが出るが無視する。

  1. kernel の更新
    rpm -Uvh --force kernel-2.6.16-0vl85.x86_64.rpm
    

で突っ込む。

/boot に kernel が入っているか、initrd image が出来ているかを確認する。

  1. reboot

grub の対話モード(コマンドラインモード)で x86_64 kernel で boot する。 boot してきたら uname -a をして x86_64 になっていることを確認する。

  1. glibc まわりの更新(その2)

手順6の手順をもう1度実行する。 今度はスクリプトのエラーも出ない。

  1. rpm, apt の更新

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
  1. /etc/rpm/platform の確認

/etc/rpm/platform を確認する。

athlon-redhat-linux などになっていたら x86_64-redhat-linux に修正する。

  1. i386 package の x86_64 package への置き換え

install 済みの i386 package を x86_64 package で置き換える。

rpm -qa --qf "%{ARCH}-%{OS} %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" | grep i386

などとすれば install 済みの i386 package の一覧を表示してくれる。

hoge という package を更新する場合は、

  • hoge.x86_64.rpm を rpm -Uvh --force で入れる
  • 上記スクリプトで grep hoge として hoge が2つ入っていることを確認
  • rpm -e hoge.i386 として i386 を削除

という手順を行う。

これを、i386 package が無くなるまで行う。

library の更新時に、まだ入れ替えていない i386 package への依存が出る場合、

  • compat32 package がある場合はそれを入れる。
  • compat32 package が無い場合は手順を考える。

i386 package が無くなったら、apt-get check して依存関係に矛盾が無いことを 確認する。 reboot して正常に起動することを確認する。

手順4で package 数がきっちり絞ってあれば、package 数 100個弱、 所要時間3時間程度。

この作業は支援スクリプトが欲しい。apt の偉大さを再認識する3時間。

compat32 がある下位のライブラリから更新していくと楽。 ライブラリの入れ替えが終わればあとは単純作業になるハズ。

  1. apt してみる

この時点で、apt の機能が使えるようになっているハズ。 追加で必要となる package を随時 apt で導入していく。

  1. 開発環境の確認

必要な 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

となることを確認する

  1. 文責、謝辞、参考

この文書はいわもと(satoshi.iwamoto @ nifty.ne.jp)が書きました。 転載自由です。

無保証です。package は随時更新されますのですぐに古くなります。

Thanks to 鈴木さん、今野さん、中村さん、川口さん、VineSeed-x86_64 ML

を参考にしました。