x86なサーバのGCCのバージョンアップ
x86 環境のサーバにも gcc-4.4.3-r2 が来ていたので迷った挙句にバージョンを上げることにしました。 amd64 なデスクトップ環境では導入していたんだけどね。
てことで emerge …2時間半かかりました。(´・ω・`)
$ genlop -t gcc * sys-devel/gcc Tue Jun 8 19:53:52 2010 >>> sys-devel/gcc-4.4.3-r2 merge time: 2 hours, 28 minutes and 33 seconds.
これだけではインストールされただけで基本的には使われません。がんがん使ってやりたいので、人柱覚悟で gcc-4.4.3 をデフォルトのコンパイラに指定してやります。
$ sudo su - # gcc-config i686-pc-linux-gnu-4.4.3 * Switching native-compiler to i686-pc-linux-gnu-4.4.3 ... >>> Regenerating /etc/ld.so.cache... [ ok ] * If you intend to use the gcc from the new profile in an already * running shell, please remember to do: * # source /etc/profile # source /etc/profile # env-update # gcc-config -l [1] i686-pc-linux-gnu-4.3.4 [2] i686-pc-linux-gnu-4.4.3 *
これでデフォルトのコンパイラになりました。せっかく gcc のバージョンが上がったので全部コンパイルしなおすかなーとも思ったのですが、さすがに不毛なのでやめておきましたw
分散コンパイル用 gcc のビルド
うちでは distcc と crossdev を用いた分散コンパイルを行っており、分散した先のコンパイラのバージョンも合わせなくてはならないので、この作業を忘れずにやっておきます。
一応、分散元の環境の各ツールのバージョンをとっておきます。
$ eix -c -I binutils $ eix -c -I linux-headers $ eix -c -I gcc $ eix -c -I glibc
ちなみに、こんな感じでした。
package | version |
---|---|
binutils | 2.18-r3 |
linux-headers | 2.6.30-r1 |
gcc | 4.3.4 / 4.4.3-r2 |
glibc | 2.10.1-r1 |
gcc についてはスロットで 2 つ入っていますね。
次に、分散させる先のマシンにログオン。同じくバージョンを調べます。こちらは crossdev で作ったツールのバージョンを調べなきゃいけないことに注意。前回の crossdev を用いたツールの作成で、 cross-i686-pc-linux-gnu カテゴリに全部インストールされているので、コレをリストすれば OK 。
$ eix -I -C cross-i686-pc-linux-gnu [I] cross-i686-pc-linux-gnu/binutils [1] (2.18-r3(i686-pc-linux-gnu)@2010年03月18日) : Tools necessary to build programs [I] cross-i686-pc-linux-gnu/gcc [1] (4.3.4(i686-pc-linux-gnu-4.3)@2010年03月18日) : The GNU Compiler Collection. Includes C/C++, java compilers, pie+ssp extensions, Haj Ten Brugge runtime bounds checking [I] cross-i686-pc-linux-gnu/glibc [1] (2.10.1-r1(i686-pc-linux-gnu-2.2)@2010年03月18日) : GNU libc6 (also called glibc2) C library [I] cross-i686-pc-linux-gnu/linux-headers [1] (2.6.30-r1(i686-pc-linux-gnu)@2010年03月18日) : Linux system headers [1] "local-original" /usr/local/portage/original Found 4 matches.
gcc だけ新しいバージョンを作ればいいようです。コレを crossdev を使って作成してやるのですが、自分の環境では package.mask ファイルでマスクされてたのであらかじめコレを外してやります。
その後、 crossdev で作成します。わかんないけど emerge で叩いても作れるのかな…?
$ sudo crossdev -t i686 --b 2.18-r3 --g 4.4.3-r2 --k 2.6.30-r1 --l 2.10.1-r1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
最後に、 crossdev で使われる gcc のバージョンを指定しておきます。分散元のコンパイラのバージョンとあわせましょう。作業についてはココを参考にしました。
http://www.gentoo.org/proj/en/base/embedded/cross-development.xml
(ただし記事が結構古いです。最新のはコッチらしい)
$ gcc-config -l [1] i686-pc-linux-gnu-4.3.4 * [2] i686-pc-linux-gnu-4.4.3 [3] x86_64-pc-linux-gnu-4.3.4 [4] x86_64-pc-linux-gnu-4.4.3 *
わかりにくいですが、緑色のアスタリスクがシステムデフォルト、水色のアスタリスクがクロスコンパイラのデフォルトなんだそーです。システムデフォルトは amd64 環境なので 64bit コンパイラがデフォルトになっています。
これも、分散元でやったように gcc-config を使って指定してやります。
$ sudo su - # gcc-config i686-pc-linux-gnu-4.4.3 * Switching native-compiler to i686-pc-linux-gnu-4.4.3 ... >>> Regenerating /etc/ld.so.cache... [ ok ] * If you intend to use the gcc from the new profile in an already * running shell, please remember to do: * # source /etc/profile # source /etc/profile # env-update # gcc-config -l [1] i686-pc-linux-gnu-4.3.4 [2] i686-pc-linux-gnu-4.4.3 * [3] x86_64-pc-linux-gnu-4.3.4 [4] x86_64-pc-linux-gnu-4.4.3 *
以上で以降は (多分) 完了です。あとはエラーとかがでないのを祈るのみ…w