APXS(1) apxs APXS(1)

apxs - ابزار ساخت و نصب افزونه‌های آپاچی (APache eXtenSion tool)

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) است. این کار با ساخت یک شیء اشتراکی پویا (DSO) از یک یا چند files (فایل منبع یا شیء) انجام می‌شود که سپس می‌تواند در زمان اجرا از طریق دستورالعمل LoadModule مربوط به mod_so در سرور آپاچی بارگذاری شود.

بنابراین برای استفاده از این سازوکار افزونه، پلتفرم شما باید از ویژگی DSO پشتیبانی کند و فایل اجرایی httpd آپاچی شما باید به همراه ماژول mod_so کامپایل شده باشد. ابزار apxs در صورتی که چنین نباشد به طور خودکار هشدار می‌دهد. شما می‌توانید این مورد را با اجرای دستی دستور زیر بررسی کنید:

$ httpd -l

ماژول mod_so باید بخشی از فهرست نمایش داده شده باشد. اگر این پیش‌نیازها برآورده شده باشند، می‌توانید به راحتی قابلیت‌های سرور آپاچی خود را با نصب ماژول‌های خود با استفاده از سازوکار DSO و به کمک این ابزار 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
$ _

آرگومان‌های files می‌توانند هر فایل منبع C با پسوند (.c)، فایل شیء (.o) یا حتی یک آرشیو کتابخانه (.a) باشند. ابزار apxs این پسوندها را به طور خودکار شناسایی کرده و به صورت خودکار از فایل‌های منبع C برای کامپایل استفاده می‌کند، در حالی که از فایل‌های شیء و آرشیو صرفاً برای مرحله پیوند (linking) بهره می‌برد. اما هنگام استفاده از چنین اشیاء پیش‌کامپایل‌شده‌ای، مطمئن شوید که آن‌ها برای کد مستقل از موقعیت (PIC) کامپایل شده باشند تا بتوان از آن‌ها برای یک شیء اشتراکی با بارگذاری پویا استفاده کرد. برای نمونه، در کامپایلر GCC همیشه کافی است از -fpic استفاده کنید. برای سایر کامپایلرهای C به صفحه راهنمای آن‌ها مراجعه کنید یا پرچم‌هایی را که apxs برای کامپایل فایل‌های شیء استفاده می‌کند بررسی نمایید.

برای جزئیات بیشتر درباره پشتیبانی از DSO در آپاچی، مستندات mod_so را مطالعه کنید یا شاید حتی فایل منبع src/modules/standard/mod_so.c را بخوانید.

نام ماژول را صراحتاً برای گزینه‌های -i (نصب) و -g (تولید قالب) تنظیم می‌کند. از این گزینه برای مشخص کردن صریح نام ماژول استفاده کنید. برای گزینه -g این مورد الزامی است؛ برای گزینه -i ابزار apxs تلاش می‌کند نام را از روی منبع یا (به عنوان راهکار جایگزین) حداقل با حدس زدن از روی نام فایل تعیین کند.

پرس‌وجویی برای متغیرها و تنظیمات محیطی مورد استفاده در ساخت httpd انجام می‌دهد. هنگامی که بدون پارامترهای query فراخوانی شود، تمام متغیرهای شناخته‌شده و مقادیر آن‌ها را چاپ می‌کند. پارامتر اختیاری -v خروجی فهرست را قالب‌بندی می‌کند.

از این گزینه برای تعیین دستی تنظیمات مورد استفاده برای ساخت httpd که ماژول شما را بارگذاری خواهد کرد استفاده کنید. برای نمونه، در صورت نیاز به دسترسی دستی به فایل‌های هدر C آپاچی، از عبارت زیر درون Makefileهای خود استفاده کنید:

INC=-I`apxs -q INCLUDEDIR`

این گزینه تنظیمات apxs شرح‌داده‌شده در بالا را تغییر می‌دهد.

یک زیرپوشه به نام name (گزینه -n را ببینید) و دو فایل در آن ایجاد می‌کند: یک فایل نمونه کد منبع ماژول به نام mod_name.c که می‌تواند به عنوان یک قالب برای ایجاد ماژول‌های خودتان یا به عنوان شروعی سریع برای آزمودن سازوکار apxs استفاده شود؛ و یک Makefile متناظر برای ساخت و نصب حتی ساده‌تر این ماژول.

عملیات کامپایل را مشخص می‌کند. این گزینه ابتدا فایل‌های منبع C با پسوند (.c) در files را به فایل‌های شیء متناظر (.o) کامپایل کرده و سپس با پیوند دادن این فایل‌های شیء به همراه سایر فایل‌های شیء و آرشیو (.o و .a) در files، یک شیء اشتراکی پویا در dsofile می‌سازد. اگر گزینه -o مشخص نشده باشد، نام فایل خروجی از روی اولین نام فایل در files حدس زده می‌شود و بنابراین معمولاً به صورت پیش‌فرض mod_name.so خواهد بود.
نام فایل شیء اشتراکی پویای ایجادشده را صراحتاً مشخص می‌کند. اگر مشخص نشود و نام از فهرست files قابل حدس نباشد، نام جایگزین mod_unknown.so استفاده می‌شود.
این گزینه مستقیماً به دستور(های) کامپایل ارسال می‌شود. از این گزینه برای افزودن ماکروها یا تعاریف دلخواه (defines) خود به فرآیند ساخت استفاده کنید.
این گزینه مستقیماً به دستور(های) کامپایل ارسال می‌شود. از این گزینه برای افزودن پوشه‌های include دلخواه خود جهت جستجو در فرآیند ساخت استفاده کنید.
این گزینه مستقیماً به دستور پیونددهنده (linker) ارسال می‌شود. از این گزینه برای افزودن پوشه‌های کتابخانه دلخواه خود جهت جستجو در فرآیند ساخت استفاده کنید.
این گزینه مستقیماً به دستور پیونددهنده (linker) ارسال می‌شود. از این گزینه برای افزودن کتابخانه‌های دلخواه خود جهت جستجو در فرآیند ساخت استفاده کنید.
این گزینه compiler-flags را به عنوان پرچم‌های اضافی به دستور libtool --mode=compile ارسال می‌کند. از این گزینه برای افزودن گزینه‌های خاص کامپایلر محلی استفاده کنید.
این گزینه linker-flags را به عنوان پرچم‌های اضافی به دستور libtool --mode=link ارسال می‌کند. از این گزینه برای افزودن گزینه‌های خاص پیونددهنده (linker) محلی استفاده کنید.
این گزینه باعث می‌شود apxs پیوند را با کتابخانه‌های apr/apr-util برقرار کند. این قابلیت هنگام کامپایل برنامه‌های کمکی که از کتابخانه‌های apr/apr-util استفاده می‌کنند مفید است.

عملیات نصب را مشخص می‌کند و یک یا چند شیء اشتراکی پویا را در پوشه modules سرور نصب می‌نماید.
ماژول را با افزودن خودکار یک خط متناظر LoadModule به فایل پیکربندی httpd.conf آپاچی، یا با فعال کردن آن در صورت وجود، فعال می‌کند.
مشابه گزینه -a است، اما در ابتدای دستورالعمل LoadModule ایجادشده یک علامت هش (#) قرار می‌گیرد؛ به این معنی که ماژول صرفاً برای فعال‌سازی بعدی آماده شده ولی در ابتدا غیرفعال است.
عملیات ویرایش را مشخص می‌کند، که می‌تواند همراه با گزینه‌های -a و -A مشابه با عملیات -i جهت ویرایش فایل پیکربندی httpd.conf آپاچی بدون تلاش برای نصب ماژول استفاده شود.

فرض کنید یک ماژول آپاچی به نام mod_foo.c در دسترس دارید که قرار است عملکردهای سرور آپاچی را گسترش دهد. برای انجام این کار ابتدا باید با دستور زیر، کد منبع 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 برای بارگذاری این شیء اشتراکی به‌روزرسانی کنید. برای ساده‌سازی این مرحله، ابزار 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، می‌توانید یک قالب نمونه ماژول آپاچی به همراه یک 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
$ _

سپس می‌توانید بلافاصله این ماژول نمونه را در قالب یک شیء اشتراکی کامپایل کرده و در سرور آپاچی بارگذاری کنید:

$ 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
$ _
2026-04-30 Apache HTTP Server