| ■ 【ぷろじぇくと64(ろくよん)】 〜T-Bananaサーバで64ビットOSを動かすぞっ!!の巻〜
|
第7日目:カーネル再構築成功!しかし・・・
|
えーと、本業で2日ほどバタバタして予定していたカーネル再構築に進めない状態
だったけど、ようやっと今日から取り掛かれるようになった。
(^_^;)さんも見かけないし、今日は作業がスムーズにすすむと思う。
さてT-Bananaでやっているカーネル再構築は以下の手順で行なっています。
1) sysinstall をつかって /usr/src/sys を持ってくる
2) T-Banana用に作ったコンフィグレーションファイル(TBANANA01)を /usr/src/sys/i386/conf
に持ってくる
3) config TBANANA01 でコンフィグレーションファイルを元にしてカーネルのソース
コードを生成する
(ソースコードは /usr/src/sys/i386/compile/TBANANA01 に格納される)
4) cd ../compile/TBANANA01 でソースコードのディレクトリに移動する
5) make depend; make; make install でコンパイルからインストールまで行なう。
※ make depend; make; でカーネルのコンパイルが行なわれ、
make install でカーネルのインストールが行なわれる
|
今回はSMPというコンフィグレーションファイルをリネームして「TTIGER01」を作って
再構築を試みたけど・・・・エラーになった。
# make depend; make; make install
cc -c -O -pipe -march=i686 -Wall -Wredundant-decls -Wnested-externs -Wstrict-pro
totypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -fformat-exten
sions -std=c99 -g -nostdinc -I- -I. -I../../.. -I../../../contrib/altq -I../../.
./contrib/ipfilter -I../../../contrib/pf -I../../../dev/ath -I../../../contrib/n
gatm -I../../../dev/twa -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -includeopt_glob
al.h -finline-limit=8000 --param inline-unit-growth=100 --paramlarge-function-g
rowth=1000 -mcmodel=kernel -mno-red-zone -mfpmath=387 -mno-sse -mno-sse2 -mno-mm
x -mno-3dnow -msoft-float -fno-asynchronous-unwind-tables -ffreestanding
../../.
./amd64/amd64/genassym.c
../../../amd64/amd64/genassym.c:1: error: CPU you selected does not support
x86-64 instruction set
../../../amd64/amd64/genassym.c:1: error: CPU you selected does not support
x86-64 instruction set
*** Error code 1
Stop in /usr/src/sys/amd64/compile/TTIGER01.
#
|
x86-64をサポートしていない(つまり64ビットの)CPUじゃない、って言ってるなあ。
ってか march=i686 って、、、、
もしかして /etc/make.confで悪さをしているかも・・・
やっぱりそうだ。make.confの中でCPUTYPEがi686(=Pentium 4)になっていた。
なので、ここを CPUTYPE=opteron として再実行したら・・・・成功した。
(カーネル再構築の詳細についてはココを参照して下さい。)
# uname -a
FreeBSD w44.maido3.cc 6.2-RELEASE FreeBSD 6.2-RELEASE #0: Wed Nov 13 23:37:04 UTC 2007
root@w44.maido3.cc:/usr/src/sys/amd64/compile/TTIGER01 amd64
#
|
いやあ、やっぱり良いなあ。GENERICだと市販車というイメージがあるけど、
TTIGER01って出るとレース仕様みたいに思えてくるのは気のせいか・・・
「(^_^;)さんもいないし、カーネル再構築も目処がたったし、バンザーイ!」と思っていたら、
ICQでメッセージが・・・・・Brianからだ!
俺(以下、('A`))は実際にBrian(以下、( ^ω^))に会った事があるけど、ナイスガイです。
('A`):「あのさあ、『百式』なんだけど・・・」
( ^ω^):「ああ、その事でね、相談があるんだ。」
('A`):「ひょっとして、来たの?」
( ^ω^):「来たよ、一応は、、、、」
('A`):「一応は、って?」
( ^ω^):「なんかオンラインにならないんだねえ。。。。」
('A`):「えっーーーーーー!」
( ^ω^):「6.2-RELEASE を入れたけど、どうしてもNICが認識されないんだよ。」
('A`):「NICが壊れているんじゃないの。」
( ^ω^):「それは無いと思う。新しいNICだから 6.2-RELEASEで動かないんだと思う。
6.2-STABLEだと動くかも・・・・まあ、それでもダメなら工場に戻すよ。」
('A`):「うーん。うーん。とりあえず6.2-STABLE入れて、オンラインになるか試してみよう。」
( ^ω^):「OK!判ったよ。」
そして・・・
( ^ω^):「あのさあ・・・・」
('A`):「どしたの?」
( ^ω^):「FreeBSDのサイトで探してるんだけど、6.2-STABLEが見当たらないんだ・・・
ISOイメージがどこにあるか知ってる?」
('A`):「ぐはっ!」
とりあえずISOイメージが何処にあるか教えて作業をお願いしたけど、6.2-STABLEか・・・・
もし6.2-STABLEを使う事になるなら、カーネル再構築はちょっと厄介な事になるだろうなあ。
ってかどんなNICがついてるんだろう。。。
まあ明日には判るだろう。それからだ。
|
|
[カーネル再構築時の初歩的ポイント]
6.2-RELEASEに限らず、カーネル再構築の時に大切になるのは
「コンフィグレーションファイル」と「/etc/make.conf」の記述になります。
コンフィグレーションファイルはインストール対象のマシン(サーバ)のハードウェアに
関連するパラメータとかオプションを指定するファイルです。
例えばSCSIでもいくつかドライバがありますが、どの機種・タイプのドライバを使うのか、
という事をこのファイル内に記述します。
あと、CPUがデュアルコア(ハード的に1つのパッケージに2つのCPUが内蔵されている)の
場合には、通常のコンフィグレーション(GENERICといいます)では物理的に認識される
1つのCPUのみ有効化されますが、SMPというオプションを指定する事で2つのCPUとして
動く事が可能になります。
最初にCore2Duoにamd64をインストールした時には、カーネルは"SMP"で稼動しました。
このSMPのコンフィグレーションファイルがどうなっているかというと、、、
|
#
# SMP -- Generic kernel configuration file for FreeBSD/amd64 SMP
# Use this for multi-processor machines
#
# $FreeBSD: src/sys/amd64/conf/SMP,v 1.1.6.1 2005/09/18 03:37:58 scottl Exp $
include GENERIC
options SMP
|
たった、これだけです。
ほとんどの記述はインクルードされているGENERICから取り込まれています。
この場合に重要なのは最後の options の所です。
(デュアルコアでない64ビットのCPUを使っている人は関係ないです。)
そして再構築、特にカーネルソースのコンパイル時にオプションを指定する場合には、
/etc/make.conf に記述します。
このファイルはカーネルに限らずportsパッケージ等をコンパイルする際に、コンパイルの
条件やらパラメータなどを指定します。
よく「ccじゃなくてgccを指定する」とか「-O2 にするか -O3にするか」とか言われるのは
ここでの記述になりますが、あいにく俺はカーネル再構築が初めてなので、T-Bananaの
make.confを必要最小限いじっただけです。
また「make なんちゃら」と動かすものはこのファイルを参照する事になります。
(詳細は man make.conf と叩くとマニュアルが表示されるので見て下さい。
もっとも英語で書かれていますが・・・・)
今回は以下のmake.confを記述しました。
|
CPUTYPE=opteron
PERL_VER=5.8.8
PERL_VERSION=5.8.8
PERL_ARCH=mach
NOPERL=yo
NO_PERL=yo
NO_PERL_WRAPPER=yo
KERNCONF=TTIGER01
WITHOUT_X11=yes
CPUTYPE=opteron
CFLAGS= -O -pipe
COPTFLAGS= -O -pipe
NO_BIND=true
NO_BIND_NAMED=true
NO_BIND_ETC=true
NO_FORTRAN=true
NO_I4B=true
NO_KERBEROS=true
NO_LPR=true
NO_MAILWRAPPER=true
NO_SENDMAIL=ture
NO_USB=true
|
ただしFreeBSDではCore2Duoについて指定する場合、6.2-RELEASEではCPUTYPEを
"opteron"と指定しないと通らないのですが、どうも6.2-STABLEだと"core2"と
指定できるみたいです。
これは次回試してみようと思います。
|
|
|
6日目に戻る。 8日目に続く。
解析
|