7.0R で FreeSBIE を構築
FreeBSD 7.0-RELEASE で FreeSBIE を構築してみます。
目標として sysinstall を使わないインストール を目指します。
インストール
まずは ports からインストールします。
# portinstall sysutils/freesbie
作業ディレクトリは /usr/local/share/freesbie/ で、以降はここで作業します。
# cd /usr/local/share/freesbie/
設定ファイルの編集
設定ファイルが読み込まれる順序は conf/freesbie.defaults.conf -> conf/freesbie.conf なので、デフォルトから設定を変えたい項目のみ conf/freesbie.conf に記述してください。
# vi conf/freesbie.conf
KERNELCONF=/usr/local/share/freesbie/conf/i386/FREESBIE
MAKE_CONF=/usr/local/share/freesbie/conf/make.conf
SRC_CONF=/usr/local/share/freesbie/conf/src.conf
EXTRA="adduser customroot etcmfs rootmfs varmfs"
make.conf の編集
デフォルトの make.conf を書き換えます。
# printf "CPUTYPE?=i686\n" > conf/make.conf
src.conf の編集
通常でしたら src.conf はないと思いますので、新規に作成します。
# printf "WITHOUT_GAMES=\nWITHOUT_PROFILE=\n" > conf/src.conf
カーネルの設定
FreeSBIE から起動する為に GEOM_LABEL,GEOM_UZIP,UNIONFS を GENELIC カーネルに書き足します。
# cp /usr/src/sys/i386/conf/GENERIC conf/i386/FREESBIE
# perl -pe "s/ident\t\tGENERIC/ident\t\tFREESBIE/" conf/i386/FREESBIE
# printf "\noptions \tGEOM_LABEL\t\t# Provides labelization\n" >> conf/i386/FREESBIE
# printf "options \tGEOM_UZIP\t\t# Read-only compressed disks\n" >> conf/i386/FREESBIE
# printf "options \tUNIONFS\t\t\t# Union filesystem\n" >> conf/i386/FREESBIE
customroot プラグインの設定
extra/customroot が FreeSBIE 起動時のルート ( **/” ) なので、直下に **etc” ディレクトリ、設定ファイル等を配置します。
以下の例では /etc/rc.conf を作成しています。
# mkdir extra/customroot/etc
# printf "hostname=\42freesbie.localdomain\42\n" > extra/customroot/etc/rc.conf
# printf "ifconfig_DEFAULT=\42DHCP\42\n\n" >> extra/customroot/etc/rc.conf
# printf "dumpdev=\42NO\42\n\n" >> extra/customroot/etc/rc.conf
# printf "sshd_enable=\42YES\42\n" >> extra/customroot/etc/rc.conf
ISO イメージの作成
初回ビルド時には時間がかかるので、遠隔操作の場合は screen などを立ち上げてから、作業を開始しておくと良いです。
# make iso
ISO イメージの再作成
カーネルだけ変更したい場合など、一部の処理のみやり直したい場合は /usr/obj/usr/local/share/freesbie/ 以下の .done_* ファイルを削除する事によって、該当処理をやり直す事ができます。
以下の例では extra プラグインのやり直しを行います。
# rm /usr/obj/usr/local/share/freesbie/.done_extra
# make iso
HDD の初期化
まずは既存のHDDを初期化します。
全てのデータが削除されるので、該当 HDD の内容はバックアップを忘れないで下さい。
# dd if=/dev/zero of=/dev/ad0 bs=512 count=32
スライスの作成
下記のようなファイルを作成して、 fdisk に読ませます。
対話的な fdisk は少し閉口してしまうものがあるので、一度 sysinstall を実行して、その値をメモしておいた方が良いです。
下記の例は VMware 仮想 HDD 8G 割り当ての環境でのスライスです。
実際はこの程度の HDD 容量の場合はひとつだけスライスを切れば大丈夫です
# vi vmware.conf
g c17753 h15 s63
p 1 165 63 4193847
p 2 165 4193910 4193910
p 3 165 8387820 4193910
p 4 165 12581730 4194855
a 1
上記のファイルを fdisk に読ませてスライスを作成します。
# fdisk -f vmware.conf -iv ad0
******* Working on device /dev/ad0 *******
fdisk: invalid fdisk partition table found
fdisk: WARNING line 5: number of cylinders (17753) may be out-of-range
(must be within 1-1024 for normal BIOS operation, unless the entire disk
is dedicated to FreeBSD)
parameters extracted from in-core disklabel are:
cylinders=17753 heads=15 sectors/track=63 (945 blks/cyl)
Figures below won't work with BIOS for partitions not in cyl 1
parameters to be used for BIOS calculations are:
cylinders=17753 heads=15 sectors/track=63 (945 blks/cyl)
Information from DOS bootblock is:
1: sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 63, size 4193847 (2047 Meg), flag 80 (active)
beg: cyl 0/ head 1/ sector 1;
end: cyl 341/ head 14/ sector 63
2: sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 4193910, size 4193910 (2047 Meg), flag 0
beg: cyl 342/ head 0/ sector 1;
end: cyl 683/ head 14/ sector 63
3: sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 8387820, size 4193910 (2047 Meg), flag 0
beg: cyl 684/ head 0/ sector 1;
end: cyl 1/ head 14/ sector 63
4: sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 12581730, size 4194855 (2048 Meg), flag 0
beg: cyl 2/ head 0/ sector 1;
end: cyl 344/ head 14/ sector 63
fdisk: Geom not found: "ad0"
ディスクラベルの割り当てを決める
ディスクラベルを書き込む前に、まずは全体の割り当てを決めます。
注意事項として、最初のスライスの一番初めのディスクラベルにルートファイルシステムを配置してください。
ad0s1
| Label | Mount | Size |
| ad0s1a | / | 256M |
| ad0s1b | swap | 1G |
| ad0s1d | /var | 256M |
| ad0s1e | /tmp | 256M |
| ad0s1f | /usr | 256M |
# vi label_ad0s1
# /dev/ad0s1:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 256M 16 4.2BSD
b: 1G * swap
c: * * unused
d: 256M * 4.2BSD
e: 256M * 4.2BSD
f: * * 4.2BSD
ad0s2
| Label | Mount | Size |
| ad0s2d | /usr/src | 1G |
| ad0s2e | /usr/ports | 1G |
# vi label_ad0s2
# /dev/ad0s2:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
c: * * unused
d: 1G * 4.2BSD
e: * * 4.2BSD
ad0s3
| Label | Mount | Size |
| ad0s3d | /usr/obj | 1G |
| ad0s3e | /usr/local | 1G |
# vi label_ad0s3
# /dev/ad0s3:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
c: * * unused
d: 1G * 4.2BSD
e: * * 4.2BSD
ad0s4
| Label | Mount | Size |
| ad0s4d | /usr/jail | 1G |
| ad0s4e | /home | 1G |
# vi label_ad0s4
# /dev/ad0s4:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
c: * * unused
d: 1G * 4.2BSD
e: * * 4.2BSD
ディスクラベルの書き込み
上記で作成したファイルを bsdlabel に読ませればディスクラベルが書き込まれます。
# bsdlabel -R ad0s1 label_ad0s1
# bsdlabel -R ad0s2 label_ad0s2
# bsdlabel -R ad0s3 label_ad0s3
# bsdlabel -R ad0s4 label_ad0s4
フォーマット
ルートファイルシステムと swap 以外は全て soft-update を有効にしてフォーマットします。
# newfs ad0s1a
# newfs -U ad0s1d
# newfs -U ad0s1e
# newfs -U ad0s1f
# newfs -U ad0s2d
# newfs -U ad0s2e
# newfs -U ad0s3d
# newfs -U ad0s3e
# newfs -U ad0s4d
# newfs -U ad0s4e
マウント
正常にフォーマットされていたら各ラベルをマウントします。
# swapon /dev/ad0s1b
# mount /dev/ad0s1a /mnt
# mkdir /mnt/var /mnt/tmp /mnt/usr
# mount /dev/ad0s1d /mnt/var
# mount /dev/ad0s1e /mnt/tmp
# mount /dev/ad0s1f /mnt/usr
# mkdir /mnt/usr/src /mnt/usr/ports /mnt/usr/obj
# mkdir /mnt/usr/local /mnt/usr/jail /mnt/home
# mount /dev/ad0s2d /mnt/usr/src
# mount /dev/ad0s2e /mnt/usr/ports
# mount /dev/ad0s3d /mnt/usr/obj
# mount /dev/ad0s3e /mnt/usr/local
# mount /dev/ad0s4d /mnt/usr/jail
# mount /dev/ad0s4e /mnt/home
ファイルのコピー
FreeSBIE の内容をコピーします。
# cp -fp /* /mnt/
# cp -fpR /bin /mnt/
# cp -fpR /boot /mnt/
# cp -fpR /dev /mnt/
# cp -fpR /dist /mnt/
# cp -fpR /etc /mnt/
# cp -fpR /lib /mnt/
# cp -fpR /libexec /mnt/
# cp -fpR /media /mnt/
# cp -fpR /proc /mnt/
# cp -fpR /rescue /mnt/
# cp -fpR /root /mnt/
# cp -fpR /sbin /mnt/
# cp -fpR /usr /mnt/
# cp -fpR /var /mnt/
/etc/fstab の編集
HDD から起動できるように /etc/fstab を編集します。
# vi /mnt/etc/fstab
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s1b none swap sw 0 0
/dev/ad0s1a / ufs rw 1 1
/dev/ad0s1d /var ufs rw 2 2
/dev/ad0s1e /tmp ufs rw,nosuid 2 2
/dev/ad0s1f /usr ufs rw 2 2
/dev/ad0s2d /usr/src ufs rw 2 2
/dev/ad0s2e /usr/ports ufs rw 2 2
/dev/ad0s3d /usr/obj ufs rw 2 2
/dev/ad0s3e /usr/local ufs rw 2 2
/dev/ad0s4d /usr/jail ufs rw 2 2
/dev/ad0s4e /home ufs rw 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0