お知らせ: FreeBSD (13.0) を VirtualBox にインストールする覚書 / 環境構築編 もありますよ

FreeBSD (12.1) を VirtualBox にインストールする覚書 / 環境構築編

ターゲットの PC の「Oracle VM VirtualBox マネージャー」の画面で、「fb121」が選択された状態で『起動』押す!

boot hang

起動しない(ハングする).. orz

「仮想マシンの電源オフ」する。

「設定」を見直すが、変な所 (三角マークが出ているなど) は無いように思える。
ところでターゲットの PC では、「システム」の「プロセッサー」にて、「プロセッサー数」が 8個までいけるようなので、8個まで増やして、OK を押した。

processor

そんなことをしても、起動しないのは同じだった。 orz

現在、設定で「EFIを有効化」にチェックが入っているが、これを外すと、ハングする代わりに、クラッシュする。

色々探したり試したりした所..
Google で「VirtualBox 6.0 FreeBSD」で、期間を「1年以内」にして検索し、以下に同じ症状を見つけた。 (特徴的なクラッシュ画面が EFI を無効化したときと同じ症状!)

virtualbox.org • View topic - [Solved] pfSense crash while trying to install (FreeBSD)

その先にある、以下に示されている、

virtualbox.org • View topic - [Solved] VirtualBox 6 on Windows 10 Guru Meditation error (#p455778)

以下を実行した所.. (Cygwin から実行した)

$ /cygdrive/c/Program\ Files/Oracle/VirtualBox/VBoxManage.exe modifyvm fb121 --spec-ctrl on

起動するようになった!!

booted

ところで「キーボードの自動キャプチャー」についてメッセージが出ているが、自分はこのキーボードの自動キャプチャー機能がうっとうしいので、『入力』→『キーボード』→『キーボードの設定...』から「キーボードの自動キャプチャー」のチェックを外して OFF にしてしまった。

作業時間の都合で、ここまでで「ACPI シャットダウン」した。

● FreeBSD を最新に更新

root でログイン。

freebsd-update fetch を実行する。

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

ここで筆者の環境では都合により、環境変数 http_proxy の設定が必要であった。
root@fb121:~ # setenv http_proxy http://〜:〜/

root@fb121:~ # freebsd-update fetch
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching public key from update2.freebsd.org... done.
Fetching metadata signature for 12.1-RELEASE from update2.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 17 patches.....10... done.
Applying patches... done.
〜
The following files will be updated as part of updating to
12.1-RELEASE-p1:
〜

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

root@fb121:~ # uname -a
FreeBSD fb121.magic.or 12.1-RELEASE FreeBSD 12.1-RELEASE r354233 GENERIC  amd64

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

root@fb121:~ # freebsd-update install
Installing updates... done.

今回 kernel に関係しそうな更新も見えており、ここで再起動してもよいし、作業を続けた後にまとめて再起動してもいいかもしれない。
自分は、作業時間の都合で、ここでシャットダウン・電源 OFF した。 (未だ VirtualBox guest 用ツールをインストールしていないので、ここでシャットダウンの代わりに、ホスト側をサスペンドなどすると、時計がずれたりしてしまう。)

root@fb121:~ # shutdown -p now

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

root@fb121:~ # uname -a
FreeBSD fb121.magic.or 12.1-RELEASE-p1 FreeBSD 12.1-RELEASE-p1 GENERIC  amd64

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

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

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

ifconfig_em1=""
ifconfig_em1_ipv6="inet6 accept_rtadv"
ifconfig_em2="inet 192.168.56.121 netmask 255.255.255.0"
ifconfig_em2_ipv6="inet6 accept_rtadv"

ここで IPv6 アドレスについて、後でユニークローカルアドレス (ULA) を割り当てたいが、一旦このようにしておく。

また、em2 に与えた 192.168.56.121 などという固定 IPv4 アドレスについては、em2 には VirtualBox の DHCP サーバがいるのだが、そのアドレス範囲と重複しないように、『ホストネットワークマネージャー』の「DHCP サーバー」の設定を変更した。 (初期状態では重複していた)

変更前

DHCP before

変更後 (忘れずに「適用」押した)

DHCP after

● /tmp を Memory Disk に設定

/tmp に何か存在していたので、以下のようにして全て削除しておいた。

root@fb121:~ # cd /tmp

root@fb121:/tmp # ls -lA
total 16
drwxrwxrwt  2 root  wheel  512 Jan 15 11:08 .ICE-unix
drwxrwxrwt  2 root  wheel  512 Jan 15 11:08 .X11-unix
drwxrwxrwt  2 root  wheel  512 Jan 15 11:08 .XIM-unix
drwxrwxrwt  2 root  wheel  512 Jan 15 11:08 .font-unix

root@fb121:/tmp # rmdir .*-unix

root@fb121:/tmp # ls -lA
total 0

/etc/rc.conf に追記するために、まずは以下のようにする。

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

(「>>」で追記する。 くれぐれも間違って「>」で上書きしないように注意する。)

次に

root@fb121:/tmp # vi /etc/rc.conf

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

tmpmfs="YES"		# Set to YES to always create an mfs /tmp, NO to never
tmpsize="512m"		# Size of mfs /tmp if created

(上記ではメモリーサイズ 4GB に合わせてこれくらいに設定している。 自分は昔からメモリーサイズの 8分の1 に設定している。)

ここでシャットダウン・電源 OFF した。

再び起動すると、以下のように IP アドレスが割り当たっていた (vtnet0 は未割り当て)

root@fb121:~ # ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=81009b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,VLAN_HWFILTER>
	ether 08:00:27:21:18:8b
	inet6 fe80::a00:27ff:fe21:188b%em0 prefixlen 64 scopeid 0x1
	inet 10.0.2.15 netmask 0xffffff00 broadcast 10.0.2.255
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=81009b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,VLAN_HWFILTER>
	ether 08:00:27:4a:35:45
	inet6 fe80::a00:27ff:fe4a:3545%em1 prefixlen 64 scopeid 0x2
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
em2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=81009b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,VLAN_HWFILTER>
	ether 08:00:27:0b:e5:c7
	inet 192.168.56.121 netmask 0xffffff00 broadcast 192.168.56.255
	inet6 fe80::a00:27ff:fe0b:e5c7%em2 prefixlen 64 scopeid 0x3
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
vtnet0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=6c07bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,LRO,VLAN_HWTSO,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
	ether 08:00:27:52:d9:5a
	media: Ethernet 10Gbase-T <full-duplex>
	status: active
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
	options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
	inet6 ::1 prefixlen 128
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x5
	inet 127.0.0.1 netmask 0xff000000
	groups: lo
	nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>

また /tmp が正しく Memory Disk になっていた。

root@fb121:~ # df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ada0p2    4.8G    3.0G    1.5G    67%    /
devfs          1.0K    1.0K      0B   100%    /dev
/dev/ada0p4    2.9G    121M    2.6G     4%    /var
tmpfs          512M    4.0K    512M     0%    /tmp

root@fb121:~ # ls -al /tmp
total 4
drwxrwxrwt   6 root  wheel   256 Jan 15 11:52 .
drwxr-xr-x  19 root  wheel  1024 Jan 15 11:52 ..
drwxrwxrwt   2 root  wheel     0 Jan 15 11:52 .ICE-unix
drwxrwxrwt   2 root  wheel     0 Jan 15 11:52 .X11-unix
drwxrwxrwt   2 root  wheel     0 Jan 15 11:52 .XIM-unix
drwxrwxrwt   2 root  wheel     0 Jan 15 11:52 .font-unix

● ZFS を設定する

まずは、/usr/ports と、/usr/local を、ZFS 上に置くことにする。 (ただし ports は使わないなら不要)

root@fb121:~ # df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ada0p2    4.8G    3.0G    1.5G    67%    /
devfs          1.0K    1.0K      0B   100%    /dev
/dev/ada0p4    2.9G    121M    2.6G     4%    /var
tmpfs          512M    4.0K    512M     0%    /tmp

root@fb121:~ # gpart show
=>      40  67108784  ada0  GPT  (32G)
        40    409600     1  efi  (200M)
    409640  10485760     2  freebsd-ufs  (5.0G)
  10895400   8388608     3  freebsd-swap  (4.0G)
  19284008   6291456     4  freebsd-ufs  (3.0G)
  25575464  41533360     5  freebsd-zfs  (20G)

上記に見えるように、ZFS 用に用意したパーティションが ada0p5 であることを確認した。 (gpart show で、freebsd-zfs の行が、ada0 の列が 5 になっており、GPT の場合は「p」が間にはさまるようだ。)

zpool create を実行する。 プール名は「zfs」としておいた

root@fb121:~ # zpool create zfs ada0p5

ここで、以下のようなものが (コンソールに) 表示された。 (後から dmesg コマンドで確認することも出来る)

ZFS NOTICE: Prefetch is disabled by default if less than 4GB of RAM is present;
            to enable, add "vfs.zfs.prefetch_disable=0" to /boot/loader.conf.
ZFS filesystem version: 5
ZFS storage pool version: features support (5000)

後半の 2行はよいのだが、前半は、後で調整することにする。

次に zfs create で、/usr/ports 用と /usr/local 用のファイルシステムを作成する。
また zfs set で compression=lz4 (圧縮) を指定しておく。

root@fb121:~ # zfs create zfs/ports

root@fb121:~ # zfs set compression=lz4 zfs/ports

root@fb121:~ # zfs create zfs/local

root@fb121:~ # zfs set compression=lz4 zfs/local

root@fb121:~ # df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ada0p2    4.8G    3.0G    1.5G    67%    /
devfs          1.0K    1.0K      0B   100%    /dev
/dev/ada0p4    2.9G    121M    2.6G     4%    /var
tmpfs          512M    4.0K    512M     0%    /tmp
zfs             19G     23K     19G     0%    /zfs
zfs/ports       19G     23K     19G     0%    /zfs/ports
zfs/local       19G     23K     19G     0%    /zfs/local

起動時に ZFS が自動的にマウントされるように、/etc/rc.conf に設定しておく。

root@fb121:~ # egrep zfs_enable /etc/defaults/rc.conf >> /etc/rc.conf

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

/etc/rc.conf の追加行が以下のようになるように編集する。

zfs_enable="YES"	# Set to YES to automatically mount ZFS file systems

/usr/local と /usr/ports が zfs を向くようにする。 また、/zfs/ports のオーナーも設定しておいた。

zfs create 時に -o mountpoint=〜 でマウントポイントを指定する方法もあるのだが、もし zfs import したくなったときにややこしくなるので、何らかの理由でそうする必要がない限り、自分はあまり好みではないが、以降も参照。
(2020-09-09 追記) やはりシンボリックリンクでなく mountpoint=〜 でマウントポイントを設定すべきであった。 下の方を参照。
root@fb121:~ # cd /usr

root@fb121:/usr # ls -ld local
drwxr-xr-x  2 root  wheel  512 Nov  1 13:25 local

root@fb121:/usr # rmdir local

root@fb121:/usr # ln -s /zfs/local

root@fb121:/usr # ls -ld ports
ls: ports: No such file or directory

root@fb121:/usr # ln -s /zfs/ports

root@fb121:/usr # ls -ld /zfs/ports
drwxr-xr-x  2 root  wheel  2 Jan 15 12:03 /zfs/ports

root@fb121:/usr # chown nsmrtks /zfs/ports

root@fb121:/usr # ls -ld /zfs/ports
drwxr-xr-x  2 nsmrtks  wheel  2 Jan 15 12:03 /zfs/ports

ここでシャットダウン・電源 OFF した。

もし続いてそのまま起動すると、おそらく ZFS が自動的にマウントされるが、先ほどのように ZFS NOTICE: Prefetch is disabled by default if less than 4GB of RAM is present; 〜 のメッセージが出ると予想される。

筆者は必要推奨なメモリを確保の上 prefetch を有効にしたいので、VirtualBox で割り当てるメモリーサイズを増やすことにする。

VirtualBox の設定でメモリーサイズを増やすのだが、以前はホスト側の負担も考えてあまりこれ以上増やしたくないというのもあり、VirtualBox で設定できる最小単位である 1MB 単位で、メモリーサイズを少し変えては起動そしてシャットダウン・電源 OFF を繰り返し、先ほどのメッセージが出なくなるギリギリに調整したりしていたのだが (なお FreeBSD 12.0 のときはそのサイズは 4135MB であった)、今回の PC は物理搭載メモリ量に余裕があるので、5000MB 確保することにする。 (忘れずに「OK」押す)

memory size

これで起動すると、prefetch のメッセージが出ないことを確認した。

その後、Xfce か KDE5 のビルドで、kernel: swap_pager_getswapspace(32): failed などが表示されていたので、さらに 6000MB に増やした。
さらに、Chromium のビルドでエラーになったので、6000MB からさらに 8000MB に増やした。
さらに、portupgrade の実行で swap を使い果たしたので、8000MB からさらに 12000MB に増やした。
(swap も増やすべき気もするが)

● ports を導入

自分は ports で行くが、普通の人は代わりにバイナリパッケージを pkg コマンドでインストールした方が圧倒的に楽だと思います。 ただしその詳細はここでは触れません。 あしからず。
それでも簡単にいうと、pkg search 〜 でパッケージ名を探し、(sudo) pkg install 〜 でパッケージをインストールする感じ。
なお最初に「pkg」コマンドを実行すると、最初に pkg コマンド自体のインストールを尋ねられるので、y を押してインストールする。

まず portsnap fetch を実行する。

root@fb121:~ # setenv http_proxy http://〜:〜/

root@fb121:~ # portsnap fetch
Looking up portsnap.FreeBSD.org mirrors... 6 mirrors found.
Fetching public key from ec2-ap-northeast-1.portsnap.freebsd.org... done.
Fetching snapshot tag from ec2-ap-northeast-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Fetching snapshot generated at Wed Jan 15 09:16:21 JST 2020:
〜
Extracting snapshot... done.
Verifying snapshot integrity... done.
Fetching snapshot tag from ec2-ap-northeast-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Updating from Wed Jan 15 09:16:21 JST 2020 to Wed Jan 15 12:56:52 JST 2020.
Fetching 5 metadata patches... done.
Applying metadata patches... done.
Fetching 0 metadata files... done.
Fetching 4 patches. 
〜
done.
Applying patches... 
done.
Fetching 1 new ports or files... done.

次に、初回なので portsnap extract を実行する。

root@fb121:~ # su nsmrtks

nsmrtks@fb121:/root % portsnap extract
〜
Building new INDEX files... done.

nsmrtks@fb121:/root % ls /usr/ports/
CHANGES		README		base		dns		hungarian	net		science		x11-drivers
CONTRIBUTING.md	Templates	benchmarks	editors		irc		net-im		security	x11-fm
COPYRIGHT	Tools		biology		emulators	japanese	net-mgmt	shells		x11-fonts
GIDs		UIDs		cad		finance		java		net-p2p		sysutils	x11-servers
INDEX-12	UPDATING	chinese		french		korean		news		textproc	x11-themes
Keywords	accessibility	comms		ftp		lang		polish		ukrainian	x11-toolkits
LEGAL		arabic		converters	games		mail		ports-mgmt	vietnamese	x11-wm
MOVED		archivers	databases	german		math		portuguese	www
Makefile	astro		deskutils	graphics	misc		print		x11
Mk		audio		devel		hebrew		multimedia	russian		x11-clocks

ところで、先に zfs set したとおり、ファイルシステムは圧縮されており、

root@fb121:~ # zfs get compression
NAME       PROPERTY     VALUE     SOURCE
zfs        compression  off       default
zfs/local  compression  lz4       local
zfs/ports  compression  lz4       local

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

root@fb121:~ # zfs get compressratio
NAME       PROPERTY       VALUE  SOURCE
zfs        compressratio  2.47x  -
zfs/local  compressratio  1.00x  -
zfs/ports  compressratio  2.47x  -

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

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

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

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

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

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

distfiles old

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

そうしたら、旧環境の『仮想メディアマネージャー』に見えている distfiles.vdi を選択し..

distfiles

..『解放』を押すと、

kaiho

..ダイアログが出るので「解放」を押すと、distfiles.vdi が、以下のように「未割り当て」になった。

miwariate

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

no distfiles

今回、旧 PC 上の VirtualBox から新 PC 上の VirtualBox へ distfiles.vdi を移動するので、(旧 PC の) 仮想メディアマネージャーから distfiles.vdi の除去も行っておく。
仮想メディアマネージャーにて distfiles.vdi を右クリックし、「除去...」を選択すると、

jokyo

..ファイルを削除するか保持するか聞かれるので、「保持」を押す。

hoji

これで、仮想メディアマネージャーからも distfiles.vdi がいなくなった。

そうしたら、distfiles.vdi のファイルを、旧 PC から新 PC にコピーする (場所は VirtualBox の仮想ディスクがある所)。

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

storage

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

SAS added

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

さらに、「コントローラー: LsiLogic SAS」の右側の方にある「■」に「+」のようなアイコン (「ハードディスクの追加」) か、あるいは下の方の「■」に「+」を押して「ハードディスク追加」を選択し..

attach virtual disk

「追加」を押したら、distfiles.vdi ファイルを探して「開く」を押し、「選択」すると、

select virtual disk

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

virtual disk attached

忘れずに「OK」押す。

さて、新環境 (fb121) を再び起動する。
追加した仮想ハードディスクは以下のように見えている。 (起動時に表示される他 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: 16384MB (33554432 512 byte sectors)
〜

今回、/home/distfiles というディレクトリにマウントすることとし、/usr/ports/distfiles からシンボリックリンクを張ることとする。
(なぜ /usr/ports/distfiles に直接マウントしないかというと、後述の NFS を設定したときにディレクトリ名が長くなってしまうからというしょうもない? 理由である。)

まず /home は、/usr/home へのシンボリックリンクになっていたので、実ディレクトリに変更した。

root@fb121:~ # ls -ld /home
lrwxr-xr-x  1 root  wheel  8 Dec 14 18:31 /home -> usr/home

root@fb121:~ # cd /

root@fb121:/ # rm -i home
remove home? y

root@fb121:/ # mv -i usr/home .

root@fb121:/ # ls -ld home
drwxr-xr-x  3 root  wheel  512 Jan 16 11:12 home

root@fb121:/ # ls -l home
total 4
drwxr-xr-x  2 nsmrtks  nsmrtks  512 Jan 15 14:00 nsmrtks

root@fb121:/ # df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ada0p2    4.8G    3.0G    1.5G    67%    /
devfs          1.0K    1.0K      0B   100%    /dev
/dev/ada0p4    2.9G    287M    2.4G    10%    /var
zfs             19G     23K     19G     0%    /zfs
zfs/ports       19G    189M     19G     1%    /zfs/ports
zfs/local       19G     23K     19G     0%    /zfs/local
tmpfs          512M    4.0K    512M     0%    /tmp

ディレクトリの作成と /etc/fstab の編集を行う。

root@fb121:~ # mkdir /home/distfiles

root@fb121:~ # chown nsmrtks /home/distfiles

root@fb121:~ # ls -l /home
total 8
drwxr-xr-x  2 nsmrtks  wheel    512 Jan 16 11:16 distfiles
drwxr-xr-x  2 nsmrtks  nsmrtks  512 Jan 15 14:00 nsmrtks

root@fb121:~ # gpart show da0
=>      40  33554352  da0  GPT  (16G)
        40  33554352    1  freebsd-ufs  (16G)

root@fb121:~ # vi /etc/fstab

以下の行を /etc/fstab に追記した。

# 2020-01-16 nsmrtks
/dev/da0p1	/home/distfiles	ufs	rw	2	2

さらに作業を続ける.. (シンボリックリンクの作成を行う)

root@fb121:~ # cd /usr/ports

root@fb121:/usr/ports # ls -ld distfiles
ls: distfiles: No such file or directory

root@fb121:/usr/ports # ln -s /home/distfiles

root@fb121:/usr/ports # ls -ld distfiles
lrwxr-xr-x  1 root  wheel  15 Jan 16 11:18 distfiles -> /home/distfiles

root@fb121:/usr/ports # mount /home/distfiles

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

root@fb121:/usr/ports # df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ada0p2    4.8G    3.0G    1.5G    67%    /
devfs          1.0K    1.0K      0B   100%    /dev
/dev/ada0p4    2.9G    287M    2.4G    10%    /var
zfs             19G     23K     19G     0%    /zfs
zfs/ports       19G    189M     19G     1%    /zfs/ports
zfs/local       19G     23K     19G     0%    /zfs/local
tmpfs          512M    4.0K    512M     0%    /tmp
/dev/da0p1      15G     13G    820M    94%    /home/distfiles

● sudo をインストールする

先ほどの手順で ports をインストールしたので、とりあえず普通にビルド・インストールする。

(繰り返しになるが普通の人は代わりにバイナリパッケージを pkg install sudo でインストールすればいいと思います。 以下同様。 なお後述の teetime も参考)
root@fb121:~ # setenv http_proxy http://〜:〜/

root@fb121:~ # cd /usr/ports/security/sudo

root@fb121:/usr/ports/security/sudo # ls
Makefile	distinfo	files		pkg-descr	pkg-plist

root@fb121:/usr/ports/security/sudo # nice make install |& tee install.log
〜

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

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

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

root@fb121:/usr/ports/security/sudo # cd

root@fb121:~ # visudo

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

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

diff で示すと以下のようである。

root@fb121:~ # diff -u /usr/local/etc/sudoers.dist /usr/local/etc/sudoers
--- /usr/local/etc/sudoers.dist	2020-01-16 11:49:27.386564000 +0900
+++ /usr/local/etc/sudoers	2020-01-16 11:54:38.482333000 +0900
@@ -49,7 +49,9 @@
 ## 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"
+# 2020-01-16 nsmrtks
+
 ##
 ## X11 resource path settings
 # Defaults env_keep += "XAPPLRESDIR XFILESEARCHPATH XUSERFILESEARCHPATH"
@@ -77,6 +79,9 @@
 # Defaults!/usr/local/bin/sudoreplay !log_output
 # Defaults!REBOOT !log_output
 
+# 2020-01-16 nsmrtks
+Defaults env_keep += "http_proxy https_proxy"
+
 ##
 ## Runas alias specification
 ##
@@ -87,7 +92,8 @@
 root ALL=(ALL) ALL
 
 ## Uncomment to allow members of group wheel to execute any command
-# %wheel ALL=(ALL) ALL
+%wheel ALL=(ALL) ALL
+# 2020-01-16 nsmrtks
 
 ## Same thing without a password
 # %wheel ALL=(ALL) NOPASSWD: ALL

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

nsmrtks@fb121:~ % sudo pwd

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

Password:パスワード↵
/home/nsmrtks

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

これも、ports でなく pkg を用いるなら不用と思われる。

/etc/make.conf ファイルを新規作成して、以下の内容にする。

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

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

● teetime!

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

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

筆者の環境では、いちどホームディレクトリを旧環境からコピーしてしまえば (後述)、~/bin にある teetime コマンドが使えるようになるのだが、この時点で未だホームディレクトリをコピーしてきていない。
筆者は一般ユーザ nsmrtks の作成時、ログインシェルに tcsh を選択したが、デフォルトで配置される ~/.cshrc によれば、/etc/login.conf により、~/bin が自動的に $path に追加されているらしい。 そこで、~/bin ディレクトリを作成し、そこに teetime スクリプトを配置すれば、使えるようになるので、今の所はこれでしのぐことにする。 (もしかすると rehash コマンドの実行が 1回必要かもしれない)

なお、ここまで説明してこなかったが、この時点でホスト (MS-Windows) 側とファイルをやり取りするには、ホスト側に Cygwin をインストールし、Cygwin64 Terminal 側から ssh で 192.168.56.121 (先ほど設定した IPv4 アドレス) に対してアクセスするか、FreeBSD 側から 10.0.2.2 に対し ssh アクセスすれば、ファイルのやり取り等が出来る。
後者は、あらかじめ Cygwin64 Terminal を右クリック『管理者として実行』→ ssh-host-config コマンドの実行が一度必要である。 (コントロールパネル → 『Windows Defender ファイアウォール』に、「新しい規則...」で TCP 22 を許可する設定も必要かもしれない。 筆者は特に他 PC とファイルをやり取りするためにこれも設定した。)

作業時間の都合で、ここでシャットダウン・電源 OFF した。

● portupgrade をインストールする

これも ports でなく pkg を用いるなら不用である。

先ほど紹介した teetime スクリプトを用いている。

nsmrtks@fb121:~ % setenv http_proxy http://〜:〜/

nsmrtks@fb121:~ % cd /usr/ports/ports-mgmt/portupgrade

nsmrtks@fb121:/usr/ports/ports-mgmt/portupgrade % pwd
/zfs/ports/ports-mgmt/portupgrade

nsmrtks@fb121:/usr/ports/ports-mgmt/portupgrade % nice teetime -t install make install
logging (from the next line till the end) to install20200120.log
teetime! Mon Jan 20 10:02:22 JST 2020
teetime! working directory is /usr/ports/ports-mgmt/portupgrade
teetime> make install
〜
===>   Registering installation for ruby26-gems-3.0.6 as automatic
pkg-static: Unable to access file /zfs/ports/devel/ruby-gems/work/stage/usr/local/bin/gem26:No such file or directory
*** Error code 74

Stop.
make[7]: stopped in /zfs/ports/devel/ruby-gems
*** Error code 1

Stop.
make[6]: stopped in /zfs/ports/devel/ruby-gems
*** Error code 1

Stop.
make[5]: stopped in /zfs/ports/devel/ruby-gems
*** Error code 1

Stop.
make[4]: stopped in /zfs/ports/devel/rubygem-rdoc
*** Error code 1

Stop.
make[3]: stopped in /zfs/ports/databases/ruby-bdb
*** Error code 1

Stop.
make[2]: stopped in /zfs/ports/databases/ruby-bdb
*** Error code 1

Stop.
make[1]: stopped in /zfs/ports/ports-mgmt/portupgrade
*** Error code 1

Stop.
make: stopped in /zfs/ports/ports-mgmt/portupgrade
teetime! Mon Jan 20 10:12:53 JST 2020

おやっ、エラーになる。

もう一度やり直しても同じだった。 orz

最後の手段で pkg で portupgrade をインストールする.. (最初からそうしろというのもあるが)

ここで、/var/tmp の下に log というディレクトリと、さらにその下に Install というディレクトリを作成し、その下にログを保存して、後で参考にできるようにしている。 これについては、pkg でインストールする場合も役に立つと思う。

nsmrtks@fb121:~ % cd /var/tmp

nsmrtks@fb121:/var/tmp % ls
vi.recover

nsmrtks@fb121:/var/tmp % mkdir log

nsmrtks@fb121:/var/tmp % cd log

nsmrtks@fb121:/var/tmp/log % mkdir Install

nsmrtks@fb121:/var/tmp/log % cd Install

nsmrtks@fb121:/var/tmp/log/Install % nice teetime -t portupgrade sudo pkg install portupgrade
logging (from the next line till the end) to portupgrade20200120.log
teetime! Mon Jan 20 10:20:45 JST 2020
teetime! working directory is /var/tmp/log/Install
teetime> sudo pkg install portupgrade
〜
The following 4 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	portupgrade: 2.4.16,2
	ruby26-bdb: 0.6.6_7
	db5: 5.3.28_7

Installed packages to be REINSTALLED:
	pkg-1.12.0 (option removed: GSSAPI_BASE)

Number of packages to be installed: 3
Number of packages to be reinstalled: 1

The process will require 51 MiB more space.
19 MiB to be downloaded.

Proceed with this action? [y/N]: y
[1/4] Fetching pkg-1.12.0.txz: .......... done
[2/4] Fetching portupgrade-2.4.16,2.txz: .......... done
[3/4] Fetching ruby26-bdb-0.6.6_7.txz: .......... done
[4/4] Fetching db5-5.3.28_7.txz: .......... done
Checking integrity... done (0 conflicting)
[1/4] Installing db5-5.3.28_7...
[1/4] Extracting db5-5.3.28_7: .......... done
[2/4] Installing ruby26-bdb-0.6.6_7...
[2/4] Extracting ruby26-bdb-0.6.6_7: .......... done
[3/4] Reinstalling pkg-1.12.0...
[3/4] Extracting pkg-1.12.0: .......... done
[4/4] Installing portupgrade-2.4.16,2...
[4/4] Extracting portupgrade-2.4.16,2: .......... done
teetime! Mon Jan 20 10:21:31 JST 2020

今度はうまくいったようだ。

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

前述したが、virtualbox-ose-additions をインストールしていないと、ホストをサスペンド/レジュームするたびに、VirtualBox ゲストの時計が遅れていったりしてしまう。

ここからは、先ほどインストールした portupgrade に付属の portinstall コマンドを用いて ports のソフトをインストールしていく。 (繰り返しになるが pkg を用いるなら考慮不要)

MS-Windows や GNU/Linux では、Guest Additions CD を挿入して.. などというのがあった気がするが、FreeBSD では ports や pkg からインストールできる。

nsmrtks@fb121:~ % setenv http_proxy http://〜:〜/

nsmrtks@fb121:~ % cd /var/tmp/log/Install/

nsmrtks@fb121:/var/tmp/log/Install % nice teetime -t virtualbox-ose-additions_ portinstall -s virtualbox-ose-additions
logging (from the next line till the end) to virtualbox-ose-additions_20200120.log
teetime! Mon Jan 20 10:33:49 JST 2020
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s virtualbox-ose-additions
〜

virtualbox-ose-additions のオプション 『OPENGL』「3D pass-through support (requires X11)」 というのは何だろう..
デフォルト OFF になっているけど、今回 X11 (xorg) もインストールすることにして、試しに ON にしてみるか..

後述するが、この設定には問題があった。 今ここを読んでいる読者におかれては、この設定を ON にしないほうが良い。

OPENGL

〜
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
teetime! Mon Jan 20 12:28:53 JST 2020

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

さて、ビルド・インストール中のメッセージが、teetime コマンドにより /var/tmp/log/Install/ 以下のログファイルに残っているので、それを見てみる。 (今回は virtualbox-ose-additions_20200120.log というファイル名であった)
これと、/usr/local/etc/rc.d/ 以下にインストールされた vboxguest と vboxservice とさらに dbus を参考にして..

nsmrtks@fb121:~ % ls /usr/local/etc/rc.d/
dbus		vboxguest	vboxservice

/etc/rc.conf に以下のような行を追加した。

# 2020-01-20 nsmrtks
#
# (see /usr/local/etc/rc.d/dbus)
dbus_enable="YES"		# to enable the D-BUS messaging system
#
# (see /usr/local/etc/rc.d/{vboxguest,vboxservice}
vboxguest_enable="YES"		# Set it to YES to enable vboxguest on startup
vboxservice_enable="YES"	# Set it to "YES" to enable VBoxService.

いったんシャットダウン・電源 OFF した。

次に、関係あるか分からないが、VirtualBox の設定の「ディスプレイ」で、「3Dアクセラレーションを有効化」というのを、チェックを付けてみた。 (忘れずに「OK」押す)

3D

そうして起動すると、「vboxguest: loaded successfully」や、VBoxService が起動したようなメッセージが出ていた。

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

nsmrtks@fb121:~ % kldstat
Id Refs Address                Size Name
 1   18 0xffffffff80200000  2448ef8 kernel
 2    1 0xffffffff82b11000   2472e0 zfs.ko
 3    1 0xffffffff82d59000     7628 opensolaris.ko
 4    1 0xffffffff82d61000    2e863 vboxguest.ko
 5    1 0xffffffff82d90000     2668 intpm.ko
 6    1 0xffffffff82d93000      b50 smbus.ko
 7    1 0xffffffff82d94000     88d8 tmpfs.ko

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

nsmrtks@fb121:~ % ps ax | egrep -i box
 951  -  Is   0:00.03 /usr/local/sbin/VBoxService
1101  0  R+   0:00.04 egrep -i box

● X11 (xorg) をインストールしてみる

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

nsmrtks@fb121:~ % pkg info | egrep X
〜
xorg-server-1.18.4_13,1        X.Org X server and related programs
〜

この状態で startx を実行すると、X11 サーバを起動できるだろうかと思ったが.. startx コマンドが入っていなかった。

nsmrtks@fb121:~ % startx
startx: Command not found.

nsmrtks@fb121:~ % rehash

nsmrtks@fb121:~ % startx
startx: Command not found.

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

nsmrtks@fb121:~ % setenv http_proxy http://〜:〜/

nsmrtks@fb121:~ % cd /var/tmp/log/Install/

nsmrtks@fb121:/var/tmp/log/Install % nice teetime -t xorg portinstall -s xorg
logging (from the next line till the end) to xorg20200120.log
teetime! Mon Jan 20 13:34:01 JST 2020
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s xorg
〜
teetime! Mon Jan 20 13:43:05 JST 2020

● X11 サーバを起動してみる

あらためて、startx を実行すると、X11 サーバを起動できるだろうか。

800x600

xdpyinfo でも確かめた所、SVGA (800x600) で起動したようだ。

いったん X11 サーバを終了して、今度は VirtualBox をフルスクリーンモードにして、startx してみると..

still 800x600

ここでフルスクリーンモードは 1920x1080 のはずなのだが、それでも 800x600 で起動してしまったようだ。

念のため xrandr を引数なしで実行した所、1920x1080 にも出来るようだ。

そこで早速 xarndr -s 1920x1080 を実行してみた所..

xrandr -s 1920x1080

画面をいっぱいに広げることが出来た。 ただ、(twm で) ウィンドウを画面の右や下の方に持っていこうとしても持っていけなかったりという現象が見られた。 xrandr と twm の相性が悪いのだろうか??

ところで実は今まで筆者は、VirtualBox では通常の X11 サーバは使わず、代わりに VNC サーバをインストールして、MS-Windows 側から VNC クライアントをフルスクリーンで立ち上げて使うという使用法をしていた。

今回、VirtualBox で直 X11 サーバでいけるだろうか?

● 統合デスクトップ (ウィンドウマネージャ) をインストールする

◎ Xfce をインストール、実行しようとする、が..

筆者は以前までウィンドウマネージャとして mwm (Motif Window Manager) を長らく使っていたり、また WindowMaker も少し使っていたのだが、どうも古くて動作に支障が出ていると思うようになった。 (なおこれまでのスクリーンショットを見ても分かる通り今起動しているのは twm である。twm も昔は使っていた。)

やはり GNOME か KDE なのか.. と、昔に環境を構築する時に思っていた時、第三の統合デスクトップ?として、「GNOME で使われている GTK+ ツールキットをベースにしたデスクトップ環境」 でありながらより軽い Xfce というものもあるということを以下などで知った。

FreeBSD ハンドブック → パート〓I.〓導入 → 第5章 X Window System → 5.7. デスクトップ環境

昔の環境ではどれにするか決めあぐねて、3つともインストール(!)したりしていた。
ここでは Xfce にしてみる。 (他の作業環境では KDE を使ったり GNOME を試したりもしている)

nsmrtks@fb121:~ % setenv http_proxy http://〜:〜/

nsmrtks@fb121:~ % cd /var/tmp/log/Install/

nsmrtks@fb121:/var/tmp/log/Install % nice teetime -t xfce portinstall -s xfce
logging (from the next line till the end) to xfce20200120.log
teetime! Mon Jan 20 14:29:10 JST 2020
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s xfce
〜
teetime! Mon Jan 20 15:58:30 JST 2020

無事にビルド・インストールできた。

Xfce は startxfce4 コマンドで起動できる。

お試しとして、まず、先ほどと同様に startx で X11 と、twm を起動する。
次に、その twm を左クリックメニューから終了させて、startxfce4 で Xfce を起動する。

nsmrtks@fb121:~ % startxfce4
/usr/local/bin/startxfce4: X server already running on display :0
OpenGL Warning: Failed to connect to host. Make sure 3D acceleration is enabled for this VM.

..だめだった。

X11 サーバを終了させて、コンソールから startxfce4 してみたが..

nsmrtks@fb121:~ % startxfce4
/usr/local/bin/startxfce4: Starting X server


X.Org X Server 1.18.4
Release Date: 2016-07-19
X Protocol Version 11, Revision 0
Build Operating System: FreeBSD 12.1-RELEASE-p1 amd64 
Current Operating System: FreeBSD fb121.magic.or 12.1-RELEASE-p1 FreeBSD 12.1-RELEASE-p1 GENERIC amd64
Build Date: 20 January 2020  12:12:21PM
 
Current version of pixman: 0.38.4
	Before reporting problems, check http://wiki.x.org
	to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
	(++) from command line, (!!) notice, (II) informational,
	(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Tue Jan 21 09:52:18 2020
(==) Using default built-in configuration (39 lines)
scfb trace: probe start
scfb trace: probe done
OpenGL Warning: Failed to connect to host. Make sure 3D acceleration is enabled for this VM.
xinit: connection to X server lost

waiting for X server to shut down (II) Server terminated successfully (0). Closing log file.

..それでもだめだった。

その後も、いつの間にかインストールされていた hald を有効にしたり.. (/etc/rc.conf に以下を追記して sudo /usr/local/etc/rc.d/hald start を実行など。 ちなみに hald を有効にすると lshal というコマンドが使えるようになる。)

# 2020-01-21 nsmrtks
hald_enable="YES"		# to enable the HAL daemon:

.. sudo Xorg -configure で生成した xorg.conf.new を編集して /etc/X11/xorg.conf に置いたりしてみたが、状況は変わらなかった。

◎ KDE5 をインストール、実行してみる、が..

KDE (KDE5) ならどうだろうか。

nsmrtks@fb121:~ % setenv http_proxy http://〜:〜/

nsmrtks@fb121:~ % cd /var/tmp/log/Install/

nsmrtks@fb121:/var/tmp/log/Install % nice teetime -t kde5_ portinstall -s kde5
logging (from the next line till the end) to kde5_20200121.log
teetime! Tue Jan 21 10:29:31 JST 2020
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s kde5
〜
ninja: build stopped: subcommand failed.
===> Compilation failed unexpectedly.
Try to set MAKE_JOBS_UNSAFE=yes and rebuild before reporting the failure to
the maintainer.
*** Error code 1

Stop.
make[5]: stopped in /zfs/ports/sysutils/ksystemlog
*** Error code 1

Stop.
make[4]: stopped in /usr/ports/sysutils/ksystemlog
*** Error code 1

Stop.
make[3]: stopped in /zfs/ports/sysutils/kdeadmin
*** Error code 1

Stop.
make[2]: stopped in /usr/ports/sysutils/kdeadmin
*** Error code 1

Stop.
make[1]: stopped in /zfs/ports/x11/kde5
*** Error code 1

Stop.
make: stopped in /zfs/ports/x11/kde5
** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portinstall20200121-81015-tb3fdn env make FETCH_BEFORE_ARGS=-q
** Fix the problem and try again.
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
Password:
** Listing the failed packages (-:ignored / *:skipped / !:failed)
	! x11/kde5	(new compiler error)
teetime! Tue Jan 21 15:44:54 JST 2020

変な所で止まってしまった。

いまいちどやり直してみる。 (clean してしまわないよう portinstall のオプションに -w を付ける)

nsmrtks@fb121:/var/tmp/log/Install % nice teetime -t kde5_ portinstall -sw kde5
conflicting kde5_20200121.log
logging (from the next line till the end) to kde5_2020012115.log
teetime! Tue Jan 21 15:46:06 JST 2020
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -sw kde5
〜
teetime! Tue Jan 21 18:57:09 JST 2020

やり直したら何故かうまくいったようだ。

以下に従い (再掲)、

FreeBSD ハンドブック → パート〓I.〓導入 → 第5章 X Window System → 5.7. デスクトップ環境

以下の行を /etc/fstab に追加して、sudo mount /proc を実行した。

# 2020-01-22 nsmrtks
proc		/proc		procfs	rw	0	0

そして、先ほどの Xfce のときと同じように、startx してから、twm を左クリックメニューから終了させて、以下を実行してみた。

nsmrtks@fb121:~ % ck-launch-session startplasma-x11

すると、たしかに KDE のウィンドウマネージャのようなものが起動したが、KDE のタスクバー? のようなものが表示されていないし、思っていた KDE5 と違うようだ。

そこで、X11 を終了させて、今度は以下の内容を持つ .xinitrc を作成し、startx してみた。

ck-launch-session startplasma-x11

X11 のようなものは起動したが、黒画面のままだった。

さらに、sddm をインストールし、

nsmrtks@fb121:~ % cd /var/tmp/log/Install/

nsmrtks@fb121:/var/tmp/log/Install % nice teetime -t sddm portinstall -s sddm
〜

以下を /etc/rc.conf に追記して、再起動してみたが、

# 2020-01-22 nsmrtks
sddm_enable="YES"		# to start SDDM at boot time

黒画面だった。

..これはかなり困った。 (VirtualBox 上の) FreeBSD は、Xfce も KDE5 もまともに動かせないのだろうか? 自分だけ?

◎ GNOME をインストール、実行してみる、が..

nsmrtks@fb121:~ % setenv http_proxy http://〜:〜/

nsmrtks@fb121:~ % cd /var/tmp/log/Install/

nsmrtks@fb121:/var/tmp/log/Install % nice teetime -t gnome3_ portinstall -s gnome3
logging (from the next line till the end) to gnome3_20200122.log
teetime! Wed Jan 22 09:30:20 JST 2020
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s gnome3
〜
teetime! Wed Jan 22 10:52:48 JST 2020

ビルドは出来たようだ。

(.xinitrc を消去しておいた上で) startx を実行し、次に twm を終了させ、gnome-session を実行する。

しかし、

nsmrtks@fb121:~ % gnome-session
OpenGL Warning: Failed to connect to host. Make sure 3D acceleration is enabled for this VM.
OpenGL Warning: Failed to connect to host. Make sure 3D acceleration is enabled for this VM.
gnome-session-binary 1227 - - WARNING: software acceleration check failed: Child process exited with code 1
Unable to init server: Could not connect to 127.0.0.1: Connection refused

** (gnome-session-failed:1239): WARNING **: 11:02:09.328: Cannot open display: 
Terminated

(VirtualBox 上の) FreeBSD は、GNOME もまともに動かせないのだろうか?

◎ 問題は VirtualBox と 3D acceleration だった..

散々悩んで、情報を探していると、以下に辿り着いた。

virtualbox.org • View topic - 3D stopped working in guest after host hardware upgrade

ports (portinstall) でインストールした virtualbox-ose-additions は virtualbox-ose-additions-5.2.34_1 というものだが、ホストで動いている VirturlBox は 6.1 で、バージョンが違いすぎる。 かつ、3D 機能を ON にしている。

そこで、virtualbox-ose-additions を、先ほどは 『OPENGL』「3D pass-through support (requires X11)」 を ON にしてビルドしていたが、これを OFF のまま (デフォルト) にしてビルドし直し、シャットダウン・電源 OFF し、 VirturlBox の「3Dアクセラレーションを有効化」のチェックを外して (デフォルト)、再び起動した。

nsmrtks@fb121:~ % sudo pkg delete virtualbox-ose-additions
〜
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 1 packages (of 0 packages in the universe):

Installed packages to be REMOVED:
	virtualbox-ose-additions-5.2.34_1

Number of packages to be removed: 1

The operation will free 15 MiB.

Proceed with deinstalling packages? [y/N]: y↵
〜

nsmrtks@fb121:~ % cd /var/db/pkg/

nsmrtks@fb121:/var/db/pkg % cd ../ports

nsmrtks@fb121:/var/db/ports % ls -ld *virt*
drwxr-xr-x  2 root  wheel  512 Jan 20 12:25 emulators_virtualbox-ose-additions

nsmrtks@fb121:/var/db/ports % ls -l emulators_virtualbox-ose-additions/
total 4
-rw-r--r--  1 root  wheel  290 Jan 20 12:25 options

nsmrtks@fb121:/var/db/ports % sudo rm -fr emulators_virtualbox-ose-additions

nsmrtks@fb121:/var/db/ports % cd /var/tmp/log/Install/

nsmrtks@fb121:/var/tmp/log/Install % nice teetime -t virtualbox-ose-additions_ portinstall -s virtualbox-ose-additions
logging (from the next line till the end) to virtualbox-ose-additions_20200122.log
teetime! Wed Jan 22 11:21:11 JST 2020
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s virtualbox-ose-additions
〜
teetime! Wed Jan 22 11:22:49 JST 2020

これで startxfce4 してみると..

startxfce4

Xfce が何事もなかったように起動した!

OpenGL Warning: Failed to connect to host. Make sure 3D acceleration is enabled for this VM. というメッセージが何度となく出ていたが、Warning であり Error とかではないので軽視していたが、これが重要なメッセージだったようだ。

ck-launch-session startplasma-x11 及び gnome-session も試してみたが、それぞれ KDE5 及び GNOME が正しく起動した。

非常に遠回りしてしまったが、これで統合デスクトップ環境が使えそうだ。

ところで、VirtualBox で X11 を使うと、マウスクリックが、最初は反応せず、2回か 3回クリックしてから反応するようだ。 これは以前からそうだった。 慣れるしかないだろうか。

● rsync をインストールする

nsmrtks@fb121:~ % setenv http_proxy http://〜:〜/
nsmrtks@fb121:~ % cd /var/tmp/log/Install/
nsmrtks@fb121:/var/tmp/log/Install % nice teetime -t rsync portinstall -s rsync
logging (from the next line till the end) to rsync20200122.log
teetime! Wed Jan 22 13:02:49 JST 2020
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s rsync
〜
teetime! Wed Jan 22 13:03:09 JST 2020

無事にビルド・インストールできた。

● Samba を設定する

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

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

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

nsmrtks@fb121:/var/tmp/log/Install % ls -ld /usr/ports/*/samba*
-rw-r--r--  1 nsmrtks  wheel  18342499 Dec 10 17:10 /usr/ports/distfiles/samba-4.10.11.tar.gz
drwxr-xr-x  3 nsmrtks  wheel         6 Jan 15 13:59 /usr/ports/dns/samba-nsupdate
drwxr-xr-x  3 nsmrtks  wheel         7 Jan 20 15:58 /usr/ports/net/samba410

nsmrtks@fb121:/var/tmp/log/Install % pkg info | egrep samba
samba410-4.10.11               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 に追記する。 (/usr/local/etc/rc.d/samba_server を参照)

# (see /usr/local/etc/rc.d/samba_server)
samba_server_enable="YES"

Samba を起動する。

nsmrtks@fb121:~ % cd /

nsmrtks@fb121:/ % sudo /usr/local/etc/rc.d/samba_server start
〜
Performing sanity check on Samba configuration: OK
Starting nmbd.
Starting smbd.

nsmrtks@fb121:/ % ps ax | egrep mb
6431  -  Ss     0:01.92 /usr/local/sbin/nmbd --daemon --configfile=/usr/local/etc/smb4.conf
6436  -  Ss     0:10.33 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf
6438  -  S      0:00.00 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf
6439  -  S      0:00.00 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf
6440  -  S      0:00.00 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf
6442  0  S+     0:00.00 egrep mb

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

nsmrtks@fb121:~ % sudo pdbedit -a -u nsmrtks
〜
new password:パスワードを考えて入力↵
retype new password:もう一度入力↵
Unix username:        nsmrtks
NT username:          
Account Flags:        [U          ]
User SID:             S-1-5-21-3039203480-3074022687-2459231553-1000
Primary Group SID:    S-1-5-21-3039203480-3074022687-2459231553-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:          9223372036854775807 seconds since the Epoch
Kickoff time:         9223372036854775807 seconds since the Epoch
Password last set:    Wed, 22 Jan 2020 13:31:34 JST
Password can change:  Wed, 22 Jan 2020 13:31:34 JST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

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

\\fb

● 梅フォントをインストールする

筆者が好んで使わせてもらっているフォントである。 これを Emacs や rxvt-unicode やブラウザで使う。

nsmrtks@fb121:~ % setenv http_proxy http://〜:〜/

nsmrtks@fb121:~ % cd /var/tmp/log/Install/

nsmrtks@fb121:/var/tmp/log/Install % nice teetime -t ja-font-ume_ portinstall -s ja-font-ume
logging (from the next line till the end) to ja-font-ume_20200122.log
teetime! Wed Jan 22 17:26:50 JST 2020
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s ja-font-ume
〜
teetime! Wed Jan 22 17:27:01 JST 2020

● nkf (ja-nkf) をインストールする

nsmrtks@fb121:~ % setenv http_proxy http://〜:〜/

nsmrtks@fb121:~ % cd /var/tmp/log/Install/

nsmrtks@fb121:/var/tmp/log/Install % nice teetime -t ja-nkf_ portinstall -s ja-nkf
logging (from the next line till the end) to ja-nkf_20200122.log
teetime! Wed Jan 22 17:36:26 JST 2020
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s ja-nkf
〜
teetime! Wed Jan 22 17:36:32 JST 2020

● Emacs をインストールする

nsmrtks@fb121:~ % setenv http_proxy http://〜:〜/

nsmrtks@fb121:~ % cd /var/tmp/log/Install/

nsmrtks@fb121:/var/tmp/log/Install % nice teetime -t emacs portinstall -s emacs
logging (from the next line till the end) to emacs20200123.log
teetime! Thu Jan 23 09:05:33 JST 2020
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s emacs
〜
teetime! Thu Jan 23 09:12:00 JST 2020

無事にビルド・インストールできた。

● rxvt-unicode (urxvt) をインストールする

xterm 等の代わりに用いる。

nsmrtks@fb121:~ % setenv http_proxy http://〜:〜/

nsmrtks@fb121:~ % cd /var/tmp/log/Install/

nsmrtks@fb121:/var/tmp/log/Install % nice teetime -t rxvt-unicode_ portinstall -s rxvt-unicode
logging (from the next line till the end) to rxvt-unicode_20200123.log
teetime! Thu Jan 23 09:19:18 JST 2020
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s rxvt-unicode
〜
teetime! Thu Jan 23 09:20:04 JST 2020

無事にビルド・インストールできた。

● IPv6 のユニークローカルアドレス (ULA) を割り当てるなど

これもおそらく筆者の環境に特有の話かもしれない..

FreeBSD や NetBSD では、IPv6 のリンクローカルアドレス (IPv6 ルーターがなくても自動的に割り当てられるが同一ネットワーク内でしか通信できない) で NFS が通信できたが、これが Ubuntu GNU/Linux 相手だとどうしてもうまくいかなかった (同一の VirtualBox ホストの「ホストオンリーアダプター」を共有している場合でも)。
また、別の物理 PC をまたぎ、少なくとも一方が VirtualBox という場合も、経験上、リンクローカルアドレスでは都合が良くなさそうだ。
しかし当職場には未だ IPv6 環境が来ていない。
このような場合、リンクローカルアドレスよりもよりしっかりした IPv6 アドレスとして、ユニークローカルアドレス (ULA) を用いるのがいいようだ。

ULA に基づく IPv6 アドレスを em1 及び em2 インターフェイスに割り当てる。

ここで em1 及び em2 とは、(筆者の環境では) VirtualBox のネットワークの設定で以下のようになっている。

筆者は、かつて http://www.kame.net/~suz/gen-ula.html を使用させてもらって生成した ULA を従来より用いている。 ただし、このページは現在では無くなってしまったようだ。 (参考までに同様の目的を果たせるものが ローカルな環境でIPv6を使う に見つかった)

筆者の環境の ULA は、fd39:8b7f:067e::/48 というものである。 その際 16 ビットの「サブネットID」として、em1 では 0 を、em2 では 1 を用いることにする。
ここまでで IPv6 の 128 ビットのアドレスのうち上位 64 ビットまでで、残り 64 ビットは、(em1 及び em2 の) MAC (イーサネット) アドレスから算出した EUI-64 でよいはずだ。
あらためて以下を参照することにする。

IPv6アドレス - EUI-64で生成するインターフェースID / 特殊なIPv6アドレス

em1 及び em2 の MAC アドレスは、ifconfig で知ることが出来る。 (以下の出力の「ether」)

nsmrtks@fb121:~ % ifconfig
〜
em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=81009b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,VLAN_HWFILTER>
	ether 08:00:27:4a:35:45
	inet6 fe80::a00:27ff:fe4a:3545%em1 prefixlen 64 scopeid 0x2
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
em2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=81009b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,VLAN_HWFILTER>
	ether 08:00:27:0b:e5:c7
	inet 192.168.56.121 netmask 0xffffff00 broadcast 192.168.56.255
	inet6 fe80::a00:27ff:fe0b:e5c7%em2 prefixlen 64 scopeid 0x3
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
〜

em1 の 08:00:27:4a:35:45 の EUI-64 は 0a 00 27 ff fe 4a 35 45 である。
em2 の 08:00:27:0b:e5:c7 の EUI-64 は 0a 00 27 ff fe 0b e5 c7 である。
が、実は em1 及び em2 の IPv6 リンクローカルアドレス (上記の ifconfig の出力で既に inet6 が割り当たっているもの) を見れば同じ値なので分かったりする。

これらから、IPv6 アドレス (ULA) が、em1 については fd39:8b7f:67e::a00:27ff:fe4a:3545 が、em2 については fd39:8b7f:67e:1:a00:27ff:fe0b:e5c7 が得られた。

これらのアドレスを、まずは /etc/rc.conf に設定する。 ifconfig_em1_ipv6 及び ifconfig_em2_ipv6 の所を以下のように変更した。

# 2020-01-15,23 nsmrtks
ifconfig_em1=""
#ifconfig_em1_ipv6="inet6 accept_rtadv"
ifconfig_em1_ipv6="inet6 fd39:8b7f:67e::a00:27ff:fe4a:3545 prefixlen 64"
ifconfig_em2="inet 192.168.56.121 netmask 255.255.255.0"
#ifconfig_em2_ipv6="inet6 accept_rtadv"
ifconfig_em2_ipv6="inet6 fd39:8b7f:67e:1:a00:27ff:fe0b:e5c7 prefixlen 64"

また、/etc/hosts と、相手ホストの /etc/hosts にも、エントリを追加する。
自ホスト (fb121) の /etc/hosts の fb121 に関するエントリは以下のようになった。 (リンクローカルアドレスも追加しておいた (%em2 がついているもの))

# 2020-01-23 nsmrtks
fe80::a00:27ff:fe0b:e5c7%em2		fb121.magic.or	fb121	fb121v6	fb121c
fd39:8b7f:67e:1:a00:27ff:fe0b:e5c7	fb121.magic.or	fb121	fb121v6	fb121c
fe80::a00:27ff:fe4a:3545%em1		fb121.magic.or	fb121	fb121v6	fb121b
fd39:8b7f:67e::a00:27ff:fe4a:3545	fb121.magic.or	fb121	fb121v6	fb121b

相手ホスト (fb120 等) の IPv6 ULA アドレスも /etc/hosts に追記した。

再起動すると、新しく IPv6 ULA アドレスが割り当てられた。

nsmrtks@fb121:~ % ifconfig
〜
em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=81009b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,VLAN_HWFILTER>
	ether 08:00:27:4a:35:45
	inet6 fd39:8b7f:67e:0:a00:27ff:fe4a:3545 prefixlen 64
	inet6 fe80::a00:27ff:fe4a:3545%em1 prefixlen 64 scopeid 0x2
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
em2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=81009b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,VLAN_HWFILTER>
	ether 08:00:27:0b:e5:c7
	inet 192.168.56.121 netmask 0xffffff00 broadcast 192.168.56.255
	inet6 fe80::a00:27ff:fe0b:e5c7%em2 prefixlen 64 scopeid 0x3
	inet6 fd39:8b7f:67e:1:a00:27ff:fe0b:e5c7 prefixlen 64
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
〜

確認のため、別の物理 PC にある旧環境 (fb120) と、新環境 (fb121) が、ping6 で通信できた。

fb121 (新環境) → fb120 (旧環境)

nsmrtks@fb121:~ % ping6 fb120b
PING6(56=40+8+8 bytes) fe80::a00:27ff:fe4a:3545%em1 --> fe80::a00:27ff:fe53:7d19%em1
16 bytes from fe80::a00:27ff:fe53:7d19%em1, icmp_seq=0 hlim=64 time=1.601 ms
16 bytes from fe80::a00:27ff:fe53:7d19%em1, icmp_seq=1 hlim=64 time=2.587 ms
^C
--- fb120.magic.or ping6 statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 1.601/2.094/2.587/0.493 ms

fb120 (旧環境) → fb121 (新環境)

% ping6 fb121b
PING6(56=40+8+8 bytes) fe80::a00:27ff:fe53:7d19%em1 --> fe80::a00:27ff:fe4a:3545%em1
16 bytes from fe80::a00:27ff:fe4a:3545%em1, icmp_seq=0 hlim=64 time=1.939 ms
16 bytes from fe80::a00:27ff:fe4a:3545%em1, icmp_seq=1 hlim=64 time=1.401 ms
^C
--- fb121.magic.or ping6 statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 1.401/1.670/1.939/0.269 ms

● ホームディレクトリを旧環境から移動する

これも、筆者の環境に特有の話が続くが..

先ほども触れたが、新環境 (すなわち今インストール中のこの環境「fb121」) を立ち上げたら、旧環境で運用していたホームディレクトリを新環境に移動して切り替えることにしている。
非圧縮状態で 10 GB 以上に相当するファイル群なので、コピーにそれなりの時間を要する。 コピーの間じゅう、環境が使えないのは不便なので、あらかたの内容を裏でコピーしておき、最後に残りをコピーすることにする。

色々やることがある。 まずコピーの前に、ZFS に空のホームディレクトリを作成する。
ここで、後で /home を NFS エクスポートしようと思っているので、ホームディレクトリを /home に下にマウントするようにする。 ところがそうすると、(新環境の) 現状のホームディレクトリも /home/nsmrtks なので、sudo でなく root でログインし直して作業する。 現状の /home/nsmrtks は一応リネームして保存しておくことにする。
また、(zfs/ports や zfs/local と同様に) lz4 圧縮を指定することにする。

root@fb121:~ # cd /home

root@fb121:/home # ls
distfiles	nsmrtks

root@fb121:/home # mv -i nsmrtks nsmrtks.bak

root@fb121:/home # zfs create -o mountpoint=/home/nsmrtks zfs/nsmrtks

root@fb121:/home # df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ada0p2    4.8G    3.0G    1.4G    68%    /
devfs          1.0K    1.0K      0B   100%    /dev
/dev/ada0p4    2.9G    972M    1.7G    36%    /var
/dev/da0p1      15G     13G    1.1G    92%    /home/distfiles
procfs         4.0K    4.0K      0B   100%    /proc
zfs             13G     23K     13G     0%    /zfs
zfs/ports       13G    417M     13G     3%    /zfs/ports
zfs/local       18G    5.6G     13G    30%    /zfs/local
tmpfs          512M    4.0K    512M     0%    /tmp
zfs/nsmrtks     13G     23K     13G     0%    /home/nsmrtks

root@fb121:/home # zfs set compression=lz4 zfs/nsmrtks

root@fb121:/home # zfs get compression
NAME         PROPERTY     VALUE     SOURCE
zfs          compression  off       default
zfs/local    compression  lz4       local
zfs/nsmrtks  compression  lz4       local
zfs/ports    compression  lz4       local

root@fb121:/home # ls /home
distfiles	nsmrtks		nsmrtks.bak

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

忘れずにオーナーも設定しておく。

root@fb121:/home # ls -ld /home/nsmrtks
drwxr-xr-x  2 root  wheel  2 Jan 23 11:20 /home/nsmrtks

root@fb121:/home # chown nsmrtks:nsmrtks /home/nsmrtks

root@fb121:/home # ls -ld /home/nsmrtks
drwxr-xr-x  2 nsmrtks  nsmrtks  2 Jan 23 11:20 /home/nsmrtks

root@fb121:/home # ls -l /home
total 61
drwxr-xr-x  54 nsmrtks  wheel    55296 Jan 22 10:39 distfiles
drwxr-xr-x   2 nsmrtks  nsmrtks      2 Jan 23 11:20 nsmrtks
drwxr-xr-x  13 nsmrtks  nsmrtks   1024 Jan 23 11:19 nsmrtks.bak

あとは、fb120 (旧環境) にあるホームディレクトリを fb121 (新環境) にコピーする。 以下のようにした。

root@fb121:/home # cd

root@fb121:~ # date ; rsync -az --del nsmrtks@fb120b:/home/nsmrtks/ /home/nsmrtks/ ; date
〜

ところが、開始数秒後に..

VirtualBox error

VirtualBox 自体が、クラッシュして、fb121 が終了してしまった!!

何だろう。 VirtualBox のネットワークアダプターが弱いのだろうか?? orz

以下の手法も試したが、同様にダメだった。 orz

以下の手法なら何とか回避できた。 (もう少しスマートな方法があるかもしれない。 というかそもそも VirtualBox のバグで苦しんでいるのだが..)

旧環境で増設ディスクを gpart / newfs / mount した様子は以下である。

% 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: 24576MB (50331648 512 byte sectors)
〜

% gpart show
=>      40  62914480  ada0  GPT  (30G)
        40    409600     1  efi  (200M)
    409640  10485760     2  freebsd-ufs  (5.0G)
  10895400   8388608     3  freebsd-swap  (4.0G)
  19284008   6291456     4  freebsd-ufs  (3.0G)
  25575464  37339056     5  freebsd-zfs  (18G)

% sudo gpart create -s gpt da0
da0 created

% sudo gpart add -t freebsd-ufs da0
da0p1 added

% sudo newfs /dev/da0p1
/dev/da0p1: 24576.0MB (50331568 sectors) block size 32768, fragment size 4096
	using 40 cylinder groups of 626.09MB, 20035 blks, 80256 inodes.
super-block backups (for fsck_ffs -b #) at:
 192, 1282432, 2564672, 3846912, 5129152, 6411392, 7693632, 8975872, 10258112,
 11540352, 12822592, 14104832, 15387072, 16669312, 17951552, 19233792,
 20516032, 21798272, 23080512, 24362752, 25644992, 26927232, 28209472,
 29491712, 30773952, 32056192, 33338432, 34620672, 35902912, 37185152,
 38467392, 39749632, 41031872, 42314112, 43596352, 44878592, 46160832,
 47443072, 48725312, 50007552

% sudoedit /etc/fstab

% sudo mount /ufs

% df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ada0p2    4.8G    3.0G    1.4G    67%    /
devfs          1.0K    1.0K      0B   100%    /dev
/dev/ada0p4    2.9G    2.3G    398M    85%    /var
fdescfs        1.0K    1.0K      0B   100%    /dev/fd
procfs         4.0K    4.0K      0B   100%    /proc
zfs            6.2G     23K    6.2G     0%    /zfs
zfs/nsmrtks     14G    7.5G    6.2G    55%    /home/nsmrtks
zfs/local      9.3G    3.1G    6.2G    33%    /zfs/local
zfs/ports      6.4G    213M    6.2G     3%    /zfs/ports
tmpfs          512M    8.0K    512M     0%    /tmp
/dev/da0p1      23G    8.0K     21G     0%    /ufs

これ以降は、ユーザ nsmrtks の環境は、旧環境からコピーしてきた ~/.tcshrc 等もろもろに従って動作している。

● グラフィックスコントローラー?

前項で、VirtualBox のバージョンを上げたせいだろうか、いつのまにか、VirtualBox の fb121 の設定の「ディスプレイ」にて、以下のような「無効な設定が見つかりました」の警告が出るようになった。

invalid setting

表示に従い、(fb121 の電源を切った状態で) 「グラフィックスコントローラー」を「VMSVGA」にした所、警告は消えた。

VMSVGA

しかしそうすると、X11 サーバーが起動できなくなってしまった。 /etc/X11/xorg.conf をリネームしても同様だった。

% startx
xauth:  file /home/nsmrtks/.serverauth.1205 does not exist


X.Org X Server 1.18.4
Release Date: 2016-07-19
X Protocol Version 11, Revision 0
Build Operating System: FreeBSD 12.1-RELEASE-p1 amd64 
Current Operating System: FreeBSD fb121.magic.or 12.1-RELEASE-p1 FreeBSD 12.1-RELEASE-p1 GENERIC amd64
Build Date: 20 January 2020  12:12:21PM
 
Current version of pixman: 0.38.4
	Before reporting problems, check http://wiki.x.org
	to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
	(++) from command line, (!!) notice, (II) informational,
	(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Fri Jan 24 09:45:55 2020
(==) Using system config directory "/usr/local/share/X11/xorg.conf.d"
scfb trace: probe start
scfb trace: probe done
(EE) 
Fatal server error:
(EE) Cannot run in framebuffer mode. Please specify busIDs        for all framebuffer devices
(EE) 
(EE) 
Please consult the The X.Org Foundation support 
	 at http://wiki.x.org
 for help. 
(EE) Please also check the log file at "/var/log/Xorg.0.log" for additional information.
(EE) 
(EE) Server terminated with error (1). Closing log file.
xinit: giving up
xinit: unable to connect to X server: Connection refused
xinit: server error
1で終了しました

/var/log/Xorg.log.0 を見た所、以下のような行が見えた。

〜
[    69.524] (EE) Failed to load module "vmware" (module does not exist, 0)
〜

そこで、xorg-driver について、VMWARE と VMMOUSE のドライバにもチェックを付けて、ビルド・インストールし直してみた。

これに限っては、ports でオプションを変えてビルドして対処しているので、バイナリパッケージでは対応できないことになる。 その場合は、VirtualBox で警告が出るが「グラフィックスコントローラー」の設定を 「VBoxVGA」で使い続けるしかないだろうか。
% cd /var/db/ports

% ls -ld *driver*
drwxr-xr-x  2 root  wheel  512  1月 21 15:33 x11-drivers_xf86-input-synaptics
drwxr-xr-x  2 root  wheel  512  1月 20 13:42 x11-drivers_xorg-drivers

% ls x11-drivers_xorg-drivers/
x11-drivers_xorg-drivers:
options

% sudo rm -fr x11-drivers_xorg-drivers
〜

% cd /var/tmp/log/Install/

% sudo pkg delete xorg-drivers
〜
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 2 packages (of 0 packages in the universe):

Installed packages to be REMOVED:
	xorg-drivers-7.7_5
	xorg-7.7_3

Number of packages to be removed: 2

Proceed with deinstalling packages? [y/N]: y
[1/2] Deinstalling xorg-7.7_3...
[2/2] Deinstalling xorg-drivers-7.7_5...

% nice teetime -t xorg portinstall -s xorg
logging (from the next line till the end) to xorg20200124.log
teetime! 2020年 1月24日 金曜日 09時54分00秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s xorg
〜

VMware drivers

上のキャプチャでは VMWARE にしかチェックが付いていないが、VMMOUSE にもチェックを付けてビルドしている。
〜
teetime! 2020年 1月24日 金曜日 09時57分03秒 JST

これで、startx や startxfce4 が再び可能になった。

● magit (及び git) をインストールする

magit というのは、Emacs から git を使うための Emacs Lisp である。

筆者が仕事で使わせてもらっている。

% pkg search magit
magit-emacs26-2.90.1_2         Interface to Git for Emacs
magit-emacs26_canna-2.90.1_2   Interface to Git for Emacs
magit-emacs26_nox-2.90.1_2     Interface to Git for Emacs
magit-emacs27-2.90.1_2         Interface to Git for Emacs
magit-emacs27_nox-2.90.1_2     Interface to Git for Emacs
magit-popup-emacs26-2.13.1     Define prefix-infix-suffix command combos
magit-popup-emacs26_canna-2.13.1 Define prefix-infix-suffix command combos
magit-popup-emacs26_nox-2.13.1 Define prefix-infix-suffix command combos
magit-popup-emacs27-2.13.1     Define prefix-infix-suffix command combos
magit-popup-emacs27_nox-2.13.1 Define prefix-infix-suffix command combos

% pkg info | egrep emacs
emacs-26.3_1,3                 GNU editing macros

% cd /var/tmp/log/Install/

% nice teetime -t magit-emacs26_ portinstall -s magit-emacs26
logging (from the next line till the end) to magit-emacs26_20200124.log
teetime! 2020年 1月24日 金曜日 10時18分21秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s magit-emacs26
〜
===>   Registering installation for magit-emacs26-2.90.1_3
Installing magit-emacs26-2.90.1_3...
To use Magit, you should add following line to your .emacs file:

(require 'magit)

〜
teetime! 2020年 1月24日 金曜日 10時22分56秒 JST

● proxy-connect をインストールする

筆者が仕事で使わせてもらっている。

% pkg search proxy-connect
proxy-connect-100              Command to make network connections via SOCKS and HTTPS proxies

% cd /var/tmp/log/Install/

% nice teetime -t proxy-connect_ portinstall -s proxy-connect
logging (from the next line till the end) to proxy-connect_20200124.log
teetime! 2020年 1月24日 金曜日 10時27分21秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s proxy-connect
[Reading data from pkg(8) ... - 1300 packages found - done]
--->  [Executing a command as root: sudo /usr/bin/touch /var/db/pkgdb.fixme]
〜
** Port marked as IGNORE: net/proxy-connect:
	is marked as broken: unfetchable
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
** Listing the failed packages (-:ignored / *:skipped / !:failed)
	- net/proxy-connect
teetime! 2020年 1月24日 金曜日 10時27分24秒 JST

ありゃ?

ここで筆者は、以前取得した proxy-connect-100.tar.bz2 を /usr/ports/distfiles/ 以下に所持しており、ビルドすることも出来たかもしれないが、(Port marked as IGNORE にもかかわらず) バイナリパッケージは存在しているようなので、pkg install でインストールすることにした。 (最初からそうしろというのもあるが)

% nice teetime -t proxy-connect_ sudo pkg install proxy-connect
conflicting proxy-connect_20200124.log
logging (from the next line till the end) to proxy-connect_2020012410.log
teetime! 2020年 1月24日 金曜日 10時28分21秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> sudo pkg install proxy-connect
Updating FreeBSD repository catalogue...
Fetching meta.txz: . done
Fetching packagesite.txz: .......... done
Processing entries: .......... done
FreeBSD repository update completed. 31773 packages processed.
All repositories are up to date.
Updating database digests format: .......... done
The following 1 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	proxy-connect: 100

Number of packages to be installed: 1

19 KiB to be downloaded.

Proceed with this action? [y/N]: y
[1/1] Fetching proxy-connect-100.txz: ... done
Checking integrity... done (0 conflicting)
[1/1] Installing proxy-connect-100...
[1/1] Extracting proxy-connect-100: . done
teetime! 2020年 1月24日 金曜日 10時28分36秒 JST

● jq をインストールする

主に仕事で使わせてもらっている。

% pkg search ^jq
jq-1.6                         Lightweight and flexible command-line JSON processor

% cd /var/tmp/log/Install/

% nice teetime -t jq portinstall -s jq
logging (from the next line till the end) to jq20200124.log
teetime! 2020年 1月24日 金曜日 10時36分11秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s jq
〜
teetime! 2020年 1月24日 金曜日 10時36分56秒 JST

● PyCharm Community Edition (pycharm-ce) をインストールする

あの IntelliJ IDEA 系の統合開発環境が FreeBSD で動く!
筆者が仕事で使わせてもらっている。

% pkg search pycharm
pycharm-ce-2019.3.1            JetBrains PyCharm Community Edition IDE

% cd /var/tmp/log/Install/

% nice teetime -t pycharm-ce_ portinstall -s pycharm-ce
logging (from the next line till the end) to pycharm-ce_20200124.log
teetime! 2020年 1月24日 金曜日 10時41分20秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s pycharm-ce
〜
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 602896 bytes for Chunk::new
# An error report file with more information is saved as:
# /zfs/ports/java/openjdk8/work/openjdk-jdk8u-jdk8u232-b09.1/langtools/make/hs_err_pid12311.log
#
# Compiler replay data is saved as:
# /zfs/ports/java/openjdk8/work/openjdk-jdk8u-jdk8u232-b09.1/langtools/make/replay_pid12311.log
gmake[4]: *** No rule to make target 'all', needed by 'default'.  Stop.
gmake[4]: Leaving directory '/zfs/ports/java/openjdk8/work/openjdk-jdk8u-jdk8u232-b09.1/langtools/make'
gmake[3]: *** [/zfs/ports/java/openjdk8/work/openjdk-jdk8u-jdk8u232-b09.1//make/Main.gmk:89: langtools-only] Error 2
gmake[3]: Leaving directory '/zfs/ports/java/openjdk8/work/openjdk-jdk8u-jdk8u232-b09.1'
===> Compilation failed unexpectedly.
Try to set MAKE_JOBS_UNSAFE=yes and rebuild before reporting the failure to
the maintainer.
*** Error code 1

Stop.
make[2]: stopped in /zfs/ports/java/openjdk8
*** Error code 1

Stop.
make[1]: stopped in /usr/ports/java/openjdk8
*** Error code 1

Stop.
make: stopped in /zfs/ports/devel/pycharm-ce
** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portinstall20200124-656-1e3awh env make FETCH_BEFORE_ARGS=-q
** Fix the problem and try again.
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
** Listing the failed packages (-:ignored / *:skipped / !:failed)
	! devel/pycharm-ce	(unknown build error)
teetime! 2020年 1月24日 金曜日 10時42分17秒 JST

ありゃ。

思い当たるかもしれないものとして、筆者は tcsh で以下のような設定をしていた。

limit vmemoryuse 2.9g

半ばダメ元で、この制限を外してみた所.. 通ったようだ。

% limit
cputime      unlimited
filesize     unlimited
datasize     33554432 kbytes
stacksize    524288 kbytes
coredumpsize 0 kbytes
memoryuse    unlimited
vmemoryuse   3040870 kbytes
descriptors  171333 
pseudoterminaunlimited
kqueues      unlimited
memorylocked 64 kbytes
maxproc      10198 
sbsize       unlimited
swapsize     unlimited

% limit vmemoryuse unlimit

% limit
cputime      unlimited
filesize     unlimited
datasize     33554432 kbytes
stacksize    524288 kbytes
coredumpsize 0 kbytes
memoryuse    unlimited
vmemoryuse   unlimited
descriptors  171333 
pseudoterminaunlimited
kqueues      unlimited
memorylocked 64 kbytes
maxproc      10198 
sbsize       unlimited
swapsize     unlimited

% cd /var/tmp/log/Install/

% nice teetime -t pycharm-ce_ portinstall -s pycharm-ce
conflicting pycharm-ce_20200124.log
logging (from the next line till the end) to pycharm-ce_2020012410.log
teetime! 2020年 1月24日 金曜日 10時48分40秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s pycharm-ce
〜
Installing openjdk8-8.232.09.1_1...
This OpenJDK implementation requires fdescfs(5) mounted on /dev/fd and
procfs(5) mounted on /proc.

If you have not done it yet, please do the following:

	mount -t fdescfs fdesc /dev/fd
	mount -t procfs proc /proc

To make it permanent, you need the following lines in /etc/fstab:

	fdesc	/dev/fd		fdescfs		rw	0	0
	proc	/proc		procfs		rw	0	0

〜
teetime! 2020年 1月24日 金曜日 10時55分12秒 JST

インストール時のメッセージに従って、/etc/fstab に以下を追記した。 (proc は追加済み)

# 2020-01-24 nsmrtks
# (/var/tmp/log/Install/pycharm-ce_2020012410.log)
fdesc		/dev/fd		fdescfs	rw	0	0

そうして sudo mount -av を実行した。

% sudo mount -av
〜
/dev/ada0p2 on / (ufs, local, journaled soft-updates, writes: sync 35 async 1854, reads: sync 4047 async 485, fsid da9cf35d16922923)
fdescfs on /dev/fd (fdescfs, fsid 03ff005959000000)

% mount
/dev/ada0p2 on / (ufs, local, journaled soft-updates)
devfs on /dev (devfs, local, multilabel)
/dev/ada0p4 on /var (ufs, local, journaled soft-updates)
/dev/da0p1 on /home/distfiles (ufs, local, journaled soft-updates)
procfs on /proc (procfs, local)
zfs/nsmrtks on /home/nsmrtks (zfs, local, nfsv4acls)
zfs on /zfs (zfs, local, nfsv4acls)
zfs/local on /zfs/local (zfs, local, nfsv4acls)
zfs/ports on /zfs/ports (zfs, local, nfsv4acls)
tmpfs on /tmp (tmpfs, local)
fdescfs on /dev/fd (fdescfs)

% df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ada0p2    4.8G    3.0G    1.4G    68%    /
devfs          1.0K    1.0K      0B   100%    /dev
/dev/ada0p4    2.9G    978M    1.7G    36%    /var
/dev/da0p1      15G     13G    1.1G    92%    /home/distfiles
procfs         4.0K    4.0K      0B   100%    /proc
zfs/nsmrtks     12G    7.5G    4.6G    62%    /home/nsmrtks
zfs            4.6G     23K    4.6G     0%    /zfs
zfs/local       11G    6.1G    4.6G    57%    /zfs/local
zfs/ports      5.3G    666M    4.6G    12%    /zfs/ports
tmpfs          512M    8.0K    512M     0%    /tmp
fdescfs        1.0K    1.0K      0B   100%    /dev/fd

● Chromium (chrome) をインストールする

% pkg search chromium
chromium-79.0.3945.130         Google web browser based on WebKit
chromium-bsu-0.9.16.1_1        Arcade-style, top-scrolling space shooter
chromium-gn-79.0.3945.130      Gn meta build framework

% cd /var/tmp/log/Install

% nice teetime -t chromium portinstall -s chromium
logging (from the next line till the end) to chromium20200124.log
teetime! 2020年 1月24日 金曜日 11時08分08秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s chromium
〜
[28/22555] touch obj/base/protected_memory_buildflags.stamp
Kill された
teetime! 2020年 1月24日 金曜日 11時21分16秒 JST
〜
java.lang.OutOfMemoryError: unable to create new native thread
	at java.lang.Thread.start0(Native Method)
	at java.lang.Thread.start(Thread.java:717)
	at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:957)
	at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1367)
	at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
	at java.util.concurrent.Executors$DelegatedExecutorService.submit(Executors.java:681)
	at com.google.javascript.jscomp.CompilerExecutor.runInCompilerThread(CompilerExecutor.java:116)
	at com.google.javascript.jscomp.Compiler.runInCompilerThread(Compiler.java:803)
	at com.google.javascript.jscomp.Compiler.parseForCompilation(Compiler.java:889)
	at com.google.javascript.jscomp.AbstractCommandLineRunner.performFullCompilation(AbstractCommandLineRunner.java:1339)
	at com.google.javascript.jscomp.AbstractCommandLineRunner.doRun(AbstractCommandLineRunner.java:1268)
	at com.google.javascript.jscomp.AbstractCommandLineRunner.run(AbstractCommandLineRunner.java:545)
	at com.google.javascript.jscomp.CommandLineRunner.main(CommandLineRunner.java:2158)

〜
ninja: build stopped: subcommand failed.
===> Compilation failed unexpectedly.
Try to set MAKE_JOBS_UNSAFE=yes and rebuild before reporting the failure to
the maintainer.
*** Error code 1

Stop.
make[1]: stopped in /zfs/ports/www/chromium
*** Error code 1

Stop.
make: stopped in /zfs/ports/www/chromium

ありゃりゃ。

VirtualBox の設定で、メモリーサイズを 6000MB からさらに 8000MB に増やしてみた。 (swap も増やすべき気もするが)

% cd /var/tmp/log/Install/

% nice teetime -t chromium portinstall -sw chromium
conflicting chromium20200124.log
logging (from the next line till the end) to chromium2020012411.log
teetime! 2020年 1月24日 金曜日 11時31分46秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -sw chromium
〜
Exception in thread "main" 
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main"

〜
ninja: build stopped: subcommand failed.
===> Compilation failed unexpectedly.
Try to set MAKE_JOBS_UNSAFE=yes and rebuild before reporting the failure to
the maintainer.
*** Error code 1

Stop.
make[1]: stopped in /zfs/ports/www/chromium
*** Error code 1

Stop.
make: stopped in /zfs/ports/www/chromium
** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portinstall20200124-1230-slsom5 env make FETCH_BEFORE_ARGS=-q
** Fix the problem and try again.
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
パスワード: 
** Listing the failed packages (-:ignored / *:skipped / !:failed)
	! www/chromium	(unknown build error)
teetime! 2020年 1月24日 金曜日 11時34分36秒 JST

うーん。

そういえば limit vmemoryuse 2.9g の設定がまた有効に戻ってしまっていた。 関係あるだろうか? これを外してみてもう一度。

% limit
cputime      unlimited
filesize     unlimited
datasize     33554432 kbytes
stacksize    524288 kbytes
coredumpsize 0 kbytes
memoryuse    unlimited
vmemoryuse   unlimited
descriptors  228933 
pseudoterminaunlimited
kqueues      unlimited
memorylocked 64 kbytes
maxproc      11998 
sbsize       unlimited
swapsize     unlimited

% cd /var/tmp/log/Install/

% nice teetime -t chromium portinstall -sw chromium
conflicting chromium20200124.log
conflicting chromium2020012411.log
logging (from the next line till the end) to chromium202001241138.log
teetime! 2020年 1月24日 金曜日 11時38分41秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -sw chromium
〜
teetime! 2020年 1月24日 金曜日 13時01分59秒 JST

今度はいけたようだ。

● X11 を起動して、本格的に新環境に切り換える

筆者は未だここまで、旧環境で仕事をしながら、新環境の準備を整えていた。
旧環境を使っているということは、前回ホームディレクトリをコピーしたときから内容が変わってしまっているから、ここで最後にコピーを行った。
ところがその際、コピー先 (新環境) の zfs (ホームディレクトリが入っている) の容量が足りなくなってしまい、この際に、zfs でやはり領域を共有している /usr/local の使用量を減らすため、pkg info | egrep gnome して出て来た GNOME 関連を pkg delete (ただし Xfce 等を削除しないように注意) して容量を確保したりした。

そして筆者は、以下の調整を行った。

startx を実行すると、Xfce が、SVGA (800x600) で起動した。 (旧環境から引き継いだ設定により Xfce の上下のバーは自動的に隠すようになっており見えていない)

Xfce SVGA

Xfce の「アプリケーション」(画面左上) →「設定」→「ディスプレイ」から、1920x1080 に設定しようと思ったが、どういうわけか「解像度」の中に 1920x1080 が見当たらなかった。

no FullHD setting

そこで、コマンドラインから xrandr -s 1920x1080 を実行してみると、画面が 1920x1080 に切り替わった。

xrandr -s 1920x1080

あらためて Xfce の「アプリケーション」→「設定」→「ディスプレイ」を見てみると、今度は ちゃっかりと 1920x1080 がそこにあった。

FullHD setting

1920x1080 が選択された状態で、そのまま「閉じる」を押し、Xfce をいったん終了して、再度 startx すると、(最初 SVGA で xfce が起動するが) 何もしなくても FullHD の状態となった。

FullHD

◎ 梅フォントについて

rxvt-unicode (コマンド名は urxvt) については、~/.Xdefaults ファイルに、以下のように記述しておいた。 旧環境では pixelsize=9 だったが新 PC の画面に合わせて調整し pixelsize=12 とした。 (もし ~/.Xdefaults の内容が反映されていない場合、xrdb ~/.Xdefaults を実行してみる。)

〜
! urxvt (rxvt-unicode)
URxvt.transparent:	true
URxvt.shading:		193
URxvt.font:		xft:UMEgothic:pixelsize=12
〜

Emacs で梅フォントを用いる設定は、以前 Emacs のメニューバーから設定しホームディレクトリ下のファイルに保存していた。 こちらも新 PC の画面に合わせてあらためてサイズを調整した。

● baloo_file_extractor というのが非常に重い

新環境で GUI を使うようになった頃から、新環境 (fb121) が非常に重くなった。 emacs を起動するのに何分もかかるなど。

top コマンドで見た所、どうも baloo_file_extractor というのが裏で動いており、これが環境を非常に重くしているようだ。
ちょうどこの時たまたま、古い環境の FreeBSD 11 でも、同様の現象が起きていたので、確信した。

Xfce を使うなら避けられないのだろうか、そのうち収まるのだろうか.. などと思っているうち、baloo_file_extractor は Xfce でなく KDE5 のものであることが分かった。 お前のせいか!

Baloo File Extractorの大暴走 - Chienomi

pkg info | egrep baloo として出て来たパッケージに対し、pkg delete を実行した。
また、1.9GB といった巨大な容量を消費していた ~/.local/share/baloo/ を削除した。

% pkg info | egrep baloo
baloo-widgets-19.12.1          BalooWidgets library
kf5-baloo-5.65.0               KF5 Framework for searching and managing user metadata

% sudo pkg delete kf5-baloo
〜
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 16 packages (of 0 packages in the universe):

Installed packages to be REMOVED:
	kf5-baloo-5.65.0
	plasma5-plasma-desktop-5.17.5_1
	gwenview-19.12.1
	dolphin-19.12.1
	baloo-widgets-19.12.1
	plasma5-plasma-workspace-5.17.5
	plasma5-plasma-5.17.5
	kdegraphics-19.12.1
	kde-baseapps-19.12.1
	plasma5-powerdevil-5.17.5
	plasma5-systemsettings-5.17.5
	plasma5-khotkeys-5.17.5
	plasma5-kdeplasma-addons-5.17.5
	plasma5-kde-cli-tools-5.17.5
	kde5-5.17.5.19.12.1
	plasma5-kmenuedit-5.17.5

Number of packages to be removed: 16

The operation will free 102 MiB.

Proceed with deinstalling packages? [y/N]: y↵
〜

% pkg info | egrep baloo
1で終了しました

% ls .local/share/baloo/
total 1965859
drwxr-xr-x  2 nsmrtks  nsmrtks           6 10月  5  2017 calendars/
drwxr-xr-x  2 nsmrtks  nsmrtks           6 10月  5  2017 contacts/
drwxr-xr-x  2 nsmrtks  nsmrtks           6 10月  5  2017 email/
drwxr-xr-x  2 nsmrtks  nsmrtks           6 10月  5  2017 emailContacts/
-rw-r--r--  1 nsmrtks  nsmrtks  2918871040  1月 28 13:32 index
-rw-r--r--  1 nsmrtks  nsmrtks        8192  1月 28 13:32 index-lock
drwxr-xr-x  2 nsmrtks  nsmrtks           6 10月  5  2017 notes/

% cd .local/share

% du -hsx baloo
1.9G	baloo

% rm -fr baloo

● やはり VirtualBox 自体がクラッシュする.. orz

何もせずしばらく放っておくだけでも、以前ホームディレクトリをネットワーク越しに rsync でコピーしようとした時と同様に、VirtualBox 自体が、何度もクラッシュする.. orz

今度は、VirtualBox が 6.1.2 (その前は 6.1.0) だったのを、一旦アンインストールし、6.0.16 というのをダウンロードしてきて、インストールしてみた。
アンインストール → インストール → 仮想マシンをいまいちど起動自体はスムーズにいった。

今度はどうなるだろうか..

● NFS サーバを設定する

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

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

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

あらためて /etc/hosts の編集を行う。
ここで、同じホスト上の VirtualBox の仮想マシンどうしは、「ホストオンリーアダプター」を通して通信できる。 それは、これまでの経緯により、fb121 においては 仮想マシンの作成 時に「アダプター4」として割り当てており、vtnet0 として見えている。

% ifconfig vtnet0
vtnet0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=6c07bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,LRO,VLAN_HWTSO,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
	ether 08:00:27:52:d9:5a
	inet 192.168.56.121 netmask 0xffffff00 broadcast 192.168.56.255
	inet6 fe80::a00:27ff:fe52:d95a%vtnet0 prefixlen 64 scopeid 0x4
	inet6 fd39:8b7f:67e:1:a00:27ff:fe52:d95a prefixlen 64
	media: Ethernet 10Gbase-T <full-duplex>
	status: active
	nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>

/etc/hosts には、この IP アドレスを書いておけば、仮想マシンどうしがホスト名で通信できる。
前置きが長くなったが、筆者の環境では /etc/hosts に以下のようなものを追記した (抜粋)。

上の方では fb121 のリンクローカルアドレスが %em2 のものになっているが %vtnet0 に変更している。
# 2020-01-23 nsmrtks
fe80::a00:27ff:fe52:d95a%vtnet0		fb121.magic.or	fb121	fb121v6 fb121d
fd39:8b7f:67e:1:a00:27ff:fe52:d95a	fb121.magic.or	fb121	fb121v6 fb121d
# 2017-09-27 nsmrtks
fe80::a00:27ff:fea3:3469%vtnet0		fb111.magic.or	fb111	fb111v6	fb111c
fd39:8b7f:67e:1:a00:27ff:fea3:3469	fb111.magic.or	fb111	fb111v6	fb111c
# 2016-05-22 nsmrtks
fe80::a00:27ff:fed2:1b07%vtnet0		fb103.magic.or	fb103	fb103v6	fb103c
# 2016-05-08 nsmrtks
fe80::a00:27ff:fe1f:3f4e%vtnet0		fb101.magic.or	fb101	fb101v6	fb101c
# 2016-05-22 nsmrtks
fe80::a00:27ff:fe07:b6d8%vtnet0		fb093.magic.or	fb093	fb093v6	fb093c
192.168.56.93							fb093v4

ここで、IPv6 アドレスを使用している。 FreeBSD の NFS は IPv6 で通信可能である。 (fb093v4 というホスト名のみ IPv4 アドレスになっている)

NFS の話に戻って、まず /etc/exports に以下のように記述することにする。

# 2019-09-18,20 nsmrtks

V4: /home

/home/distfiles	fb111c fb103c fb101c fb093c

# EoF

先に /home/distfiles の方の行について述べると、これは /home/distfiles ディレクトリをホスト fb111c fb103c fb101c fb093c に export している。

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

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

% sudo -i
〜

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

root@fb121:~ # exit
logout

/etc/rc.conf に以下のように追記されるように編集した。 (Emacs で /sudo::/etc/rc.conf というファイル名を指定すると sudo を使って /etc/rc.conf を編集/保存することが出来る)

# 2020-01-29 nsmrtks
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 magic.or"	# Flags for nfsuserd

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

この段階で、NFS サーバを立ち上げてみる。 (最初の cd / は不要かもしれない) (/etc/exports を保存し忘れていたため restart でやり直した)

% cd /
% sudo /etc/rc.d/nfsd start
〜
Starting rpcbind.
/etc/rc.d/mountd: WARNING: /etc/exports is not readable.
Starting mountd.
Starting nfsd.

% sudo /etc/rc.d/nfsd restart
Stopping nfsd.
Waiting for PIDS: 18955 18956.
Starting nfsd.

% showmount -e
Exports list on localhost:

% sudo killall -HUP mountd

% showmount -e
Exports list on localhost:
/home/distfiles                    fb111.magic.or fb103.magic.or fb101.magic.or fb093.magic.or 

/etc/rc.d/nfsd restart した直後だと、showmount -e で何も現れなかったが、mountd に HUP シグナルを送ることにより、エクスポートされ showmount -e で /home/distfiles の行が表示されるようになった。 (あるいは再起動してもよかっただろう)

この段階で、ホスト fb111c や fb103c 等から、ホスト fb121c の /distfiles が NFS マウントできるようになるだろう..
たとえば fb111 (fb111c) については、fb121c を /etc/hosts に追加し、/etc/fstab を以下のように書き換えて (先頭の方にある fb120c:/distfiles 〜 の行をコメントアウトし最後の 2行を追記した) ..

〜
#fb120c:/distfiles	/zfs/distfiles	nfs	rw,nfsv4
# 2020-01-29 nsmrtks
fb121c:/distfiles	/zfs/distfiles	nfs	rw,nfsv4

この状態で fb111 を再起動すると、以下のように /zfs/distfiles 以下のファイルとしてアクセスできることを確認した。

root@fb111:~ # df -h
Filesystem            Size    Used   Avail Capacity  Mounted on
〜
fb121c:/distfiles      15G     13G    2.3G    85%    /zfs/distfiles

root@fb111:~ # mount
〜
fb121c:/distfiles on /zfs/distfiles (nfs)

root@fb111:~ # ls -l /zfs/distfiles/ | head
total 8329484
drwxrwxr-x   2 root     operator         512 Dec 20  2017 .snap
-r--------   1 root     wheel       33554432 Dec 20  2017 .sujournal
-rw-r--r--   1 nsmrtks  wheel           1273 Feb 27  2015 0001-Remove-pure-attribute-from-functions-with-side-effec.patch
-rw-r--r--   1 nsmrtks  wheel         218971 Jul 17  2018 01org-libva-2.2.0_GH0.tar.gz
-rw-r--r--   1 nsmrtks  wheel        2580540 Dec 12 12:11 01org-tbb-2019.8-2019_U8_GH0.tar.gz
-rw-r--r--   1 nsmrtks  wheel            939 Apr 24  2019 0bd101cecc5458a8463b8d672bf1745c3cbb7c02.patch
-rw-r--r--   1 nsmrtks  wheel           1144 Mar 28  2019 0c83efa.patch
-rw-r--r--   1 root     wheel           1001 Feb 14  2018 18675a51fca2.patch
-rw-r--r--   1 nsmrtks  wheel            627 Jul 12  2018 20a318d06aca.patch

root@fb111:~ # head /zfs/distfiles/0001-Remove-pure-attribute-from-functions-wit h-side-effec.patch 
From 765c6134f3d47edac98818015ab6a1cbd1aa8d06 Mon Sep 17 00:00:00 2001
From: Mark Harris 
Date: Thu, 26 Feb 2015 18:13:58 -0800
Subject: [PATCH] Remove pure attribute from functions with side effects

Fixes missing version number in sox --version using clang -O2.
---
 src/sox.h | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

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

以下のように、zfs set sharenfs= にホストを指定する。 なおこの操作で、mountd に HUP シグナルを送る相当まで自動的に実行してくれる。

% zfs get sharenfs
NAME         PROPERTY  VALUE     SOURCE
zfs          sharenfs  off       default
zfs/local    sharenfs  off       default
zfs/nsmrtks  sharenfs  off       default
zfs/ports    sharenfs  off       default

% zfs set sharenfs='fb111c fb103c fb101c fb093c' zfs/nsmrtks
cannot set property for 'zfs/nsmrtks': permission denied
1で終了しました

% sudo zfs set sharenfs='fb111c fb103c fb101c fb093c' zfs/nsmrtks
〜

% zfs get sharenfs
NAME         PROPERTY  VALUE                        SOURCE
zfs          sharenfs  off                          default
zfs/local    sharenfs  off                          default
zfs/nsmrtks  sharenfs  fb111c fb103c fb101c fb093c  local
zfs/ports    sharenfs  off                          default

% showmount -e
Exports list on localhost:
/home/distfiles                    fb111.magic.or fb103.magic.or fb101.magic.or fb093.magic.or 
/home/nsmrtks                      fb111.magic.or fb103.magic.or fb101.magic.or fb093.magic.or 

ホスト fb111 (fb111c あるいは fb111.magic.or) からマウントでき、ファイルを書き込めて共有できることを確かめた。

(fb111 側の操作)

% echo this is fb111 > fb111.txt

(fb121 側の操作)

% ls -l fb111.txt
-rw-r--r--  1 nsmrtks  nsmrtks  14  1月 29 12:13 fb111.txt

% cat fb111.txt
this is fb111

% rm -i fb111.txt
remove fb111.txt? y
なお、NFSv4 tree root の関係で、fb121c:/nsmrtks や fb121c:/distfiles と指定した場合では、/etc/fstab に nfsv4 も指定しないとマウントできなかった。 このことからも、ちゃんと NFSv4 を使用してマウントできていることがあらためて確かめられた。

ここまで来て、sharenfs に Ubuntu GNU/Linux マシン (ul164) の追加を忘れていたので、それを追加。

% zfs get sharenfs
NAME         PROPERTY  VALUE                        SOURCE
zfs          sharenfs  off                          default
zfs/local    sharenfs  off                          default
zfs/nsmrtks  sharenfs  fb111c fb103c fb101c fb093c  local
zfs/ports    sharenfs  off                          default

% sudo zfs set sharenfs='fb111c fb103c fb101c fb093c ul164' zfs/nsmrtks
〜

% zfs get sharenfs
NAME         PROPERTY  VALUE                              SOURCE
zfs          sharenfs  off                                default
zfs/local    sharenfs  off                                default
zfs/nsmrtks  sharenfs  fb111c fb103c fb101c fb093c ul164  local
zfs/ports    sharenfs  off                                default

そうして、Ubuntu GNU/Linux マシン (ul164) から IPv6 で NFS (NFSv4) マウントでき、ファイルも読み書きできることを確認した。

さらにここまで来て、fb120c というホストも、/home/nsmrtks と /home/distfiles を NFS マウント出来るようにしようと思い立ったので、それも追加。

zfs set sharenfs= の実行。

% sudo zfs set sharenfs='fb120c fb111c fb103c fb101c fb093c ul164' zfs/nsmrtks

% zfs get sharenfs
NAME         PROPERTY  VALUE                                     SOURCE
zfs          sharenfs  off                                       default
zfs/local    sharenfs  off                                       default
zfs/nsmrtks  sharenfs  fb120c fb111c fb103c fb101c fb093c ul164  local
zfs/ports    sharenfs  off                                       default

/etc/exports の /home/distfiles に fb120c を追加して..

# 2019-09-18,20,2020-01-29 nsmrtks

V4: /home

/home/distfiles	fb120c fb111c fb103c fb101c fb093c

# EoF

.. killall -HUP mountd の実行。

% sudo killall -HUP mountd

% showmount -e
Exports list on localhost:
/home/distfiles                    fb120.magic.or fb111.magic.or fb103.magic.or fb101.magic.or fb093.magic.or 
/home/nsmrtks                      fb120.magic.or fb111.magic.or fb103.magic.or fb101.magic.or fb093.magic.or ul164 

.. これでうまくいくはずだったが、fb120 からマウントし、ls 等を実行しても、どうしてもうまくいかず..

(fb120 (NFS クライアント) 側の表示)

nfsv4 client/server protocol prob err=10020
nfsv4 client/server protocol prob err=10020

.. まさかと思い、fb121 (NFS サーバ) を reboot したら、何故かうまくいった。

● xload をインストールする

% cd /var/tmp/log/Install/

% nice teetime -t xload portinstall -s xload
logging (from the next line till the end) to xload20200130.log
teetime! 2020年 1月30日 木曜日 11時38分02秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s xload
〜
teetime! 2020年 1月30日 木曜日 11時38分13秒 JST

実行例。

% xload -bg tan -hl red2 &
(これ以降、X11 画面のキャプチャ (写真を除く) には、kde5 でインストールされた spectacle コマンドを用いている。)

xload

● oclock をインストールする

% cd /var/tmp/log/Install/

% nice teetime -t oclock portinstall -s oclock
logging (from the next line till the end) to oclock20200130.log
teetime! 2020年 1月30日 木曜日 11時45分24秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s oclock
〜
teetime! 2020年 1月30日 木曜日 11時45分34秒 JST

ここで筆者の ~/.Xdefaults には、以下の記述があり、oclock に自動的に色が付く。

*customization:		-color

-transparent を付けて、さらに xload のウィンドウの上に置いてみた例。

% oclock -transparent &

oclock

● xlogo をインストールする

% cd /var/tmp/log/Install/

% nice teetime -t xlogo portinstall -s xlogo
logging (from the next line till the end) to xlogo20200130.log
teetime! 2020年 1月30日 木曜日 11時51分15秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s xlogo
〜
teetime! 2020年 1月30日 木曜日 11時51分26秒 JST

実行例。 これも ~/.Xdefaults の記述により自動的に色が付いている。

% xlogo -render &

xlogo

● xdu をインストールする

xdu とは、du の出力を入力すると、それをグラフィカルに表示してくれるツールである。

応用次第で、du の出力に類似のテキストをグラフィカルに表示するといった用途も考えられる (筆者はそれを思い付いて実際にやったことがある)。
% cd /var/tmp/log/Install/

% nice teetime -t xdu portinstall -s xdu
logging (from the next line till the end) to xdu20200130.log
teetime! 2020年 1月30日 木曜日 11時54分29秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s xdu
〜
teetime! 2020年 1月30日 木曜日 11時54分47秒 JST

ルートパーティションの使用量を表示させる実行例。 (du に -x オプションを付けることにより、別パーティションである /var や /home/distfiles パーティション等が対象外になっている。)

% sudo du -kx / | xdu
〜

n を押すと大きさ順にソートされたり、h を押すとヘルプが表示されたりする。 n を押した所。

xdu (sort with n)

● xpdf をインストールする

% cd /var/tmp/log/Install/

% nice teetime -t xpdf portinstall -s xpdf
logging (from the next line till the end) to xpdf20200130.log
teetime! 2020年 1月30日 木曜日 12時00分28秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s xpdf
〜
teetime! 2020年 1月30日 木曜日 12時01分25秒 JST

● /etc/crontab を変更する

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

# /etc/crontab - root's crontab for FreeBSD
〜
#minute	hour	mday	month	wday	who	command
〜
# Perform daily/weekly/monthly maintenance.
1	3	*	*	*	root	periodic daily
15	4	*	*	6	root	periodic weekly
30	5	1	*	*	root	periodic monthly
〜

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

% cd /etc

% sudo cp -ip crontab crontab.ORG
〜

Emacs の C-x C-f からファイル名を /sudo::/etc/crontab というものを指定して編集した。

〜
12	9	*	*	*	root	periodic daily
12	12	*	*	2	root	periodic weekly
12	17	1	*	*	root	periodic monthly
〜

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

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

● VirtualBox の UI の設定について

◎ ホストキー (と Alt + Tab の挙動の関係)

FreeBSD (12.0) を VirtualBox にインストールする覚書 / 環境構築編 で、VirtualBox で Alt + Tab を使うと、VirtualBox 側に、変な文字が入力されてしまう、というのがあった。
今回、その現象が起きていないなあ、と思っていた。 ところが、また発生するようになった。
それは、VirtualBox の画面の「入力」→「キーボード」→「キーボードの設定...」で、「ホストキーの組み合わせ」を、デフォルトの「Right Control」から、筆者が「Application」キーに変更したら起こるようになったことに気付いた。

筆者は、旧 PC で一時期 (左の) Ctrl キーが壊れたのか何なのか (Ctrl キーとして動作させるようにしていた Caps Lock キーも含めて)、使えなくなったことがあり、それ以来右の Ctrl キーも使う癖が付いた。 そのため、Right Control が VirtualBox のホストキーになっている (デフォルト) と不都合があった。

どうも Alt + Tab を使うと、Alt + ホストキー (が持つ機能) が VirtualBox に渡っているのではないかということに、Emacs の挙動を見ていて思った。
そこで筆者は、ホストキーの設定を、Ctrl + Right Control (左右の Ctrl キーを両方とも押す) というものに変更した。 これで、Alt + Tab で VirtualBox に変な文字が入力されない状態に戻った。

◎ クリップボードの共有

デフォルトでは、「デバイス」→「クリップボードの共有」が、何故か「無効」になっていた。 これを「双方向」に変更した。

素晴らしいことに、日本語を含んでいても、正常にコピー & ペースト出来る! (TigerVNC サーバー + RealVNC Viewer では、これが出来なかった。)

◎ 中ボタン (emulate 3-button)

VirtualBox の設定ではないが..

RealVNC Viewer だと、マウスの左右クリックで中ボタンをエミュレートする機能があった気がするのだが (これを書いている時点で昨日旧レンタル PC を返却してしまったのでもはやすぐには分からない)、そのような設定が、VirtualBox 自体や、あるいは Xfce にも、どうにも見つけられない。 筆者が使っている PC に中ボタンが無いので、X11 でこれが出来ないとどうにも不便だ。

いろいろ探した所、以下を参考にして、

中クリック

筆者の MS-Windows (あるいはタッチパッドのドライバ?) 側の設定で、タッチパッドを三本指タップで「マウスの中央ボタン」の動作をさせられることが分かった。

middle button

あるいは xorg.conf の設定でも中ボタンエミュレーションが可能らしい。 (Emulate3Buttons)

● mozc 関連をインストールする

◎ mozc-el をインストールする

mozc-el の正確なパッケージ名が分からなかったので、pkg search コマンドで調べている

% pkg search mozc-el
ja-mozc-el-emacs26-2.23.2815.102.00_5 Emacs input method for Mozc
ja-mozc-el-emacs26_canna-2.23.2815.102.00_5 Emacs input method for Mozc
ja-mozc-el-emacs26_nox-2.23.2815.102.00_5 Emacs input method for Mozc
ja-mozc-el-emacs27-2.23.2815.102.00_5 Emacs input method for Mozc
ja-mozc-el-emacs27_nox-2.23.2815.102.00_5 Emacs input method for Mozc

% cd /var/tmp/log/Install/

% nice teetime -t ja-mozc-el-emacs26_ portinstall -s ja-mozc-el-emacs26
logging (from the next line till the end) to ja-mozc-el-emacs26_20200131.log
teetime! 2020年 1月31日 金曜日 11時29分21秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s ja-mozc-el-emacs26
〜
Installing ja-mozc-el-emacs26-2.23.2815.102.00_1...
To activate mozc, you will need to add the following lines to
your ~/.emacs:

(set-language-environment "Japanese")
(setq default-input-method "japanese-mozc")
(global-set-key (kbd "C-o") 'toggle-input-method)

〜
teetime! 2020年 1月31日 金曜日 11時31分44秒 JST

mozc-server (ja-mozc-server) もインストールされる。

% pkg info ~| egrep -i mozc
ja-mozc-el-emacs26-2.23.2815.102.00_1 Emacs input method for Mozc
ja-mozc-server-2.23.2815.102.00_5 Mozc Japanese Input Method, Server

起動については後述する。

Emacs への設定方法について、ビルドのログにもメッセージが出ている。 (再掲)

To activate mozc, you will need to add the following lines to
your ~/.emacs:

(set-language-environment "Japanese")
(setq default-input-method "japanese-mozc")
(global-set-key (kbd "C-o") 'toggle-input-method)

この 3行を ~/.emacs に書くわけだが、(setq default-input-method "japanese-mozc") については、設定すると、もし mozc がインストールされていない状態で C-\ を押すとエラーになる。 その場合は C-u C-\ とすると、他の入力方法 ("japanese" 等) を選べる。 または、この行を書かなくても、C-u C-\ で "japanese-mozc" を選ぶと mozc で入力が可能である。 ただし毎回やらないといけない。
最後の (global-set-key (kbd "C-o") 'toggle-input-method) は、好みの問題だろう。 筆者は設定していない。 (C-\ を用いる)
(set-language-environment "Japanese") の行があると、過去に Emacs の挙動がおかしくなったことがあった。 筆者は設定していない。 無くても mozc-el は正常に動作するようである。

◎ uim-mozc (ja-uim-mozc) をインストールする

他には ja-fcitx-mozc や ja-ibus-mozc という選択肢もある。

% pkg search mozc | egrep -v emacs
ja-fcitx-mozc-2.23.2815.102.00_5 Mozc engine for Fcitx
ja-ibus-mozc-2.23.2815.102.00_5 Mozc engine for IBus
ja-mozc-server-2.23.2815.102.00_5 Mozc Japanese Input Method, Server
ja-mozc-tool-2.23.2815.102.00_5 Mozc tool for IBus, SCIM, and others
ja-uim-mozc-2.23.2815.102.00_5 Mozc engine for uim

% cd /var/tmp/log/Install/

% nice teetime -t ja-uim-mozc_ portinstall -s ja-uim-mozc
logging (from the next line till the end) to ja-uim-mozc_20200131.log
teetime! 2020年 1月31日 金曜日 12時04分28秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s ja-uim-mozc
〜
Installing ja-uim-mozc-2.23.2815.102.00_5...
To activate uim-mozc, please add the following into ~/.xinitrc,
~/.xsession, or ~/.kde4/env (for KDE4):

export GTK_IM_MODULE=uim
export QT_IM_MODULE=uim
export XMODIFIERS=@im=uim
export XIM=uim
/usr/local/bin/mozc start
uim-xim &

〜
teetime! 2020年 1月31日 金曜日 12時06分47秒 JST

無事にビルド・インストールできた。

uim 及び mozc サーバを有効化するには、ビルドのログにも出ているようなものを、~/.xinitrc に書く。
筆者は ~/.xinitrc を tcsh 用に書いているので、以下のようにしている。

#!/bin/tcsh
〜
setenv GTK_IM_MODULE uim
setenv QT_IM_MODULE uim
setenv XMODIFIERS @im=uim
setenv XIM uim
/usr/local/bin/mozc start
uim-xim &
〜

一旦、X11 サーバを終了させて、startx し直した。

◎ mozc と uim の設定

「mozc_tool config_dialog」で、mozc の設定が出来たりする。 筆者は以前、スペースの入力を「半角」に設定したような記憶がある。

mozc tool

というか、これで Emacs では mozc で漢字変換できるようになったのだが、Chromium (chrome) や rxvt-unicode (urxvt) で、Shift-SPC を押しても、ローマ字でひらがな入力すら出来ない。

uim はどうやって設定するのだろうか。
Xfce4 の「アプリケーション」→「設定」→「入力メソッド」を選択すると、以下が現れた。

uim-pref-gtk failed

uim-gtk3 というものをインストールしてみる。

% pkg search uim
ja-scim-uim-0.2.0_12           SCIM IMEngine module using UIM input method library
ja-uim-anthy-1.8.8_2           Uim plugin using Anthy input method
ja-uim-mozc-2.23.2815.102.00_5 Mozc engine for uim
ja-uim-tomoe-gtk-0.6.0_15      UIM helper program for Tomoe
libgnomeuimm-2.28.0_12         C++ wrapper for libgnomeui library
quimup-1.4.4_1                 Qt5 client for MPD (the Music Player Daemon)
uim-1.8.8_2                    Input method library
uim-el-emacs26-1.8.8_2         Emacs lisp for uim input method library
uim-el-emacs26_canna-1.8.8_2   Emacs lisp for uim input method library
uim-el-emacs26_nox-1.8.8_2     Emacs lisp for uim input method library
uim-el-emacs27-1.8.8_2         Emacs lisp for uim input method library
uim-el-emacs27_nox-1.8.8_2     Emacs lisp for uim input method library
uim-gtk-1.8.8_2                GTK+ modules of uim input method
uim-gtk3-1.8.8_2               GTK+ 3.x modules of uim input method
uim-m17nlib-1.8.8_2            Uim plugin using m17n library input method
uim-qt5-1.8.8_2                Qt5 modules of uim input method

% cd /var/tmp/log/Install/

% nice teetime -t uim-gtk3_ portinstall -s uim-gtk3
logging (from the next line till the end) to uim-gtk3_20200131.log
teetime! 2020年 1月31日 金曜日 13時29分57秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s uim-gtk3
〜
teetime! 2020年 1月31日 金曜日 13時30分49秒 JST

ところが、uim-pref-gtk はインストールされず、よって Xfce4 の「アプリケーション」→「設定」→「入力メソッド」も同様だった。

uim-gtk3 はアンインストールし、uim-gtk の方にしてみる..

% sudo pkg delete uim-gtk3
〜
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 1 packages (of 0 packages in the universe):

Installed packages to be REMOVED:
	uim-gtk3-1.8.8_2

Number of packages to be removed: 1

Proceed with deinstalling packages? [y/N]: y
〜

% cd /var/tmp/log/Install/

% nice teetime -t uim-gtk_ portinstall -s uim-gtk
logging (from the next line till the end) to uim-gtk_20200131.log
teetime! 2020年 1月31日 金曜日 13時37分17秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s uim-gtk
〜
teetime! 2020年 1月31日 金曜日 13時38分03秒 JST

今度は uim-pref-gtk がインストールされ、Xfce4 の「アプリケーション」→「設定」→「入力メソッド」も可能だった。

いろいろ見て回ったら、「全体キー設定1」に以下を見つけた。 Shift-SPC は有効に思えるのだが..

uim-pref-gtk

これを見て、半角/全角キーを押してみたら、rxvt-unicode (urxvt) や Chromium (chrome) や Emacs (emacs) や PyCharm (pycharm-ce) でローマ字でひらがな入力できて、スペースキーで漢字変換も出来た。
だが Shift-SPC は効かない。 解せない..

● Firefox のインストールを試みる

筆者はずっと SeaMonkey を使っていたのだが、最近 ports から削除されてしまった。 :-(

しかし、

% pkg search firefox
firefox-72.0.2,1               Web browser based on the browser portion of Mozilla
firefox-esr-68.4.2,1           Web browser based on the browser portion of Mozilla

% cd /var/tmp/log/Install/

% nice teetime -t firefox portinstall -s firefox
logging (from the next line till the end) to firefox20200203.log
teetime! 2020年 2月 3日 月曜日 11時59分28秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s firefox
〜
sed: /zfs/ports/lang/rust/work/stage/usr/local/lib/rustlib/manifest-*: No such file or directory
*** Error code 1

Stop.
make[3]: stopped in /zfs/ports/lang/rust
*** Error code 1

Stop.
make[2]: stopped in /zfs/ports/lang/rust
*** Error code 1

Stop.
make[1]: stopped in /zfs/ports/devel/rust-cbindgen
*** Error code 1

Stop.
make: stopped in /zfs/ports/www/firefox
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
** Listing the failed packages (-:ignored / *:skipped / !:failed)
	! www/firefox	(dependent ports)
teetime! 2020年 2月 3日 月曜日 13時49分53秒 JST

うーん。

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

筆者は、ホームディレクトリのバックアップと、freebsd-update fetch と、portupgrade 等を一括して行うスクリプトを、日々走らせている (手動で起動)。
(なお普通の人はパッケージの更新は portupgrade ではなく pkg upgrade でバイナリで行えばよいでしょう)

ただしここまで、新環境ではまだ走らせていなかった。 それを設定する。

以下がコマンドラインから実行するスクリプトである。 ファイル名は bup としている。

#!/bin/sh
# 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
sh pvc.sh

# EoF

このスクリプトからはさらに、back2 と updatefb と pvc.sh というスクリプトが呼び出されている。
bup 及び、back2 と updatefb は、~/bin ディレクトリに配置してコマンドパスを通してある。
pvc.sh は /var/tmp/log に配置する。

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

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

if [ `hostname`. != fb121.magic.or. ]; then
	echo this is not fb121, 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/ fb111c:/zfs/nsmrtks/

# EoF

updatefb は、freebsd-update fetch や pkg audit -F や ports ツリーの更新を行うスクリプトである。 以下のような内容になっている。

#!/bin/sh
# 2010-11-04,12,2013-03-14-	Time-stamp: <2017-10-23 13:59:14 nsmrtks>

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

date
echo ==========================================================================
( set -x ; sudo freebsd-update fetch )
echo ==========================================================================
if type pkg >/dev/null ; then
	# They hang. Why??
	( set -x ; sudo pkg update )
	echo ------------------------------------------------------------------
	( set -x ; sudo pkg audit -F )
else
	( set -x ; sudo portaudit -Fda )	
fi
echo ==========================================================================
( set -x ; sudo portsnap fetch )
echo ==========================================================================
( set -x ; portsnap update )
echo ==========================================================================
( set -x ; sudo portversion -c > portversion-c.out )
echo ==========================================================================
date

# EoF

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

pvc.sh が、sh portversion-c.out を実行するスクリプトになっている。 (前述の通り /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
+ mkdir /var/tmp/log/back
+ teetime -t rsync rsync -a --delete-before /home/nsmrtks/ fb111c:/zfs/nsmrtks/
logging (from the next line till the end) to rsync20200203.log
teetime! 2020年 2月 3日 月曜日 13時57分15秒 JST
teetime! working directory is /var/tmp/log/back
teetime> rsync -a --delete-before /home/nsmrtks/ fb111c:/zfs/nsmrtks/
teetime! 2020年 2月 3日 月曜日 13時57分58秒 JST
conflicting updatefb20200203.log
logging (from the next line till the end) to updatefb2020020313.log
teetime! 2020年 2月 3日 月曜日 13時57分58秒 JST
teetime! working directory is /var/tmp/log/updatefb
teetime> updatefb
2020年 2月 3日 月曜日 13時57分58秒 JST
==========================================================================
+ sudo freebsd-update fetch
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching metadata signature for 12.1-RELEASE from update2.freebsd.org... done.
Fetching metadata index... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 29 patches.....10....20.... done.
Applying patches... done.
Fetching 5 files... .. done.
The following files will be updated as part of updating to
12.1-RELEASE-p2:
/bin/freebsd-version
/boot/kernel/kernel
/lib/libc.so.7
/rescue/[
〜
==========================================================================
+ sudo pkg update
Updating FreeBSD repository catalogue...
Fetching meta.txz: . done
Fetching packagesite.txz: .......... done
Processing entries: .......... done
FreeBSD repository update completed. 31773 packages processed.
All repositories are up to date.
------------------------------------------------------------------
+ sudo pkg audit -F
Fetching vuln.xml.bz2: .......... done
samba410-4.10.11 is vulnerable:
samba -- multiple vulnerabilities
CVE: CVE-2019-19344
CVE: CVE-2019-14907
CVE: CVE-2019-14902
WWW: https://vuxml.FreeBSD.org/freebsd/5f0dd349-40a2-11ea-8d8c-005056a311d1.html

pkg-1.12.0 is vulnerable:
pkg -- vulnerability in libfetch
CVE: CVE-2020-7450
WWW: https://vuxml.FreeBSD.org/freebsd/2af10639-4299-11ea-aab1-98fa9bfec35a.html

sudo-1.8.30 is vulnerable:
sudo -- Potential bypass of Runas user restrictions
CVE: CVE-2019-18634
WWW: https://vuxml.FreeBSD.org/freebsd/b4e5f782-442d-11ea-9ba9-206a8a720317.html

webkit2-gtk3-2.26.2 is vulnerable:
webkit-gtk3 -- Multiple vulnerabilities
CVE: CVE-2019-8846
CVE: CVE-2019-8844
CVE: CVE-2019-8835
WWW: https://vuxml.FreeBSD.org/freebsd/dc8cff4c-4063-11ea-8a94-3497f6939fdd.html

mysql57-server-5.7.28_2 is vulnerable:
MySQL -- Multiple vulerabilities
CVE: CVE-2019-8457
CVE: CVE-2020-2572
CVE: CVE-2020-2694
CVE: CVE-2020-2584
CVE: CVE-2020-2679
CVE: CVE-2020-2660
CVE: CVE-2020-2588
CVE: CVE-2020-2580
CVE: CVE-2020-2589
CVE: CVE-2020-2577
CVE: CVE-2020-2574
CVE: CVE-2020-2573
CVE: CVE-2020-2570
CVE: CVE-2020-2627
CVE: CVE-2020-2686
CVE: CVE-2020-2579
CVE: CVE-2019-1547
WWW: https://vuxml.FreeBSD.org/freebsd/a6cf65ad-37d2-11ea-a1c7-b499baebfeaf.html

5 problem(s) in 5 installed package(s) found.
==========================================================================
+ sudo portsnap fetch
Looking up portsnap.FreeBSD.org mirrors... 6 mirrors found.
Fetching snapshot tag from ec2-ap-northeast-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Updating from Wed Jan 15 12:56:52 JST 2020 to Mon Feb  3 13:26:50 JST 2020.
Fetching 5 metadata patches... done.
Applying metadata patches... done.
Fetching 5 metadata files... done.
Fetching 1860 patches. 
〜
done.
Applying patches... 
  Skipping 40e685e22604fa195e5667c83a3359dd48bee674b7aeb6a16c56351b612c0daf-97030b6b8efe3d0b4e57192f051ecd481450ad0c08b82e409aa69f69ad7884fc (1156 of 
    1860 patchlist). 〜 done.
Fetching 272 new ports or files... done.
==========================================================================
+ portsnap update
Removing old files and directories... rm: /usr/ports/devel/rust-cbindgen/work/.extract_done.cbindgen._usr_local: Permission denied
rm: /usr/ports/devel/rust-cbindgen/work/.license-report: Permission denied
〜
rm: /usr/ports/lang/rust: Directory not empty
done.
Extracting new files:
/usr/ports/.gitauthors
/usr/ports/CHANGES
〜
/usr/ports/x11/xterm/
Building new INDEX files... done.
==========================================================================
+ sudo portversion -c
パスワード: ^C

途中で Permission denied という変なのが出ていたので、ちょうど sudo のパスワード入力待ちになった所で、Ctrl-C で止めた。
今回、まず、sudo で portsclean -C (ports でビルド中だったファイルを消去する) を実行する。

% sudo portsclean -C
〜
Cleaning out /usr/ports/*/*/work...
Delete /usr/ports/devel/rust-cbindgen/work
Delete /usr/ports/devel/llvm90/work
Delete /usr/ports/lang/rust/work
done.

次に、freebsd-update fetch を実行した時に何か出ていたので、freebsd-update install を実行する。

% sudo freebsd-update install
〜
Installing updates... done.

ここで uname -a を実行すると、以下のようであった。

% uname -a
FreeBSD fb121.magic.or 12.1-RELEASE-p1 FreeBSD 12.1-RELEASE-p1 GENERIC  amd64

先ほどの freebsd-update fetch では、カーネルに関するファイルも出ていたようなので、FreeBSD を再起動する。 (シャットダウン・電源 OFF・電源 ON した)。

再起動後に、uname -a を実行してみた所、以下のように、バージョンが上がっていた。

% uname -a
FreeBSD fb121.magic.or 12.1-RELEASE-p2 FreeBSD 12.1-RELEASE-p2 GENERIC  amd64

エラー (Permission denied) になっていた portsnap update をもやり直すために、おもむろに bup をいま一度実行する。 (環境の都合により 1回目は Proxy Authentication のエラーになったので以下は 2回目の実行である)

% nice +20 bup
/var/tmp/log
+ teetime -t rsync rsync -a --delete-before /home/nsmrtks/ fb111c:/zfs/nsmrtks/
conflicting rsync20200203.log
conflicting rsync2020020314.log
logging (from the next line till the end) to rsync202002031432.log
teetime! 2020年 2月 3日 月曜日 14時32分39秒 JST
teetime! working directory is /var/tmp/log/back
teetime> rsync -a --delete-before /home/nsmrtks/ fb111c:/zfs/nsmrtks/
teetime! 2020年 2月 3日 月曜日 14時32分49秒 JST
conflicting updatefb20200203.log
conflicting updatefb2020020314.log
logging (from the next line till the end) to updatefb202002031432.log
teetime! 2020年 2月 3日 月曜日 14時32分49秒 JST
teetime! working directory is /var/tmp/log/updatefb
teetime> updatefb
2020年 2月 3日 月曜日 14時32分49秒 JST
==========================================================================
+ sudo freebsd-update fetch
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching metadata signature for 12.1-RELEASE from update2.freebsd.org... done.
Fetching metadata index... done.
Inspecting system... done.
Preparing to download files... done.

No updates needed to update system to 12.1-RELEASE-p2.
==========================================================================
+ sudo pkg update
Updating FreeBSD repository catalogue...
Fetching meta.txz: . done
Fetching packagesite.txz: .......... done
Processing entries: .......... done
FreeBSD repository update completed. 31773 packages processed.
All repositories are up to date.
------------------------------------------------------------------
+ sudo pkg audit -F
vulnxml file up-to-date
samba410-4.10.11 is vulnerable:
samba -- multiple vulnerabilities
CVE: CVE-2019-19344
CVE: CVE-2019-14907
CVE: CVE-2019-14902
WWW: https://vuxml.FreeBSD.org/freebsd/5f0dd349-40a2-11ea-8d8c-005056a311d1.html

pkg-1.12.0 is vulnerable:
pkg -- vulnerability in libfetch
CVE: CVE-2020-7450
WWW: https://vuxml.FreeBSD.org/freebsd/2af10639-4299-11ea-aab1-98fa9bfec35a.html

sudo-1.8.30 is vulnerable:
sudo -- Potential bypass of Runas user restrictions
CVE: CVE-2019-18634
WWW: https://vuxml.FreeBSD.org/freebsd/b4e5f782-442d-11ea-9ba9-206a8a720317.html

webkit2-gtk3-2.26.2 is vulnerable:
webkit-gtk3 -- Multiple vulnerabilities
CVE: CVE-2019-8846
CVE: CVE-2019-8844
CVE: CVE-2019-8835
WWW: https://vuxml.FreeBSD.org/freebsd/dc8cff4c-4063-11ea-8a94-3497f6939fdd.html

mysql57-server-5.7.28_2 is vulnerable:
MySQL -- Multiple vulerabilities
CVE: CVE-2019-8457
CVE: CVE-2020-2572
CVE: CVE-2020-2694
CVE: CVE-2020-2584
CVE: CVE-2020-2679
CVE: CVE-2020-2660
CVE: CVE-2020-2588
CVE: CVE-2020-2580
CVE: CVE-2020-2589
CVE: CVE-2020-2577
CVE: CVE-2020-2574
CVE: CVE-2020-2573
CVE: CVE-2020-2570
CVE: CVE-2020-2627
CVE: CVE-2020-2686
CVE: CVE-2020-2579
CVE: CVE-2019-1547
WWW: https://vuxml.FreeBSD.org/freebsd/a6cf65ad-37d2-11ea-a1c7-b499baebfeaf.html

5 problem(s) in 5 installed package(s) found.
==========================================================================
+ sudo portsnap fetch
Looking up portsnap.FreeBSD.org mirrors... 6 mirrors found.
Fetching snapshot tag from ec2-ap-northeast-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Updating from Mon Feb  3 13:26:50 JST 2020 to Mon Feb  3 13:58:10 JST 2020.
Fetching 5 metadata patches... done.
Applying metadata patches... done.
Fetching 0 metadata files... done.
Fetching 1 patches. 
〜 done. 
done.
Applying patches... 
done.
Fetching 0 new ports or files... done.
==========================================================================
+ portsnap update
Removing old files and directories... done.
Extracting new files:
/usr/ports/sysutils/uefi-edk2-qemu/
Building new INDEX files... done.
==========================================================================
+ sudo portversion -c
[Reading data from pkg(8) ... - 1269 packages found - done]
[Updating the portsdb <format:bdb_btree> in /usr/ports ... - 32842 port entries found .........1000.........2000.........〜.........32000........ ..... done]
==========================================================================
2020年 2月 3日 月曜日 14時33分23秒 JST
teetime! 2020年 2月 3日 月曜日 14時33分23秒 JST
+ mkdir /var/tmp/log/pvc
+ cd /var/tmp/log/pvc
+ nice teetime -t pvc sh ../updatefb/portversion-c.out -s
logging (from the next line till the end) to pvc20200203.log
teetime! 2020年 2月 3日 月曜日 14時33分23秒 JST
teetime! working directory is /var/tmp/log/pvc
teetime> sh ../updatefb/portversion-c.out -s
[Reading data from pkg(8) ... - 1269 packages found - done]
(今回ここまで表示した所で数十分待たされた)
〜
override rw-r--r-- root/wheel for /tmp/portupgradeJMmQWQ3r/sudo-1.8.30.txz? 
rm: /tmp/portupgradeJMmQWQ3r: ディレクトリが空ではありません
/zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgmisc.rb:120:in `+': no implicit conversion of CommandFailedError into String (TypeError)
	from /zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgmisc.rb:120:in `rescue in block in init_tmpdir'
	from /zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgmisc.rb:117:in `block in init_tmpdir'
/zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgtools.rb:487:in `__system': Command failed [exit code 1]: "rm -r /tmp/portupgradeJMmQWQ3r" (CommandFailedError)
	from /zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgtools.rb:493:in `xsystem'
	from /zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgmisc.rb:118:in `block in init_tmpdir'
/zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgtools.rb:487:in `__system': Command failed [exit code 127]: sudo /usr/local/sbin/pkgdb -aFOQ (CommandFailedError)
	from /zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgtools.rb:510:in `__sudo'
	from /zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgtools.rb:516:in `xsudo'
	from /zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgdb.rb:1062:in `autofix!'
	from /zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgdb.rb:1058:in `autofix'
	from /usr/local/sbin/portupgrade:519:in `block (2 levels) in main'
	from /usr/local/sbin/portupgrade:855:in `block in main'
	from /zfs/local/lib/ruby/2.6/optparse.rb:1089:in `initialize'
	from /usr/local/sbin/portupgrade:238:in `new'
	from /usr/local/sbin/portupgrade:238:in `main'
	from /usr/local/sbin/portupgrade:2380:in `<main>'
/zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgtools.rb:487:in `__system': Command failed [exit code 127]: sudo /usr/local/sbin/pkgdb -aFOQ (CommandFailedError)
	from /zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgtools.rb:510:in `__sudo'
	from /zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgtools.rb:516:in `xsudo'
	from /zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgdb.rb:1062:in `autofix!'
	from /zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgdb.rb:1058:in `autofix'
	from /usr/local/sbin/portupgrade:519:in `block (2 levels) in main'
	from /usr/local/sbin/portupgrade:855:in `block in main'
	from /zfs/local/lib/ruby/2.6/optparse.rb:1089:in `initialize'
	from /usr/local/sbin/portupgrade:238:in `new'
	from /usr/local/sbin/portupgrade:238:in `main'
	from /usr/local/sbin/portupgrade:2380:in `<main>'
teetime! 2020年 2月 3日 月曜日 17時06分03秒 JST

ここまで来るまでに、(またしても) 筆者の環境の都合により Proxy Authentication のエラーになったりもしているが、最後は sudo 周りでエラーになっている。
これは portupgrade の途中で sudo コマンドを使うので (portupgrade の -s オプション及び前述した /etc/make.conf の設定)、sudo を portupgrade しようとするとおかしくなってしまうのだと考えられる。

そこで筆者は、sudo の portupgrade (というより portinstall) を su を用いて行うために、毎回手で打つのは面倒なので、以下のスクリプトを用いている。 (ファイル名は pisudo.sh)

#!/bin/sh
# 2012-03-01, 03-06 (on fb90), 2018-04-27 nsmrtks

# portinstall sudo with script logging

# usage: sh /path/to/pisudo.sh [portinstall option]

# Example:
#	cd /var/tmp/log/Install
#	sh ~/work/pisudo.sh -w

if type sudo ; then
	echo We already have sudo installed. Don\'t worry!
	exit 2
fi

set -x
script sudo`date +%Y%m%d%H%M%S`.log portinstall $* -s -S 'su root -c %s ' sudo

# EoF

先ほどの sudo のビルド成果物を無駄にしないように、-w を付けて実行すると、それが portinstall コマンドにそのまま渡される。 (付け忘れても致命的ではない)

% cd /var/tmp/log/Install

% nice sh ~/work/pisudo.sh -w
sudo: not found
+ date +%Y%m%d%H%M%S
+ script sudo20200203171010.log portinstall -w -s -S 'su root -c %s ' sudo
Script started, output file is sudo20200203171010.log
[Reading data from pkg(8) ... - 1268 packages found - done]
〜
Script done, output file is sudo20200203171010.log

sudo コマンドが再びインストールされた。

bup コマンドは、最後のステップで pvc.sh を実行するようになっているので、通常は pvc.sh のみやり直せばよい (ここでも -w を付けると、portupgrade コマンドにそのまま渡される) ..のだが、ここでは (再度) bup コマンドからやり直すことにしてみる。 (bup コマンドからやり直すと pvc.sh の実行だけでなくホームディレクトリのバックアップと freebsd-update fetch の実行がまた行われる。 また pvc.sh (portupgrade) に -w を指定するといったことが出来ずビルド生成物が clean されるのでその分の時間がかかるということはある。)

% nice +20 bup
〜
/var/tmp/log
+ teetime -t rsync rsync -a --delete-before /home/nsmrtks/ fb111c:/zfs/nsmrtks/
conflicting rsync20200203.log
logging (from the next line till the end) to rsync2020020317.log
teetime! 2020年 2月 3日 月曜日 17時22分52秒 JST
teetime! working directory is /var/tmp/log/back
teetime> rsync -a --delete-before /home/nsmrtks/ fb111c:/zfs/nsmrtks/
teetime! 2020年 2月 3日 月曜日 17時23分11秒 JST
conflicting updatefb20200203.log
logging (from the next line till the end) to updatefb2020020317.log
teetime! 2020年 2月 3日 月曜日 17時23分11秒 JST
teetime! working directory is /var/tmp/log/updatefb
teetime> updatefb
2020年 2月 3日 月曜日 17時23分11秒 JST
==========================================================================
+ sudo freebsd-update fetch
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching metadata signature for 12.1-RELEASE from update2.freebsd.org... done.
Fetching metadata index... done.
Inspecting system... done.
Preparing to download files... done.

No updates needed to update system to 12.1-RELEASE-p2.
==========================================================================
+ sudo pkg update
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
------------------------------------------------------------------
+ sudo pkg audit -F
vulnxml file up-to-date
samba410-4.10.11 is vulnerable:
samba -- multiple vulnerabilities
CVE: CVE-2019-19344
CVE: CVE-2019-14907
CVE: CVE-2019-14902
WWW: https://vuxml.FreeBSD.org/freebsd/5f0dd349-40a2-11ea-8d8c-005056a311d1.html

webkit2-gtk3-2.26.2 is vulnerable:
webkit-gtk3 -- Multiple vulnerabilities
CVE: CVE-2019-8846
CVE: CVE-2019-8844
CVE: CVE-2019-8835
WWW: https://vuxml.FreeBSD.org/freebsd/dc8cff4c-4063-11ea-8a94-3497f6939fdd.html

mysql57-server-5.7.28_2 is vulnerable:
MySQL -- Multiple vulerabilities
CVE: CVE-2019-8457
CVE: CVE-2020-2572
CVE: CVE-2020-2694
CVE: CVE-2020-2584
CVE: CVE-2020-2679
CVE: CVE-2020-2660
CVE: CVE-2020-2588
CVE: CVE-2020-2580
CVE: CVE-2020-2589
CVE: CVE-2020-2577
CVE: CVE-2020-2574
CVE: CVE-2020-2573
CVE: CVE-2020-2570
CVE: CVE-2020-2627
CVE: CVE-2020-2686
CVE: CVE-2020-2579
CVE: CVE-2019-1547
WWW: https://vuxml.FreeBSD.org/freebsd/a6cf65ad-37d2-11ea-a1c7-b499baebfeaf.html

3 problem(s) in 3 installed package(s) found.
==========================================================================
+ sudo portsnap fetch
Looking up portsnap.FreeBSD.org mirrors... 6 mirrors found.
Fetching snapshot tag from ec2-ap-northeast-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Updating from Mon Feb  3 13:58:10 JST 2020 to Mon Feb  3 16:35:16 JST 2020.
Fetching 5 metadata patches... done.
Applying metadata patches... done.
Fetching 0 metadata files... done.
Fetching 9 patches. 
〜 done. 
done.
Applying patches... 
done.
Fetching 1 new ports or files... done.
==========================================================================
+ portsnap update
Removing old files and directories... done.
Extracting new files:
/usr/ports/devel/loccount/
/usr/ports/graphics/Makefile
/usr/ports/graphics/xviewer/
/usr/ports/lang/gcc8-devel/
/usr/ports/misc/cheat/
/usr/ports/net/openldap24-server/
/usr/ports/www/node/
/usr/ports/www/node10/
/usr/ports/www/node12/
/usr/ports/x11/xterm/
Building new INDEX files... done.
==========================================================================
+ sudo portversion -c
[Reading data from pkg(8) ... - 1269 packages found - done]
[Updating the portsdb  in /usr/ports ... - 32843 port entries found .........1000.........2000.........3000.........〜.........32000........ ..... done]
==========================================================================
2020年 2月 3日 月曜日 17時23分36秒 JST
teetime! 2020年 2月 3日 月曜日 17時23分36秒 JST
+ cd /var/tmp/log/pvc
+ nice teetime -t pvc sh ../updatefb/portversion-c.out -s
conflicting pvc20200203.log
logging (from the next line till the end) to pvc2020020317.log
teetime! 2020年 2月 3日 月曜日 17時23分36秒 JST
teetime! working directory is /var/tmp/log/pvc
teetime> sh ../updatefb/portversion-c.out -s
[Reading data from pkg(8) ... - 1269 packages found - done]
(今回もここまで表示した所で数十分待たされた)
〜
--->  [Executing a command as root: sudo /usr/local/sbin/pkg query %a devel/tbb]
パスワード: 
sudo: パスワードの読み込みがタイムしました
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
パスワード: 
sudo: パスワードの読み込みがタイムしました
** Command failed [exit code 1]: sudo /usr/local/sbin/pkgdb -aFOQ
--->  Skipping 'devel/tbb'
--->  Skipping 'devel/kf5-kcrash' (kf5-kcrash-5.65.0) because a requisite package 'kf5-kwindowsystem-5.65.0' (x11/kf5-kwindowsystem) failed (specify -k to force)
--->  Skipping 'archivers/kf5-karchive' (kf5-karchive-5.65.0) because a requisite package 'qt5-core-5.13.2' (devel/qt5-core) failed (specify -k to force)
--->  Skipping 'net/kf5-kcontacts' (kf5-kcontacts-5.65.0,1) because a requisite package 'qt5-gui-5.13.2_2' (x11-toolkits/qt5-gui) failed (specify -k to force)
--->  Skipping 'devel/kf5-kdoctools' (kf5-kdoctools-5.65.0) because a requisite package 'qt5-core-5.13.2' (devel/qt5-core) failed (specify -k to force)
--->  Skipping 'x11-toolkits/kf5-kjobwidgets' (kf5-kjobwidgets-5.65.0) because a requisite package 'qt5-widgets-5.13.2' (x11-toolkits/qt5-widgets) failed (specify -k to force)
--->  Skipping 'devel/kf5-kfilemetadata' (kf5-kfilemetadata-5.65.0) because a requisite package 'ffmpeg-4.2.2,1' (multimedia/ffmpeg) failed (specify -k to force)
--->  Skipping 'graphics/kf5-kimageformats' (kf5-kimageformats-5.65.0_1) because a requisite package 'qt5-widgets-5.13.2' (x11-toolkits/qt5-widgets) failed (specify -k to force)
--->  Skipping 'math/suitesparse' (suitesparse-5.4.0_4) because a requisite package 'openblas-0.2.20_11,1' (math/openblas) failed (specify -k to force)
--->  Skipping 'devel/kf5-kservice' (kf5-kservice-5.65.0) because a requisite package 'qt5-gui-5.13.2_2' (x11-toolkits/qt5-gui) failed (specify -k to force)
--->  Skipping 'x11/kf5-kglobalaccel' (kf5-kglobalaccel-5.65.0) because a requisite package 'kf5-kwindowsystem-5.65.0' (x11/kf5-kwindowsystem) failed (specify -k to force)
--->  Skipping 'devel/kf5-kpackage' (kf5-kpackage-5.65.0) because a requisite package 'qt5-dbus-5.13.2' (devel/qt5-dbus) failed (specify -k to force)
--->  Skipping 'x11-themes/kf5-kemoticons' (kf5-kemoticons-5.65.0) because a requisite package 'qt5-widgets-5.13.2' (x11-toolkits/qt5-widgets) failed (specify -k to force)
--->  Skipping 'x11-toolkits/kf5-kconfigwidgets' (kf5-kconfigwidgets-5.65.0) because a requisite package 'qt5-widgets-5.13.2' (x11-toolkits/qt5-widgets) failed (specify -k to force)
--->  Skipping 'devel/kf5-kpeople' (kf5-kpeople-5.65.0) because a requisite package 'qt5-widgets-5.13.2' (x11-toolkits/qt5-widgets) failed (specify -k to force)
--->  Skipping 'devel/kf5-threadweaver' (kf5-threadweaver-5.65.0) because a requisite package 'qt5-widgets-5.13.2' (x11-toolkits/qt5-widgets) failed (specify -k to force)
--->  Skipping 'security/kf5-kdesu' (kf5-kdesu-5.65.0) because a requisite package 'qt5-dbus-5.13.2' (devel/qt5-dbus) failed (specify -k to force)
--->  Skipping 'x11-themes/kf5-kiconthemes' (kf5-kiconthemes-5.65.0) because a requisite package 'qt5-widgets-5.13.2' (x11-toolkits/qt5-widgets) failed (specify -k to force)
--->  Skipping 'www/kf5-kjs' (kf5-kjs-5.65.0) because a requisite package 'qt5-core-5.13.2' (devel/qt5-core) failed (specify -k to force)
--->  Skipping 'sysutils/kf5-kwallet' (kf5-kwallet-5.65.0) because a requisite package 'kf5-kwindowsystem-5.65.0' (x11/kf5-kwindowsystem) failed (specify -k to force)
--->  Skipping 'www/kf5-kjsembed' (kf5-kjsembed-5.65.0) because a requisite package 'qt5-widgets-5.13.2' (x11-toolkits/qt5-widgets) failed (specify -k to force)
--->  Skipping 'math/py-numpy' (py27-numpy-1.16.5_2,1) because a requisite package 'suitesparse-5.4.0_4' (math/suitesparse) failed (specify -k to force)
--->  Skipping 'x11-toolkits/kf5-ktextwidgets' (kf5-ktextwidgets-5.65.0) because a requisite package 'kf5-kwindowsystem-5.65.0' (x11/kf5-kwindowsystem) failed (specify -k to force)
--->  Skipping 'x11-toolkits/kf5-kxmlgui' (kf5-kxmlgui-5.65.0) because a requisite package 'kf5-kwindowsystem-5.65.0' (x11/kf5-kwindowsystem) failed (specify -k to force)
--->  Skipping 'devel/kf5-kbookmarks' (kf5-kbookmarks-5.65.0) because a requisite package 'qt5-widgets-5.13.2' (x11-toolkits/qt5-widgets) failed (specify -k to force)
--->  Skipping 'devel/kf5-kio' (kf5-kio-5.65.0) because a requisite package 'kf5-kwindowsystem-5.65.0' (x11/kf5-kwindowsystem) failed (specify -k to force)
--->  Skipping 'x11/kf5-kinit' (kf5-kinit-5.65.0) because a requisite package 'kf5-kwindowsystem-5.65.0' (x11/kf5-kwindowsystem) failed (specify -k to force)
--->  Skipping 'devel/kf5-kdeclarative' (kf5-kdeclarative-5.65.0) because a requisite package 'kf5-kwindowsystem-5.65.0' (x11/kf5-kwindowsystem) failed (specify -k to force)
--->  Skipping 'net/kf5-kxmlrpcclient' (kf5-kxmlrpcclient-5.65.0) because a requisite package 'qt5-gui-5.13.2_2' (x11-toolkits/qt5-gui) failed (specify -k to force)
--->  Skipping 'x11/kf5-kded' (kf5-kded-5.65.0) because a requisite package 'kf5-kinit-5.65.0' (x11/kf5-kinit) failed (specify -k to force)
--->  Skipping 'x11-toolkits/kf5-kirigami2' (kf5-kirigami2-5.65.0) because a requisite package 'qt5-widgets-5.13.2' (x11-toolkits/qt5-widgets) failed (specify -k to force)
--->  Skipping 'devel/kf5-knewstuff' (kf5-knewstuff-5.65.0) because a requisite package 'qt5-widgets-5.13.2' (x11-toolkits/qt5-widgets) failed (specify -k to force)
--->  Skipping 'net/kf5-syndication' (kf5-syndication-5.65.0,1) because a requisite package 'qt5-gui-5.13.2_2' (x11-toolkits/qt5-gui) failed (specify -k to force)
--->  Skipping 'x11-themes/kf5-qqc2-desktop-style' (kf5-qqc2-desktop-style-5.65.0) because a requisite package 'qt5-widgets-5.13.2' (x11-toolkits/qt5-widgets) failed (specify -k to force)
--->  Skipping 'devel/kf5-kcmutils' (kf5-kcmutils-5.65.0) because a requisite package 'qt5-widgets-5.13.2' (x11-toolkits/qt5-widgets) failed (specify -k to force)
--->  Skipping 'x11/kf5-frameworkintegration' (kf5-frameworkintegration-5.65.0) because a requisite package 'qt5-widgets-5.13.2' (x11-toolkits/qt5-widgets) failed (specify -k to force)
--->  Skipping 'x11/kf5-kactivities' (kf5-kactivities-5.65.0) because a requisite package 'kf5-kwindowsystem-5.65.0' (x11/kf5-kwindowsystem) failed (specify -k to force)
--->  Skipping 'devel/kf5-kparts' (kf5-kparts-5.65.0) because a requisite package 'qt5-widgets-5.13.2' (x11-toolkits/qt5-widgets) failed (specify -k to force)
--->  Skipping 'devel/kf5-ktexteditor' (kf5-ktexteditor-5.65.0) because a requisite package 'qt5-widgets-5.13.2' (x11-toolkits/qt5-widgets) failed (specify -k to force)
--->  Skipping 'x11/kf5-plasma-framework' (kf5-plasma-framework-5.65.0) because a requisite package 'kf5-kwindowsystem-5.65.0' (x11/kf5-kwindowsystem) failed (specify -k to force)
--->  Skipping 'x11/kf5-krunner' (kf5-krunner-5.65.0) because a requisite package 'kf5-plasma-framework-5.65.0' (x11/kf5-plasma-framework) failed (specify -k to force)
--->  Skipping 'lang/kf5-kross' (kf5-kross-5.65.0) because a requisite package 'qt5-widgets-5.13.2' (x11-toolkits/qt5-widgets) failed (specify -k to force)
--->  Skipping 'devel/kf5-knotifyconfig' (kf5-knotifyconfig-5.65.0) because a requisite package 'qt5-widgets-5.13.2' (x11-toolkits/qt5-widgets) failed (specify -k to force)
--->  Skipping 'x11/kf5-kactivities-stats' (kf5-kactivities-stats-5.65.0) because a requisite package 'kf5-kactivities-5.65.0' (x11/kf5-kactivities) failed (specify -k to force)
--->  Skipping 'www/kf5-khtml' (kf5-khtml-5.65.0) because a requisite package 'kf5-kwindowsystem-5.65.0' (x11/kf5-kwindowsystem) failed (specify -k to force)
--->  Skipping 'www/kf5-kdewebkit' (kf5-kdewebkit-5.65.0) because a requisite package 'qt5-widgets-5.13.2' (x11-toolkits/qt5-widgets) failed (specify -k to force)
--->  Skipping 'x11-toolkits/kf5-kdesignerplugin' (kf5-kdesignerplugin-5.65.0) because a requisite package 'qt5-widgets-5.13.2' (x11-toolkits/qt5-widgets) failed (specify -k to force)
--->  Skipping 'misc/kf5-purpose' (kf5-purpose-5.65.0) because a requisite package 'qt5-widgets-5.13.2' (x11-toolkits/qt5-widgets) failed (specify -k to force)
--->  Skipping 'x11/kf5-kdelibs4support' (kf5-kdelibs4support-5.65.0) because a requisite package 'kf5-kwindowsystem-5.65.0' (x11/kf5-kwindowsystem) failed (specify -k to force)
--->  Skipping 'security/plasma5-kscreenlocker' (plasma5-kscreenlocker-5.17.5) because a requisite package 'kf5-plasma-framework-5.65.0' (x11/kf5-plasma-framework) failed (specify -k to force)
--->  Skipping 'graphics/okular' (okular-19.12.1) because a requisite package 'kf5-kwindowsystem-5.65.0' (x11/kf5-kwindowsystem) failed (specify -k to force)
--->  Skipping 'net/kf5-kholidays' (kf5-kholidays-5.65.0) because a requisite package 'kf5-kinit-5.65.0' (x11/kf5-kinit) failed (specify -k to force)
--->  Skipping 'net/kf5-kcalendarcore' (kf5-kcalendarcore-5.65.0,1) because a requisite package 'kf5-kinit-5.65.0' (x11/kf5-kinit) failed (specify -k to force)
--->  Skipping 'net/messagelib' (messagelib-19.12.1_1) because a requisite package 'kf5-kwindowsystem-5.65.0' (x11/kf5-kwindowsystem) failed (specify -k to force)
--->  Skipping 'net/kitinerary' (kitinerary-19.12.1) because a requisite package 'qt5-gui-5.13.2_2' (x11-toolkits/qt5-gui) failed (specify -k to force)
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
パスワード: 
sudo: パスワードの読み込みがタイムしました
/zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgtools.rb:487:in `__system': Command failed [exit code 1]: sudo /usr/local/sbin/pkgdb -aFOQ (CommandFailedError)
	from /zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgtools.rb:510:in `__sudo'
	from /zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgtools.rb:516:in `xsudo'
	from /zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgdb.rb:1062:in `autofix!'
	from /zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgdb.rb:1058:in `autofix'
	from /usr/local/sbin/portupgrade:519:in `block (2 levels) in main'
	from /usr/local/sbin/portupgrade:855:in `block in main'
	from /zfs/local/lib/ruby/2.6/optparse.rb:1089:in `initialize'
	from /usr/local/sbin/portupgrade:238:in `new'
	from /usr/local/sbin/portupgrade:238:in `main'
	from /usr/local/sbin/portupgrade:2380:in `<main>'
teetime! 2020年 2月 3日 月曜日 23時19分35秒 JST

作業時間の都合で、放置して帰宅したため、sudo の入力待ちでタイムアウトしていた。
今度は、pvc.sh (sh pvc.sh -w) のみやり直すことにしてみる。

% cd /var/tmp/log

% nice +20 sh pvc.sh -w
〜
teetime! 2020年 2月 4日 火曜日 08時22分15秒 JST
teetime! working directory is /var/tmp/log/pvc
teetime> sh ../updatefb/portversion-c.out -s -w
〜
rm: /tmp/portupgradeDwvAsvaw: ディレクトリが空ではありません
/zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgmisc.rb:120:in `+': no implicit conversion of CommandFailedError into String (TypeError)
	from /zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgmisc.rb:120:in `rescue in block in init_tmpdir'
	from /zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgmisc.rb:117:in `block in init_tmpdir'
/zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgtools.rb:487:in `__system': Command failed [exit code 1]: "rm -r /tmp/portupgradeDwvAsvaw" (CommandFailedError)
	from /zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgtools.rb:493:in `xsystem'
	from /zfs/local/lib/ruby/site_ruby/2.6/pkgtools/pkgmisc.rb:118:in `block in init_tmpdir'
/usr/local/sbin/portupgrade:2380:in `exit': exit (SystemExit)
	from /usr/local/sbin/portupgrade:2380:in `<main>'
teetime! 2020年 2月 4日 火曜日 09時19分19秒 JST

またしても環境の都合により Proxy Authentication で引っかかった.. 再度やり直す。

% nice +20 sh pvc.sh -w
+ cd /var/tmp/log/pvc
+ nice teetime -t pvc sh ../updatefb/portversion-c.out -s -w
conflicting pvc20200204.log
logging (from the next line till the end) to pvc2020020409.log
teetime! 2020年 2月 4日 火曜日 09時22分30秒 JST
teetime! working directory is /var/tmp/log/pvc
teetime> sh ../updatefb/portversion-c.out -s -w
[Reading data from pkg(8) ... - 1267 packages found - done]
〜
Installing gstreamer1-plugins-1.16.2...
pkg-static: gstreamer1-plugins-1.16.2 conflicts with gstreamer1-plugins-bad-1.14.4 (installs files into the same place).  Problematic file:
 /usr/local/include/gstreamer-1.0/gst/video/gstvideoaggregator.h
*** Error code 70

Stop.
make[1]: stopped in /zfs/ports/multimedia/gstreamer1-plugins
*** Error code 1

Stop.
make: stopped in /zfs/ports/multimedia/gstreamer1-plugins
〜
Traceback (most recent call last):
  File "/usr/local/bin/gyp", line 6, in <module>
    from pkg_resources import load_entry_point
ImportError: No module named pkg_resources
Traceback (most recent call last):
  File "build_mozc.py", line 1272, in <module>
    main()
  File "build_mozc.py", line 1256, in main
    GypMain(cmd_opts, cmd_args)
  File "build_mozc.py", line 772, in GypMain
    RunOrDie(gyp_command + gyp_options)
  File "/zfs/ports/japanese/mozc-tool/work/mozc-2.23.2815.102.00/src/build_tools/util.py", line 99, in RunOrDie
    '==========']))
build_tools.util.RunOrDieError: 
==========
 ERROR: /usr/local/bin/gyp 〜
==========
*** Error code 1

Stop.
make[1]: stopped in /zfs/ports/japanese/mozc-tool
*** Error code 1

Stop.
make: stopped in /zfs/ports/japanese/mozc-tool
〜
c++: error: unable to execute command: Killed
c++: error: clang frontend command failed due to signal (use -v to see invocation)
〜
ninja: build stopped: subcommand failed.
===> Compilation failed unexpectedly.
Try to set MAKE_JOBS_UNSAFE=yes and rebuild before reporting the failure to
the maintainer.
*** Error code 1

Stop.
make[1]: stopped in /zfs/ports/www/chromium
*** Error code 1

Stop.
make: stopped in /zfs/ports/www/chromium
〜
** Listing the failed packages (-:ignored / *:skipped / !:failed)
	! multimedia/gstreamer1-plugins (gstreamer1-plugins-1.14.4_2)	(install error)
	* graphics/gstreamer1-plugins-gl (gstreamer1-plugins-gl-1.14.4_2)
	* multimedia/gstreamer1-plugins-ugly (gstreamer1-plugins-ugly-1.14.4)
	* multimedia/gstreamer1-plugins-theora (gstreamer1-plugins-theora-1.14.4)
	* multimedia/gstreamer1-plugins-bad (gstreamer1-plugins-bad-1.14.4)
	* multimedia/gstreamer1-plugins-resindvd (gstreamer1-plugins-resindvd-1.14.4_1)
	* audio/gstreamer1-plugins-ogg (gstreamer1-plugins-ogg-1.14.4)
	* multimedia/gstreamer1-plugins-dvdread (gstreamer1-plugins-dvdread-1.14.4_1)
	* multimedia/gstreamer1-plugins-good (gstreamer1-plugins-good-1.14.4)
	* graphics/gstreamer1-plugins-png (gstreamer1-plugins-png-1.14.4)
	* multimedia/gstreamer1-plugins-vpx (gstreamer1-plugins-vpx-1.14.4_3)
	* audio/gstreamer1-plugins-mpg123 (gstreamer1-plugins-mpg123-1.14.4)
	* audio/gstreamer1-plugins-vorbis (gstreamer1-plugins-vorbis-1.14.4)
	* devel/gstreamer1-plugins-soup (gstreamer1-plugins-soup-1.14.4)
	* www/webkit2-gtk3 (webkit2-gtk3-2.26.2)
	* audio/gstreamer1-plugins-a52dec (gstreamer1-plugins-a52dec-1.14.4)
	* multimedia/gstreamer1-plugins-v4l2 (gstreamer1-plugins-v4l2-1.14.4)
	* graphics/gstreamer1-plugins-jpeg (gstreamer1-plugins-jpeg-1.14.4)
	* multimedia/gstreamer1-plugins-dts (gstreamer1-plugins-dts-1.14.4)
	! japanese/mozc-tool (ja-mozc-tool-2.23.2815.102.00_5)	(unknown build error)
	* japanese/uim-mozc (ja-uim-mozc-2.23.2815.102.00_5)
	* x11-toolkits/gstreamer1-plugins-pango (gstreamer1-plugins-pango-1.14.4)
	* audio/gstreamer1-plugins-chromaprint (gstreamer1-plugins-chromaprint-1.14.4)
	! www/chromium (chromium-78.0.3904.108_1)	(unknown build error)
	* sysutils/tracker-miners (tracker-miners-2.0.5_10)
	* deskutils/xfce4-tumbler (xfce4-tumbler-0.2.8)
	* multimedia/gstreamer1-libav (gstreamer1-libav-1.14.4_3)
	* multimedia/gstreamer1-plugins-core (gstreamer1-plugins-core-1.14)
	* x11-fm/thunar (thunar-1.8.11)
teetime! 2020年 2月 4日 火曜日 14時24分15秒 JST

あまりにも色々出ているが..

まず gstreamer1-plugins-1.16.2 conflicts with gstreamer1-plugins-bad-1.14.4 については、/usr/ports/UPDATING を見ると、解消方法が載っていた。

20200126:
  AFFECTS: users of multimedia/gstreamer1-plugins[-bad]
  AUTHOR: kwm@freebsd.org

  In GStreamer 1.16 some files moved from the gstreamer1-plugins-bad package
  to the gstreamer1-plugins package.

  If your using a tool like portmaster or portupgrade delete the old -bad
  port and then follow the normal upgrade method.
  # pkg delete -f gstreamer1-plugins-bad

書かれているコマンドを実行してみる。

% sudo pkg delete -f gstreamer1-plugins-bad
〜
Updating database digests format: 100%
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 1 packages (of 0 packages in the universe):

Installed packages to be REMOVED:
	gstreamer1-plugins-bad-1.14.4

Number of packages to be removed: 1

The operation will free 5 MiB.

Proceed with deinstalling packages? [y/N]: y
〜

mozc-tool については、以下を実行してみる。 (他の FreeBSD-12.1 の環境でも同じ現象が起きていた)

% pkg info | egrep gyp
py27-gyp-20160504              Build System That Generates Other Build Systems

% sudo pkg delete py27-gyp
〜
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 1 packages (of 0 packages in the universe):

Installed packages to be REMOVED:
	py27-gyp-20160504

Number of packages to be removed: 1

The operation will free 3 MiB.

Proceed with deinstalling packages? [y/N]: y
〜

chromium については.. またしてもビルド中に仮想メモリが不足したのだろうか.. うーむ。

この状態で今一度 sh pvc.sh -w を実行してみる。

% nice +20 sh pvc.sh -w
+ cd /var/tmp/log/pvc
+ nice teetime -t pvc sh ../updatefb/portversion-c.out -s -w
conflicting pvc20200204.log
logging (from the next line till the end) to pvc2020020414.log
teetime! 2020年 2月 4日 火曜日 14時44分27秒 JST
teetime! working directory is /var/tmp/log/pvc
teetime> sh ../updatefb/portversion-c.out -s -w
[Reading data from pkg(8) ... - 1264 packages found - done]
〜

.. どうも top コマンドの様子から、swap (4096MB) を使い果たし、しかも X11 の画面が止まったり、コンソールを切り替える (Alt + F1〜9 あるいは Ctrl + Alt + F1〜9) ことも出来ないし、調子が悪くなってしまった。 (隣から SSH ログインは出来る)
/var/log/messages.0.bz2 にも以下のように出ていた。 (/var/log/messages はちょうど turned over した所)

〜
Feb  4 15:29:28 fb121 kernel: swap_pager_getswapspace(24): failed
Feb  4 15:29:28 fb121 syslogd: last message repeated 1 times
Feb  4 15:29:28 fb121 kernel: swap_pager_getswapspace(32): failed
Feb  4 15:29:28 fb121 kernel: swap_pager_getswapspace(24): failed
Feb  4 15:29:28 fb121 kernel: swap_pager_getswapspace(32): failed
Feb  4 15:29:28 fb121 kernel: swap_pager_getswapspace(24): failed
Feb  4 15:29:28 fb121 syslogd: last message repeated 1 times
Feb  4 16:00:00 fb121 newsyslog[21149]: logfile turned over due to size>1000K

ACPI シャットダウンして、メインメモリーの設定を 8000 MB からさらに 12000 MB に増やして、起動した。 (swap も増やすべき気もするが)

12000MB

そうして、今一度 sh pvc.sh -w をやり直した。

% cd /var/tmp/log

% nice +20 sh pvc.sh -w
+ cd /var/tmp/log/pvc
+ nice teetime -t pvc sh ../updatefb/portversion-c.out -s -w
conflicting pvc20200204.log
logging (from the next line till the end) to pvc2020020416.log
teetime! 2020年 2月 4日 火曜日 16時20分13秒 JST
teetime! working directory is /var/tmp/log/pvc
teetime> sh ../updatefb/portversion-c.out -s -w
〜
teetime! 2020年 2月 4日 火曜日 16時23分19秒 JST

おおっ、最後まで通った!?

以降は一日一回のペースで bup コマンド (前述だがホームディレクトリのバックアップと freebsd-update fetch と portupgrade) を実行することにする。
なお、先ほどのように freebsd-update fetch で何か出たなら、さらに freebsd-update install を実行し、必要なら FreeBSD を再起動しないといけない。

● Emacs のフォントサイズがちょうどいい大きさにならないのを対処

細かい話だが、Emacs を、ちょうどいいフォントサイズに設定した時に、いわゆる半角文字といわゆる全角文字を、1:2 の割合で表示してくれない。 (Emacs のバグだろうか?)

以下のキャプチャは、表示は揃っているのだが、フォントのサイズがちょっと大きい。

Emacs 96DPI big

Shift + マウス左クリック → Decrease Buffer Text Size で、サイズを 1段小さくしてみる。 これだと、サイズは少し小さくなるが、表示が揃わなくなった。

Emacs 96DPI not good

さらにサイズを小さくすると、相変わらず表示が揃っていない。

Emacs 96DPI not good again

さらにサイズを小さくすると、相も変わらず表示が揃っていない。

Emacs 96DPI not good again and again

さらにサイズを小さくすると、表示はやっと揃ったが、サイズが小さすぎる。

Emacs 96DPI too small

以前までかなり困っていたのだが、ある時、この Emacs の法則は、どういうわけか X11 の DPI の設定に影響されるようで、X11 側の DPI を変えると Emacs の組み合わせが変わることを発見した。

現在の X11 の DPI は、xdpyinfo コマンドを実行すると resolution として表示される。

% xdpyinfo
name of display:    :0
〜
default screen number:    0
number of screens:    1

screen #0:
  dimensions:    1920x1080 pixels (508x286 millimeters)
  resolution:    96x96 dots per inch
〜

旧環境 (TigerVNC を使っていた) では、xrandr コマンドで DPI を変えられたのだが、新環境 (VirtualBox で直 X11 を使っているから?) では出来なくなったようだ。

% xrandr --dpi 75
xrandr: Failed to get size of gamma for output default

% xdpyinfo
name of display:    :0
〜
default screen number:    0
number of screens:    1

screen #0:
  dimensions:    1920x1080 pixels (508x286 millimeters)
  resolution:    96x96 dots per inch
〜

Xfce の場合、Xfce が DPI の設定を上書きしているようでもある。
そして Xfce では、「アプリケーション」→「設定」→「外観」→「フォント」に DPI の設定があることを、以下で知った。

How to change DPI, not just for fonts (make everything bigger) / Desktop / Xfce Forums

Xfce's DPI setting

例えばこれを 75 DPI にするという手もあるのだが、筆者の新 PC では 75 DPI にすると、Xfce の他の表示等も、小さくなりすぎてしまった。 そこで、大きい方にずらしてみる。
というより、Emacs を起動したまま、Xfce でこの DPI の設定をずらしていくと、Emacs で使用するフォント (大きさだけでなくフォントそのもの) まで変化してしまうようだが.. Emacs を起動し直すと元に戻る (Emacs 側で設定したフォントに戻る) ようだ。

DPI の設定を 97〜99 まで変えた所では、表示の揃いに変化は現れなかったが、100 にした所で変化が現れ、元のフォントサイズでは、表示が揃わなくなった

Emacs 100DPI not good

この状態から、フォントを 1段小さくしてみると、表示が揃った。

Emacs 100DPI good

このサイズを Emacs で使うことにする。

筆者は普段 Emacs でメニューバーを非表示にしているので、まず M-x menu-bar-mode でメニューバーを表示し..

Emacs Menu-Bar mode enabled

Options → Set Default Font... から、「梅ゴシック Regular」を選び、「サイズ」を何にすれば良いか実はよく分からなかったのだが 10 にしておいて、「選択」を押し..

Emacs Pick a font

Options → Save Options を行って、試しに新しく Emacs を起動してみると、狙った通りのフォントとサイズで表示できた。

Emacs new setting

Xfce で DPI を変更しても、xdpyinfo では元のまま? しかし Emacs には伝わる??

% xdpyinfo
name of display:    :0
〜
default screen number:    0
number of screens:    1

screen #0:
  dimensions:    1920x1080 pixels (508x286 millimeters)
  resolution:    96x96 dots per inch
〜

● ico をインストールする

X11 サーバやその周りの性能によって速さが変わる。

% cd /var/tmp/log/Install/

% nice teetime -t ico portinstall -s ico
conflicting ico20200206.log
logging (from the next line till the end) to ico2020020609.log
teetime! 2020年 2月 6日 木曜日 09時56分01秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s ico
〜
teetime! 2020年 2月 6日 木曜日 09時56分18秒 JST

実行してみた所。 こんなもんか?

% ico &

ico

ico(1) (man ico) には見当たらないが、ico -h などとすると、-threads number という実行オプションがあることが分かる。 これをやると、スレッド毎にウィンドウが開かれる。 (昔マルチスレッドが一般的でなかった 1990年代中頃にマルチ CPU の LUNA-88K2 で、リリースされたばかりの X11R6 をソースからビルドしてやったことがある。)

以下のようにして 8 スレッドを指示してみた所、

% ico -threads 8 &

ico window x8

ps で見ると、ico のプロセスは 1個しかないが..

% ps x | egrep ico
81435  0  I     4:22.33 ico -threads 8
81472 13  R+    0:00.00 egrep ico

top コマンドを実行し、さらに「H」を押すと、各論理 CPU (「C」の列) にそれなりにスレッドが分散されていることが分かる。

ico 8 threads and top

● xbatt をインストールする

新 PC でバッテリ駆動でビルドを走らせていた所 (fb121 ではなく論理 CPU 2個の別の仮想マシン)、1時間と少しでバッテリが残り 20分まで減ってしまい、新 PC はバッテリの大きさが心もとない..

xbatt の前に apm コマンドを実行してみた所、この PC と VirtualBox では APM でバッテリのステータスが取れるようだ。

% apm
APM version: 1.2
APM Management: Disabled
AC Line status: on-line
Battery Status: high
Remaining battery life: 100%
Remaining battery time: unknown
Number of batteries: 1
Battery 0:
	Battery Status: high
	Remaining battery life: 100%
	Remaining battery time: unknown

% pkg search xbatt
xbatt-1.2.1_4                  Laptop battery status display for X11

% cd /var/tmp/log/Install

% nice teetime -t xbatt portinstall -s xbatt
logging (from the next line till the end) to xbatt20200207.log
teetime! 2020年 2月 7日 金曜日 10時20分10秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s xbatt
〜
teetime! 2020年 2月 7日 金曜日 10時20分20秒 JST

起動してみた所。

xbatt

● BSDstats をインストール・実行する

% pkg search bsdstat
bsdstats-6.0_2                 Monthly script for reporting anonymous statistics about your machine

% cd /var/tmp/log/Install

% nice teetime -t bsdstats portinstall -s bsdstats
logging (from the next line till the end) to bsdstats20200206.log
teetime! 2020年 2月 6日 木曜日 11時06分55秒 JST
teetime! working directory is /var/tmp/log/Install
teetime%gt; portinstall -s bsdstats
〜
Installing bsdstats-6.0_2...
BSDstats runs on this system for the first time, generating registration ID
Posting OS statistics to rpt.bsdstats.org (through proxy) ... SUCCESS
Posting device statistics to rpt.bsdstats.org (through proxy) ... SUCCESS
Posting CPU information to rpt.bsdstats.org (through proxy) ... SUCCESS
Posting port statistics to rpt.bsdstats.org (through proxy) ... SUCCESS

If you're installing BSDstats on a system that won't always be on, such as a
desktop or a laptop, it is recommended that you enable it in /etc/rc.conf so
that it will run on bootup. This will ensure that, even if your computer is
off when "monthly" runs, your computer will be counted properly.

You installed BSDstats: script reporting statistics about your machine

To disable monthly reporting, add this line to /etc/periodic.conf:
	monthly_statistics_enable="NO"

To disable parts of reporting, add these lines to /etc/periodic.conf:
	monthly_statistics_report_devices="NO"
	monthly_statistics_report_ports="NO"

To enable reporting on bootup, add this line to /etc/rc.conf:
	bsdstats_enable="YES"

To run it manually any time:
	bsdstats-send

To view current statistics, go to:
	http://www.bsdstats.org/

You can build bsdstats with TOR port option to submit anonymously

--->  [Executing a command as root: sudo /usr/bin/script -qa /tmp/portinstall20200206-3220-murpkr env make clean]
===>  Cleaning for bsdstats-6.0_2
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
teetime! 2020年 2月 6日 木曜日 11時07分49秒 JST

ビルド・インストールすると、BSDstats の初回実行 (おそらく bsdstats-send コマンド) も自動的に行われた。 筆者の環境では http_proxy 環境変数等に従ってプロキシ経由で動作した。

また、以下の行が自動的に /etc/rc.conf の末尾に追記されていた。

bsdstats_enable="YES"

これはブート時に自動的に bsdstats-send コマンドを実行するものだが、ただし筆者の環境ではブート時に http_proxy 環境変数等が設定できていないので、正常に動作しない。

筆者は、思い出した時 (月始め等) に sudo bsdstats-send を実行している。

これを実行すると、 *BSD Usage Statistics: Home で表示される (BSDstats で報告された各 BSD の稼働台数やシェア等が表示される)、世界中の *BSD の統計情報に追加される。

● IDE を SATA にしてみる (2020-02-26 追記)

またしても VirtualBox 自体が落ちた (あれから何回も落ちている).. orz

VirtualBox error

今度は、ホスト側の VirtualBox VMs/fb121/Logs/VBox.log.* ファイル (ファイル名は仮想マシンを起動するたびにずれていく) を見てみると、以下のような行が見えた。

〜
161:52:52.784379 
161:52:52.784380 !!Assertion Failed!!
161:52:52.784380 Expression: ReqType == ATA_AIO_RESET_ASSERTED || ReqType == ATA_AIO_RESET_CLEARED || ReqType == ATA_AIO_ABORT || pCtl->uAsyncIOState == ReqType
161:52:52.784381 Location  : F:\tinderbox\win-rel\src\VBox\Devices\Storage\DevATA.cpp(5842) int __cdecl ataR3AsyncIOThread(struct RTTHREADINT *,void *)
161:52:52.784393 Stack     :
〜
161:52:52.786441 Thread ID:   0000000000002648
161:52:52.786445 Thread name: ATA-0
161:52:52.786448 Thread IPRT: 0000000004ef7fb0
〜
161:53:22.668501 PIIX3 ATA: Ctl#0: RESET, DevSel=0 AIOIf=0 CmdIf0=0xc8 (-1 usec ago) CmdIf1=0x00 (-1 usec ago)
161:53:22.873566 PIIX3 ATA LUN#0: Async I/O thread probably stuck in operation, interrupting
161:53:35.400643 PIIX3 ATA LUN#0: Async I/O thread probably stuck in operation, interrupting
161:53:47.994640 PIIX3 ATA LUN#0: Async I/O thread probably stuck in operation, interrupting
〜

以前落ちたときの VBox.log.* ファイルも、同様に ATA の文字列を含む Assertion になっていた。
現在、メインの仮想ディスクが IDE になっているが、これのバグだろうか??

そこで、仮想ディスクを SATA にすることを試みる。

設定のストレージから、「コントローラー: IDE」を、右クリックから「コントローラーを除去」を選択する。
次に、ダイアログの下の方の「◆」に「+」を押し、「AHCI(SATA)」を選択する。
そうすると現れる、「コントローラー: AHCI」の、右の方の「■」に「+」のようなもの (「ハードディスクの追加」) を押し、fb121.vdi を選択して、「選択」を押す。

AHCI (SATA)

忘れずに「OK」押す。

そうして fb121 を起動する。 すると、FreeBSD の読み込みが始まるまでに、体感 30秒〜1分ほど待たされるようになってしまったが、一応無事に起動した。
起動してディスクもちゃんと見えるのは、FreeBSD の場合、IDE から SATA に変更した場合は、同じ ada〜 で見えるので、/etc/fstab を修正しなくても、一応そのままでいける。

以前 (IDE) はこうだった。 (/var/log/messages より)

〜
Feb 26 09:16:38 fb121 kernel: ada0 at ata0 bus 0 scbus0 target 0 lun 0
Feb 26 09:16:38 fb121 kernel: ada0: <VBOX HARDDISK 1.0> ATA-6 device
Feb 26 09:16:38 fb121 kernel: ada0: Serial Number VBdb7d0ddf-bb51bef1
Feb 26 09:16:38 fb121 kernel: ada0: 33.300MB/s transfers (UDMA2, PIO 65536bytes)
Feb 26 09:16:38 fb121 kernel: ada0: 32768MB (67108864 512 byte sectors)
〜
Feb 26 09:16:38 fb121 kernel: Trying to mount root from ufs:/dev/ada0p2 [rw]...
〜

それがこうなった (SATA)。

〜
Feb 26 09:44:23 fb121 kernel: ada0 at ahcich0 bus 0 scbus0 target 0 lun 0
Feb 26 09:44:23 fb121 kernel: ada0: <VBOX HARDDISK 1.0> ATA-6 SATA 2.x device
Feb 26 09:44:23 fb121 kernel: ada0: Serial Number VBdb7d0ddf-bb51bef1
Feb 26 09:44:23 fb121 kernel: ada0: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes)
Feb 26 09:44:23 fb121 kernel: ada0: Command Queueing enabled
Feb 26 09:44:23 fb121 kernel: ada0: 32768MB (67108864 512 byte sectors)
〜
Feb 26 09:44:23 fb121 kernel: Trying to mount root from ufs:/dev/ada0p2 [rw]...
〜

(2020-05-08 追記)

(以下はこれを書くだいぶ以前にやったのでメニューについてはよく憶えていない)

「体感 30秒〜1分ほど待たされるようになってしまった」について、起動する時に F2 か Delete キーのどちらかで、起動順序を変更するようなメニューが出て、それで変更すると、カウントダウンを 5秒にまで短縮することが出来た。

● moused の有効化など (2020-05-08 追記)

前述の通り、定期的に portupgrade を実行しているが、あるとき、Xorg が更新された影響か、X11 のマウスクリックが一切効かないようになってしまった!

% ls -ltr /usr/local/bin
〜
-rwxr-xr-x    1 root  wheel      2350288  5月  6 22:37 Xorg*
-r-sr-xr-x    1 root  wheel        15264  5月  6 22:37 Xorg.wrap*
lrwxr-xr-x    1 root  wheel            9  5月  6 22:37 X@ -> Xorg.wrap
〜

今度こそ、直 X11 を諦めて VNC にするしかないかと思ったが、情報により、moused を有効にすると、正常に復帰した。
以下を /etc/rc.conf に追記し、sudo /etc/rc.d/moused start を実行してから、startx したら正常に作動した。

moused_enable="YES"	# Run the mouse daemon.

実はこの以前から、これもおそらく portupgrade の影響だが、VirtualBox の「マウス統合」機能が正しく作動しなくなり、またタッチパッドの三本指タップによる「マウスの中央ボタン」までも作動しなくなり、ストレスを感じていた。 これも元通りに作動するようになり (これについては moused を有効化する以前に Xorg が更新されたときから作動するようになっていた)、操作性が向上した、というより元通りになった。

なお三本指タップ (マウスの中央ボタン) によるペーストについては、厳密には効果が違うが、rxvt-unicode (urxvt) の場合は、マウスで範囲選択後 Ctrl-Alt-c でコピー、及び Shift-Insert でペースト出来ることが分かり、これと Emacs でのコピーや Ctrl-y でのペーストなどと併用して、あまりストレスを感じないようにはなっていた。

● スリープについて (2020-05-08 追記)

VirtualBox 上の FreeBSD を作動させたまま、ホスト側 (MS-Windows 10) をスリープして、復帰すると、以降 FreeBSD の時計が、数秒〜数分のオーダーでずれるようになってしまう。 VBoxService が作動していてもである。
MS-Windows 8.1 のときはそんなことはなかったのだが..
VBoxService --disable-timesync して、代わりに ntpd による時刻同期も試みたが、改善しなかった。
これは、同じ PC 上の VirtualBox で FreeBSD 9.3 も動かしているのだが、そちらはほとんどずれず、FreeBSD 12.1 や 11.3 ではずれる。 よって少なくとも 9.3 から 11.3 の間で、ダメになってしまったのだと思われる..

これを、少し面倒だが、回避する手順を発見した。 それは、スリープする前に、VirtualBox の FreeBSD を必ず「閉じる」→「保存状態」で保存するようにし、スリープから復帰したときにはまた「起動」で保存状態から復帰させるというものである。
これで時計がずれずに過ごせるようになった。

● /usr/local をシンボリックリンクでなくす (2020-09-09 追記)

上の方で /usr/local を /zfs/local へのシンボリックリンクとしていたが、ports のビルドに問題が出ることがあることが分かった。 (以下を参照)

FreeBSD (12.1) ports のビルドが pkg-static: Unable to access file 〜: No such file or directory などで失敗する覚書

(上の方で Firefox のビルドが失敗したのもこれではないかと思う)

そこで、/usr/local を、シンボリックリンクでなくす。 また、ここまで来たら、/usr/ports もシンボリックリンクでなくしてしまおうと思う。

それを実現するには、上の方で zfs/nsmrtks を zfs create 時に -o mountpoint=/home/nsmrtks を指定して /home/nsmrtks にマウントしていたが、これは後から zfs set mountpoint=〜 で設定することも出来る。 そこで同様に /usr/local と /usr/ports の mountpoint も設定する。

現在、df で見ると、以下のようになっている。

% df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
〜
zfs/ports      4.2G    216M    4.0G     5%    /zfs/ports
〜
zfs/local      9.6G    5.7G    4.0G    59%    /zfs/local
〜

さて、この時点で、ログインして /usr/local を使用中であったので、/usr/local を使用しなくなるレベルまで、X11 他のプログラムを終了させたりする..

そうしたら、/usr/local と /usr/ports のシンボリックリンクを削除する。

% cd /usr

% ls -ld local ports
lrwxr-xr-x  1 root  wheel  10  1月 15  2020 local -> /zfs/local
lrwxr-xr-x  1 root  wheel  10  1月 15  2020 ports -> /zfs/ports

% sudo rm -i local ports
〜

% unsetenv LANG

% ls -ld local ports
ls: local: No such file or directory
ls: ports: No such file or directory

ここで zfs get mountpoint を見ると、以下のようである。

% zfs get mountpoint
NAME         PROPERTY    VALUE          SOURCE
zfs          mountpoint  /zfs           default
zfs/local    mountpoint  /zfs/local     default
zfs/nsmrtks  mountpoint  /home/nsmrtks  local
zfs/ports    mountpoint  /zfs/ports     default

では、まず /usr/local をマウントする..

% sudo zfs set mountpoint=/usr/loal zfs/local
sudo: Command not found.

おっと。

% su
Password:〜

root@fb121:/usr # zfs set mountpoint=/usr/local zfs/local
cannot unmount '/zfs/local': Device busy

うーん..

root@fb121:/usr # ps ax | egrep local
 1000  -  Ss       0:26.39 /usr/local/bin/dbus-daemon --system
 1006  -  Is       1:32.00 /usr/local/sbin/VBoxService
 1018  -  S        0:43.13 /usr/local/sbin/console-kit-daemon --no-daemon
 1056  -  I        0:00.58 /usr/local/lib/polkit-1/polkitd --no-debug
 1066  -  Ss       0:09.65 /usr/local/sbin/nmbd --daemon --configfile=/usr/local/etc/smb4.conf
 1070  -  Is       0:24.40 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf
 1425  -  S        0:00.86 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf
 1426  -  S        0:00.76 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf
 1427  -  I        0:00.52 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf
 1655  -  Ss       1:32.06 /usr/local/sbin/hald
 1882  -  I        0:47.47 /usr/local/libexec/upowerd
 1934  -  S        0:13.19 /usr/local/libexec/accounts-daemon
18290  0  S+       0:00.00 egrep local

ちょっと面倒になってきたので、シャットダウン→起動して、シングルユーザモードに入ってみたが.. シングルユーザモードでは ZFS が見えていなかった。

そのままマルチユーザモードに入って、root でログインして、ps コマンドで見たら、/usr/local を使っているプロセスはいなかった。 さっき /usr/local のシンボリックリンクを削除したんだから当たり前か..

さて、今度こそ /usr/local と /usr/ports をマウントする。

root@fb121:~ # zfs set mountpoint=/usr/local zfs/local

root@fb121:~ # zfs set mountpoint=/usr/ports zfs/ports

root@fb121:~ # zfs get mountpoint
NAME         PROPERTY    VALUE          SOURCE
zfs          mountpoint  /zfs           default
zfs/local    mountpoint  /usr/local     local
zfs/nsmrtks  mountpoint  /home/nsmrtks  local
zfs/ports    mountpoint  /usr/ports     local

root@fb121:~ # df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
〜
zfs/local      9.6G    5.6G    4.0G    58%    /usr/local
zfs/ports      4.2G    216M    4.0G     5%    /usr/ports

もう一度シャットダウン→起動すると、これで /usr/local と /usr/ports が元通り使えるようになった状態で、システムが起動した。

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

以上


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