Apache HTTP Server Version 2.5
apxs
´Â ¾ÆÆÄÄ¡ ÇÏÀÌÆÛÅؽºÆ® Àü¼Û ÇÁ·ÎÅäÄÝ
(HTTP) ¼¹öÀÇ È®Àå¸ðµâÀ» ÄÄÆÄÀÏÇÏ°í ¼³Ä¡ÇÏ´Â µµ±¸ÀÌ´Ù. ÀÌ
µµ±¸´Â ¿©·¯ ¼Ò½º¿Í ¿ÀºêÁ§Æ®ÆÄÀÏÀ» °¡Áö°í,
mod_so
ÀÇ LoadModule
Áö½Ã¾î·Î ½ÇÇàÁß¿¡
¾ÆÆÄÄ¡ ¼¹ö·Î ÀоîµéÀÏ ¼ö ÀÖ´Â µ¿Àû°øÀ¯°´Ã¼(DSO)¸¦ ¸¸µç´Ù.
±×·¡¼ ÀÌ·± È®Àå¹æ½ÄÀ» »ç¿ëÇÏ·Á¸é Ç÷¡ÆûÀÌ DSO ±â´ÉÀ»
Áö¿øÇÏ°í ¾ÆÆÄÄ¡ httpd
½ÇÇàÆÄÀÏÀ»
mod_so
¸ðµâ°ú °°ÀÌ ÄÄÆÄÀÏÇØ¾ß ÇÑ´Ù.
apxs
µµ±¸´Â ÀÌ Á¶°ÇÀÌ ¸¸Á·ÇÏÁö¾ÊÀ¸¸é ½ÇÇàÇÏÁö
¾Ê´Â´Ù. Á÷Á¢ ¸í·É¾î¸¦ ½ÇÇàÇÏ¿© Á¶°ÇÀÌ ¸¸Á·ÇÏ´ÂÁö ¾Ë¾Æº¼
¼ö ÀÖ´Ù
$ httpd -l
¸ñ·Ï¿¡ mod_so
¸ðµâÀÌ ³ª¿Í¾ß ÇÑ´Ù. Á¶°ÇÀ»
¸¸Á·Çϸé apxs
µµ±¸·Î DSO ¸ðµâÀ» ¼³Ä¡ÇÏ¿©
¾ÆÆÄÄ¡¼¹öÀÇ ±â´ÉÀ» ½±°Ô È®ÀåÇÒ ¼ö ÀÖ´Ù:
$ 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 ¼Ò½ºÆÄÀÏÀº
ÄÄÆÄÀÏÇÏ°í, ¿ÀºêÁ§Æ®¿Í ¸ðÀ½ÆÄÀÏÀº ¸µÅ©¿¡¸¸ »ç¿ëÇÑ´Ù. ±×·¯³ª
ÄÄÆÄÀÏÇÑ ¿ÀºêÁ§Æ®¸¦ »ç¿ëÇÏ·Á¸é µ¿ÀûÀ¸·Î ÀоîµéÀÏ ¼ö ÀÖ´Â
°øÀ¯°´Ã¼·Î »ç¿ëÇϱâÀ§ÇØ ¹Ýµå½Ã ¿ÀºêÁ§Æ®¸¦ À§Ä¡µ¶¸³ÄÚµå(PIC,
position independent code)·Î ÄÄÆÄÀÏÇØ¾ß ÇÑ´Ù. GCCÀÇ °æ¿ì
-fpic
À» »ç¿ëÇÏ¸é µÈ´Ù. ´Ù¸¥ C ÄÄÆÄÀÏ·¯´Â ¼³¸í¼¸¦
Âü°íÇϰųª apxs
°¡ ¿ÀºêÁ§Æ®ÆÄÀÏÀ» ÄÄÆÄÀÏÇÒ¶§
»ç¿ëÇÏ´Â ¿É¼ÇÀ» Âü°íÇ϶ó.
¾ÆÆÄÄ¡ÀÇ DSO Áö¿ø¿¡ ´ëÇÑ ´õ ÀÚ¼¼ÇÑ ³»¿ëÀº
mod_so
¹®¼¸¦ Âü°íÇϰųª
src/modules/standard/mod_so.c
¼Ò½ºÆÄÀÏÀ» ÀоîºÁ¶ó.
apxs -g
[ -S name=value ]
-n modname
apxs -q
[ -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 ...
-n modname
-i
(install)°ú -g
(template
generation) ¿É¼ÇÀ» »ç¿ëÇÒ¶§ Á÷Á¢ ¸ðµâ¸íÀ» ÁöÁ¤ÇÑ´Ù. ÀÌ
¿É¼ÇÀ» »ç¿ëÇÏ¿© ¸ðµâ¸íÀ» Á÷Á¢ ÁöÁ¤ÇÑ´Ù. -g
¿É¼ÇÀ» »ç¿ëÇÑ´Ù¸é ÀÌ ¿É¼ÇÀ» ¹Ýµå½Ã »ç¿ëÇؾßÇÏ°í,
-i
¿É¼ÇÀ» »ç¿ëÇÑ´Ù¸é apxs
µµ±¸´Â
¼Ò½º³ª (¸¶Áö¸· ½Ãµµ·Î) ÆÄÀϸíÀ» °¡Áö°í À̸§À» ÃßÃøÇÑ´Ù.-q
apxs
ÀÇ ¼³Á¤°ªÀ» ¾Ë¾Æ³½´Ù. query¿¡´Â
´ÙÀ½À» »ç¿ëÇÒ ¼ö ÀÖ´Ù: CC
, CFLAGS
,
CFLAGS_SHLIB
, INCLUDEDIR
,
LD_SHLIB
, LDFLAGS_SHLIB
,
LIBEXECDIR
, LIBS_SHLIB
,
SBINDIR
, SYSCONFDIR
, TARGET
.
¼³Á¤À» Á÷Á¢ ¾Ë¾Æ³¾¶§ »ç¿ëÇÑ´Ù.
INC=-I`apxs -q INCLUDEDIR`
¿¹¸¦ µé¾î, ¾ÆÆÄÄ¡ C Çì´õÆÄÀÏÀ» Á÷Á¢ Á¢±ÙÇÑ´Ù¸é Makefile¿¡¼ À§¿Í °°ÀÌ »ç¿ëÇÑ´Ù.
-S name=value
-g
-n
¿É¼Ç Âü°í) ±×°÷¿¡ ÆÄÀÏ µÎ°³¸¦ ¸¸µç´Ù: ÇÑ ÆÄÀÏÀº
mod_name.c
¶ó´Â °ßº» ¸ðµâ¼Ò½ºÆÄÀÏ·Î,
ÀÚ½ÅÀÇ ¸ðµâÀ» ¸¸µé¶§ °ßº»À¸·Î »ç¿ëÇϰųª apxs ±â´ÉÀ»
½ÃÇèÇغ¼¶§ »ç¿ëÇÑ´Ù. ´Ù¸¥ ÆÄÀÏÀº ÀÌ ¸ðµâÀ» ½±°Ô ÄÄÆÄÀÏÇÏ°í
¼³Ä¡ÇϱâÀ§ÇÑ Makefile
ÀÌ´Ù.-c
-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
¸í·É¾î·Î Àü´ÞÇÑ´Ù. ¸µÄ¿
ƯÀ¯ÀÇ ¿É¼ÇÀ» Ãß°¡ÇÒ¶§ »ç¿ëÇÑ´Ù.-i
-a
httpd.conf
¼³Á¤ÆÄÀÏ¿¡ ÀûÀýÇÑ
LoadModule
ÁÙÀ»
Ãß°¡Çϰųª ÀÌ¹Ì ÀÖ´Ù¸é È°¼ºÈÇÏ¿© ¸ðµâÀ» »ç¿ëÇϵµ·Ï
¸¸µç´Ù.-A
-a
¿Í ºñ½ÁÇÏÁö¸¸, LoadModule
Áö½Ã¾î ¾Õ¿¡
¿ì¹°Á¤ÀÚ(#
)¸¦ ºÙÀδÙ. Áï, ÇöÀç´Â
»ç¿ëÇÏÁö¾ÊÁö¸¸ ³ªÁß¿¡ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¸ðµâÀ» ÁغñÇÑ´Ù.-e
-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
[/path/to/apache/conf/httpd.conf¿¡¼ `foo' ¸ðµâÀ» È°¼ºÈÇÑ´Ù]
$ _
±×·¯¸é ´ÙÀ½°ú °°Àº ÁÙÀ»
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
[/path/to/apache/conf/httpd.conf¿¡¼ `foo' ¸ðµâÀ» È°¼ºÈÇÑ´Ù]
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
$ _