忍者ブログ
SE稼業で見知った小ネタをまとめてみます。 サーバ・ヲタなので、主にそっち系のTipsを。
[12]  [11]  [10]  [9]  [8]  [7]  [5]  [4]  [3]  [2]  [1
×

[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追記:
 誤記だらけだったので清書。
 半分眠りながらアップするから、誤っちゃうんだよ  > ‘凡庸’

PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
お見えになった方の数
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
最新CM
[08/30 godnowhere]
最新TB
プロフィール
HN:
godnowhere
性別:
男性
職業:
システム・エンジニア
趣味:
機械いぢり
analyzer
忍者ブログ [PR]