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

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

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

booted

無事に起動した。 ふー。

● FreeBSD を最新に更新

root でログイン。

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

root@fb120:~ # uname -a
FreeBSD fb120.magic.or 12.0-RELEASE FreeBSD 12.0-RELEASE r341666 GENERIC  amd64

freebsd-update fetch を実行する。

ここで筆者の環境では都合により、環境変数 http_proxy の設定が必要であった。

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

root@fb120:~ # 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.0-RELEASE from update2.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 1898 patches.....10....20....30....40....50....60....70....80....90....100....110....120....130....140....150....160...
.170....180....190....200....210....220....230....240....250....260....270....280....290....300....310....320....330....340....3
50....360....370....380....390....400....410....420....430....440....450....460....470....480....490....500....510....520....530
....540....550....560....570....580....590....600....610....620....630....640....650....660....670....680....690....700....710..
..720....730....740....750....760....770....780....790....800....810....820....830....840....850....860....870....880....890....
900....910....920....930....940....950....960....970....980....990....1000....1010....1020....1030....1040....1050....1060....10
70....1080....1090....1100....1110....1120....1130....1140....1150....1160....1170....1180....1190....1200....1210....1220....12
30....1240....1250....1260....1270....1280....1290....1300....1310....1320....1330....1340....1350....1360....1370....1380....13
90....1400....1410....1420....1430....1440....1450....1460....1470....1480....1490....1500....1510....1520....1530....1540....15
50....1560....1570....1580....1590....1600....1610....1620....1630....1640....1650....1660....1670....1680....1690....1700....17
10....1720....1730....1740....1750....1760....1770....1780....1790....1800....1810....1820....1830....1840....1850....1860....18
70....1880....1890.... done.
Applying patches... done.
Fetching 59 files... done.
〜
The following files will be removed as part of updating to 12.0-RELEASE-p10:
〜
The following files will be added as part of updating to 12.0-RELEASE-p10:
〜
The following files will be updated as part of updating to 12.0-RELEASE-p10:
〜

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

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

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

root@fb120:~ # shutdown -p now

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

root@fb120:~ # uname -a
FreeBSD fb120.magic.or 12.0-RELEASE-p10 FreeBSD 12.0-RELEASE-p10 GENERIC  amd64

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

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

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

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

ここで、em2 に与えた 192.168.56.120 などという固定 IPv4 アドレスは、em2 には VirtualBox の DHCP サーバがいたが、そのアドレス範囲とは重複していない。

DHCP

● /tmp を Memory Disk に設定

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

root@fb120:~ # cd /tmp

root@fb120:/tmp # ls -lA
total 16
drwxrwxrwt  2 root  wheel  512 Sep  5 11:35 .ICE-unix
drwxrwxrwt  2 root  wheel  512 Sep  5 11:35 .X11-unix
drwxrwxrwt  2 root  wheel  512 Sep  5 11:35 .XIM-unix
drwxrwxrwt  2 root  wheel  512 Sep  5 11:35 .font-unix

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

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

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

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

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

次に

root@fb120:/ # 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@fb120:~ # 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:d6:f6:d6
	inet6 fe80::a00:27ff:fed6:f6d6%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:53:7d:19
	inet6 fe80::a00:27ff:fe53:7d19%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:4f:66:eb
	inet 192.168.56.120 netmask 0xffffff00 broadcast 192.168.56.255 
	inet6 fe80::a00:27ff:fe4f:66eb%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:26:90:9b
	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@fb120:~ # 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    541M    2.1G    20%    /var
tmpfs          512M    4.0K    512M     0%    /tmp

root@fb120:~ # ls -al /tmp
total 4
drwxrwxrwt   6 root  wheel   256 Sep  6 09:38 .
drwxr-xr-x  19 root  wheel  1024 Sep  6 09:38 ..
drwxrwxrwt   2 root  wheel     0 Sep  6 09:38 .ICE-unix
drwxrwxrwt   2 root  wheel     0 Sep  6 09:38 .X11-unix
drwxrwxrwt   2 root  wheel     0 Sep  6 09:38 .XIM-unix
drwxrwxrwt   2 root  wheel     0 Sep  6 09:38 .font-unix

● ports を導入

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

まず portsnap fetch を実行する。

root@fb120:~ # 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 Fri Sep  6 09:12:45 JST 2019:
〜
Extracting snapshot... done.
Verifying snapshot integrity... done.
Fetching snapshot tag from ec2-ap-northeast-1.portsnap.freebsd.org... done.
Latest snapshot on server matches what we already have.
No updates needed.

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

root@fb120:~ # ls /usr
bin	home	include	lib	lib32	libdata	libexec	local	obj	sbin	share	src	tests

root@fb120:~ # portsnap extract
〜

root@fb120:~ # cd /usr

root@fb120:/usr # ls -ld ports
drwxr-xr-x  69 root  wheel  1536 Sep  6 10:07 ports

● ZFS を設定する

順番が逆になってしまった。 先にこっちをやるべきだった。

まずは、/usr/ports と、/usr/local を、ZFS 上に置くことにする。

root@fb120:/usr # df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ada0p2    4.8G    3.9G    552M    88%    /
devfs          1.0K    1.0K      0B   100%    /dev
/dev/ada0p4    2.9G    706M    2.0G    26%    /var
tmpfs          512M    4.0K    512M     0%    /tmp

root@fb120:/usr # 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)

上記に見えるように、ZFS 用に用意したパーティションが ada0p5 であることを確認した。

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

root@fb120:/usr # 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@fb120:/usr # zfs create zfs/ports

root@fb120:/usr # zfs set compression=lz4 zfs/ports

root@fb120:/usr # zfs create zfs/local

root@fb120:/usr # zfs set compression=lz4 zfs/local

root@fb120:/usr # df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ada0p2    4.8G    3.9G    552M    88%    /
devfs          1.0K    1.0K      0B   100%    /dev
/dev/ada0p4    2.9G    706M    2.0G    26%    /var
tmpfs          512M    4.0K    512M     0%    /tmp
zfs             17G     23K     17G     0%    /zfs
zfs/ports       17G     23K     17G     0%    /zfs/ports
zfs/local       17G     23K     17G     0%    /zfs/local

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

root@fb120:/usr # egrep zfs_enable /etc/defaults/rc.conf >> /etc/rc.conf

root@fb120:/usr # vi /etc/rc.conf

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

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

/usr/local が zfs を向くようにする。

zfs set 時に -o mountpoint=〜 でマウントポイントを指定する方法もあるのだが、もし zfs import したくなったときにややこしくなるので、何らかの理由でそうする必要がない限り、自分はあまり好みではないのだが、以降を参照。
root@fb120:/usr # rmdir local

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

/usr/ports も zfs を向けるようにするのだが、(作業の順番を間違えたので) 先に内容をコピーしないといけない。

root@fb120:/usr # cd ports

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

root@fb120:/usr/ports # pax -rw . /zfs/ports/

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

root@fb120:/usr/ports # cd /usr

root@fb120:/usr # rm -fr ports

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

root@fb120:/usr # ls -ld /zfs/ports
drwxr-xr-x  69 root  wheel  86 Sep  6 10:07 /zfs/ports

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

root@fb120:/usr # ls -ld /zfs/ports
drwxr-xr-x  69 nsmrtks  wheel  86 Sep  6 10:07 /zfs/ports

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

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

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

root@fb120:/usr # zfs get compressratio
NAME       PROPERTY       VALUE  SOURCE
zfs        compressratio  2.51x  -
zfs/local  compressratio  1.00x  -
zfs/ports  compressratio  2.51x  -

ここで作業時間の都合により一旦シャットダウン・電源 OFF した。

再び起動すると、ZFS が自動的にマウントされるが、やはり先ほどのように ZFS NOTICE: Prefetch is disabled by default if less than 4GB of RAM is present; 〜 のメッセージが出る。

筆者は少なくとも最低限必要推奨なメモリを確保の上 prefetch を有効にしたいので、VirtualBox で割り当てるメモリーサイズを増やすことにする。
シャットダウン・電源 OFF し、VirtualBox の設定でメモリーサイズを増やすのだが、かといってホスト側の負担も考えてあまりこれ以上増やしたくないというのもあるので、1MB 単位で変えられるようなので、面倒だがメモリーサイズを少し変えては起動そしてシャットダウン・電源 OFF を繰り返し、先ほどのメッセージが出なくなるギリギリに調整する。 今回の場合、そのサイズは 4135MB であった。 (FreeBSD のバージョンが上がるたびに微増する傾向がある。 11.2 の頃は 4131MB でいけていた。)

memory size

● sudo をインストールする

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

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

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

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

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

ports option dialog

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

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

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

root@fb120:~ # visudo

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

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

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

root@fb120:~ # diff -u /usr/local/etc/sudoers.dist /usr/local/etc/sudoers
--- /usr/local/etc/sudoers.dist	2019-09-09 12:21:57.484772000 +0900
+++ /usr/local/etc/sudoers	2019-09-09 17:59:48.294881000 +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"
+# 2019-09-09 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
 
+# 2019-09-09 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
+# 2019-09-09 nsmrtks
 
 ## Same thing without a password
 # %wheel ALL=(ALL) NOPASSWD: ALL

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

nsmrtks@fb120:~ % 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:パスワード↵
/usr/home/nsmrtks

● キーボード設定の変更

これは全く筆者の都合によるものだが、ここで使用する物理キーボードが、日本語配列から、US 配列に変更になった。
そのままだと VirtualBox の FreeBSD コンソールの操作に不都合が生じたので、/etc/rc.conf にあった keymap="jp.kbd" の行をコメントアウトし、再起動した。

#keymap="jp.kbd"

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

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

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

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

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

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

distfiles old

いったん旧環境をシャットダウン・電源 OFF する。 新環境 (fb120) もシャットダウン・電源 OFF する。
次に、先ほどの distfiles.vdi を右クリックして、「割り当てを除去」を選択する。

detached

割り当ては除去されたが、仮想ディスク自体は、以下のように仮想メディアマネージャーを見ても分かる通り、残っている。
ところが、「プロパティ」を表示させ、「情報」の「割り当て」の所を見ると、旧環境 (fb111) に割り当たったままになっている。 後述するが、後で手順をやり直す羽目になった..

distfiles

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

storage

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

SAS added

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

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

attach virtual disk

「既存のディスクを選択」を押したら、distfiles.vdi ファイルを選択する。

virtual disk attached

忘れずに「OK」押す。

..これでいけたと思ったが、再び「仮想メディアマネージャー」を見ると、distfiles.vdi が、旧環境 (fb111) と、新環境 (fb120) の、両方に割り当たっているという、気持ち悪い状態になってしまった。

そこで、仮想メディアマネージャーにて、(distfiles.vdi を選択した状態で) 「解放」を押してみると..

kaiho

..ダイアログが出るので「解放」を押すと..

miwariate

何の警告もなく、distfiles.vdi が「未割り当て」になった。!?

reverted

先ほど新環境 (fb120) の SAS に追加した distfiles.vdi が再びなくなってしまった。

再度、仮想ハードディスクを追加する手順をやり直した..

attach virtual disk again

遠回りしたが、あらためて「仮想メディアマネージャー」で見ても、これで正常になった。

wariate

もしかして、旧環境で実行した「割り当てを除去」の手順も必要なくて、いきなり仮想メディアマネージャから「解放」すればよかったのかもしれない。

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

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

ディレクトリの作成やシンボリックリンクの作成と、/etc/fstab の編集を行う。

nsmrtks@fb120:~ % sudo mkdir /distfiles
〜

nsmrtks@fb120:~ % sudo chown nsmrtks /distfiles

nsmrtks@fb120:~ % gpart show da0
=>      40  33554352  da0  GPT  (16G)
        40  33554352    1  freebsd-ufs  (16G)

nsmrtks@fb120:~ % sudoedit /etc/fstab

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

# 2019-09-13 nsmrtks
/dev/da0p1	/distfiles	ufs	rw	2	2

さらに作業を続ける..
これも作業の順番を間違えてしまったが、sudo をビルドしたときに /usr/ports/distfiles にいくつかファイルが取得されてしまったのでその移動も行っている。

nsmrtks@fb120:~ % cd /usr/ports/

nsmrtks@fb120:/usr/ports % mv -i distfiles distfiles.bak

nsmrtks@fb120:/usr/ports % ln -s /distfiles

nsmrtks@fb120:/usr/ports % sudo mount /distfiles

nsmrtks@fb120:/usr/ports % sudo chown nsmrtks distfiles.bak

nsmrtks@fb120:/usr/ports % sudo chown nsmrtks distfiles.bak/*

nsmrtks@fb120:/usr/ports % mv -i distfiles.bak/* distfiles/
overwrite distfiles/dialog4ports-0.1.6.tar.gz? (y/n [n]) y↵
overwrite distfiles/freebsd-pkg-1.11.1_GH0.tar.gz? (y/n [n]) y↵
overwrite distfiles/gettext-0.20.1.tar.xz? (y/n [n]) y↵
overwrite distfiles/sudo-1.8.27.tar.gz? (y/n [n]) y↵

nsmrtks@fb120:/usr/ports % rmdir distfiles.bak

nsmrtks@fb120:/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    707M    2.0G    26%    /var
zfs             17G     23K     17G     0%    /zfs
zfs/local       17G     19M     17G     0%    /zfs/local
zfs/ports       17G    363M     17G     2%    /zfs/ports
tmpfs          512M    4.0K    512M     0%    /tmp
/dev/da0p1      15G     12G    1.9G    87%    /distfiles

nsmrtks@fb120:/usr/ports % ls -ld /usr/ports/distfiles
lrwxr-xr-x  1 nsmrtks  wheel  10 Sep 13 11:59 /usr/ports/distfiles -> /distfiles

● NFS サーバを設定する

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

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

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

また、そのために、/etc/hosts への追記を行う。 そこでまずは /etc/hosts を編集する。
ここで、同じホスト上の VirtualBox の仮想マシンどうしは、「ホストオンリーアダプター」を通して通信できる。 それは、 仮想マシンの作成 時に「アダプター3」として割り当てており、FreeBSD からは em2 として見えている。

nsmrtks@fb120:~ % ifconfig em2
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:4f:66:eb
	inet 192.168.56.120 netmask 0xffffff00 broadcast 192.168.56.255 
	inet6 fe80::a00:27ff:fe4f:66eb%em2 prefixlen 64 scopeid 0x3 
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>

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

#
# 2019-09-17 nsmrtks
fe80::a00:27ff:fe4f:66eb%em2		fb120.magic.or	fb120	fb120v6	fb120c
# 2017-09-27 nsmrtks
fe80::a00:27ff:fea3:3469%em2		fb111.magic.or	fb111	fb111v6	fb111c
# 2016-05-22 nsmrtks
fe80::a00:27ff:fed2:1b07%em2		fb103.magic.or	fb103	fb103v6	fb103c
# 2016-05-08 nsmrtks
fe80::a00:27ff:fe1f:3f4e%em2		fb101.magic.or	fb101	fb101v6	fb101c
# 2016-05-22 nsmrtks
fe80::a00:27ff:fe07:b6d8%em2		fb093.magic.or	fb093	fb093v6	fb093c
192.168.56.93							fb093v4

ここで、IPv6 アドレスを使用している。 FreeBSD の NFS は IPv6 で通信可能である。 (fb093v4 というホスト名のみ IPv4 アドレスになっている)
また、各 IPv6 アドレスに %em2 が付いているが、これは IPv6 のリンクローカルアドレスを使用している。 一応これで通信可能で、また /etc/hosts もこの書式を受け付ける。
自ホスト fb120 等も記述しておいた。

旧環境が立ち上がっていれば ping6 できる。

nsmrtks@fb120:~ % ping6 fb111c
PING6(56=40+8+8 bytes) fe80::a00:27ff:fe4f:66eb%em2 --> fe80::a00:27ff:fea3:3469%em2
16 bytes from fe80::a00:27ff:fea3:3469%em2, icmp_seq=0 hlim=64 time=0.452 ms
16 bytes from fe80::a00:27ff:fea3:3469%em2, icmp_seq=1 hlim=64 time=0.990 ms
^C
--- fb111.magic.or ping6 statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 0.452/0.721/0.9912/01(日).269 ms

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

# 2019-09-18 nsmrtks

V4: /zfs

/distfiles	fb111c fb103c fb101c fb093c

# EoF

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

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

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

nsmrtks@fb120:~ % sudo -i
〜

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

root@fb120:~ # exit
logout

nsmrtks@fb120:~ % sudoedit /etc/rc.conf

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

# 2019-09-18 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 / は不要かもしれない)

nsmrtks@fb120:~ % cd /

nsmrtks@fb120:/ % sudo /etc/rc.d/nfsd start
〜
Starting nfsd.

nsmrtks@fb120:/ % showmount -e
Exports list on localhost:

nsmrtks@fb120:/ % sudo killall -HUP mountd

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

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

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

〜
#/dev/da0p1	/zfs/distfiles	ufs	rw,late	2	2
# 2019-09-10
# 2019-09-19
fb120c:/distfiles	/zfs/distfiles	nfs	rw,nfsv4

ここで少し悩ましいことが起きた

.. fb111 から fb120 の /distfiles をマウントしようとしても..

% sudo mount /zfs/distfiles
mount_nfs: nmount: /zfs/distfiles: No such file or directory
1で終了しました

..マウントできない。

ここで、fb111 の /etc/fstab から nfsv4 を外すと..

fb120c:/distfiles	/zfs/distfiles	nfs	rw

..マウントできるようになる。 しかしそうすると NFSv4 でなくなってしまうだろう。 (それでもいいのだが..)

% sudo mount /zfs/distfiles

% df -h
Filesystem            Size    Used   Avail Capacity  Mounted on
〜
fb120c:/distfiles      15G     12G    1.9G    87%    /zfs/distfiles

% mount
〜
fb120c:/distfiles on /zfs/distfiles (nfs)

fb120 にて /zfs/distfiles -> /distfiles というシンボリックリンクを作成したりもしてみたが、意図通りにならなかった。

fb120 にて distfiles を /zfs の下にマウントする手もあるのだが、それは過去に、起動時に /zfs/distfiles が自動的にエクスポートできず、再起動のたびに sudo killall -HUP mountd を実行する (!) という手間がかかったりした。

どうも /zfs を NFSv4 tree root にするという作戦が良くないように思える。
なぜ /zfs を NFSv4 tree root にしているかというと、実はホームディレクトリも /zfs の下に置いてエクスポートしようと思っているからだった。

試行錯誤の上に、以下のようにした。 (作業の順番の記憶が少しあやふやである)

/distfiles を /home 以下に移動した。
/etc/fstab も、/home/distfiles をマウントするように変更し、そしてマウントし直した。

〜
# 2019-09-13,20 nsmrtks
/dev/da0p1	/home/distfiles	ufs	rw	2	2

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

/etc/exports について、NFSv4 tree root を /zfs でなく /home に変更し、/distfiles についても /home/distfiles にする。 sudo killall -HUP mountd も実行する。

# 2019-09-18,20 nsmrtks

V4: /home

/home/distfiles	fb111c fb103c fb101c fb093c

# EoF

以下は、root でログインし直して実行している。

root@fb120:~ # cd /

root@fb120:/ # ls -ld home
lrwxr-xr-x  1 root  wheel  8 Aug 30 18:04 home -> usr/home

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

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

root@fb120:/ # ls home
distfiles	local		nsmrtks		ports

root@fb120:/ # df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
〜
/dev/da0p1      15G     12G    1.9G    87%    /usr/home/distfiles

root@fb120:/ # umount /usr/home/distfiles

root@fb120:/ # mount /home/distfiles

root@fb120:/ # df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
〜
/dev/da0p1      15G     12G    1.9G    87%    /home/distfiles

root@fb120:/ # showmount -e
Exports list on localhost:
/home/distfiles                    fb111.magic.or fb103.magic.or fb101.magic.or fb093.magic.or 

念のため再起動した。

そうしたら、fb111 から fb120c:/distfiles がマウントでき、ファイルも見えるようになった。

〜

% sudo mount /zfs/distfiles

% df -h
Filesystem            Size    Used   Avail Capacity  Mounted on
〜
fb120c:/distfiles      15G     12G    3.2G    80%    /zfs/distfiles

% mount
〜
fb120c:/distfiles on /zfs/distfiles (nfs)

% ls -l /zfs/distfiles/ | head
total 7967928
-rw-r--r--   1 nsmrtks  wheel          1273  2月 27  2015 0001-Remove-pure-attribute-from-functions-with-side-effec.patch
-rw-r--r--   1 nsmrtks  wheel        218971  7月 17  2018 01org-libva-2.2.0_GH0.tar.gz
-rw-r--r--   1 nsmrtks  wheel           939  4月 24 10:02 0bd101cecc5458a8463b8d672bf1745c3cbb7c02.patch
-rw-r--r--   1 nsmrtks  wheel          1144  3月 28 12:11 0c83efa.patch
-rw-r--r--   1 root     wheel          1001  2月 14  2018 18675a51fca2.patch
-rw-r--r--   1 nsmrtks  wheel           627  7月 12  2018 20a318d06aca.patch
-rw-r--r--   1 root     wheel          1744  3月  6  2019 21c8be385b3f.patch
-rw-r--r--   1 nsmrtks  wheel          1114  7月 12  2018 2aae617a84f4.patch
-rw-r--r--   1 nsmrtks  wheel          2927  5月 13 10:14 31ab7e09a3b5

% head /zfs/distfiles/0001-Remove-pure-attribute-from-functions-with-side-effec.atch 
From 765c6134f3d47edac98818015ab6a1cbd1aa8d06 Mon Sep 17 00:00:00 2001
From: Mark Harris <mark.hsj@gmail.com>
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(-)

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

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

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

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

root@fb120:~ # cd /home

root@fb120:/home # ls
distfiles	local		nsmrtks		ports

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

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

root@fb120:/home # 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    708M    2.0G    26%    /var
/dev/da0p1      15G     13G    1.5G    90%    /home/distfiles
zfs             17G     23K     17G     0%    /zfs
zfs/local       17G     19M     17G     0%    /zfs/local
zfs/ports       17G    363M     17G     2%    /zfs/ports
tmpfs          512M    4.0K    512M     0%    /tmp
zfs/nsmrtks     17G     23K     17G     0%    /home/nsmrtks

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

root@fb120:/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@fb120:/home # ls /home
distfiles	local		nsmrtks		nsmrtks.bak	ports

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

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

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

root@fb120:~ # 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

root@fb120:~ # zfs set sharenfs='fb111c fb103c fb101c fb093c' zfs/nsmrtks

root@fb120:~ # 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

root@fb120:~ # 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 

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

root@fb120:~ # ls -ld /home/nsmrtks
drwxr-xr-x  2 root  wheel  2 Sep 25 10:27 /home/nsmrtks

root@fb120:~ # chown nsmrtks:nsmrtks /home/nsmrtks

root@fb120:~ # ls -ld /home/nsmrtks
drwxr-xr-x  2 nsmrtks  nsmrtks  2 Sep 25 10:27 /home/nsmrtks

root@fb120:~ # ls -l /home
total 69
drwxr-xr-x  51 nsmrtks  wheel    55296 Sep 24 18:58 distfiles
drwxr-xr-x   2 root     wheel      512 Sep 20 11:19 local
drwxr-xr-x   2 nsmrtks  nsmrtks      2 Sep 25 10:27 nsmrtks
drwxr-xr-x   3 nsmrtks  nsmrtks    512 Sep 25 10:18 nsmrtks.bak
drwxr-xr-x   2 root     wheel      512 Sep 20 11:19 ports

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

NFSv4 tree root の関係で、fb120c:/nsmrtks という指定では、あるいはさらにいうと fb120c:/distfiles と指定した場合も、-o nfsv4 を付けないとマウントできなかった。 このことからも、ちゃんと NFSv4 を使用してマウントできていることがあらためて確かめられた。

(fb111 側の操作)

% sudo mount -o nfsv4 fb120c:/nsmrtks /mnt
〜

% echo from fb111 > /mnt/shared.txt

(fb120 側の操作)

root@fb120:~ # ls -l /home/nsmrtks
total 1
-rw-r--r--  1 nsmrtks  nsmrtks  11 Sep 25 10:56 shared.txt

root@fb120:~ # cat /home/nsmrtks/shared.txt
from fb111

root@fb120:~ # rm -i /home/nsmrtks/shared.txt
remove /home/nsmrtks/shared.txt? y

あとは、fb111 にあるホームディレクトリを fb120 にコピーする。 (NFS を使ってコピーすることにする)

% cd

% date ; rsync -a --del . /mnt/ ; date
2019年 9月25日 水曜日 11時13分14秒 JST
2019年 9月25日 水曜日 12時35分19秒 JST

最後に、残りを全てコピーを終える。
ここで、念の為と思ってシングルユーザーモード (shutdown now) でコピーしようとしたが..

NFS のため、root ユーザーではコピーできないので、sudo -u 〜 を使用している。

# cd /home/nsmrtks

# sudo -u nsmrtks rsync -nav --del . /mnt/
〜

# sudo -u nsmrtks rsync -av --del . /mnt/
〜
No name and/or group mapping for uid,gid:(65534,1039)
〜

.. NFSv4 の nfsuserd までいなくなってしまったようなので、そこから exit してマルチユーザーモードに戻して行った。

# exit
〜

# sudo -u nsmrtks rsync -av --del . /mnt/
〜

# sudo -u nsmrtks rsync -av --del . /mnt/
〜

コピーするものが無事になくなったようなので、旧環境はホームディレクトリを新環境のものを NFS マウントするように切り換えた。

また、新環境を一般ユーザー (nsmrtks) でログインし直すと、ホームディレクトリが旧環境からコピーしてきたものに切り替わっているので、これまでの ~/.tcshrc 等もろもろがそのまま使えるようになった。

● /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

# 2019-07-31,08-23 nsmrtks
DEFAULT_VERSIONS+= python=3.7

# EoF

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

その下の 〜 python=3.7 は、これも筆者の環境に特有の設定である。 現時点で FreeBSD の Python のデフォルトは 3.6 のようだが、仕事の都合で 3.7 を使わないとうまくいかない。 そのため ports で、Python 関連については、3.7 をビルド/インストールするようにする設定である。
このように、Python 3.7 環境を手に入れるには、pkg でバイナリをインストールするのではなく ports でソースからコンパイルしないといけなさそうである。

● teetime!

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

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

● portupgrade をインストールする

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

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

% cd /usr/ports/*/portupgrade

% pwd
/zfs/ports/ports-mgmt/portupgrade

% nice teetime -t install make install
touch: install20190927.log: Permission denied
Cannot touch, exiting.
1で終了しました

% ls -ld
drwxr-xr-x  2 root  wheel  6  9月  6 10:06 ./

.. おや?
/usr/ports 以下のオーナーを変更するのを忘れていただろうか。

% cd /usr/ports

% ls -l
〜

% sudo chown -R nsmrtks .

その後も、実は make.conf をホームディレクトリに置いたまま /etc/ にコピーするのを忘れていてやり直したりした後、

〜

% cd /usr/ports/*/portupgrade

% nice teetime -t install make install
conflicting install20190927.log
logging (from the next line till the end) to install2019092710.log
teetime! 2019年 9月27日 金曜日 10時51分44秒 JST
teetime! working directory is /zfs/ports/ports-mgmt/portupgrade
teetime> make install
〜

mkdir: /zfs/ports/distfiles: No such file or directory
*** 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! 2019年 9月27日 金曜日 10時51分50秒 JST

.. おやっ?
/usr/ports/distfiles を /home/distfiles に向け直すのを忘れていた..

% ls -ld /usr/ports
lrwxr-xr-x  1 root  wheel  10  9月 20 12:01 /usr/ports -> /zfs/ports

%  ls -ld /usr/ports/distfiles
lrwxr-xr-x  1 nsmrtks  wheel  10  9月 13 11:59 /usr/ports/distfiles -> /distfiles

以下のように直し..

% cd /usr/ports

% ls -ld distfiles
lrwxr-xr-x  1 nsmrtks  wheel  10  9月 13 11:59 distfiles -> /distfiles

% rm -i distfiles
remove distfiles? y

% ln -s /home/distfiles

もう一度ビルド。

% cd -

% pwd
/zfs/ports/ports-mgmt/portupgrade

% nice teetime -t install make install
conflicting install20190927.log
conflicting install2019092710.log
logging (from the next line till the end) to install201909271052.log
teetime! 2019年 9月27日 金曜日 10時52分57秒 JST
teetime! working directory is /zfs/ports/ports-mgmt/portupgrade
teetime> make install
〜
===>  Installing for portupgrade-2.4.16,2
===>  Checking if portupgrade is already installed
===>  Switching to root credentials for 'install' target
===>   Registering installation for portupgrade-2.4.16,2
Installing portupgrade-2.4.16,2...
===>  Returning to user credentials
teetime! 2019年 9月27日 金曜日 11時14分08秒 JST

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

● lockd を有効にする

少し流れからそれるが、(ホームディレクトリが NFS となった) 旧環境の Emacs で、mozc による漢字変換が失敗するようになった。

NFS のせいかどうか分からないが、新環境と旧環境の双方で、/etc/rc.conf に以下を追記し、

# 2019-09-27 nsmrtks
rpc_lockd_enable="YES"		# Run NFS rpc.lockd needed for client/server.

双方で以下のように lockd を起動し (rpc_lockd_enable に対応するのが /etc/rc.d/lockd だというのが分かりにくいが /etc/rc.d にて rpc_lockd_enable を egrep して判断した)、

% sudo /etc/rc.d/lockd start
〜

そうすると旧環境の Emacs でこれまで通り mozc で漢字変換できるようになった。 これが原因だったのだろうか?

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

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

また、/var/tmp/log/Install というディレクトリを作成し、そこにログを残していくことにする。 これについては、pkg でインストールする場合も役に立つと思う。

% cd /var/tmp

% mkdir log

% cd log

% mkdir Install

% cd Install

% nice teetime -t xorg portinstall -s xorg
logging (from the next line till the end) to xorg20190930.log
teetime! 2019年 9月30日 月曜日 09時33分02秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s xorg
〜
===>   mesa-dri-18.3.2_4 depends on file: /usr/local/bin/python2.7 - found
===>   Returning to build of mesa-dri-18.3.2_4
===>   mesa-dri-18.3.2_4 depends on package: llvm80>=3.9.0_4 - not found
===>  llvm80-8.0.1_2 needs Python 3.6 at least, but 2.7 was specified.
*** Error code 1

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

Stop.
make[3]: stopped in /zfs/ports/graphics/mesa-dri
*** Error code 1

Stop.
make[2]: stopped in /usr/ports/graphics/mesa-dri
*** Error code 1

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

Stop.
make: stopped in /zfs/ports/x11/xorg
** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portinstall20190930-1940-w13tw1 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)
	! x11/xorg	(install error)
teetime! 2019年 9月30日 月曜日 09時45分40秒 JST

何だ!? llvm80 の所でエラーになってしまった。 llvm80 を単独でビルドしたらいけるだろうか? (以前 llvm90 で同様のことがあった)

% nice teetime -t llvm80_ portinstall -s llvm80
logging (from the next line till the end) to llvm80_20190930.log
teetime! 2019年 9月30日 月曜日 09時50分26秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s llvm80
〜
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
teetime! 2019年 9月30日 月曜日 14時57分11秒 JST

いけたようだ。(何故これでいけるのかは分からないが..)

xorg のビルドに戻る。 (先ほどまでの xorg 関連のビルド物を clean せず活かすよう、portinstall のオプションに -w を付加する。)

% nice teetime -t xorg portinstall -sw xorg
conflicting xorg20190930.log
logging (from the next line till the end) to xorg2019093015.log
teetime! 2019年 9月30日 月曜日 15時07分58秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -sw xorg
〜
===>   libdrm-2.4.99,1 depends on executable: meson - not found
===>  meson-0.51.2 needs Python 3.5 at least, but 2.7 was specified.
*** Error code 1

Stop.
make[6]: stopped in /usr/ports/devel/meson
*** Error code 1

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

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

Stop.
make[3]: stopped in /zfs/ports/graphics/mesa-dri
*** Error code 1

Stop.
make[2]: stopped in /usr/ports/graphics/mesa-dri
*** Error code 1

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

Stop.
make: stopped in /zfs/ports/x11/xorg
** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portinstall20190930-41554-1pot0ec 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)
	! x11/xorg	(unknown build error)
teetime! 2019年 9月30日 月曜日 15時19分24秒 JST

今度は meson の所で同様にエラーになってしまった。 先ほどと同様に対処してみる..

% nice teetime -t meson portinstall -s meson
logging (from the next line till the end) to meson20190930.log
teetime! 2019年 9月30日 月曜日 15時19分46秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s meson
〜
===>  Cleaning for meson-0.51.2
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
teetime! 2019年 9月30日 月曜日 15時20分09秒 JST

同様にいけた.. 再び xorg のビルドに戻って..

% nice teetime -t xorg portinstall -sw xorg
conflicting xorg20190930.log
conflicting xorg2019093015.log
logging (from the next line till the end) to xorg201909301525.log
teetime! 2019年 9月30日 月曜日 15時25分33秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -sw xorg
〜
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
teetime! 2019年 9月30日 月曜日 16時16分13秒 JST

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

実は筆者は、旧環境までは、GUI を VNC で運用しており、VirtualBox 上の FreeBSD で、普通の X サーバーであまり運用したことがなかった。 (ないわけではない)
早速起動してみるとどうなるか。 (~/.xinitrc ファイルは置いていない)

% cd

% rehash

% where startx
/usr/local/bin/startx

% startx
xauth:  file /home/nsmrtks/.serverauth.49282 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.0-RELEASE-p10 amd64 
Current Operating System: FreeBSD fb120.magic.or 12.0-RELEASE-p10 FreeBSD 12.0-RELEASE-p10 GENERIC amd64
Build Date: 30 September 2019  04:11:27PM
 
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: Mon Sep 30 16:22:41 2019
(==) Using default built-in configuration (39 lines)
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.0.log を見てみると.. 以下のようにエラー (EE) になっている行が見つかった。

[ 47612.804] 
X.Org X Server 1.18.4
Release Date: 2016-07-19
[ 47612.804] X Protocol Version 11, Revision 0
[ 47612.804] Build Operating System: FreeBSD 12.0-RELEASE-p10 amd64 
[ 47612.804] Current Operating System: FreeBSD fb120.magic.or 12.0-RELEASE-p10 FreeBSD 12.0-RELEASE-p10 GENERIC amd64
[ 47612.804] Build Date: 30 September 2019  04:11:27PM
〜
[ 47612.813] (II) LoadModule: "vboxvideo"
[ 47612.814] (WW) Warning, couldn't open module vboxvideo
[ 47612.814] (II) UnloadModule: "vboxvideo"
[ 47612.814] (II) Unloading vboxvideo
[ 47612.814] (EE) Failed to load module "vboxvideo" (module does not exist, 0)
〜

vboxvideo というのがインストールが必要なのだろうか。 そうだとしてどうやってインストールできるのだろうか。
探してみると、それは virtualbox-ose-additions に含まれているように見える。

(旧環境で実行)

% locate vboxvideo
/usr/local/lib/xorg/modules/drivers/vboxvideo_drv.so
/usr/ports/emulators/virtualbox-ose/files/patch-src_VBox_Additions_x11_vboxvideo_Makefile.kmk
/usr/ports/emulators/virtualbox-ose-additions/files/vboxvideo.conf

(新環境で実行)

% find /usr/ports/ -name \*vboxvideo\* -print
/usr/ports/emulators/virtualbox-ose-additions/files/vboxvideo.conf
/usr/ports/emulators/virtualbox-ose/files/patch-src_VBox_Additions_x11_vboxvideo_Makefile.kmk

ここまで来て、virtualbox-ose-additions を未だインストールしていなかった。 それを先にインストールした方がよかった。

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

virtualbox-ose-additions をインストールしていないと、ホストをサスペンド/レジュームするたびに、VirtualBox ゲストの時計が遅れていったりしてしまうが、実はここまで毎回そのたびに ntpdate で手動で時計を合わせていたのである。

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

% cd /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_20190930.log
teetime! 2019年 9月30日 月曜日 16時53分12秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s virtualbox-ose-additions
〜
途中 VirtualBox ホストのサスペンド/レジュームを挟む..

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

OPENGL

〜
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
teetime! 2019年 10月 1日 火曜日 10時59分21秒 JST

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

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

# 2019-10-01 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 がロードされていた。

% kldstat
Id Refs Address                Size Name
 1   18 0xffffffff80200000  243d228 kernel
 2    1 0xffffffff82b11000   247e20 zfs.ko
 3    1 0xffffffff82d59000     7628 opensolaris.ko
 4    1 0xffffffff82d61000    2eec3 vboxguest.ko
 5    1 0xffffffff82d90000     2678 intpm.ko
 6    1 0xffffffff82d93000      b10 smbus.ko
 7    1 0xffffffff82d94000     81f0 tmpfs.ko

しかし..

% ps ax | egrep -i box
1196  0  S+   0:00.00 egrep -i box

VBoxService などが起動しているはずだが、いない。 orz

実は旧環境 (FreeBSD 11.2) でも、最近同じ現象が起きていたのだ。 (当初は大丈夫だったのだが portupgrade するうちにそうなった)

ホストをサスペンド/レジュームするたびに、ntpdate を手動で実行しないとならないのだろうか.. orz

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

気を取り直して、この状態で startx を実行すると、起動できるだろうか。

800x600

ここで、VirtualBox はフルスクリーンモードで表示させており、そのサイズは 1366x768 である。 (また VirtualBox のツールバーのようなものが当初下に表示されていたが上に移動させている)

今度は、無事に X11 が起動した。 ただ、xdpyinfo でも見た所、どうも 800x600 で起動してしまったようだ。

xrandr を引数なしで実行した所、どうやら 1366x768 にも出来るようだ。 (昔は VirtualBox のフルスクリーンモードと同じサイズ (当時は 1366x768 でなかったかもしれない) にできなくて VNC にしたような記憶があるが曖昧)

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

xrandr -s 1366x768

画面をいっぱいに広げることが出来た。 ただ、(twm で) ウィンドウを画面の右の方に持っていこうとしても、画面右数センチメートルを残して、それ以上右に行かないという現象が見られた。 画面下の方に持っていくときも同様の現象になるようだ。 xrandr と twm の相性が悪いのだろうか??

ところでもう一つ、VMware や VirtualBox や VNC で X11 を使う時に、筆者にとっては大きな問題となるのが、筆者は MS-Windows 環境で Alt + Tab キーの組み合わせを酷使するのだが、これが MS-Windows でなく VNC 等の側に捕捉されてしまい、MS-Windows で使えないということがよくある。
VirtualBox では、Alt + Tab キーが、通常は MS-Windows 側に捕捉され、「ホストキー」 (デフォルトは右 Ctrl キー) を押すと VirtualBox 側に捕捉されるようだ。 (もう一度「ホストキー」を押すと元に戻る)
ただ、「通常」の状態で Alt + Tab キーを押した時に、VirtualBox 側に、変な文字が入力されてしまう。 これは以前からそうだった。

変な文字

惜しいのだが、今回も VNC で運用することになるだろうか。 どうしようか。

その後も、色々調べたり試したり考えたりしたのだが、以下には少し情報があった。

FreeBSD 10.0にVirtualBox-Guest Additionsを入れて使う - Qiita
21.5. FreeBSD as a Guest on VirtualBox™

変な文字が入る問題は別として、xorg.conf でマウスに vboxmouse を指定するのがいいらしい。 その際、xorg.conf を生成するのに Xorg -configure を用いた方がいいだろう。

だが、VBoxService がフルに起動しないという致命的な問題もあり(後述)、やはり (今回も) VNC で行こうかと思った。

● 続・VBoxService

ところで、何とか VBoxService (/usr/local/sbin/VBoxService) が起動できないものか。 sudo /usr/local/etc/rc.d/vboxservice start をあらためて実行しても、VBoxService が起動したようなメッセージが出ているのに ps で見ると起動していないわけだが、verbose スイッチのようなものはないかと思って、VBoxService --help を実行したら出てくるメッセージを見て..

% VBoxService --help
Usage:
 VBoxService  [-f|--foreground] [-v|--verbose] [-l|--logfile <file>]
              [-p|--pidfile <file>] [-i|--interval <seconds>]
              [--disable-<service>] [--enable-<service>]
              [--only-<service>] [-h|-?|--help]
              [--control-interval <ms>]
              [--timesync-interval <ms>] [--timesync-min-adjust <ms>]
              [--timesync-latency-factor <x>] [--timesync-max-latency <ms>]
              [--timesync-set-threshold <ms>] [--timesync-set-start]
              [--timesync-set-on-restore|--timesync-no-set-on-restore]
              [--timesync-verbosity <level>]
              [--vminfo-interval <ms>] [--vminfo-user-idle-threshold <ms>]

Options:
    -i | --interval         The default interval.
    -f | --foreground       Don
    't daemonize the program. For debugging.
    -l | --logfile <file>   Enables logging to a file.
    -p | --pidfile <file>   Write the process ID to a file.
    -v | --verbose          Increment the verbosity level. For debugging.
    -V | --version          Show version information.
    -h | -? | --help        Show this message and exit with status 1.

Service-specific options:
〜

VBoxService に -v と -f を指定してみた所で、以下のようなものが出た。

% VBoxService -v -f
VBoxService 5.2.32 r132056 (verbosity: 1) freebsd.amd64 (Oct  1 2019 10:55:33) release log
00:00:00.000092 main     Log opened 2019-10-03T01:11:56.209466000Z
00:00:00.000155 main     OS Product: FreeBSD
00:00:00.000166 main     OS Release: 12.0-RELEASE-p10
00:00:00.000176 main     OS Version: FreeBSD 12.0-RELEASE-p10 GENERIC
00:00:00.000183 main     Executable: /zfs/local/sbin/VBoxService
00:00:00.000186 main     Process ID: 3718
00:00:00.000189 main     Package type: BSD_64BITS_GENERIC (OSE)
00:00:00.002611 main     5.2.32 r132056 started. Verbose level = 1
00:00:00.003097 main     Warning! Feature reporing failed: VERR_INVALID_PARAMETER
00:00:00.003130 main     Error: Service 'control' failed to initialize: VERR_INVALID_PARAMETER
00:00:00.003196 main     Session 0 is about to close ...
00:00:00.003210 main     Stopping all guest processes ...
00:00:00.003219 main     0 guest processes were signalled to stop
00:00:00.003226 main     Closing all guest files ...
00:00:00.003450 main     Ended.
1で終了しました

これに対し、VBoxService --help のメッセージをいまいちど見てみると..

% VBoxService --help
〜
Service-specific options:
    --enable-control        Enables the control service. (default)
    --disable-control       Disables the control service.
    --only-control          Only enables the control service.
    --control-interval      Specifies the interval at which to check for
                            new control commands. The default is 1000 ms.
    --enable-timesync       Enables the timesync service. (default)
〜

どうやら VBoxService には 「the control service」 というものがあって、且つ、それは enable (デフォルト) したり disable したり出来るもののようだ。
あと、それは「the timesync service」とはまた別になっているようだ。

それでは --disable-control を付けるとどうなるか?

% sudo VBoxService --disable-control
〜
VBoxService 5.2.32 r132056 (verbosity: 0) freebsd.amd64 (Oct  1 2019 10:55:33) release log
00:00:00.000093 main     Log opened 2019-10-03T01:13:35.187356000Z
00:00:00.000161 main     OS Product: FreeBSD
00:00:00.000172 main     OS Release: 12.0-RELEASE-p10
00:00:00.000182 main     OS Version: FreeBSD 12.0-RELEASE-p10 GENERIC
00:00:00.000188 main     Executable: /zfs/local/sbin/VBoxService
00:00:00.000191 main     Process ID: 3723
00:00:00.000194 main     Package type: BSD_64BITS_GENERIC (OSE)
00:00:00.002856 main     5.2.32 r132056 started. Verbose level = 0

% ps ax | egrep -i box
3724  -  Ss      0:00.01 VBoxService --disable-control
3727  0  S+      0:00.00 egrep -i box

今度は VBoxService が起動した!

本当は the control service が有効になった方が良いのだろうが、どうしても解決方法が分かっていない。
そこで --disable-control で急場をしのぐことにしてみる。

/usr/local/etc/rc.d/vboxservice から --disable-control を指定しないといけないのだが、試行錯誤した所、とりあえず start_cmd という変数を使うと、コマンドラインパラメータも指定できるようだ。
command="/usr/local/sbin/VBoxService" と書いてある行の直下に、以下を挿入した。

# 2019-10-03 nsmrtks
start_cmd="${command} --disable-control"

これで sudo /usr/local/sbin/VBoxService start で VBoxService を起動した状態で、夜にホストをサスペンドし、翌朝にレジュームした所、時計がずれていないことを確認した。

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

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

FreeBSD や NetBSD では、IPv6 のリンクローカルアドレス (IPv6 ルーターがなくても自動的に割り当てられるが同一ネットワーク内でしか通信できない) で NFS が通信できたが、これが Ubuntu GNU/Linux 相手だとどうしてもうまくいかなかった。 しかし当職場には未だ IPv6 環境が来ていない。
このような場合、リンクローカルアドレスよりもよりしっかりした IPv6 アドレスとして、ユニークローカルアドレス (ULA) を用いるのがいいようだ。

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

筆者の環境の ULA は、fd39:8b7f:067e::/48 というものである。 これを em2 (VirtualBox のネットワークの設定で 「ホストオンリーアダプター」 になっており他の VirtualBox の仮想マシンと通信できる) に割り当てるのだが、その際 16 ビットの「サブネットID」として 1 を用いることにする。 (0 でなくて 1 なのは、0 は em1 で従来より用いていたりしたため。)
ここまでで IPv6 の 128 ビットのアドレスのうち上位 64 ビットまでで、残り 64 ビットは、(em2 の) MAC (イーサネット) アドレスから算出した EUI-64 でよいはずだ。
あらためて以下を参照することにする。

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

em2 の MAC アドレスは、ifconfig で知ることが出来る。

% ifconfig
〜
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:4f:66:eb
	inet 192.168.56.120 netmask 0xffffff00 broadcast 192.168.56.255 
	inet6 fe80::a00:27ff:fe4f:66eb%em2 prefixlen 64 scopeid 0x3 
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
〜

08:00:27:4f:66:eb の EUI-64 は 0a 00 27 ff fe 4f 66 eb である。
が、実は em2 の IPv6 リンクローカルアドレスを見れば同じ値なので分かったりする。

これらから、fd39:8b7f:067e:1:a00:27ff:fe4f:66eb という IPv6 アドレスが得られた。

これを、まずは /etc/rc.conf に設定する。 ifconfig_em2 の所を以下のように変更した。

#ifconfig_em2_ipv6="inet6 accept_rtadv"
# 2019-10-03 nsmrtks
ifconfig_em2_ipv6="inet6 fd39:8b7f:067e:1:a00:27ff:fe4f:66eb prefixlen 64"

また、/etc/hosts と、相手ホストの /etc/hosts にも、エントリを追加する。 自ホスト (fb120) の /etc/hosts の fb120 に関するエントリは以下のようになった。

# 2019-09-17,10-03 nsmrtks
fe80::a00:27ff:fe4f:66eb%em2		fb120.magic.or	fb120	fb120v6	fb120c
fd39:8b7f:067e:1:a00:27ff:fe4f:66eb	fb120.magic.or	fb120	fb120v6	fb120c

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

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

% ifconfig
〜
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:4f:66:eb
	inet 192.168.56.120 netmask 0xffffff00 broadcast 192.168.56.255 
	inet6 fe80::a00:27ff:fe4f:66eb%em2 prefixlen 64 scopeid 0x3 
	inet6 fd39:8b7f:67e:1:a00:27ff:fe4f:66eb prefixlen 64 
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
〜

そして、Ubuntu GNU/Linux 仮想マシン (ホスト名 ul164) から ホームディレクトリ (zfs/nsmrtks) を NFS マウントできるように、zfs の sharenfs を設定し直した。

% 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) マウントでき、ファイルも読み書きできることを確認した。

● VNC (サーバ) をインストールする

tigervnc-server を用いることとする。 (以前は tightvnc というのも使っていたのだが X11 的に古くて支障が出た)

% ls -ld /usr/ports/*/*vnc*
〜
drwxr-xr-x  3 nsmrtks  wheel        8  9月  6 10:05 /usr/ports/net/tigervnc-server
drwxr-xr-x  2 nsmrtks  wheel        5  9月  6 10:05 /usr/ports/net/tigervnc-viewer
drwxr-xr-x  3 nsmrtks  wheel        7  9月  6 10:05 /usr/ports/net/tightvnc
〜

% cd /var/tmp/log/Install

% nice teetime -t tigervnc-server_ portinstall -s tigervnc-server
logging (from the next line till the end) to tigervnc-server_20191004.log
teetime! 2019年 10月 4日 金曜日 12時10分26秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s tigervnc-server
[Reading data from pkg(8) ... - 283 packages found - done]
〜
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
teetime! 2019年 10月 4日 金曜日 12時49分41秒 JST

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

起動してみる。 VNC をフルスクリーンで使用するために -geometry 〜 を指定している。 (DPI も指定しているつもりだが.. 後述)
なお初回起動だとパスワードの設定を求められるだろう。 (筆者は設定済のホームディレクトリを旧環境からコピーしてきている)

% vncserver -geometry 1366x768 -dpi 75

New 'fb120.magic.or:1 (nsmrtks)' desktop is fb120.magic.or:1

Starting applications specified in /home/nsmrtks/.vnc/xstartup
Log file is /home/nsmrtks/.vnc/fb120.magic.or:1.log

この VNC サーバーには、とりあえず em2 の IPv4 アドレス (192.168.56.120) と、ディスプレイ番号「1」を指定すると (vncserver からのメッセージにも表示されている)、Windows 側から接続することが出来る。
ちなみに VNC ビュアー (クライアント) は RealVNC を用いている。

VNC Viewer connecting

自分は ~/.vnc/xstartup を自分で記述していたので、それに沿った内容で表示された。 さもなくば、デフォルトの設定で表示されるだろう。

VNC Viewer

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

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

% cd /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_20191007.log
teetime! 2019年 10月 7日 月曜日 13時09分52秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s ja-font-ume
[Reading data from pkg(8) ... - 295 packages found - done]
--->  [Executing a command as root: sudo /usr/bin/touch /var/db/pkgdb.fixme]
〜
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
teetime! 2019年 10月 7日 月曜日 13時10分08秒 JST

● Emacs をインストールする

% cd /var/tmp/log/Install/

% nice teetime -t emacs portinstall -s emacs
logging (from the next line till the end) to emacs20191007.log
teetime! 2019年 10月 7日 月曜日 13時14分30秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s emacs
[Reading data from pkg(8) ... - 296 packages found - done]
--->  [Executing a command as root: sudo /usr/bin/touch /var/db/pkgdb.fixme]
〜
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
teetime! 2019年 10月 7日 月曜日 17時52分09秒 JST
PC の負荷の都合により途中でダイアログ入力待ちの状態で長時間止めていたため時間が余分にかかっている。

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

起動してみた所。

Emacs

なお、Emacs で梅フォントを用いる設定は、以前 Emacs のメニューバーから設定しホームディレクトリ下のファイルに保存していた。

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

xterm の代わりに用いる。

% cd /var/tmp/log/Install/

% ls -ld /usr/ports/*/rxvt-*
-rw-r--r--  1 nsmrtks  wheel  931198  1月 24  2016 /usr/ports/distfiles/rxvt-unicode-9.22.tar.bz2
drwxr-xr-x  3 nsmrtks  wheel       7  9月  6 10:07 /usr/ports/x11/rxvt-unicode

% nice teetime -t rxvt-unicode_ portinstall -s rxvt-unicode
logging (from the next line till the end) to rxvt-unicode_20191008.log
teetime! 2019年 10月 8日 火曜日 10時05分35秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s rxvt-unicode
[Reading data from pkg(8) ... - 381 packages found - done]
--->  [Executing a command as root: sudo /usr/bin/touch /var/db/pkgdb.fixme]
パスワード: 
--->  Installing 'rxvt-unicode-9.22_1' from a port (x11/rxvt-unicode)
--->  Building '/usr/ports/x11/rxvt-unicode'
===>  Cleaning for gdk-pixbuf2-2.38.1
===>   /zfs/ports/graphics/gdk-pixbuf2/work not writable, skipping
===>  Cleaning for gobject-introspection-1.56.1,1
===>   /zfs/ports/devel/gobject-introspection/work not writable, skipping
===>  Cleaning for cairo-1.16.0,2
===>   /zfs/ports/graphics/cairo/work not writable, skipping
===>  Cleaning for glib-2.56.3_6,1
===>   /zfs/ports/devel/glib20/work not writable, skipping
===>  Cleaning for shared-mime-info-1.10_1
===>   /zfs/ports/misc/shared-mime-info/work not writable, skipping
===>  Cleaning for intltool-0.51.0_1
===>   /zfs/ports/textproc/intltool/work not writable, skipping
===>  Cleaning for p5-XML-Parser-2.44
===>   /zfs/ports/textproc/p5-XML-Parser/work not writable, skipping
===>  Cleaning for tiff-4.0.10_1
===>   /zfs/ports/graphics/tiff/work not writable, skipping
===>  Cleaning for jbigkit-2.1_1
===>   /zfs/ports/graphics/jbigkit/work not writable, skipping
===>  Cleaning for rxvt-unicode-9.22_1
===>  Switching to root credentials to create /var/db/ports/x11_rxvt-unicode
Password:

何か変なことになっている.. Ctrl-C で止めて、おかしくなっているディレクトリを試しに一個見てみると..

% ls -l /usr/ports/graphics/gdk-pixbuf2
total 7
-rw-r--r--  1 nsmrtks  wheel   178  7月 17 21:53 distinfo
-rw-r--r--  1 nsmrtks  wheel  1196  7月 17 21:53 Makefile
-rw-r--r--  1 nsmrtks  wheel   249  9月  1  2017 pkg-descr
-rw-r--r--  1 nsmrtks  wheel  7278  7月 17 21:53 pkg-plist
drwxr-xr-x  5 root     wheel    19 10月  7 13:31 work

work ディレクトリを sudo で消すことにする。

% sudo portsclean -C
Cleaning out /usr/ports/*/*/work...
Delete /usr/ports/x11/libxkbcommon/work
〜
Delete /usr/ports/print/psutils/work
done.

そしてやり直す。

% nice teetime -t rxvt-unicode_ portinstall -s rxvt-unicode
conflicting rxvt-unicode_20191008.log
logging (from the next line till the end) to rxvt-unicode_2019100810.log
teetime! 2019年 10月 8日 火曜日 10時13分32秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s rxvt-unicode
[Reading data from pkg(8) ... - 381 packages found - done]
--->  [Executing a command as root: sudo /usr/bin/touch /var/db/pkgdb.fixme]
〜
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
teetime! 2019年 10月 8日 火曜日 10時17分49秒 JST

今度はうまくビルド・インストールできた。

ここで、筆者の ~/.Xdefaults ファイルには、以下のような記述があり、梅フォントを使うようになっている。

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

起動してみた所。 なおコマンド名は urxvt である。 (もし ~/.Xdefaults の内容が反映されていない場合、xrdb ~/.Xdefaults を実行してみる。)

rxvt-unicode (urxvt)

● rsync をインストールする

% cd /var/tmp/log/Install

% nice teetime -t rsync portinstall -s rsync
logging (from the next line till the end) to rsync20191008.log
teetime! 2019年 10月 8日 火曜日 10時40分15秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s rsync
[Reading data from pkg(8) ... - 384 packages found - done]
〜
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
teetime! 2019年 10月 8日 火曜日 10時40分47秒 JST

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

● Samba をインストール・設定する

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

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

% cd /var/tmp/log/Install/

% ls -ld /usr/ports/*/samba*
-rw-r--r--  1 nsmrtks  wheel  18316560  8月 27 20:18 /usr/ports/distfiles/samba-4.10.8.tar.gz
drwxr-xr-x  3 nsmrtks  wheel         6  9月  6 10:04 /usr/ports/dns/samba-nsupdate/
drwxr-xr-x  3 nsmrtks  wheel         7  9月  6 10:05 /usr/ports/net/samba410
drwxr-xr-x  3 nsmrtks  wheel         7  9月  6 10:05 /usr/ports/net/samba48

% nice teetime -t samba410_ portinstall -s samba410
logging (from the next line till the end) to samba410_20191008.log
teetime! 2019年 10月 8日 火曜日 10時53分31秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s samba410
[Reading data from pkg(8) ... - 385 packages found - done]
--->  [Executing a command as root: sudo /usr/bin/touch /var/db/pkgdb.fixme]
〜
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
teetime! 2019年 10月 8日 火曜日 11時45分42秒 JST

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

次に、以下のような /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 を参照)

# 2019-10-09 nsmrtks
# (see /usr/local/etc/rc.d/samba_server)
samba_server_enable="YES"

ここまで、筆者は旧環境でも、同じ NetBIOS 名「fb」で Samba を起動していたので、先にそれを停止させる。 (そして次回からは起動しないようにする)
そして新環境で Samba を起動する。

% cd /

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

% ps axw | egrep mb
59348  -  Ss      0:00.05 /usr/local/sbin/nmbd --daemon --configfile=/usr/local/etc/smb4.conf
59353  -  Is      0:00.55 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf
59356  -  S       0:00.00 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf
59357  -  S       0:00.00 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf
59358  -  I       0:00.01 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf
59363  3  S+      0:00.00 egrep mb

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

% sudo pdbedit -a -u nsmrtks
〜
new password:パスワードを考えて入力y↵
retype new password:もう一度入力y↵
Unix username:        nsmrtks
NT username:          
Account Flags:        [U          ]
User SID:             S-1-5-21-750377330-2325953255-673116876-1000
Primary Group SID:    S-1-5-21-750377330-2325953255-673116876-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:    水, 09 10月 2019 10:25:11 JST
Password can change:  水, 09 10月 2019 10:25:11 JST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

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

\\fb

また VNC ビュアーにおいては、IPv4 アドレスでなくホスト名 fb を指定して接続するということも出来る。

VNC Viewer connecting with host name

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

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

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

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

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

% cd /var/tmp/log/Install/

% nice teetime -t xfce portinstall -s xfce
logging (from the next line till the end) to xfce20191009.log
teetime! 2019年 10月 9日 水曜日 11時15分26秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s xfce
[Reading data from pkg(8) ... - 400 packages found - done]
--->  [Executing a command as root: sudo /usr/bin/touch /var/db/pkgdb.fixme]
〜
===>   gstreamer1-plugins-1.14.4_2 depends on package: iso-codes>=0 - not found
===>  iso-codes-4.2 needs Python 3.4 at least, but 2.7 was specified.
*** Error code 1

Stop.
make[15]: stopped in /usr/ports/misc/iso-codes
*** Error code 1

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

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

Stop.
make[12]: stopped in /zfs/ports/www/webkit2-gtk3
*** Error code 1

Stop.
make[11]: stopped in /usr/ports/www/webkit2-gtk3
*** Error code 1

Stop.
make[10]: stopped in /zfs/ports/net/gnome-online-accounts
*** Error code 1

Stop.
make[9]: stopped in /usr/ports/net/gnome-online-accounts
*** Error code 1

Stop.
make[8]: stopped in /usr/ports/devel/libgdata
*** Error code 1

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

Stop.
make[6]: stopped in /usr/ports/devel/gvfs
*** Error code 1

Stop.
make[5]: stopped in /zfs/ports/x11-fm/thunar
*** Error code 1

Stop.
make[4]: stopped in /usr/ports/x11-fm/thunar
*** Error code 1

Stop.
make[3]: stopped in /zfs/ports/x11-wm/xfce4-desktop
*** Error code 1

Stop.
make[2]: stopped in /usr/ports/x11-wm/xfce4-desktop
*** Error code 1

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

Stop.
make: stopped in /zfs/ports/x11-wm/xfce4
** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portinstall20191009-59547-pj1cdx 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)
	! x11-wm/xfce4	(unknown build error)
teetime! 2019年 10月 9日 水曜日 11時41分21秒 JST

変な所で止まってしまった。 iso-codes とやらを単独でビルドを試みる。

% nice teetime -t iso-codes_ portinstall -s iso-codes
logging (from the next line till the end) to iso-codes_20191009.log
teetime! 2019年 10月 9日 水曜日 11時44分26秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s iso-codes
[Reading data from pkg(8) ... - 430 packages found - done]
--->  [Executing a command as root: sudo /usr/bin/touch /var/db/pkgdb.fixme]
〜
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
teetime! 2019年 10月 9日 水曜日 11時45分05秒 JST

うまくいった。 xfce のビルドに戻る。 (繰り返しになるが今度は portinstall に -w オプションを付けた方がよい)

作業記録の都合で、ここだけ間違えて /var/tmp/log/Install ではなくホームディレクトリで実行してしまった。
% nice teetime -t iso-codes_ portinstall -sw iso-codes
logging (from the next line till the end) to xfce20191009.log
teetime! 2019年 10月 9日 水曜日 11時49分17秒 JST
teetime! working directory is /home/nsmrtks
teetime> portinstall -sw xfce
[Reading data from pkg(8) ... - 431 packages found - done]
--->  [Executing a command as root: sudo /usr/bin/touch /var/db/pkgdb.fixme]
〜
===>   gstreamer1-plugins-gl-1.14.4_2 depends on shared library: libgraphene-1.0.so - not found
===>  graphene-1.8.2_1 needs Python 3.4 at least, but 2.7 was specified.
*** Error code 1

Stop.
make[15]: stopped in /usr/ports/graphics/graphene
*** Error code 1

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

Stop.
make[13]: stopped in /usr/ports/graphics/gstreamer1-plugins-gl
*** Error code 1

Stop.
make[12]: stopped in /zfs/ports/www/webkit2-gtk3
*** Error code 1

Stop.
make[11]: stopped in /usr/ports/www/webkit2-gtk3
*** Error code 1

Stop.
make[10]: stopped in /zfs/ports/net/gnome-online-accounts
*** Error code 1

Stop.
make[9]: stopped in /usr/ports/net/gnome-online-accounts
*** Error code 1

Stop.
make[8]: stopped in /usr/ports/devel/libgdata
*** Error code 1

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

Stop.
make[6]: stopped in /usr/ports/devel/gvfs
*** Error code 1

Stop.
make[5]: stopped in /zfs/ports/x11-fm/thunar
*** Error code 1

Stop.
make[4]: stopped in /usr/ports/x11-fm/thunar
*** Error code 1

Stop.
make[3]: stopped in /zfs/ports/x11-wm/xfce4-desktop
*** Error code 1

Stop.
make[2]: stopped in /usr/ports/x11-wm/xfce4-desktop
*** Error code 1

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

Stop.
make: stopped in /zfs/ports/x11-wm/xfce4
** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portinstall20191009-1007-1chouwp 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)
	! x11-wm/xfce4	(unknown build error)
teetime! 2019年 10月 9日 水曜日 11時58分23秒 JST

また変な所で止まってしまった。 graphene を単独でビルドを試みる。

% nice teetime -t graphene portinstall -s graphene
logging (from the next line till the end) to graphene20191009.log
teetime! 2019年 10月 9日 水曜日 12時05分13秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s graphene
[Reading data from pkg(8) ... - 435 packages found - done]
--->  [Executing a command as root: sudo /usr/bin/touch /var/db/pkgdb.fixme]
〜
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
teetime! 2019年 10月 9日 水曜日 12時08分42秒 JST

うまくいった。 xfce のビルドに戻る。

% nice teetime -t xfce portinstall -sw xfce
conflicting xfce20191009.log
logging (from the next line till the end) to xfce2019100912.log
teetime! 2019年 10月 9日 水曜日 12時10分27秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -sw xfce
[Reading data from pkg(8) ... - 439 packages found - done]
--->  [Executing a command as root: sudo /usr/bin/touch /var/db/pkgdb.fixme]
〜
===>  Installing for webkit2-gtk3-2.24.3_1
===>  Checking if webkit2-gtk3 is already installed
===>  Switching to root credentials for 'install' target
Password:
sudo: timed out reading password
*** Error code 1

Stop.
make[12]: stopped in /zfs/ports/www/webkit2-gtk3
*** Error code 1

Stop.
make[11]: stopped in /usr/ports/www/webkit2-gtk3
*** Error code 1

Stop.
make[10]: stopped in /zfs/ports/net/gnome-online-accounts
*** Error code 1

Stop.
make[9]: stopped in /usr/ports/net/gnome-online-accounts
*** Error code 1

Stop.
make[8]: stopped in /usr/ports/devel/libgdata
*** Error code 1

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

Stop.
make[6]: stopped in /usr/ports/devel/gvfs
*** Error code 1

Stop.
make[5]: stopped in /zfs/ports/x11-fm/thunar
*** Error code 1

Stop.
make[4]: stopped in /usr/ports/x11-fm/thunar
*** Error code 1

Stop.
make[3]: stopped in /zfs/ports/x11-wm/xfce4-desktop
*** Error code 1

Stop.
make[2]: stopped in /usr/ports/x11-wm/xfce4-desktop
*** Error code 1

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

Stop.
make: stopped in /zfs/ports/x11-wm/xfce4
** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portinstall20191009-8547-1tceyep 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)
	! x11-wm/xfce4	(unknown build error)
teetime! 2019年 10月 9日 水曜日 15時29分29秒 JST

おっと。

% nice teetime -t xfce portinstall -sw xfce
conflicting xfce20191009.log
logging (from the next line till the end) to xfce2019100915.log
teetime! 2019年 10月 9日 水曜日 15時32分16秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -sw xfce
[Reading data from pkg(8) ... - 446 packages found - done]
--->  [Executing a command as root: sudo /usr/bin/touch /var/db/pkgdb.fixme]
〜
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
teetime! 2019年 10月 9日 水曜日 16時07分56秒 JST

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

Xfce は startxfce4 コマンドで起動できる。 筆者の ~/.vnc/xstartup は、startxfce4 コマンドが存在すればそれを起動するようになっている。

#!/bin/tcsh
〜
where twm	> /dev/null && set WINDOWMAN=twm
where mwm	> /dev/null && set WINDOWMAN=mwm
where startxfce4 >/dev/null && set WINDOWMAN='startxfce4'
〜
$WINDOWMAN &

Xvnc (vncserver) を起動し直す。 そして VNC ビューアも接続し直す。

% vncserver -kill :1
Killing Xvnc process ID 49946

% vncserver -geometry 1366x768 -dpi 75

New 'fb120.magic.or:1 (nsmrtks)' desktop is fb120.magic.or:1

Starting applications specified in /home/nsmrtks/.vnc/xstartup
Log file is /home/nsmrtks/.vnc/fb120.magic.or:1.log

無事に Xfce で起動した。 (壁紙は以前の設定が旧環境のホームディレクトリからコピーされてきている。 また設定により上下のバーを自動的に隠すようになっており見えていない。)

Xfce

ところで、ここで Emacs を起動すると..

Emacs on Xfce

分かりにくいかもしれないが、さっき twm の時に起動した Emacs よりも大きいサイズで表示されている。 これはどういうことだろうか。
実は X11 の DPI の設定をどうやら Xfce が上書きしていて、Emacs がそれに沿って表示されているようなのだ。

vncserver コマンドに -dpi 75 オプションを付けず、且つ twm のとき。

% xdpyinfo
〜
screen #0:
  dimensions:    1366x768 pixels (361x203 millimeters)
  resolution:    96x96 dots per inch
〜

vncserver コマンドに -dpi 75 オプションを付けて、且つ twm のとき。

% xdpyinfo
〜
  resolution:    75x75 dots per inch
〜

vncserver コマンドに -dpi 75 オプションを付けて、且つ Xfce のとき。

% xdpyinfo
〜
  resolution:    96x96 dots per inch
〜

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

Emacs 96 DPI

Xfce に DPI の設定があればよいのだが見つけられていない。
そこで筆者は、VNC サーバを立ち上げるたびに、xrandr --dpi 75 というコマンドを入力して (値は必ずしも 75 にしないといけないわけではなくて幅がある)、DPI を設定し直している。 何か他に良い手はないのだろうか..

Emacs 75 DPI

余談だが、TigerVNC サーバではなく TightVNC サーバでは DPI のデフォルト値が 75 だったらしく、Xfce を使用していなかった頃、TigerVNC にすると Emacs がうまく表示されなくなってしまい、TightVNC から移行できないでいたことがあった。 原因と対策方法が DPI であることをやっと突き止めて TightVNC から TigerVNC に移行できた。

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

% cd /var/tmp/log/Install/

% ls -ld /usr/ports/*/*nkf*
-rw-r--r--  1 nsmrtks  wheel  232479 12月 12  2015 /usr/ports/distfiles/nkf-2.1.4.tar.gz
drwxr-xr-x  3 nsmrtks  wheel       6  9月  6 10:05 /usr/ports/japanese/nkf
drwxr-xr-x  2 nsmrtks  wheel       6  9月  6 10:05 /usr/ports/japanese/p5-nkf
drwxr-xr-x  2 nsmrtks  wheel       6  9月  6 10:05 /usr/ports/mail/junkfilter

% nice teetime -t ja-nkf_ portinstall -s ja-nkf
logging (from the next line till the end) to ja-nkf_20191015.log
teetime! 2019年 10月15日 火曜日 11時14分54秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s ja-nkf
[Reading data from pkg(8) ... - 484 packages found - done]
--->  [Executing a command as root: sudo /usr/bin/touch /var/db/pkgdb.fixme]
〜
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
teetime! 2019年 10月15日 火曜日 11時15分05秒 JST

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

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

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

% cd /var/tmp/log/Install/

% ls -ld /usr/ports/*/*mozc*
-rw-r--r--  1 nsmrtks  wheel  36711684  3月  6  2019 /usr/ports/distfiles/hrs-allbsd-mozc-v2.23.2815.102.00_GH0.tar.gz
drwxr-xr-x  2 nsmrtks  wheel         5  9月  6 10:05 /usr/ports/japanese/boiled-mozc
drwxr-xr-x  3 nsmrtks  wheel         4  9月  6 10:05 /usr/ports/japanese/fcitx-mozc
drwxr-xr-x  3 nsmrtks  wheel         4  9月  6 10:05 /usr/ports/japanese/ibus-mozc
drwxr-xr-x  2 nsmrtks  wheel         4  9月  6 10:05 /usr/ports/japanese/mozc-el
drwxr-xr-x  3 nsmrtks  wheel         6  9月  6 10:05 /usr/ports/japanese/mozc-server
drwxr-xr-x  2 nsmrtks  wheel         3  9月  6 10:05 /usr/ports/japanese/mozc-tool
drwxr-xr-x  3 nsmrtks  wheel         4  9月  6 10:05 /usr/ports/japanese/uim-mozc

% nice teetime -t mozc-el_ portinstall -s mozc-el
logging (from the next line till the end) to mozc-el_20191015.log
teetime! 2019年 10月15日 火曜日 11時20分43秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s mozc-el
** No such package or port: mozc-el
teetime! 2019年 10月15日 火曜日 11時20分43秒 JST

% pkg search mozc-el
pkg: Repository FreeBSD missing. 'pkg update' required
pkg: Repository FreeBSD cannot be opened. 'pkg update' required
70で終了しました

% pkg update
pkg: Insufficient privileges to update the repository catalogue.
77で終了しました

% sudo pkg update
〜
Updating FreeBSD repository catalogue...
〜
FreeBSD repository update completed. 32770 packages processed.
All repositories are up to date.

% 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

% emacs --version
GNU Emacs 26.3
Copyright (C) 2019 Free Software Foundation, Inc.
GNU Emacs comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of GNU Emacs
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.

% 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_20191015.log
teetime! 2019年 10月15日 火曜日 11時22分06秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s ja-mozc-el-emacs26
[Reading data from pkg(8) ... - 485 packages found - done]
--->  [Executing a command as root: sudo /usr/bin/touch /var/db/pkgdb.fixme]
〜
===>   Registering installation for ja-mozc-el-emacs26-2.23.2815.102.00_5
Installing ja-mozc-el-emacs26-2.23.2815.102.00_5...
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)

〜
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
teetime! 2019年 10月15日 火曜日 11時44分41秒 JST

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

% pkg info | egrep -i mozc
ja-mozc-el-emacs26-2.23.2815.102.00_5 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-\ を用いる)

(2019-10-30 追記) (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_20191016.log
teetime! 2019年 10月16日 水曜日 09時23分20秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s ja-uim-mozc
[Reading data from pkg(8) ... - 491 packages found - done]
--->  [Executing a command as root: sudo /usr/bin/touch /var/db/pkgdb.fixme]
〜
===>  Checking if qtchooser is already installed
===>  Switching to root credentials for 'install' target
Password:
sudo: timed out reading password
*** Error code 1

Stop.
make[6]: stopped in /usr/ports/misc/qtchooser
*** Error code 1

Stop.
make[5]: stopped in /usr/ports/devel/qt5-qmake
*** Error code 1

Stop.
make[4]: stopped in /usr/ports/devel/qt5-buildtools
*** Error code 1

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

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

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

Stop.
make: stopped in /zfs/ports/japanese/uim-mozc
** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portinstall20191016-51885-1y8i1zb 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)
	! japanese/uim-mozc	(unknown build error)
teetime! 2019年 10月16日 水曜日 09時37分19秒 JST

おっと。

% nice teetime -t ja-uim-mozc_ portinstall -sw ja-uim-mozc
conflicting ja-uim-mozc_20191016.log
logging (from the next line till the end) to ja-uim-mozc_2019101609.log
teetime! 2019年 10月16日 水曜日 09時38分05秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -sw ja-uim-mozc
[Reading data from pkg(8) ... - 492 packages found - done]
--->  [Executing a command as root: sudo /usr/bin/touch /var/db/pkgdb.fixme]
〜
===>  Checking if qt5-gui is already installed
===>  Switching to root credentials for 'install' target
Password:
sudo: timed out reading password
*** Error code 1

Stop.
make[4]: stopped in /usr/ports/x11-toolkits/qt5-gui
*** Error code 1

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

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

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

Stop.
make: stopped in /zfs/ports/japanese/uim-mozc
** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portinstall20191016-89914-buqj81 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)
	! japanese/uim-mozc	(unknown build error)
teetime! 2019年 10月16日 水曜日 10時16分40秒 JST

ありゃ。

% nice teetime -t ja-uim-mozc_ portinstall -sw ja-uim-mozc
conflicting ja-uim-mozc_20191016.log
logging (from the next line till the end) to ja-uim-mozc_2019101610.log
teetime! 2019年 10月16日 水曜日 10時17分46秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -sw ja-uim-mozc
[Reading data from pkg(8) ... - 502 packages found - done]
--->  [Executing a command as root: sudo /usr/bin/touch /var/db/pkgdb.fixme]
〜
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 &

〜
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
teetime! 2019年 10月16日 水曜日 10時31分12秒 JST

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

uim 及び mozc サーバを有効化するには、ビルドのログにも出ているようなものを、~/.vnc/xstartup に書く。
筆者は ~/.vnc/xstartup を 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 &
〜

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

mozc tool

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

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

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

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

% 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_20191016.log
teetime! 2019年 10月16日 水曜日 11時14分44秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s magit-emacs26
[Reading data from pkg(8) ... - 507 packages found - done]
〜
===>   Registering installation for magit-emacs26-2.90.1_1
Installing magit-emacs26-2.90.1_1...
To use Magit, you should add following line to your .emacs file:

(require 'magit)

〜
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
teetime! 2019年 10月16日 水曜日 11時22分06秒 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_20191016.log
teetime! 2019年 10月16日 水曜日 11時27分59秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s proxy-connect
[Reading data from pkg(8) ... - 533 packages found - done]
〜
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
teetime! 2019年 10月16日 水曜日 11時28分06秒 JST

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

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

% pkg search pycharm
pycharm-ce-2019.2.3            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_20191016.log
teetime! 2019年 10月16日 水曜日 11時34分46秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s pycharm-ce
[Reading data from pkg(8) ... - 534 packages found - done]
〜
===>   Registering installation for bootstrap-openjdk8-r450802 as automatic
Installing bootstrap-openjdk8-r450802...
WARNING: This port only exists for bootstrapping java/openjdk8.
You are advised to remove this port as soon as a stable JDK is built.

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

〜
===>   Registering installation for openjdk8-8.222.10.1_2 as automatic
Installing openjdk8-8.222.10.1_2...
This OpenJDK implementation requires fdescfs(5) mounted on /dev/fd

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

	mount -t fdescfs fdesc /dev/fd

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

	fdesc	/dev/fd		fdescfs		rw	0	0

〜
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
teetime! 2019年 10月16日 水曜日 11時57分27秒 JST

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

# 2019-10-16 nsmrtks
# (/var/tmp/log/Install/pycharm-ce_20191016.log)
fdesc	/dev/fd		fdescfs		rw	0	0
proc	/proc		procfs		rw	0	0

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

% sudo mount -av
〜
/dev/ada0p2 on / (ufs, local, journaled soft-updates, writes: sync 34 async 13683, reads: sync 5807 async 33, fsid 1dda685d4800c24a)
fdescfs on /dev/fd (fdescfs, fsid 02ff005959000000)
procfs on /proc (procfs, local, fsid 03ff000202000000)

% 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, NFS exported, local, journaled soft-updates)
zfs/nsmrtks on /home/nsmrtks (zfs, NFS exported, 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)
procfs on /proc (procfs, local)

% 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    1.0G    1.7G    37%    /var
/dev/da0p1      15G     14G    699M    95%    /home/distfiles
zfs/nsmrtks     14G    9.5G    4.7G    67%    /home/nsmrtks
zfs            4.7G     23K    4.7G     0%    /zfs
zfs/local      7.1G    2.3G    4.7G    33%    /zfs/local
zfs/ports      5.1G    362M    4.7G     7%    /zfs/ports
tmpfs          512M     84K    512M     0%    /tmp
fdescfs        1.0K    1.0K      0B   100%    /dev/fd
procfs         4.0K    4.0K      0B   100%    /proc

● (参考) Python 系の ports をインストールする

筆者が仕事で Flask 等を必要としているのだが、例えば Flask は py36-Flask という ports 名が存在しているが、前述のように、筆者は Python 3.7 を必要としている。 そして、portinstall コマンドでは「py37-Flask」などと指定してインストールできないようだ。

% pkg search flask
py27-Flask-1.0.2_1             Micro web framework
〜
py36-Flask-1.0.2_1             Micro web framework
〜

% portinstall -s py37-Flask
** No such package or port: py37-Flask

そこでこれらについては普通に /usr/ports 下の該当のディレクトリ (Python についてバージョンの区別は無い) で make するといけるようだ。
(今に始まったわけではないが毎度 WARNING が出ているのが気になるが..)

% cd /usr/ports/

% ls -ld */*lask*
〜
drwxr-xr-x  2 nsmrtks  wheel       5  9月  6 10:06 mwww/py-flask
〜

% cd www/py-flask

% nice teetime -t install make install
logging (from the next line till the end) to install20191016.log
teetime! 2019年 10月16日 水曜日 13時25分13秒 JST
teetime! working directory is /zfs/ports/www/py-flask
teetime> make install
/!\ WARNING /!\

PYTHON_DEFAULT must be a version present in PYTHON2_DEFAULT or PYTHON3_DEFAULT,
if you want more Python flavors, set BUILD_ALL_PYTHON_FLAVORS in your make.conf

〜
Installing py37-Flask-1.0.2_1...
===>  Returning to user credentials
teetime! 2019年 10月16日 水曜日 13時26分10秒 JST

% pkg info | egrep -i flask
py37-Flask-1.0.2_1             Micro web framework

% ls
distinfo             Makefile             work-py37/
install20191016.log  pkg-descr            

% make clean
===>  Cleaning for py37-werkzeug-0.15.6
===>  Cleaning for py37-itsdangerous-0.24
===>  Cleaning for py37-click-7.0
===>  Cleaning for py37-Flask-1.0.2_1
===>  Cleaning for py27-Flask-1.0.2_1
===>  Cleaning for py36-Flask-1.0.2_1

% ls
distinfo             Makefile             
install20191016.log  pkg-descr            

なお ports が存在していないものについては pip でインストールするしかない。 その場合、まず pip (py37-pip) 自体をインストールしないといけない。

%  cd /usr/ports/*/py-pip

% pwd
/zfs/ports/devel/py-pip

% nice teetime -t install make install
logging (from the next line till the end) to install20191016.log
teetime! 2019年 10月16日 水曜日 13時41分56秒 JST
teetime! working directory is /zfs/ports/devel/py-pip
teetime> make install
===>  Switching to root credentials to create /var/db/ports/devel_py-pip
〜
===>   Registering installation for py37-pip-19.1.1
Installing py37-pip-19.1.1...
pip MUST ONLY be used:

 * With the --user flag, OR
 * To install or manage Python packages in virtual environments

Failure to follow this warning can and will result in an inconsistent
system-wide Python environment (LOCALBASE/lib/pythonX.Y/site-packages) and
cause errors.

Avoid using pip as root unless you know what you're doing.

===>  Returning to user credentials
teetime! 2019年 10月16日 水曜日 13時42分50秒 JST

「Avoid using pip as root unless you know what you're doing.」 というメッセージが気になるが..

connexion をインストールする場合..

% where pip
/usr/local/bin/pip

%  pip^D
pip     pip-3.7

% ls -ld `where pip pip-3.7`
lrwxr-xr-x  1 root  wheel    7 10月 16 13:42 /usr/local/bin/pip@ -> pip-3.7
-rwxr-xr-x  1 root  wheel  373 10月 16 13:42 /usr/local/bin/pip-3.7*

% sudo pip-3.7 install connexion
〜
Successfully installed PyYAML-5.1.2 clickclick-1.2.2 connexion-2.3.0 inflection-0.3.1 jsonschema-2.6.0 openapi-spec-validator-0.2.8

● 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 jq20191016.log
teetime! 2019年 10月16日 水曜日 17時25分55秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s jq
[Reading data from pkg(8) ... - 557 packages found - done]
〜
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
teetime! 2019年 10月16日 水曜日 17時27分27秒 JST

● xload をインストールする

%  pkg search xload
〜
xload-1.1.3                    System load average display for X
〜

% cd /var/tmp/log/Install/

% nice teetime -t xload portinstall -s xload
logging (from the next line till the end) to xload20191016.log
teetime! 2019年 10月16日 水曜日 17時31分48秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s xload
[Reading data from pkg(8) ... - 559 packages found - done]
〜
teetime! 2019年 10月16日 水曜日 17時32分02秒 JST

実行例。

% xload -bg tan -hl red2 &

xload

● oclock をインストールする

% pkg search oclock
oclock-1.0.4                   Round clock application for X

% cd /var/tmp/log/Install/

% nice teetime -t oclock portinstall -s oclock
logging (from the next line till the end) to oclock20191016.log
teetime! 2019年 10月16日 水曜日 17時33分50秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s oclock
[Reading data from pkg(8) ... - 560 packages found - done]
〜    
teetime! 2019年 10月16日 水曜日 17時34分05秒 JST

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

*customization:		-color

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

% oclock -transparent &

oclock

● xlogo をインストールする

% pkg search xlogo
xlogo-1.0.5                    Displays the X Window System logo

% cd /var/tmp/log/Install/

% nice teetime -t xlogo portinstall -s xlogo
logging (from the next line till the end) to xlogo20191016.log
teetime! 2019年 10月16日 水曜日 17時36分07秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s xlogo
[Reading data from pkg(8) ... - 561 packages found - done]
〜
teetime! 2019年 10月16日 水曜日 17時36分22秒 JST

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

% xlogo -render &

xlogo

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

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

% pkg search seamonkey
70で終了しました

% pkg search firefox
firefox-69.0.2,1               Web browser based on the browser portion of Mozilla
firefox-esr-68.1.0_4,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 firefox20191017.log
teetime! 2019年 10月17日 木曜日 10時03分33秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s firefox
[Reading data from pkg(8) ... - 562 packages found - done]
〜
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! 2019年 10月17日 木曜日 14時24分13秒 JST

おやっ?

% nice teetime -t firefox portinstall -sw firefox
conflicting firefox20191017.log
logging (from the next line till the end) to firefox2019101714.log
teetime! 2019年 10月17日 木曜日 14時24分32秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -sw firefox
[Reading data from pkg(8) ... - 566 packages found - done]
〜
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]
パスワード: 
sudo: パスワードの読み込みがタイムしました
〜
teetime! 2019年 10月17日 木曜日 14時38分10秒 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 nsmrtks
# moved from bup

if [ `hostname`. != fb120.magic.or. ]; then
	echo this is not fb120, 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/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 無しでもよい)
% cd

% nice +20 bup
〜
+ 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 rsync20191018.log
teetime! 2019年 10月18日 金曜日 10時23分41秒 JST
teetime! working directory is /var/tmp/log/back
teetime> rsync -a --delete-before /home/nsmrtks/ fb111c:/zfs/nsmrtks/
teetime! 2019年 10月18日 金曜日 10時25分45秒 JST
+ mkdir updatefb
logging (from the next line till the end) to updatefb20191018.log
teetime! 2019年 10月18日 金曜日 10時25分45秒 JST
teetime! working directory is /var/tmp/log/updatefb
teetime> updatefb
2019年 10月18日 金曜日 10時25分45秒 JST
==========================================================================
+ sudo freebsd-update fetch
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching metadata signature for 12.0-RELEASE from update2.freebsd.org... failed.
Fetching metadata signature for 12.0-RELEASE from update4.freebsd.org... failed.
Fetching metadata signature for 12.0-RELEASE from update1.freebsd.org... failed.
No mirrors remaining, giving up.
==========================================================================
+ sudo pkg update
Updating FreeBSD repository catalogue...
pkg: http://pkg.FreeBSD.org/FreeBSD:12:amd64/quarterly/meta.txz: Proxy Authentication Required
repository FreeBSD has no meta file, using default settings
pkg: http://pkg.FreeBSD.org/FreeBSD:12:amd64/quarterly/packagesite.txz: Proxy Authentication Required
Unable to update repository FreeBSD
Error updating repositories!
------------------------------------------------------------------
+ sudo pkg audit -F
pkg: http://vuxml.freebsd.org/freebsd/vuln.xml.bz2: Proxy Authentication Required
pkg: cannot fetch vulnxml file
==========================================================================
+ sudo portsnap fetch
Looking up portsnap.FreeBSD.org mirrors... 6 mirrors found.
Fetching snapshot tag from ec2-ap-northeast-1.portsnap.freebsd.org... failed.
Fetching snapshot tag from ec2-ap-southeast-2.portsnap.freebsd.org... failed.
Fetching snapshot tag from metapeer.portsnap.freebsd.org... failed.
Fetching snapshot tag from your-org.portsnap.freebsd.org... failed.
Fetching snapshot tag from ec2-sa-east-1.portsnap.freebsd.org... failed.
Fetching snapshot tag from ec2-eu-west-1.portsnap.freebsd.org... failed.
No mirrors remaining, giving up.
==========================================================================
+ portsnap update
Ports tree is already up to date.
==========================================================================
+ sudo portversion -c
[Reading data from pkg(8) ... - 566 packages found - done]
==========================================================================
2019年 10月18日 金曜日 10時25分56秒 JST
teetime! 2019年 10月18日 金曜日 10時25分56秒 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 pvc20191018.log
teetime! 2019年 10月18日 金曜日 10時25分56秒 JST
teetime! working directory is /var/tmp/log/pvc
teetime> sh ../updatefb/portversion-c.out -s
[Reading data from pkg(8) ... - 566 packages found - done]
〜    
teetime! 2019年 10月18日 金曜日 10時26分32秒 JST

職場の Proxy Authentication を通して、やり直し..

% nice +20 bup
/var/tmp/log
+ teetime -t rsync rsync -a --delete-before /home/nsmrtks/ fb111c:/zfs/nsmrtks/
conflicting rsync20191018.log
logging (from the next line till the end) to rsync2019101810.log
teetime! 2019年 10月18日 金曜日 10時27分22秒 JST
teetime! working directory is /var/tmp/log/back
teetime> rsync -a --delete-before /home/nsmrtks/ fb111c:/zfs/nsmrtks/
teetime! 2019年 10月18日 金曜日 10時28分12秒 JST
conflicting updatefb20191018.log
logging (from the next line till the end) to updatefb2019101810.log
teetime! 2019年 10月18日 金曜日 10時28分12秒 JST
teetime! working directory is /var/tmp/log/updatefb
teetime> updatefb
2019年 10月18日 金曜日 10時28分12秒 JST
==========================================================================
+ sudo freebsd-update fetch
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching metadata signature for 12.0-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.0-RELEASE-p10.

WARNING: FreeBSD 12.0-RELEASE-p10 is approaching its End-of-Life date.
It is strongly recommended that you upgrade to a newer
release within the next 1 month.
==========================================================================
+ sudo pkg update
Updating FreeBSD repository catalogue...
Fetching meta.txz: . done
Fetching packagesite.txz: .......... done
Processing entries: .......... done
FreeBSD repository update completed. 32770 packages processed.
All repositories are up to date.
------------------------------------------------------------------
+ sudo pkg audit -F
Fetching vuln.xml.bz2: .......... done
webkit2-gtk3-2.24.3_1 is vulnerable:
〜

6 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 Fri Sep  6 09:12:45 JST 2019 to Fri Oct 18 09:44:20 JST 2019.
Fetching 5 metadata patches... done.
Applying metadata patches... done.
Fetching 5 metadata files... done.
Fetching 3534 patches. 
〜
done.
Applying patches... 
  Skipping 089d0f62b4861087dd08a826ca346f4ebb4acca6cdaf4d533f119b747f3dc161-5b15d40f29c6580826de67f52467351d18fd5b47930319949e67aa3897b594d5 (1 of     3534 patc
hlist).
〜
done.
Fetching 1200 new ports or files... done.
==========================================================================
+ portsnap update
Removing old files and directories... rm: /usr/ports/devel/cvsps/work/.PLIST.readelf: Permission denied
^C

sudo portsclean -C してやり直そうとしたがそれもうまくいかず、/usr/ports 以下を消去して portsnap extract をやり直し..

% sudo portsclean -C
〜
make: cannot open Mk/bsd.port.mk.
〜
1で終了しました

% sudo portsnap fetch
Looking up portsnap.FreeBSD.org mirrors... 6 mirrors found.
Fetching snapshot tag from ec2-ap-northeast-1.portsnap.freebsd.org... done.
Latest snapshot on server matches what we already have.
No updates needed.

% cd /usr/ports

% pwd
/zfs/ports

% sudo rm -fr * ; ln -s /home/distfiles

% portsnap extract
〜

% nice +20 bup
〜
/var/tmp/log
+ teetime -t rsync rsync -a --delete-before /home/nsmrtks/ fb111c:/zfs/nsmrtks/
conflicting rsync20191018.log
conflicting rsync2019101810.log
logging (from the next line till the end) to rsync201910181044.log
teetime! 2019年 10月18日 金曜日 10時44分26秒 JST
teetime! working directory is /var/tmp/log/back
teetime> rsync -a --delete-before /home/nsmrtks/ fb111c:/zfs/nsmrtks/
teetime! 2019年 10月18日 金曜日 10時45分09秒 JST
conflicting updatefb20191018.log
conflicting updatefb2019101810.log
logging (from the next line till the end) to updatefb201910181045.log
teetime! 2019年 10月18日 金曜日 10時45分09秒 JST
teetime! working directory is /var/tmp/log/updatefb
teetime> updatefb
2019年 10月18日 金曜日 10時45分09秒 JST
==========================================================================
+ sudo freebsd-update fetch
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching metadata signature for 12.0-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.0-RELEASE-p10.
==========================================================================
+ 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
webkit2-gtk3-2.24.3_1 is vulnerable:
〜

6 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.
Ports tree hasn't changed since last snapshot.
No updates needed.
==========================================================================
+ portsnap update
Ports tree is already up to date.
==========================================================================
+ sudo portversion -c
[Reading data from pkg(8) ... - 566 packages found - done]
[Updating the portsdb <format:bdb_btree> in /usr/ports ... - 33300 port entries found 〜 done]
==========================================================================
2019年 10月18日 金曜日 10時45分58秒 JST
teetime! 2019年 10月18日 金曜日 10時45分58秒 JST
+ cd /var/tmp/log/pvc
+ nice teetime -t pvc sh ../updatefb/portversion-c.out -s
conflicting pvc20191018.log
logging (from the next line till the end) to pvc2019101810.log
teetime! 2019年 10月18日 金曜日 10時45分58秒 JST
teetime! working directory is /var/tmp/log/pvc
teetime%gt; sh ../updatefb/portversion-c.out -s
[Reading data from pkg(8) ... - 566 packages found - done]
〜
override rw-r--r-- root/wheel for /tmp/portupgradeLVV6hAkQ/sudo-1.8.27_1.txz? 
rm: /tmp/portupgradeLVV6hAkQ: ディレクトリが空ではありません
/zfs/local/lib/ruby/site_ruby/2.5/pkgtools/pkgmisc.rb:120:in `+#39;: no implicit conversion of CommandFailedError into String (TypeError)
	from /zfs/local/lib/ruby/site_ruby/2.5/pkgtools/pkgmisc.rb:120:in `rescue in block in init_tmpdir#39;
	from /zfs/local/lib/ruby/site_ruby/2.5/pkgtools/pkgmisc.rb:117:in `block in init_tmpdir#39;
/zfs/local/lib/ruby/site_ruby/2.5/pkgtools/pkgtools.rb:487:in `__system#39;: Command failed [exit code 127]: sudo /usr/local/sbin/pkgdb -aFOQ (CommandFailedErro
r)
	from /zfs/local/lib/ruby/site_ruby/2.5/pkgtools/pkgtools.rb:510:in `__sudo#39;
	from /zfs/local/lib/ruby/site_ruby/2.5/pkgtools/pkgtools.rb:516:in `xsudo#39;
	from /zfs/local/lib/ruby/site_ruby/2.5/pkgtools/pkgdb.rb:1062:in `autofix!#39;
	from /zfs/local/lib/ruby/site_ruby/2.5/pkgtools/pkgdb.rb:1058:in `autofix#39;
	from /usr/local/sbin/portupgrade:519:in `block (2 levels) in main#39;
	from /usr/local/sbin/portupgrade:855:in `block in main#39;
	from /zfs/local/lib/ruby/2.5/optparse.rb:1062:in `initialize#39;
	from /usr/local/sbin/portupgrade:238:in `new#39;
	from /usr/local/sbin/portupgrade:238:in `main#39;
	from /usr/local/sbin/portupgrade:2380:in `<main>#39;
teetime! 2019年 10月18日 金曜日 12時41分42秒 JST

途中で何かがビルドエラーになっていたり、また OpenJDK8 のビルドがハングしたので Ctrl-C で止めたりしたが、最後 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 sudo20191018131207.log portinstall -w -s -S 'su root -c %s ' sudo
Script started, output file is sudo20191018131207.log
[Reading data from pkg(8) ... - 566 packages found - done]
〜
Script done, output file is sudo20191018131207.log

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

bup コマンドは、最後のステップで pvc.sh を実行するようになっているので、pvc.sh のみやり直す。 ここでも -w を付けると、portupgrade コマンドにそのまま渡される。

% cd /var/tmp/log/pvc

% nice +20 sh pvc.sh -w
+ cd /var/tmp/log/pvc
+ nice teetime -t pvc sh ../updatefb/portversion-c.out -s -w
conflicting pvc20191018.log
logging (from the next line till the end) to pvc2019101813.log
teetime! 2019年 10月18日 金曜日 13時20分37秒 JST
teetime! working directory is /var/tmp/log/pvc
teetime> sh ../updatefb/portversion-c.out -s -w
[Reading data from pkg(8) ... - 567 packages found - done]
〜
** Listing the failed packages (-:ignored / *:skipped / !:failed)
	! databases/ruby-bdb (ruby25-bdb-0.6.6_6)	(dependent ports)
	! java/openjdk8 (openjdk8-8.222.10.1_2)	(interrupted by user)
	* devel/pycharm-ce (pycharm-ce-2019.2)
	* graphics/graphviz (graphviz-2.40.1_11)
teetime! 2019年 10月21日 月曜日 14時04分52秒 JST

少なくとも、またしても OpenJDK8 のビルドが途中でハングして Ctrl-C で止めたりしている。
いま一度やり直す。

% nice teetime -t pvc sh ../updatefb/portversion-c.out -s -w
logging (from the next line till the end) to pvc20191021.log
teetime! 2019年 10月21日 月曜日 14時08分41秒 JST
teetime! working directory is /var/tmp/log/pvc
teetime> sh ../updatefb/portversion-c.out -s -w
[Reading data from pkg(8) ... - 581 packages found - done]
〜
--->  [Executing a command as root: sudo /usr/bin/touch /var/db/pkgdb.fixme]
〜
** Detected a package name change: ruby25-bdb (databases/ruby-bdb) -> 'ruby26-bdb' (databases/ruby-bdb)
〜
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[3]: stopped in /zfs/ports/devel/ruby-gems
*** Error code 1

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

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

Stop.
make: stopped in /zfs/ports/databases/ruby-bdb
〜
** Listing the failed packages (-:ignored / *:skipped / !:failed)
	! databases/ruby-bdb (ruby25-bdb-0.6.6_6)	(dependent ports)
	! java/openjdk8 (openjdk8-8.222.10.1_2)	(interrupted by user)
	* devel/pycharm-ce (pycharm-ce-2019.2)
teetime! 2019年 10月21日 月曜日 14時10分46秒 JST

やはりまたしても OpenJDK8 のビルドが途中でハングして Ctrl-C で止めたりしているのだが、ruby-bdb については、どうも Ruby のバージョンが上がっているのに関連してうまくいっていないように思える?
こういうときは、/usr/ports/UPDATING というファイルを見て、すると、詳細は省略するが、20190909 の所に関係しそうな記述があったので、そこから辿れる指示に(途中まで)従ってみたりしたが.. ダメだった。

しかも作業の手順により portupgrade がアンインストールされ、かつ portupgrade の再ビルドも失敗するようになった。

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

% cd /var/tmp/log/Install/

% nice teetime -t portupgrade sudo pkg install portupgrade
logging (from the next line till the end) to portupgrade20191021.log
teetime! 2019年 10月21日 月曜日 14時35分53秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> sudo pkg install portupgrade
〜
teetime! 2019年 10月21日 月曜日 14時36分18秒 JST

何とか元に戻ったようだ。

あとは openjdk8 と pycharm-ce の portupgrade が失敗しているが..
ビルドログを眺めてみて思いついたのが、だめもとで、pkg delete openjdk8 を行い (依存関係で pycharm-ce もアンインストールされてしまう)、portinstall -s pycharm-ce をやり直したら.. 何故かいけた。

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

● 続々・VBoxService

前述の portupgrade により、virtualbox-ose-additions が、5.2.32_1 から 5.2.34 に上がった。

そこで、VBoxService が起動しない現象が直っていないか期待し、また /usr/local/etc/rc.d/vboxservice ファイルに追記していた内容が元に戻ってしまった。

このまま、VBoxService が、--disable-control 無しでも起動しないだろうか。

% ps ax | egrep -i vbox
 1008  -  Is      0:37.80 /usr/local/sbin/VBoxService --disable-control
 3696  -  IWs     0:00.00 /usr/local/bin/VBoxClient --clipboard
 3698  -  I       0:01.49 /usr/local/bin/VBoxClient --clipboard
 3702  -  IWs     0:00.00 /usr/local/bin/VBoxClient --display
 3704  -  S       0:00.39 /usr/local/bin/VBoxClient --display
 3705  -  IWs     0:00.00 /usr/local/bin/VBoxClient --seamless
 3707  -  I       0:00.35 /usr/local/bin/VBoxClient --seamless
 3708  -  IWs     0:00.00 /usr/local/bin/VBoxClient --draganddrop
 3710  -  I       8:36.55 /usr/local/bin/VBoxClient --draganddrop
17688  7  S+      0:00.00 egrep -i vbox

% sudo /usr/local/etc/rc.d/vboxservice stop
〜
Stopping vboxservice.
Waiting for PIDS: 1008.

% cd /

% sudo /usr/local/etc/rc.d/vboxservice start
Starting vboxservice.
VBoxService 5.2.34 r133883 (verbosity: 0) freebsd.amd64 (Oct 21 2019 10:49:20) release log
00:00:00.000084 main     Log opened 2019-10-21T05:02:24.650539000Z
00:00:00.000225 main     OS Product: FreeBSD
00:00:00.000253 main     OS Release: 12.0-RELEASE-p10
00:00:00.000296 main     OS Version: FreeBSD 12.0-RELEASE-p10 GENERIC
00:00:00.000319 main     Executable: /zfs/local/sbin/VBoxService
00:00:00.000322 main     Process ID: 22502
00:00:00.000325 main     Package type: BSD_64BITS_GENERIC (OSE)
00:00:00.102943 main     5.2.34 r133883 started. Verbose level = 0

% ps ax | egrep -i box
 3696  -  IWs     0:00.00 /usr/local/bin/VBoxClient --clipboard
 3698  -  I       0:01.49 /usr/local/bin/VBoxClient --clipboard
 3702  -  IWs     0:00.00 /usr/local/bin/VBoxClient --display
 3704  -  I       0:00.39 /usr/local/bin/VBoxClient --display
 3705  -  IWs     0:00.00 /usr/local/bin/VBoxClient --seamless
 3707  -  I       0:00.35 /usr/local/bin/VBoxClient --seamless
 3708  -  IWs     0:00.00 /usr/local/bin/VBoxClient --draganddrop
 3710  -  I       8:36.65 /usr/local/bin/VBoxClient --draganddrop
22559 17  S+      0:00.00 egrep -i box

だめやった..

先ほどと同じように、/usr/local/etc/rc.d/vboxservice の command= の直後に start_cmd="${command} --disable-control" を追記すると、今度は起動した。

% sudo /usr/local/etc/rc.d/vboxservice start
VBoxService 5.2.34 r133883 (verbosity: 0) freebsd.amd64 (Oct 21 2019 10:49:20) release log
00:00:00.000138 main     Log opened 2019-10-21T05:03:25.155361000Z
00:00:00.000218 main     OS Product: FreeBSD
00:00:00.000233 main     OS Release: 12.0-RELEASE-p10
00:00:00.000246 main     OS Version: FreeBSD 12.0-RELEASE-p10 GENERIC
00:00:00.000255 main     Executable: /zfs/local/sbin/VBoxService
00:00:00.000258 main     Process ID: 28936
00:00:00.000262 main     Package type: BSD_64BITS_GENERIC (OSE)
00:00:00.001601 main     5.2.34 r133883 started. Verbose level = 0

% ps ax | egrep -i box
 3696  -  IWs     0:00.00 /usr/local/bin/VBoxClient --clipboard
 3698  -  I       0:01.49 /usr/local/bin/VBoxClient --clipboard
 3702  -  IWs     0:00.00 /usr/local/bin/VBoxClient --display
 3704  -  S       0:00.39 /usr/local/bin/VBoxClient --display
 3705  -  IWs     0:00.00 /usr/local/bin/VBoxClient --seamless
 3707  -  I       0:00.35 /usr/local/bin/VBoxClient --seamless
 3708  -  IWs     0:00.00 /usr/local/bin/VBoxClient --draganddrop
 3710  -  I       8:36.78 /usr/local/bin/VBoxClient --draganddrop
28937  -  Ss      0:00.00 /usr/local/sbin/VBoxService --disable-control
28965 17  S+      0:00.00 egrep -i box

● /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))

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

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

前述で ports ツリーを更新したので、ビルドできるようになったりしないだろうか??

% cd /var/tmp/log/Install/

% nice +20 teetime -t firefox portinstall -s firefox
logging (from the next line till the end) to firefox20191021.log
teetime! 2019年 10月21日 月曜日 16時20分27秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s firefox
[Reading data from pkg(8) ... - 580 packages found - done]
〜
===>   firefox-70.0_2,1 depends on package: llvm90>0 - not found
===>  llvm90-9.0.0_1 needs Python 3.6 at least, but 2.7 was specified.
*** Error code 1

Stop.
make[1]: stopped in /zfs/ports/devel/llvm90
*** 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! 2019年 10月21日 月曜日 16時21分52秒 JST

むむっ。 llvm90 を単独でビルドを試みる

% nice +20 teetime -t llvm90_ portinstall -s llvm90
logging (from the next line till the end) to llvm90_20191021.log
teetime! 2019年 10月21日 月曜日 16時26分27秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s llvm90
[Reading data from pkg(8) ... - 581 packages found - done]
--->  [Executing a command as root: sudo /usr/bin/touch /var/db/pkgdb.fixme]
〜
Installing llvm90-9.0.0_1...
〜
===>  Cleaning for llvm90-9.0.0_1
teetime! 2019年 10月23日 水曜日 11時16分36秒 JST

そうすると何故かうまくいく。 firefox のビルドに戻る。

% nice +20 teetime -t firefox portinstall -sw firefox
logging (from the next line till the end) to firefox20191023.log
teetime! 2019年 10月23日 水曜日 13時26分16秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -sw firefox
[Reading data from pkg(8) ... - 588 packages found - done]
〜
cp: /zfs/ports/lang/rust/work/stage/zfs/local/lib/rustlib/x86_64-unknown-freebsd/lib/librustc_mir-5b21a9970e18fd06.rlib: No space left on device
echo: write error on stdout
chmod: /zfs/ports/lang/rust/work/stage/zfs/local/lib/rustlib/x86_64-unknown-freebsd/lib/librustc_mir-5b21a9970e18fd06.rlib: No space left on device
echo: write error on stdout
install: error: file creation failed. see logs at '/zfs/ports/lang/rust/work/stage/zfs/local/lib/rustlib/install.log'
echo: write error on stdout


command did not execute successfully: "sh" "/zfs/ports/lang/rust/work/rustc-1.38.0-src/build/tmp/dist/rust-std-1.38.0-x86_64-unknown-freebsd/install.sh" "--pref
ix=/zfs/ports/lang/rust/work/stage/zfs/local" "--sysconfdir=/zfs/ports/lang/rust/work/stage/usr/local/etc" "--datadir=/zfs/ports/lang/rust/work/stage/zfs/local/
share" "--docdir=/zfs/ports/lang/rust/work/stage/zfs/local/share/doc/rust" "--bindir=/zfs/ports/lang/rust/work/stage/zfs/local/bin" "--libdir=/zfs/ports/lang/ru
st/work/stage/zfs/local/lib" "--mandir=/zfs/ports/lang/rust/work/stage/usr/local/man" "--disable-ldconfig"
expected success, got: exit code: 1


Traceback (most recent call last):
  File "/zfs/ports/lang/rust/work/rustc-1.38.0-src/x.py", line 11, in 
    bootstrap.main()
  File "/zfs/ports/lang/rust/work/rustc-1.38.0-src/src/bootstrap/bootstrap.py", line 866, in main
    bootstrap(help_triggered)
  File "/zfs/ports/lang/rust/work/rustc-1.38.0-src/src/bootstrap/bootstrap.py", line 852, in bootstrap
    run(args, env=env, verbose=build.verbose)
  File "/zfs/ports/lang/rust/work/rustc-1.38.0-src/src/bootstrap/bootstrap.py", line 141, in run
    raise RuntimeError(err)
RuntimeError: failed to run: /zfs/ports/lang/rust/work/rustc-1.38.0-src/build/bootstrap/debug/bootstrap install --verbose --config ./config.toml --jobs 2
*** 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]
パスワード: 
sudo: パスワードの読み込みがタイムしました
〜
teetime! 2019年 10月23日 水曜日 17時52分06秒 JST

なんと、zfs 領域が足りなくなってエラーで止まってしまった (/usr/ports や /usr/local が zfs 領域に取られている)。
最初に仮想ディスクの大きさを 30GB としたが、ケチりすぎたかもしれない。
やはり zfs で容量を共有しているホームディレクトリ (/home/nsmrtks) から、消して大丈夫そうなファイルを消して、やり直す。

しかし、

% nice +20 teetime -t firefox portinstall -sw firefox
logging (from the next line till the end) to firefox20191024.log
teetime! 2019年 10月24日 木曜日 09時13分00秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -sw firefox
[Reading data from pkg(8) ... - 588 packages found - done]
〜
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! 2019年 10月24日 木曜日 09時25分46秒 JST

うーん。

● 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 xdu20191023.log
teetime! 2019年 10月23日 水曜日 09時06分51秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s xdu
[Reading data from pkg(8) ... - 581 packages found - done]
〜
teetime! 2019年 10月23日 水曜日 09時09分02秒 JST

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

% sudo du -kx / | xdu
〜

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

xdu (sort with n)

● xpdf をインストールする

% cd /var/tmp/log/Install/

% pkg search xpdf
ja-xpdf-jafont-3.03_3          Japanese font support for xpdf
ko-xpdf-kofont-3.03_4          Korean font support for xpdf
xpdf-4.01_2,1                  Display PDF files and convert them to other formats
xpdf3-3.04_11                  Display PDF files and convert them to other formats
xpdf4-4.01_2,1                 Display PDF files and convert them to other formats
xpdfopen-0.86                  Command line utility for PDF viewers

% nice teetime -t xpdf portinstall -s xpdf
logging (from the next line till the end) to xpdf20191024.log
teetime! 2019年 10月24日 木曜日 15時06分01秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s xpdf
[Reading data from pkg(8) ... - 587 packages found - done]
〜
teetime! 2019年 10月24日 木曜日 15時11分34秒 JST

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

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

% cd /var/tmp/log/Install/

% nice +20 teetime -t chromium portinstall -s chromium
logging (from the next line till the end) to chromium20191024.log
teetime! 2019年 10月24日 木曜日 15時18分26秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s chromium
[Reading data from pkg(8) ... - 591 packages found - done]
〜    
===>  Checking if noto-basic is already installed
===>  Switching to root credentials for 'install' target
Password:
sudo: timed out reading password
*** Error code 1

Stop.
make[2]: stopped in /usr/ports/x11-fonts/noto-basic
*** 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/portinstall20191024-80465-8bxtvo env make FETCH_BEFORE_ARGS=-q
** Fix the problem and try again.
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
パスワード: 
sudo: パスワードの読み込みがタイムしました
〜
teetime! 2019年 10月25日 金曜日 01時56分59秒 JST

時間がかかるので放置ししていたら sudo がタイムアウトしたのでもう一度。

% nice +20 teetime -t chromium portinstall -sw chromium
logging (from the next line till the end) to chromium20191025.log
teetime! 2019年 10月25日 金曜日 08時58分12秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -sw chromium
[Reading data from pkg(8) ... - 630 packages found - done]
〜
teetime! 2019年 10月25日 金曜日 09時01分50秒 JST

無事にビルド・インストールできた。 (もっと時間かかるかと思っていた)

Chromium の実行コマンドは chrome である。

% chrome &

無事に起動した。

● fcitx をインストールしてみる

uim で日本語入力・漢字変換が出来ることを期待したが、Chromium (chrome) や rxvt-unicode (urxvt) や Xfc4 のターミナルで、Shift-SPC でローマ字でひらがなは入力できるのだが、漢字変換が出来なかった。

このとき、uim-xim を起動したターミナル (urxvt) に、以下のような文字列が出ていた。

libuim: [fatal] 初期化失敗

今まで他の環境で uim を使っていてトラブルが出たことがなかったのだが.. (ただし旧環境の VirtualBox では SCIM を使用しており uim ではなかった)

そこで、やはり別の環境で動作実績のあった fcitx (ja-fcitx-mozc) をインストールしてみることにする。

% pkg search fcitx
fcitx-m17n-0.2.3_1             Multilingualization support for Fcitx
fcitx-qt5-1.2.3_4              Fcitx support for Qt5
fcitx-table-other-0.2.3        Table-based input methods for Fcitx
ja-fcitx-anthy-0.2.3_1         Anthy support for Fcitx
ja-fcitx-mozc-2.23.2815.102.00_5 Mozc engine for Fcitx
ja-fcitx-skk-0.1.4_3           SKK support for Fcitx
ko-fcitx-hangul-0.3.0_1        Hangul support for Fcitx
zh-fcitx-4.2.9.6_3             Flexible Input Method Framework
zh-fcitx-chewing-0.2.3_1       Chewing support for Fcitx
zh-fcitx-cloudpinyin-0.3.6_1   Cloud-based Pinyin module for Fcitx
zh-fcitx-configtool-0.4.9      Fcitx IM framework configuration tool
zh-fcitx-libpinyin-0.5.3_2     Libpinyin support for Fcitx
zh-fcitx-rime-0.3.2_1          RIME support for Fcitx
zh-fcitx-sunpinyin-0.4.2_1     SunPinyin support for Fcitx
zh-fcitx-table-extra-0.3.8_1   Table-based input methods for Fcitx
zh-fcitx-ui-light-0.1.3_2      Alternative light weight UI for Fcitx
zh-scim-fcitx-3.1.1_9          SCIM IMEngine module for fcitx

% cd /var/tmp/log/Install/

% nice +20 teetime -t ja-fcitx-mozc_ portinstall -s ja-fcitx-mozc
logging (from the next line till the end) to ja-fcitx-mozc_20191025.log
teetime! 2019年 10月25日 金曜日 09時34分56秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s ja-fcitx-mozc
[Reading data from pkg(8) ... - 633 packages found - done]
〜
Installing ja-fcitx-mozc-2.23.2815.102.00_5...
To activate fcitx-mozc, please add the following into ~/.xinitrc,
~/.xsession, or ~/.kde4/env (for KDE4):

export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=xim
export XMODIFIERS=@im=fcitx
/usr/local/bin/mozc start
fcitx -r -d

〜
teetime! 2019年 10月25日 金曜日 10時19分11秒 JST

無事にビルド・インストールは出来た。

ビルドのメッセージに出ているように環境変数を設定し、fcitx を起動する。 (/usr/local/bin/mozc start は既に実行していた)
また uim-xim を停止させる (順番が逆だったかも)。

% setenv GTK_IM_MODULE fcitx

% setenv QT_IM_MODULE xim

% setenv XMODIFIERS @im=fcitx

% fcitx -r -d

% ps ax | egrep uim
20330  9  S       0:01.98 uim-xim
20333  9  I       0:00.10 /usr/local/libexec/uim-helper-server
20341  9  I       0:00.17 /usr/local/libexec/uim-candwin-gtk
73062 17  S+      0:00.00 egrep uim

% killall uim-xim
〜

% ps ax | egrep uim
73068 17  S+      0:00.00 egrep uim

この環境変数を設定したターミナルから chrome を起動し直すと、Ctrl-SPC でローマ字かな変換できた後、SPC で無事に漢字変換できることを確認した。

..のだが、この urxvt から emacs を起動すると、Ctrl-SPC が fcitx に食われてしまい、Emacs の set-mark-command が実行できなくなった。

fcitx-configtool というコマンドがあるようだが、これを実行すると、~/.config/fcitx/config ファイルが Mousepad というテキストエディタ? で開いたような画面が出てきた。 また、fcitx-configtool がインストールされていないようなメッセージが出た。

zh-fcitx-configtool というのをインストールしていないようなので (先ほどの pkg search を参照)、インストールしてみる。

% pkg info | egrep fcitx
ja-fcitx-mozc-2.23.2815.102.00_5 Mozc engine for Fcitx
zh-fcitx-4.2.9.6_3             Flexible Input Method Framework

% cd /var/tmp/log/Install/

% nice teetime -t zh-fcitx-configtool_ portinstall -s zh-fcitx-configtool
logging (from the next line till the end) to zh-fcitx-configtool_20191025.log
teetime! 2019年 10月25日 金曜日 10時44分58秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s zh-fcitx-configtool
[Reading data from pkg(8) ... - 645 packages found - done]
〜
=> fcitx-configtool-0.4.9.tar.xz doesn't seem to exist in /usr/ports/distfiles/fcitx.
=> /usr/ports/distfiles/fcitx is not writable by you; cannot fetch.
*** Error code 1

Stop.
make[1]: stopped in /zfs/ports/chinese/fcitx-configtool
*** Error code 1

Stop.
make: stopped in /zfs/ports/chinese/fcitx-configtool
** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portinstall20191025-73527-vl2yaf 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)
	! chinese/fcitx-configtool	(unknown build error)
teetime! 2019年 10月25日 金曜日 10時46分17秒 JST

おやっ?

% ls -ld /usr/ports/distfiles/fcitx
drwxr-xr-x  2 root  wheel  512 10月 25 09:37 /usr/ports/distfiles/fcitx/

% sudo chown nsmrtks /usr/ports/distfiles/fcitx

% nice teetime -t zh-fcitx-configtool_ portinstall -sw zh-fcitx-configtool
conflicting zh-fcitx-configtool_20191025.log
logging (from the next line till the end) to zh-fcitx-configtool_2019102510.log
teetime! 2019年 10月25日 金曜日 10時46分52秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -sw zh-fcitx-configtool
[Reading data from pkg(8) ... - 645 packages found - done]
〜
teetime! 2019年 10月25日 金曜日 10時47分48秒 JST

無事にビルド・インストール出来た。

今度は fcitx-configtool で、GUI の設定ウィンドウが出たので、「全体の設定」という所から、「入力メソッドのオンオフ」が、『CTRL_SPACE』になっていた所を、『SHIFT_SPACE』に変更して、「適用」を押した後、fcitx-configtool を終了させた。

fcitx-configtool

これで、Chromium では Shift-SPC で fcitx 入力がオンオフするようになったが、Emacs や urxvt では、Shift-SPC で fcitx がオンせず、まさかと思い Chromium を終了して再度起動させると Shift-SPC は効かなくなっていた。
??
あせったが、killall fcitx して fcitx -r -d し直すと、正常になった。
大丈夫かな..

~/.vnc/xstartup (筆者は tcsh で実行) の ja-uim-mozc 用の設定を、ja-fcitx-mozc 用に変更した。

#!/bin/tcsh
〜
setenv GTK_IM_MODULE fcitx
setenv QT_IM_MODULE xim
setenv XMODIFIERS @im=fcitx
/usr/local/bin/mozc start
fcitx -r -d
〜

● hald を有効にする

ふと、lshal というコマンドが存在することを知った。 しかし、動かなかった。

% lshal 
Could not initialise connection to hald.
Normally this means the HAL daemon (hald) is not running or not ready.
1で終了しました

/usr/local/etc/rc.d/hald というファイルがいつの間にか存在していた。 が、hald は有効にしていなかった。
Xfce と共に hal がインストールされていたようだ。

以下を /etc/rc.conf に追記して、sudo /usr/local/etc/rc.d/hald start を実行した。

# 2019-10-25 nsmrtks
# (see /usr/local/etc/rc.d/hald)
hald_enable="YES"		# to enable the HAL daemon

これで lshal も動作するようになった。

% lshal | head

Dumping 47 device(s) from the Global Device List:
-------------------------------------------------
〜

● portupgrade 途中で出る「Copy failed!」エラーについて

portupgrade (pvc.sh) を実行していると、たまに以下のようなエラーが出ていて失敗することがある。 (昔は出なかったように思うのだが..)

〜
--->  Deinstalling 'boost-libs-1.71.0_1'
--->  Preserving /usr/local/lib/libboost_atomic.so.1 as /usr/local/lib/compat/pkg/libboost_atomic.so.1
--->  Preserving /usr/local/lib/libboost_atomic.so.1.71 as /usr/local/lib/compat/pkg/libboost_atomic.so.1.71
cp: symlink: libboost_atomic.so.1.71.0: File exists
Copy failed!
[Reading data from pkg(8) ... - 646 packages found - done]
** Listing the failed packages (-:ignored / *:skipped / !:failed)
	! boost-libs-1.71.0_1	(copy failed)
〜

このようなとき、上にも出ている /usr/local/lib/compat/pkg/ 以下に、指し示す先が無いシンボリックリンクがたいてい存在しており (上の例でいうと libboost_atomic.so.1.71.0 のようなもの)、それを削除すると、うまくいく。

今回、以下のようにして一括して削除してみた。

% cd /usr/local/lib/compat/pkg/

% file libboost_*
〜

% file *
〜

% sudo rm -fv `file * | egrep 'broken symbolic link' | awk -F: '{ print $1 }'`

そうして portupgrade (/var/tmp/log にて sh pvc.sh -w) をやり直すと、うまくいった。

● BSDstats をインストール・実行する (2019-10-30 追記)

% 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 bsdstats20191028.log
teetime! 2019年 10月28日 月曜日 08時53分45秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s bsdstats
[Reading data from pkg(8) ... - 645 packages found - done]
〜
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

〜
teetime! 2019年 10月28日 月曜日 08時55分08秒 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 の統計情報に追加される。

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

以上


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