kraftsrv.net

FreeBSD 用 SD カードイメージファイルのカスタマイズ

FreeBSD 用 SD カードイメージファイルのカスタマイズ手順です。
予め任意のネットワーク情報を設定しておくことで、Raspberry Pi 3 Model B+ 上で FreeBSD の環境構築を行う際に DHCP サーバや入出力機器の用意を不要とします。

事前準備

作業用環境の準備

本稿での作業は FreeBSD の環境で行うため、Hyper-V 仮想マシン等に FreeBSD をインストールした環境を準備します。

SD カードイメージファイルの取得

本稿では 2021 年 4 月にリリースされた FreeBSD 13.0-RELEASE を使用します。
FreeBSD-13.0-RELEASE-arm64-aarch64-RPI.img.xz を取得して作業用環境に転送します。

SD カードイメージファイルのカスタマイズ

本稿での作業は全て root 権限で実行します。

SD カードイメージファイルの解凍

SD カードイメージファイルを解凍します。
※SD カードイメージファイルは /tmp 以下に転送されていることを前提とします。

root@vmhost# cd /tmp
root@vmhost# unxz FreeBSD-13.0-RELEASE-arm64-aarch64-RPI.img.xz

SD カードイメージファイルのアタッチ

SD カードイメージファイルをアタッチします。
※以下のコマンドは『mdconfig -a -t vnode -f /tmp/FreeBSD-13.0-RELEASE-arm64-aarch64-RPI.img』と等価です。
コマンドの実行結果として割り当てられたユニット名が表示されます。

root@vmhost# mdconfig /tmp/FreeBSD-13.0-RELEASE-arm64-aarch64-RPI.img
md0

アタッチした結果を確認します。

root@vmhost# mdconfig -lv
md0     vnode    3072M  /tmp/FreeBSD-13.0-RELEASE-arm64-aarch64-RPI.img

base system 領域のマウント

SD カードイメージファイルに含まれる base system 領域 (『freebsd-ufs』と表示される箇所) を確認します。

root@vmhost# gpart show
=>      63  62914497  da0  MBR  (30G)
        63         1       - free -  (512B)
        64  62914496    1  freebsd  [active]  (30G)

=>       0  62914496  da0s1  BSD  (30G)
         0  58720256      1  freebsd-ufs  (28G)
  58720256   3145728      2  freebsd-swap  (1.5G)
  61865984   1048512         - free -  (512M)

=>     63  6291393  md0  MBR  (3.0G)
       63     2016       - free -  (1.0M)
     2079   102312    1  fat32lba  [active]  (50M)
   104391  6187041    2  freebsd  (3.0G)
  6291432       24       - free -  (12K)

=>      0  6187041  md0s2  BSD  (3.0G)
        0       57         - free -  (29K)
       57  6186880      1  freebsd-ufs  (2.9G)
  6186937      104         - free -  (52K)

base system 領域をマウントします。

root@vmhost# mount /dev/md0s2a /mnt

base system 領域のマウントを確認します。

root@vmhost# ls -l /mnt
total 88
-rw-r--r--   2 root  wheel     1023 Apr  9 15:45 .cshrc
-rw-r--r--   2 root  wheel      507 Apr  9 15:45 .profile
drwxrwxr-x   2 root  operator   512 Apr  9 15:33 .snap
-r--r--r--   1 root  wheel     6109 Apr  9 15:45 COPYRIGHT
drwxr-xr-x   2 root  wheel     1024 Apr  9 15:36 bin
drwxr-xr-x  15 root  wheel     1024 Apr  9 15:46 boot
dr-xr-xr-x   2 root  wheel      512 Apr  9 15:33 dev
drwxr-xr-x  27 root  wheel     2048 Apr  9 15:46 etc
-rw-r--r--   1 root  wheel        0 Apr  9 15:46 firstboot
drwxr-xr-x   3 root  wheel      512 Apr  9 15:46 home
drwxr-xr-x   5 root  wheel     1536 Apr  9 15:37 lib
drwxr-xr-x   3 root  wheel      512 Apr  9 15:35 libexec
drwxr-xr-x   2 root  wheel      512 Apr  9 15:33 media
drwxr-xr-x   2 root  wheel      512 Apr  9 15:33 mnt
drwxr-xr-x   2 root  wheel      512 Apr  9 15:33 net
dr-xr-xr-x   2 root  wheel      512 Apr  9 15:33 proc
drwxr-xr-x   2 root  wheel     2560 Apr  9 15:36 rescue
drwxr-xr-x   2 root  wheel      512 Apr  9 15:45 root
drwxr-xr-x   2 root  wheel     2560 Apr  9 15:41 sbin
drwxrwxrwt   2 root  wheel      512 Apr  9 15:33 tmp
drwxr-xr-x  13 root  wheel      512 Apr  9 15:33 usr
drwxr-xr-x  24 root  wheel      512 Apr  9 15:33 var

ネットワーク情報の設定ファイルの編集

base system 領域内のネットワーク設定ファイルに任意の静的 (固定) 情報を設定します。

IP アドレス

/mnt/etc/rc.conf の『ifconfig_DEFAULT="DHCP"』の設定をコメントアウト (または削除) して、『ifconfig_ue0=』の設定を追加します。
以下は IP アドレスを『172.16.0.200/24』とする場合の例となります。

#ifconfig_DEFAULT="DHCP"
ifconfig_ue0="inet 172.16.0.200 netmask 255.255.255.0"

ゲートウェイ

/mnt/etc/rc.conf に『defaultrouter=』の設定を追加します。
以下はゲートウェイの IP アドレスを『172.16.0.1』とする場合の例となります。

defaultrouter="172.16.0.1"

DNS サーバ

/mnt/etc/resolv.conf を新規作成して DNS サーバの設定を行います。
以下は DNS サーバを『8.8.8.8』と『8.8.4.4』とする場合の例となります。

nameserver 8.8.8.8
nameserver 8.8.4.4

base system 領域のマウント解除

base system 領域のマウントを解除します。

root@vmhost# umount /mnt

SD カードイメージファイルのデタッチ

SD カードイメージファイルをデタッチします。

root@vmhost# mdconfig -du md0

SD カードイメージファイルの圧縮

SD カードイメージファイルを圧縮します。

root@vmhost# xz FreeBSD-13.0-RELEASE-arm64-aarch64-RPI.img