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

2020-09-07

結論からいうと、/usr/local をシンボリックリンクにしていたせいだった。

失敗例

firefox (rust)

grey% portinstall -s firefox
[Reading data from pkg(8) ... - 523 packages found - done]
--->  [Executing a command as root: sudo /usr/bin/touch /var/db/pkgdb.fixme]
--->  Installing 'firefox-80.0.1,1' from a port (www/firefox)
--->  Building '/usr/ports/www/firefox'
〜
    Rust is ready to roll.

< Rustc { compiler: Compiler { stage: 2, host: "x86_64-unknown-freebsd" }, target: "x86_64-unknown-freebsd" }
Build completed successfully in 0:04:28
find: /zfsnv/ports/lang/rust/work/stage/usr/local/lib/rustlib/src: No such file or directory
*** Error code 1

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

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

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

Stop.
make: stopped in /zfsnv/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)

libreoffice (qt5-x11extras)

grey% portinstall -sw libreoffice
[Reading data from pkg(8) ... - 451 packages found - done]
--->  [Executing a command as root: sudo /usr/bin/touch /var/db/pkgdb.fixme]
--->  Installing 'libreoffice-7.0.1.2' from a port (editors/libreoffice)
--->  Building '/usr/ports/editors/libreoffice'
〜
===>  Installing for qt5-x11extras-5.15.0
===>  Checking if qt5-x11extras is already installed
===>   Registering installation for qt5-x11extras-5.15.0 as automatic
pkg-static: Unable to access file /zfsnv/ports/x11/qt5-x11extras/work/stage/usr/local/include/qt5/QtX11Extras/QX11Info:No such file or directory
pkg-static: Unable to access file /zfsnv/ports/x11/qt5-x11extras/work/stage/usr/local/include/qt5/QtX11Extras/QtX11Extras:No such file or directory
〜
pkg-static: Unable to access file /zfsnv/ports/x11/qt5-x11extras/work/stage/usr/local/libdata/pkgconfig/Qt5X11Extras.pc:No such file or directory
*** Error code 74

Stop.
make[1]: stopped in /zfsnv/ports/x11/qt5-x11extras
*** Error code 1

Stop.
make: stopped in /zfsnv/ports/editors/libreoffice
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
** Listing the failed packages (-:ignored / *:skipped / !:failed)
	! editors/libreoffice	(dependent ports)

digikam (qt5-help)

grey% portinstall -s digikam
[Reading data from pkg(8) ... - 519 packages found - done]
--->  [Executing a command as root: sudo /usr/bin/touch /var/db/pkgdb.fixme]
--->  Installing 'digikam-7.1.0' from a port (graphics/digikam)
--->  Building '/usr/ports/graphics/digikam'
〜
===>  Installing for qt5-help-5.15.0
===>  Checking if qt5-help is already installed
===>   Registering installation for qt5-help-5.15.0 as automatic
pkg-static: Unable to access file /zfsnv/ports/devel/qt5-help/work/stage/usr/local/include/qt5/QtHelp/5.15.0/QtHelp/private/qfilternamedialog_p.h:No such file or directory
pkg-static: Unable to access file /zfsnv/ports/devel/qt5-help/work/stage/usr/local/include/qt5/QtHelp/5.15.0/QtHelp/private/qhelpcollectionhandler_p.h:No such file or directory
〜
pkg-static: Unable to access file /zfsnv/ports/devel/qt5-help/work/stage/usr/local/libdata/pkgconfig/Qt5Help.pc:No such file or directory
*** Error code 74

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

Stop.
make[3]: stopped in /zfsnv/ports/devel/kf5-extra-cmake-modules
*** Error code 1

Stop.
make[2]: stopped in /zfsnv/ports/devel/kf5-extra-cmake-modules
*** Error code 1

Stop.
make[1]: stopped in /zfsnv/ports/devel/kf5-kdoctools
*** Error code 1

Stop.
make: stopped in /zfsnv/ports/graphics/digikam
--->  [Executing a command as root: sudo /usr/local/sbin/pkgdb -aFOQ]
** Listing the failed packages (-:ignored / *:skipped / !:failed)
	! graphics/digikam	(dependent ports)

ここで不可思議なのは、firefox や rust や libreoffice や qt5-x11extras や qt5-help のビルドが、同じく FreeBSD 12.1 で、成功しているホストもあることだった。

blue% pkg info | egrep firefox
firefox-80.0.1,1               Web browser based on the browser portion of Mozilla

blue% pkg info | egrep rust
rust-1.46.0                    Language with a focus on memory safety and concurrency
〜

blue% pkg info | egrep libreoffice
libreoffice-7.0.1.2            Full integrated office productivity suite

blue% pkg info | egrep qt5-x11extras
qt5-x11extras-5.15.0           Qt platform-specific features for X11-based systems

blue% pkg info | egrep qt5-help
qt5-help-5.15.0                Qt online help integration module

ちょっと調べる

digikam (qt5-help) で失敗している例について、例えば以下のように出ているが (再掲)

pkg-static: Unable to access file /zfsnv/ports/devel/qt5-help/work/stage/usr/local/include/qt5/QtHelp/5.15.0/QtHelp/private/qfilternamedialog_p.h:No such file or directory

Unable to access file /zfsnv/ports/devel/qt5-help/work/... となっているのは、/usr/ports が /zfsnv/ports という所を指すシンボリックリンクになっている。

ここで qfilternamedialog_p.h というファイルが、確かに work/stage/usr/local/include/qt5/QtHelp/5.15.0/QtHelp/private/ の下に存在していない (それ以前に work/stage/usr/local/include/ の下の qt5 ディレクトリから無い)。

しかし、よく探してみると、qfilternamedialog_p.h は、work/stage/zfsnv/local/include/qt5/QtHelp/5.15.0/QtHelp/private/ というディレクトリの下にあった。

ここで、失敗するホストは、/usr/local を /zfsnv/local という所を指すシンボリックリンクにしていたことを思い出した。

grey% ls -ld /usr/local
lrwxr-xr-x  1 root  wheel  12  8月 26 18:47 /usr/local@ -> /zfsnv/local

一方で、成功するホストは、/usr/local が普通のディレクトリになっていた。

/usr/local をシンボリックリンクでなくしてみる

ここで /zfsnv/local というのは、ZFS のファイルシステムになっている。

grey% df -h
Filesystem          Size    Used   Avail Capacity  Mounted on
〜
zfsnv               376G     23K    376G     0%    /zfsnv
zfsnv/ports         382G    6.0G    376G     2%    /zfsnv/ports
〜
zfsnv/local         380G    3.2G    376G     1%    /zfsnv/local
〜

この df でいう左端 (Filesystem) の zfsnv/local というのが、右端 (Mounted on) の /zfsnv/local という所にマウントされている (mountpoint)。

今まではこれを、/usr/local からシンボリックリンクさせていた。

ところで、この mountpoint は、ZFS の機能で任意の位置に変更することが出来る。
そうやると、もし将来 zfs import したくなった時に、考えることが増えるので、自分はあまり好きではなかったのだが、今回 mountpoint を設定 (変更) することにする。

まず /usr/local のシンボリックリンクを削除する。

grey% cd /usr

grey% ls -ld local
lrwxr-xr-x  1 root  wheel  12  8月 26 18:47 local@ -> /zfsnv/local

grey% sudo rm -i local
パスワード: 〜
remove local? y

grey% ls -ld local
ls: local: そのようなファイルまたはディレクトリはありません

次に zfsnv/local の mountpoint を /usr/local に設定する..

grey% zfs get mountpoint
NAME            PROPERTY    VALUE            SOURCE
〜
zfsnv           mountpoint  /zfsnv           default
zfsnv/local     mountpoint  /zfsnv/local     default
zfsnv/ports     mountpoint  /zfsnv/ports     default

grey% sudo zfs set mountpoint=/usr/local zfsnv/local
sudo: コマンドが見つかりません.

おっと。

grey% su
Password:〜

root@grey:/usr # zfs set mountpoint=/usr/local zfsnv/local
cannot unmount '/zfsnv/local': デバイスがビジー状態です

うーん.. いろいろプロセスを終了させて.. やっといけるようになった。

root@grey:/home/nsmrtks # zfs set mountpoint=/usr/local zfsnv/local

root@grey:/home/nsmrtks # exit

grey% zfs get mountpoint
NAME            PROPERTY    VALUE            SOURCE
〜
zfsnv           mountpoint  /zfsnv           default
zfsnv/local     mountpoint  /usr/local       local
zfsnv/ports     mountpoint  /zfsnv/ports     default

grey% df -h
Filesystem          Size    Used   Avail Capacity  Mounted on
〜
zfsnv               376G     23K    376G     0%    /zfsnv
zfsnv/ports         382G    6.0G    376G     2%    /zfsnv/ports
〜
zfsnv/local         380G    3.2G    376G     1%    /usr/local

grey% where sudo

grey% rehash

grey% where sudo
/usr/local/bin/sudo

これで、firefox も rust も libreoffice も qt5-x11extras も qt5-help も、ビルド出来るようになった!

grey% pkg info | egrep firefox
firefox-80.0.1,1               Web browser based on the browser portion of Mozilla

grey% pkg info | egrep rust
rust-1.46.0                    Language with a focus on memory safety and concurrency
〜

grey% pkg info | egrep libreoffice
libreoffice-7.0.1.2            Full integrated office productivity suite

grey% pkg info | egrep qt5-x11extras
qt5-x11extras-5.15.0           Qt platform-specific features for X11-based systems

grey% pkg info | egrep qt5-help
qt5-help-5.15.0                Qt online help integration module

以上


index