FreeBSD 9.3: portupgrade: Unknown modifier ‘}’

またまたやってきました。サポート切れ FreeBSD 9.3 で、portupgrade -a を発行したら、「Unknown modifier ‘}’」と出て、全くソースからのビルドが出来なくなるという症状

これは、ports のビルドに使うマスターの Makefile が更新されなくなったために発生する症状で、8.3 の時にも経験済み。

Unknown modifier '}'

"/usr/ports/Mk/Uses/linux.mk", line 295: Malformed conditional ((defined(ONLY_FOR_ARCHS) && empty(ONLY_FOR_ARCHS:M${LINUX_ARCH:S/x86_64/amd64/}))  || !empty(NOT_FOR_ARCHS:M${LINUX_ARCH:S/x86_64/amd64/}))
"/usr/ports/Mk/bsd.port.mk", line 5394: if-less endif
make: fatal errors encountered -- cannot continue

私の場合は、グローバルIPで運用しているサーバーは偶然全て 10.x 系に更新済みで、今回の現象は、昨日現場を退役した FreeBSD 9.3 の旧マシンで操作したものです。新サーバーは稼働していますが、こまごまとした情報参照用にプライベートネットワークで起動しています。引退、即フォーマット ということは行わないので、しばらくテスト用や情報参照用として使用する予定です。

では、-a の全ファイル対象じゃなく個別にビルドしてみたらどうか?

# portupgrade bash
[Reading data from pkg(8) ... - 572 packages found - done]
--->  Upgrading 'bash-4.4.5' to 'bash-4.4.11' (shells/bash)
--->  Building '/usr/ports/shells/bash'
===>  Cleaning for bash-4.4.11
/!\ ERROR: /!\

Ports Collection support for your FreeBSD version has ended, and no ports are
guaranteed to build on this system. Please upgrade to a supported release.

No support will be provided if you silence this message by defining
ALLOW_UNSUPPORTED_SYSTEM.

*** [show-unsupported-system-error] Error code 1

Stop in /usr/ports/shells/bash.
** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portupgrade20170123-46281-1nr6dr3 env UPGRADE_TOOL=portupgrade UPGRADE_PORT=bash-4.4.5 UPGRADE_PORT_VER=4.4.5 make
** Fix the problem and try again.
** Listing the failed packages (-:ignored / *:skipped / !:failed)
	! shells/bash (bash-4.4.5)	(unknown build error)

回避できるかも・・・・

setenv ALLOW_UNSUPPORTED_SYSTEM

とコマンドを発行した後、「portupgrade bash」とアップデート対象の bash に更新をかけてみたところ、ワーニングは表示されるものの、更新できました!
このオプションでは、個別更新が出来るからといって、更新対象ファイル全体に対して通用するわけではないようです。

pkg version -vL= で更新対象パッケージを表示して、急を要するパッケージだけ、portupgrade コマンドの横に羅列して行けば、更新できる可能性があるということです。

例)

# portupgrade pkgconf poppler python sqlite3

更新が出来るかどうかは、ソース提供者側次第。

pkg version コマンドで出力されるリストを、awk などで処理して一覧表を作り、スクリプトで portupgrade してしまえば、もうしばらくは更新を続けられるかも知れません。早めに 10.3 か 11.0 に上げる方が、トータルとしては管理作業は楽になると思います。

けど、OS上で稼働しているアプリケーションが、OS更新後も全く同じ動作で動き続ける保証はありませんからねぇ。運用者側としては悩むところでしょう。数日サービスが止まっても問題ない場合は、OSを上げるのがいいと思うのですけど、利用者から「絶対に止めないで」と言われたら個別更新するしかありません。

コメントを残す