またまたやってきました。サポート切れ 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を上げるのがいいと思うのですけど、利用者から「絶対に止めないで」と言われたら個別更新するしかありません。