Raspberry Pi 3 Model B+ 上に FreeBSD 14.0-RELEASE の環境を構築する手順です。
初期環境からの基本的な設定変更までを行います。
FreeBSD-14.0-RELEASE-arm64-aarch64-RPI.img.xz を取得します。
取得したファイルは xz 形式で圧縮されているため 7-Zip 等のツールを使用して解凍します。
『SD カードイメージファイルの書き込み』を参照して SD カードイメージファイル (FreeBSD-14.0-RELEASE-arm64-aarch64-RPI.img) を SD カードに書き込みます。
書き込みを行った SD カードを Raspberry Pi に挿入します。
本稿ではネットワーク機器へは有線での接続を行うこととします。
LAN ケーブルを Raspberry Pi に接続します。
FreeBSD の SD カードイメージファイルは DHCP クライアントならびに sshd の起動が有効化の状態で作成されています。
本稿ではネットワーク内に DHCP サーバが存在することを前提として、初回ログイン時からリモート接続での操作を行うこととします。
Raspberry Pi の電源を投入 (micro USB ケーブルを接続) します。
ユーザ名『freebsd』、パスワード『freebsd』で SSH 接続でログインします。
※Tera Term を使用してログインする場合は SSH 認証画面にて『キーボードインタラクティブ認証を使う』にチェックを入れます。
以下のプロンプトが表示されます。
freebsd@generic:~ %
root ユーザにスイッチします。
パスワードは『root』となります。
freebsd@generic:~ % su -
Password:
root@generic:~ #
初回起動時には growfs の実行によるルートパーティションの拡張が自動で行われます。
ルートパーティションのサイズが SD カードの容量となっていることを確認します。
※以下は SD カードの容量が 16G の場合の例となります。
root@generic:~ # df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ufs/rootfs 13G 3.0G 8.6G 26% /
devfs 1.0K 0B 1.0K 0% /dev
/dev/msdosfs/EFI 50M 25M 25M 50% /boot/efi
tmpfs 2.2G 4.0K 2.2G 0% /tmp
初期環境のネットワーク情報は DHCP による動的な設定となっているため、静的 (固定) 情報による設定に変更します。
dhclient を停止します。
root@generic:~ # service dhclient stop ue0
/etc/rc.conf の『ifconfig_DEFAULT="DHCP"』の設定をコメントアウト (または削除) して、『ifconfig_ue0=』の設定を追加します。
以下は IP アドレスを『172.16.0.200/24』とする場合の例となります。
#ifconfig_DEFAULT="DHCP inet6 accept_rtadv"
ifconfig_ue0="inet 172.16.0.200 netmask 255.255.255.0"
/etc/rc.conf に『defaultrouter=』の設定を追加します。
以下はゲートウェイの IP アドレスを『172.16.0.1』とする場合の例となります。
defaultrouter="172.16.0.1"
/etc/resolv.conf に DNS サーバの設定を行います。
以下は DNS サーバを『8.8.8.8』と『8.8.4.4』とする場合の例となります。
nameserver 8.8.8.8
nameserver 8.8.4.4
変更したネットワーク情報の反映を行います。
※コマンド実行後に接続が切断されます。
root@generic:~ # service netif restart
以降の手順は設定した静的 (固定) IP アドレスにて再度ログインした状態で行うこととします。
/etc/rc.conf の『hostname=』の設定を変更します。
以下はホスト名を『raspberrypi』とする場合の例となります。
#hostname="generic"
hostname="raspberrypi"
Raspberry Pi には RTC (ハードウェアクロック) が搭載されていないため、FreeBSD の起動後は現在時刻と大幅な差異がある状態となります。
起動時に ntpdate コマンド実行による時刻補正と起動後の ntpd による時刻同期の設定を行います。
本稿では時刻同期先をインターネットマルチフィード株式会社の PUBLIC NTP サーバに変更を行うこととします。
/etc/ntp.conf の時刻同期先サーバの設定を変更します。
※デフォルトでは ntpdate コマンドならびに ntpd の何れも時刻同期先の情報は /etc/ntp.conf の設定を参照します。
#pool 0.freebsd.pool.ntp.org iburst
#pool 2.freebsd.pool.ntp.org iburst
server ntp1.jst.mfeed.ad.jp iburst
server ntp2.jst.mfeed.ad.jp iburst
server ntp3.jst.mfeed.ad.jp iburst
/etc/rc.conf に『ntpdate_enable="YES"』の設定を追加します。
本稿では実行結果を /var/log/messages に出力するよう『-s』オプションの設定も併せて追加することとします。
ntpdate_enable="YES"
ntpdate_flags="-b -s"
/etc/rc.conf に『ntpd_enable="YES"』の設定を追加します。
ntpd_enable="YES"
タイムゾーンを日本 (Asia/Tokyo) に変更します。
tzsetup コマンドを実行します。
root@generic:~ # tzsetup
『Select local or UTC (Greenwich Mean Time) clock』画面が表示されます。
そのまま Enter を押下 (『Yes』を選択) します。
┌─────Select local or UTC (Greenwich Mean Time) clock ──────┐
│Is this machine's CMOS clock set to UTC? If it is set to local time, │
│or you dont' know, please choose No here! │
│ │
├───────────────────────────────────┤
│ [ Yes ] [ No ] │
└───────────────────────────────────┘
『Time Zone Selector』画面が表示されます。
『5 Asia』を選択して Enter を押下します。
┌───Time Zone Selector─────┐
│Select a region │
│┌───────────────┐│
││1 Africa ││
││2 America -- North and South ││
││3 Antarctica ││
││4 Arctic Ocean ││
││5 Asia ││
││6 Atlantic Ocean ││
││7 Australia ││
││8 Europe ││
││9 Indian Ocean ││
││10 Pacific Ocean ││
││11 UTC ││
│└───────────────┘│
├─────────────────┤
│ [ OK ] [Cancel] │
└─────────────────┘
『Countries in Asia』画面が表示されます。
『19 Japan』を選択して Enter を押下します。
┌───────Countries in Asia ────────┐
│Select a country or region │
│┌↑↑↑───────────────────┐│
││13 Hong Kong ││
││14 India ││
││15 Indonesia ││
││16 Iran (Islamic Republic of) ││
││17 Iraq ││
││18 Israel ││
││19 Japan ││
││20 Jordan ││
││21 Kazakhstan ││
││22 Korea (Democratic People's Republic of) ││
││23 Korea (Republic of) ││
││24 Kuwait ││
││25 Kyrgyzstan ││
││26 Lao People's Democratic Republic ││
││27 Lebanon ││
││28 Macao ││
│└↓↓↓────────────── 51%───┘│
├────────────────────────┤
│ [ OK ] [Cancel] │
└────────────────────────┘
『Confirmation』画面が表示されます。
そのまま Enter を押下 (『Yes』を選択) します。
┌─────────────┤Confirmation├─────────────┐
│Does the abbreviation `JST' look reasonable? │
├──────────────────────────────────┤
│ [ Yes ] [ No ] │
└──────────────────────────────────┘
コンソール接続時のキーマップの設定を日本語 (JP106) に変更します。
/etc/rc.conf に『keymap="jp"』の設定を追加します。
keymap="jp"
/etc/rc.conf の不要なシステム設定を無効化します。
growfs の実行によるルートパーティションの拡張は初回起動時以降は不要となるため無効化します。
『growfs_enable="YES"』の設定をコメントアウト (または削除) します。
#growfs_enable="YES"
ここまでの手順による設定の反映を行うため FreeBSD を再起動します。
root@generic:~ # shutdown -r now
再起動後に設定が反映されていることを確認します。
『raspberrypi』が表示されることを確認します。
root@raspberrypi:~ # uname -n
raspberrypi
/var/log/messages に時刻同期の実行結果が出力されていることを確認します。
root@raspberrypi:~ # grep ntpdate /var/log/messages
Jun 5 23:01:59 raspberrypi ntpdate[1001]: step time server 210.173.160.87 offset +17983094.068572 sec
何れかの時刻同期先サーバの先頭に『*』マークが表示されることを確認します。
root@raspberrypi:~ # ntpq -np
remote refid st t when poll reach delay offset jitter
==============================================================================
+210.173.160.27 133.243.236.17 2 u 28 64 3 7.880 +3.852 3.860
+210.173.160.57 133.243.236.18 2 u 28 64 3 7.290 +3.976 3.195
*210.173.160.87 133.243.236.19 2 u 28 64 3 7.032 +3.331 3.843
『JST』が表示されることを確認します。
root@raspberrypi:~ # date
Wed Jun 5 23:02:19 JST 2024
ブートストラップユーティリティを実行します。
pkg bootstrap コマンド実行後、確認のプロンプトが表示されます。
『y』を入力します。
root@raspberrypi:~ # pkg bootstrap
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
なおブートストラップユーティリティを実行する必要があるのは FreeBSD 環境の構築後の一度だけ (pkg コマンドの初回実行時) となります。
メタデータとリポジトリを最新化します。
root@raspberrypi:~ # pkg update
本稿では操作例として bash のインストールを行うこととします。
インストールするパッケージを検索します。
root@raspberrypi:~ # pkg search ^bash
bash-5.2.26_1 GNU Project's Bourne Again SHell
bash-completion-2.12.0,2 Programmable completion library for Bash
bash-static-5.2.26_1 GNU Project's Bourne Again SHell
bashc-5.1.8_1 GNU Bourne Again shell extended with two-panel file manager
bashdb-5.0.1.1.2_1 Source-code debugger for bash
bashtop-0.9.25_1 Linux/OSX/FreeBSD resource monitor
パッケージをインストールします。
pkg install コマンド実行後、インストール確認のプロンプトが表示されます。
『y』を入力します。
root@raspberrypi:~ # pkg install bash
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
Updating database digests format: 100%
The following 4 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
bash: 5.2.26_1
gettext-runtime: 0.22.5
indexinfo: 0.3.1
readline: 8.2.10
Number of packages to be installed: 4
The process will require 12 MiB more space.
2 MiB to be downloaded.
Proceed with this action? [y/N]: y
root ユーザのパスワードを予め設定されているものから変更します。
root@raspberrypi:~ # passwd root
Changing local password for root
New Password:
Retype New Password:
以下例の情報の通り一般ユーザの作成を行います。
なお root ユーザへのスイッチを可能とするため wheel グループにも所属させます。
※デフォルトでは wheel グループに所属しているユーザのみ root ユーザへのスイッチが可能に設定されています。
ユーザ名 | admin |
---|---|
プライマリグループ | admin ※未指定時のデフォルト |
追加グループ | wheel |
ホームディレクトリ | /home/admin ※未指定時のデフォルト |
ログインシェル | /bin/sh ※未指定時のデフォルト |
root@raspberrypi:~ # pw useradd admin -G wheel -m
作成した一般ユーザのパスワードを設定します。
root@raspberrypi:~ # passwd admin
Changing local password for admin
New Password:
Retype New Password:
本稿では操作例として UTF-8 への変更を行うこととします。
~/.login_conf に以下の設定を追加します。
me:\
:charset=UTF-8:\
:lang=ja_JP.UTF-8:
本稿では操作例として bash への変更を行うこととします。
chsh コマンド実行後、パスワード入力のプロンプトが表示されます。
パスワードを入力して Enter を押下します。
admin@raspberrypi:~ $ chsh -s /usr/local/bin/bash
Password:
既存の一般ユーザ『freebsd』を削除します。
※削除対象のユーザ以外でログインした状態で行います。
root@raspberrypi:~ # pw userdel freebsd -r
『SD カード全体のバックアップ』を参照して適宜 FreeBSD 環境のシステムバックアップを行います。