<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Extreme Pattern: Native Tomcat in SLAX</title>
    <link>http://blog.extremepattern.com/articles/2006/09/11/native-tomcat-in-slax</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>enjoy</description>
    <item>
      <title>Native Tomcat in SLAX</title>
      <description>&lt;h3&gt;緣起&lt;/h3&gt;


	&lt;p&gt;年初做了個簡易測試 &lt;a href="http://www.javaworld.com.tw/jute/post/view?bid=9&amp;#38;id=139958&amp;#38;sty=3&amp;#38;age=0"&gt;Tomcat 的 &lt;span class="caps"&gt;APR&lt;/span&gt; 連接器簡易測試&lt;/a&gt; 發布在 javaworld@TW 網站，現在想在 &lt;span class="caps"&gt;SLAX&lt;/span&gt; popcorn 上面跑看看，這裡將先作編譯與環境準備工作，也就是產出相對的 mo 檔。&lt;/p&gt;


	&lt;p&gt;下圖為本文產出的 mo 安裝之後，用 firefox 跑出來的部份畫面。&lt;/p&gt;


	&lt;p&gt;&lt;img src="/files/native-tomcat-1.gif" alt="" /&gt;&lt;/p&gt;


	&lt;h3&gt;更新紀錄 Changelog&lt;/h3&gt;


	&lt;ol&gt;
	&lt;li&gt;2006-09-26 &lt;span class="caps"&gt;APR&lt;/span&gt; 本身編譯時可能以為系統有 sendfile 支援，但是執行時候卻發現沒有這樣支援，可能是檔案系統的支援問題 ? 待查，這個現象在 &lt;a href="/articles/2006/09/18/apache-in-slax"&gt;Apache in Slax 一文&lt;/a&gt; 中有遇到，可以在設定檔關掉這個行為，Tomcat 也可以設定 useSendfile 參數來關掉，預設是有開啟的。所以說下面做法如果沒有做到修正檔案系統或是關掉設定的輔助，很可能會導致更慘的效率，白忙一場。但是這在一般 ext2/ext3 應該都沒問題，不過這裡畢竟是談 &lt;span class="caps"&gt;SLAX&lt;/span&gt; 環境，特此加上說明。&lt;/li&gt;
	&lt;/ol&gt;


	&lt;h3&gt;準備&lt;/h3&gt;


	&lt;p&gt;有些步驟可能之前做過而出現省略或是疏漏現象，請告訴我或是請參考之前本站的 &lt;a href="/articles/2006/09/08/gcin-1-2-4-in-slax-popcorn-5-1-8"&gt;gcin in slax popcorn&lt;/a&gt;  一文，也許可以找到相關提示。&lt;/p&gt;


	&lt;p&gt;編譯需要準備一些工具，當然要跑 tomcat 之前須先有 &lt;span class="caps"&gt;JRE&lt;/span&gt;。一開始先到 &lt;a href="http://tomcat.apache.org/index.html"&gt;Apache Tomcat 5.5.17&lt;/a&gt; 下載，然後主要參考 &lt;a href="http://tomcat.apache.org/tomcat-5.5-doc/apr.html"&gt;Apache Portable Runtime and Tomcat&lt;/a&gt; 的說明來進行。&lt;/p&gt;


	&lt;h3&gt;Create jre mo&lt;/h3&gt;


	&lt;p&gt;先裝安裝檔，再加連結到 /usr/local/bin/java 執行檔與 /usr/local/java 目錄，接著用 dir2mo 包成 mo 檔，並裝上去測看看。&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;cd /mnt/hda1&lt;/li&gt;
		&lt;li&gt;wget jre-1_5_0_08-linux-i586.bin&lt;/li&gt;
		&lt;li&gt;chmod +x jre-1_5_0_08-linux-i586.bin&lt;/li&gt;
		&lt;li&gt;cd /mnt/hda1/work&lt;/li&gt;
		&lt;li&gt;mkdir -p java/usr/local&lt;/li&gt;
		&lt;li&gt;cd java/usr/local/&lt;/li&gt;
		&lt;li&gt;/mnt/hda1/jre-1_5_0_08-linux-i586.bin&lt;/li&gt;
		&lt;li&gt;yes&lt;/li&gt;
		&lt;li&gt;ls&lt;/li&gt;
		&lt;li&gt;jre1.5.0_08/bin/java -version&lt;/li&gt;
		&lt;li&gt;mkdir bin&lt;/li&gt;
		&lt;li&gt;cd bin&lt;/li&gt;
		&lt;li&gt;ln -s ../jre1.5.0_08/bin/java java&lt;/li&gt;
		&lt;li&gt;./java -version&lt;/li&gt;
		&lt;li&gt;cd /mnt/hda1/work/java/usr/local&lt;/li&gt;
		&lt;li&gt;ln -s jre1.5.0_08 java&lt;/li&gt;
		&lt;li&gt;java/bin/java -version&lt;/li&gt;
		&lt;li&gt;cd /mnt/hda1/work&lt;/li&gt;
		&lt;li&gt;dir2mo java jre-1_5_0_08-linux.mo&lt;/li&gt;
		&lt;li&gt;uselivemod jre-1_5_0_08-linux.mo&lt;/li&gt;
		&lt;li&gt;java -version&lt;/li&gt;
	&lt;/ol&gt;


	&lt;h3&gt;Tomcat test run&lt;/h3&gt;


	&lt;p&gt;tomcat 後來預設用 eclipse 的編譯器，所以目前只要裝 &lt;span class="caps"&gt;JRE 1&lt;/span&gt;.5 版，並不需要裝到 &lt;span class="caps"&gt;JDK&lt;/span&gt; 版本，但是編譯 tcnative 需要 &lt;span class="caps"&gt;JDK&lt;/span&gt;，等一下會談到。&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;cd /mnt/hda1&lt;/li&gt;
		&lt;li&gt;wget apache-tomcat-5.5.17.tar.gz&lt;/li&gt;
		&lt;li&gt;tar zxvf apache-tomcat-5.5.17.tar.gz&lt;/li&gt;
		&lt;li&gt;export &lt;span class="caps"&gt;JAVA&lt;/span&gt;_HOME=/usr/local/java&lt;/li&gt;
		&lt;li&gt;apache-tomcat-5.5.17/bin/startup.sh&lt;/li&gt;
		&lt;li&gt;netstat -at | grep 8080&lt;/li&gt;
		&lt;li&gt;more apache-tomcat-5.5.17/logs/catalina.out&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;一開頭部份可以看到 &lt;span class="caps"&gt;APR&lt;/span&gt; 沒有載入。&lt;/p&gt;


&lt;pre&gt;
INFO: The Apache Tomcat Native library which allows optimal performance 
in production environments was not found on the java.library.path:....
&lt;/pre&gt;

	&lt;h3&gt;Create the jdk mo&lt;/h3&gt;


	&lt;p&gt;編譯 tomcat-native-1.1.3 需要 &lt;span class="caps"&gt;JDK&lt;/span&gt; 的一些檔案，所以建立需要的 jdk mo 檔，這個檔約需要 130M 的空間來解開，所以要注意一下空間。&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;cd /mnt/hda1&lt;/li&gt;
		&lt;li&gt;wget jdk-1_5_0_08-linux-i586.bin&lt;/li&gt;
		&lt;li&gt;chmod +x jdk-1_5_0_08-linux-i586.bin&lt;/li&gt;
		&lt;li&gt;cd /mnt/hda1/work&lt;/li&gt;
		&lt;li&gt;mkdir -p jdk/usr/local&lt;/li&gt;
		&lt;li&gt;cd jdk/usr/local/&lt;/li&gt;
		&lt;li&gt;/mnt/hda1/jdk-1_5_0_08-linux-i586.bin&lt;/li&gt;
		&lt;li&gt;jdk1.5.0_08/bin/java -version&lt;/li&gt;
		&lt;li&gt;cd /mnt/hda1/work&lt;/li&gt;
		&lt;li&gt;dir2mo jdk jdk-1_5_0_08-linux.mo&lt;/li&gt;
		&lt;li&gt;uselivemod jdk-1_5_0_08-linux.mo&lt;/li&gt;
		&lt;li&gt;/usr/local/jdk1.5.0_08/bin/java -version&lt;/li&gt;
	&lt;/ol&gt;


	&lt;h3&gt;Create the openssl mo&lt;/h3&gt;


	&lt;p&gt;另外也需要 openssl，爆米花只有裝精簡版，換上完整版。&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;search openssl in http://slackware.it/en/pb/&lt;/li&gt;
		&lt;li&gt;wget openssl-0.9.8b-i486-1.tgz&lt;/li&gt;
		&lt;li&gt;cd /mnt/hda1/work&lt;/li&gt;
		&lt;li&gt;mkdir openssl&lt;/li&gt;
		&lt;li&gt;installpkg -root openssl /mnt/hda1/openssl-0.9.8b-i486-1.tgz&lt;/li&gt;
		&lt;li&gt;dir2mo openssl openssl-0.9.8b.mo&lt;/li&gt;
		&lt;li&gt;uselivemod openssl-0.9.8b.mo&lt;/li&gt;
	&lt;/ol&gt;


	&lt;h3&gt;install Apache Portable Runtime&lt;/h3&gt;


	&lt;p&gt;編譯之前需要 &lt;a href="http://apr.apache.org/"&gt;Apache Portable Runtime&lt;/a&gt;&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;apache-tomcat-5.5.17/bin/shutdown.sh&lt;/li&gt;
		&lt;li&gt;uselivemod /mnt/hda1/Official_Development_module_5_1_4.mo&lt;/li&gt;
		&lt;li&gt;cd /mnt/hda1&lt;/li&gt;
		&lt;li&gt;wget apr-1.2.7.tar.bz2&lt;/li&gt;
		&lt;li&gt;tar jxvf apr-1.2.7.tar.bz2&lt;/li&gt;
		&lt;li&gt;cd apr-1.2.7&lt;/li&gt;
		&lt;li&gt;./configure&lt;/li&gt;
		&lt;li&gt;make&lt;/li&gt;
		&lt;li&gt;make install&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;預設會裝到 /usr/local/apr/&lt;/p&gt;


	&lt;h3&gt;install tomcat native&lt;/h3&gt;


	&lt;ol&gt;
	&lt;li&gt;cd apache-tomcat-5.5.17/bin/&lt;/li&gt;
		&lt;li&gt;tar zxvf tomcat-native.tar.gz&lt;/li&gt;
		&lt;li&gt;cd tomcat-native-1.1.3/jni/native&lt;/li&gt;
		&lt;li&gt;./configure&amp;#8212;with-apr=/usr/local/apr&amp;#8212;with-java-home=/usr/local/jdk1.5.0_08&lt;/li&gt;
		&lt;li&gt;make&lt;/li&gt;
		&lt;li&gt;make install&lt;/li&gt;
		&lt;li&gt;ls /usr/local/apr/lib&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;關鍵在於環境變數 LD_LIBRARY_PATH，只要設對，tomcat 就會啟動 &lt;span class="caps"&gt;APR&lt;/span&gt;。&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;export LD_LIBRARY_PATH=/usr/local/apr/lib&lt;/li&gt;
		&lt;li&gt;cd /mnt/hda1/apache-tomcat-5.5.17&lt;/li&gt;
		&lt;li&gt;bin/startup.sh&lt;/li&gt;
		&lt;li&gt;tail -100 logs/catalina.out&lt;/li&gt;
		&lt;li&gt;bin/shutdown.sh&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;catalina.out 可以看出差異，非 &lt;span class="caps"&gt;APR&lt;/span&gt; 的版本可以找到 Http11BaseProtocol start 字眼，有 &lt;span class="caps"&gt;APR&lt;/span&gt; 的版本可以找出 Http11AprProtocol start。&lt;/p&gt;


	&lt;h3&gt;make apr-tcnative.mo&lt;/h3&gt;


	&lt;p&gt;既然直接編譯可以裝，必須轉成 mo 測看看，這裡將 apr-1.2.7 與 tomcat-native-1.1.3 兩個安裝一起後包成 apr-tcnative-1.1.3.mo 來用。&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;cd /mnt/hda1/apr-1.2.7&lt;/li&gt;
		&lt;li&gt;checkinstall&lt;/li&gt;
		&lt;li&gt;mv apr-1.2.7-i386-1.tgz /mnt/hda1&lt;/li&gt;
		&lt;li&gt;cd /mnt/hda1/apache-tomcat-5.5.17/&lt;/li&gt;
		&lt;li&gt;cd bin/tomcat-native-1.1.3/jni/native/&lt;/li&gt;
		&lt;li&gt;checkinstall&lt;/li&gt;
		&lt;li&gt;mv native-native-i386-1.tgz /mnt/hda1/tomcat-native-i386-1.tgz&lt;/li&gt;
		&lt;li&gt;cd /mnt/hda1/work&lt;/li&gt;
		&lt;li&gt;mkdir apr-tcnative&lt;/li&gt;
		&lt;li&gt;installpkg -root apr-tcnative ../apr-1.2.7-i386-1.tgz&lt;/li&gt;
		&lt;li&gt;installpkg -root apr-tcnative ../tomcat-native-i386-1.tgz&lt;/li&gt;
		&lt;li&gt;dir2mo apr-tcnative apr-tcnative-1.1.3.mo&lt;/li&gt;
		&lt;li&gt;reboot for test&lt;/li&gt;
	&lt;/ol&gt;


	&lt;h3&gt;make tomcat.mo&lt;/h3&gt;


	&lt;p&gt;重開後測試 apr-tcnative-1.1.3.mo 可以的話，就準備改一下 tomcat 來包 apache-tomcat-5.5.15.mo，讓啟動 &lt;span class="caps"&gt;APR&lt;/span&gt; 模式比較簡單。&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;cd /mnt/hda1/work&lt;/li&gt;
		&lt;li&gt;mkdir -p tomcat/usr/local&lt;/li&gt;
		&lt;li&gt;cd tomcat/usr/local&lt;/li&gt;
		&lt;li&gt;tar zxvf ../apache-tomcat-5.5.17.tar.gz&lt;/li&gt;
		&lt;li&gt;cd apache-tomcat-5.5.17&lt;/li&gt;
		&lt;li&gt;vi bin/catalina.sh&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;這裡有個考量，必須指名 &lt;span class="caps"&gt;JAVA&lt;/span&gt;_HOME 的位置，而這個位置卻是每次裝新的 &lt;span class="caps"&gt;JRE&lt;/span&gt; 都會更換的，所以設到 /usr/local/java，加上下面一行。&lt;/p&gt;


	&lt;p&gt;export &lt;span class="caps"&gt;JAVA&lt;/span&gt;_HOME=/usr/local/java&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;uselivemod jre-1_5_0_08-linux.mo&lt;/li&gt;
		&lt;li&gt;uselivemod apr-tcnative-1.1.3.mo&lt;/li&gt;
		&lt;li&gt;cd bin&lt;/li&gt;
		&lt;li&gt;cp startup.sh startapr.sh&lt;/li&gt;
		&lt;li&gt;vi startapr.sh&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;主要是把環境變數寫入，不用每次輸入，加上下面一行。&lt;/p&gt;


	&lt;p&gt;export LD_LIBRARY_PATH=/usr/local/apr/lib&lt;/p&gt;


	&lt;p&gt;開始測看看。&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;./startapr.sh&lt;/li&gt;
		&lt;li&gt;tail -100 logs/catalina.out&lt;/li&gt;
		&lt;li&gt;./shutdown.sh&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;可以跑就準備包起來，同時做個捷徑 /usr/local/tomcat。&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;cd /mnt/hda1/work&lt;/li&gt;
		&lt;li&gt;cd tomcat/usr/local&lt;/li&gt;
		&lt;li&gt;ln -s apache-tomcat-5.5.17 tomcat&lt;/li&gt;
		&lt;li&gt;cd /mnt/hda1/work&lt;/li&gt;
		&lt;li&gt;dir2mo tomcat apache-tomcat-5.5.17.mo&lt;/li&gt;
		&lt;li&gt;reboot&lt;/li&gt;
	&lt;/ol&gt;


	&lt;h3&gt;final tomcat-native mo test run&lt;/h3&gt;


	&lt;p&gt;重開後就可以把需要的 mo 載入跑看看。&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;cd /mnt/hda1/work&lt;/li&gt;
		&lt;li&gt;uselivemod jre-1_5_0_08-linux.mo&lt;/li&gt;
		&lt;li&gt;uselivemod apr-tcnative-1.1.3.mo&lt;/li&gt;
		&lt;li&gt;uselivemod apache-tomcat-5.5.17.mo&lt;/li&gt;
		&lt;li&gt;/usr/local/tomcat/bin/startapr.sh&lt;/li&gt;
		&lt;li&gt;netstat -at&lt;/li&gt;
		&lt;li&gt;tail -100  /usr/local/tomcat/logs/catalina.out&lt;/li&gt;
		&lt;li&gt;uselivemod ttf-arphic-uming-0.1.mo&lt;/li&gt;
		&lt;li&gt;uselivemod firefox-1.5.0.6-zh_TW.mo&lt;/li&gt;
		&lt;li&gt;uselivemod gcin-1.2.5.mo&lt;/li&gt;
		&lt;li&gt;ldconfig&lt;/li&gt;
		&lt;li&gt;startx&lt;/li&gt;
		&lt;li&gt;firefox to http://127.0.0.1:8080/&lt;/li&gt;
	&lt;/ol&gt;


	&lt;h3&gt;Download&lt;/h3&gt;


	&lt;p&gt;下面軟體都是 Apache 改作，所以採 &lt;a href="http://www.apache.org/licenses/LICENSE-2.0.html"&gt;Apache License&lt;/a&gt; 釋出，非本站慣用 &lt;a href="http://blog.extremepattern.com/articles/2006/09/11/license"&gt;授權&lt;/a&gt; 。&lt;/p&gt;


	&lt;p&gt;&lt;img src="/files/archive.png" alt="" /&gt; &lt;a href="/files/apr-tcnative-1.1.3.mo"&gt;apr-tcnative-1.1.3.mo [860K]&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;&lt;img src="/files/archive.png" alt="" /&gt; &lt;a href="/files/apache-tomcat-5.5.17.mo"&gt;apache-tomcat-5.5.17.mo [5964K]&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 11 Sep 2006 02:50:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:28bc283f-6d75-4e2b-a304-c593b2cb02fd</guid>
      <author>LIN</author>
      <link>http://blog.extremepattern.com/articles/2006/09/11/native-tomcat-in-slax</link>
      <category>java</category>
      <category>linux</category>
    </item>
  </channel>
</rss>
