‰PNG IHDR Û ¤ ;œˆ ®IDATxÚíÜ»n¤0€á¼ÿK¡• Š)(¦pAá‚Â…–±Ç7†LeG{ý§ §㻢|¬ïذaÆ 6lذaÆ 6lذaÆ 6lomûó$^þy¿úÝØ°ag“5 bÆ 6lذaÆ 6lذa{‘í¼ 6lذaÆ ›`›µçã´}HÏFkm,›m¶Ðû¬ÓªñÑêôÒô!Ý‹xÛ|'ܢ˟;·E:—Ôõ9&á¶’¶}®{žv]™n&Ñ6ç íhíÕ_õ÷t¨Ú ͵-Ò«¯šºZ;ú´Z$Û.žPÔÄøkíž)º!§o¡¡ˆ>}l³eQfJÕT±—u Ñ–µò•›åÚ†ª×\âÝX=8ÝîRÙ†4`Vwòl¾>ëÃ×ún•Gþ^›ìi¾s©Ì"msÙ$×uñÝi»ˆ?w¡bs[m©6³K4áãçO†‰¹.£4›Þ%ºÐ×/õÀßÏbëC%Šçtû‰MŸ×–– ú-lîG6±mrz2–ô¶s%»9À•s@˜¹ì-âk»9 =ìæî)ÎÝõÌåâk»B5ÕËÂ×\Ãñš+Í‚çZsÙ²åµòRnÚÂ~G§…ÉR¦¯•CŸŠí¨É›wIcIïén7jJ°åèhÛ›NCS|ìâÓj0æªò8y½iHKÛ›Ö¶ÐkòɈ+;Sz°¶ú¨áL /µFÐ*\çÆÔ”Ë#"5¯Âmë2Üï[SÅ«»Íú‹£=©g¯În‹aóP…eÚÒ“ûLÛÿ lذaÆ 6lØ^kãï̱aÆ 6lذaÆ 6lذa;ÿŠ ¶_ÚÎØ°aÆ 6lذaÆ 6lذaÆ ¶á¨ëœR¢ÇÆ IEND®B`
Apache HTTP サームãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.4
Apache HTTP サーãƒã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«åŒ–ã•れãŸãƒ—ãƒã‚°ãƒ©ãƒ ã§ã€
管ç†è€…ãŒãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’é¸æŠžã™ã‚‹ã“ã¨ã§ã‚µãƒ¼ãƒã«çµ„ã¿è¾¼ã‚€æ©Ÿèƒ½ã‚’é¸ã¶ã“ã¨ãŒã§ãã¾ã™ã€‚
モジュールã¯ã‚µãƒ¼ãƒãŒãƒ“ルドã•れるã¨ãã« httpd
ãƒã‚¤ãƒŠãƒªã«
é™çš„ã«çµ„ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚ã‚‚ã—ãã¯ã€httpd
ãƒã‚¤ãƒŠãƒªã¨ã¯
別ã«å˜åœ¨ã™ã‚‹å‹•的共有オブジェクト (訳注: Dynamic Shared Object)
(DSO) ã¨ã—ã¦ã‚³ãƒ³ãƒ‘イルã™ã‚‹ã“ã¨ã‚‚
ã§ãã¾ã™ã€‚DSO モジュールã¯ã‚µãƒ¼ãƒãŒãƒ“ルドã•れるã¨ãã«ã‚³ãƒ³ãƒ‘イルã—ãŸã‚Šã€
Apache 拡張ツール (apxs
) ã‚’
使ã£ã¦å¾Œã§ã‚³ãƒ³ãƒ‘イルã—ã¦è¿½åŠ ã—ãŸã‚Šã§ãã¾ã™ã€‚
ã“ã®æ–‡æ›¸ã¯ DSO モジュールã®ä½¿ã„æ–¹ã¨ã€ä»•組ã¿ã«ã¤ã„㦠説明ã—ã¾ã™ã€‚
関連モジュール | 関連ディレクティブ |
---|---|
個々㮠Apache モジュールをãƒãƒ¼ãƒ‰ã™ã‚‹ãŸã‚ã® DSO サãƒãƒ¼ãƒˆã¯
mod_so.c
ã¨ã„ã†ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ©Ÿèƒ½ã«åŸºã¥ã„ã¦ã„ã¾ã™ã€‚
ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« 㯠Apache ã®ã‚³ã‚¢ã«é™çš„ã«çµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
ãれ㯠core.c
以外ã§ã¯ DSO ã«ã§ããªã„唯一ã®
モジュールã§ã™ã€‚事実上ã€ä»–ã®ã™ã¹ã¦ã® Apache ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€
ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã®æ–‡æ›¸ã§èª¬æ˜Žã•れã¦ã„るよã†ã«ã€
configure
ã®
--enable-module=shared
オプションã§ãれãžã‚Œã‚’
DSO ビルドã«ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€DSO モジュールã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
mod_foo.so
ã®ã‚ˆã†ãª DSO ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã‚³ãƒ³ãƒ‘イルã•れれã°ã€
httpd.conf
ファイルä¸ã§ mod_so
ã®
LoadModule
ディレクティブを使ã†ã“ã¨ã§ã‚µãƒ¼ãƒã®èµ·å‹•ã‚„å†èµ·å‹•時ã«ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’
ãƒãƒ¼ãƒ‰ã™ã‚‹ã‚ˆã†ã«ã§ãã¾ã™ã€‚
Apache モジュール用㮠(特ã«ã‚µãƒ¼ãƒ‰ãƒ‘ーティモジュールã®) DSO ファイルã®
作æˆã‚’ç°¡å˜ã«ã™ã‚‹ãŸã‚ã«ã€apxs
(APache eXtenSion) ã¨ã„ã†æ–°ã—ã„サãƒãƒ¼ãƒˆãƒ—ãƒã‚°ãƒ©ãƒ ãŒã‚りã¾ã™ã€‚
Apache ã®ã‚½ãƒ¼ã‚¹ãƒ„リーã®å¤–ã§ DSO モジュールをビルドã™ã‚‹ãŸã‚ã«
使ã†ã“ã¨ãŒã§ãã¾ã™ã€‚発想ã¯å˜ç´”ã§ã™: Apache ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ™‚ã®
configure
ã€make install
ã®ã¨ãã« Apache ã®
C ヘッダをインストールã—ã€DSO ビルド用ã®ãƒ—ラットフォームä¾å˜ã®
コンパイラã¨ãƒªãƒ³ã‚«ã®ãƒ•ラグを apxs
プãƒã‚°ãƒ©ãƒ ã«è¿½åŠ ã—ã¾ã™ã€‚
ã“れã«ã‚ˆã‚Šã€ãƒ¦ãƒ¼ã‚¶ãŒ Apache ã®é…布ソースツリーãªã—ã§ã€ã•らã«
DSO サãƒãƒ¼ãƒˆã®ãŸã‚ã®ãƒ—ラットフォームä¾å˜ã®ã‚³ãƒ³ãƒ‘イラやリンカã®
フラグをã„ã˜ã‚‹ã“ã¨ãªã Apache ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ã‚½ãƒ¼ã‚¹ã‚’コンパイル
ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚
Apache 2.x ã® DSO æ©Ÿèƒ½ã®æ¦‚略を知るã“ã¨ãŒã§ãã‚‹ãŸã‚ã®ã€ çŸãç°¡æ½”ãªæ¦‚è¦ã§ã™:
mod_foo.c
ã¨ã—ã¦ã€ãれを DSO mod_foo.so
ã«ãƒ“ルドã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«:
$ ./configure --prefix=/path/to/install --enable-foo=shared
$ make install
mod_foo.c
ã¨ã—ã¦ã€ãれを DSO mod_foo.so
ã«ãƒ“ルドã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«:
$ ./configure --add-module=module_type:/path/to/3rdparty/mod_foo.c \
--enable-foo=shared
$ make install
$ ./configure --enable-so
$ make install
mod_foo.c
ã¨ã—ã¦ã€ãれを apxs
を使ã£ã¦
Apache ソースツリーã®å¤–ã§ DSO ã«ãƒ“ルドã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«:
$ cd /path/to/3rdparty
$ apxs -c mod_foo.c
$ apxs -i -a -n foo mod_foo.la
ã©ã®å ´åˆã«ãŠã„ã¦ã‚‚ã€å…±æœ‰ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’コンパイルã—ãŸå¾Œã§ã€
httpd.conf
ã§
LoadModule
ディレクティブを使ã£ã¦ Apache ãŒãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã™ã‚‹ã‚ˆã†ã«
ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。
最近㮠Unix 系㮠OS ã«ã¯ 動的共有オブジェクト (DSO) ã®å‹•的リンク/ãƒãƒ¼ãƒ‰ã¨ã„ã†æ°—ã®ãã„ãŸæ©Ÿæ§‹ãŒ å˜åœ¨ã—ã¾ã™ã€‚ã“れã¯ã€å®Ÿè¡Œæ™‚ã«ãƒ—ãƒã‚°ãƒ©ãƒ ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ç©ºé–“ã« ãƒãƒ¼ãƒ‰ã§ãるよã†ãªç‰¹åˆ¥ãªå½¢å¼ã§ãƒ—ãƒã‚°ãƒ©ãƒ をビルドã™ã‚‹ã“ã¨ã‚’ å¯èƒ½ã«ã—ã¾ã™ã€‚
ã“ã®ãƒãƒ¼ãƒ‰ã¯äºŒã¤ã®æ–¹æ³•ã§è¡Œãªã†ã“ã¨ãŒã§ãã¾ã™: 実行プãƒã‚°ãƒ©ãƒ ãŒ
èµ·å‹•ã•れãŸã¨ãã« ld.so
ã¨ã„ã†ã‚·ã‚¹ãƒ†ãƒ プãƒã‚°ãƒ©ãƒ
ã«ã‚ˆã‚Šè‡ªå‹•çš„ã«è¡Œãªã‚れる方法ã¨ã€å®Ÿè¡Œãƒ—ãƒã‚°ãƒ©ãƒ ä¸ã‹ã‚‰ã€ã‚·ã‚¹ãƒ†ãƒ コール
dlopen()/dlsym()
ã«ã‚ˆã‚‹ Unix ãƒãƒ¼ãƒ€ã¸ã®
プãƒã‚°ãƒ©ãƒ システムã®ã‚¤ãƒ³ã‚¿ãƒ•ェースを使ã£ã¦æ‰‹å‹•ã§è¡Œãªã†æ–¹æ³•ã¨ãŒ
ã‚りã¾ã™ã€‚
最åˆã®æ–¹æ³•ã§ã¯ DSO ã¯æ™®é€šã¯å…±æœ‰ãƒ©ã‚¤ãƒ–ラリや DSO
ライブラリ ã¨å‘¼ã°ã‚Œã¦ã„ã¦ã€DSO ã®åå‰ã¯
libfoo.so
ã‚„ libfoo.so.1.2
ã®ã‚ˆã†ã«ãªã£ã¦ã„ã¾ã™ã€‚
ã“れらã¯ã‚·ã‚¹ãƒ†ãƒ ディレクトリ (通常 /usr/lib
) ã«å˜åœ¨ã—ã€
実行プãƒã‚°ãƒ©ãƒ ã¸ã®ãƒªãƒ³ã‚¯ã¯ãƒ“ルド時㫠-lfoo
をリンカã«
指定ã™ã‚‹ã“ã¨ã§ç¢ºç«‹ã•れã¾ã™ã€‚ã“れã«ã‚ˆã‚Šãƒ©ã‚¤ãƒ–ラリã¸ã®å‚ç…§ãŒå®Ÿè¡Œãƒ—ãƒã‚°ãƒ©ãƒ ã®
ãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ãè¾¼ã¾ã‚Œã¦ã€èµ·å‹•時㫠Unix ã®ãƒãƒ¼ãƒ€ãŒ /usr/lib
ã‚„ã€
リンカ㮠-R
ã®ã‚ˆã†ãªã‚ªãƒ—ションã«ã‚ˆã‚Šãƒãƒ¼ãƒ‰ã‚³ãƒ¼ãƒ‰ã•れãŸãƒ‘スã€
環境変数 LD_LIBRARY_PATH
ã«ã‚ˆã‚Šè¨å®šã•れãŸãƒ‘スã€ã®ä¸ã‹ã‚‰
libfoo.so
ã®å ´æ‰€ã‚’見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãれã‹ã‚‰ã€
実行プãƒã‚°ãƒ©ãƒ ä¸ã® (ã¾ã 未解決ã®) シンボルを DSO ã«ã‚るシンボルã§
解決ã—ã¾ã™ã€‚
普通ã¯å®Ÿè¡Œãƒ—ãƒã‚°ãƒ©ãƒ ä¸ã®ã‚·ãƒ³ãƒœãƒ«ã¯ DSO ã‹ã‚‰ã¯å‚ç…§ã•れã¾ã›ã‚“
(DSO ã¯ä¸€èˆ¬çš„ãªã‚³ãƒ¼ãƒ‰ã«ã‚ˆã‚‹å†åˆ©ç”¨å¯èƒ½ãªãƒ©ã‚¤ãƒ–ラリã§ã™ã®ã§)。
ã§ã™ã‹ã‚‰ã€ã•らãªã‚‹ã‚·ãƒ³ãƒœãƒ«ã®è§£æ±ºã¯å¿…è¦ã‚りã¾ã›ã‚“。
シンボル㯠Unix ãƒãƒ¼ãƒ€ã«ã‚ˆã‚Šå®Œå…¨ãªè§£æ±ºãŒè¡Œãªã‚れã¾ã™ã®ã§ã€å®Ÿè¡Œãƒ•ァイル自身ã¯
何もã™ã‚‹å¿…è¦ãŒã‚りã¾ã›ã‚“。(実際ã®ã¨ã“ã‚ã€é™çš„ã§ãªã„方法ã§ãƒªãƒ³ã‚¯ã•れã¦ã„ã‚‹
ã™ã¹ã¦ã®å®Ÿè¡Œãƒ—ãƒã‚°ãƒ©ãƒ ã«çµ„ã¿è¾¼ã¾ã‚Œã¦ã„る開始用ã®ã‚³ãƒ¼ãƒ‰ã®ä¸€éƒ¨ã«
ld.so
ã‚’èµ·å‹•ã™ã‚‹ã‚³ãƒ¼ãƒ‰ãŒå«ã¾ã‚Œã¦ã„ã¾ã™)。よã使ã‚れる
ライブラリã®å‹•çš„ãƒãƒ¼ãƒ‰ã®åˆ©ç‚¹ã¯æ˜Žã‚‰ã‹ã§ã™ã€‚ライブラリã®ã‚³ãƒ¼ãƒ‰ã¯
システムライブラリ㫠libc.so
ã®ã‚ˆã†ã«ã—ã¦ä¸€åº¦ä¿å˜ã™ã‚‹ã ã‘ã§ã‚ˆãã€
プãƒã‚°ãƒ©ãƒ ã®ãŸã‚ã«å¿…è¦ãªãƒ‡ã‚£ã‚¹ã‚¯ã®é ˜åŸŸã‚’節約ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
二ã¤ã‚ã®æ–¹æ³•ã§ã¯ DSO ã¯æ™®é€šã¯å…±æœ‰ã‚ªãƒ–ジェクトや
DSO ファイルã¨å‘¼ã°ã‚Œã¦ã„ã¦ã€ä»»æ„ã®æ‹¡å¼µåを付ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™
(ãŸã ã—ã€æ¨™æº–çš„ãªåå‰ã¯ foo.so
ã§ã™)。
ã“れらã®ãƒ•ァイルã¯é€šå¸¸ã¯ãƒ—ãƒã‚°ãƒ©ãƒ 専用ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ç½®ã‹ã‚Œã€
ã“れらを使ã†å®Ÿè¡Œãƒ—ãƒã‚°ãƒ©ãƒ ã¸ã®ãƒªãƒ³ã‚¯ã¯è‡ªå‹•çš„ã«ã¯ã•れã¾ã›ã‚“。
ã§ã™ã®ã§ã€å®Ÿè¡Œãƒ—ãƒã‚°ãƒ©ãƒ 㯠dlopen()
を使ã£ã¦
å®Ÿè¡Œæ™‚ã«æ‰‹å‹•ã§ DSO をプãƒã‚°ãƒ©ãƒ ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ç©ºé–“ã«ãƒãƒ¼ãƒ‰ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
ã“ã®æ™‚点ã§ã¯å®Ÿè¡Œãƒ—ãƒã‚°ãƒ©ãƒ ã«å¯¾ã—㦠DSO ã®ã‚·ãƒ³ãƒœãƒ«ã®è§£æ±ºã¯è¡Œãªã‚れã¾ã›ã‚“。
ã—ã‹ã—ã€ãã®ä»£ã‚り㫠Unix ã®ãƒãƒ¼ãƒ€ãŒ DSO ã® (ã¾ã 未解決ã®) シンボルを
実行プãƒã‚°ãƒ©ãƒ ã«ã‚ˆã‚Šã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã•れãŸã‚·ãƒ³ãƒœãƒ«ã¨æ—¢ã«ãƒãƒ¼ãƒ‰ã•れãŸ
DSO ライブラリã«ã‚ˆã‚Šã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã•れãŸã‚·ãƒ³ãƒœãƒ« (特ã«ã€ã©ã“ã«ã§ã‚‚ã‚ã‚‹
libc.so
ã®ã™ã¹ã¦ã®ã‚·ãƒ³ãƒœãƒ«) ã§è‡ªå‹•çš„ã«è§£æ±ºã—ã¾ã™ã€‚
ã“ã†ã™ã‚‹ã“ã¨ã§ã€DSO ã¯æœ€åˆã‹ã‚‰é™çš„ã«ãƒªãƒ³ã‚¯ã•れã¦ã„ãŸã‹ã®ã‚ˆã†ã«ã€
実行プãƒã‚°ãƒ©ãƒ ã®ã‚·ãƒ³ãƒœãƒ«ã‚’知るã“ã¨ãŒã§ãã¾ã™ã€‚
最後ã«ã€DSO ã® API を利点を生ã‹ã™ãŸã‚ã«ã€ãƒ—ãƒã‚°ãƒ©ãƒ ã¯
後ã§ãƒ‡ã‚£ã‚¹ãƒ‘ッãƒãƒ†ãƒ¼ãƒ–ルãªã©ã§ã‚·ãƒ³ãƒœãƒ«ã‚’使ã†ã“ã¨ãŒã§ãるよã†ã«ã€
dlsym()
を使ã£ã¦ã„ãã¤ã‹ã®ã‚·ãƒ³ãƒœãƒ«ã‚’解決ã—ã¾ã™ã€‚
ã™ãªã‚ã¡: 実行プãƒã‚°ãƒ©ãƒ ã¯å¿…è¦ãªã™ã¹ã¦ã®ã‚·ãƒ³ãƒœãƒ«ã‚’手動ã§è§£æ±ºã—ãªã‘れã°
ãªã‚Šã¾ã›ã‚“。ã“ã®æ©Ÿæ§‹ã®åˆ©ç‚¹ã¯ãƒ—ãƒã‚°ãƒ©ãƒ ã®ã‚ªãƒ—ショナルãªéƒ¨åˆ†ã¯
å¿…è¦ã«ãªã‚‹ã¾ã§ãƒãƒ¼ãƒ‰ã™ã‚‹å¿…è¦ãŒãªã„ (ã ã‹ã‚‰ãƒ¡ãƒ¢ãƒªã‚‚消費ã—ãªã„)
ã“ã¨ã§ã™ã€‚å¿…è¦ãªã‚‰ã°ã€åŸºæœ¬ãƒ—ãƒã‚°ãƒ©ãƒ ã®æ©Ÿèƒ½ã‚’æ‹¡å¼µã™ã‚‹ãŸã‚ã«
ã“れらã®éƒ¨åˆ†ã‚’å‹•çš„ã«ãƒãƒ¼ãƒ‰ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
ã“ã® DSO 機構ã¯ç°¡å˜ãªã‚ˆã†ã«è¦‹ãˆã¾ã™ãŒã€å°‘ãªãã¨ã‚‚一ã¤é›£ã—ã„点㌠ã‚りã¾ã™: プãƒã‚°ãƒ©ãƒ ã‚’æ‹¡å¼µã™ã‚‹ãŸã‚ã« DSO を使ã£ã¦ã„ã‚‹ã¨ãã«ã€ DSO ãŒå®Ÿè¡Œãƒ—ãƒã‚°ãƒ©ãƒ ã‹ã‚‰ã‚·ãƒ³ãƒœãƒ«ã‚’解決ã™ã‚‹ç‚¹ã§ã™ (äºŒç•ªç›®ã®æ–¹æ³•)。 ã“れã¯ãªãœã§ã—ょã†ã‹ã€‚ãれã¯ã€DSO ã®ã‚·ãƒ³ãƒœãƒ«ã‚’実行プãƒã‚°ãƒ©ãƒ 㮠シンボルã‹ã‚‰ã€Œé€†è§£æ±ºã€ã™ã‚‹ã¨ã„ã†ã®ã¯ãƒ©ã‚¤ãƒ–ラリã®è¨è¨ˆ (ライブラリã¯ãれを使用ã™ã‚‹ãƒ—ãƒã‚°ãƒ©ãƒ ã®ã“ã¨ã¯ä½•ã‚‚ 知らãªã„) ã«åã—ã¦ã„ã¦ã€ã“ã®æ©Ÿèƒ½ã¯ã™ã¹ã¦ã®ãƒ—ラットフォーム㫠ã‚ã‚‹ã‚ã‘ã§ã¯ãªãã€æ¨™æº–化もã•れã¦ã„ãªã„ã‹ã‚‰ã§ã™ã€‚ 実際ã«ã¯å®Ÿè¡Œãƒ—ãƒã‚°ãƒ©ãƒ ã®ã‚°ãƒãƒ¼ãƒãƒ«ãªã‚·ãƒ³ãƒœãƒ«ã¯å†ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã•れるã“ã¨ã¯ ã‚ã¾ã‚Šãªãã€DSO ã‹ã‚‰ä½¿ã†ã“ã¨ãŒã§ãã¾ã›ã‚“。リンカã«ã‚°ãƒãƒ¼ãƒãƒ«ã‚·ãƒ³ãƒœãƒ«ã™ã¹ã¦ã‚’ エクスãƒãƒ¼ãƒˆã™ã‚‹ã‚ˆã†ã«ã•ã›ã‚‹æ–¹æ³•を見ã¤ã‘ã‚‹ã“ã¨ãŒã€å®Ÿè¡Œæ™‚ã«ãƒ—ãƒã‚°ãƒ©ãƒ ã‚’ æ‹¡å¼µã™ã‚‹ãŸã‚ã« DSO を使ã†ã¨ãã®ä¸€ç•ªã®å•題ã§ã™ã€‚
共有ライブラリã®ã‚¢ãƒ—ãƒãƒ¼ãƒãŒæ™®é€šã®æ–¹æ³•ã§ã™ã€‚DSO 機構ã¯ãã®ãŸã‚ã« è¨è¨ˆã•れãŸã‚‚ã®ã§ã™ã‹ã‚‰ã€‚ã—ãŸãŒã£ã¦ã€ãã®æ–¹æ³•ã¯ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ㌠æä¾›ã™ã‚‹ã»ã¨ã‚“ã©ã™ã¹ã¦ã®ç¨®é¡žã®ãƒ©ã‚¤ãƒ–ラリã§ä½¿ã‚れã¦ã„ã¾ã™ã€‚ 一方ã€ãƒ—ãƒã‚°ãƒ©ãƒ ã®æ‹¡å¼µã®ãŸã‚ã«å…±æœ‰ã‚ªãƒ–ジェクトを使用ã™ã‚‹ã€ã¨ã„ã†æ–¹ã¯ ã‚ã¾ã‚Šä½¿ã‚れã¦ã„ã¾ã›ã‚“。
1998 å¹´ã®æ™‚点ã§ã€å®Ÿè¡Œæ™‚ã«å®Ÿéš›ã«æ©Ÿèƒ½æ‹¡å¼µã®ãŸã‚ã« DSO 機構を使ã£ã¦ã„ã‚‹ ソフトウェアパッケージã¯å°‘ã—ã ã‘ã§ã—ãŸ: Perl 5 (XS 機構㨠DnaLoader モジュール ã«ã‚ˆã‚‹ã‚‚ã®)ã€Netscape サーãƒãªã©ã§ã™ã€‚Apache ã¯ã™ã§ã« ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ¦‚念を使ã£ã¦æ©Ÿèƒ½æ‹¡å¼µã‚’ã—ã¦ã„ã¦ã€å†…部的ã«ãƒ‡ã‚£ã‚¹ãƒ‘ッãƒãƒªã‚¹ãƒˆã« 基ã¥ã„ãŸå¤–部モジュール㮠Apache コア機能ã¸ã®ãƒªãƒ³ã‚¯ã‚’行ãªã£ã¦ã„ã¾ã—ãŸã®ã§ã€ ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 1.3 ã‹ã‚‰ã€Apache ã‚‚ DSO 機構を使ã†ä»²é–“ã«ãªã‚Šã¾ã—ãŸã€‚ Apache ã¯å®Ÿè¡Œæ™‚ã« DSO を使ã£ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ãƒãƒ¼ãƒ‰ã™ã‚‹ã‚ˆã†ã«ã™ã§ã« é‹å‘½ä»˜ã‘られã¦ã„ãŸã®ã§ã™ã€‚
上記㮠DSO ã«åŸºã¥ã„ãŸæ©Ÿèƒ½ã¯ä»¥ä¸‹ã®åˆ©ç‚¹ãŒã‚りã¾ã™:
configure
ã®ã‚ªãƒ—ションを使ã†ä»£ã‚りã«
実行時㫠httpd.conf
ã®è¨å®šç”¨ã‚³ãƒžãƒ³ãƒ‰
LoadModule
を使ã†ã“ã¨ãŒã§ãã¾ã™ã®ã§ã€ã‚µãƒ¼ãƒãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ã®æŸ”軟性ãŒé«˜ã¾ã‚Šã¾ã—ãŸã€‚
ãŸã¨ãˆã°ã€ä¸€ã¤ã® Apache ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‹ã‚‰
é•ã†æ§‹æˆã®ã‚µãƒ¼ãƒ (標準版㨠SSL ç‰ˆã€æœ€å°æ§‹æˆã¨æ‹¡å¼µç‰ˆ [mod_perl, PHP3]
ãªã©) を実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚apxs
ã®çµ„ã¿åˆã‚ã›ã«ã‚ˆã‚Šã€Apache ソースツリーã®
外ã§ä½œæ¥ã§ãã€é–‹ç™ºä¸ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’
実行ä¸ã® Apache サーãƒã«çµ„ã¿è¾¼ã‚€ãŸã‚ã« apxs -i
ã¨
apachectl restart
を行ãªã†ã ã‘ã§è‰¯ããªã‚‹ã‹ã‚‰ã§ã™ã€‚DSO ã«ã¯ä»¥ä¸‹ã®æ¬ 点ãŒã‚りã¾ã™:
ld -lfoo
)
ã¨ã„ã†ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“ã®ã§ (ãŸã¨ãˆã°ã€a.out ã®ãƒ—ラットフォームã§ã¯
ã“ã®æ©Ÿèƒ½ã¯ã‚りã¾ã›ã‚“ãŒã€ELF ã®ãƒ—ラットフォームã«ã¯ã‚りã¾ã™)ã€
ã™ã¹ã¦ã®ç¨®é¡žã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã« DSO 機構を使ãˆã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。
è¨€ã„æ›ãˆã‚‹ã¨ã€DSO ファイルã¨ã—ã¦ã‚³ãƒ³ãƒ‘イルã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®
使ãˆã‚‹ã‚·ãƒ³ãƒœãƒ«ã¯ã€
Apache ã®ã‚³ã‚¢ã®ã‚·ãƒ³ãƒœãƒ«ã€C ライブラリ (libc
) ã¨
Apache コアãŒä½¿ã£ã¦ã„ã‚‹ä»–ã®ã™ã¹ã¦ã®é™çš„ãªãƒ©ã‚¤ãƒ–ラリã¨å‹•的ライブラリã®
シンボルã€PIC ã«ã‚ˆã‚‹é™çš„ãªãƒ©ã‚¤ãƒ–ラリ (libfoo.a
) ã®
シンボルã®ã¿ã«åˆ¶é™ã•れã¾ã™ã€‚ãã®ä»–ã®ã‚³ãƒ¼ãƒ‰ã‚’ä½¿ã†æ–¹æ³•ã¯ã€
Apache コア自身ãŒã™ã§ã«ãã®ã‚³ãƒ¼ãƒ‰ã¸ã®å‚ç…§ãŒã‚るよã†ã«ã™ã‚‹ã‹ã€
dlopen ()
を使ã£ã¦ã‚³ãƒ¼ãƒ‰ã‚’自分自身ã§ãƒãƒ¼ãƒ‰ã™ã‚‹ã‹ã®
ã©ã¡ã‚‰ã‹ã—ã‹ã‚りã¾ã›ã‚“。