2009年5月12日火曜日

Optionsの怪

FreeBSD portsからアプリケーションをインストールしようとして、時折困ることがあります。というのは『make時のオプションの意味がわからない』こと。インストールしようとするアプリケーションの知識が中途半端な時『何故このオプションがあるのだろう?』というのが分からなかったりするのです。

そんな状態でports使ってアプリケーション入れたら危険だろう、とか、いろいろあることは分かっているのですが……

例えばsubversionだとこんな感じ。

│ Options for subversion 1.6.2  │
│ ┌────────────────────────────────┐ │
│ │ [ ] MOD_DAV_SVN mod_dav_svn module for Apache 2.X │ │
│ │ [ ] APACHE2_APR Use APR from Apache 2.X │ │
│ │ [ ] MOD_DONTDOTHAT mod_dontdothat for Apache 2.X │ │
│ │ [X] NEON WebDAV/Delta-V repo access module (neon) │ │
│ │ [ ] SERF WebDAV/Delta-V repo access module (serf) │ │
│ │ [ ] SASL SASL2 authorization support │ │
│ │ [X] BDB db4 repository backend │ │
│ │ [ ] ASVN Build and install Archive SVN (asvn) │ │
│ │ [ ] MAINTAINER_DEBUG Build debug version │ │
│ │ [ ] SVNSERVE_WRAPPER Enable svnserve wrapper │ │
│ │ [ ] STATIC Build static version (no shared libs) │ │
│ │ [X] BOOK Install the Subversion Book │ │

これ"だけ"を見て全部のオプションが何を意図していて、何故必要か分かりますか?

こういうときは、Makefile をきちんと読んで、オプションの有無でmakeがどのような動きをするのかを追いかける、というのが、多分正しい手順なんだろうと思います。が、時々これがきついなあと思うことがあるのです。歳だから?とか言わない。

make configの画面だけ切り出して、wikiみたいなところでオプションの解説してくれるようなサービスとかがあったら面白いのかなあ。どうなのかなあ。portsメンテナさんの仕事が増えるだけでしょうか。

ぱっと見でオプションが多くなる理由は、多分なんですが、
・関連するアプリと連携を取る必要があると増える
・OS固有の環境に合わせようとすると増える
・portsメンテナのサービス精神で増える?
みたいなところがあるのかな、と思っています。このあたり、他のOSではどういうふうに対処してるんでしょう。binary packageになってしまっているから、この辺の問題はあまり見えなくなっちゃってるんでしょうかね。

たまにはこういう雑感を書いてみるのもいいかと思い、メモしてみる次第です。

2009年5月11日月曜日

オープンセミナー2009@岡山

オープンセミナー2009@岡山、なるオープンソース&コミュニティ関係のイベントが開催されます。土曜日です。

オープンセミナー2009@岡山 http://os2009.okaya.ma/
日時
2009年5月30日 10:00 - 17:00(11:45から13:00は昼食会)

開催場所
岡山県立大学学部共通棟(南)8206室


内容はまだ未定の部分もいくつかありますが、基本的に講師陣のカラーがよく出ている内容となっている様子。午前中はライトニングトーク9本、後半は50分モノの講演会が4本と、なかなかの分量があるようです。詳しくはプログラムを参照してみて下さい。

中四国圏でオープンソース界隈のイベントに興味のある方、学生社会人問わず、是非ご参加下さいませ。JR最寄り駅から徒歩3分という好立地。高速道路のICもとても近いのでお車での来場もOK。ただしおやつは持参が望ましいと思います。


より大きな地図で ちょっと人に見せるときに使う地図 を表示

2009年4月24日金曜日

portupgradeがダメなときは基本に戻ろうという話。

忘れそうになるのでとりあえずメモ。

FreeBSD portsにある rtorrent を portupgrade で更新しようと思ったのですが、net/xmlrpc-c-devel のコンパイルに失敗しているようで……

cc -o xmlrpc xmlrpc.o srcdir/tools/lib/dumpvalue.o /usr/ports/net/xmlrpc-c-devel/work/xmlrpc-c-1.18.00/lib/util/casprintf.o /usr/ports/net/xmlrpc-c-devel/work/xmlrpc-c-1.18.00/lib/util/cmdline_parser.o /usr/ports/net/xmlrpc-c-devel/work/xmlrpc-c-1.18.00/lib/util/getoptx.o /usr/ports/net/xmlrpc-c-devel/work/xmlrpc-c-1.18.00/lib/util/stripcaseeq.o /usr/ports/net/xmlrpc-c-devel/work/xmlrpc-c-1.18.00/lib/util/string_parser.o -Lblddir/src -Lblddir/lib/libutil -lxmlrpc_client -lxmlrpc -lxmlrpc_util -L/usr/local/lib -lwwwxml -lxmltok -lxmlparse -lwwwzip -lwwwssl -lwwwinit -lwwwapp -lwwwhtml -lwwwtelnet -lwwwnews -lwwwhttp -lwwwmime -lwwwgopher -lwwwftp -lwwwfile -lwwwdir -lwwwcache -lwwwstream -lwwwmux -lwwwtrans -lwwwcore -lwwwutils -lmd5 -lz -L/usr/lib -lssl -lcrypto -L/usr/local/lib -lcurl -rpath=/usr/lib:/usr/local/lib -L/usr/local/lib -L/usr/local/lib -lidn -lssh2 -lssl -lcrypto -lz -L/usr/ports/net/xmlrpc-c-devel/work/xmlrpc-c-1.18.00/lib/expat/xmlparse -lxmlrpc_xmlparse -L/usr/ports/net/xmlrpc-c-devel/work/xmlrpc-c-1.18.00/lib/expat/xmltok -lxmlrpc_xmltok
/usr/bin/ld: warning: libxmlrpc.so.14, needed by blddir/src/libxmlrpc_client.so, may conflict with libxmlrpc.so.3
blddir/src/libxmlrpc.so: undefined reference to `xmlrpc_XML_GetErrorString'
gmake[2]: *** [xmlrpc] エラー 1
gmake[2]: ディレクトリ `/usr/ports/net/xmlrpc-c-devel/work/xmlrpc-c-1.18.00/tools/xmlrpc' から出ます
gmake[1]: *** [xmlrpc/all] エラー 2
gmake[1]: ディレクトリ `/usr/ports/net/xmlrpc-c-devel/work/xmlrpc-c-1.18.00/tools' から出ます
gmake: *** [tools/all] エラー 2

こんな感じで止まります。ちなみに構築環境とMakefileのリビジョンは以下の通り。

# uname -mirs
FreeBSD 7.1-RELEASE-p5 i386 GENERIC
# grep '$FreeBSD:' Makefile
# $FreeBSD: ports/net/xmlrpc-c-devel/Makefile,v 1.38 2009/04/10 18:12:05 chinsan Exp $

ログを見てみると、既に入っている過去バージョンの libxmlrpc.so.3 が衝突している様子。(ldの優先順位が悪いんじゃあ…?) portupgrade は upgrade するときに対象をアンインストールせずに build するようです(?)。

で、ちょっと基本に立ち返ってみたら、あっさり解決しました。

# cd net/xmlrpc-c-devel
# make deinstall
(ここで依存しているパッケージの一覧が警告として出ます。)
# make
(今度はエラーなくbuild出来たようです)
# make install

その後、改めて portupgrade -rf rtorrent を実行すると、今度はうまくいきました。

buildするときに過去のパッケージがあると不都合が起きる、というのは意外だったのですが、こういうものなのでしょうか。ちょっと原因がはっきりしないので、エラーとして報告するのもどうかと思い、とりあえず書いておく次第です。