先人の説明を元に UEFI Boot してみた。
せっかくの HP DL380 G10 なので UEFI Boot でインストールしたいのだけど、インストーラーには
そんな親切なモードはなかった。
手持ちの板は FreeBSD R11.3 頃のやつ。
RAID はすでにに組んであり、 /dev/da0 としてアクセスできることを前提で書いている。
Regacy BIOS モードで起動してみる。 Install を選択して Manual で DISK を設定する。
とりあえず GPT でスライスをきる。
| P No | type | サイズ | MP | ラベル | dev |
|---|---|---|---|---|---|
| p1 | efi | 512m | - | - | /dev/da0p1 |
| p2 | freebsd-ufs | 3225GB | / | FreeBSD | /dev/da0p2 |
| p3 | freebsd-swap | 128GB | none | - | /dev/da0p3 |
こんなイメージになるようにインストールしてみる。
インストーラーは efi なんてし知らないよと fail するが無視。
ここではパーティションが切れてp2 にOSが展開されれれば良い。
最後にインストールの最終設定をするか聞かれるので YES でシェルに入る。
efi の設定を行う。インストールに失敗した p1 へブートローダーを入れる。
# newfs_msdos -F 32 -S 512 -c 4 /dev/da0p1
# mkdir /esp
# mount -t msdosfs /dev/da0p1 /esp
# mkdir -p /esp/efi/boot
# cp /boot/boot1.efi /esp/efi/boot/BOOTx64.efi
# echo 'BOOTx64.efi' > /esp/efi/boot/startup.nsh
#
# umount /esp
# gpart bootcode -p /boot/boot1.efifat -i 1 da0
efibootmgr とかは使わなくてもブートできる。
# gpart delete -i 3 ada0 gpart delete -i 2 ada0 gpart delete -i 1 ada0 gpart destroy ada0 gpart delete -i 3 ada1 gpart delete -i 2 ada1 gpart delete -i 1 ada1 gpart destroy ada1 gpart delete -i 3 ada2 gpart delete -i 2 ada2 gpart delete -i 1 ada2 gpart destroy ada2 gpart delete -i 3 ada3 gpart delete -i 2 ada3 gpart delete -i 1 ada3 gpart destroy ada3 sysctl vfs.zfs.min_auto_ashift=12続いてゴミを消す
dd if=/dev/zero of=/dev/ada0 bs=1m count=1 dd if=/dev/zero of=/dev/ada1 bs=1m count=1 dd if=/dev/zero of=/dev/ada2 bs=1m count=1 dd if=/dev/zero of=/dev/ada3 bs=1m count=1GPTパーティションを作る。
gpart create -s gpt ada0 gpart create -s gpt ada1 gpart create -s gpt ada2 gpart create -s gpt ada3BSDに合わせる。
gpart add -a 4k -b 168 -s 8388608 -t freebsd-swap -l swap0 ada0 gpart add -a 4k -b 168 -s 8388608 -t freebsd-swap -l swap1 ada1 gpart add -a 4k -b 168 -s 8388608 -t freebsd-swap -l swap2 ada2 gpart add -a 4k -b 168 -s 8388608 -t freebsd-swap -l swap3 ada3 gpart add -b 40 -s 512 -t freebsd-boot ada0 gpart add -b 40 -s 512 -t freebsd-boot ada1 gpart add -b 40 -s 512 -t freebsd-boot ada2 gpart add -b 40 -s 512 -t freebsd-boot ada3 # Last of all space to zfs pertition # gpart add -a 4k -t freebsd-zfs -l disk0 ada0 gpart add -a 4k -t freebsd-zfs -l disk1 ada1 gpart add -a 4k -t freebsd-zfs -l disk2 ada2 gpart add -a 4k -t freebsd-zfs -l disk3 ada3 sysctl kern.geom.debugflags=0x10 gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0 gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1 gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada2 gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada3これはやった事ないけど EFIブートはこん感じかな?
#newfs_msdos -F 32 -c 1 /dev/ada0p1 #mount -t msdosfs /dev/ada0p1 /mnt #mkdir -p /mnt/EFI/BOOT #cp /boot/loader.efi /mnt/EFI/BOOT/BOOTX64.efi #umount /mnt #newfs_msdos -F 32 -c 1 /dev/ada1p1 #mount -t msdosfs /dev/ada1p1 /mnt #mkdir -p /mnt/EFI/BOOT #cp /boot/loader.efi /mnt/EFI/BOOT/BOOTX64.efi #umount /mnt #newfs_msdos -F 32 -c 1 /dev/ada2p1 #mount -t msdosfs /dev/ada2p1 /mnt #mkdir -p /mnt/EFI/BOOT #cp /boot/loader.efi /mnt/EFI/BOOT/BOOTX64.efi #umount /mnt #newfs_msdos -F 32 -c 1 /dev/ada3p1 #mount -t msdosfs /dev/ada3p1 /mnt #mkdir -p /mnt/EFI/BOOT #cp /boot/loader.efi /mnt/EFI/BOOT/BOOTX64.efi #umount /mnt続いて ZFS をセットアップ
echo "Load ZFS modules" kldload /boot/kernel/opensolaris.ko kldload /boot/kernel/zfs.ko mkdir /boot/zfs zpool create -f zroot raidz /dev/gpt/disk0 /dev/gpt/disk1 /dev/gpt/disk2 /dev/gp t/disk3ZFSのマウントポイント書く。 ZFSは本来は自動マウントされる仕組みが基本になってるが、障害の時困るので明示的に指定する。
echo " create ZFS filesystem" mkdir /tt zfs set checksum=fletcher4 zroot zfs set mountpoint=legacy zroot zfs set atime=off zroot zfs create zroot/system zfs create zroot/system/sysroot zfs create zroot/system/usr zfs create zroot/system/src zfs create zroot/system/var zfs create zroot/system/tmp zfs create zroot/system/home zfs create zroot/system/home1 zfs create zroot/system/home2 zfs create zroot/system/home3 zfs create zroot/system/VBOX zfs create zroot/system/jails #zfs create zroot/jails/nano zfs set compression=lzjb zroot/system/src zpool set bootfs=zroot/system/sysroot zroot zpool export zroot zpool import -o cachefile=/tmp/zpool.cache zroot echo "mount ZFS filesystem" mount -t zfs zroot/system/sysroot /tt mkdir /tt/tmp mount -t zfs zroot/system/tmp /tt/tmp chmod 1777 /tt/tmp mkdir /tt/usr mount -t zfs zroot/system/usr /tt/usr mkdir /tt/usr/home mount -t zfs zroot/system/home /tt/usr/home ln -s /usr/home /tt/home mkdir /tt/usr/src mount -t zfs zroot/system/src /tt/usr/src mkdir /tt/var mount -t zfs zroot/system/var /tt/var mkdir -p /tt/usr/ports/packages mkdir -p /tt/usr/local/etc mkdir /tt/home1 mount -t zfs zroot/system/home1 /tt/home1 mkdir /tt/home2 mount -t zfs zroot/system/home2 /tt/home2 mkdir /tt/home3 mkdir /tt/VBOX mkdir /tt/jails mount -t zfs zroot/system/jails /tt/jails mkdir /tt/jails/ponta mkdir -p /tt/home1/www/data/kn本体を展開する。
cd /tt tar xvfzp /usr/freebsd-dist/base.txz tar xvfzp /usr/freebsd-dist/kernel.txz tar xvfzp /usr/freebsd-dist/lib32.txz tar xvfzp /usr/freebsd-dist/src.txz #tar xvfzp /usr/freebsd-dist/ports.txz cd /tt/jails/ponta tar xvfzp /usr/freebsd-dist/base.txz tar xvfzp /usr/freebsd-dist/kernel.txz tar xvfzp /usr/freebsd-dist/lib32.txz mkdir /tt/dev mount -t devfs dev /tt/dev cp /tmp/zpool.cache /tt/boot/zfs/ #mkdir /tt/usreebsd-dist cp -R /usr/freebsd-dist /tt/usrあとは、好きなように実行するスクリプトを組めば良い。
cat <<CHROOTSCRIPT_EOT >/tt/zfssinglechroot.sh #!/bin/shCHROOTSCRIPT_EOTが来るまでいくつもスクリプトを生成できる。 通常は、
CHROOTSCRIPT_EOT chmod +x /tt/zfssinglechroot.sh chroot /tt /zfssinglechroot.shとやって実体環境を動かしながら設定を続けていく。勿論 pkg install -y xxx なんかもできる。 ここまで出来ていると、 Jail もスクリプトに追加できたりする。VImageが動いていると、bridgeやepairを 好きなJail に持っていけるし、物理インターフェイスの bgeとかも移動できる。移動出来れば、
jexec ホスト名 route add default 192.168.168.254のように Jail に設定できる。更に
pkg -j ホスト名 install -y bindなんて事もできる。 因みに /etc/jail.conf は
xec.start="/bin/sh /etc/rc";
exec.stop="/bin/sh /etc/rc.shutdown";
ponpon
{
jid=1;
name=ponpon;
path=/jails/ponpon;
host.hostname=ponpon.mydomain;
allow.chflags;
allow.raw_sockets;
mount.devfs;
devfs_ruleset=5;
vnet;
}
jail が有効になっていれば上記の設定で Jail が動く。後はゆっくり設定すれば良い。
IPも振れるし、起動するスクリプトも自由にコントロールできる。
include GENERIC ident VIMAGE options VIMAGE options NULLFS #nooptions SCTP options IPFIREWALL options IPFIREWALL_VERBOSE options IPFIREWALL_VERBOSE_LIMIT=1000 options IPFIREWALL_DEFAULT_TO_ACCEPT options DUMMYNET options IPDIVERTを VIMAGE に書いて、 /etc/make.conf に KERNCONF=VIMAGEを指定してBuild。
cd /usr/src make -j4 buildworld make -j4 buildkernel新しいカーネルで動いたのを確認してから、インストールイメージを作成します。
cd /usr/src/release make clean make release BUILDNAME=11.2-VIMAGE MAKE_ISOS=1 NOPORTS=1終わると /usr/obj/usr/src/release にイメージができるので できあがった disk1.iso を CD-Rに書けばインストールできるのでした。 ところでこの時できる kernel.txz 、 base.txz、lib32.txz もよく利用します。 FreeBSD上での話ですが、USBのインスト-ラを作る場合で過去に使ったことがある場合は GPTの情報を消してから使います。
gpart show da0 gpart delete -i 2 da0 gpart delete -i 1 da0 gpart destroy da0次にゴミを消してパーティションを切る。
dd if=/dev/zero of=/dev/da0 bs=1m count=1 gpart create -s gpt da0 gpart add -s 512K -t freebsd-boot da0 gpart add -t freebsd-ufs -l freebsd da0 gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 da0 newfs /dev/da0p2展開する
mount /dev/da0p2 /mnt cd /mnt tar xvfzp /usr/obj/usr/src/release/base.txz tar xvfzp /usr/obj/usr/src/release/kernel.txz echo '/dev/da0p2 / ufs rw,noatime 0 0' > /mnt/etc/fstab続いて必要な x.txz を /usr/freebsd-dist に書き込めば完成。 ただUSBメモリーの場合は、ブートはできますが何もしません。ブートするだけです。 自動処理するスクリプトを自分に合わせて書くだけです。ZFSROOT を作ったりパッケージを入れたり 何でもできます。