apxs - リファレンスマニュアル、オプション、コマンド例


\$1

\$1

名前

apxs - APache拡張ツール

概要

apxs -g [ -S name=value ] -n modname

apxs -q [ -v ] [ -S name=value ] query ...

apxs -c [ -S name=value ] [ -o dsofile ] [ -I incdir ] [ -D name=value ] [ -L libdir ] [ -l libname ] [ -Wc,compiler-flags ] [ -Wl,linker-flags ] files ...

apxs -i [ -S name=value ] [ -n modname ] [ -a ] [ -A ] dso-file ...

apxs -e [ -S name=value ] [ -n modname ] [ -a ] [ -A ] dso-file ...

まとめ

apxs は、Apache HyperText Transfer Protocol (HTTP) サーバーの拡張モジュールを構築およびインストールするためのツールです。これは、1 つ以上のソースまたはオブジェクトファイルから動的共有オブジェクト (DSO) を構築することで実現され、mod_so の LoadModule ディレクティブを介して実行時に Apache サーバーにロードできます。

したがって、この拡張メカニズムを使用するには、プラットフォームが DSO 機能をサポートし、Apache httpd バイナリが mod_so モジュールを使用して構築されている必要があります。これに当てはまらない場合、apxs ツールは自動的に警告を発します。コマンドを手動で実行することで、これを自分で確認できます


      $ httpd -l
    

モジュール mod_so は、表示されたリストの一部である必要があります。これらの要件が満たされている場合は、このapxs ツールを使用して DSO メカニズムを備えた独自のモジュールをインストールすることで、Apache サーバーの機能を簡単に拡張できます。


      $ apxs -i -a -c mod_foo.c
      gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c
      ld -Bshareable -o mod_foo.so mod_foo.o
      cp mod_foo.so /path/to/apache/modules/mod_foo.so
      chmod 755 /path/to/apache/modules/mod_foo.so
      [activating module `foo' in /path/to/apache/etc/httpd.conf]
      $ apachectl restart
      /path/to/apache/sbin/apachectl restart: httpd not running, trying to start
      [Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module
      /path/to/apache/sbin/apachectl restart: httpd started
      $ _
    

引数ファイルには、任意の C ソース ファイル (.c)、オブジェクト ファイル (.o)、またはライブラリ アーカイブ (.a) を指定できます。 apxs ツールはこれらの拡張子を自動的に認識し、コンパイルには C ソース ファイルを自動的に使用し、リンク段階ではオブジェクト ファイルとアーカイブ ファイルのみを使用します。ただし、このようなコンパイル済みオブジェクトを使用する場合は、動的に読み込まれる共有オブジェクトに使用できるように、位置独立コード (PIC) 用にコンパイルされていることを確認してください。たとえば、GCC では、常に -fpic を使用するだけで済みます。他の C コンパイラについては、そのマニュアル ページを参照するか、apxs がオブジェクト ファイルのコンパイルに使用するフラグを確認してください。

Apache での DSO サポートの詳細については、mod_so のドキュメントを読むか、src/modules/standard/mod_so.c ソース ファイルを読んでください。

オプション

共通オプション

-n modname

これにより、-i (インストール) および -g (テンプレート生成) オプションのモジュール名が明示的に設定されます。モジュール名を明示的に指定する場合に使用します。オプション -g の場合、これは必須です。オプション -i の場合、apxs ツールはソースから、または (フォールバックとして) 名前を決定しようとします。少なくともファイル名から推測することで。

クエリオプション

-q

httpd の構築に使用される変数と環境設定のクエリを実行します。 クエリパラメータを指定せずに呼び出すと、既知の変数とその値がすべて出力されます。オプションの -v パラメータはリスト出力をフォーマットします。 .PP これを使用して、モジュールをロードするhttpd の構築に使用される設定を手動で決定します。たとえば、Apache の C ヘッダー ファイルに手動でアクセスする必要がある場合は、独自の Makefile 内で INC=-I`apxs -q INCLUDEDIR` .PP を使用します。

構成オプション

-S name=value

このオプションは、上記で説明した apxs 設定を変更します。

テンプレート生成オプション

-g

これにより、サブディレクトリ name (オプション -n を参照) と 2 つのファイルが生成されます: mod_name という名前のサンプル モジュール ソース ファイル.c は、独自のモジュールを作成するためのテンプレートとして、または apxs メカニズムを操作するためのクイック スタートとして使用できます。このモジュールのビルドとインストールをさらに簡単にするための、 対応するメイクファイルも提供します。

DSO コンパイル オプション

-c

これはコンパイル操作を示します。まず、ファイルの C ソース ファイル (.c) を対応するオブジェクト ファイル (.o) にコンパイルし、次にこれらのオブジェクト ファイルをリンクすることで動的に共有されるオブジェクトを dsofile に構築します。 ファイルの残りのオブジェクト ファイル (.o および .a)。 -o オプションが指定されていない場合、出力ファイルは files の最初のファイル名から推測されるため、通常はデフォルトの mod_name になります。 .so。

-o dsofile

作成された動的共有オブジェクトのファイル名を明示的に指定します。指定せず、 ファイルリストから名前を推測できない場合は、フォールバック名 mod_unknown.so が使用されます。

-D name=value

このオプションはコンパイル コマンドに直接渡されます。これを使用して、ビルド プロセスに独自の定義を追加します。

-I incdir

このオプションはコンパイル コマンドに直接渡されます。これを使用して、検索する独自のインクルード ディレクトリをビルド プロセスに追加します。

-L libdir

このオプションはリンカ コマンドに直接渡されます。これを使用して、ビルド プロセスで検索する独自のライブラリ ディレクトリを追加します。

-l libname

このオプションはリンカ コマンドに直接渡されます。これを使用して、検索する独自のライブラリをビルド プロセスに追加します。

-Wc,compiler-flags

このオプションは、コンパイラ フラグを追加フラグとして libtool --mode=compile コマンドに渡します。これを使用して、ローカル コンパイラ固有のオプションを追加します。

-Wl,linker-flags

このオプションは、リンカーフラグを追加フラグとして libtool --mode=link コマンドに渡します。これを使用して、ローカル リンカー固有のオプションを追加します。

-p

このオプションにより、apx は apr/apr-util ライブラリに対してリンクされます。これは、apr/apr-util ライブラリを使用するヘルパー プログラムをコンパイルするときに便利です。

DSO のインストールと構成のオプション

-i

これはインストール操作を示し、1 つ以上の動的共有オブジェクトをサーバーのモジュールディレクトリにインストールします。

-a

これにより、対応する LoadModule 行が Apache の httpd.conf 設定ファイルに自動的に追加されるか、すでに存在する場合は有効化されて、モジュールがアクティブ化されます。

-A

オプション -a と同じですが、作成された LoadModule ディレクティブにはハッシュ記号 (#) が接頭辞として付けられます。つまり、モジュールは後で使用するために準備されるだけです。アクティブ化されていますが、最初は無効になっています。

-e

これは編集操作を示します。この操作は、Apache の >httpd.conf 構成ファイルを、モジュールのインストールを試行せずに実行します。

例

Apache のサーバー機能を拡張する mod_foo.c という名前の Apache モジュールが利用可能であると仮定します。これを実現するには、まず次のコマンドを使用して、実行時に Apache サーバーにロードするのに適した共有オブジェクトに C ソースをコンパイルする必要があります。


      $ apxs -c mod_foo.c
      /path/to/libtool --mode=compile gcc ... -c mod_foo.c
      /path/to/libtool --mode=link gcc ... -o mod_foo.la mod_foo.slo
      $ _
    

次に、この共有オブジェクトをロードするための LoadModule ディレクティブが存在することを確認して、Apache 構成を更新する必要があります。この手順を簡素化するために、apxs では、共有オブジェクトを「modules」ディレクトリにインストールし、それに応じて httpd.conf ファイルを更新する自動方法を提供しています。これは、以下を実行することで実現できます。


      $ apxs -i -a mod_foo.la
      /path/to/instdso.sh mod_foo.la /path/to/apache/modules
      /path/to/libtool --mode=install cp mod_foo.la /path/to/apache/modules
      ...
      chmod 755 /path/to/apache/modules/mod_foo.so
      [activating module `foo' in /path/to/apache/conf/httpd.conf]
      $ _
    

このようにして、


      LoadModule foo_module modules/mod_foo.so
    

まだ存在しない場合は、構成ファイルに追加されます。これをデフォルトで無効にしたい場合は、-A オプションを使用します。つまり


      $ apxs -i -A mod_foo.c
    

apxs メカニズムを簡単にテストするには、サンプルの Apache モジュール テンプレートと対応する Makefile を次のように作成できます。


      $ apxs -g -n foo
      Creating [DIR]  foo
      Creating [FILE] foo/Makefile
      Creating [FILE] foo/modules.mk
      Creating [FILE] foo/mod_foo.c
      Creating [FILE] foo/.deps
      $ _
    

その後、すぐにこのサンプル モジュールを共有オブジェクトにコンパイルし、Apache サーバーにロードできます。


      $ cd foo
      $ make all reload
      apxs -c mod_foo.c
      /path/to/libtool --mode=compile gcc ... -c mod_foo.c
      /path/to/libtool --mode=link gcc ... -o mod_foo.la mod_foo.slo
      apxs -i -a -n "foo" mod_foo.la
      /path/to/instdso.sh mod_foo.la /path/to/apache/modules
      /path/to/libtool --mode=install cp mod_foo.la /path/to/apache/modules
      ...
      chmod 755 /path/to/apache/modules/mod_foo.so
      [activating module `foo' in /path/to/apache/conf/httpd.conf]
      apachectl restart
      /path/to/apache/sbin/apachectl restart: httpd not running, trying to start
      [Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module
      /path/to/apache/sbin/apachectl restart: httpd started
      $ _