[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
前提:
サーバ⇒ HP Integrityシリーズ(石=Intel Itanium2)
OS⇒ HP-UX B.11.23 ia64 (`uname -srm`の結果)
$(topsrcdir) = /home/var/subversion-1.3.2
はじめに:
バージョン管理システムの“Subversion”を導入することにした。
ソースのリビジョン管理をするため。
「Porting And Archive Centre For HP-UX」にdepot パッケージがあるが、
そんなんではすぐ動いてつまらないので、
ソースからビルドすることにした。
さらに、
Apache2 WebDAVでサーバ機能を果たす、とのことなので、
その機能まで実現を試みた。
各ソースをDLし、
紆余曲折の上にApache2 用DSOモジュールのビルドまでこぎつけ、
出来上がったDSOモジュール‘mod_dav_svn.so’を
Apache2 httpd-2.0.59に組み込んだ。
すると、
% ../bin/apachectl configtest
Syntax error on line 267 of /homea/nzpf/apache2/conf/httpd.conf:
Cannot load /homea/nzpf/apache2/modules/mod_dav_svn.so into server: Unresolved external
%
なんぢゃ、こりゃ。
こんなエラーが出るのは初体験。
これを何とか片付けてみよう。
原因究明と対応:
どんな‘external symbol’が「Unresolved」なのか、確認。
% ldd -r mod_dav_svn.so
libsvn_fs-1.so.0 => /usr/local/svn64/lib/libsvn_fs-1.so.0
libsvn_delta-1.so.0 => /usr/local/svn64/lib/libsvn_delta-1.so.0
libsvn_subr-1.so.0 => /usr/local/svn64/lib/libsvn_subr-1.so.0
libc.so.1 => /usr/lib/hpux64/libc.so.1
libpthread.so.1 => /usr/lib/hpux64/libpthread.so.1
libsvn_fs_fs-1.so.0 => /usr/local/svn64/lib/libsvn_fs_fs-1.so.0
libsvn_fs_base-1.so.0 => /usr/local/svn64/lib/libsvn_fs_base-1.so.0
libapr-0.so.9 => /usr/local/svn64/lib/libapr-0.so.9
libm.so.1 => /usr/lib/hpux64/libm.so.1
libnsl.so.1 => /usr/lib/hpux64/libnsl.so.1
libdl.so.1 => /usr/lib/hpux64/libdl.so.1
libaprutil-0.so.9 => /usr/local/svn64/lib/libaprutil-0.so.9
libdb.so => /usr/local/lib/hpux64/libdb.so
libexpat.so.1 => /usr/local/svn64/lib/libexpat.so.1
libdl.so.1 => /usr/lib/hpux64/libdl.so.1
libdl.so.1 => /usr/lib/hpux64/libdl.so.1
libxti.so.1 => /usr/lib/hpux64/libxti.so.1
libpthread.so.1 => /usr/lib/hpux64/libpthread.so.1
libc.so.1 => /usr/lib/hpux64/libc.so.1
libc.so.1 => /usr/lib/hpux64/libc.so.1
symbol not found: ap_add_input_filter (./mod_dav_svn.so)
symbol not found: dav_register_provider (./mod_dav_svn.so)
● symbol not found: svn_repos_get_logs3 (./mod_dav_svn.so)
● symbol not found: svn_repos_begin_report (./mod_dav_svn.so)
● symbol not found: svn_repos_delete_path (./mod_dav_svn.so)
symbol not found: ap_add_version_component (./mod_dav_svn.so)
● symbol not found: svn_repos_fs_begin_txn_for_commit (./mod_dav_svn.so)
symbol not found: dav_get_liveprop_info (./mod_dav_svn.so)
● symbol not found: svn_repos_dated_revision (./mod_dav_svn.so)
● symbol not found: svn_repos_abort_report (./mod_dav_svn.so)
● symbol not found: svn_repos_fs_change_rev_prop2 (./mod_dav_svn.so)
● symbol not found: svn_repos_path (./mod_dav_svn.so)
● symbol not found: svn_repos_open (./mod_dav_svn.so)
symbol not found: dav_new_error (./mod_dav_svn.so)
symbol not found: dav_xmlns_add (./mod_dav_svn.so)
symbol not found: dav_do_find_liveprop (./mod_dav_svn.so)
symbol not found: ap_fflush (./mod_dav_svn.so)
symbol not found: ap_destroy_sub_req (./mod_dav_svn.so)
symbol not found: ap_filter_flush (./mod_dav_svn.so)
symbol not found: dav_xml_get_cdata (./mod_dav_svn.so)
symbol not found: ap_set_content_length (./mod_dav_svn.so)
symbol not found: ap_getparents (./mod_dav_svn.so)
● symbol not found: svn_repos_fs_lock (./mod_dav_svn.so)
symbol not found: ap_remove_input_filter (./mod_dav_svn.so)
symbol not found: dav_new_error_tag (./mod_dav_svn.so)
symbol not found: ap_hook_insert_filter (./mod_dav_svn.so)
symbol not found: dav_hook_find_liveprop (./mod_dav_svn.so)
symbol not found: dav_hook_insert_all_liveprops (./mod_dav_svn.so)
● symbol not found: svn_repos_fs_change_node_prop (./mod_dav_svn.so)
symbol not found: ap_stripprefix (./mod_dav_svn.so)
symbol not found: ap_get_brigade (./mod_dav_svn.so)
● symbol not found: svn_repos_fs_revision_proplist (./mod_dav_svn.so)
● symbol not found: svn_repos_fs_unlock (./mod_dav_svn.so)
● symbol not found: svn_repos_fs_revision_prop (./mod_dav_svn.so)
● symbol not found: svn_repos_link_path2 (./mod_dav_svn.so)
symbol not found: ap_no2slash (./mod_dav_svn.so)
symbol not found: dav_register_liveprop_group (./mod_dav_svn.so)
● symbol not found: svn_repos_fs_commit_txn (./mod_dav_svn.so)
symbol not found: dav_hook_gather_propsets (./mod_dav_svn.so)
symbol not found: ap_fprintf (./mod_dav_svn.so)
symbol not found: ap_set_content_type (./mod_dav_svn.so)
symbol not found: ap_os_escape_path (./mod_dav_svn.so)
symbol not found: ap_log_perror (./mod_dav_svn.so)
symbol not found: ap_log_rerror (./mod_dav_svn.so)
symbol not found: ap_hook_post_config (./mod_dav_svn.so)
● symbol not found: svn_repos_finish_report (./mod_dav_svn.so)
symbol not found: dav_push_error (./mod_dav_svn.so)
symbol not found: dav_get_locktoken_list (./mod_dav_svn.so)
symbol not found: ap_pass_brigade (./mod_dav_svn.so)
● symbol not found: svn_repos_trace_node_locations (./mod_dav_svn.so)
symbol not found: ap_construct_url (./mod_dav_svn.so)
● symbol not found: svn_repos_fs_change_txn_prop (./mod_dav_svn.so)
● symbol not found: svn_repos_get_file_revs (./mod_dav_svn.so)
symbol not found: ap_sub_req_method_uri (./mod_dav_svn.so)
symbol not found: ap_register_input_filter (./mod_dav_svn.so)
● symbol not found: svn_repos_set_path2 (./mod_dav_svn.so)
● symbol not found: svn_repos_dir_delta (./mod_dav_svn.so)
symbol not found: ap_fputstrs (./mod_dav_svn.so)
● symbol not found: svn_repos_fs (./mod_dav_svn.so)
● symbol not found: svn_repos_fs_get_locks (./mod_dav_svn.so)
symbol not found: main (/usr/lib/hpux64/libc.so.1)
★ symbol not found: libiconv_open (/usr/local/svn32/lib/libaprutil-0.so.9)
★ symbol not found: libiconv_close (/usr/local/svn32/lib/libaprutil-0.so.9)
★ symbol not found: libiconv (/usr/local/svn32/lib/libaprutil-0.so.9)
%
“●”と“★”が怪しい。
まず、“●”について。
“●”マークのついた「Unresolved external」は、
libsvn_repos-1.so.0.0 という、
Subversion内の共有オブジェクト内にある関数たちだ。
$(topsrcdir)/build-outputs.mk 内の“mod_dav_svn.so”リンク実行箇所を確認すると。
リンク対象に“libsvn_repos-1”が入っている。
けど、リンクされてない。
過去の経験より、
記述箇所が前過ぎるのではいけないか、と推察し、
リンク実行コマンドの最後(一番右側)に移動させた。
次に、“★”について。
Subversion付属のapr-utilを使うようにしているが、
その共有オブジェクト内で iconv関数を使っているようだ。
しかし、リンクされていない。
で、
$(topsrcdir)/apr-util/Makefileを確認。
“libaprutil-0”共有オブジェクトをリンクするコマンドの羅列に
iconv関数の入ったライブラリ指定がない。
ので、
指定した。
ビルドのやり直し。
% make clean
・
・
・
% make
・
・
・
% make install
・
・
・
% cd subversion/mod_dav_svn/.libs
% ldd -r mod_dav_svn.so
libsvn_delta-1.so.0 => /usr/local/svn64/lib/libsvn_delta-1.so.0
libsvn_subr-1.so.0 => /usr/local/svn64/lib/libsvn_subr-1.so.0
○ libsvn_repos-1.so.0 => /usr/local/svn64/lib/libsvn_repos-1.so.0
libc.so.1 => /usr/lib/hpux64/libc.so.1
libpthread.so.1 => /usr/lib/hpux64/libpthread.so.1
libaprutil-0.so.9 => /usr/local/svn64/lib/libaprutil-0.so.9
libdb.so => /usr/local/lib/hpux64/libdb.so
libexpat.so.1 => /usr/local/svn64/lib/libexpat.so.1
☆ libiconv.so.5 => /usr/local/lib/hpux64/libiconv.so.5
libapr-0.so.9 => /usr/local/svn64/lib/libapr-0.so.9
libm.so.1 => /usr/lib/hpux64/libm.so.1
libnsl.so.1 => /usr/lib/hpux64/libnsl.so.1
libdl.so.1 => /usr/lib/hpux64/libdl.so.1
libsvn_fs-1.so.0 => /usr/local/svn64/lib/libsvn_fs-1.so.0
libdl.so.1 => /usr/lib/hpux64/libdl.so.1
libpthread.so.1 => /usr/lib/hpux64/libpthread.so.1
libc.so.1 => /usr/lib/hpux64/libc.so.1
libc.so.1 => /usr/lib/hpux64/libc.so.1
libpthread.so.1 => /usr/lib/hpux64/libpthread.so.1
libdl.so.1 => /usr/lib/hpux64/libdl.so.1
libxti.so.1 => /usr/lib/hpux64/libxti.so.1
libsvn_fs_fs-1.so.0 => /usr/local/svn64/lib/libsvn_fs_fs-1.so.0
libsvn_fs_base-1.so.0 => /usr/local/svn64/lib/libsvn_fs_base-1.so.0
symbol not found: ap_add_input_filter (./mod_dav_svn.so)
symbol not found: dav_register_provider (./mod_dav_svn.so)
symbol not found: ap_add_version_component (./mod_dav_svn.so)
symbol not found: dav_get_liveprop_info (./mod_dav_svn.so)
symbol not found: dav_new_error (./mod_dav_svn.so)
symbol not found: dav_xmlns_add (./mod_dav_svn.so)
symbol not found: dav_do_find_liveprop (./mod_dav_svn.so)
symbol not found: ap_fflush (./mod_dav_svn.so)
symbol not found: ap_destroy_sub_req (./mod_dav_svn.so)
symbol not found: ap_filter_flush (./mod_dav_svn.so)
symbol not found: dav_xml_get_cdata (./mod_dav_svn.so)
symbol not found: ap_set_content_length (./mod_dav_svn.so)
symbol not found: ap_getparents (./mod_dav_svn.so)
symbol not found: ap_remove_input_filter (./mod_dav_svn.so)
symbol not found: dav_new_error_tag (./mod_dav_svn.so)
symbol not found: ap_hook_insert_filter (./mod_dav_svn.so)
symbol not found: dav_hook_find_liveprop (./mod_dav_svn.so)
symbol not found: dav_hook_insert_all_liveprops (./mod_dav_svn.so)
symbol not found: ap_stripprefix (./mod_dav_svn.so)
symbol not found: ap_get_brigade (./mod_dav_svn.so)
symbol not found: ap_no2slash (./mod_dav_svn.so)
symbol not found: dav_register_liveprop_group (./mod_dav_svn.so)
symbol not found: dav_hook_gather_propsets (./mod_dav_svn.so)
symbol not found: ap_fprintf (./mod_dav_svn.so)
symbol not found: ap_set_content_type (./mod_dav_svn.so)
symbol not found: ap_os_escape_path (./mod_dav_svn.so)
symbol not found: ap_log_perror (./mod_dav_svn.so)
symbol not found: ap_log_rerror (./mod_dav_svn.so)
symbol not found: ap_hook_post_config (./mod_dav_svn.so)
symbol not found: dav_push_error (./mod_dav_svn.so)
symbol not found: dav_get_locktoken_list (./mod_dav_svn.so)
symbol not found: ap_pass_brigade (./mod_dav_svn.so)
symbol not found: ap_construct_url (./mod_dav_svn.so)
symbol not found: ap_sub_req_method_uri (./mod_dav_svn.so)
symbol not found: ap_register_input_filter (./mod_dav_svn.so)
symbol not found: ap_fputstrs (./mod_dav_svn.so)
symbol not found: main (/usr/lib/hpux64/libc.so.1)
見事、リンクされました。
ので、
Apache2に組み込みませう。
% $APACHE_HOME/bin/apxs -i -n dav_svn mod_dav_svn.so
・
・
・
%
注意事項:
断っておくが、
HP-UX では、
Apache2 は64ビットELFになるよう、コンパイル/リンクしないといけない。
例えば、
プリインストールされてるhttpdは
こんな感じだ。
# file /opt/hpws/apache/bin/httpd
/opt/hpws/apache/bin/httpd: ELF-64 executable object file - IA64
#
理由は、
32ビットELFの$APACHE_HOME/bin/httpd に
$APACHE_HOME/modules/mod_dav_svn.so をロードさせて、
《/svn》ロケーションを以下のように指定すると、
<Location /svn>
DAV svn
SVNParentPath /home/var/svn
</Location>
コア吐いて落ちちゃうのだ。
64ビット化すると、
コア吐かない。
プリインストールされてるApache httpd(/opt/hpws/apache/*)が64ビットELFになっているのは、
こういう事情からではないか?!
他は
ほとんど32ビットELFなのに。
というわけで、
Subversionも64ビットELFバイナリになるようにすること。
HP C Compiler を用いるなら、
以下の環境変数を設定してビルド用configure を流すべし。
% pwd
/home/var/subversion-1.3.2
% CC="/opt/ansic/bin/cc +DD64"; export CC
% ./configure
・
・
・
%
でもねぇ、
64ビット化コンパイルしようと思うと、
いろんなものを事前に64ビット化しておかないといけないので、
結構しんどい。
openssl (--with-sslオプションを指定したら必要)とか
zlib(--with-zlibオプションを指定したら必要)とか
iconv とか
追記:
Webをググると、
HP-UX上のApache2 httpd に
PHP4のDSOモジュールを組み込もうとして
同様のエラーが出るらしい。
多分、共有オブジェクトのリンク順番がいけないか、
必要なものを指定してないか、
原因はどっちかだ。
Solaris やLinux ぢゃ、こんな苦労したことないし。 (-_-;)
でも、
久し振りに楽しめたかも。
合掌
9/7追記:
誤記だらけだったので清書。
半分眠りながらアップするから、誤っちゃうんだよ > ‘凡庸’