練功房推薦書單

  • Google!Android 3手機應用程式設計入門(第四版)
  • 賈伯斯傳(軟皮精裝版)
  • 猛虎出閘制霸版:最新OCP Java SE 6 Programmer專業認證(附原始程式碼及範例檔)
  • SCWCD 5 猛虎出閘:Java Web 應用程式專業認證
Messages posted by: andowson
Forum Index » Profile for andowson » Messages posted by andowson
Message
Tomcat 6沒有common這個目錄,所以我修改了一下原本的版本升級自動化程式

簡單來說,前一版的Tomcat安裝的樣子
/var/apache-tomcat-6.0.29
/var/tomcat6->/var/apache-tomcat-6.0.29
/var/webapps
新版的Tomcat要安裝成
/var/apache-tomcat-6.0.30
/var/tomcat6->/var/apache-tomcat-6.0.30
/var/webapps(不動)

tomcat6-upgrade.sh:
#!/bin/bash
# Name: Tomcat 6.x auto-upgrade installer
# Author: Andowson Chang (andowson [at] gmail [dot] com)
# Version: 1.7
# Since: 2006-04-30
# Last Modified: 2011-01-31
#
# check the installed version of Tomcat 6.0
#
OLD_VERSION=`ls -l /var | grep tomcat6|awk '{print $11}'|cut -d "-" -f3`
#
# check the latest stable version of Tomcat 6.0
#
wget http://tomcat.apache.org/whichversion.html -q -t 1 -T 5 -O /tmp/tomcat.html
if [ -s /tmp/tomcat.html ]; then
   TOMCAT_VERSION=`grep "6\.0\." /tmp/tomcat.html|grep -v "6\.0\.x"|cut -d">" -f2|cut -d"<" -f1`
fi
rm -rf /tmp/tomcat.html

echo "Install Tomcat ${TOMCAT_VERSION}"
if [ ! -r apache-tomcat-${TOMCAT_VERSION}.tar.gz ]; then
   wget http://apache.ntu.edu.tw/tomcat/tomcat-6/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.tar.gz
fi
tar zxvf apache-tomcat-${TOMCAT_VERSION}.tar.gz -C /var
cp /var/apache-tomcat-${OLD_VERSION}/bin/setenv.sh /var/apache-tomcat-${TOMCAT_VERSION}/bin

#
# find out old jar files that you put in lib yourself
#
if [ ! -r apache-tomcat-${OLD_VERSION}.tar.gz ]; then
   wget http://apache.ntu.edu.tw/tomcat/tomcat-6/v${OLD_VERSION}/bin/apache-tomcat-${OLD_VERSION}.tar.gz
fi
tar zxvf apache-tomcat-${OLD_VERSION}.tar.gz -C /tmp
ls -sort /tmp/apache-tomcat-${OLD_VERSION}/lib | awk '{print $9}' > /tmp/dist.txt
ls -sort /var/apache-tomcat-${OLD_VERSION}/lib | awk '{print $9}' > /tmp/installed.txt
comm -23 /tmp/installed.txt /tmp/dist.txt > /tmp/jarlist.txt
rm -rf /tmp/apache-tomcat-${OLD_VERSION} /tmp/dist.txt /tmp/installed.txt
#
# copy old jar files into new lib directory
#
for file in `cat /tmp/jarlist.txt`
do
   cp -p /var/apache-tomcat-${OLD_VERSION}/lib/${file} /var/apache-tomcat-${TOMCAT_VERSION}/lib
done
#
# copy logging jar files into new lib directory
#
wget http://apache.ntu.edu.tw/tomcat/tomcat-6/v${TOMCAT_VERSION}/bin/extras/tomcat-juli.jar -O /var/apache-tomcat-${TOMCAT_VERSION}/lib/tomcat-juli.jar
wget http://apache.ntu.edu.tw/tomcat/tomcat-6/v${TOMCAT_VERSION}/bin/extras/tomcat-juli-adapters.jar -O /var/apache-tomcat-${TOMCAT_VERSION}/lib/tomcat-juli-adapters.jar

service httpd stop
service tomcat stop
rm -rf /var/tomcat6
ln -s /var/apache-tomcat-${TOMCAT_VERSION} /var/tomcat6
service tomcat start
service httpd start


附檔是Linux上自動化更新的程式,下載附檔儲存到/root/setup/web下,並修改權限為755可執行,然後以root身份執行即可。
如果遇到壓縮過的JavaScript檔或是排版不整齊的JavaScript檔,可以透過這個免費的線上工具來排版,增加可讀性,網址如下:
http://jsbeautifier.org/
使用方法很簡單,將原本的整個JavaScript複製然後貼上網頁上的欄位內,然後按下「Beautify」即可。
最近微軟的Windows Update又包含了合法軟體的驗證(Windows Genuine Advantage 通知)更新,安裝了之後會檢查系統上的產品金鑰是否為合法的,如果不是的話就會把桌面變成黑色,並且標示一個您可能使用盜版軟體的警告。
如果您的公司有微軟大量授權且您用的是Windows XP SP1以後的版本時,可以利用以下方法快速修改為正版序號:
首先下載ChangeVLKeySP1.vbs,存到C:\
' 
' WMI Script - ChangeVLKey.vbs
'
' This script changes the product key on the computer
'
'***************************************************************************

ON ERROR RESUME NEXT


if Wscript.arguments.count<1 then
   Wscript.echo "Script can't run without VolumeProductKey argument"
   Wscript.echo "Correct usage: Cscript ChangeVLKey.vbs ABCDE-FGHIJ-KLMNO-PRSTU-WYQZX"
   Wscript.quit
end if

Dim VOL_PROD_KEY
VOL_PROD_KEY = Wscript.arguments.Item(0)
VOL_PROD_KEY = Replace(VOL_PROD_KEY,"-","") 'remove hyphens if any

for each Obj in GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf ("win32_WindowsProductActivation")

   result = Obj.SetProductKey (VOL_PROD_KEY)

   if err <> 0 then
      WScript.Echo Err.Description, "0x" & Hex(Err.Number)
      Err.Clear
   end if

Next

然後到開始->執行,輸入cmd,開啟命令提示字元:
然後輸入
C:\ChangeVLKeySP1.vbs <正版序號>
馬上黑色的桌面就變回藍天了
參考資料:
http://support.microsoft.com/default.aspx?scid=kb;zh-tw;328874#appliesto
中華電信數據分公司98年度研發替代役人員第二次徵才公告

主旨:公告本公司所轄數據分公司遴選98年研發替代役人員第二次徵才公告事宜。
依據:內政部頒佈之「替代役實施條例」、「研發替代役甄選訓練服役實施辦法」及「中
   華電信股份有限公司新進從業人員遴選作業要點」規定辦理。

一、遴選日程:
  (一)報名日期:自 98.06.03 (星期三)至 98.06.12 (星期五)中午 12 點止
  (二)第一試(資歷論文審查)日期:98.06.15 (星期一)至 98.06.22 (星期一)由數據分公司資歷
    審查遴選。
  (三)第二試通知日期:98.06.25 (星期四),以 Email 通知詳細口試時程及順序表,並請於
    收到 mail 後回覆是否參加。
  (四)第二試(口試)日期:98.07.02 (星期四) ~ 98.07.03 (星期五)(若有異動,以通知變更日期
    為準)。
  (五)放榜日期:98.07.08 (星期三)(若有異動,以通知變更日期為準)。

二、口試地點:台北市信義路一段 21 號數據通信大樓。

三、資格:具有中華民國國籍,且符合內政部研發替代役資格者。

四、報名方式:網路報名外,並請郵寄相關應繳資料,始完成報名手續。
  (一)網路線上登錄報名(時間:98 年 6 月 3 日至 98 年 6 月 12 日中午 12 時正)。
  (二)應徵人員應檢附下列資料:(每人以應徵一項職缺為限)
    1.報名履歷表乙份(請先於網路報名後,再列印「報名履歷表」使用)
    2.自傳(請先登載至報名系統,再列印使用,如有其他附件資料,請一併郵寄)
    3.身分證正反面影本乙份(請黏貼於履歷表上)
    4.研究所及大學全份學業成績單各乙份(如為二技畢業者,請附專科全份成績單)
    5.論文(或論文摘要)、著作、研究計畫資料
    6.技能檢定、證照及經歷證明文件影印本(無者免附)
    7.原住民身分證明(具原住民身分者)
    ※以上資料及證件影本如有偽造、變造及其他不實情事,應考人應負法律責任,如
     獲錄取者亦將取消錄取資格。
  (三)請以限時掛號郵寄應繳表件,並請於 98 年 6 月 12 日前(以郵戳為憑)郵寄「(10048)台
    北市信義路一段 21 號(數據通信大樓),中華電信數據分公司 人事室」始完成報名手
    續。
  (四)報名資料請務必留下正確之地址、E-mail 及聯絡電話、手機號碼,以利通知。

五、錄取名額:22名。

詳細資訊請見:http://www.cht.com.tw/CompanyCat.php?CatID=4&NewsID=2795&Page=HotNewsDetail
請問您是指log4j嗎?
目前JForum有附一個log4j.xml的設定檔在WEB-INF目錄下
可以加以調整以便將訊息輸出到我們指定的路徑下, 目前我的設定如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
	<appender name="jforum-stdout" class="org.apache.log4j.ConsoleAppender">
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %5p [%-20c{1}] %m%n"/>
		</layout>
	</appender>
	
	<appender name="jforum.log" class="org.apache.log4j.RollingFileAppender">
		<param name="MaxFileSize"  value="1024KB"/>
		<param name="MaxBackupIndex" value="4"/>

		<param name="File" value="/home/andowson/logs/jforum.log"/>
		
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d %-5p [%-c{1}] - %m%n"/>
	   </layout>
	</appender>
	
	<category name="org.jgroups">
		<priority value="info"/>
		<appender-ref ref="jforum.log"/>
	</category>
	
	<category name="org.jboss">
		<priority value="info"/>
		<appender-ref ref="jforum.log"/>
	</category>

	<category name="net.jforum">
		<priority value="info" />
		<appender-ref ref="jforum.log" />
	</category>
	
	<category name="freemarker">
		<priority value="info"/>
		<appender-ref ref="jforum.log"/>		
	</category>

	<category name="com.mchange">
		<priority value="info" />
		<appender-ref ref="jforum.log" />
	</category>
</log4j:configuration>
今天在Tomcat 6.0.18上又遇到這個問題
The type javax.servlet.http.HttpSession cannot be resolved. It is indirectly referenced from required .class files
The type javax.servlet.jsp.JspException cannot be resolved. It is indirectly referenced from required .class files
The type javax.servlet.jsp.tagext.Tag cannot be resolved. It is indirectly referenced from required .class files
The type javax.servlet.jsp.JspApplicationContext cannot be resolved. It is indirectly referenced from required .class files
HttpSession cannot be resolved to a type
JspWriter cannot be resolved to a type
JspWriter cannot be resolved to a type
The type javax.servlet.jsp.JspContext cannot be resolved. It is indirectly referenced from required .class files
org.apache.jasper.runtime.PageContextImpl cannot be resolved to a type

後來找到這篇http://forums.sun.com/thread.jspa?threadID=708154
解法如下
修改Tomcat conf目錄下的 web.xml, 將
<init-param>
  <param-name>fork</param-name>
  <param-value>false</param-value>
</init-param>

修改為
<init-param>
  <param-name>fork</param-name>
  <param-value>true</param-value>
</init-param>

然後重新起動Tomcat
這樣就OK了
OLAT 自6.1.0版起開始支援Cluster架構和更容易引進多國語言的翻譯工具,最近更新的6.1.1版,修正了很多新版剛發行時的bug,如修正了一些正體中文註冊連結的問題,因此,我比較推薦安裝這個版本。底下是整個全新安裝的步驟。

一、設計理念
OLAT是一個網頁應用系統,可以在Tomcat上安裝及執行,後端可以接MySQL或PostgreSQL或其他Hibernate支援的資料庫,如果要執行聊天室功能,我們還需要安裝Openfire,如果要支援Cluster,還要安裝JMS Server(如ActiveMQ)。由於設備有限,我以全部安裝在單部主機(CentOS 5.3 Linux)方式介紹,不考慮Cluster的模式。

我們預計安裝OLAT的目錄是/home/andowson/www/olat,底下如未特別聲明,均是以andowson身份執行(具有sudo權限)。

我們預計安裝下列元素:
1. JDK+Apache+Tomcat+mod_jk
2. PostgreSQL
3. Ant
4. Openfire
5. OLAT

二、實作步驟
1.可以參考這篇文章完成:http://www.andowson.com/posts/list/315.page,並參考這篇http://www.andowson.com/posts/list/309.page建立一個Virtual Host,在此就不浪費篇幅。
2.PostgreSQL的安裝及啟動可以透過下列的指令來完成(以root身份執行):
yum -y install postgresql-server
sed -i -e "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" /var/lib/pgsql/data/postgresql.conf

sed -i -e "s/local   all         all                               ident sameuser/local   all         all         trust/g" /var/lib/pgsql/data/pg_hba.conf
sed -i -e "s/host    all         all         127.0.0.1\/32          ident sameuser/host    all         all         127.0.0.1\/32          md5/g" /var/lib/pgsql/data/pg_hba.conf
sed -i -e "69a\host    all         all         192.168.1.0\/24        md5" /var/lib/pgsql/data/pg_hba.conf

chkconfig --level 235 postgresql on
service postgresql start

3.Ant安裝也很簡單,只需要下載並解壓縮即可,這裡我們以安裝1.7.1版為例
cd ~/download
wget http://apache.ntu.edu.tw/ant/binaries/apache-ant-1.7.1-bin.tar.gz
sudo tar zxvf apache-ant-1.7.1-bin.tar.gz -C /usr/local

接著設定環境變數ANT_HOME
vi ~/.bash_profile
ANT_HOME=/usr/local/apache-ant-1.7.1
JAVA_HOME=/usr/java/latest
PATH=$PATH:$HOME/bin:$ANT_HOME/bin:$JAVA_HOME/bin

export PATH ANT_HOME JAVA_HOME

執行source將設定載入
source ~/.bash_profile

4.安裝Openfire(以root身份執行):
cd /root/setup
wget http://www.igniterealtime.org/downloadServlet?filename=openfire/openfire-3.6.4-1.i386.rpm
rpm -ivh openfire-3.6.4-1.i386.rpm
chmod 755 /opt/openfire

建立資料庫openfire
sudo -u postgres psql -c "CREATE USER openfire WITH ENCRYPTED PASSWORD 'openfire' VALID UNTIL 'infinity' CREATEDB;" template1
sudo -u postgres psql -c "CREATE DATABASE openfire WITH ENCODING 'UNICODE';" -U openfire template1
sudo -u postgres psql -c "ALTER USER openfire NOCREATEDB;" template1
sudo -u postgres psql openfire openfire -f /opt/openfire/resources/database/openfire_postgresql.sql

手動設定設定檔openfire.xml,將下列設定貼在</jive>之前
vi /opt/openfire/conf/openfire.xml
  <connectionProvider>
    <className>org.jivesoftware.database.DefaultConnectionProvider</className>
  </connectionProvider>
  <database>
    <defaultProvider>
      <driver>org.postgresql.Driver</driver>
      <serverURL>jdbc:postgresql://localhost:5432/openfire</serverURL>
      <username>openfire</username>
      <password>openfire</password>
      <testSQL>select 1</testSQL>
      <testBeforeUse>true</testBeforeUse>
      <testAfterUse>true</testAfterUse>
      <minConnections>1</minConnections>
      <maxConnections>25</maxConnections>
      <connectionTimeout>1.0</connectionTimeout>
    </defaultProvider>
  </database>
  <setup>true</setup>

調整openfire在系統開機時自動啟動的順序(要在PostgreSQL之後,Tomcat之前)
sed -i -e "s/99 1/80 20/g" /etc/init.d/openfire
調整openfire啟動時的JVM參數
sed -i -e "s/-server/-server -Xss256k/g" /etc/init.d/openfire
設定開機自動啟動openfire
chkconfig openfire on
啟動openfire
service openfire start

啟動之後,開啟瀏覽器到http://<your_server_name>:9090/,以admin/admin登入
調整一些系統設定,如mail server,不允許使用者建立帳號跟修改密碼等
接著下載OLAT plugin
http://www.olat.org/downloads/stable/olatUserAndGroupService.jar
然後切換到Plugin頁面,將這個jar檔匯入即可。

注意:如果您有設定iptables或其他防火牆,建議先關閉,等測試沒問題後再打開,並增加Openfire所需要的port。

5.終於到了主菜了,安裝OLAT,我們需要先下載OLAT原始碼的壓縮檔,解壓縮,建立build.properties,然後再執行ant config-all, ant build來編譯。
# get OLAT source
cd ~/download
wget http://www.olat.org/downloads/stable/OLAT-6.1.1.zip
unzip OLAT-6.1.1.zip
mv OLAT-6.1.1-PUBLIC-* olat3
cd olat3
# config build.properties
sed -e "s/\/usr\/local\/opt\/olat\/olat3/\/home\/andowson\/download\/olat3/g" \
-e "s/\/usr\/local\/opt\/olat\/olatdata/\/home\/andowson\/data\/olatdata/g" \
-e "s/\/usr\/local\/opt\/tomcat/\/var\/tomcat6/g" \
-e "1,$$s/www.myolat.com/www.andowson.com/g" \
-e "1,$$s/myolat.com/andowson.com/g" \
-e "1,$$s/myolat/andowson/g" \
-e "s/server.modjk.enabled=false/server.modjk.enabled=true/g" \
-e "55a\server.modjk.jvmRoute=worker1" \
-e "s/defaultcharset=ISO-8859-1/defaultcharset=UTF-8/g" \
-e "s/registration.enableNotificationEmail=false/registration.enableNotificationEmail=true/g" \
-e "s/smtp.host=smtp.andowson.com/smtp.host=smtp.yourcompany.com/g" \
-e "s/smtp.user=/smtp.user=username/g" \
-e "s/smtp.pwd=/smtp.pwd=password/g" \
-e "120,142d" \
-e "1,$$s/#db/db/g" \
-e "1,$$s/net.sf.hibernate/org.hibernate/g" \
-e "s/instantMessaging.enable=false/instantMessaging.enable=true/g" \
-e "s/instantMessaging.server.name=jabber.andowson.com/instantMessaging.server.name=www.andowson.com/g" \
-e "s/instantMessaging.db.name=wildfire/instantMessaging.db.name=openfire/g" \
-e "s/instantMessaging.db.user=wildfire/instantMessaging.db.user=openfire/g" \
-e "s/instantMessaging.db.pass=wildfire/instantMessaging.db.pass=openfire/g" \
-e "s/cluster.catalinaport=8006/cluster.catalinaport=8105/" \
-e "s/cluster.ajpport=8009/cluster.ajpport=8109/" build.properties.default > build.properties
# adjust the original template config files
sed -i -e "s/<enabledLanguages>en,de,fr,it,es<\/enabledLanguages>/<enabledLanguages>en,de,fr,it,es,zh_CN,zh_TW<\/enabledLanguages>/g" ~/download/olat3/webapp/WEB-INF/olat_config.xml.in
sed -i -e "1,$$s/olat-newinstallation.org/andowson.com/g" ~/download/olat3/webapp/WEB-INF/olat_config.xml.in
sed -i -e "13c\        <\!-- default session timeout -->" ~/download/olat3/webapp/WEB-INF/web.xml.in
ant config-all
ant build

接著我們需要先建立一個olat的資料庫再來執行ant dbsetup_postgreSQL。
# create database olat and testdb
sudo -u postgres psql -c "CREATE USER olat WITH ENCRYPTED PASSWORD 'olat' VALID UNTIL 'infinity' CREATEDB;" template1
sudo -u postgres psql -c "CREATE DATABASE olat WITH ENCODING 'UNICODE';" -U olat template1
sudo -u postgres psql -c "CREATE DATABASE testdb WITH ENCODING 'UNICODE';" -U olat template1
sudo -u postgres psql -c "ALTER USER olat NOCREATEDB;" template1

這裡要注意的是PostgreSQL 8.2之前的版本尚未支援drop table if exists這種語法,因在CentOS 5.3發行的是PostgreSQL 8.1.11的版本,由於執行dbsetup_postgreSQL時會先執行deleteDatabase.sql,第一次安裝時由於資料庫是空的,會失敗,故我們需要修正一下deleteDatabase.sql裡面的語法。我們可以先將deleteDatabase.sql換成一個空檔,等第一次建立好table後再換回來。另外第一次啟動時也會執行alter_6_0_x_to_6_1_0.sql,故我們也要同步修正這邊的drop table if exists語法。
# PostgreSQL 8.1 doesn't support if exists
sed -i -e "1,$$s/if exists //g" ~/download/olat3/database/postgresql/deleteDatabase.sql
sed -i -e "1,$$s/if exists //g" ~/download/olat3/database/postgresql/alter_6_0_x_to_6_1_0.sql

# First time install, drop table will fail, use an empty file instead
mv ~/download/olat3/database/postgresql/deleteDatabase.sql ~/download/olat3/database/postgresql/deleteDatabase.sql.bak
touch ~/download/olat3/database/postgresql/deleteDatabase.sql
ant dbsetup_postgreSQL
mv ~/download/olat3/database/postgresql/deleteDatabase.sql.bak ~/download/olat3/database/postgresql/deleteDatabase.sql


接著就可以把編譯好的程式及網頁部署到我們的目的資料夾~/www/olat了,另外OLAT是把程式跟資料分開存放的,這樣子將來要升級新版只要換掉程式碼的目錄即可,我們選定~/data/olatdata作為這個目錄。由於OLAT會將一些檔案解壓縮到static和WEB-INF下,所以記得變更目錄的寫入權限。
# deploy to web directory
cp -rf ~/download/olat3/webapp ~/www/olat
cp -rf ~/download/olat3/htdocs/* ~/www/olat
sudo chgrp -R tomcat ~/www
sudo chgrp -R tomcat ~/data/olatdata
sudo chmod 775 ~/www/olat/static
sudo chmod 775 ~/www/olat/WEB-INF
sudo chmod 775 -R ~/data/olatdata

最後,我們要設定讓Apache將/olat開頭的網址交給Tomcat處理,然後重新啟動Tomcat和Apache。
# add httpd handle setting
echo '/olat/*=loadbalancer' >> /etc/httpd/conf/uriworkermap.properties
sudo /etc/init.d/tomcat stop
sudo killall -9 /usr/java/latest/bin/java
sudo /etc/init.d/tomcat start
sudo /etc/init.d/httpd restart


到此,差不多大功告成了,用administrator/olat登入http://<your_server_name>/olat/dmz/吧!如果可以的話,建議先修改一下密碼再往下進行新的任務囉!
為了升級網站的軟硬體,從四月中開始在別人捐贈的舊電腦上進行安裝及測試,這個週末終於完成進行實際的移機作業。

移機前的硬體大致如下:
CPU: Intel Pentium II-350 MHz/512K L2 Cache
RAM: 512MB (PC-100+PC-133)
HD: 40GB IDE 7200RPM
NIC: 10/100M Fast Ethernet

移機後的硬體大致如下:
CPU: AMD Athlon 1GHz/256K L2 Cache
RAM: 640 MB PC-133
HD: 40GB IDE 7200RPM
NIC: 10/100M Fast Ethernet

對外的Internet網路頻寬目前是HiNet ADSL 8M/640K

粗估大約同時20人上站應該是沒問題

移機後因考量硬體資源不足或網路上已有替代服務,下列的功能或服務項目暫停提供:
Blog(Roller)
Project(Trac + Subversion, JTrac)
Wiki(JSPWiki)
Webmail(JSP Webmail)
Online Message(JSP 線上水球)
Aquamp(線上音樂播放面板)

感謝您對安道生網站技術練功房的支持。
98年度新進從業人員徵才公告

中華電信委託財團法人台灣金融研訓院辦理 98 年度新進從業人員召募作業,預定錄取名額 236 名。

報名期間:自 98 年 6 月 1 日 09:00 至 6 月 11 日 18:00 截止

報名方式:一律採網路報名

報名費用:新台幣 750 元整

遴選方式:分為筆試 ( 7 月 5 日) 及口試 ( 8 月 22、23 日 ) 二部份。

遴選資格及相關規定請依台灣金融研訓院之公告或遴選簡章。
yum clean metadata

參考資料:
http://bugs.centos.org/view.php?id=3481
我今天自己下載執行了一次發現錯誤訊息大致如下:
sed: can't read /var/robust/worker1/conf/web.xml: 沒有此一檔案或目錄
cp: 無法 stat ‘/var/robust/worker1/conf/web.xml’: 沒有此一檔案或目錄

主要原因是下載來源apache.ntu.edu.tw這台主機出了問題,將第67行的參數調整為
MIRROR_HOST=apache.stu.edu.tw
即可正常執行了。
安裝好OpenMeetings後,我們可以用剛剛建立的帳號跟密碼登入。
然後進入任何一間會議室,並試著上傳檔案看看能否正常轉檔。
目前OpenMeetings的轉檔程序是先將所有的檔案轉為PDF,再轉為JPG和Flash(SWF),這部分是使用JODConverter透過OpenOffice.org來處理的,故我們需要安裝必要的套件,不然就會遇到
com.sun.star.lang.IllegalArgumentException: URL seems to be an unsupported one
這樣的錯誤。
我測試過PowerPoint、Word、Excel均可正常轉檔成功。
另外上傳的檔案如果是txt檔,內容必須是UTF-8編碼的才能正常顯示中文。
目前遇到的一個問題就是上傳的檔名如果包含中文字元的話,會被換成底線(_),已將這個問題回報
http://code.google.com/p/openmeetings/issues/detail?id=726
OpenMeetings是一套免費的Open-Source網頁視訊會議系統(Web-based Video Conferencing System),使用Java語言開發,前端使用Flash作為介面,後端使用免費的Open Source Flash Server Red5作為Flash串流伺服器,資料庫部分使用Hibernate技術,理論上可以支援絕大多數的資料庫。由於PostgreSQL對UTF-8字元的支援較佳,故我選擇使用PostgreSQL作為後端的資料庫。

安裝過程大致如下:
0.JDK安裝:這個應該沒太大問題(已經安裝直接跳過)。
1.資料庫調整:OpenMeetings要求要使用UTF-8編碼的資料庫,PostgreSQL對這方面的支援沒有問題。另外需要開放TCP Listen,我們需要調整兩個檔案/var/lib/pgsql/data/postgresql.conf和/var/lib/pgsql/data/pg_hba.conf即可:
postgresql.sh:
yum -y install postgresql-server
sed -i -e "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" /var/lib/pgsql/data/postgresql.conf

sed -i -e "s/local   all         all                               ident sameuser/local   all         all         trust/g" /var/lib/pgsql/data/pg_hba.conf
sed -i -e "s/host    all         all         127.0.0.1\/32          ident sameuser/host    all         all         127.0.0.1\/32          md5/g" /var/lib/pgsql/data/pg_hba.conf
sed -i -e "69a\host    all         all         192.168.1.0\/24        md5" /var/lib/pgsql/data/pg_hba.conf

chkconfig --level 235 postgresql on
/etc/init.d/postgresql start

2.安裝OpenOffice.org並啟動OpenOffice-Service在TCP 8100 port上。
3.安裝ImageMagick(會自動安裝GhostScript)
4.安裝SWFTools
5.安裝FFMpeg
6.安裝Flash Player 10
7.安裝OpenMeetings(含Red5)
8.啟動Red5
openmeetings.sh:
#!/bin/bash
# Name: openmeetings.sh
# Author: Andowson Chang (andowson [at] gmail [dot] com)
# Version: 1.0
# Last Modified: 2009-05-10

#
# install openoffice-service running on port 8100 in headless mode
#
yum -y install openoffice.org-base openoffice.org-headless openoffice.org-writer openoffice.org-impress openoffice.org-calc

#
# generate openoffice startup script
#
echo '#!/bin/bash
# openoffice.org  headless server script
#
# chkconfig: 2345 80 30
# description: headless openoffice server script
# processname: openoffice
# 
# Author: Vic Vijayakumar
# Modified by Federico Ch. Tomasczik
#
OOo_HOME=/usr/lib/openoffice.org/program
SOFFICE_PATH=$OOo_HOME/soffice.bin
PIDFILE=/var/run/openoffice-server.pid

set -e

case "$1" in
    start)
    if [ -f $PIDFILE ]; then
      echo "OpenOffice headless server has already started."
      sleep 5
      exit
    fi
      echo "Starting OpenOffice headless server"
      $SOFFICE_PATH -headless -nologo -nofirststartwizard -accept="socket,host=127.0.0.1,port=8100;urp" & > /dev/null 2>&1
      touch $PIDFILE
    ;;
    stop)
    if [ -f $PIDFILE ]; then
      echo "Stopping OpenOffice headless server."
      killall -9 soffice.bin
      rm -f $PIDFILE
      exit
    fi
      echo "Openoffice headless server is not running."
      exit
    ;;
    *)
    echo "Usage: $0 {start|stop}"
    exit 1
esac
exit 0' > /etc/init.d/openoffice
chmod 755 /etc/init.d/openoffice
chkconfig --level 235 openoffice on
/etc/init.d/openoffice start
 
#
# install ImageMagick(=>GhostScript will be installed as dependency)
#
yum -y install ImageMagick

#
# install SWFTools
#
yum -y install giflib-devel libjpeg-devel freetype-devel
if [ ! -r swftools-0.9.0.tar.gz ]; then
   wget http://www.swftools.org/swftools-0.9.0.tar.gz
fi
tar zxvf swftools-0.9.0.tar.gz
cd swftools-*
./configure
make
make install
cd ..

#
# install FFmpeg
#
if [ ! -r ffmpeg-0.5.tar.bz2 ]; then
   wget http://www.ffmpeg.org/releases/ffmpeg-0.5.tar.bz2
fi
tar jxvf ffmpeg-0.5.tar.bz2
cd ffmpeg-*
./configure
make
make install
cd ..

#
# install Flash player 10
#
if [ ! -r flash-plugin-10.0.22.87-release.i386.rpm ]; then
   wget http://fpdownload.macromedia.com/get/flashplayer/current/flash-plugin-10.0.22.87-release.i386.rpm
fi
rpm -Uvh flash-plugin-10.0.22.87-release.i386.rpm

#
# install OpenMeetings with Red5
#
if [ ! -r openmeetings_0_8_rc2.zip ]; then
   wget http://openmeetings.googlecode.com/files/openmeetings_0_8_rc2.zip
fi
unzip openmeetings_0_8_rc2.zip
mv red5-0.8.RC3-build-hudson-red5_jdk6_stable-79_2 /var/red5
# modify hibernate.cfg.xml
cd /var/red5/webapps/openmeetings/conf
sed -i -e '12c\                <property name="connection.username">openmeetings</property>' hibernate.cfg.xml
sed -i -e '13c\                <property name="connection.password">openmeetings</property>' hibernate.cfg.xml
sed -i -e '16c\                <property name="connection.driver_class">org.postgresql.Driver</property>' hibernate.cfg.xml
sed -i -e '18c\                <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>' hibernate.cfg.xml
sed -i -e '19c\                <property name="connection.url">jdbc:postgresql://localhost/openmeetings</property>' hibernate.cfg.xml
sed -i -e '33c\                <property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>' hibernate.cfg.xml
sed -i -e '17d' hibernate.cfg.xml
chmod 755 /var/red5/red5-shutdown.sh

#
# create user and database openmeetings 
#
sudo -u postgres psql -c "create user openmeetings createdb;" template1
sudo -u postgres psql -c "create database openmeetings with encoding 'unicode';" -U openmeetings template1
sudo -u postgres psql -c "alter user openmeetings nocreatedb;" template1
sudo -u postgres psql -c "alter user openmeetings with encrypted password 'openmeetings';" template1

#
# start up red5
#
cd /var/red5
nohup ./red5.sh &

9.開啟瀏覽器,輸入網址http://192.168.1.3:5080/openmeetings/install
按照畫面上的提示輸入相關資訊,其中兩個轉檔工具路徑如下:
SWFTools Path /usr/local/bin
ImageMagick Path /usr/bin
注意:這邊建議先關閉系統的防火牆,等測試好了再啟用。
需要設定的有下列:
1935:tcp 9999:tcp 8088:tcp 5080:tcp 8443:tcp
可以利用以下的指令來查詢:
netstat -ant|grep LISTEN|grep -v 192 |grep -v 127
[root@www red5]# netstat -ant|grep LISTEN|grep -v 192 |grep -v 127
tcp        0      0 0.0.0.0:49952               0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:1935                0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:9999                0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:8088                0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:5080                0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:5432                0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:8443                0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:443                 0.0.0.0:*                   LISTEN

10.停止服務可以使用
cd /var/red5
./red5-shutdown.sh

參考資料:
http://code.google.com/p/openmeetings/wiki/InstallationOpenMeetings
http://code.google.com/p/openmeetings/wiki/TechnologyPortfolio
如果我們在同一部Linux主機上,重複安裝作業系統兩次以上,就會遇到這個「現象」(可能有些人不認為是個問題)
[root@www ~]# cat /etc/fstab
LABEL=/1                /                       ext3    defaults        1 1
LABEL=/home1            /home                   ext3    defaults        1 2
LABEL=/usr1             /usr                    ext3    defaults        1 2
LABEL=/var1             /var                    ext3    defaults        1 2
LABEL=/boot1            /boot                   ext3    defaults        1 2
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
LABEL=SWAP-hda6         swap                    swap    defaults        0 0

每個標籤(LABEL)後面都多了一個1,有些人比較隨便可能可以接受,有些人像我比較追求完美就會覺得有點瑕疵,想要將這個多餘的1去除掉。
可是難道要重新再安裝一次嗎?重新安裝一次就可以解決嗎?答案是不用跟不一定。
以下是我試出來的方法:
首先先找出每個掛載點的硬碟分割名稱
[root@www ~]# df -h
檔案系統              容量  已用 可用 已用% 掛載點
/dev/hda5             3.9G  713M  3.0G  19% /
/dev/hda7              24G  173M   23G   1% /home
/dev/hda3             3.9G  1.2G  2.5G  33% /usr
/dev/hda2             3.9G  239M  3.5G   7% /var
/dev/hda1              99M   17M   78M  18% /boot
tmpfs                 189M     0  189M   0% /dev/shm

我們可以發現 / 對應到/dev/hda5分割區,而 / 在/etc/fstab中的LABEL是/1
利用修改硬碟標籤的指令e2label,我們可以將它們依序修改成我們想要的標籤名稱
e2label /dev/hda5 /
e2label /dev/hda7 /home
e2label /dev/hda3 /usr
e2label /dev/hda2 /var
e2label /dev/hda1 /boot

smilie 在重新開機前,記得修改/etc/grub.conf
[root@www ~]# vi /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/hda5
#          initrd /initrd-version.img
#boot=/dev/hda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-128.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-128.el5 ro root=LABEL=/1
        initrd /initrd-2.6.18-128.el5.img

將LABEL=/1改為LABEL=/
存檔後,再執行
sync;sync;sync
reboot
這樣子就可以正常開機了

[障礙排除]
如果您忘了修改這個/etc/grub.conf而造成無法正常開機時,可以拿出安裝光碟片的第一片
用光碟開機後,輸入linux rescue
在開機完成後,系統會將目前的root partition掛載到/mnt/sysimage
所以我們可以
cd /mnt/sysimage/etc
vi grub.conf
將LABEL=/1修正為LABEL=/
存檔後再重新開機即可。
以前讀網路概念時,看到IP/Subnet的教學,我的直覺就是「無趣」,因為一方面自己用不到,二來是幹嘛推算這些無聊的二進位?尤其IP /Subnet表示法,為何不用「*」號等DNS hostname這樣直覺的表示法呢?發明人是否故意要考驗初學者的腦袋轉換速度?因此,我當時僅讀個概念,根本沒把背後所代表的深層知識理解。後來在研究所莊東穎老師教的「系統與網路」課程時接觸到它,當時仍用IP暴力AND運算法混過去,直到現在研究Proftpd的Class設定,必須針對連線來源IP的子網路作權限區別,才再次重新拆解這種表示法的概念。假如當時的書本寫得像這樣簡單明瞭,腦袋瓜子就容易吸收了...

在IPv4的協定下,IP位址是由4個8位元組成的數字來表達,如200.1.1.130。一個IP位址分為網路位址(Network Address)+主機位址(Host Address),依網路位址所佔的位元數不同而分為A/B/C/D級網路。IP數字的0及255是預設的主機及廣播位址無法使用,所以每個數字可用的 IP位址變化只有254個(256-2),這也就是一般C級網段的Gateway IP都預設x.x.x.254的緣故。IPv4的位址因為ABCD型網段的配法而無法完全應用到254四次方那樣多的可用IP值,隨著世界上主機數遞增,IP位址漸漸不夠用了!在IPv6的應用尚未完全普及之時,就得利用切分子網路(Subnet)的方式來有效分配IP位址。

某台網路主機,它的IP及子網路表示法為200.1.1.130/28,從這樣簡短的字句,你該立刻看出什麼呢?

1.子網路的遮罩位址為何?
該數字28是代表遮罩IP位址的網路位址所佔位元數,即:11111111.11111111.11111111.11110000,遮罩位元為1者是讓 IP通過(合法),0者為阻擋,所以從上述的32位元分布,我們得知它的網段型態是屬於C型位址,因此十進位的遮罩位址就是 255.255.255.240(只需要求算右邊那四個1),即 128 + 64 + 32 + 16 = 240

2.可切成幾個子網路?
數字1是讓IP通過,所以只要注意1的位元變化組合(因為後面的0怎麼變化都會被擋住),(1111)= 2^4 = 16,共有16種變化。

3.每個子網段有幾個IP值?
子網路ip數為 256/16 = 16 (有效IP為14,因為頭尾IP要去除)

4.每個子網路的IP起迄位址?
200.1.1.0-15,200.1.1.16-31,200.1.1.32-48,...,200.1.1.240-255
例如,主機IP為200.1.1.130/28的所在子網路起迄IP為: 130/16 = 8, 16 * 8 = 128,故在 200.1.1.128-143。

假如上述你都了解的話,讓我們反過來思考,用子網路IP起迄位址,反推出它的IP/Subnet表達格式?例如,我們要讓某C級網段(192.83.184.*)下的IP合法通過,這組子網路該怎麼用IP/Subnet格式表示呢?

首先,第四個IP值不遮封,因此遮罩IP位址的2進位是: 11111111.11111111.11111111.00000000 (255.255.255.0),其網路位址位元數共24個,因此寫法是: 192.83.184.0/24,依此類推,B級網段就是192.84.0.0/16,全部開放就是: 0.0.0.0/0。所以,從IP位址的二進位表示法的位元分布,就可看出其背後的隱藏資訊,只要您能了解這些概念就可直接看出來,不需再作 IP(192.83.184.0)轉二進位的運算(江湖一點訣)。
 
Forum Index » Profile for andowson » Messages posted by andowson
Go to: