\$1
apxs - Narzędzie APache EXtenSion
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 to narzędzie do budowania i instalowania modułów rozszerzeń dla serwera Apache HyperText Transfer Protocol (HTTP). Osiąga się to poprzez zbudowanie dynamicznego obiektu współdzielonego (DSO) z jednego lub więcej plików źródłowych lub obiektowych, które następnie można załadować na serwer Apache w czasie wykonywania za pomocą dyrektywy LoadModule z mod_so.
Aby więc użyć tego mechanizmu rozszerzenia, twoja platforma musi obsługiwać funkcję DSO, a plik binarny httpd Apache musi być zbudowany z modułem mod_so. Narzędzie apxs automatycznie zgłasza reklamację, jeśli tak nie jest. Możesz to sprawdzić samodzielnie, uruchamiając ręcznie polecenie
$ httpd -l
Moduł mod_so powinien być częścią wyświetlanej listy. Jeśli te wymagania są spełnione, możesz łatwo rozszerzyć funkcjonalność swojego serwera Apache, instalując własne moduły z mechanizmem DSO za pomocą tego narzędzia apxs:
$ 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
$ _
Argumenty pliki mogą być dowolnym plikiem źródłowym C (.c), plikiem obiektowym (.o) lub nawet archiwum biblioteki (.a). Narzędzie apxs automatycznie rozpoznaje te rozszerzenia i automatycznie używa plików źródłowych C do kompilacji, używając tylko plików obiektowych i archiwalnych do fazy łączenia. Ale kiedy używasz takich wstępnie skompilowanych obiektów, upewnij się, że są one skompilowane dla kodu niezależnego od pozycji (PIC), aby móc ich używać do dynamicznie ładowanego obiektu współdzielonego. Na przykład z GCC zawsze wystarczy użyć -fpic. W przypadku innych kompilatorów C sprawdź jego stronę podręcznika lub wypatruj flag używanych przez apxs do kompilowania plików obiektowych.
Aby uzyskać więcej informacji na temat obsługi DSO w Apache, przeczytaj dokumentację mod_so, a może nawet przeczytaj plik źródłowy src/modules/standard/mod_so.c.
Spowoduje to jawne ustawienie nazwy modułu dla opcji -i (instalacja) i -g (generowanie szablonu). Użyj tego, aby jawnie określić nazwę modułu. W przypadku opcji -g jest to wymagane, w przypadku opcji -i narzędzie apxs próbuje określić nazwę ze źródła lub (awaryjnie) przynajmniej zgadując to z nazwy pliku.
Wykonuje zapytanie o zmienne i ustawienia środowiska użyte do zbudowania httpd. Po wywołaniu bez parametrów query wypisuje wszystkie znane zmienne i ich wartości. Opcjonalny parametr -v formatuje dane wyjściowe listy. .PP Użyj tego, aby ręcznie określić ustawienia użyte do zbudowania httpd, który załaduje twój moduł. Na przykład użyj INC=-I`apxs -q INCLUDEDIR` .PP wewnątrz własnych Makefile, jeśli potrzebujesz ręcznego dostępu do plików nagłówkowych C Apache'a.
Ta opcja zmienia opisane powyżej ustawienia apxs.
Spowoduje to wygenerowanie podkatalogu nazwa (patrz opcja -n), w którym znajdują się dwa pliki: Przykładowy plik źródłowy modułu o nazwie mod_nazwa.c, który może służyć jako szablon do tworzenia własnych modułów lub jako szybki start do zabawy z mechanizmem apxs. Oraz odpowiedni Makefile dla jeszcze łatwiejszej budowy i instalacji tego modułu.
Oznacza to operację kompilacji. Najpierw kompiluje pliki źródłowe C (.c) plików do odpowiednich plików obiektowych (.o), a następnie buduje dynamicznie udostępniany obiekt w dsofile, łącząc te pliki obiektowe oraz pozostałe pliki obiektowe (.o i .a) z plików. Jeśli nie podano opcji -o, plik wyjściowy jest odgadywany na podstawie pierwszej nazwy pliku w pliki i dlatego zazwyczaj domyślnie jest to mod_nazwa.so.
Jawnie określa nazwę pliku utworzonego dynamicznie udostępnianego obiektu. Jeśli nie zostanie określony, a nazwy nie można odgadnąć z listy plików, zostanie użyta nazwa rezerwowa mod_unknown.so.
Ta opcja jest bezpośrednio przekazywana do poleceń kompilacji. Użyj tego, aby dodać własne definicje do procesu kompilacji.
Ta opcja jest bezpośrednio przekazywana do poleceń kompilacji. Użyj tego, aby dodać własne katalogi dołączania do wyszukiwania w procesie kompilacji.
Ta opcja jest bezpośrednio przekazywana do polecenia konsolidatora. Użyj tego, aby dodać własne katalogi bibliotek do wyszukiwania w procesie kompilacji.
Ta opcja jest bezpośrednio przekazywana do polecenia konsolidatora. Użyj tego, aby dodać własne biblioteki do wyszukiwania w procesie kompilacji.
Ta opcja przekazuje flagi kompilatora jako dodatkowe flagi do polecenia libtool --mode=compile. Użyj tego, aby dodać lokalne opcje specyficzne dla kompilatora.
Ta opcja przekazuje linker-flags jako dodatkowe flagi do polecenia libtool --mode=link. Użyj tego, aby dodać lokalne opcje specyficzne dla konsolidatora.
Ta opcja powoduje, że apxs łączy się z bibliotekami apr/apr-util. Jest to przydatne podczas kompilowania programów pomocniczych, które używają bibliotek apr/apr-util.
Oznacza to operację instalacji i instaluje jeden lub więcej dynamicznie udostępnianych obiektów w katalogu modules serwera.
Spowoduje to aktywację modułu poprzez automatyczne dodanie odpowiedniej linii LoadModule do pliku konfiguracyjnego httpd.conf Apache lub włączenie go, jeśli już istnieje.
To samo co opcja -a, ale utworzona dyrektywa LoadModule jest poprzedzona znakiem krzyżyka (#), tj., moduł jest po prostu przygotowany na później aktywacja, ale początkowo wyłączona.
Wskazuje operację edycyjną, której można użyć z opcjami -a i -A podobnie jak w przypadku operacji -i do edycji Apache'a >httpd.conf bez próby zainstalowania modułu.
Załóżmy, że masz dostępny moduł Apache o nazwie mod_foo.c, który powinien rozszerzyć funkcjonalność serwera Apache. Aby to osiągnąć, musisz najpierw skompilować źródło C do udostępnionego obiektu odpowiedniego do załadowania na serwer Apache w czasie wykonywania za pomocą następującego polecenia:
$ 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
$ _
Następnie musisz zaktualizować konfigurację Apache, upewniając się, że obecna jest dyrektywa LoadModule, aby załadować ten udostępniony obiekt. Aby uprościć ten krok, apxs zapewnia automatyczny sposób instalacji współdzielonego obiektu w jego katalogu „modules” i odpowiedniej aktualizacji pliku httpd.conf. Można to osiągnąć, uruchamiając:
$ 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]
$ _
W ten sposób linia nazwana
LoadModule foo_module modules/mod_foo.so
jest dodawany do pliku konfiguracyjnego, jeśli nadal go nie ma. Jeśli chcesz, aby to było domyślnie wyłączone, użyj opcji -A, tj.
$ apxs -i -A mod_foo.c
Aby szybko przetestować mechanizm apxs, możesz utworzyć przykładowy szablon modułu Apache oraz odpowiedni Makefile poprzez:
$ 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
$ _
Następnie możesz natychmiast skompilować ten przykładowy moduł do obiektu współdzielonego i załadować go na serwer 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
$ _