kernel isoイメージの作成

freebsdやlinuxにおいて、インストールする際には大抵 isoファイル を利用してセットアップを行います。この isoファイル を自分で作ってみよう!というわけで、このFYIを書きました。


注意:
ちなみに、本文中の問題である「DL320 G3」の解決には至っていません。
現在もハングアップしてしまいます。
ただ、作成したisoファイルについては、bootしてインストール画面がでる事を確認しています。

「別にネットからダウンロードしてCD作ればいいじゃん」

という話ですが、実はこの裏話にはちょっとしたtipsが含まれます。今回、セットアップを試みたマシンは HP DL320 G3 の Serial ATAモデルです。これに利用されているS-ATAコントローラーは、Intel E7211 – i82801FR(ICH6R) というものになります。

現状、これが対応しているOSはOpenBSDや一部のlinuxのみとなっています。私がインストールするOSは、freebsd 4.11で現状ICH6Rには対応していません。この状態でインストールを行うには2つの方法があります。

・ BIOSでS-ATAを切り、LegacyModeにして普通のATAとして利用する
・ ata-pci.c と ata-dma.c にパッチを当てたkernelでインストールする

HP DL320 G3 については、前者に対応しておらず普通のATAとして動作させる事はできませんでした。なので、今回は後者を使う事にします。そのためには、パッチを当てたkernelでブートするCDが必要になります。

ここで最初の話に戻るわけです。

まずCDを作成するためには、普通にインストールされた freebsd が必要になります。今回は、4.11-RELEASE で作成しています。(勿論ネットに接続できる前提です)

まずは、cvsup が必要となるので、pkg_add から取得してください。

# pkg_add cvsup-without-gui

これで、/usr/local/bin/cvsup にインストールされます。次にcvsupをする際に必要なstable-supfileを作成します。サンプルを別フォルダにコピーして、そこで編集をするようにしました。

# mkdir /usr/local/etc/cvsup
# cp /usr/share/examples/cvsup/stable-supfile /usr/local/etc/cvsup/
# vi /usr/local/etc/cvsup/stable-supfile

stable-supfile の中で変更するのは2箇所です。*default host と *default release です。私は以下のように変更しました。

*default host=cvsup3.jp.FreeBSD.org
*default release=cvs tag=RELENG_4_11

4_11 は RELEASE名です。ホスト名のcvsupサーバは、1~6まであるのですきなものを選んでください。私はネットワーク的に一番近い場所を指定しました。まずは、これでcvsupします。

# /usr/local/bin/cvsup -g -L 2 -s /usr/local/etc/cvsup/stable-supfile

次に、isoファイル作成のために欠かせない、CVSROOTの取得をします。CVSROOTについては細かく書きませんが、所謂ログファイルです。先程のstable-supfileを利用して、取得に必要なコンフィグファイルを作ります。今回は大量に容量を食ってしまうので、別フォルダに保存します。私は /home/cvs にしました。

# mkdir /home/cvs
# cp /usr/local/etc/cvsup/stable-supfile /usr/local/etc/cvsup/cvs-supfile
# vi /usr/local/etc/cvsup/cvs-supfile

cvs-supfile は *default release と *default prefix の修正 、後は src-all 以下に項目を追加する必要があります。

*default prefix=/home/cvs
*default release=cvs

src-all
cvsroot-all
ports-all
doc-all

こんな感じです。後は先程と同じ様にcvsupをしてCVSROOTの取得を行います。非常に時間がかかります。

# /usr/local/bin/cvsup -g /usr/local/etc/cvsup/cvs-supfile

後は、kernelをビルドして、release用のmakeをするだけで良いのですが、その前にドライバにパッチを当てる必要があります。これが今回の目玉でもあるので・・・。パッチファイルは以下の通り。

*** sys/dev/ata/ata-pci.c.orig Fri Sep 17 15:23:46 2004
— sys/dev/ata/ata-pci.c Fri Sep 17 15:37:13 2004
***************
*** 156,161 ****
— 156,164 —-
case 0x24db8086:
return “Intel ICH5 ATA100 controller”;

+ case 0x26528086:
+ return “Intel ICH6 SATA150 controller”;
+
case 0x522910b9:
if (pci_get_revid(dev) >= 0xc4)
return “AcerLabs Aladdin ATA100 controller”;
***************
*** 634,639 ****
— 637,643 —-
break;

case 0x24d18086: /* Intel ICH5 SATA150 */
+ case 0x26528086: /* Intel ICH6 SATA150 */
dmastat = ATA_INB(ch->r_bmio, ATA_BMSTAT_PORT);
if ((dmastat & (ATA_BMSTAT_ACTIVE | ATA_BMSTAT_INTERRUPT)) !=
ATA_BMSTAT_INTERRUPT)
*** sys/dev/ata/ata-dma.c.orig Wed Dec 31 13:05:16 2003
— sys/dev/ata/ata-dma.c Fri Sep 17 15:39:40 2004
***************
*** 218,223 ****
— 218,224 —-

case 0x24db8086: /* Intel ICH5 */
case 0x24d18086: /* Intel ICH5 SATA */
+ case 0x26528086: /* Intel ICH6 SATA */
case 0x24ca8086: /* Intel ICH4 mobile */
case 0x24cb8086: /* Intel ICH4 */
case 0x248a8086: /* Intel ICH3 mobile */

もしかしたら、blogで保存する時に文字が変換されてしまう可能性もあるので、パッチファイルも置いておきます。

ich6.patch

これを /usr/src 以下に置き、以下のコマンドを実行すればパッチが適応されます。

# patch < ich6.patch

次に kernel のコンパイルをします。普通に buildworld してもらえれば大丈夫です。

# cd /usr/src
# make clean
# make buildworld

これには結構時間がかかりますので、しばし待ちます。完了したら、isoファイルの作成に入ります。/home/release にイメージを作ります。以下のコマンドを入力してください。

# mkdir /home/release
# cd /usr/src/release
# make release CHROOTDIR=/home/release BUILDNAME=4.11-RELEASE-p1-kmy. CVSROOT=/home/cvs RELEASETAG=RELENG_4_11 MAKE_ISOS=YES

BUILDNAME は uname -a コマンドの時に表示されますので、任意で大丈夫です。この時に足りないモジュールはネットからダウンロードしてきますので、ネットへの接続はしたままでお願いします。

しばらく待てば、/home/release/R/cdrom に isoファイルができていると思います。***-miniinst.iso をCDに焼いて完了です。

「kernel isoイメージの作成」への2件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください