「Oracle VM VirtualBox マネージャー」の画面で、「fb140」が選択された状態で『起動』押す!
root でログイン。
freebsd-update fetch を実行する。
(なおこれはインストール後も定期的に行った方が良いもの。 後述)
root@fb140:~ # freebsd-update fetch
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching public key from update2.freebsd.org... done.
Fetching metadata signature for 14.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 294 patches.....10....20....30....40....50....60....70....80....90....100....110....120....〜....290.. done.
Applying patches... done.
Fetching 2 files... . done.
〜
The following files will be added as part of updating to
14.0-RELEASE-p5:
/usr/src/contrib/tzdata/checknow.awk
/usr/src/contrib/tzdata/zonenow.tab
〜
The following files will be updated as part of updating to
14.0-RELEASE-p5:
〜
ちなみに、ここで uname -a を実行した所、以下のようであった。
root@fb140:~ # uname -a
FreeBSD fb140.magic.or 14.0-RELEASE FreeBSD 14.0-RELEASE #0 releng/14.0-n265380-f9716eee8ab4: Fri Nov 10 05:57:23 UTC
2023 root@releng1.nyi.freebsd.org:/usr/obj/usr/src/amd64.amd64/sys/GENERIC amd64
また、freebsd-version を実行した所、以下のようであった。
root@fb140:~ # freebsd-version
14.0-RELEASE
次に freebsd-update install を実行する。
root@fb140:~ # freebsd-update install
Installing updates...
Restarting sshd after upgrade
Performing sanity check on sshd configuration.
Stopping sshd.
Performing sanity check on sshd configuration.
Starting sshd.
Scanning /usr/share/certs/untrusted for certificates...
Scanning /usr/share/certs/trusted for certificates...
done.
今回 kernel に関係しそうな更新も見えており、ここで再起動する。 (あるいはひとしきり作業を続けた後に再起動してもいいだろう)
root@fb140:~ # reboot
再び root でログインし、uname -a を実行した所、今度は以下のようであった。
root@fb140:~ # uname -a
FreeBSD fb140.magic.or 14.0-RELEASE-p5 FreeBSD 14.0-RELEASE-p5 #0: Tue Feb 13 23:37:36 UTC 2024 root@amd64-builder
.daemonology.net:/usr/obj/usr/src/amd64.amd64/sys/GENERIC amd64
また、freebsd-version を実行した所、今度は以下のようであった。
root@fb140:~ # freebsd-version
14.0-RELEASE-p5
/etc/rc.conf ファイルを編集する。
root@fb140:~ # vi /etc/rc.conf
以下を追記。 (同ファイル内の上の方に似たような行があるのでそれをコピーすると入力の手間を省ける)
ifconfig_em1=""
ifconfig_em1_ipv6="inet6 accept_rtadv"
ifconfig_em2="inet 192.168.56.140 netmask 255.255.255.0"
ifconfig_em2_ipv6="inet6 accept_rtadv"
ここで、em2 に与えた 192.168.56.140 などという固定 IPv4 アドレスについては、em2 には VirtualBox の DHCP サーバがいるのだが、そのアドレス範囲と重複しないように、「ツール」→「ネットワーク(マネージャー)」→「ホストオンリーネットワーク」の「DHCP サーバー」の設定を変更してある。 (初期状態では重複していた)
(変更後)
ここで reboot すると、以下のように IP アドレスが割り当たっていた。 (vtnet0 は未割り当て)
root@fb140:~ # ifconfig -a
em0: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
options=48505bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,LRO,VLAN_HWFILTER,VLAN_HWTSO,HWSTATS,MEXTPG>
ether 08:00:27:2b:f4:f0
inet 10.0.2.15 netmask 0xffffff00 broadcast 10.0.2.255
inet6 fe80::a00:27ff:fe2b:f4f0%em0 prefixlen 64 scopeid 0x1
media: Ethernet autoselect (1000baseT <full-duplex>)
status: active
nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
em1: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
options=48505bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,LRO,VLAN_HWFILTER,VLAN_HWTSO,HWSTATS,MEXTPG>
ether 08:00:27:59:d2:50
inet6 fe80::a00:27ff:fe59:d250%em1 prefixlen 64 scopeid 0x2
inet6 〜〜:〜〜:〜〜:〜〜:〜〜:〜〜:〜〜:〜〜 prefixlen 64 autoconf pltime 12600 vltime 14400
media: Ethernet autoselect (1000baseT <full-duplex>)
status: active
nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
em2: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
options=48505bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,LRO,VLAN_HWFILTER,VLAN_HWTSO,HWSTATS,MEXTPG>
ether 08:00:27:25:ae:af
inet 192.168.56.140 netmask 0xffffff00 broadcast 192.168.56.255
inet6 fe80::a00:27ff:fe25:aeaf%em2 prefixlen 64 scopeid 0x3
media: Ethernet autoselect (1000baseT <full-duplex>)
status: active
nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
vtnet0: flags=1008802<BROADCAST,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
options=4c07bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,LRO,VLAN_HWTSO,LINKSTATE,TXCSUM_IPV6>
ether 08:00:27:b5:bf:49
media: Ethernet autoselect (10Gbase-T <full-duplex>)
status: active
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
lo0: flags=1008049<UP,LOOPBACK,RUNNING,MULTICAST,LOWER_UP> metric 0 mtu 16384
options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x5
groups: lo
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
これは必須ではないが、高速化を図るため、設定してみる。
まず、/tmp に何か存在していたので、以下のようにして全て削除しておいた。
root@fb140:~ # cd /tmp
root@fb140:/tmp # ls -lA
total 16
drwxrwxrwt 2 root wheel 512 Mar 2 16:36 .ICE-unix
drwxrwxrwt 2 root wheel 512 Mar 2 16:36 .X11-unix
drwxrwxrwt 2 root wheel 512 Mar 2 16:36 .XIM-unix
drwxrwxrwt 2 root wheel 512 Mar 2 16:36 .font-unix
root@fb140:/tmp # rmdir .*-unix
root@fb140:/tmp # ls -lA
total 0
/etc/rc.conf に追記するために、まずは以下のようにする。
root@fb140:/tmp # egrep ^tmp /etc/defaults/rc.conf >> /etc/rc.conf
(「>>」で追記する。 くれぐれも間違って「>」で上書きしないように注意する。)
次に
root@fb140:/tmp # vi /etc/rc.conf
追記した部分が以下などのようになるように編集。
tmpmfs="YES" # Set to YES to always create an mfs /tmp, NO to never
tmpsize="7g" # Size of mfs /tmp if created
tmpsize を 7GB (7g) にしているのは、これくらいないと ports のコンパイル
(後述) で /tmp が溢れた記憶がある。
(ちなみに NetBSD のインストーラではメモリーサイズの 25%
がデフォルトのようだ)
ここで reboot すると、/tmp が正しく Memory Disk になっていた。
root@fb140:~ # df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ada0p2 4.8G 3.2G 1.3G 72% /
devfs 1.0K 0B 1.0K 0% /dev
/dev/ada0p4 2.9G 553M 2.1G 20% /var
tmpfs 7.0G 4.0K 7.0G 0% /tmp
root@fb140:~ # ls -la /tmp
total 4
drwxrwxrwt 6 root wheel 256 Mar 2 16:59 .
drwxr-xr-x 20 root wheel 1024 Mar 2 16:58 ..
drwxrwxrwt 2 root wheel 0 Mar 2 16:59 .ICE-unix
drwxrwxrwt 2 root wheel 0 Mar 2 16:59 .X11-unix
drwxrwxrwt 2 root wheel 0 Mar 2 16:59 .XIM-unix
drwxrwxrwt 2 root wheel 0 Mar 2 16:59 .font-unix
少し筆者の環境に特有の話である。
現在の /etc/hosts の内容を一応バックアップしておき..
root@fb140:~ # cd /etc
root@fb140:/etc # ls -ld hosts*
-rw-r--r-- 1 root wheel 1035 Nov 10 16:55 hosts
-rw-r--r-- 1 root wheel 3385 Nov 10 17:06 hosts.allow
-rw-r--r-- 1 root wheel 41 Nov 10 16:55 hosts.equiv
-rw-r--r-- 1 root wheel 31 Nov 10 17:46 hosts.lpd
root@fb140:/etc # cp -ip hosts hosts.ORIG
筆者の旧環境 (fb130 というもの) の /etc/hosts (様々なホストの IP アドレスが書かれている) を scp してきて..
root@fb140:/etc # cd
root@fb140:~ # scp -p nsmrtks@192.168.56.130:/etc/hosts .
〜
root@fb140:~ # ls -ld hosts
-rw-r--r-- 1 root wheel 5762 Feb 17 22:36 hosts
fb140 (即ちこの新環境) の /etc/hosts と結合して、重複を調整しつつ..
root@fb140:~ # cat hosts >> /etc/hosts
root@fb140:~ # vi /etc/hosts
fb140 の IPv6 アドレス (リンクローカルアドレス) も以下のように追加しておいた。
fe80::a00:27ff:fe25:aeaf%em2 fb140.magic.or fb140 fb140c
先ほども scp してみせた通り、同じホスト上の VirtualBox の仮想マシンどうしは、「ホストオンリーアダプター」を通して通信できる。 それは、これまでの経緯により、fb140 においては 仮想マシンの作成 時に「アダプター3」として割り当てており、em2 として見えている。
root@fb140:~ # ifconfig em2
em2: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
options=48505bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,LRO,VLAN_HWFILTER,VLAN_HWTSO,HWSTATS,MEXTPG>
ether 08:00:27:25:ae:af
inet 192.168.56.140 netmask 0xffffff00 broadcast 192.168.56.255
inet6 fe80::a00:27ff:fe25:aeaf%em2 prefixlen 64 scopeid 0x3
media: Ethernet autoselect (1000baseT <full-duplex>)
status: active
nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
筆者の旧環境 (fb130) の、(リンクローカル) IPv6 アドレスを /etc/hosts に記述したので、そのホスト名で通信できることを確認。
root@fb140:~ # ping6 fb130c
PING6(56=40+8+8 bytes) fe80::a00:27ff:fe25:aeaf%em2 --> fe80::a00:27ff:fe55:ac0c%em2
16 bytes from fe80::a00:27ff:fe55:ac0c%em2, icmp_seq=0 hlim=64 time=1.053 ms
^C
--- fb130.magic.or ping6 statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 1.053/1.053/1.053/0.000 ms
/usr/ports と、/usr/local と、/home/nsmrtks というもの (ホームディレクトリ) を、ZFS 上に置くことにする。
ただし、/home/nsmrtks というディレクトリは既に存在しているので、リネームして一応バックアップしておく。
root@fb140:~ # cd /home
root@fb140:/home # ls -lA
total 4
drwxr-xr-x 2 nsmrtks nsmrtks 512 Feb 24 23:21 nsmrtks
root@fb140:/home # mv -i nsmrtks nsmrtks.BACK
そして、
root@fb140:/home # cd
root@fb140:~ # df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ada0p2 4.8G 3.2G 1.3G 72% /
devfs 1.0K 0B 1.0K 0% /dev
/dev/ada0p4 2.9G 553M 2.1G 20% /var
tmpfs 7.0G 4.0K 7.0G 0% /tmp
root@fb140:~ # gpart show
=> 40 83886000 ada0 GPT (40G)
40 1024 1 freebsd-boot (512K)
1064 10485760 2 freebsd-ufs (5.0G)
10486824 16777216 3 freebsd-swap (8.0G)
27264040 6291456 4 freebsd-ufs (3.0G)
33555496 50330544 5 freebsd-zfs (24G)
上記に見えるように、ZFS 用に用意したパーティションが ada0p5 であることを確認した。 (gpart show で、freebsd-zfs の行が、ada0 の列が 5 になっており、GPT の場合は「p」が間にはさまるようだ。)
zpool create を実行する。 プール名は「zfs」としておいた
root@fb140:~ # zpool create zfs ada0p5
ZFS filesystem version: 5
ZFS storage pool version: features support (5000)
次に zfs create で、/usr/ports 用と /usr/local 用と /home/nsmrtks
用のファイルシステムを作成する。
mountpoint も同時に設定することにする。
(以前は /usr/local を、mountpoint
にする代わりに、シンボリックリンクにしていたが、ports
のビルドが正常にいかないことがあることが分かった。)
また zfs set で compression=lz4 (圧縮) を指定しておく。
root@fb140:~ # zfs create -o mountpoint=/usr/ports zfs/ports
root@fb140:~ # zfs set compression=lz4 zfs/ports
root@fb140:~ # zfs create -o mountpoint=/usr/local zfs/local
root@fb140:~ # zfs set compression=lz4 zfs/local
root@fb140:~ # zfs create -o mountpoint=/home/nsmrtks zfs/nsmrtks
root@fb140:~ # zfs set compression=lz4 zfs/nsmrtks
root@fb140:~ # df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ada0p2 4.8G 3.2G 1.3G 72% /
devfs 1.0K 0B 1.0K 0% /dev
/dev/ada0p4 2.9G 553M 2.1G 20% /var
tmpfs 7.0G 4.0K 7.0G 0% /tmp
zfs 23G 24K 23G 0% /zfs
zfs/ports 23G 24K 23G 0% /usr/ports
zfs/local 23G 24K 23G 0% /usr/local
zfs/nsmrtks 23G 24K 23G 0% /home/nsmrtks
起動時に ZFS が自動的にマウントされるように、/etc/rc.conf に設定しておく。
root@fb140:~ # egrep zfs_enable /etc/defaults/rc.conf >> /etc/rc.conf
root@fb140:~ # vi /etc/rc.conf
/etc/rc.conf の追加行が以下のようになるように編集する。
zfs_enable="YES" # Set to YES to automatically mount ZFS file systems
/usr/ports のオーナーも設定しておく。
root@fb140:~ # cd /usr
root@fb140:/usr # ls -ld ports
drwxr-xr-x 2 root wheel 2 Mar 2 18:46 ports
root@fb140:/usr # chown nsmrtks ports
root@fb140:/usr # ls -ld ports
drwxr-xr-x 2 nsmrtks wheel 2 Mar 2 18:46 ports
ここで reboot すると、ZFS が自動的にマウントされていた。
root@fb140:~ # df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ada0p2 4.8G 3.2G 1.3G 72% /
devfs 1.0K 0B 1.0K 0% /dev
/dev/ada0p4 2.9G 553M 2.1G 20% /var
tmpfs 7.0G 4.0K 7.0G 0% /tmp
zfs/ports 23G 24K 23G 0% /usr/ports
zfs/local 23G 24K 23G 0% /usr/local
zfs/nsmrtks 23G 24K 23G 0% /home/nsmrtks
zfs 23G 24K 23G 0% /zfs
/home/nsmrtks のオーナーを設定するのを忘れていた。 設定しておく。
root@fb140:~ # ls -l /home
total 5
drwxr-xr-x 2 root wheel 2 Mar 2 18:47 nsmrtks
drwxr-xr-x 2 nsmrtks nsmrtks 512 Feb 24 23:21 nsmrtks.BACK
root@fb140:~ # chown nsmrtks:nsmrtks /home/nsmrtks
root@fb140:~ # ls -l /home
total 5
drwxr-xr-x 2 nsmrtks nsmrtks 2 Mar 2 18:47 nsmrtks
drwxr-xr-x 2 nsmrtks nsmrtks 512 Feb 24 23:21 nsmrtks.BACK
これも筆者の環境だけかもしれない。
筆者は、/usr/ports/distfiles
(ports でビルドを行う時に取得してきたファイルが置かれる場所) を、VirtualBox
の仮想ディスクごと分離している。
そして、旧環境から新環境へ移行する際には、(内容を残したまま)
マウントを付け替えてきた。
ただし、最近サイズが手狭になってきたので、今回は付け替えるのではなく、よりサイズが大きなものを新規に作成する。
いったん fb140 仮想マシンを電源 OFF (shutdown -p now) する。
そうしたら、「Oracle VM VirtualBox マネージャー」の画面で「fb140」を選択し『設定』→『ストレージ』へと進む。
下の方の「◆」に「+」のアイコン (「コントローラーを追加」) を押し、「LsiLogic SAS (SAS)」を選択する。 (SAS にしなくてもよいが深い理由はない)
「コントローラー: LsiLogic SAS」が追加された。
さらに、「コントローラー: LsiLogic SAS」の右側の方にある「■」に「+」のようなアイコン (「ハードディスクの追加」) を選択し..
『作成』を押す。
「VDI (VirtualBox Disk Image)」が選択されたままにしておき『次へ』押す。
「全サイズの事前割当て」にチェックを入れてみる。 『次へ』押す。
ファイルの場所とファイル名について、fb140
のディレクトリの上、「VirtualBox VMs」の直下に、distfiles20.vdi
というファイルとして作成するようにする。
サイズを (16.00 GB になっていたが)「20.00 GB」とする。
しばらく時間がかかって、「Not Attached」の所に distfiles20.vdi が付いた。
distfiles20.vdi にカーソルが当たったまま、『選択』押す。
「コントローラー: LsiLogic SAS」配下に distfiles20.vdi が現れた。
忘れずに「OK」押す。
さて、fb140 を再び起動する。
追加した仮想ハードディスクは以下のように見えている。
(起動時に表示される他 dmesg コマンドでも後から確認できる)
〜
da0 at mpt0 bus 0 scbus2 target 0 lun 0
da0: <VBOX HARDDISK 1.0> Fixed Direct Access SPC-3 SCSI device
da0: 300.000MB/s transfers
da0: Command Queueing enabled
da0: 20480MB (41943040 512 byte sectors)
〜
これを、/home/distfiles
というディレクトリにマウントすることとし、/usr/ports/distfiles
からシンボリックリンクを張ることとする。
(なぜ /usr/ports/distfiles に直接マウントしないかというと、/home/
の下の distfiles/ を NFS エクスポートしたいという事情がある。)
ディレクトリの作成を行う。
root@fb140:~ # mkdir /home/distfiles
root@fb140:~ # chown nsmrtks /home/distfiles
root@fb140:~ # ls -l /home
total 9
drwxr-xr-x 2 nsmrtks wheel 512 Mar 2 20:40 distfiles
drwxr-xr-x 2 nsmrtks nsmrtks 2 Mar 2 18:47 nsmrtks
drwxr-xr-x 2 nsmrtks nsmrtks 512 Feb 24 23:21 nsmrtks.BACK
後日気づいたが、上でやっている chown は、mount すると無意味なようだ。 (後述)
今回、まっさらの仮想ディスクなので、GPT の作成からパーティションの作成にファイルシステムの newfs まで必要である。
まず GPT の作成。
root@fb140:~ # gpart show da0
gpart: No such geom: da0.
root@fb140:~ # gpart create -s gpt da0
da0 created
root@fb140:~ # gpart show da0
=> 40 41942960 da0 GPT (20G)
40 41942960 - free - (20G)
root@fb140:~ # gpart show
=> 40 83886000 ada0 GPT (40G)
40 1024 1 freebsd-boot (512K)
1064 10485760 2 freebsd-ufs (5.0G)
10486824 16777216 3 freebsd-swap (8.0G)
27264040 6291456 4 freebsd-ufs (3.0G)
33555496 50330544 5 freebsd-zfs (24G)
=> 40 41942960 da0 GPT (20G)
40 41942960 - free - (20G)
パーティション (freebsd-ufs) の作成。
root@fb140:~ # gpart add -t freebsd-ufs da0
da0p1 added
root@fb140:~ # gpart show
=> 40 83886000 ada0 GPT (40G)
40 1024 1 freebsd-boot (512K)
1064 10485760 2 freebsd-ufs (5.0G)
10486824 16777216 3 freebsd-swap (8.0G)
27264040 6291456 4 freebsd-ufs (3.0G)
33555496 50330544 5 freebsd-zfs (24G)
=> 40 41942960 da0 GPT (20G)
40 41942960 1 freebsd-ufs (20G)
そして newfs (ファイルシステムの作成)。 (このオプションで合ってるかな..)
root@fb140:~ # newfs -U -j da0p1
/dev/da0p1: 20480.0MB (41942960 sectors) block size 32768, fragment size 4096
using 33 cylinder groups of 625.22MB, 20007 blks, 80128 inodes.
with soft updates
super-block backups (for fsck_ffs -b #) at:
192, 1280640, 2561088, 3841536, 5121984, 6402432, 7682880, 8963328, 10243776,
11524224, 12804672, 14085120, 15365568, 16646016, 17926464, 19206912,
20487360, 21767808, 23048256, 24328704, 25609152, 26889600, 28170048,
29450496, 30730944, 32011392, 33291840, 34572288, 35852736, 37133184,
38413632, 39694080, 40974528
Using inode 4 in cg 0 for 167772160 byte journal
newfs: soft updates journaling set
vi /etc/fstab で、以下を /etc/fstab に追記した。
/dev/da0p1 /home/distfiles ufs rw 2 2
シンボリックリンクの作成をここで行った。
root@fb140:~ # cd /usr/ports
root@fb140:/usr/ports # ls -ld distfiles
ls: distfiles: No such file or directory
root@fb140:/usr/ports # ln -s /home/distfiles
root@fb140:/usr/ports # ls -ld distfiles
lrwxr-xr-x 1 root wheel 15 Mar 2 20:52 distfiles -> /home/distfiles
ports の取得時に障害となってしまったので、このシンボリックリンクは後の方で一旦削除して再作成している。(後述)
mount する。 (シンボリックリンクを作成したので /usr/ports/distfiles が見えることも確認している)
root@fb140:/usr/ports # mount /home/distfiles
root@fb140:/usr/ports # ls -a distfiles
. .. .snap .sujournal
root@fb140:/usr/ports # df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ada0p2 4.8G 3.2G 1.3G 72% /
devfs 1.0K 0B 1.0K 0% /dev
/dev/ada0p4 2.9G 553M 2.1G 20% /var
tmpfs 7.0G 4.0K 7.0G 0% /tmp
zfs/nsmrtks 23G 24K 23G 0% /home/nsmrtks
zfs/ports 23G 24K 23G 0% /usr/ports
zfs 23G 24K 23G 0% /zfs
zfs/local 23G 24K 23G 0% /usr/local
/dev/da0p1 19G 160M 18G 1% /home/distfiles
root@fb140:/usr/ports # mount
/dev/ada0p2 on / (ufs, local, soft-updates, journaled soft-updates)
devfs on /dev (devfs)
/dev/ada0p4 on /var (ufs, local, soft-updates, journaled soft-updates)
tmpfs on /tmp (tmpfs, local)
zfs/nsmrtks on /home/nsmrtks (zfs, local, nfsv4acls)
zfs/ports on /usr/ports (zfs, local, nfsv4acls)
zfs on /zfs (zfs, local, nfsv4acls)
zfs/local on /usr/local (zfs, local, nfsv4acls)
/dev/da0p1 on /home/distfiles (ufs, local, soft-updates, journaled soft-updates)
後日気づいたが、先ほど /home/distfiles に対して実行した chown は、mount
すると無意味なようだ (root:wheel のディレクトリになってしまっていた)。
そこで、mount した後に、あらためて chown nsmrtks:nsmrtks /home/distfiles
を実行した。
root@fb140:~ # ls -la /home
total 17
drwxr-xr-x 5 root wheel 512 Mar 2 20:40 .
drwxr-xr-x 21 root wheel 1024 Mar 27 19:33 ..
drwxr-xr-x 3 nsmrtks nsmrtks 1024 Mar 27 20:40 distfiles
drwxr-xr-x 2 nsmrtks nsmrtks 2 Mar 2 18:47 nsmrtks
drwxr-xr-x 2 nsmrtks nsmrtks 512 Feb 24 23:21 nsmrtks.BACK
これも、必要なのは筆者の環境だけかもしれない。
筆者は、新環境 (すなわち今インストール中のこの環境「fb140」) を立ち上げてからも、引き継ぎのためやバックアップのために、旧環境もしばらく残して運用することにしており、その際、ホームディレクトリや /usr/ports/distfiles (前述) を旧環境から新環境に移動して切り替え、旧環境からは NFS でそのまま参照するようにしている。
NFS というと、どのディレクトリをエクスポートするかという設定が必要だが、/etc/exports ファイルと、ZFS の sharenfs の二段構えで行くことにする。
上の方で、筆者の旧環境 (fb130) の、(リンクローカル) IPv6 アドレスを /etc/hosts に記述しており、FreeBSD の NFS はこれによりホスト名で可能である。
まず /etc/exports に以下のように記述することにする。
# 2019-09-18,20,2020-01-29,2021-05-08,2024-03-02 nsmrtks
V4: /home
/home/distfiles fb130c fb121c
# EoF
先に /home/distfiles の方の行について解説すると、これは /home/distfiles ディレクトリをホスト fb130c と fb121c に NFS export している。
V4: /home という行について、これは NFSv4 を使用している。
/home というディレクトリを NFSv4 tree root にするという指定になっている。
そして /home については、ZFS の
sharenfs の指定と組み合わせて設定することにする。
ZFS の sharenfs の設定が未だだが、先に
NFS サーバを立ち上げる設定をしてみる。
それには、以下のように実行して..
(繰り返しになるが、「>>」で追記するのであり、
くれぐれも間違って「>」で上書きしないように注意する。)
root@fb140:~ # egrep ^nfs /etc/defaults/rc.conf >> /etc/rc.conf
/etc/rc.conf に以下のように追記されるように編集した。
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」という名前を設定した。 これはサーバ側(すなわちこのホスト)とクライアント側で合わせる必要がある。
このタイミングで、作業時間の都合で、一旦シャットダウン / 電源 OFF した。
次に電源 ON すると、NFS サーバは自動的に起動していた。
root@fb140:~ # service nfsd status
nfsd is running as pid 1156 1158.
root@fb140:~ # showmount -e
Exports list on localhost:
/home/distfiles fb130.magic.or fb121.magic.or
この段階で、ホスト fb130c 及び fb121c から、fb140 の
/distfiles が NFS マウントできるようになるだろう..
たとえば fb130 (fb130c) については、fb130 環境にて、fb140c を /etc/hosts
に追加、/etc/fstab を以下のように書き換えて
(2021-05-03 〜 の下の 1行をコメントアウトし、2024-03-27 〜
と下の 2行を追加した。)、
〜
# 2021-05-03 nsmrtks
#/dev/da0p1 /home/distfiles ufs rw 2 2
# 2024-03-27 nsmrtks
/dev/da0p1 /distfiles_old ufs rw 2 2
fb140c:/distfiles /home/distfiles nfs rw,nfsv4
〜
fb130 を再起動すると (fb130 を起動したまま既存の /home/distfiles を umount したかったが、使用中と言われどうしても umount 出来なかったので)、以下のように自動的に mount され、アクセスも出来るらしいことを確認した。
% mount
〜
fb140c:/distfiles on /home/distfiles (nfs)
% df -h
Filesystem Size Used Avail Capacity Mounted on
〜
fb140c:/distfiles 19G 160M 19G 1% /home/distfiles
% ls -a /home/distfiles/
./ ../ .snap/ .sujournal
なお試しに /etc/fstab を使わずに mount する場合は、mount コマンドに -o nfsv4 を付けないと、エラーになって mount 出来なかったので注意。% sudo mount -t nfs fb140c:/distfiles /mnt パスワード: 〜 [tcp6] fb140c:/distfiles: nfsd: RPCPROG_NFS: RPC: Remote system error - No route to host ^C % sudo mount -t nfs -o nfsv4 fb140c:/distfiles /mnt % mount 〜 fb140c:/distfiles on /mnt (nfs) % df -h Filesystem Size Used Avail Capacity Mounted on 〜 fb140c:/distfiles 19G 160M 19G 1% /mnt % ls -a /mnt ./ ../ .snap/ .sujournal
旧環境 (fb130) から新環境 (fb140) の /home/distfiles が mount 出来たので、旧 distfiles の内容を、新環境 (fb140) の /home/distfiles にコピー (rsync) して、移行した。
次に、/home/nsmrtks を NFS エクスポートする。
そのやり方だが、/etc/exports はこれ以上触らず、即ち /etc/exports
の「V4: /home」と書いた行 (のみ) を利用し、残りを
ZFS の機能で行うことにする。
以下のように、zfs set sharenfs= にホストを指定する。 なおこの操作で、mountd に HUP シグナルを送る相当まで自動的に実行してくれるので、直後に shouwmount -e を実行するとちゃんと動作に反映されている。
root@fb140:~ # 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@fb140:~ # zfs set sharenfs='fb130c fb121c fb093c fbak fbak14' zfs/nsmrtks
root@fb140:~ # zfs get sharenfs
NAME PROPERTY VALUE SOURCE
zfs sharenfs off default
zfs/local sharenfs off default
zfs/nsmrtks sharenfs fb130c fb121c fb093c fbak fbak14 local
zfs/ports sharenfs off default
root@fb140:~ # showmount -e
Exports list on localhost:
/home/distfiles fb130.magic.or fb121.magic.or
/home/nsmrtks fb130.magic.or fb121.magic.or fb093.magic.or fbak.magic.or fbak14.magic.or
ここで早速マウントできるか確かめたい所だが..
筆者は未だここまで、旧環境 (fb130)
で仕事をしながら、新環境の準備を整えていた。
そこで、ホームディレクトリの、旧環境 (fb130) から新環境 (fb140)
への移行も、ここで実行してしまうことにする。
またも筆者の旧環境 (fb130) の話になってしまうが、/home/nsmrtks は ZFS の mountpoint になっていたので、まずはそれを解除した。
root@fb130:~ # zfs get mountpoint
NAME PROPERTY VALUE SOURCE
〜
zfs/nsmrtks mountpoint /home/nsmrtks local
〜
root@fb130:~ # df -h
Filesystem Size Used Avail Capacity Mounted on
〜
zfs/nsmrtks 14G 3.1G 11G 22% /home/nsmrtks
〜
root@fb130:~ # zfs set mountpoint=/zfs/nsmrtks zfs/nsmrtks
root@fb130:~ # df -h
Filesystem Size Used Avail Capacity Mounted on
〜
zfs/nsmrtks 14G 3.1G 11G 22% /zfs/nsmrtks
root@fb130:~ # ls -l /zfs
total 463
drwxr-xr-x 57 nsmrtks nsmrtks 131 Mar 27 22:49 nsmrtks
〜
その上で、旧環境 (fb130) の /etc/fstab にて、新環境 (fb140) のホームディレクトリを /home/nsmrtks として NFS マウントできるように設定した。
root@fb130:~ # df -h
Filesystem Size Used Avail Capacity Mounted on
〜
zfs/nsmrtks 14G 3.1G 11G 22% /zfs/nsmrtks
fb140c:/nsmrtks 23G 24K 23G 0% /home/nsmrtks
root@fb130:~ # ls -a /home/nsmrtks
. ..
旧環境 (fb130) から新環境 (fb140) の /home/nsmrtks も mount
出来たので、旧環境 (fb130) にあるホームディレクトリ
(/zfs/nsmrtks となっている) の内容を、新環境にコピーした。
それには、旧環境 (fb130) にて、以下のように実行した。
root@fb130:~ # date ; sudo -u nsmrtks rsync -az --del /zfs/nsmrtks/ /home/nsmrtk s/ ; date
Wed Mar 27 23:38:49 JST 2024
Thu Mar 28 00:23:07 JST 2024
root@fb130:~ # date ; sudo -u nsmrtks rsync -nv -a --del /zfs/nsmrtks/ /home/nsmr tks/ ; date
Thu Mar 28 00:33:30 JST 2024
sending incremental file list
sent 6,091,162 bytes received 16,770 bytes 118,600.62 bytes/sec
total size is 6,092,733,429 speedup is 997.51 (DRY RUN)
Thu Mar 28 00:34:21 JST 2024
後から気づいたが、rsync に -z を付けていたのは、この場合、時間がかかるだけで意味なかったかも。
その他のホスト fb121 / fb093 / fbak / fbak14 からも、ホームディレクトリを NFS マウントでき、ファイルを書き込めて共有できることを確かめた。
これでホームディレクトリが旧環境 (fb130) から新環境 (fb140)へ移行できた。
これにて、NFS サーバの設定としても完了したことになる。
ここで一旦シャットダウン・電源 OFF した。
さて、『仮想マシンの作成編』の『ハードウェア』の所では、移行前の仮想マシンとのメモリの食い合いなどを考え、メインメモリーとプロセッサー数を少なめにしていた。
それをここで、「本番仕様」とし、大きく取ることにする。
逆に旧環境の方を減らす。
「Oracle VM VirtualBox マネージャー」で「fb140」が選択された状態で『設定』→『システム』と進む。
『マザーボード』の『メインメモリー』が、「8000 MB」だったのを、「12000 MB」に増やした。
『プロセッサー』の『プロセッサー数』が「1」だったのを、筆者の環境で設定できる最大値である「8」まで増やした。 (ハードウェアは 8コア 16スレッドなのだが VirtualBox では 8までしか使わせてくれない..)
忘れずに『OK』押す。
逆に、筆者の旧環境 (fb130) の『メインメモリー』と『プロセッサー数』は、この時点で減らした。 (特に『メインメモリー』は大きく取りすぎると新環境と両立できないので)
ここで、以降で使う、筆者の環境でいつも用いている「teetime」スクリプトを紹介する。
これは、「コマンド |& tee ログ.txt」 (csh 系)
あるいは「コマンド 2>&1 | tee ログ.txt」 (sh 系)
に毛の生えたようなコマンドで、コマンドを何回かやり直しても、ログのファイル名を、既に存在するファイル名とぶつからないように、日付時刻のファイル名を自動的に付けてくれるものである。
(コマンドにあまり複雑なものを指定するとうまくいかない制限事項がある)
「teetime [-t タグ] コマンド..」のように用いる。
ports で長時間かけてコンパイルでなく pkg コマンドでバイナリパッケージのインストールでもいいのだが (というより今どき普通はそうするかもしれないが)、後述するが、VirtualBox 上で X11 を動かすには、どうやらコンパイルのオプションを変える必要があり、バイナリパッケージだとそれが出来ないのである。
もっとも、それ以外のソフトは ports でなく pkg でもいいかもしれない。 (後述のように git は pkg でインストールしている)
あるいは、読者が VirtualBox でなく、ホストに直接インストールする場合も、pkg でいいかもしれない。
であるが、ここでは基本的に (一部を除き) 全て ports でいくこととし、pkg コマンドの詳細はここでは触れない。 あしからず。
それでも簡単にいうと、pkg search 〜 でパッケージ名を探し、(sudo) pkg install 〜 でパッケージをインストールする感じ。
なお最初に「pkg」コマンドを実行すると、(本当の) pkg コマンド自体のインストールを最初に尋ねられるので、y を押してインストールする。 (これも後の方で示す)
さて今まで (FreeBSD 13.X) なら、ここでまず portsnap fetch を実行する.. のだが、なんと今回 portsnap が入っていなかった。
root@fb140:~ # portsnap fetch
/bin/sh: portsnap: not found
root@fb140:~ # man portsnap
No manual entry for portsnap
root@fb140:~ # whereis portsnap
portsnap:
どうやら、git を使うように変更されたようなのである。 以下を参考にさせていただく。
それにしても ports を更新するのに ports のソフトが必要 (ベースシステムだけでは ports が更新できない) とは.. やはり一般人は pkg を使い ports は使わないということかもしれない。
git をインストールするために、まずおもむろに pkg コマンドを実行する。
root@fb140:~ # pkg
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:14:amd64/quarterly, please wait...
Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
Installing pkg-1.20.9...
Extracting pkg-1.20.9: 100%
pkg: not enough arguments
Usage: pkg [-v] [-d] [-l] [-N] [-j <jail name or id>|-c <chroot path>|-r <rootdir>] [-C <configuration file>] [-R <repo config dir>] [-o var=value] [-4|-6] <command> [<args>]
For more information on available commands and options see 'pkg help'.
(not enough arguments と言われ Usage まで出てしまったが) ここで pkg info を実行すると、未だ pkg コマンドしか入っていない。
root@fb140:~ # pkg info
pkg-1.20.9 Package manager
さて筆者は、何かインストールする時に、必ずたいてい、ログを残すようにしている。
そのインストールログは、/var/tmp の下に log
というディレクトリを作成することにし、さらにその下に
Install というディレクトリを作成して、その下に保存している。
ここでそのディレクトリを作成する。
root@fb140:~ # cd /var/tmp
root@fb140:/var/tmp # ls
vi.recover
root@fb140:/var/tmp # mkdir log
root@fb140:/var/tmp # chown nsmrtks log
root@fb140:/var/tmp # ls -l
total 8
drwxr-xr-x 2 nsmrtks wheel 512 Mar 28 14:40 log
drwxrwxrwt 2 root wheel 512 Mar 24 01:41 vi.recover
root@fb140:/var/tmp # cd log
root@fb140:/var/tmp/log # mkdir Install
root@fb140:/var/tmp/log # chown nsmrtks Install
root@fb140:/var/tmp/log # ls -l
total 4
drwxr-xr-x 2 nsmrtks wheel 512 Mar 28 14:40 Install
(なかなか ports の導入に辿り着かないが) pkg install git する。
ここで前述の teetime コマンド (筆者の /home/nsmrtks/bin に入っている)
を併用してログを残す。
(今回は /var/tmp/log/Install/git20240328.log というファイルにログが残された)
root@fb140:/var/tmp/log # cd Install
root@fb140:/var/tmp/log/Install # nice ~nsmrtks/bin/teetime -t git pkg install git
logging (from the next line till the end) to git20240328.log
teetime! Thu Mar 28 14:45:09 JST 2024
teetime! working directory is /var/tmp/log/Install
teetime> pkg install git
Updating FreeBSD repository catalogue...
Fetching meta.conf: . done
Fetching packagesite.pkg: .......... done
Processing entries: .......... done
FreeBSD repository update completed. 33715 packages processed.
All repositories are up to date.
Updating database digests format: . done
The following 35 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
curl: 8.6.0
expat: 2.5.0
gettext-runtime: 0.22.3
git: 2.43.0
indexinfo: 0.3.1
libffi: 3.4.4
libidn2: 2.3.4
libnghttp2: 1.58.0
libpsl: 0.21.2_4
libssh2: 1.11.0,3
libunistring: 1.1
mpdecimal: 2.5.1
p5-Authen-SASL: 2.17
p5-CGI: 4.60
p5-Clone: 0.46
p5-Digest-HMAC: 1.04
p5-Encode-Locale: 1.05
p5-Error: 0.17029
p5-GSSAPI: 0.28_2
p5-HTML-Parser: 3.81
p5-HTML-Tagset: 3.20_1
p5-HTTP-Date: 6.06
p5-HTTP-Message: 6.45
p5-IO-HTML: 1.004
p5-IO-Socket-IP: 0.42
p5-IO-Socket-SSL: 2.084
p5-LWP-MediaTypes: 6.04
p5-Mozilla-CA: 20231213
p5-Net-SSLeay: 1.92
p5-TimeDate: 2.33,1
p5-URI: 5.21
pcre2: 10.42
perl5: 5.36.3_1
python39: 3.9.18
readline: 8.2.7
Number of packages to be installed: 35
The process will require 241 MiB more space.
47 MiB to be downloaded.
Proceed with this action? [y/N]: y
〜
[35/35] Installing git-2.43.0...
===> Creating groups.
Creating group 'git_daemon' with gid '964'.
===> Creating users
Creating user 'git_daemon' with uid '964'.
[35/35] Extracting git-2.43.0: .......... done
=====
〜
teetime! Thu Mar 28 14:46:21 JST 2024
git コマンドが /usr/local/bin/git としてインストールされた。
root@fb140:~ # type git
git is /usr/local/bin/git
root@fb140:~ # whereis git
git: /usr/local/bin/git /usr/local/man/man1/git.1.gz
前置きが長くなったが、これでやっと ports が取得できそうだ。
それには git clone を用いるらしい。
(最初の 1回だけ)
ところが..
root@fb140:~ # su nsmrtks
2024年 3月28日 木曜日 14時58分14秒 JST
/root
root has logged on ttyv0 from local.
% ls -al /usr/ports
total 5
drwxr-xr-x 2 nsmrtks wheel 3 3月 2 20:52 ./
drwxr-xr-x 15 root wheel 512 3月 2 18:46 ../
lrwxr-xr-x 1 root wheel 15 3月 2 20:52 distfiles@ -> /home/distfiles
% git clone https://git.freebsd.org/ports.git /usr/ports
fatal: destination path '/usr/ports' already exists and is not an empty directory.
128で終了しました
/usr/ports/distfiles を事前に作成していたのが仇となった。 二度手間になるが、一旦削除する。 そして git clone を再実行。
% rm -i /usr/ports/distfiles
remove /usr/ports/distfiles? y
% git clone https://git.freebsd.org/ports.git /usr/ports
Cloning into '/usr/ports'...
〜
/usr/ports/distfiles のシンボリックリンクを再作成する。
% cd /usr/ports
% ls -ld distfiles
ls: distfiles: そのようなファイルまたはディレクトリはありません
1で終了しました
1で終了しました
% ln -s /home/distfiles
% ls -ld distfiles
lrwxr-xr-x 1 nsmrtks wheel 15 3月 28 15:13 distfiles@ -> /home/distfiles
% ls distfiles/
distfiles:
〜(先ほど旧環境の distfiles からファイルを rsync したのでたくさん見える)
インデックスの取得というのも今やっておいた方がいいのだろうか?
% make fetchindex
/usr/bin/env fetch -am -o /usr/ports/INDEX-14.xz https://download.FreeBSD.org/ports/index/INDEX-14.xz
/usr/ports/INDEX-14.xz 1797 kB 10 MBps 01s
% ls -lt | head
total 9790
-rw-r--r-- 1 nsmrtks wheel 47234522 3月 28 15:43 INDEX-14
〜
ところで、先に zfs set したとおり、ファイルシステムは圧縮されており、
root@fb140:~ # zfs get compression
NAME PROPERTY VALUE SOURCE
zfs compression on default
zfs/local compression lz4 local
zfs/nsmrtks compression lz4 local
zfs/ports compression lz4 local
以下のように圧縮率が得られた。
root@fb140:~ # zfs get compressratio
NAME PROPERTY VALUE SOURCE
zfs compressratio 1.72x -
zfs/local compressratio 2.01x -
zfs/nsmrtks compressratio 1.94x -
zfs/ports compressratio 1.27x -
先ほどの手順で ports をインストールしたので、とりあえず普通にコンパイル・インストールする。
root@fb140:~ # cd /usr/ports/security/sudo
root@fb140:/usr/ports/security/sudo # ls
Makefile distinfo files pkg-descr pkg-plist
root@fb140:/usr/ports/security/sudo # nice ~nsmrtks/bin/teetime -t install make install
logging (from the next line till the end) to install20240328.log
teetime! Thu Mar 28 16:01:40 JST 2024
teetime! working directory is /usr/ports/security/sudo
teetime> make install
〜
teetime! Thu Mar 28 16:04:09 JST 2024
root@fb140:/usr/ports/security/sudo # ls -l
total 264
-rw-r--r-- 1 nsmrtks wheel 4933 Mar 28 15:04 Makefile
-rw-r--r-- 1 nsmrtks wheel 158 Mar 28 15:04 distinfo
drwxr-xr-x 2 nsmrtks wheel 5 Mar 28 15:04 files
-rw-r--r-- 1 root wheel 2436645 Mar 28 16:04 install20240328.log
-rw-r--r-- 1 nsmrtks wheel 254 Mar 28 15:04 pkg-descr
-rw-r--r-- 1 nsmrtks wheel 5754 Mar 28 15:04 pkg-plist
drwxr-xr-x 4 root wheel 19 Mar 28 16:04 work
root@fb140:/usr/ports/security/sudo # nice ~nsmrtks/bin/teetime -t clean make clean
logging (from the next line till the end) to clean20240328.log
teetime! Thu Mar 28 16:06:10 JST 2024
teetime! working directory is /usr/ports/security/sudo
teetime> make clean
===> Cleaning for pkgconf-2.1.1,1
===> Cleaning for gettext-tools-0.22.5
===> Cleaning for libtextstyle-0.22.5
===> Cleaning for sudo-1.9.15p5_4
teetime! Thu Mar 28 16:06:11 JST 2024
結果、無事ビルド・インストール出来たようだ。
次に sudoers ファイル (実体は /usr/local/etc/sudoers にある) を visudo で編集する。
root@fb140:~ # ls -ld /usr/local/etc/sudoers*
-r--r----- 1 root wheel 4749 Mar 28 16:04 /usr/local/etc/sudoers
drwxr-x--- 2 root wheel 2 Mar 28 16:04 /usr/local/etc/sudoers.d
-r--r----- 1 root wheel 4749 Mar 28 16:04 /usr/local/etc/sudoers.dist
root@fb140:~ # md5 /usr/local/etc/sudoers*
MD5 (/usr/local/etc/sudoers) = 8f71c94aa410e6e891c8b03645daba95
md5: /usr/local/etc/sudoers.d: Is a directory
MD5 (/usr/local/etc/sudoers.dist) = 8f71c94aa410e6e891c8b03645daba95
root@fb140:~ # visudo
このとき、オリジナルと同一の /usr/local/etc/sudoers.dist というファイルも元から横に置かれているので、わざわざ自分でコピーを取っておかなくても変更点を比較できる。
筆者の環境では以下のように変更を行った。
diff -u /usr/local/etc/sudoers.dist /usr/local/etc/sudoers を示すと以下のようである。
--- /usr/local/etc/sudoers.dist 2024-03-28 16:04:08.724771000 +0900
+++ /usr/local/etc/sudoers 2024-03-28 16:17:35.355104000 +0900
@@ -58,7 +58,8 @@
## Run X applications through sudo; HOME is used to find the
## .Xauthority file. Note that other programs use HOME to find
## configuration files and this may lead to privilege escalation!
-# Defaults env_keep += "HOME"
+Defaults env_keep += "HOME"
+# 2024-03-28 nsmrtks
##
## X11 resource path settings
# Defaults env_keep += "XAPPLRESDIR XFILESEARCHPATH XUSERFILESEARCHPATH"
@@ -103,6 +104,9 @@
## slower by these options and also can clutter up the logs.
# Defaults!PKGMAN !intercept, !log_subcmds
+# 2024-03-28 nsmrtks
+Defaults env_keep += "http_proxy https_proxy"
+
##
## Runas alias specification
##
@@ -113,7 +117,8 @@
root ALL=(ALL:ALL) ALL
## Uncomment to allow members of group wheel to execute any command
-# %wheel ALL=(ALL:ALL) ALL
+%wheel ALL=(ALL:ALL) ALL
+# 2024-03-28 nsmrtks
## Same thing without a password
# %wheel ALL=(ALL:ALL) NOPASSWD: ALL
これで、wheel グループに所属している一般ユーザ nsmrtks は、sudo が実行できるようになった。
% sudo pwd
あなたはシステム管理者から通常の講習を受けたはずです。
これは通常、以下の3点に要約されます:
#1) 他人のプライバシーを尊重すること。
#2) タイプする前に考えること。
#3) 大いなる力には大いなる責任が伴うこと。
セキュリティー上の理由で、あなたがタイプしたパスワードは表示しません。
パスワード: 〜
/home/nsmrtks
主に ports のための設定である。
/etc/make.conf ファイルを新規作成して、以下の内容にした。 (旧環境から持ってきて一部編集した)
# 2024- nsmrtks
# 2023-04-19,27,29?,05-03,07-20,10-27 nsmrtks
# 2017-09-27,2020-12-15 - 2021-09-24 nsmrtks
# see /usr/ports/Mk/bsd.command.mk
SU_CMD?=/usr/local/bin/sudo -E sh -c
#DISABLE_VULNERABILITIES=yes
# EoF
この SU_CMD は、ports でビルドするときに、たまに出て来る su を代わりに sudo を用いるように設定している。
ports のためのツール群である。
% cd /usr/ports/ports-mgmt/portupgrade
% pwd
/usr/ports/ports-mgmt/portupgrade
% nice teetime -t install make install
logging (from the next line till the end) to install20240328.log
teetime! 2024年 3月28日 木曜日 16時39分15秒 JST
teetime! working directory is /usr/ports/ports-mgmt/portupgrade
teetime> make install
〜
teetime! 2024年 3月28日 木曜日 16時45分33秒 JST
無事ビルド・インストール出来たようだ。
virtualbox-ose-additions をインストールしていないと、MS-Windows 側とクリップボードが共有できなかったり、もしかすると時計がずれていったり、いろいろ不都合が発生する。
MS-Windows や Linux では、Guest Additions CD を挿入して.. などというのがあった気がするが、FreeBSD では ports や pkg からインストールできる。
ここからは、先ほどインストールした portupgrade に付属の portinstall コマンドを用いて ports のソフトをインストールしていく。
virtualbox-ose-additions の ports の名前がうろ覚えだったので、先に pkg search コマンドで探している。
% pkg search virtualbox
phpvirtualbox-6.1_3 AJAX Web Interface for VirtualBox
phpvirtualbox-legacy-5.2.1_4 AJAX Web Interface for VirtualBox
virtualbox-ose-6.1.50 General-purpose full virtualizer for x86 hardware
virtualbox-ose-additions-6.1.50 VirtualBox additions for FreeBSD guests
virtualbox-ose-additions-nox11-6.1.50 VirtualBox additions for FreeBSD guests
virtualbox-ose-kmod-6.1.50 VirtualBox kernel module for FreeBSD
virtualbox-ose-kmod-legacy-5.2.44_7 VirtualBox kernel module for FreeBSD
virtualbox-ose-legacy-5.2.44_16 General-purpose full virtualizer for x86 hardware
virtualbox-ose-nox11-6.1.50 General-purpose full virtualizer for x86 hardware
virtualbox-ose-nox11-legacy-5.2.44_16 General-purpose full virtualizer for x86 hardware
コンパイル開始。
% 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_20240328.log
teetime! 2024年 3月28日 木曜日 17時06分19秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s virtualbox-ose-additions
〜
Stop.
make: stopped in /usr/ports/emulators/virtualbox-ose-additions
---> [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
** Listing the failed packages (-:ignored / *:skipped / !:failed)
! emulators/virtualbox-ose-additions (dependent ports)
teetime! 2024年 3月28日 木曜日 17時11分18秒 JST
筆者の環境の都合で、コンパイルが途中で止まってしまった。
原因を解消して、コンパイル再開。
このとき、portinstall のオプションに -w も付けると、make clean せずに、前回の続きから再開できる。
% nice teetime -t virtualbox-ose-additions_ portinstall -sw virtualbox-ose-additions
conflicting virtualbox-ose-additions_20240328.log
logging (from the next line till the end) to virtualbox-ose-additions_2024032817.log
teetime! 2024年 3月28日 木曜日 17時12分16秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -sw virtualbox-ose-additions
〜
たまにダイアログが出てきて、オプションを選べるので、もしデフォルトから変えたければ設定する。 (ただし経験上、あまりデフォルトから変えると、ビルドに失敗することもあった。)
gmp のオプション 『CPU_OPTS』「Enable assembly optimizations for your CPU」 というのをチェックを付けてみた (スペースキーを押す)。
〜
teetime! 2024年 3月28日 木曜日 19時56分10秒 JST
無事にコンパイル・インストールが終わった。
さて、ビルド・インストール中のメッセージが、teetime コマンドにより /var/tmp/log/Install/ 以下のログファイルに残っているので、それを見てみる。 (今回は 2回目の virtualbox-ose-additions_2024032817.log を参照する)
〜
Installing virtualbox-ose-additions-6.1.50...
VirtualBox Guest Additions are installed.
To enable and start the required services:
# sysrc vboxguest_enable="YES"
# sysrc vboxservice_enable="YES"
To start the services, restart the system.
In some situations, a panic will occur when the kernel module loads.
Having no more than one virtual CPU might mitigate the issue.
For features such as window scaling and clipboard sharing, membership of
the wheel group is required. With username "jerry" as an example:
# pw groupmod wheel -m jerry
The settings dialogue for FreeBSD guests encourages use of the VMSVGA
graphics controller. Whilst this might suit installations of FreeBSD
without a desktop environment (a common use case), it is not appropriate
where Guest Additions are installed.
Where Guest Additions are installed:
1. prefer VBoxSVGA
2. do not enable 3D acceleration (doing so will invisibly
lose the preference for VBoxSVGA)
You may ignore the yellow alert that encourages use of VMSVGA.
〜
これと、/usr/local/etc/rc.d/ 以下にインストールされた dbus を参考にして..
% ls /usr/local/etc/rc.d/
/usr/local/etc/rc.d:
dbus* git_daemon* vboxguest* vboxservice*
/usr/local/etc/rc.d/dbus の冒頭:
#!/bin/sh
# PROVIDE: dbus
# REQUIRE: DAEMON ldconfig
#
# Add the following lines to /etc/rc.conf to enable the D-BUS messaging system:
#
# dbus_enable="YES"
#
〜
以下を実行。
% sudo sysrc dbus="YES"
dbus: -> YES
% sudo sysrc vboxguest_enable="YES"
vboxguest_enable: -> YES
% sudo sysrc vboxservice_enable="YES"
vboxservice_enable: -> YES
reboot したら、「vboxguest: loaded successfully」や、VBoxService が起動したようなメッセージが出ていた。
kldstat で見ると vboxguest.ko がロードされていた。
% kldstat
Id Refs Address Size Name
1 16 0xffffffff80200000 1d345b0 kernel
2 1 0xffffffff82800000 3e5de0 zfs.ko
3 1 0xffffffff82618000 3220 intpm.ko
4 1 0xffffffff8261c000 2178 smbus.ko
5 1 0xffffffff8261f000 35b40 vboxguest.ko
また、VBoxService が起動していた。 (以前、起動していなかったことがあった。)
% ps ax | egrep -i box
1091 - Is 0:00.01 /usr/local/sbin/VBoxService
1250 0 S+ 0:00.00 egrep -i box
virtualbox-ose-additions をインストールしたことによって、X11 サーバ (xorg-server) もインストールされていた。
% pkg info | egrep X
〜
xorg-server-21.1.11_1,1 X.Org X server and related programs
〜
しかし、startx コマンドが入っていない。
% where startx
1で終了しました
そこで、xorg をちゃんとインストールしてみる..
% cd /var/tmp/log/Install/
% nice teetime -t xorg portinstall -s xorg
logging (from the next line till the end) to xorg20240328.log
teetime! 2024年 3月28日 木曜日 20時54分45秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s xorg
〜
Stop.
make: stopped in /usr/ports/x11/xorg
** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portinstall20240328-1335-8fx4ru 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 (fetch error)
teetime! 2024年 3月28日 木曜日 21時08分00秒 JST
またも筆者の環境の都合で、コンパイルが途中で止まってしまった。 原因を解消して、コンパイル再開。
% nice teetime -t xorg portinstall -sw xorg
conflicting xorg20240328.log
logging (from the next line till the end) to xorg2024032821.log
teetime! 2024年 3月28日 木曜日 21時08分17秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -sw xorg
〜
teetime! 2024年 3月28日 木曜日 21時15分28秒 JST
この時、途中に出て来る xorg-drivers の選択メニューで、VMMOUSE と VMWARE
のチェックを付ける必要がある。
これが、VirtualBox で X11 (xorg) を使うためには pkg でなく ports
でコンパイルしないといけない理由である。
何故 VMMOUSE と VMWARE が必要なのかというと、VirtualBox のディスプレイを
VMSVGA で使うためである (後述する)。
無事にコンパイル・インストールが終わった。
さて、VirtualBox の画面をフルスクリーンモードに切り替えてから、startx を実行し、X11 サーバを起動してみる。
startx を実行すると、~/.xinitrc が存在すれば実行されるが、筆者の ~/.xinitrc は、twm が存在すれば実行するようになっている。 よって以下のスクリーンショットでも twm が起動している。
xdpyinfo でも確かめた所、SVGA (800x600) で起動したようだ。 ここで筆者の PC の画面からフルスクリーンモードは 1920x1080 のはずなのだが。
そこで xrandr -s 1920x1080 を実行してみた所、画面をいっぱいに広げることが出来た。
少し話が前後するが、この次で Xfce をインストールし使い始めた辺りで、Xfce を起動すると (startx で)、数秒で真っ黒の画面となり、全く使えなくなるという現象が発生し始めた。
このようなことは今まで発生したことがなかった。
Xfce のせいかと思って KDE5 にしたりしてみたが、同じ現象だった。
非常に悩んだのだが、最終的な解決法としては、最初の方で VirtualBox のディスプレイの設定を「VBoxSVGA」に変えていたが、それを「VMSVGA」に戻すと、正常に作動するようになった。
このスクリーンショットは fb140 が起動中 (正確には保存状態)
のものなので「VMSVGA」等の所がグレーアウトされている
(起動中や保存状態では変更できないので)
virtualbox-ose-additions のコンパイルメッセージ (上の方を参照) が VBoxSVGA を使えと言っているのは何なのか..
また、「VMSVGA」を使うためには、前述したが xorg を VMMOUSE と VMWARE 付きでコンパイルしている必要がある。
筆者は、ウィンドウマネージャというか統合デスクトップとして、ここ数年は Xfce を使っている。
昔は mwm (Motif Window Manager) を長らく使っていたり、また WindowMaker も少し使っていたのだが、どうも古くて動作に支障が出ていると思うようになった。 twm も昔は使っていた。
Xfce のことは以下などで知った。
- FreeBSD ハンドブック → パート I. 導入 → 第5章 X Window System → 5.7. デスクトップ環境
% pkg search xfce
〜
xfce-4.18_1 Meta-port for the Xfce Desktop Environment
〜
% cd /var/tmp/log/Install
% nice teetime -t xfce portinstall -s xfce
logging (from the next line till the end) to xfce20240328.log
teetime! 2024年 3月28日 木曜日 21時42分41秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -s xfce
[Reading data from pkg(8) ... - 331 packages found - done]
〜
===> Checking if webkit2-gtk3 is already installed
===> Switching to root credentials for 'install' target
Password:
sudo: timed out reading password
sudo: a password is required
*** Error code 1
Stop.
make[10]: stopped in /usr/ports/www/webkit2-gtk3
*** Error code 1
Stop.
make[9]: stopped in /usr/ports/www/webkit2-gtk3
*** Error code 1
Stop.
make[8]: stopped in /usr/ports/textproc/libgepub
*** Error code 1
Stop.
make[7]: stopped in /usr/ports/deskutils/xfce4-tumbler
*** Error code 1
Stop.
make[6]: stopped in /usr/ports/deskutils/xfce4-tumbler
*** Error code 1
Stop.
make[5]: stopped in /usr/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 /usr/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 /usr/ports/x11-wm/xfce4
*** Error code 1
Stop.
make: stopped in /usr/ports/x11-wm/xfce4
** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portinstall20240328-2857-if3z5b env make FETCH_BEFORE_ARGS=-q
** Fix the problem and try again.
---> [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
パスワード:
sudo: パスワードの読み込みがタイムしました
sudo: パスワードが必要です
/usr/local/lib/ruby/site_ruby/3.2/pkgtools/pkgtools.rb:487:in `__system': Command failed [exit code 1]: sudo /usr/local/sbin/pkgdb -aFOQ (CommandFailedError)
from /usr/local/lib/ruby/site_ruby/3.2/pkgtools/pkgtools.rb:510:in `__sudo'
from /usr/local/lib/ruby/site_ruby/3.2/pkgtools/pkgtools.rb:516:in `xsudo'
from /usr/local/lib/ruby/site_ruby/3.2/pkgtools/pkgdb.rb:1062:in `autofix!'
from /usr/local/lib/ruby/site_ruby/3.2/pkgtools/pkgdb.rb:1058:in `autofix'
from /usr/local/sbin/portinstall:1139:in `do_install'
from /usr/local/sbin/portinstall:842:in `block (2 levels) in main'
from /usr/local/sbin/portinstall:838:in `each'
from /usr/local/sbin/portinstall:838:in `block in main'
from /usr/local/lib/ruby/3.2/optparse.rb:1153:in `initialize'
from /usr/local/sbin/portinstall:238:in `new'
from /usr/local/sbin/portinstall:238:in `main'
from /usr/local/sbin/portinstall:2380:in `<main>'
teetime! 2024年 3月29日 金曜日 02時12分05秒 JST
コンパイルが長時間に渡ったので、sudo
のパスワードを入力しそこねて、エラーで終了してしまった。
portinstall に -w も付けて、再開させる。
% sudo pwd
パスワード: 〜
/var/tmp/log/Install
% nice teetime -t xfce portinstall -sw xfce
logging (from the next line till the end) to xfce20240329.log
teetime! 2024年 3月29日 金曜日 04時23分23秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -sw xfce
[Reading data from pkg(8) ... - 513 packages found - done]
〜
install: /usr/ports/x11-themes/gtk-murrine-engine/work/stage/usr/local/share/gtk-engines/murrine.xml: No space left on device
gmake[2]: *** [Makefile:279: install-xmlDATA] Error 71
gmake[2]: Leaving directory '/usr/ports/x11-themes/gtk-murrine-engine/work/murrine-0.98.2/schema'
gmake[1]: *** [Makefile:346: install-am] Error 2
gmake[1]: Leaving directory '/usr/ports/x11-themes/gtk-murrine-engine/work/murrine-0.98.2/schema'
gmake: *** [Makefile:599: install-recursive] Error 1
*** Error code 2
Stop.
make[5]: stopped in /usr/ports/x11-themes/gtk-murrine-engine
*** Error code 1
Stop.
make[4]: stopped in /usr/ports/x11-themes/gtk-murrine-engine
*** Error code 1
Stop.
make[3]: stopped in /usr/ports/x11-themes/greybird-theme
*** Error code 1
Stop.
make[2]: stopped in /usr/ports/x11-themes/greybird-theme
*** Error code 1
Stop.
make[1]: stopped in /usr/ports/x11-wm/xfce4
*** Error code 1
Stop.
make: stopped in /usr/ports/x11-wm/xfce4
egrep: empty (sub)expression
** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portinstall20240329-94038-xzldp8 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 (new compiler error)
teetime! 2024年 3月29日 金曜日 04時54分49秒 JST
なんと No space left on device で止まってしまった。
% df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ada0p2 4.8G 3.2G 1.3G 72% /
devfs 1.0K 0B 1.0K 0% /dev
/dev/ada0p4 2.9G 2.1G 579M 79% /var
/dev/da0p1 19G 14G 3.5G 81% /home/distfiles
tmpfs 7.0G 12K 7.0G 0% /tmp
zfs/local 2.0G 2.0G 0B 100% /usr/local
zfs/ports 18G 18G 0B 100% /usr/ports
zfs 24K 24K 0B 100% /zfs
zfs/nsmrtks 3.1G 3.1G 0B 100% /home/nsmrtks
xfce をコンパイルするために、依存関係で一度に多くの ports
のコンパイルが必要になり、それらが clean
されないまま続行しているのが要因と思われる。
そこで、ここでは portsclean -C
というコマンドを実行し (portsclean も portupgrade
に付属のコマンド)、容量を空ける。
(直前までコンパイルしていた ports も clean
されてしまいある程度コンパイルのやり直しになるが..)
% portsclean -C
Cleaning out /usr/ports/*/*/work...
Delete /usr/ports/accessibility/at-spi2-core/work
Delete /usr/ports/archivers/libarchive/work
Delete /usr/ports/archivers/libdeflate/work
〜
done.
以下のように大幅に空いた。
% df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ada0p2 4.8G 3.2G 1.3G 72% /
devfs 1.0K 0B 1.0K 0% /dev
/dev/ada0p4 2.9G 2.1G 579M 79% /var
/dev/da0p1 19G 14G 3.5G 81% /home/distfiles
tmpfs 7.0G 12K 7.0G 0% /tmp
zfs/local 18G 2.0G 16G 12% /usr/local
zfs/ports 18G 2.0G 16G 11% /usr/ports
zfs 16G 24K 16G 0% /zfs
zfs/nsmrtks 19G 3.1G 16G 17% /home/nsmrtks
みたび、再開。
% sudo pwd
パスワード: 〜
/var/tmp/log/Install
% nice teetime -t xfce portinstall -sw xfce
conflicting xfce20240329.log
logging (from the next line till the end) to xfce2024032921.log
teetime! 2024年 3月29日 金曜日 21時41分40秒 JST
teetime! working directory is /var/tmp/log/Install
teetime> portinstall -sw xfce
[Reading data from pkg(8) ... - 535 packages found - done]
〜
teetime! 2024年 3月29日 金曜日 22時18分01秒 JST
今度こそ最後まで進み成功したようだ。
Xfce は startxfce4 コマンドで起動できる。
ここで、筆者の ~/.xinitrc は、startxfce4
コマンドが存在していれば自動的に実行するようになっている。
(さもなくば twm が起動するようになっていたりする)
先ほどの X11 を終了し、あらためて startx し直すと、Xfce が起動した。 (未だフォントが足りていないので少し表示がおかしいが)
また、旧環境から引き継いだ設定により、自動的に 1920x1080 になるのと、Xfce の上下のバーは自動的に隠すようになっており見えていない。