FreeBSD (15.0) を VirtualBox にインストールする覚書
環境構築編: 前編 (基本設定から統合デスクトップのインストールまで)

「Oracle VirtualBox マネージャー」の画面で、「fb150」が選択された状態で『起動』押す!

以下、必ずしも書いていないが、作業時間の都合で適宜シャットダウン・電源 ON している箇所がある。

● FreeBSD を最新に更新

root でログイン。

freebsd-update fetch を実行する。

(なおこれはインストール後も定期的に行った方が良いもの。 後述)


root@fb150:~ # freebsd-update fetch
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching public key from update1.freebsd.org... done.
Fetching metadata signature for 15.0-RELEASE from update1.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 57 patches.....10....20....30....40....50... done.
Applying patches... done.
The following files will be updated as part of updating to
15.0-RELEASE-p3:
/bin/freebsd-version
/boot/kernel/kernel
/boot/kernel/vmm.ko
/boot/kernel/zfs.ko
/lib/libcrypto.so.35
/rescue/[
〜

ちなみに、ここで uname -a を実行した所、以下のようであった。


root@fb150:~ # uname -a
FreeBSD fb150.nsmrtks.jp 15.0-RELEASE FreeBSD 15.0-RELEASE releng/15.0-n280995-7aedc8de6446 GENERIC amd64

また、freebsd-version -ku を実行した所、以下のようであった。

-k はカーネルの情報を、-u はユーザランドの情報を表示するオプションである。

root@fb150:~ # freebsd-version -ku
15.0-RELEASE
15.0-RELEASE

次に freebsd-update install を実行する。


root@fb150:~ # freebsd-update install
Creating snapshot of existing boot environment... done.
Installing updates...
Restarting sshd after upgrade
Performing sanity check on sshd configuration.
Stopping sshd.
Performing sanity check on sshd configuration.
Starting sshd.
 done.

今回 kernel に関係しそうな更新も見えており、ここで再起動する。 (あるいはひとしきり作業を続けた後に再起動してもいいだろう)


root@fb150:~ # reboot

再び root でログインし、uname -a を実行した所、今度は以下のようであった。


root@fb150:~ # uname -a
FreeBSD fb150.nsmrtks.jp 15.0-RELEASE-p2 FreeBSD 15.0-RELEASE-p2 GENERIC amd64

また、freebsd-version -ku を実行した所、今度は以下のようであった。


root@fb150:~ # freebsd-version -ku
15.0-RELEASE-p2
15.0-RELEASE-p3

● ネットワークインターフェイスの残りを設定

まず、ここで初めて /etc/rc.conf を編集するので、元のファイルを rc.conf.BACK にコピーしておいた。


root@fb150:~ # cd /etc

root@fb150:/etc # cp -ip rc.conf rc.conf.BACK

そうして、/etc/rc.conf ファイルを編集する。


root@fb150:/etc # vi /etc/rc.conf

以下を追記。 (同ファイル内の上の方に似たような行があるのでそれをコピーすると入力の手間を省ける)


# 2026-02-13 nsmrtks
ifconfig_em1=""
ifconfig_em1_ipv6="inet6 accept_rtadv"
ifconfig_em2="inet 192.168.56.150 netmask 255.255.255.0"
ifconfig_em2_ipv6="inet6 accept_rtadv"

ここで、em2 に与えた 192.168.56.150 などという固定 IPv4 アドレスについては、em2 には VirtualBox の DHCP サーバがいるのだが、そのアドレス範囲と重複しないように、「ファイル」→「ツール」→「ネットワーク」→「ホストオンリーネットワーク」の「DHCP サーバー」の設定を変更してある。 (初期状態では重複していた)

(変更後)

DHCP after

ここで reboot すると、以下のように IP アドレスが割り当たっていた。 (vtnet0 は未割り当て)


root@fb150:~ # ifconfig -a
em0: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
	options=48505bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,LRO,VLAN_HWFILTER,VLAN_HWTSO,HWSTATS,MEXTPG>
	ether 08:00:27:0d:05:db
	inet 10.0.2.15 netmask 0xffffff00 broadcast 10.0.2.255
	inet6 fe80::a00:27ff:fe0d:5db%em0 prefixlen 64 scopeid 0x1
	inet6 fd17:625c:f037:2:a00:27ff:fe0d:5db prefixlen 64 autoconf pltime 14400 vltime 86400
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
em1: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
	options=48505bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,LRO,VLAN_HWFILTER,VLAN_HWTSO,HWSTATS,MEXTPG>
	ether 08:00:27:b0:95:50
	inet6 fe80::a00:27ff:feb0:9550%em1 prefixlen 64 scopeid 0x2
	inet6 〜〜:〜〜:〜〜:〜〜:〜〜:〜〜:〜〜:〜〜 prefixlen 64 autoconf pltime 12600 vltime 14400
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
em2: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
	options=48505bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,LRO,VLAN_HWFILTER,VLAN_HWTSO,HWSTATS,MEXTPG>
	ether 08:00:27:9b:07:da
	inet 192.168.56.150 netmask 0xffffff00 broadcast 192.168.56.255
	inet6 fe80::a00:27ff:fe9b:7da%em2 prefixlen 64 scopeid 0x3
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
vtnet0: flags=1008802<BROADCAST,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
	options=ec07bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,LRO,VLAN_HWTSO,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6,HWSTATS>
	ether 08:00:27:8d:3f:ce
	media: Ethernet autoselect (10Gbase-T <full-duplex>)
	status: active
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
lo0: flags=1008049<UP,LOOPBACK,RUNNING,MULTICAST,LOWER_UP> metric 0 mtu 16384
	options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
	inet 127.0.0.1 netmask 0xff000000
	inet6 ::1 prefixlen 128
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x5
	groups: lo
	nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>

● /tmp を Memory Disk に

これは必須ではないが、高速化を図るため、設定してみる。

ここで今回、/tmp は ZFS のパーティションになっている。


root@fb150:~ # df -h
Filesystem            Size    Used   Avail Capacity  Mounted on
zroot/ROOT/default     31G    1.0G     30G     3%    /
devfs                 1.0K      0B    1.0K     0%    /dev
zroot/tmp              30G     96K     30G     0%    /tmp               ←ココ
zroot/home             30G     96K     30G     0%    /home
zroot/var/log          30G    160K     30G     0%    /var/log
zroot                  30G     96K     30G     0%    /zroot
zroot/usr/ports        30G     96K     30G     0%    /usr/ports
zroot/usr/src          31G    980M     30G     3%    /usr/src
zroot/var/audit        30G     96K     30G     0%    /var/audit
zroot/var/crash        30G     96K     30G     0%    /var/crash
zroot/var/mail         30G     96K     30G     0%    /var/mail
zroot/var/tmp          30G     96K     30G     0%    /var/tmp
zroot/home/nsmrtks     30G    128K     30G     0%    /home/nsmrtks

ちなみにその /tmp は、ZFS の機能で圧縮される設定にもなっていた。


root@fb150:~ # zfs get compression
NAME                                       PROPERTY     VALUE           SOURCE
zroot                                      compression  on              local
zroot/ROOT                                 compression  on              inherited from zroot
zroot/ROOT/15.0-RELEASE_2026-02-13_140813  compression  on              inherited from zroot
zroot/ROOT/default                         compression  on              inherited from zroot
zroot/ROOT/default@2026-02-13-14:08:13-0   compression  -               -
zroot/home                                 compression  on              inherited from zroot
zroot/home/nsmrtks                         compression  on              inherited from zroot
zroot/tmp                                  compression  on              inherited from zroot    ←ココ
zroot/usr                                  compression  on              inherited from zroot
zroot/usr/ports                            compression  on              inherited from zroot
zroot/usr/src                              compression  on              inherited from zroot
zroot/var                                  compression  on              inherited from zroot
zroot/var/audit                            compression  on              inherited from zroot
zroot/var/crash                            compression  on              inherited from zroot
zroot/var/log                              compression  on              inherited from zroot
zroot/var/mail                             compression  on              inherited from zroot
zroot/var/tmp                              compression  on              inherited from zroot

今回、/tmp を Memory Disk にすると、ZFS のパーティションにする必然性がないため、この ZFS パーティションを削除する。

なお、現在の /tmp には、何やらディレクトリが存在しているようだが、これらは削除しても問題ないであろう。


root@fb150:~ # ls -lRA /tmp
total 2
drwxrwxrwt  2 root wheel 2 Feb 16 12:08 .ICE-unix
drwxrwxrwt  2 root wheel 2 Feb 16 12:08 .X11-unix
drwxrwxrwt  2 root wheel 2 Feb 16 12:08 .XIM-unix
drwxrwxrwt  2 root wheel 2 Feb 16 12:08 .font-unix

/tmp/.ICE-unix:
total 0

/tmp/.X11-unix:
total 0

/tmp/.XIM-unix:
total 0

/tmp/.font-unix:
total 0

ZFS パーティションを削除するには、zfs destroy コマンドを使う。
zfs destroy に、df コマンドで /tmp として見えていた zroot/tmp を指定して削除する。 (くれぐれも違うパーティションを削除しないように注意!)


root@fb150:~ # zfs destroy zroot/tmp

/tmp パーティション (zroot/tmp) が削除された。


root@fb150:~ # df -h
Filesystem            Size    Used   Avail Capacity  Mounted on
zroot/ROOT/default     31G    1.0G     30G     3%    /
devfs                 1.0K      0B    1.0K     0%    /dev
zroot/var/log          30G    164K     30G     0%    /var/log
zroot/home             30G     96K     30G     0%    /home
zroot                  30G     96K     30G     0%    /zroot
zroot/usr/src          31G    980M     30G     3%    /usr/src
zroot/var/audit        30G     96K     30G     0%    /var/audit
zroot/usr/ports        30G     96K     30G     0%    /usr/ports
zroot/var/crash        30G     96K     30G     0%    /var/crash
zroot/var/mail         30G     96K     30G     0%    /var/mail
zroot/var/tmp          30G     96K     30G     0%    /var/tmp
zroot/home/nsmrtks     30G    128K     30G     0%    /home/nsmrtks

なお /tmp ディレクトリはそのまま残っている。 (中身は空となった)


root@fb150:~ # ls -ld /tmp
drwxr-xr-x  2 root wheel 2 Feb 16 12:08 /tmp

root@fb150:~ # ls -a /tmp
.	..

ここからが、/tmp を Memory Disk にする設定である。

/etc/rc.conf に追記するために、まずは以下のようにする。 (「>>」で追記する。 間違って「>」で上書きしないように注意する。)


root@fb150:~ # egrep ^tmp /etc/defaults/rc.conf >> /etc/rc.conf

次に


root@fb150:~ # vi /etc/rc.conf

追記した部分が以下などのようになるように編集。


# 2026-02-16 nsmrtks
tmpmfs="YES"		# Set to YES to always create an mfs /tmp, NO to never
tmpsize="7g"		# Size of mfs /tmp if created

tmpsize を 7GB (7g) にしているのは、これくらいないと ports のコンパイル (後述) で /tmp が溢れた記憶がある。
(ちなみに NetBSD のインストーラではメモリーサイズの 25% がデフォルトだったように思う)

念のため /tmp に何も残っていないことをいまいちど確認して、reboot してみる。


root@fb150:~ # ls -a /tmp
.	..

root@fb150:~ # sync

root@fb150:~ # reboot

reboot 後、/tmp が正しく Memory Disk になっていた。


root@fb150:~ # df -h
Filesystem            Size    Used   Avail Capacity  Mounted on
zroot/ROOT/default     31G    1.0G     30G     3%    /
devfs                 1.0K      0B    1.0K     0%    /dev
tmpfs                 7.0G    4.0K    7.0G     0%    /tmp
zroot/var/log          30G    164K     30G     0%    /var/log
zroot                  30G     96K     30G     0%    /zroot
zroot/home             30G     96K     30G     0%    /home
zroot/usr/src          31G    980M     30G     3%    /usr/src
zroot/usr/ports        30G     96K     30G     0%    /usr/ports
zroot/var/crash        30G     96K     30G     0%    /var/crash
zroot/var/mail         30G     96K     30G     0%    /var/mail
zroot/var/tmp          30G     96K     30G     0%    /var/tmp
zroot/var/audit        30G     96K     30G     0%    /var/audit
zroot/home/nsmrtks     30G    128K     30G     0%    /home/nsmrtks

root@fb150:~ # ls -al /tmp
total 9
drwxrwxrwt   6 root wheel 256 Feb 16 13:35 .
drwxr-xr-x  20 root wheel  23 Feb 16 13:34 ..
drwxrwxrwt   2 root wheel   0 Feb 16 13:35 .ICE-unix
drwxrwxrwt   2 root wheel   0 Feb 16 13:35 .X11-unix
drwxrwxrwt   2 root wheel   0 Feb 16 13:35 .XIM-unix
drwxrwxrwt   2 root wheel   0 Feb 16 13:35 .font-unix

● /etc/hosts の設定

少し筆者の環境に特有の話である。

現在の /etc/hosts の内容を一応バックアップしておき..


root@fb150:~ # cd /etc

root@fb150:/etc # ls -ld hosts*
-rw-r--r--  1 root wheel 1035 Nov 28 12:45 hosts
-rw-r--r--  1 root wheel 3385 Nov 28 12:46 hosts.allow
-rw-r--r--  1 root wheel   41 Nov 28 12:45 hosts.equiv
-rw-r--r--  1 root wheel   31 Nov 28 12:43 hosts.lpd

root@fb150:/etc # cp -ip hosts hosts.ORIG

筆者の旧環境 (fb140 というもの) の /etc/hosts (様々なホストの IP アドレスが書かれている) を scp してきて..


root@fb150:/etc # cd

root@fb150:~ # scp -p nsmrtks@192.168.56.140:/etc/hosts .
〜

root@fb150:~ # ls -ld hosts
-rw-r--r--  1 root wheel 4364 Nov 11 10:26 hosts

fb150 (即ちこの新環境) の /etc/hosts と結合して、重複を調整しつつ..


root@fb150:~ # cat hosts >> /etc/hosts

root@fb150:~ # vi /etc/hosts

fb150 の IPv6 アドレス (リンクローカルアドレス) も以下のように追加しておいた。 (このリンクローカルアドレスは、上や下で実行している ifconfig コマンドで見えている)


# 2026-02-16 nsmrtks
fe80::a00:27ff:fe9b:7da%em2		fb150.nsmrtks.jp	fb150	fb150c

先ほども scp してみせた通り、同じホスト上の VirtualBox の仮想マシンどうしは、「ホストオンリーアダプター」を通して通信できる。 それは、これまでの経緯により、fb150 においては 仮想マシンの作成 時に「アダプター3」として割り当てており、em2 として見えている。


root@fb150:~ # ifconfig em2
em2: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
	options=48505bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,LRO,VLAN_HWFILTER,VLAN_HWTSO,HWSTATS,MEXTPG>
	ether 08:00:27:9b:07:da
	inet 192.168.56.150 netmask 0xffffff00 broadcast 192.168.56.255
	inet6 fe80::a00:27ff:fe9b:7da%em2 prefixlen 64 scopeid 0x3
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>

筆者の旧環境 (fb140) の、(リンクローカル) IPv6 アドレスを /etc/hosts に記述したので、そのホスト名で通信 (ping6) できることを確認。 (確認したら Ctrl-c で中止)


root@fb150:~ # ping6 fb140c
PING(56=40+8+8 bytes) fe80::a00:27ff:fe9b:7da%em2 --> fe80::a00:27ff:fe25:aeaf%em2
16 bytes from fe80::a00:27ff:fe25:aeaf%em2, icmp_seq=0 hlim=64 time=10.526 ms
16 bytes from fe80::a00:27ff:fe25:aeaf%em2, icmp_seq=1 hlim=64 time=39.330 ms
16 bytes from fe80::a00:27ff:fe25:aeaf%em2, icmp_seq=2 hlim=64 time=7.532 ms
^C
--- fb140.magic.or ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 7.532/19.129/39.330/14.336 ms

● ZFS の設定

筆者は、FreeBSD 14.x の旧環境では、インストーラでパーティション作成時に「Auto (ZFS)」でなく「Auto (UFS)」の方を選択し、後から手動で /usr/ports と /usr/local と /home/nsmrtks を ZFS で作成するということをしていた。

今回、/usr/ports と /home/nsmrtks は、既に ZFS のパーティションになっていた。


root@fb150:~ # df -h
Filesystem            Size    Used   Avail Capacity  Mounted on
zroot/ROOT/default     31G    1.0G     30G     3%    /
devfs                 1.0K      0B    1.0K     0%    /dev
tmpfs                 7.0G    4.0K    7.0G     0%    /tmp
zroot/var/log          30G    168K     30G     0%    /var/log
zroot                  30G     96K     30G     0%    /zroot
zroot/home             30G     96K     30G     0%    /home
zroot/usr/ports        30G     96K     30G     0%    /usr/ports         ←ココ
zroot/usr/src          31G    980M     30G     3%    /usr/src
zroot/var/crash        30G     96K     30G     0%    /var/crash
zroot/var/audit        30G     96K     30G     0%    /var/audit
zroot/var/mail         30G     96K     30G     0%    /var/mail
zroot/var/tmp          30G     96K     30G     0%    /var/tmp
zroot/home/nsmrtks     30G    128K     30G     0%    /home/nsmrtks      ←ココ

その一方、/usr/local は、空のディレクトリのみ存在するものの、ZFS のパーティションにはなっていないようだ。

これは好みの問題かも知れないが、今回、せっかくなので /usr/local も ZFS のパーティションを分けたい。
そうすれば、少なくとも /usr/local の使用量が df コマンドでひと目で分かるという利点はある。 (それくらいしかない?)

場合によっては /usr/local が空ではなく既に中身が存在していることがあるので注意。

/home/nsmrtks は、旧環境から持ってくる予定があるが (後述)、15.0 のインストーラが作成した中身が既に存在しており (たいした中身ではないが)、一応バックアップしておく。
ファイルを移動することにより、バックアップすると同時に、/home/nsmrtks ディレクトリを空にする。 (なお親ディレクトリの /home 自体も ZFS のパーティションである。)


root@fb150:~ # cd /home

root@fb150:/home # ls -al
total 18
drwxr-xr-x   3 root    wheel    3 Feb 12 13:45 .
drwxr-xr-x  20 root    wheel   23 Feb 18 13:10 ..
drwxr-xr-x   2 nsmrtks nsmrtks  9 Feb 12 13:45 nsmrtks

root@fb150:/home # mkdir nsmrtks.BACK

root@fb150:/home # cd nsmrtks

root@fb150:/home/nsmrtks # ls -al
total 37
drwxr-xr-x  2 nsmrtks nsmrtks    9 Feb 12 13:45 .
drwxr-xr-x  4 root    wheel      4 Feb 18 13:15 ..
-rw-r--r--  1 nsmrtks nsmrtks  950 Feb 12 13:45 .cshrc
-rw-r--r--  1 nsmrtks nsmrtks  311 Feb 12 13:45 .login
-rw-r--r--  1 nsmrtks nsmrtks   79 Feb 12 13:45 .login_conf
-rw-------  1 nsmrtks nsmrtks  289 Feb 12 13:45 .mail_aliases
-rw-r--r--  1 nsmrtks nsmrtks  255 Feb 12 13:45 .mailrc
-rw-r--r--  1 nsmrtks nsmrtks  966 Feb 12 13:45 .profile
-rw-r--r--  1 nsmrtks nsmrtks 1042 Feb 12 13:45 .shrc

root@fb150:/home/nsmrtks # mv -i .cshrc .login* .mail* .profile .shrc ../nsmrtks.BACK/

root@fb150:/home/nsmrtks # ls -a
.	..

root@fb150:/home/nsmrtks # cd ..

root@fb150:/home # ls -al *
nsmrtks:
total 1
drwxr-xr-x  2 nsmrtks nsmrtks 2 Feb 18 13:16 .
drwxr-xr-x  4 root    wheel   4 Feb 18 13:15 ..

nsmrtks.BACK:
total 37
drwxr-xr-x  2 root    wheel      9 Feb 18 13:16 .
drwxr-xr-x  4 root    wheel      4 Feb 18 13:15 ..
-rw-r--r--  1 nsmrtks nsmrtks  950 Feb 12 13:45 .cshrc
-rw-r--r--  1 nsmrtks nsmrtks  311 Feb 12 13:45 .login
-rw-r--r--  1 nsmrtks nsmrtks   79 Feb 12 13:45 .login_conf
-rw-------  1 nsmrtks nsmrtks  289 Feb 12 13:45 .mail_aliases
-rw-r--r--  1 nsmrtks nsmrtks  255 Feb 12 13:45 .mailrc
-rw-r--r--  1 nsmrtks nsmrtks  966 Feb 12 13:45 .profile
-rw-r--r--  1 nsmrtks nsmrtks 1042 Feb 12 13:45 .shrc

/usr/ports の中身は空であった。 /usr/local の中身も空である。


root@fb150:~ # ls -a /usr/ports/
.	..

root@fb150:~ # ls -a /usr/local/
.	..

それでは /usr/local の ZFS パーティション (ファイルシステム) を作成していく。

今回、ZFS のプールは既に存在しているので、zpool create の実行は不要である。

zfs create で /usr/local 用の ZFS ファイルシステムを作成する。
既存の /usr/ports や /usr/src に合わせ、zroot/usr/local という所に作成する。
mountpoint も同時に設定することにする。 (以前は /usr/local を、mountpoint にする代わりに、シンボリックリンクにしていたが、ports のビルドが正常にいかないことがあることが分かった。)


root@fb150:~ # zfs create -o mountpoint=/usr/local zroot/usr/local

zroot/usr/local が作成され、/usr/local にマウントされた。


root@fb150:~ # df -h
Filesystem            Size    Used   Avail Capacity  Mounted on
zroot/ROOT/default     31G    1.0G     30G     3%    /
devfs                 1.0K      0B    1.0K     0%    /dev
tmpfs                 7.0G    4.0K    7.0G     0%    /tmp
zroot/var/log          30G    168K     30G     0%    /var/log
zroot                  30G     96K     30G     0%    /zroot
zroot/home             30G    128K     30G     0%    /home
zroot/usr/ports        30G     96K     30G     0%    /usr/ports
zroot/usr/src          31G    980M     30G     3%    /usr/src
zroot/var/crash        30G     96K     30G     0%    /var/crash
zroot/var/audit        30G     96K     30G     0%    /var/audit
zroot/var/mail         30G     96K     30G     0%    /var/mail
zroot/var/tmp          30G     96K     30G     0%    /var/tmp
zroot/home/nsmrtks     30G     96K     30G     0%    /home/nsmrtks
zroot/usr/local        30G     96K     30G     0%    /usr/local         ←ココ

compression も on に設定されている。


root@fb150:~ # zfs get compression
NAME                                       PROPERTY     VALUE           SOURCE
zroot                                      compression  on              local
zroot/ROOT                                 compression  on              inherited from zroot
zroot/ROOT/15.0-RELEASE_2026-02-13_140813  compression  on              inherited from zroot
zroot/ROOT/default                         compression  on              inherited from zroot
zroot/ROOT/default@2026-02-13-14:08:13-0   compression  -               -
zroot/home                                 compression  on              inherited from zroot
zroot/home/nsmrtks                         compression  on              inherited from zroot
zroot/usr                                  compression  on              inherited from zroot
zroot/usr/local                            compression  on              inherited from zroot    ←ココ
zroot/usr/ports                            compression  on              inherited from zroot
zroot/usr/src                              compression  on              inherited from zroot
zroot/var                                  compression  on              inherited from zroot
zroot/var/audit                            compression  on              inherited from zroot
zroot/var/crash                            compression  on              inherited from zroot
zroot/var/log                              compression  on              inherited from zroot
zroot/var/mail                             compression  on              inherited from zroot
zroot/var/tmp                              compression  on              inherited from zroot

ZFS と直接関係ないが、ここで /usr/ports の所有者を root から nsmrtks (自ユーザ) に変更しておいた。


root@fb150:~ # ls -l /usr
total 127
drwxr-xr-x   2 root wheel 483 Feb 13 14:08 bin
drwxr-xr-x  58 root wheel 307 Nov 28 12:46 include
drwxr-xr-x  13 root wheel 578 Feb 13 14:08 lib
drwxr-xr-x  10 root wheel 592 Feb 13 14:08 lib32
drwxr-xr-x   4 root wheel   4 Nov 28 12:42 libdata
drwxr-xr-x  12 root wheel  66 Nov 28 12:45 libexec
drwxr-xr-x   2 root wheel   2 Feb 18 13:18 local
drwxr-xr-x   2 root wheel   2 Nov 28 12:42 obj
drwxr-xr-x   2 root wheel   2 Feb 12 13:24 ports        ←ココ
drwxr-xr-x   2 root wheel 299 Feb 13 14:08 sbin
drwxr-xr-x  37 root wheel  37 Nov 28 12:43 share
drwxr-xr-x  27 root wheel  48 Feb 12 13:25 src
drwxr-xr-x  18 root wheel  18 Nov 28 12:42 tests

root@fb150:~ # chown nsmrtks /usr/ports

root@fb150:~ # ls -l /usr
total 127
drwxr-xr-x   2 root    wheel 483 Feb 13 14:08 bin
drwxr-xr-x  58 root    wheel 307 Nov 28 12:46 include
drwxr-xr-x  13 root    wheel 578 Feb 13 14:08 lib
drwxr-xr-x  10 root    wheel 592 Feb 13 14:08 lib32
drwxr-xr-x   4 root    wheel   4 Nov 28 12:42 libdata
drwxr-xr-x  12 root    wheel  66 Nov 28 12:45 libexec
drwxr-xr-x   2 root    wheel   2 Feb 18 13:18 local
drwxr-xr-x   2 root    wheel   2 Nov 28 12:42 obj
drwxr-xr-x   2 nsmrtks wheel   2 Feb 12 13:24 ports     ←ココ
drwxr-xr-x   2 root    wheel 299 Feb 13 14:08 sbin
drwxr-xr-x  37 root    wheel  37 Nov 28 12:43 share
drwxr-xr-x  27 root    wheel  48 Feb 12 13:25 src
drwxr-xr-x  18 root    wheel  18 Nov 28 12:42 tests

● /usr/ports/distfiles 用のディスクをマウント

これも筆者の環境だけかもしれない。

筆者は、/usr/ports/distfiles (ports でビルドを行う時に取得してきたファイルが置かれる場所) を、VirtualBox の仮想ディスクごと分離している。 (サイズは 20GB)
そして、旧環境から新環境へ移行する際には、(内容を残したまま) マウントを付け替えることにしている。

今回まさに旧環境から新環境へ移行する。

まず旧環境にて、distfiles の仮想ディスクを umount し、/etc/fstab 及び /etc/exports (後述) のエントリもコメントアウトした。

いったん旧環境をシャットダウン・電源 OFF する。 新環境 (fb150) もシャットダウン・電源 OFF する。

VirtualBox にて、旧環境 (fb140) の distfiles の仮想ディスクは、以下に見えている、「コントローラー: LsiLogic SAS」配下にある distfiles20.vdi である。

distfiles old

そうしたら、『ファイル』→『ツール』→『メディア』に見えている distfiles20.vdi を選択し.. (以下では下の方にある『情報』のタブも押している)

distfiles

..『解放』を押すと、

kaiho

..ダイアログが出るので「解放」を押すと、distfiles20.vdi が、以下のように「未割り当て」になった (『情報』のタブを押して確認できる)。

miwariate

旧環境 (fb140) の設定のストレージからも、LsiLogic SAS 配下にあった distfiles20.vdi が、以下のように、いなくなった。

全くの筆者の環境の話だが、このように distfiles20.vdi を開放すると、旧環境から見たディスクの番号がずれてしまい、次に旧環境を起動した時に、ufs.vdi (下に見えている) が mount 出来なくなって起動途中で止まってしまった。 起動途中のシェルで ed コマンドで /etc/fstab を編集して修復するはめになった。 なお ports20.vdi というものも見えているが、こちらは ZFS のディスクなのだが、何もしなくても自動的に ZFS に認識されていた。

no distfiles

今度は、新環境 (fb150) のストレージの設定にて、以下のようになっているが..

storage

下の方の「◆」に「+」のアイコン (「コントローラーを追加」) を押し、「LsiLogic SAS (SAS)」を選択する。 (SAS にしなくてもよいが深い理由はない)

SAS added

「コントローラー: LsiLogic SAS」が追加された。

さらに、「コントローラー: LsiLogic SAS」の右側の方にある「■」に「+」のようなアイコン (「ハードディスクを追加」) を選択し、「追加」を押したら、distfiles20.vdi ファイルを探して「開く」を押し、「選択」すると、

attach virtual disk

もしかしたら、上記の『追加』を押す手順は必要なく、「Not Attached」の所にある distfiles20.vdi を選択するだけでよかったのかもしれない? 再確認したかったがわからなくなった。

「コントローラー: LsiLogic SAS」配下に distfiles20.vdi が現れた。

virtual disk attached

忘れずに「OK」押す。

さて、新環境 (fb150) を再び起動する。
追加した仮想ハードディスクは以下のように見えている。 (起動時に表示される他 dmesg コマンドでも後から確認できる) (警告のようなものが出ているのが気になるな..)


〜
da0 at mpt0 bus 0 scbus2 target 0 lun 0
da0: <VBOX HARDDISK 1.0> Fixed Direct Access SPC-3 SCSI device
da0: 300.000MB/s transfers
da0: Command Queueing enabled
da0: 20480MB (41943040 512 byte sectors)
(da0:mpt0:0:0:0): CACHE PAGE TOO SHORT data len 15 desc len 0
(da0:mpt0:0:0:0): Mode page 8 missing, disabling SYNCHRONIZE CACHE
〜

今回、/home/distfiles というディレクトリにマウントすることとし、/usr/ports/distfiles からシンボリックリンクを張ることとする。
(なぜ /usr/ports/distfiles に直接マウントしないかというと、/home/ の下の distfiles/ を NFS エクスポートしたいという事情がある。)

ここで初めて /etc/fstab の編集を行うので、念のため元の /etc/fstab をコピーしておいた。 そうして /etc/fstab を編集した。


root@fb150:~ # cp -ip /etc/fstab  /etc/fstab.ORIG

root@fb150:~ # vi /etc/fstab

以下のような行を /etc/fstab に追記した。 (注: 以下だとオプションが足りない。後述。)


# 2026-02-20 nsmrtks
/dev/da0p1              /home/distfiles ufs     rw              2       2

/home/distfiles ディレクトリを作成したら、 /home/distfiles を手動で mount してみて、見えているか確認した。

以下に見えているように、chown しなくても、mount すると、以前設定されたオーナーになる。

root@fb150:~ # mkdir /home/distfiles

root@fb150:~ # ls -l /home
total 10
drwxr-xr-x  2 root    wheel   2 Feb 20 15:06 distfiles
drwxr-xr-x  2 nsmrtks nsmrtks 2 Feb 18 13:16 nsmrtks
drwxr-xr-x  2 root    wheel   9 Feb 18 13:16 nsmrtks.BACK

root@fb150:~ # mount /home/distfiles

root@fb150:~ # ls -l /home
total 53
drwxr-xr-x  45 nsmrtks wheel   45056 Feb 20 12:36 distfiles
drwxr-xr-x   2 nsmrtks nsmrtks     2 Feb 18 13:16 nsmrtks
drwxr-xr-x   2 root    wheel       9 Feb 18 13:16 nsmrtks.BACK

root@fb150:~ # ls /home/distfiles
〜 (既にファイルが存在しているのでたくさん表示される)

root@fb150:~ # df -h
Filesystem            Size    Used   Avail Capacity  Mounted on
zroot/ROOT/default     31G    1.0G     30G     3%    /
devfs                 1.0K      0B    1.0K     0%    /dev
tmpfs                 7.0G    4.0K    7.0G     0%    /tmp
zroot/var/log          30G    188K     30G     0%    /var/log
zroot/home             30G    128K     30G     0%    /home
zroot/usr/local        30G     96K     30G     0%    /usr/local
zroot                  30G     96K     30G     0%    /zroot
zroot/usr/ports        30G     96K     30G     0%    /usr/ports
zroot/usr/src          31G    980M     30G     3%    /usr/src
zroot/var/audit        30G     96K     30G     0%    /var/audit
zroot/var/crash        30G     96K     30G     0%    /var/crash
zroot/var/mail         30G     96K     30G     0%    /var/mail
zroot/var/tmp          30G     96K     30G     0%    /var/tmp
zroot/home/nsmrtks     30G     96K     30G     0%    /home/nsmrtks
/dev/da0p1             19G     13G    5.1G    71%    /home/distfiles    ←ココ

root@fb150:~ # mount
zroot/ROOT/default on / (zfs, local, noatime, nfsv4acls)
devfs on /dev (devfs)
tmpfs on /tmp (tmpfs, local)
zroot/var/log on /var/log (zfs, local, noatime, noexec, nosuid, nfsv4acls)
zroot/home on /home (zfs, local, noatime, nfsv4acls)
zroot/usr/local on /usr/local (zfs, local, noatime, nfsv4acls)
zroot on /zroot (zfs, local, noatime, nfsv4acls)
zroot/usr/ports on /usr/ports (zfs, local, noatime, nosuid, nfsv4acls)
zroot/usr/src on /usr/src (zfs, local, noatime, nfsv4acls)
zroot/var/audit on /var/audit (zfs, local, noatime, noexec, nosuid, nfsv4acls)
zroot/var/crash on /var/crash (zfs, local, noatime, noexec, nosuid, nfsv4acls)
zroot/var/mail on /var/mail (zfs, local, nfsv4acls)
zroot/var/tmp on /var/tmp (zfs, local, noatime, nosuid, nfsv4acls)
zroot/home/nsmrtks on /home/nsmrtks (zfs, local, noatime, nfsv4acls)
/dev/da0p1 on /home/distfiles (ufs, local, soft-updates, journaled soft-updates)        ←ココ

これでいけるかと思ったが、一旦シャットダウンして起動すると、/home/distfiles を mount する所でこけた。

mounting distfiles failed

/home が ZFS になっていて、/home/distfiles を mount しようとした時点で ZFS の準備が未だ出来ていないためらしい。

/etc/rc.d/mountlate というファイルを参照し、/etc/fstab の distfiles の所に、late というオプションを付ける。


# 2026-02-20,24 nsmrtks (we need 'late' for ZFS /home)
/dev/da0p1              /home/distfiles ufs     rw,late         2       2

これで reboot すると、正常に起動することを確認した。

あとは /usr/ports/distfiles -> /home/distfiles というシンボリックリンクを作成しないといけないが、ports の初回取得 (後述) に影響するので、ここではなく後で作成する。

● ホームディレクトリの事前コピー

これも筆者の環境だけかもしれない。

筆者は、新環境 (今回でいうと今インストール中の「fb150」) を立ち上げたら、旧環境で運用していたホームディレクトリを新環境にコピーして移行することにしている。
df コマンドで数 GB と表示されているファイル群なので、コピーにそれなりの時間を要する。 コピーの間じゅう、環境が使えないのは不便なので、あらかたの内容をここで事前にコピーしておき、最後に残りをコピーすることにする。

コピーは、以下に示すように ssh と tar を組み合わせて行った。

rsync でコピーしたい所だがこの時点で fb150 に未だ rsync が入っていない。
scp -pr でコピーしようかとも思ったが、scp(1) にある通り (以下を参照)、それだとシンボリックリンクが保存されない (事前に実験もして確かめた)。
     -r      Recursively copy entire directories.  Note that scp follows
             symbolic links encountered in the tree traversal.

root@fb150:~ # cd /home/nsmrtks

root@fb150:/home/nsmrtks # ls -a
.	..

root@fb150:/home/nsmrtks # date ; ssh nsmrtks@fb140 tar cf - . | tar xpf - ; date
Tue Feb 24 10:06:49 JST 2026
(nsmrtks@fb140.magic.or) Password for nsmrtks@fb140.magic.or:
〜 (以下のような pax format cannot archive sockets という行が 23行ほど出る)
tar: ./.uim.d/socket/uim-helper: ./.uim.d/socket/uim-helper: pax format cannot archive sockets
〜
Tue Feb 24 11:05:34 JST 2026

root@fb150:/home/nsmrtks # ls -la
total 922
〜

root@fb150:/home/nsmrtks # df -h
Filesystem            Size    Used   Avail Capacity  Mounted on
zroot/ROOT/default     26G    1.0G     25G     4%    /
〜
zroot/home/nsmrtks     30G    5.0G     25G    16%    /home/nsmrtks
/dev/da0p1             19G     13G    5.1G    71%    /home/distfiles

root@fb150:/home/nsmrtks # zfs get compressratio
NAME                                       PROPERTY       VALUE  SOURCE
〜
zroot/home                                 compressratio  1.78x  -
zroot/home/nsmrtks                         compressratio  1.78x  -
〜

● NFS サーバの設定

これも、必要なのは筆者の環境だけかもしれない。

筆者は、新環境 (すなわち今インストール中のこの環境「fb150」) を立ち上げてからも、引き継ぎのためやバックアップのために、旧環境もしばらく残して運用することにしており、その際、ホームディレクトリや /usr/ports/distfiles (前述) を旧環境から新環境に移動して切り替え、旧環境からは NFS でそのまま参照するようにしている。

NFS というと、どのディレクトリをエクスポートするかという設定が必要だが、/etc/exports ファイルと、ZFS の sharenfs の二段構えで行くことにする。

上の方で、筆者の旧環境 (fb140) の、(リンクローカル) IPv6 アドレスを /etc/hosts に記述しており、FreeBSD の NFS はこれによりホスト名で可能である。

まず /etc/exports に以下のように記述することにする。


# 2019-09-18,20,2020-01-29,2021-05-08,2024-03-02,2026-02-24 nsmrtks

V4: /home

/home/distfiles fb140c

# EoF

先に /home/distfiles の方の行について解説すると、これは /home/distfiles ディレクトリをホスト fb140c に NFS export している。

V4: /home という行について、これは NFSv4 を使用している。 /home というディレクトリを NFSv4 tree root にするという指定になっている。
そして /home については、ZFS の sharenfs の指定と組み合わせて設定することにする。

ZFS の sharenfs の設定が未だだが、先に NFS サーバを立ち上げる設定をしてみる。
それには、以下のように実行して.. (繰り返しになるが、「>>」で追記するのであり、 くれぐれも間違って「>」で上書きしないように注意する。)


root@fb150:~ # egrep ^nfs /etc/defaults/rc.conf >> /etc/rc.conf

root@fb150:~ # vi /etc/rc.conf

/etc/rc.conf に以下のように追記されるように編集した。

nfs_client_enable="YES" の行をコメントアウトしているが、将来を見越してのことである。

# 2026-02-26 nsmrtks
#nfs_client_enable="YES"                # This host is an NFS client (or NO).
nfs_server_enable="YES"                 # This host is an NFS server (or NO).
nfsv4_server_enable="YES"               # Enable support for NFSv4
nfsuserd_enable="YES"                   # NFSv4 user/group name mapping daemon
nfsuserd_flags="-domain nsmrtks.jp"     # Flags for nfsuserd

ここで筆者の環境では nfsuserd_flags に -domain オプションで「nsmrtks.jp」という名前を設定した。 これはサーバ側(すなわちこのホスト)とクライアント側で合わせる必要がある。

reboot すると、NFS サーバは自動的に起動していた。


root@fb150:~ # service nfsd status
nfsd is running as pid 1905 1907.

root@fb150:~ # showmount -e
Exports list on localhost:
/home/distfiles                    fb140.magic.or 

◎ distfiles

この段階で、ホスト fb140c から、fb150 の /distfiles が NFS マウントできるようになるだろう..
それには、fb140 (fb140c) 環境にて、fb150c を /etc/hosts に追加、/etc/fstab には以下を追加して、


# 2026-02-26 nsmrtks
fb150c:/distfiles /home/distfiles nfs	rw,nfsv4

fb140 で sudo mount /home/distfiles を実行すると、以下のように mount され、アクセスも出来るらしいことを確認した。


% sudo mount /home/distfiles
〜

% mount
〜
fb150c:/distfiles on /home/distfiles (nfs)

% df -h
Filesystem           Size    Used   Avail Capacity  Mounted on
〜
fb150c:/distfiles     19G     13G    6.7G    66%    /home/distfiles

% ls /home/distfiles/
/home/distfiles:
〜 (既にファイルがあるのでたくさん出る)

% ls -ld /home/distfiles/fo
ls: /home/distfiles/fo: そのようなファイルまたはディレクトリはありません
1で終了しました
1で終了しました

% hostname > /home/distfiles/fo

この時点で以下を fb150 側で実行。


root@fb150:~ # cat /home/distfiles/fo
fb140.magic.or

root@fb150:~ # ls -ld /home/distfiles/fo
-rw-r--r--  1 nsmrtks wheel 15 Feb 26 13:52 /home/distfiles/fo

fb140 に戻ってさらに以下を実行。


% cat /home/distfiles/fo
fb140.magic.or

% ls -ld /home/distfiles/fo
-rw-r--r--  1 nsmrtks wheel 15  2月 26 13:52 /home/distfiles/fo

% rm -i /home/distfiles/fo
remove /home/distfiles/fo? y

% ls -ld /home/distfiles/fo
ls: /home/distfiles/fo: そのようなファイルまたはディレクトリはありません
1で終了しました
1で終了しました

◎ ホームディレクトリ

次に、/home/nsmrtks を NFS エクスポートする。
そのやり方だが、/etc/exports はこれ以上触らず、即ち /etc/exports の「V4: /home」と書いた行 (のみ) を利用し、残りを ZFS の機能で行うことにする。

以下のように、zfs set sharenfs= にホストを指定する。 なおこの操作で、mountd に HUP シグナルを送る相当まで自動的に実行してくれるので、直後に shouwmount -e を実行するとちゃんと動作に反映されている。


root@fb150:~ # zfs get sharenfs
NAME                                       PROPERTY  VALUE     SOURCE
zroot                                      sharenfs  off       default
zroot/ROOT                                 sharenfs  off       default
zroot/ROOT/15.0-RELEASE_2026-02-13_140813  sharenfs  off       default
zroot/ROOT/default                         sharenfs  off       default
zroot/ROOT/default@2026-02-13-14:08:13-0   sharenfs  -         -
zroot/home                                 sharenfs  off       default
zroot/home/nsmrtks                         sharenfs  off       default
zroot/usr                                  sharenfs  off       default
zroot/usr/local                            sharenfs  off       default
zroot/usr/ports                            sharenfs  off       default
zroot/usr/src                              sharenfs  off       default
zroot/var                                  sharenfs  off       default
zroot/var/audit                            sharenfs  off       default
zroot/var/crash                            sharenfs  off       default
zroot/var/log                              sharenfs  off       default
zroot/var/mail                             sharenfs  off       default
zroot/var/tmp                              sharenfs  off       default

root@fb150:~ # zfs set sharenfs='fb140c fb093c fbak' zroot/home/nsmrtks

root@fb150:~ # zfs get sharenfs
NAME                                       PROPERTY  VALUE               SOURCE
zroot                                      sharenfs  off                 default
zroot/ROOT                                 sharenfs  off                 default
zroot/ROOT/15.0-RELEASE_2026-02-13_140813  sharenfs  off                 default
zroot/ROOT/default                         sharenfs  off                 default
zroot/ROOT/default@2026-02-13-14:08:13-0   sharenfs  -                   -
zroot/home                                 sharenfs  off                 default
zroot/home/nsmrtks                         sharenfs  fb140c fb093c fbak  local
zroot/usr                                  sharenfs  off                 default
zroot/usr/local                            sharenfs  off                 default
zroot/usr/ports                            sharenfs  off                 default
zroot/usr/src                              sharenfs  off                 default
zroot/var                                  sharenfs  off                 default
zroot/var/audit                            sharenfs  off                 default
zroot/var/crash                            sharenfs  off                 default
zroot/var/log                              sharenfs  off                 default
zroot/var/mail                             sharenfs  off                 default
zroot/var/tmp                              sharenfs  off                 default

root@fb150:~ # showmount -e
Exports list on localhost:
/home/distfiles                    fb140.magic.or 
/home/nsmrtks                      fb140.magic.or fb093.magic.or fbak.magic.or 

ここで早速マウントできるか確かめたい所だが..
筆者は未だここまで、旧環境 (fb140) で仕事をしながら、新環境の準備を整えていた。
そこで、ホームディレクトリの、旧環境 (fb140) から新環境 (fb150) への移行も、ここで実行してしまうことにする。
前述したように、あらかたの内容を事前にコピーしており、ここで最後のコピーを行う。

またも筆者の旧環境 (fb140) の話になってしまうが、/home/nsmrtks は ZFS の mountpoint になっていたので、まずはそれを解除しようとしたが..


root@fb140:~ # zfs get mountpoint
NAME         PROPERTY    VALUE          SOURCE
〜
zfs/nsmrtks  mountpoint  /home/nsmrtks  local
〜

root@fb140:~ # df -h
Filesystem           Size    Used   Avail Capacity  Mounted on

zfs/nsmrtks           11G    4.4G    6.9G    39%    /home/nsmrtks
〜

root@fb140:~ # zfs set mountpoint=/zfs/nsmrtks zfs/nsmrtks
cannot unmount '/home/nsmrtks': pool or dataset is busy

どうやら /home/nsmrtks が NFS エクスポートされたままだったので失敗した。
(旧環境の) /etc/rc.conf の NFS サーバの設定を無効にして reboot した。

今度は成功した。


root@fb140:~ # zfs set mountpoint=/zfs/nsmrtks zfs/nsmrtks

root@fb140:~ # zfs get mountpoint
NAME         PROPERTY    VALUE         SOURCE
〜
zfs/nsmrtks  mountpoint  /zfs/nsmrtks  local
〜

root@fb140:~ # df -h
Filesystem           Size    Used   Avail Capacity  Mounted on
〜
zfs/nsmrtks           11G    4.4G    6.9G    39%    /zfs/nsmrtks

root@fb140:~ # ls -l /zfs
total 17
drwxr-xr-x  63 nsmrtks nsmrtks 136 Mar  2 13:54 nsmrtks
〜

root@fb140:~ # ls -a /home/nsmrtks
.	..

その上で、旧環境 (fb140) の /etc/fstab にて、新環境 (fb150) のホームディレクトリを /home/nsmrtks として NFS マウントできるように設定した。


root@fb140:~ # vi /etc/fstab

root@fb140:~ # mount /home/nsmrtks

root@fb140:~ # ls /home/nsmrtks
〜

旧環境 (fb140) から新環境 (fb150) の /home/nsmrtks も mount 出来たので、旧環境 (fb140) にあるホームディレクトリ (/zfs/nsmrtks となっている) の内容を、新環境へ、最終的なコピーを行った。
それには、旧環境 (fb140) にて、以下のように実行した。


root@fb140:~ # sudo -u nsmrtks rsync -nav --del /zfs/nsmrtks/ /home/nsmrks/
〜 (差分が妥当であることを確認)

root@fb140:~ # date ; sudo -u nsmrtks rsync -av --del /zfs/nsmrtks/ /home/nsmrtks/ ; date
Mon Mar  2 14:17:40 JST 2026
〜
Mon Mar  2 14:31:08 JST 2026

root@fb140:~ # date ; sudo -u nsmrtks rsync -nav --del /zfs/nsmrtks/ /home/nsmrtks/ ; date
Mon Mar  2 14:31:42 JST 2026
sending incremental file list

sent 8,147,517 bytes  received 24,738 bytes  16,198.72 bytes/sec
total size is 8,939,255,165  speedup is 1,093.85 (DRY RUN)
Mon Mar  2 14:40:06 JST 2026

その他のホスト fb093 / fbak からも、ホームディレクトリを NFS マウントでき、ファイルを書き込めて共有できることを確かめた。

これでホームディレクトリが旧環境 (fb140) から新環境 (fb150)へ移行できた。

これにて、NFS サーバの設定としても完了したことになる。

● teetime!

ここで、以降で使う、筆者の環境でいつも用いている「teetime」スクリプトを紹介する。
これは、「コマンド |& tee ログ.txt」 (csh 系) あるいは「コマンド 2>&1 | tee ログ.txt」 (sh 系) に毛の生えたようなコマンドで、コマンドを何回かやり直しても、ログのファイル名を、既に存在するファイル名とぶつからないように、日付時刻のファイル名を自動的に付けてくれるものである。
(コマンドにあまり複雑なものを指定するとうまくいかない制限事項がある)

「teetime [-t タグ] コマンド..」のように用いる。

● ports を導入

自分は ports で行くが、普通の人は代わりにバイナリパッケージを pkg コマンドでインストールした方が圧倒的に楽だし、今どき普通はそうするかもしれない。

であるが、ここでは基本的に (一部を除き) ports でいくこととし、pkg コマンドの詳細はここでは触れない。 あしからず。

それでも簡単にいうと、pkg search 〜 でパッケージ名を探し、(sudo) pkg install 〜 でパッケージをインストールする感じ。
なお最初に「pkg」コマンドを実行すると、(本当の) pkg コマンド自体のインストールを最初に尋ねられるので、y を押してインストールする。 (これも後の方で示す)

(後述のように git は pkg でインストールしている)

以下を参考にさせていただく。

FreeBSD 14.0でportsnapが削除 Portsツリーを更新する方法

すなわち、ports を導入するには git が必要である。
git は FreeBSD (15.0) のベースシステムに入っていない。

ports を更新するのに ports のソフトが必要 (ベースシステムだけでは ports が更新できない) とは.. やはり一般人は pkg を使い ports は使わないということかもしれない。

git を pkg コマンドでインストールすることにする。
まず pkg info などを実行する。 (あるいは pkg だけでも可)


root@fb150:~ # pkg info
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/quarterly, please wait...
Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
Installing pkg-2.5.1...
Extracting pkg-2.5.1: 100%
pkg-2.5.1                      Package manager

ここで実行結果の最後の行が、pkg info コマンドの本来の出力である。 今は pkg パッケージ (pkg-2.5.1) だけがインストールされていることが分かる。

さて筆者は、何かインストールする時に、必ずたいてい、ログを残すようにしている。
そのインストールログは、/var/tmp の下に log というディレクトリを作成することにし、さらにその下に Install というディレクトリを作成して、その下に保存している。
ここでそのディレクトリを作成する。


root@fb150:~ # cd /var/tmp

root@fb150:/var/tmp # ls
vi.recover

root@fb150:/var/tmp # mkdir log

root@fb150:/var/tmp # chown nsmrtks log

root@fb150:/var/tmp # ls -l
total 1
drwxr-xr-x  2 nsmrtks wheel 2 Mar  4 10:03 log
drwxrwxrwt  2 root    wheel 2 Mar  4 09:20 vi.recover

root@fb150:/var/tmp # cd log

root@fb150:/var/tmp/log # mkdir Install

root@fb150:/var/tmp/log # chown nsmrtks Install

root@fb150:/var/tmp/log # ls -l
total 1

drwxr-xr-x  2 nsmrtks wheel 2 Mar  4 10:03 Install

(なかなか ports の導入に辿り着かないが) pkg install git する。
ここで前述の teetime コマンド (筆者の /home/nsmrtks/bin に入っている) を併用してログを残す。 (今回は /var/tmp/log/Install/git2026030410.log というファイルにログが残された)


root@fb150:/var/tmp/log/Install # ~nsmrtks/bin/teetime -t git pkg install git
logging (from the next line till the end) to git20260304.log
teetime! Wed Mar  4 10:06:02 JST 2026
teetime! working directory is /var/tmp/log/Install
teetime> pkg install git
〜 (筆者の環境の都合で処理が失敗した)
teetime! Wed Mar  4 10:06:02 JST 2026

root@fb150:/var/tmp/log/Install # unset http_proxy https_proxy

root@fb150:/var/tmp/log/Install # ~nsmrtks/bin/teetime -t git pkg install git
conflicting git20260304.log
logging (from the next line till the end) to git2026030410.log
teetime! Wed Mar  4 10:06:52 JST 2026
teetime! working directory is /var/tmp/log/Install
teetime> pkg install git
Updating FreeBSD-ports repository catalogue...
Fetching meta.conf: . done
Fetching data: .......... done
Processing entries: .......... done
FreeBSD-ports repository update completed. 36626 packages processed.
Updating FreeBSD-ports-kmods repository catalogue...
Fetching meta.conf: . done
Fetching data: .. done
Processing entries: .......... done
FreeBSD-ports-kmods repository update completed. 239 packages processed.
All repositories are up to date.
Updating database digests format: . done
The following 28 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	brotli: 1.2.0,1 [FreeBSD-ports]
	curl: 8.17.0 [FreeBSD-ports]
	expat: 2.7.3 [FreeBSD-ports]
	gettext-runtime: 0.26 [FreeBSD-ports]
	git: 2.52.0 [FreeBSD-ports]
	indexinfo: 0.3.1_1 [FreeBSD-ports]
	libffi: 3.5.1 [FreeBSD-ports]
	libidn2: 2.3.8 [FreeBSD-ports]
	libnghttp2: 1.68.0 [FreeBSD-ports]
	libpsl: 0.21.5_2 [FreeBSD-ports]
	libssh2: 1.11.1,3 [FreeBSD-ports]
	libunistring: 1.4.1 [FreeBSD-ports]
	mpdecimal: 4.0.1 [FreeBSD-ports]
	p5-Authen-SASL: 2.1900 [FreeBSD-ports]
	p5-Crypt-URandom: 0.54 [FreeBSD-ports]
	p5-Digest-HMAC: 1.05 [FreeBSD-ports]
	p5-Error: 0.17030 [FreeBSD-ports]
	p5-IO-Socket-SSL: 2.095 [FreeBSD-ports]
	p5-MIME-Base32: 1.303 [FreeBSD-ports]
	p5-MIME-Base64: 3.16 [FreeBSD-ports]
	p5-Mozilla-CA: 20250602 [FreeBSD-ports]
	p5-Net-SSLeay: 1.94 [FreeBSD-ports]
	p5-URI: 5.34 [FreeBSD-ports]
	pcre2: 10.47_1 [FreeBSD-ports]
	perl5: 5.42.0_1 [FreeBSD-ports]
	python311: 3.11.14_2 [FreeBSD-ports]
	readline: 8.3.3 [FreeBSD-ports]
	zstd: 1.5.7_1 [FreeBSD-ports]

Number of packages to be installed: 28

The process will require 353 MiB more space.
59 MiB to be downloaded.

Proceed with this action? [y/N]: y
〜
[28/28] Installing git-2.52.0...
===> Creating groups
Creating group 'git_daemon' with gid '964'
===> Creating users
Creating user 'git_daemon' with uid '964'
[28/28] Extracting git-2.52.0: .......... done
=====
〜
teetime! Wed Mar  4 10:10:53 JST 2026

root@fb150:/var/tmp/log/Install # ls -l
total 9
-rw-r--r--  1 root wheel 1903 Mar  4 10:06 git20260304.log
-rw-r--r--  1 root wheel 6987 Mar  4 10:10 git2026030410.log

git コマンドが /usr/local/bin/git としてインストールされた。


root@fb150:/var/tmp/log/Install # type git
git is /usr/local/bin/git

root@fb150:/var/tmp/log/Install # whereis git
git: /usr/local/bin/git /usr/local/share/man/man1/git.1.gz

root@fb150:/var/tmp/log/Install # cd

前置きが長くなったが、これでやっと ports が取得できそうだ。 それには git clone を用いる。 (最初の 1回だけ)

なお前述のように、/usr/ports の所有者を root から nsmrtks (自ユーザ) に chown している。
よってこの git clone は、root でなく、一般ユーザである nsmrtks で実行可能であるので、そのようにしている。
(以降も、プロンプトが「#」でなく「%」になっているものは、一般ユーザで実行している。) (その際には、旧環境から新環境 (fb150) に slogin (SSH) して実行している。)


% ls -a /usr/ports/
./  ../

% git clone https://git.freebsd.org/ports.git /usr/ports
Cloning into '/usr/ports'...
〜
当初 cd /usr/ports して git clone https://git.freebsd.org/ports.git などと実行したら、/usr/ports/ports というディレクトリになってしまい、(途中で止めて) やり直した。

ここまで来たら /usr/ports/distfiles のシンボリックリンクを作成する (git clone の前に作成していると git clone がエラーになる)。
リンク先は /home/distfiles である。 (前述を参考)


% cd /usr/ports

% ls -ld distfiles
ls: distfiles: そのようなファイルまたはディレクトリはありません
1で終了しました
1で終了しました

% ln -s /home/distfiles

% ls -ld distfiles
lrwxr-xr-x  1 nsmrtks wheel 15  3月  5 11:37 distfiles@ -> /home/distfiles

% ls distfiles/
distfiles:
〜 (既にファイルが入っているのでたくさん見える)

インデックスの取得というのも今やっておいた方がいいのだろうか?


% make fetchindex
/usr/bin/env  fetch -am -o /usr/ports/INDEX-15.xz  https://download.FreeBSD.org/ports/index/INDEX-15.xz
/usr/ports/INDEX-15.xz                                1918 kB  192 kBps    10s

% ls -lt | head
total 11799
-rw-r--r--     1 nsmrtks wheel 50889111  3月  5 11:41 INDEX-15
lrwxr-xr-x     1 nsmrtks wheel       15  3月  5 11:37 distfiles@ -> /home/distfiles
〜

なお、/usr/ports ファイルシステムは、インストーラのデフォルトの設定により、ZFS の機能で圧縮されており、


% zfs get compression
NAME                                       PROPERTY     VALUE           SOURCE
zroot                                      compression  on              local
zroot/ROOT                                 compression  on              inherited from zroot
zroot/ROOT/15.0-RELEASE_2026-02-13_140813  compression  on              inherited from zroot
zroot/ROOT/default                         compression  on              inherited from zroot
zroot/ROOT/default@2026-02-13-14:08:13-0   compression  -               -
zroot/home                                 compression  on              inherited from zroot
zroot/home/nsmrtks                         compression  on              inherited from zroot
zroot/usr                                  compression  on              inherited from zroot
zroot/usr/local                            compression  on              inherited from zroot
zroot/usr/ports                            compression  on              inherited from zroot    ←ココ
zroot/usr/src                              compression  on              inherited from zroot
zroot/var                                  compression  on              inherited from zroot
zroot/var/audit                            compression  on              inherited from zroot
zroot/var/crash                            compression  on              inherited from zroot
zroot/var/log                              compression  on              inherited from zroot
zroot/var/mail                             compression  on              inherited from zroot
zroot/var/tmp                              compression  on              inherited from zroot

以下のように圧縮率が得られた。


% zfs get compressratio
NAME                                       PROPERTY       VALUE  SOURCE
zroot                                      compressratio  1.66x  -
zroot/ROOT                                 compressratio  1.75x  -
zroot/ROOT/15.0-RELEASE_2026-02-13_140813  compressratio  1.00x  -
zroot/ROOT/default                         compressratio  1.75x  -
zroot/ROOT/default@2026-02-13-14:08:13-0   compressratio  1.80x  -
zroot/home                                 compressratio  1.77x  -
zroot/home/nsmrtks                         compressratio  1.77x  -
zroot/usr                                  compressratio  1.47x  -
zroot/usr/local                            compressratio  1.96x  -
zroot/usr/ports                            compressratio  1.22x  -      ←ココ
zroot/usr/src                              compressratio  2.02x  -
zroot/var                                  compressratio  2.74x  -
zroot/var/audit                            compressratio  1.00x  -
zroot/var/crash                            compressratio  1.01x  -
zroot/var/log                              compressratio  5.26x  -
zroot/var/mail                             compressratio  1.00x  -
zroot/var/tmp                              compressratio  1.06x  -

● sudo をインストールする

先ほどの手順で ports をインストールしたので、とりあえず普通に make install する。 ディレクトリは /usr/ports/security/sudo である。

ここやこれ以降で指定している nice や nice +20 は、プログラムの実行の優先度を下げるコマンド及びそのオプションで、指定は必須ではない。
なお +20 というのは tcsh だった場合のオプションで、tcsh 以外 (sh や bash) で同じことをしようとすると -n 20 などになる。

% cd /usr/ports/security/sudo

% ls
distinfo   files/     Makefile   pkg-descr  pkg-plist

% nice teetime -t install make install
logging (from the next line till the end) to install20260306.log
teetime! 2026年 3月 6日 金曜日 17時25分30秒 JST
teetime! working directory is /usr/ports/security/sudo
teetime> make install
〜
teetime! 2026年 3月 6日 金曜日 17時46分18秒 JST

% ls -l
total 404
-rw-r--r--  1 nsmrtks wheel     158  3月  5 11:34 distinfo
drwxr-xr-x  2 nsmrtks wheel       5  3月  5 11:34 files/
-rw-r--r--  1 nsmrtks wheel 3232406  3月  6 17:46 install20260306.log
-rw-r--r--  1 nsmrtks wheel    4777  3月  5 11:34 Makefile
-rw-r--r--  1 nsmrtks wheel     254  3月  5 11:34 pkg-descr
-rw-r--r--  1 nsmrtks wheel    5892  3月  5 11:34 pkg-plist
drwxr-xr-x  4 nsmrtks wheel      19  3月  6 17:46 work-default/

% nice teetime -t clean make clean
logging (from the next line till the end) to clean20260309.log
teetime! 2026年 3月 9日 月曜日 08時58分57秒 JST
teetime! working directory is /usr/ports/security/sudo
teetime> make clean
===>  Cleaning for pkgconf-2.4.3,1
===>  Cleaning for pkgconf-2.4.3,1
===>  Cleaning for gettext-tools-0.26
===>  Cleaning for gettext-tools-0.26
===>  Cleaning for libtextstyle-0.26
===>  Cleaning for libtextstyle-0.26
===>  Cleaning for sudo-1.9.17p2_2
teetime! 2026年 3月 9日 月曜日 08時59分08秒 JST

% ls -l
total 400
-rw-r--r--  1 nsmrtks wheel     444  3月  9 08:59 clean20260309.log
-rw-r--r--  1 nsmrtks wheel     158  3月  5 11:34 distinfo
drwxr-xr-x  2 nsmrtks wheel       5  3月  5 11:34 files/
-rw-r--r--  1 nsmrtks wheel 3232406  3月  6 17:46 install20260306.log
-rw-r--r--  1 nsmrtks wheel    4777  3月  5 11:34 Makefile
-rw-r--r--  1 nsmrtks wheel     254  3月  5 11:34 pkg-descr
-rw-r--r--  1 nsmrtks wheel    5892  3月  5 11:34 pkg-plist

たまにダイアログが出てきて、オプションを設定できるはずなのだが、画面が崩れてしまって、うまく表示できないようだ.. 拙作の teetime コマンドのせいだろうか。
経験上、後述の portupgrade をインストールすると、何故かうまくいくようなので、それまでは、オプションを変えられないが、この段階では、ダイアログではエンターを押して進めていく。

結果、なんとか無事ビルド・インストール出来たようだ。

次に sudoers ファイル (実体は /usr/local/etc/sudoers にある) を visudo で編集する。


% ls -ld /usr/local/etc/sudoers*
-r--r-----  1 root wheel 5565  3月  6 17:46 /usr/local/etc/sudoers
drwxr-xr-x  2 root wheel    2  3月  6 17:46 /usr/local/etc/sudoers.d/
-r--r-----  1 root wheel 5565  3月  6 17:46 /usr/local/etc/sudoers.dist

% md5 /usr/local/etc/sudoers*
MD5 (/usr/local/etc/sudoers) = 26346821161dc425b033092ee49de779
md5: /usr/local/etc/sudoers.d: Is a directory
MD5 (/usr/local/etc/sudoers.dist) = 26346821161dc425b033092ee49de779
1で終了しました

% su
Password:

# visudo

このとき、オリジナルと同一の /usr/local/etc/sudoers.dist というファイルも元から横に置かれているので、わざわざ自分でコピーを取っておかなくても変更点を比較できる。

筆者の環境では以下のように変更を行った。

diff -u /usr/local/etc/sudoers.dist /usr/local/etc/sudoers を示すと以下のようである。


--- /usr/local/etc/sudoers.dist	2026-03-06 17:46:11.423123000 +0900
+++ /usr/local/etc/sudoers	2026-03-09 09:05:52.595358000 +0900
@@ -67,7 +67,8 @@
 ## Run X applications through sudo; HOME is used to find the
 ## .Xauthority file.  Note that other programs use HOME to find   
 ## configuration files and this may lead to privilege escalation!
-# Defaults env_keep += "HOME"
+Defaults env_keep += "HOME"
+# 2026-03-09 nsmrtks
 ##
 ## X11 resource path settings
 # Defaults env_keep += "XAPPLRESDIR XFILESEARCHPATH XUSERFILESEARCHPATH"
@@ -120,6 +121,9 @@
 ## modules such as pam_faillock will not be printed.
 # Defaults !pam_silent
 
+# 2026-03-09 nsmrtks
+Defaults env_keep += "http_proxy https_proxy"
+
 ##
 ## Runas alias specification
 ##
@@ -130,7 +134,8 @@
 root ALL=(ALL:ALL) ALL
 
 ## Uncomment to allow members of group wheel to execute any command
-# %wheel ALL=(ALL:ALL) ALL
+%wheel ALL=(ALL:ALL) ALL
+# 2026-03-09 nsmrtks
 
 ## Same thing without a password
 # %wheel ALL=(ALL:ALL) NOPASSWD: ALL

これで、wheel グループに所属している一般ユーザ nsmrtks は、sudo が実行できるようになった。

一般ユーザ nsmrtks を wheel グループに所属させることは、ここで対応済である。

% sudo pwd

あなたはシステム管理者から通常の講習を受けたはずです。
これは通常、以下の3点に要約されます:

    #1) 他人のプライバシーを尊重すること。
    #2) タイプする前に考えること。
    #3) 大いなる力には大いなる責任が伴うこと。

セキュリティー上の理由で、あなたがタイプしたパスワードは表示しません。
パスワード: 
/usr/ports/security/sudo

● /etc/make.conf を設定する

主に ports のための設定である。

/etc/make.conf ファイルを新規作成して..


% ls -ld /etc/make.conf
ls: /etc/make.conf: そのようなファイルまたはディレクトリはありません
1で終了しました
1で終了しました

% sudoedit /etc/make.conf

% ls -ld /etc/make.conf
-rw-r--r--  1 root wheel 217  3月  9 09:14 /etc/make.conf

以下の内容にした。 (旧環境から持ってきて一部編集した)


# 2024- nsmrtks
# 2023-04-19,27,29?,05-03,07-20,10-27 nsmrtks
# 2017-09-27,2020-12-15 - 2021-09-24 nsmrtks

# see /usr/ports/Mk/bsd.command.mk
SU_CMD?=/usr/local/bin/sudo -E sh -c

#DISABLE_VULNERABILITIES=yes

# EoF

この SU_CMD は、ports でビルドするときに、たまに出て来る su を代わりに sudo を用いるように設定している。

● portupgrade をインストールする

ports のためのツール群である。

たまにダイアログが出てきて、オプションを設定できるはずなのだが、画面が崩れてしまうのは、未だ先ほどと同様である..
オプションを変えられないが、この段階では、ダイアログではエンターを押して進めていく。

% cd /usr/ports/ports-mgmt/portupgrade

% pwd
/usr/ports/ports-mgmt/portupgrade

% nice +20 teetime -t install make install
logging (from the next line till the end) to install20260309.log
teetime! 2026年 3月 9日 月曜日 09時27分08秒 JST
teetime! working directory is /usr/ports/ports-mgmt/portupgrade
teetime> make install
〜
teetime! 2026年 3月 9日 月曜日 10時00分59秒 JST

なんとか無事ビルド・インストール出来たようだ。

● virtualbox-ose-additions をインストールする

virtualbox-ose-additions をインストールしていないと、MS-Windows 側とクリップボードが共有できなかったり、時計がずれたり (保存して起動するだけでも)、いろいろ不都合が発生する。

FreeBSD では ports や pkg からインストールできる。

ここからは、先ほどインストールした portupgrade に付属の portinstall コマンドを用いて ports のソフトをインストールしていく。

virtualbox-ose-additions の ports の名前がうろ覚えだったので、先に pkg search コマンドで探している。


% pkg search virtualbox-ose-additions
virtualbox-ose-additions-6.1.50.1500068_3 VirtualBox additions for FreeBSD guests
virtualbox-ose-additions-70-7.0.26.1500068_1 VirtualBox additions for FreeBSD guests
virtualbox-ose-additions-71-7.1.16.1500068 VirtualBox additions for FreeBSD guests
virtualbox-ose-additions-72-7.2.6.1500068 VirtualBox additions for FreeBSD guests
virtualbox-ose-additions-legacy-5.2.44.1500068_10 VirtualBox additions for FreeBSD guests
virtualbox-ose-additions-nox11-6.1.50.1500068_3 VirtualBox additions for FreeBSD guests
virtualbox-ose-additions-nox11-70-7.0.26.1500068_1 VirtualBox additions for FreeBSD guests
virtualbox-ose-additions-nox11-71-7.1.16.1500068 VirtualBox additions for FreeBSD guests
virtualbox-ose-additions-nox11-72-7.2.6.1500068 VirtualBox additions for FreeBSD guests
virtualbox-ose-additions-nox11-legacy-5.2.44.1500068_9 VirtualBox additions for FreeBSD guests

用いている VirtualBox が 7.2.x であり (参照)、また X11 を使用予定なので、virtualbox-ose-additions-72 (nox11 でない方) をインストールする。

コンパイル開始。


% cd /var/tmp/log/Install/

% nice +20 teetime -t virtualbox-ose-additions-72_ portinstall -s virtualbox-ose-additions-72
logging (from the next line till the end) to virtualbox-ose-additions-72_20260309.log
teetime! 2026年 3月 9日 月曜日 10時48分29秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s virtualbox-ose-additions-72
〜

たまにダイアログが出てきて (今度からは正常である)、オプションを選べるので、もしデフォルトから変えたければ設定する。 (ただし経験上、あまりデフォルトから変えると、ビルドに失敗することもあった。)

gmp のオプション 『CPU_OPTS』「Enable assembly optimizations for your CPU」 というのにチェックが入っていなかったので、チェックを付けてみた (スペースキーを押す)。

gmp


% cd /var/tmp/log/Install/

% nice +20 teetime -t virtualbox-ose-additions-72_ portinstall -sw virtualbox-ose-additions-72
〜

% cd /var/tmp/log/Install/

% nice +20 teetime -t virtualbox-ose-additions-72_ portinstall -sw virtualbox-ose-additions-72
〜

teetime! 2026年 3月12日 木曜日 09時46分36秒 JST

% ls -ltr
total 6107
〜
-rw-r--r--  1 nsmrtks wheel 39265775  3月 10 02:44 virtualbox-ose-additions-72_20260309.log
-rw-r--r--  1 nsmrtks wheel 12204215  3月 11 17:30 virtualbox-ose-additions-72_20260311.log
-rw-r--r--  1 nsmrtks wheel 26338643  3月 12 09:46 virtualbox-ose-additions-72_20260312.log

筆者の作業時間の都合で、何度か途中でコンパイルを中断して仮想マシンをシャットダウン・再度起動して、コンパイルを再開したりしている。
またその際には、仮想マシンがシャットダウンされている間に、VirtualBox の fb150 の設定で「CPU 数」を増やしたりしている。

なんとか無事にコンパイル・インストールが終わった。

さて、ビルド・インストール中のメッセージが、teetime コマンドにより /var/tmp/log/Install/ 以下のログファイルに残っているので、それを見てみる。 (今回は最後の virtualbox-ose-additions-72_20260312.log を参照する)


〜
Installing virtualbox-ose-additions-72-7.2.6.1500068...
VirtualBox Guest Additions are installed.

To enable and start the required services:

# sysrc vboxguest_enable="YES"
# sysrc vboxservice_enable="YES"

To start the services, restart the system.

In some situations, a panic will occur when the kernel module loads.
Having no more than one virtual CPU might mitigate the issue.

For features such as window scaling and clipboard sharing, membership of
the wheel group is required. With username "jerry" as an example:

# pw groupmod wheel -m jerry

The settings dialogue for FreeBSD guests encourages use of the VMSVGA
graphics controller. Whilst this might suit installations of FreeBSD
without a desktop environment (a common use case), it is not appropriate
where Guest Additions are installed.

Where Guest Additions are installed:

1. prefer VBoxSVGA

2. do not enable 3D acceleration (doing so will invisibly
   lose the preference for VBoxSVGA)

You may ignore the yellow alert that encourages use of VMSVGA.
〜

これと、/usr/local/etc/rc.d/ 以下にインストールされた dbus を参考にして..


% ls -ltr /usr/local/etc/rc.d/
total 18
-rwxr-xr-x  1 root wheel  593  2月 26 11:36 git_daemon*
-rwxr-xr-x  1 root wheel  592  3月 12 09:35 dbus*
-rwxr-xr-x  1 root wheel 1068  3月 12 09:40 vboxguest*
-rwxr-xr-x  1 root wheel  462  3月 12 09:40 vboxservice*

/usr/local/etc/rc.d/dbus の冒頭:


#!/bin/sh

# PROVIDE: dbus
# REQUIRE: DAEMON ldconfig
#
# Add the following lines to /etc/rc.conf to enable the D-BUS messaging system:
#
# dbus_enable="YES"
#
〜

以下を実行。


% sudo sysrc dbus_enable="YES"
dbus_enable:  -> YES

% sudo sysrc vboxguest_enable="YES"
vboxguest_enable:  -> YES

% sudo sysrc vboxservice_enable="YES"
vboxservice_enable:  -> YES

% sudoedit /etc/rc.conf

/etc/rc.conf を調整して、/etc/rc.conf の末尾が以下のようになるように編集した。


〜

# 2026-03-12 nsmrtks (via sysrc)
#
# (see /usr/local/etc/rc.d/dbus)
dbus_enable="YES"
#
# (see /var/tmp/log/Install/virtualbox-ose-additions-72_20260312.log)
vboxguest_enable="YES"
vboxservice_enable="YES"

reboot したら、「vboxguest: loaded successfully」や、VBoxService が起動したようなメッセージが出ていた。 (キーボードに Scroll Lock キーがあればコンソールを遡って見ることが出来る)

kldstat で見ると vboxguest.ko がロードされていた。


% kldstat
Id Refs Address                Size Name
 1   16 0xffffffff80200000  1f4daa0 kernel
 2    1 0xffffffff8214e000   620c10 zfs.ko
 3    1 0xffffffff83018000     3220 intpm.ko
 4    1 0xffffffff8301c000     2178 smbus.ko
 5    1 0xffffffff8301f000    38d00 vboxguest.ko

また、VBoxService が起動していた。 (以前、起動していなかったことがあった。)


% ps ax | egrep -i box
1759  -  Is    0:00.04 /usr/local/sbin/VBoxService
2103  0  S+    0:00.00 egrep -i box

その後、fb150 を VirtualBox で保存状態にしてからまた起動しても、時計がずれなくなったことを確認した。

● X11 (xorg) をインストール

virtualbox-ose-additions をインストールしたことによって、X11 サーバ (xorg-server) もインストールされていた。


% pkg info | egrep X
〜
xorg-server-21.1.20,1          X.Org X server and related programs
〜

しかし、xauth や startx コマンドが入っていない。


% where xauth
1で終了しました

% where startx
1で終了しました

そこで、xorg をちゃんとインストールしてみる。


% pkg search ^xorg
xorg-7.7_3                     X.Org complete distribution metaport
〜

% cd /var/tmp/log/Install/

% nice +20 teetime -t xorg portinstall -s xorg
logging (from the next line till the end) to xorg20260312.log
teetime! 2026年 3月12日 木曜日 10時35分23秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s xorg
〜
teetime! 2026年 3月12日 木曜日 11時09分28秒 JST

無事にコンパイル・インストールが終わった。

さて、VirtualBox の画面をフルスクリーンモードに切り替えてから、startx を実行し、X11 サーバを起動してみる。

startx を実行すると、~/.xinitrc が存在すれば実行されるが、筆者の ~/.xinitrc は、twm が存在すれば実行するようになっている。 よって以下のスクリーンショットでも twm が起動している。

1920x1080

以前は、ここで SVGA (800x600) で起動してしまったことがあったのだが、xdpyinfo で確かめても、今回はちゃんと最初から、筆者の PC の画面である FullHD (1920x1080) で起動した。

● sshd の設定を変える

今の状態で、X11 サーバが動いている他のホストから新環境 (fb150) へ、slogin -X や slogin -Y などを実行しても、X11 のコマンドを実行して表示することが出来ない。


% xclock
Error: Can't open display: 
1で終了しました

これは、そもそも slogin -X や slogin -Y した時に、X11 forwarding request failed on channel 0 などというのが表示されている。


% slogin -Y fb150c
X11 forwarding request failed on channel 0
〜

% where xauth
/usr/local/bin/xauth

そこで、ここで sshd の設定を変える。 (xauth コマンドも必要だが先ほど xorg でインストールされた)

/etc/ssh/sshd_config で、X11Forwarding を yes に設定する。 これにより、他のホストから ssh で X11 のソフトの表示が可能となる。

これは、FreeBSD 14.0 になってから、デフォルトが変わったのだろうか? 以前は FreeBSD では yes がデフォルトだった気がする。

% cd /etc/ssh/

% ls -ld sshd_config 
-rw-r--r--  1 root wheel 3573 11月 28 12:45 sshd_config

% sudo cp -ip sshd_config sshd_config.ORIG
パスワード: 〜

% sudoedit sshd_config

以下の diff のように、X11Forwarding が yes になるようにしてみる。


--- sshd_config.ORIG	2025-11-28 12:45:15.000000000 +0900
+++ sshd_config	2026-03-13 11:01:59.885205000 +0900
@@ -91,7 +91,10 @@
 #AllowAgentForwarding yes
 #AllowTcpForwarding yes
 #GatewayPorts no
-#X11Forwarding no
+
+# 2026-03-13 nsmrtks
+X11Forwarding yes
+
 #X11DisplayOffset 10
 #X11UseLocalhost yes
 #PermitTTY yes

sshd に SIGHUP を送るのが必要なようだ。 (sshd(8) を参照)


% ps ax | egrep sshd
 2018  -  Is      0:00.06 sshd: /usr/sbin/sshd [listener] 0 of 10-100 startups 
82671  -  Is      0:00.03 sshd-session: nsmrtks [priv] (sshd-session)
82673  -  I       0:00.14 sshd-session: nsmrtks@pts/7 (sshd-session)
82739  -  Is      0:00.04 sshd-session: nsmrtks [priv] (sshd-session)
82741  -  S       0:00.31 sshd-session: nsmrtks@pts/0 (sshd-session)
82779  0  S+      0:00.01 egrep sshd

% sudo kill -HUP 2018
パスワード: 

これで新環境 (fb150) へ slogin -X や slogin -Y などを実行したとき、X11 のソフトがリモートで動くようになった。

displaying X11 client

以上


FreeBSD (15.0) を VirtualBox にインストールする覚書
index