FreeBSD (14.0) を VirtualBox にインストールする覚書
環境構築編: 後編 (仕上げの設定)

● Samba を設定する

余談だが、前述の rsync の公式サイトは https://rsync.samba.org/ で、Samba と同じ所にある。

筆者は、仮想マシン上の FreeBSD ←→ ホストの MS-Windows 間でファイルをやり取りするために、従来より Samba を用いている。

Samba は、既に何かの依存関係でインストールされていたようだ。


% pkg info | egrep -i samba
samba416-4.16.11_4             Free SMB/CIFS and AD/DC server and client for Unix

以下のような /usr/local/etc/smb4.conf ファイルを作成した (旧環境から持って来た)。 ここではワークグループ名を「MAGIC」、NetBIOS 名を「fb」と設定している。


# 2019-10-08 nsmrtks

[global]
        workgroup = MAGIC
        netbios name = fb
        map archive = no

[homes]
        comment = Home Directories (%h)
        browseable = no
        writable = yes

# end-of-file

また、以下を実行し、/etc/rc.conf で samba_server_enable を YES にする。 (samba_server_enable について /usr/local/etc/rc.d/samba_server を参照)


% sudo sysrc samba_server_enable=YES
パスワード: 〜
samba_server_enable:  -> YES

Samba を起動する..前に、筆者は旧環境 (fb130) で動作している Samba が同じ名前 (「fb」) であり、衝突するし、新環境の Samba があれば不要なので、停止させ、また起動しないようにした。

そうしたら、新環境の Samba を起動する。


% sudo service samba_server start
パスワード: 〜
Performing sanity check on Samba configuration: OK
Starting nmbd.
Starting smbd.

Samba のプロセス (smbd と nmbd) が本当に起動しているかどうか、筆者はよく以下のようにして確かめる。


% ps axw | egrep mb
87925  -  Ss       0:00.04 /usr/local/sbin/nmbd --daemon --configfile=/usr/local/etc/smb4.conf
87930  -  Is       0:00.43 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf
87933  -  I        0:00.00 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf
87934  -  S        0:00.00 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf
88023  7  S+       0:00.00 egrep mb

そして、ユーザ (自分) を Samba に追加する。 (コマンド名が類推しにくいが pdbedit である)


% sudo pdbedit -a -u nsmrtks
new password:【パスワードを考えて入力】
retype new password:【もういちど入力】
Unix username:        nsmrtks
NT username:          
Account Flags:        [U          ]
User SID:             S-1-5-21-4146075932-710546122-1232452624-1000
Primary Group SID:    S-1-5-21-4146075932-710546122-1232452624-513
Full Name:            NISHIMURA Takeshi
Home Directory:       \\FB\nsmrtks
HomeDir Drive:        
Logon Script:         
Profile Path:         \\FB\nsmrtks\profile
Domain:               FB
Account desc:         
Workstations:         
Munged dial:          
Logon time:           0
Logoff time:          木, 07  2月 2036 00:06:39 JST
Kickoff time:         木, 07  2月 2036 00:06:39 JST
Password last set:    土, 06  4月 2024 20:16:32 JST
Password can change:  土, 06  4月 2024 20:16:32 JST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

これで、MS-Windows 側から \\fb でアクセスできるようになった。

\\fb

● sshd の設定を変える

/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 3315 11月 10 17:23 sshd_config

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

% sudo vi sshd_config

以下の diff のように、X11Forwarding が yes になるようにする。


--- /etc/ssh/sshd_config.ORIG   2023-11-10 17:23:55.000000000 +0900
+++ /etc/ssh/sshd_config        2024-04-10 13:46:48.405746000 +0900
@@ -88,7 +88,7 @@
 #AllowAgentForwarding yes
 #AllowTcpForwarding yes
 #GatewayPorts no
-#X11Forwarding no
+X11Forwarding yes
 #X11DisplayOffset 10
 #X11UseLocalhost yes
 #PermitTTY yes

sshd に SIGHUP を送るのが必要なようだ。


% ps ax | egrep sshd
1219  -  Is     0:00.00 sshd: /usr/sbin/sshd [listener] 0 of 10-100 startups (s
3572  -  Is     0:00.01 sshd: nsmrtks [priv] (sshd)
3574  -  S      0:00.01 sshd: nsmrtks@pts/0 (sshd)
3626  1  S+     0:00.00 egrep sshd

% sudo kill -HUP 1219
パスワード: 〜

● クリップボードの共有

既に仮想マシンの作成編設定済みだが、VirtualBox の『デバイス』→『クリップボードの共有』が「双方向」になっているはずである。

これで、VirtualBox 内の X11 と、ホストの Windows 間で、コピー & ペーストが出来るようになっている。
素晴らしいことに、日本語を含んでいても、正常にコピー & ペースト出来る!

ちなみに urxvt については、マウスで範囲選択後 Ctrl-Alt-c でテキストのコピー、Shift-Insert でテキストのペーストが出来る。

もし、不意にコピー/ペーストが出来なくなってしまった場合..


% ps auxw | egrep -i vbox
root     1076   0.0  0.0  32680   4904  -  Is   金14        0:36.08 /usr/local/sbin/VBoxService
nsmrtks 53830   0.0  0.0  17276   5744  -  Is   金19        0:00.00 /usr/local/bin/VBoxClient --clipboard
nsmrtks 53832   0.0  0.1  25760   6360  -  I    金19        0:00.44 /usr/local/bin/VBoxClient --clipboard
nsmrtks 53839   0.0  0.0  17276   5736  -  Is   金19        0:00.00 /usr/local/bin/VBoxClient --seamless
nsmrtks 53840   0.0  0.0  25728   6092  -  I    金19        0:00.20 /usr/local/bin/VBoxClient --seamless
nsmrtks 53845   0.0  0.0  17276   5752  -  Is   金19        0:00.00 /usr/local/bin/VBoxClient --draganddrop
nsmrtks 53847   0.0  0.1  25856   6144  -  I    金19        9:11.95 /usr/local/bin/VBoxClient --draganddrop
nsmrtks 53850   0.0  0.0  17276   5748  -  Is   金19        0:00.00 /usr/local/bin/VBoxClient --vmsvga
nsmrtks 53851   0.0  0.1  25828   6320  -  I    金19        0:00.00 /usr/local/bin/VBoxClient --vmsvga
nsmrtks 65214   0.0  0.0  13324   2776  7  S+   20:32       0:00.00 egrep -i vbox

ps x で VBoxClient --clipboard というものの PID を調べ、それを kill して、同じように VBoxClient --clipboard で立ち上げ直すと、たいてい直る。

● /etc/crontab を変更する

デフォルトの FreeBSD の設定では、/etc/crontab にて、夜中〜早朝深夜に daily / weekly / monthly の自動メンテナンスが走るようになっている。

筆者の環境はそのような時間に PC の電源が入っていないので、これを日中に実行するように変更する。


% sudoedit /etc/crontab
〜

一部を以下のようになるように編集した。


〜
#minute hour    mday    month   wday    who     command
〜
# Perform daily/weekly/monthly maintenance.
4       12      *       *       *       root    periodic daily
14      12      *       *       3       root    periodic weekly
24      12      1       *       *       root    periodic monthly
〜

なお、/etc/crontab ファイルの更新さえすれば、cron デーモンの再起動等は特に不要である。 (cron(8) (man cron) を参照)

これを設定すると、毎日 root 宛にメールが来るようになる。
自分は sudo -i して mail コマンドで見ている。

● VirtualBox のストレージ設定の「ホストの I/O キャッシュ」を無効にする

ここまで ZFS のファイルシステムを設定してきたが、筆者の印象では、この ZFS というものは、超高機能である引き換えに、突然の電源断 (停電やハードウェア障害など) に、極端に弱い。
過去にこれで ZFS が使用不能、修復も不能になったことが何度もあった。

よく考えたらそれらは、どれも VirtualBox で FreeBSD を実行していた。
そして VirtualBox の設定の「ストレージ」には、「ホストの I/O キャッシュを使う」という設定があった。
しかもデフォルトで ON になっている。 それがいけなかったのだろうか。

ここでは、設定を OFF に切り替えてみる。
なおこの設定を変えるには、仮想マシンを「電源オフ」にしておかないといけない。

「Oracle VM VirtualBox マネージャー」にて、「fb140」が選択された状態で『設定』→『ストレージ』と進む。

「コントローラー: IDE」を選択した状態で、「ホストの I/O キャッシュを使う」にチェックが入っていたのを、チェックを外す。

I/O cache (IDE)

SAS の方は既にチェックが外れていた。

I/O cache (SAS)

忘れずに『OK』押す。

● バックアップ用の仮想ディスクをマウント

先ほども触れたが、筆者の印象では、ZFS は、超高機能である引き換えに、ガラス細工のように脆いファイルシステムだ。

今回、初めての試みとして、ZFS のスナップショットを不定期に取得し、それをバックアップ保存するための、仮想ディスクを接続しておいてみる。

仮想ディスクは、筆者が既に以前作成し、今は特に使用しないまま放置していた、以下に見える ufs.vdi (24.00 GB) を用いる。

今回は既に作成済みの仮想ディスクを用いるが、もしこれの作成方法が知りたいという読者は、「環境構築編: 前編」の「/usr/posts/distfiles のディスクをマウント」を参考にされたい。

ufs.vdi

この設定を行うにも、仮想マシンを「電源オフ」にしておかないといけない。

「Oracle VM VirtualBox マネージャー」にて、「fb140」が選択された状態で『設定』→『ストレージ』と進む。

「コントローラー: LsiLogic SAS」があるので (これを作成した経緯は「環境構築編: 前編」の「/usr/posts/distfiles のディスクをマウント」を参照)、それを選択し、その右の「■」に「+」のようなアイコン (「ハードディスクの追加」) を選択する。 (あるいはウィンドウの下の方にある「■」に「+」のようなアイコン (「割り当ての追加」) →「ハードディスク」でもいけると思う)

ハードディスクの追加

「fb140 - ハードディスク選択」のウィンドウが出てくるので、「Not Attached」の所にある「ufs.vdi」を選択し、『選択』を押す。

ufs.vdi を選択

「コントローラー: LsiLogic SAS」の「SAS ポート 1」として、「ufs.vdi」が付いた。

ufs.vdi が付いた

忘れずに『OK』押す。

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


〜
da1 at mpt0 bus 0 scbus2 target 1 lun 0
da1: <VBOX HARDDISK 1.0> Fixed Direct Access SPC-3 SCSI device
da1: 300.000MB/s transfers
da1: Command Queueing enabled
da1: 24576MB (50331648 512 byte sectors)
〜

また、筆者が以前 UFS で使っていた仮想ディスクなので、GPT で freebsd-ufs のパーティションも存在している。


% gpart show
〜

=>      40  50331568  da1  GPT  (24G)
        40  50331568    1  freebsd-ufs  (24G)

これを、/home/backups というディレクトリにマウントすることとする。

ディレクトリを作成し、/etc/fstab を編集し..


% sudo mkdir /home/backups
パスワード: 〜

% ls -l /home
total 54
drwxr-xr-x   2 root    wheel     512  4月 20 18:53 backups/
drwxr-xr-x  38 nsmrtks nsmrtks 38400  4月 19 11:39 distfiles/
drwxr-xr-x  57 nsmrtks nsmrtks   131  4月 20 18:53 nsmrtks/
drwxr-xr-x   2 nsmrtks nsmrtks   512  2月 24 23:21 nsmrtks.BACK/

% sudoedit /etc/ftab

/etc/fstab に以下のエントリを追加した。


# 2024-04-20 nsmrtks
/dev/da1p1      /home/backups   ufs     rw      2       2

そうして、mount 出来た。 (筆者が以前使用していた仮想ディスクなので、既に容量を使っている。)


% sudo mount /home/backups
パスワード: 〜

% df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
〜
/dev/da1p1      23G     16G    5.4G    75%    /home/backups

また、root でなくても書き込めるように、chmod した。


% sudo chmod g+w /home/backups

% ls -ld /home/backups
drwxrwxr-x  4 root wheel 512  1月 23  2020 /home/backups/

中身は不要なので、この機会に削除した。


% cd /home/backups

% ls -a
./       ../      .snap/   nsmrtks/

% date ; rm -fr nsmrtks ; date
2024年 4月20日 土曜日 19時13分59秒 JST
2024年 4月20日 土曜日 19時15分20秒 JST

% df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
〜
/dev/da1p1      23G    8.0K     21G     0%    /home/backups

● さっそくバックアップしてみる

zfs list -t snapshot で、現在のスナップショットが表示できる。 実は既にスナップショットを作成したことがあったので、以下のように表示された。


% zfs list -t snapshot
NAME                   USED  AVAIL  REFER  MOUNTPOINT
zfs/local@20240415    75.2M      -  4.80G  -
zfs/nsmrtks@20240415  50.0M      -  3.24G  -
zfs/ports@20240415    37.9M      -  1.61G  -

新しくスナップショットを作成する。 zfs snapshot 〜 というコマンドラインで作成できるが、今回は -r オプションを付けてみたら、一発で以下のように作成された。


% df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
〜
zfs             13G     24K     13G     0%    /zfs
zfs/nsmrtks     16G    3.3G     13G    20%    /home/nsmrtks
zfs/local       18G    4.8G     13G    27%    /usr/local
zfs/ports       15G    1.6G     13G    11%    /usr/ports
〜

% sudo zfs snapshot -r zfs@20240420
パスワード: 〜

% zfs list -t snapshot
NAME                   USED  AVAIL  REFER  MOUNTPOINT
zfs@20240420             0B      -    24K  -
zfs/local@20240415    75.2M      -  4.80G  -
zfs/local@20240420     114K      -  4.80G  -
zfs/nsmrtks@20240415  50.0M      -  3.24G  -
zfs/nsmrtks@20240420    59K      -  3.25G  -
zfs/ports@20240415    37.9M      -  1.61G  -
zfs/ports@20240420       0B      -  1.61G  -

作成したスナップショットに対して、zfs send というのを使うと、以下のようにバックアップすることが出来る。 (-c を使わないとバックアップファイルが大きくなる)


% sudo zfs send -c zfs@20240420 > /home/backups/zfs@20240420
パスワード: 〜

% date ; sudo zfs send -c zfs/local@20240420 > /home/backups/zfs_local@20240420 ; date
2024年 4月20日 土曜日 19時37分09秒 JST
2024年 4月20日 土曜日 19時37分31秒 JST

% date ; sudo zfs send -c zfs/nsmrtks@20240420 > /home/backups/zfs_nsmrtks@20240 420 ; date
2024年 4月20日 土曜日 19時38分20秒 JST
2024年 4月20日 土曜日 19時38分50秒 JST

% date ; sudo zfs send -c zfs/ports@20240420 > /home/backups/zfs_ports@20240420  ; date
2024年 4月20日 土曜日 19時39分07秒 JST
2024年 4月20日 土曜日 19時39分22秒 JST

% ls -l /home/backups
total 10925040
-rw-r--r--  1 nsmrtks wheel 5561665280  4月 20 19:37 zfs_local@20240420
-rw-r--r--  1 nsmrtks wheel 3683305080  4月 20 19:38 zfs_nsmrtks@20240420
-rw-r--r--  1 nsmrtks wheel 1939289344  4月 20 19:39 zfs_ports@20240420
-rw-r--r--  1 nsmrtks wheel      47384  4月 20 19:36 zfs@20240420

% ls -lh /home/backups
total 10925040
-rw-r--r--  1 nsmrtks wheel  5.2G  4月 20 19:37 zfs_local@20240420
-rw-r--r--  1 nsmrtks wheel  3.4G  4月 20 19:38 zfs_nsmrtks@20240420
-rw-r--r--  1 nsmrtks wheel  1.8G  4月 20 19:39 zfs_ports@20240420
-rw-r--r--  1 nsmrtks wheel   46K  4月 20 19:36 zfs@20240420

% df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
〜
zfs             13G     24K     13G     0%    /zfs
zfs/nsmrtks     16G    3.3G     13G    20%    /home/nsmrtks
zfs/local       18G    4.8G     13G    27%    /usr/local
zfs/ports       15G    1.6G     13G    11%    /usr/ports
〜
/dev/da1p1      23G     10G     11G    49%    /home/backups

● バックアップと freebsd-update と portupgrade など

筆者は、ホームディレクトリのバックアップと、freebsd-update fetch と、ports の更新 (portupgrade の実行を含む) 等を一括して行うスクリプトを、日々走らせている (手動で起動)。

ただしここまで、新環境ではまだそのスクリプトを走らせていなかった。 走らせられるように、ここではそれを設定する。

以下がコマンドラインから (日々) 走らせる(実行する)スクリプトである。 ファイル名 (コマンド名) は bup としている (backup と update と portupgrade の略)。


#!/bin/sh
# 2024-06-15 nsmrtks
# 2022-08-08,09-25,10-03,05,11 nsmrtks
# 2019-10-18 nsmrtks
# 2014-12-01,29 nsmrtks
# 2014-03-14 for fb092 ..
# 2012-03-16, 09-03, 11-18, 2013-02-21, 06-04 nsmrtks

# (require back2, updatefb and /var/tmp/log/pvc.sh)

# check the dir
cd /var/tmp/log || exit 1

# get the privilege
sudo pwd

# compress the logs
find . -name \*.log -mtime +1 -print0 | xargs -0 xz -v

# backup
back2

# updatefb
[ -d updatefb ] || ( set -x ; mkdir updatefb )
( cd updatefb && teetime updatefb )

# portupgrade -- fetch only
sh pvc.sh -F
echo
echo 'Please run pvc.sh again (without -F).'

# EoF

このスクリプトからはさらに、back2 と updatefb と pvc.sh というスクリプトが呼び出されている。

back2 は、ホームディレクトリのバックアップを行うスクリプトである。 短いのでついでに紹介しておく。


#!/bin/sh
# 2024-04-08 nsmrtks
# 2021-05-10 nsmrtks
# 2015-02-03,11-25,2016-05-29,2017-10-02,2019-10-18,2020-02-03 nsmrtks
# moved from bup

if [ `hostname`. != fb140.magic.or. ]; then
        echo this is not fb140, backup not supported
        exit 1
fi

[ -d /var/tmp/log/back ] || ( set -x ; mkdir /var/tmp/log/back )
cd /var/tmp/log/back || exit 1

set -x
teetime -t rsync \
 rsync -a --delete-before /home/nsmrtks/ fb130c:/zfs/nsmrtks/

# EoF

updatefb は、freebsd-update fetch や pkg audit -F や ports ツリーの更新を行うスクリプトである。
FreeBSD 14.0 になってから portsnap が廃止されたようなので (前述)、今回、portsnap が有る場合 (旧環境) と無い場合の両方に対応するよう変更した。
以下のような内容にしている。


#!/bin/sh
# 2010-11-04,12,2013-03-14-     Time-stamp: <2024-06-15 19:11:34 nsmrtks>

# (sudoers may need to have `Defaults env_keep += "http_proxy"')

date
echo ==========================================================================
( set -x ; sudo freebsd-update fetch )
echo ==========================================================================
# They hang. Why??
#( set -x ; sudo pkg update )
# pkg update is very slow. add -d to know the reason..
( set -x ; sudo pkg -d update )
echo --------------------------------------------------------------------------
( set -x ; sudo pkg audit -F )
echo ==========================================================================
if type portsnap >/dev/null 2>&1 ; then
        ( set -x ; sudo portsnap fetch )
        echo ==================================================================
        ( set -x ; portsnap update )
else
        ( set -x ; cd /usr/ports && make update fetchindex )
fi
echo ==========================================================================
( set -x ; sudo portversion -c > portversion-c.out )
echo ==========================================================================
date

# EoF

この最後の方で、portversion -c というコマンドを実行し (portversion は portupgrade ツール群に含まれるコマンド)、リダイレクト出力で /var/tmp/log/updatefb/portversion-c.out というファイルを作成している。
これは中身が sh スクリプトになっており、sh で実行すると、更新があるパッケージについて portupgrade を実行してくれるというものになっている。 (更新があるパッケージ名が内部でずらずら列挙されている)

最後に pvc.sh が、その portversion-c.out を sh で実行する、即ち portupgrade を実行するスクリプトになっている。 (前述の通り /var/tmp/log に配置)


#!/bin/sh
# 2012-03-07,2019-10-18 nsmrtks

# Usage:
#       sh pvc.sh [portupgrade options..]
# Example:
#       sh pvc.sh
#       sh pvc.sh -w

# (require teetime and ../updatefb/portversion-c.out)

[ -d /var/tmp/log/pvc ] || ( set -x ; mkdir /var/tmp/log/pvc )

set -x
cd /var/tmp/log/pvc && \
 nice teetime -t pvc sh ../updatefb/portversion-c.out -s $*

# EoF

これで準備が出来た。 おもむろに bup を実行する.. (といっても以下に示す実行例は事情により何回かやり直している)

なお nice +20 〜 としているがこれは csh (tcsh) 系の場合で、もし bash 等 sh 系の場合は nice -n 20 〜 などとする。 (あるいは効果は変わるが nice だけでもよいしそもそも nice 無しでもよい)

% nice +20 bup
/var/tmp/log
+ teetime -t rsync rsync -a --delete-before /home/nsmrtks/ fb130c:/zfs/nsmrtks/
conflicting rsync20240615.log
logging (from the next line till the end) to rsync2024061519.log
teetime! 2024年 6月15日 土曜日 19時52分29秒 JST
teetime! working directory is /var/tmp/log/back
teetime> rsync -a --delete-before /home/nsmrtks/ fb130c:/zfs/nsmrtks/
teetime! 2024年 6月15日 土曜日 19時52分33秒 JST
conflicting updatefb20240615.log
logging (from the next line till the end) to updatefb2024061519.log
teetime! 2024年 6月15日 土曜日 19時52分33秒 JST
teetime! working directory is /var/tmp/log/updatefb
teetime> updatefb
2024年 6月15日 土曜日 19時52分33秒 JST
==========================================================================
+ sudo freebsd-update fetch
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching metadata signature for 14.0-RELEASE from update1.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata patches.. done.
Applying metadata patches... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 172 patches.....10....20....30....40....50....60....70....80....90....100....110....120....130....140....150....160....170. done.
Applying patches... done.
Fetching 56 files... ....10....20....30....40....50... done.
The following files will be added as part of updating to
14.0-RELEASE-p6:
〜
The following files will be updated as part of updating to
14.0-RELEASE-p6:
/bin/freebsd-version
/boot/kernel/if_wg.ko
/boot/kernel/kernel
〜
==========================================================================
+ sudo pkg -d update
〜
==========================================================================
+ cd /usr/ports
+ make update fetchindex
〜
==========================================================================
+ sudo portversion -c
〜
==========================================================================
2024年 6月15日 土曜日 20時10分38秒 JST
teetime! 2024年 6月15日 土曜日 20時10分38秒 JST
+ cd /var/tmp/log/pvc
+ nice teetime -t pvc sh ../updatefb/portversion-c.out -s -F
conflicting pvc20240615.log
logging (from the next line till the end) to pvc2024061520.log
teetime! 2024年 6月15日 土曜日 20時10分38秒 JST
teetime! working directory is /var/tmp/log/pvc
teetime> sh ../updatefb/portversion-c.out -s -F
〜
teetime! 2024年 6月15日 土曜日 21時47分30秒 JST

ここで、筆者の bup スクリプトを用いた、portupgrade に関する手順は、以下の二段構えとなっている。

  1. bup では portupgrade に -F を付けることによって、/usr/ports/distfiles/ へのファイルのダウンロードのみ先に行う (コンパイルはまだしない)。
  2. その後にあらためて筆者の pvc.sh スクリプトを手動で実行し、portupgrade で今度はコンパイルを実行する。

よって、直前で示した実行例では、上で言う 1. までが実行されている。 だから、次は 2. を実行しなければならないが..

少し話が飛んでややこしくなるが、上の実行例で示した通り、bup の中で実行した freebsd-update fetch で、FreeBSD のベースシステムに更新があることが表示されている。
そのため、(portupgrade でコンパイルの前に) freebsd-update install を先に実行することにする。


% sudo freebsd-update install
パスワード: 
Installing updates...
Restarting sshd after upgrade
Performing sanity check on sshd configuration.
Stopping sshd.
Waiting for PIDS: 1231.
Performing sanity check on sshd configuration.
Starting sshd.
Scanning /usr/share/certs/untrusted for certificates...
Scanning /usr/share/certs/trusted for certificates...
Scanning /usr/local/share/certs for certificates...
 done.

FreeBSD カーネルに関した更新も表示されていたので、シャットダウン、(仮想マシンの)電源を切り、再度(仮想マシンの)電源を入れた。

portupgrade の話に戻って、/var/tmp/log に移動して、筆者の pvc.sh スクリプトを実行すると、portupgrade でコンパイルが行われる。 (前述の通り /var/tmp/log に pvc.sh が配置してある)

(以下の実行例では、不注意により、一度やり直している。)

% cd /var/tmp/log

% nice +20 sh pvc.sh
+ cd /var/tmp/log/pvc
+ nice teetime -t pvc sh ../updatefb/portversion-c.out -s
conflicting pvc20240615.log
logging (from the next line till the end) to pvc2024061522.log
teetime! 2024年 6月15日 土曜日 22時42分47秒 JST
teetime! working directory is /var/tmp/log/pvc
teetime> sh ../updatefb/portversion-c.out -s
〜

● スリープについて

VirtualBox 上の FreeBSD を作動させたまま、ホスト側 (MS-Windows 10) をスリープして、復帰すると、以降 FreeBSD の時計が、数秒〜数分のオーダーでずれるようになってしまうようだ。
VBoxService が作動していてもである。
以前、VBoxService --disable-timesync して、代わりに ntpd による時刻同期も試みたが、改善しなかった。

これを回避する方法として、ホスト (Windows) をスリープさせる前に、VirtualBox の FreeBSD を必ず「停止」→「保存状態」で保存する。
スリープから復帰したときには、また「起動」で保存状態から復帰させる。
保存状態にしておけば、その間は万が一 Windows が異常終了したり再起動したりしてしまっても安心というのもある。
また、この保存状態で、筆者は日々、仮想ディスクのバックアップコピーを取っている。 (かなり時間がかかるが)

これで大体ひと通り環境構築できただろうか..

次に FreeBSD 15.0 をインストールして移行するとしたら何年後になるだろう.. (前回 12.1 → 13.0 に移行 したのは 3年前であった)
その時には自分は何歳になっているだろう..

以上


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