2009年2月1日

NetBSD 4.0.1 の amd64 版の boot-big.fs はどこ?

最近、Debain/NetBSD/OpenBSD/FreeDOSの安定版のインストーラー(amd64版があればそいつを含んだ奴)を一つにまとめた DVD を欲しくて作ってみた。

grub2 は USB-CD/DVD のアクセス対応のコードがまだ天から降ってこないので、まだ isolinux を使う必要がある。(grub2のbsd系のブートコマンドは、まだ 64bit ELFをサポートしていないので、まだまだなんだがなぁ。。。)

Linux 以外では、floppy イメージをsyslinux の memdiskでエミュレートすることで、インストール作業ができる。ただし、floppy ディスクの交換までエミュレートできないので、一つにまとまったイメージが必要になる。

で、

NetBSD/amd64 4.0 には、boot-big.fs はあったのだが、4.0.1 では提供されていないぞっと。。。なんでかぁ

困ったなぁ

コイツらは普通につくれるのかぁ、、、、Linux システム上で!

小一時間考えて、作ってみた。

NetBSD 4.0.1 のバイナリファイル群を取ってくる。下のスクリプトのTOPDIRに指定して、スクリプトを走らせると。。。memdisk でブートできる boot-big.fs を出来る。。。

#!/bin/sh

TOPDIR=/path/to/NetBSD-4.0.1/amd64

BOOTBIGFS=${TOPDIR}/installation/floppy/boot-big.fs

[ -e $BOOTBIGFS ] && exit

#VOLSIZE=5760  # blocks

workdir=/tmp/work$$
mkdir $workdir
mkdir $workdir/USTAR

tar xfz ${TOPDIR}/binary/sets/base.tgz -C $workdir ./usr/mdec

cp $workdir/usr/mdec/boot $workdir/USTAR
cp $workdir/usr/mdec/bootxx_ustarfs $workdir
cp ${TOPDIR}/binary/kernel/netbsd-INSTALL.gz $workdir/USTAR/netbsd

if [ "x$VOLSIZE" = "x" ] ; then
	needblocks=`du -s -B512 $workdir/USTAR | awk '{print $1}'`
	VOLSIZE=`expr $needblocks + 20`
fi

OVOLSIZE=`printf "%o" $VOLSIZE`
touch $workdir/USTAR/USTAR.volsize.$OVOLSIZE
tar --posix -cf $workdir/USTAR.tgz -C $workdir/USTAR boot USTAR.volsize.$OVOLSIZE netbsd

dd if=$workdir/bootxx_ustarfs of=$workdir/boot-big.fs
dd if=$workdir/USTAR.tgz of=$workdir/boot-big.fs seek=16

cp $workdir/boot-big.fs $BOOTBIGFS

rm -rf $workdir

USTARFSは、initrd で cpio イメージを使うっぽい感じで tar を扱う奴らしい(ちょっと違うけど)。ボリュームのサイズは含まれる特殊なファイル名(USTAR.volsize.XXXX)で指定され、かつ8進数を使うのは、、、如何にも歴史を感じられるなぁ~

で、目的のDVDを無事ゲットできましたとさぁ。。。

まぁ、ついでに Ubunut 8.04.2 LTS Desktop/Server i386/amd64 も作ってもうたぁが、それは別の話。

0 件のコメント: