ラベル FreeBSD の投稿を表示しています。 すべての投稿を表示
ラベル FreeBSD の投稿を表示しています。 すべての投稿を表示

2020年8月7日金曜日

FreeBSD の UEFIブート

event_note8月 07, 2020 editBy sbin forumNo comments

FreeBSD の UEFI Boot

先人の説明を元に 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 とかは使わなくてもブートできる。

  • FAT32 をマウントして efiローダーをコピーすると実行権が付いた状態でコピーされるから chmod は要らない。  
  • efi ブートシステムは /efi/boot にある startup.nsh を探すそうだ。  
  • あくまでGPTパーティションなので efiboot の bootcode を入れている。  

2018年12月14日金曜日

HP MicroServer の Disk 設定 Root On ZFS

event_note12月 14, 2018 editBy sbin forumNo comments
2T の HDD を4本入れて ZFSRoot を作ってみる。 以下の作業は何回もテストを繰り返す場合があるので、通常は1本のスクリプトに書いて USB からブート後に実行している。勿論ネットワークはブートした後は使える事が前提。 全てを書いてもディスクを作る部分にとどめる。 最初にいつものようにGPT情報を消す。
#
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=1
GPTパーティションを作る。
gpart create -s gpt ada0
gpart create -s gpt ada1
gpart create -s gpt ada2
gpart create -s gpt ada3
BSDに合わせる。
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/disk3
ZFSのマウントポイント書く。 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/sh

CHROOTSCRIPT_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も振れるし、起動するスクリプトも自由にコントロールできる。

インストールイメージを作り直す

event_note12月 14, 2018 editBy sbin forumNo comments
FreeBSD11.2Rを新規にインストールしました。設定やパッケージは既に作ってありますが、 さて Jail を動かそうとした時に jail.conf の構文エラーで起動できません? 何故だと思ったら VImage がカーネルに入っていませんでした。
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 を作ったりパッケージを入れたり 何でもできます。