x86_64 環境の構築 09/28 '07
[更新日:
2007年10月10日
]
以下のドキュメントは VineSeed メーリングリストに
いわもと さんが投稿された記事
[VineSeed-x86_64:00391] をそのまま載せたものです。
---------------------------------------------------------------------
How to x86_64 (Re: 1st step to x86-64 env)
2007/09/28 時点での VineSeed -> VineSeed x86_64 への更新手順
1,最小環境での VineSeed 環境の作成
Vine 4.1 を最小構成で install し、コンパクトな Vine の環境を構築。
但し、package の download が出来ないと困るので lftp、wget の2つは
追加で導入しておく。
2,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 をして更新漏れの確認。
3,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
とかして目障りにならないところに移動しておく。
4,不要なサービスの停止、package 削除
Vine 4.1CR をベースにした場合では Wnn 関係が入っているので停止。
package も削除する。
network 関係(iptables, ppp, rp-pppoe, postfix など)も当面不要なので
ネットワーク接続を維持できる最小環境を残し、停止、package 削除する。
ここで可能な限り package を絞らないとあとで苦労が増える。
5,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 などのエディタが使えなくなると困るのでこの段階で更新してしまう。
6,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 の実行が出来ない」というエラーが出るが無視する。
7,kernel の更新
rpm -Uvh --force kernel-2.6.16-0vl85.x86_64.rpm
で突っ込む。
/boot に kernel が入っているか、initrd image が出来ているかを確認する。
8,reboot
grub の対話モード(コマンドラインモード)で x86_64 kernel で boot する。
boot してきたら uname -a をして x86_64 になっていることを確認する。
9,glibc まわりの更新(その2)
手順6の手順をもう1度実行する。
今度はスクリプトのエラーも出ない。
10,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
11,/etc/rpm/platform の確認
/etc/rpm/platform を確認する。
athlon-redhat-linux などになっていたら x86_64-redhat-linux に修正する。
12,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 がある下位のライブラリから更新していくと楽。
ライブラリの入れ替えが終わればあとは単純作業になるハズ。
13,apt してみる
この時点で、apt の機能が使えるようになっているハズ。
追加で必要となる package を随時 apt で導入していく。
14,開発環境の確認
必要な 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
となることを確認する
15,文責、謝辞、参考
この文書はいわもと(satoshi.iwamoto@nifty.ne.jp)が書きました。
転載自由です。
無保証です。package は随時更新されますのですぐに古くなります。
Thanks to 鈴木さん、今野さん、中村さん、川口さん、VineSeed-x86_64 ML
http://owa.as.wakwak.ne.jp/zope/labs/bbs/201/364
http://owa.as.wakwak.ne.jp/zope/labs/bbs/201/365
http://www.is.sci.yamaguchi-u.ac.jp/~kawamura/Japanese/Comp/x86_64.html
を参考にしました。
src.rpm からのリビルド
パッケージング方法は
ここ
に書いたけど、
後でまとめること。
$ rpm --sign -ba hoge.spec 2>&1 | tee make64.log
$ rpm --sign -bb --with compat32 --target i686 hoge.spec 2>&1 | tee make32.log
|