2022年2月18日金曜日

FreeBSD で graphics/gdal/ のアップデートがうまくできなかった件

 現在,個人的な web site 用に FreeBSD を運用している。 今のバージョンは「FreeBSD 12.2-RELEASE-p7」となっている。

そこで,ports 経由でアプリケーションを管理しているが,portmaster でアプリのアップデートをしようとすると「gdal-3.3.3_2」のアップデートでエラーがでた,という話。

 まずは,いつものように「# portsnap fetch update」で ports を最新にし,それから「portmaster -aDG --no-confirm」でアプリケーションをアップデートしようとした。 すると,なぜか「gdal-3.3.3_2」から「gdal-3.4.1」へのアップデートでエラーがでた。
エラーメッセージは以下のような感じだった。
......
c++ -Wl,-rpath,/usr/local/lib -L/usr/local/lib -fstack-protector-strong  ogr2ogr_bin.o  -L/usr/ports/graphics/gdal/work/gdal-3.4.1 -lgdal -o ogr2ogr
c++ -Wl,-rpath,/usr/local/lib -L/usr/local/lib -fstack-protector-strong  ogrtindex.o  -L/usr/ports/graphics/gdal/work/gdal-3.4.1 -lgdal -o ogrtindex
ld: error: undefined symbol: OGRSpatialReference::GetCoordinateEpoch() const
>>> referenced by ogrinfo.cpp:303
>>>               ogrinfo.o:(ReportOnLayer(OGRLayer*, char const*, char const*, OGRGeometry*, bool, bool, char**, bool, bool, bool, char const*)::$_0::operator()(OGRSpatialReference const*) const)
c++: error: linker command failed with exit code 1 (use -v to see invocation)
c++ -Wl,-rpath,/usr/local/lib -L/usr/local/lib -fstack-protector-strong  gdalbuildvrt_bin.o  -L/usr/ports/graphics/gdal/work/gdal-3.4.1 -lgdal -o gdalbuildvrt
gmake[2]: *** [GNUmakefile:161: ogrinfo] Error 1 gmake[2]: *** Waiting for unfinished jobs.... gmake[2]: Leaving directory '/usr/ports/graphics/gdal/work/gdal-3.4.1/apps' gmake[1]: *** [GNUmakefile:123: apps-target] Error 2 gmake[1]: Leaving directory '/usr/ports/graphics/gdal/work/gdal-3.4.1' ===> Compilation failed unexpectedly. Try to set MAKE_JOBS_UNSAFE=yes and rebuild before reporting the failure to the maintainer. *** Error code 1 Stop. make: stopped in /usr/ports/graphics/gdal ** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portupgrade20220207-36392-1xmou4g env UPGRADE_TOOL=portupgrade UPGRADE_PORT=gdal-3.3.3_2 UPGRADE_PORT_VER=3.3.3_2 make ** Fix the problem and try again. ** Listing the failed packages (-:ignored / *:skipped / !:failed) ! graphics/gdal (gdal-3.3.3_2) (unknown build error)

 こんな時によくやる作戦として,(1)「portupgrade -a」を使ってみる,(2)「make install」を使ってみる,というのを実行している。 しかし,今回はどちらの作戦もだめだった。そこで gdal の ports「/usr/ports/graphics/gdal/」の work ファイルのエラーが起こった箇所を見たりしてみた。 どうもエラーは「ld: error: undefined symbol: OGRSpatialReference::GetCoordinateEpoch() const」とあるように「OGRSpatialReference::GetCoordinateEpoch()」が定義されていない,ということみたいだった。この「GetCoordinateEpoch()」は,/usr/ports/graphics/gdal/work/gdal-3.4.1/apps/ の中の「ogrinfo.cpp」で参照されているみたいだった。そこで,GetCoordinateEpoch() が定義されてそうなヘッダーファイルを調べて ogrinfo.cpp に書き加えてみたりしたが,どうもうまくいかなかった。

 なかなかうまくいかない,と2ヶ月ほどうだうだしていたのだが,ふと「undefined symbol: OGRSpatialReference::GetCoordinateEpoch() const」と検索してみた。すると FreeBSD BugzillaBug 261432 - graphics/gdal: gdal-3.4.1 fails to build on 12.3-stable という項目にたどり着いた。

 それによると,どうも API として新しいものを使っているのに,アップデートではそれがうまく反映されない,ということみたいだった。 なので,「pkg delete -f gdal」して,re-install しろ,と書いてあった。

 そこで以下のようにすると,嘘のように簡単にエラーがなくなった…。
# pkg delete -f gdal
# cd /usr/ports/graphics/gdal/
# make install clean
delete してからインストールが失敗すると困るかもなぁ,と思っていつもはやらない作戦がよかったとは…,やられた。

0 件のコメント: