最近の変更サイトマップ

FreeBSD 12のApache 2.4.39がunion semun ickふんだららでビルドエラー

FreeBSD 12.0-RELEASEへの更新中、www/apache24のports更新で以下のようなビルドエラーが起きた。

unixd.c:245:25: error: variable has incomplete type 'union semun'
            union semun ick;
                        ^
unixd.c:245:19: note: forward declaration of 'union semun'
            union semun ick;
                  ^
1 error generated.
*** [unixd.lo] Error code 1

union semunが定義されとらんとな…。

ググってみたら既にバグチケが上がっていた。メンテナ曰く、当該箇所を削除するか全部のトップレベルのportsをリビルドせよとの事だが、後者は面倒でござる。というか、“全てのトップレベル”の範囲がわからんかったので、ソース修正でどうにかする。

/usr/ports/www/apache24/work/httpd-2.4.39/os/unix/unixd.cの240行目付近、#if !APR_HAVE_UNION_SEMUNによってunion semunの定義がなくなっているようなので、#if#endifをコメントしてやる。

            apr_os_proc_mutex_t ospmutex;
//#if !APR_HAVE_UNION_SEMUN  ///★コメントアウト!
            union semun {
                long val;
                struct semid_ds *buf;
                unsigned short *array;
            };
//#endif  ///★コメントアウト!
            union semun ick;
            struct semid_ds buf = { { 0 } };

あとは/usr/ports/www/apache24の下でmake installすればビルドは通る。……が、起動しようとするとSegmentation faultで落ちるぅorz。

見た感じdevel/apr1関係のコードのような気がするので、portmaster apr –force-configでaprをリビルド。その後、改めてportmaster apache24 –force-configしたら無事ビルドも通って問題なく起動した。

FreeBSDでmake.confのWITHOUT_MODULEが使えなくなっていた

FreeBSD 11.2-RELEASE-p7でwww/apache24をビルドしようとしたら、下記のエラーが出て処理が止まってしまった。

===>>> Port directory: /usr/ports/www/apache24

        ===>>> This port is marked IGNORE
        ===>>> : Error from apache.mk. WITH(OUT)_MODULES has been removed, use www_apache24_(UN)SET


        ===>>> If you are sure you can build it, remove the
               IGNORE line in the Makefile and try again.

Apacheだけではなく、他のportsでも出るものがあるようだ。

原因はというと、/etc/make.conf内のWITHOUT_MODULE, WITH_MODULEの記述。どうやら、これらオプションは/etc/src.confの方に書くようになったらしい。make.confからsrc.confに移動したら無事makeが通るようになった。

このオプションはカーネル構築に効くもののようなので、いっそ消してしまってもさほど問題ないかもしれない。

FreeBSDのmail/courierが0.65止まりなのは依存パッケージの問題

変人御用達の Courier Mail Serverのバージョンが、9月にめでたく1.0の大台に乗っていた。

その一方、FreeBSDのportsのmail/courierは何年も0.65止まり。メンテ自体は行われていて、0.65.3のまま周辺環境の変更に追従している感じ。なぜ本体のバージョンアップを行わないのか不思議だったんだけど、MLによれば、メンテナが他の件で忙しいのと、0.65より新しいCourierは依存関係が増え、その解消のために新たなportsを作らなきゃならんのが原因らしい。まぁ、その投稿(2014年)から4年が経つわけですがね…。

早く追従してくれないかなー(人任せ

FreeBSDのMySQLのWITH_CHARSET, WITH_XCHARSET指定はもう止めよう

FreeBSDでPortsからMySQL/MariaDBを入れる際、盲目的に指定するオプションにWITH_CHARSET, WITH_XCHARSETがある。Ports独自のオプションで、しかも日本以外での使用例が殆なく、これぞという解説も見当たらない。やむなくportsの更新履歴や8-RELEASE以前の古いportsツリーを調査してみたところ、なんとmysql55で廃止されているではありませんか。

mysql51-serverのportsのMakefile(MySQLそのもののMakefileじゃないよ)には以下の記述があるが、mysql55-serverからは消えているという事実…!MariaDBはMySQL 5.5からのフォークなので言わずもがなである。

.if defined(WITH_CHARSET) && ${WITH_CHARSET} != ""
CONFIGURE_ARGS+=--with-charset=${WITH_CHARSET}
.endif
.if defined(WITH_XCHARSET) && ${WITH_XCHARSET} != ""
CONFIGURE_ARGS+=--with-extra-charsets=${WITH_XCHARSET}
.endif

見ればわかる通り、portsのWITH_CHARSET, WITH_XCHARSETオプションは、それぞれがMySQLの–with-charset, –with-extra-charsetsオプションに対応している(正確には“していた”)。そして、MySQL 5.5からは–with-charset自体が消えてるっぽい。似た所で–extra-charsetsってのはあるみたいだけど。そして–with-extra-charsetsの方もデフォルト値がallとなったため、ports側から敢えて指定する必要がなくなり、portsオプションが削除されたのだと思われる。

WITH_CHARSET, WITH_XCHARSETオプションは、2001年1月25日にmysql323-serverに対する追加が初出のようだ。その時のコミットメッセージは「Add options for alternate charsets (WITH_CHARSET and WITH_XCHARSET).」といったもの。

というわけで、MySQL/MariaDBインストールでWITH_CHARSET, WITH_XCHARSETを付けるのはもう止めよう

参考サイト

FreeBSDのportmasterで失敗ログが自動保存されるようになってた

家のFreeBSDサーバのportsたちをportmasterで更新していたところ失敗するやつがあった。失敗自体は取り立てて珍しいことでもないが、今回はThis command has been saved to /tmp/portmasterfail.txtという見慣れない行が現れた。メッセージの通り、失敗した時の結果が保存されるらしい。中身はというと…

portmaster <flags> lang/php71-extensions graphics/php71-gd x11/libXpm x11-toolkits/libXt x11/libICE x11/xorgproto x11/libSM x11/libX11 x11/libXau x11/libxcb devel/check x11/libXdmcp x11/xcb-proto x11/libXext math/php71-gmp security/php71-filter security/php71-mcrypt security/libmcrypt security/php71-openssl sysutils/php71-fileinfo sysutils/php71-posix textproc/php71-ctype textproc/php71-dom textproc/php71-simplexml textproc/php71-xml textproc/php71-xmlreader textproc/php71-xmlwriter www/php71-opcache www/php71-session

あ、うん、はい(白目

失敗部分のログが保存されてるかと思いきや、portmasterコマンドのログだけだった…。この機能は2017/2/3のportmaster 3.17.10で実装されたっぽい。まぁ、何も無いよりはマシか。

ちなみに今回の直接の失敗原因はxorgprotoとglprotoの競合だった。

===>  Installing for xorgproto-2018.4
===>  Checking if xorgproto already installed
===>   Registering installation for xorgproto-2018.4 as automatic
Installing xorgproto-2018.4...
pkg-static: xorgproto-2018.4 conflicts with glproto-1.4.17 (installs files into the same place).  Problematic file: /usr/local/include/GL/glxint.h
*** Error code 70

Stop.
make: stopped in /usr/ports/x11/xorgproto

こういう時はまず/usr/ports/UPDATINGを見てみる。特にportsの競合の場合は大抵解決策が書いてある。今回も見事に書いてあった。

20180731:
  AFFECTS: users of x11/xorg and all ports with USE_XORG=*proto
  AUTHOR: zeising@FreeBSD.org

  The xorg *proto packages have all been merged into one package,
  x11/xorgproto.  This might cause issues with upgrading.  If you
  get conflicts between xorgproto and old *proto packages, please
  remove the old package and install xorgproto again.

  In order to remove all orphaned ports, including all *proto port,
  the following can be used after the ports tree has been updated:
  pkg version -l \? | cut -f 1 -w | grep -v compat | xargs pkg delete -fy

X.orgのproto系パッケージがx11/xorgprotoに統合されたために、glprotoと衝突した事がわかる。最終行のコマンドを実行して解決。失敗したportmasterコマンドを再実行してインストール完了。あ、この時にportmasterfail.txtが役立つのか!

start.txt · 最終更新: 2016-05-07 17:46 by Decomo
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0