練功房推薦書單

  • 猛虎出柙雙劍合璧版--最新 OCA / OCP Java SE 7 Programmer 專業認證 (電子書)
  • 流浪教師存零股存到3000萬(全新增修版)(書+DVD)
  • 開始在關西自助旅行(京都‧大阪‧神戶‧奈良)(全新增訂版)
  • 不敗教主的300張股票存股術
Messages posted by: andowson
Forum Index » Profile for andowson » Messages posted by andowson
Message
升級PostgreSQL 9.2 到PostgreSQL 9.3

本文是以CentOS 6.5 x86_64上面原安裝PostgreSQL 9.2作為說明,預設執行身分為root,如需切換為postgres,會以su - postgres開始

1.備份舊的資料
su - postgres
mkdir /tmp/pgsql
pg_dumpall > /tmp/pgsql/db.out
cp -pr /var/lib/pgsql/9.2 /tmp/pgsql/
exit

2.安裝新版的PostgreSQL
2.1 安裝新版的PostgreSQL repository
http://yum.postgresql.org/ 先點要升級的版本,如9.3,然後找到目前使用的作業系統版本,例如CentOS 6 - x86_64
cd /root/setup/database
wget http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-centos93-9.3-1.noarch.rpm
rpm -ivh ./pgdg-centos93-9.3-1.noarch.rpm

2.2 安裝PostgreSQL新版的套件
可以先找出之前安裝了那些套件: rpm -qa | grep postgresql92
[root@www database]# rpm -qa | grep postgresql92
postgresql92-libs-9.2.9-1PGDG.rhel6.x86_64
postgresql92-9.2.9-1PGDG.rhel6.x86_64
postgresql92-server-9.2.9-1PGDG.rhel6.x86_64

安裝新版的套件(必須安裝postgresql93-contrib套件才會有pg_upgrade)
yum install postgresql93-server postgresql93-libs postgresql93 postgresql93-contrib

3.升級前置動作
3.1修改新版PostgreSQL啟動檔的Port
因為舊版的還在run,新版PostgreSQL預設的啟動port先改為5433
編輯/etc/init.d/postgresql-9.3檔案,將
PGPORT=5432

改為
PGPORT=5433


3.2初始化新版PostgreSQL資料庫
/etc/init.d/postgresql-9.3 initdb


3.3檢查是否成功建立資料庫所需目錄
ls /var/lib/pgsql/9.3/
cat /var/lib/pgsql/9.3/pgstartup.log


3.4停止網頁服務
service tomcat stop

注意/etc/crontab中有無設定定期檢查Tomcat是否有在跑的tomcat_monitor,有的話先註解掉該排程作業,以免系統又自己將Tomcat服務帶起來

4.開始升級資料庫
4.1 關閉資料庫
service postgresql-9.2 stop


4.2 執行pg_upgrade
切換身分為postgres(再多備份一次檔案系統)
su - postgres
cp -pr /var/lib/pgsql/9.2 /tmp/pgsql/


執行pg_upgrade(注意要使用新版的PostgreSQL目錄下的pg_upgrade)
/usr/pgsql-9.3/bin/pg_upgrade -v -b /usr/pgsql-9.2/bin/ -B /usr/pgsql-9.3/bin/ -d /var/lib/pgsql/9.2/data/ -D /var/lib/pgsql/9.3/data/

最後看到下面這些畫面就完成了
Creating script to analyze new cluster                      ok
Creating script to delete old cluster                       ok

Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade so,
once you start the new server, consider running:
    analyze_new_cluster.sh

Running this script will delete the old cluster's data files:
    delete_old_cluster.sh
-bash-4.1$

4.3 調整設定檔: pg_hba.conf, postgresql.conf
pg_hba.conf通常可以直接複製過去就好:
diff /var/lib/pgsql/9.2/data/pg_hba.conf /var/lib/pgsql/9.3/data/pg_hba.conf
cp -p /var/lib/pgsql/9.2/data/pg_hba.conf /var/lib/pgsql/9.3/data/pg_hba.conf

postgresql.conf可能新版會有新增一些參數,我們用diff比較一下差異,再把舊版修改的地方依據需要反映到新的版本去
diff /var/lib/pgsql/9.2/data/postgresql.conf /var/lib/pgsql/9.3/data/postgresql.conf

例如,我修改了:
effective_cache_size = 256MB

4.4 修改/etc/init.d/postgresql-9.3
退出postgres
exit


PGPORT=5433

改回
PGPORT=5432


5.啟動新版的PostgreSQL服務
service postgresql-9.3 start


6.升級後的優化作業
su - postgres
./analyze_new_cluster.sh

-bash-4.1$ ./analyze_new_cluster.sh
This script will generate minimal optimizer statistics rapidly
so your system is usable, and then gather statistics twice more
with increasing accuracy.  When it is done, your system will
have the default level of optimizer statistics.

If you have used ALTER TABLE to modify the statistics target for
any tables, you might want to remove them and restore them after
running this script because they will delay fast statistics generation.

If you would like default statistics as quickly as possible, cancel
this script and run:
    "/usr/pgsql-9.3/bin/vacuumdb" --all --analyze-only

Generating minimal optimizer statistics (1 target)
--------------------------------------------------
vacuumdb: vacuuming database "jforum"
vacuumdb: vacuuming database "postgres"
vacuumdb: vacuuming database "template1"

The server is now available with minimal optimizer statistics.
Query performance will be optimal once this script completes.

Generating medium optimizer statistics (3 targets)
---------------------------------------------------
vacuumdb: vacuuming database "jforum"
vacuumdb: vacuuming database "postgres"
vacuumdb: vacuuming database "template1"


Generating default (full) optimizer statistics (100 targets?)
-------------------------------------------------------------
vacuumdb: vacuuming database "jforum"
vacuumdb: vacuuming database "postgres"
vacuumdb: vacuuming database "template1"


Done
-bash-4.1$

7.啟動網頁服務
service tomcat start

7.1 測試網頁服務是否正常

8. 升級後的清理作業
8.1 刪除舊的資料庫存放區
su - postgres
./delete_old_cluster.sh

8.2 移除舊版的PostgreSQL套件
yum remove postgresql92-server postgresql92-libs postgresql92 pgdg-centos92


8.3 刪除/tmp/pgsql目錄下的備份檔
rm -rf /tmp/pgsql


[選擇性作業]8.4 重新啟用排程/etc/crontab中的tomcat_monitor

至此就完成了PostgreSQL 9.3的升版作業。

參考資料:
http://www.uptimemadeeasy.com/databases/upgrade-postgresql/
有遇到甚麼問題嗎?
我有用過的就只有Cookie-based SSO

你可以參考看看~
Linode 整個系統改用SSD重建後,還贈送了免費升級,請所有用戶移轉到他們的新架構,雖然同時還將RAM加大到2GB,但是CPU會從8 Cores降低到2 Cores,所以我遲遲沒有去升級。最近發現他們推出了一個新的計畫$10元的方案,可以用1GB的RAM搭配1 CPU,24GB SSD。本站的每月廣告收入一直很低,無法損益兩平,還是先降低成本吧。

降級的過程是先開了張Ticket,說我要降級到$10 Linode Plan,問他們要怎麼進行,幾分鐘後就收到信,說請我先完成他們的Free Upgrade,移轉到SSD平台,然後再去選擇Resize就可以降級了。

實際過程中,因為先前硬碟空間是48GB,我得先縮小到比24GB小才能進行Resize。於是我先設定為20000MB,等降級完成後,我再調整回去。

經過大約不到一個半小時的時間,終於完成了! 順利開機,網站正常運作。

然後在信箱中也立刻收到了Linode的帳單資訊,2GB的用了幾天算幾天,多的還退給我,1GB的則是算到月底還有幾天,先扣款,下個月再來看一下帳單資訊吧。

我這邊目前還沒有針對行動裝置開發出來的介面,不過你給的網址有簡易的說明,可以參考。

主要就是每個現有頁面樣板要做出一個對應的mobile版,還有就是有一個session變數用來檢查目前適用哪種模式。

你可以試著先做幾個頁面看看。
今天將Tomcat Connector利用自動更新程式tomcat-connector.sh(如下)進行更新:
#!/bin/bash
# Name: Apache 2.2.x && Tomcat 7.0.x auto installer for CentOS 6.x
# Author: Andowson Chang (andowson [at] gmail [dot] com)
# Version: 5.16
# Last Modified: 2014-04-20
# Source: http://www.andowson.com
#
TOMCAT_CONNECTOR_VERSION=1.2.40

MIRROR_HOST=apache.stu.edu.tw
SETUP_DIR=/root/setup/web
INTERNET_CONNECTED=1

# 
# install dependency packages
#
LIBTOOL_INSTALLED=`rpm -qa|grep libtool|wc -l`
HTTPD_DEVEL_INSTALLED=`rpm -qa|grep httpd-devel|wc -l`
AUTOMAKE_INSTALLED=`rpm -qa|grep automake|wc -l`
if [ ${LIBTOOL_INSTALLED} = 0 ] || [ ${HTTPD_DEVEL_INSTALLED} = 0 ] || [ ${AUTOMAKE_INSTALLED} = 0 ]; then
   yum -y install libtool httpd-devel automake
fi

#
# create the setup directory
#
if [ ! -d ${SETUP_DIR} ]; then
   mkdir -p ${SETUP_DIR}
fi
cd ${SETUP_DIR}

#
# get latest version
#
wget http://tomcat.apache.org/download-connectors.cgi -q -t 1 -T 5 -O /tmp/connector.html
if [ -s /tmp/connector.html ]; then
   TOMCAT_CONNECTOR_VERSION=`grep "1\.2\." /tmp/connector.html|cut -d">" -f2|cut -d"<" -f1 |awk '{print $2}'|grep "1.2"|uniq`
else
   echo "Cannot connect to the Internet. Try using local file instead."
   INTERNET_CONNECTED=0
fi
rm -rf /tmp/connector.html
if [ ! -r tomcat-connectors-${TOMCAT_CONNECTOR_VERSION}-src.tar.gz ]; then
   if [ $INTERNET_CONNECTED -eq 1 ]; then
      wget http://${MIRROR_HOST}/tomcat/tomcat-connectors/jk/tomcat-connectors-${TOMCAT_CONNECTOR_VERSION}-src.tar.gz
   else
      echo "File not found: tomcat-connectors-${TOMCAT_CONNECTOR_VERSION}-src.tar.gz, aborted!"
      exit 1
   fi
fi

#
# install tomcat connector
#
echo "Install Tomcat Connector JK ${TOMCAT_CONNECTOR_VERSION}"
tar zxvf tomcat-connectors-${TOMCAT_CONNECTOR_VERSION}-src.tar.gz
cd tomcat-connectors-${TOMCAT_CONNECTOR_VERSION}-src/native
./buildconf.sh
./configure --with-apxs=/usr/sbin/apxs
make
make install
cd ${SETUP_DIR}


完成更新後,重啟Apache,再去開網頁卻無法順利開啟網頁,查了一下mod_jk.log:
[Sun Apr 20 13:30:34 2014][15480:139841517975520] [info] init_jk::mod_jk.c (3383): mod_jk/1.2.40 initialized
[Sun Apr 20 13:30:34 2014][15482:139841517975520] [info] init_jk::mod_jk.c (3383): mod_jk/1.2.40 initialized
[Sun Apr 20 13:30:39 2014][15492:139841517975520] [info] jk_open_socket::jk_connect.c (758): connect to ::1:8109 failed (errno=111)
[Sun Apr 20 13:30:39 2014][15492:139841517975520] [info] ajp_connect_to_endpoint::jk_ajp_common.c (1019): Failed opening socket to (::1:8109) (errno=111)
[Sun Apr 20 13:30:39 2014][15492:139841517975520] [error] ajp_send_request::jk_ajp_common.c (1663): (worker1) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=111)
[Sun Apr 20 13:30:39 2014][15492:139841517975520] [info] ajp_service::jk_ajp_common.c (2673): (worker1) sending request to tomcat failed (recoverable), because of error during request sending (attempt=1)


發現無法連到::1:8109(這是IPv6的locahost IP表示方法)
在查了一下Tomcat的Changelog網頁
Add IPV6 support for connection to webserver. New directive prefer_ipv6 has been added to control the hostname resolution and preserve backward compatibility. (mturk)

感覺應該是預設用IPv6在抓IP,由於我不知道怎麼調整這個預設模式,故我採用修改workers.properties
將這兩行設定的localhost
worker.worker1.host=localhost
worker.worker2.host=localhost

改為127.0.0.1
worker.worker1.host=127.0.0.1
worker.worker2.host=127.0.0.1

再重啟一次Apache,就可以順利連到Tomcat了。
在使用rsh連線至另一台主機時,如果老是遇到類似下列的訊息:
connect to address 192.168.1.1 port 544: Connection refused
Trying krb4 rsh...
connect to address 192.168.1.1 port 544: Connection refused
trying normal rsh (/usr/bin/rsh)

原因是rsh會先嘗試用kshell建立連接。如果想禁用這個功能,可作如下修改:
cd /usr/kerberos/bin
mv rsh rsh.sav
ln -s /usr/bin/rsh rsh


參考資料:
http://bbs.chinaunix.net/thread-2201076-1-1.html
大家好!新年快樂!
轉眼一年又過去了,本站從無到有,至今也成立七年了,去年因忙著找房子跟搬家的事,網站採放牛吃草的經營方式,沒有特別去發表文章,損益兩平的目標沒有達成,站長自我檢討,認為「本站還是有繼續維持下去的意義」。
今年的展望是先進行網站清理,將會刪除一些測試用的舊文,並升級至最新版本的JForum 2.3.5,再來思考版面調整事宜。
今天發現透過檢查BANNED_HOSTS_HISTORY檔案內容有可能會漏封(先前有封過,重開機後因已在歷史檔中),修改為透過iptables -L OUTPUT -n指令取得目前系統已封鎖之IP,修正後之檔案如下:

#!/bin/bash
# Name: banip.sh
# Author: Andowson Chang (andowson [at] gmail [dot] com)
# Version: 0.6
# Since: 2007-01-21
# Last Modified: 2013-06-09

# 修改這邊的參數
EXTERNAL_INTERFACE="eth0" # value can be "eth0" or "ppp0"
BANNED_HOSTS="/tmp/bannedhosts.txt"
BANNED_HOSTS_HISTORY="/tmp/history.txt"
IPTABLES="/sbin/iptables"
GREP_PARAM="^[[:digit:]]*\.[[:digit:]]*\.[[:digit:]]*\.[[:digit:]]*"
export LANG=en_US
TODAY=`date +%Y-%m-%d`
RANGE=`date "+%b %e"`
SECURE_LOG="/tmp/secure.${TODAY}"
SUSPECTED="/tmp/failed.${TODAY}"

# 將資料資料範圍縮小到今天
grep "$RANGE" /var/log/secure > $SECURE_LOG
grep "Failed password for invalid user" $SECURE_LOG | awk '{print $13}' > $SUSPECTED
grep "Failed password" $SECURE_LOG | grep -v "invalid user" | awk '{print $11}' >> $SUSPECTED

# 找出攻擊的主機IP
cat $SUSPECTED | sort | uniq > /tmp/attacker_ip1

# 找出已被封鎖的主機IP
$IPTABLES -L OUTPUT -n | grep DROP | awk '{print $5}' | sort | uniq > /tmp/attacker_ip2

# 比對差異,找出新增的IP
comm -23 /tmp/attacker_ip[1-2] > $BANNED_HOSTS   # 新增主機資料
rm -rf /tmp/attacker*

# 將攻擊的主機IP加到iptables擋掉
for ip in $( grep $GREP_PARAM $BANNED_HOSTS )
do
    echo "Check $ip"
    #計算失敗次數
    failcount=`grep $ip $SUSPECTED | wc -l`
    #超過三次失敗者加入阻擋名單
    if [ $failcount > 3 ]; then
        echo "Deny access from host: $ip"
        $IPTABLES -A INPUT -i $EXTERNAL_INTERFACE -s $ip -j DROP
        $IPTABLES -A OUTPUT -o $EXTERNAL_INTERFACE -d $ip -j DROP
        # 將處理過的IP清單加到歷史檔去
        echo $ip >> $BANNED_HOSTS_HISTORY
    fi
done

rm -rf $BANNED_HOSTS
rm -rf $SECURE_LOG
rm -rf $SUSPECTED
最近收到Linode的硬體維修通知,需要遷移至其他主機,同時還有硬體資源的加碼贈送,經過上周末兩次重開機後,完成了本次升級作業。
升級後的硬體大致如下:
Linode 1GB Xen VPS
CPU: Intel(R) Xeon(R) CPU L5520 @ 2.27GHz * 8
RAM: 1GB
HD: 24GB
Transfer: 2TB
價錢微調至20美金
Oracle發表了最新的Java安全程式設計指南:
http://www.oracle.com/technetwork/java/seccodeguide-139067.html
如果覺得看文章比較枯燥乏味,在2012年的JavaOne上有簡報解說:


有興趣的人可以參考其他相關資料:
The CERT Oracle Secure Coding Standard for Java
wyhao31您好:
目前我尚未遇到這個問題,推測是您的環境問題,請參考我這邊的開發環境:
OS: Windows 7
DB: MySQL Server 5.5.29
IDE: Eclipse Java EE IDE for Web Developers(Juno Service Release 1)
JDK: Oracle Java SE JDK 6.0 Update 38
Builder: Apache Maven 3.0.4
App Server: Apache Tomcat 7.0.35

附上設定的參考畫面供大家參考, JForum很多的權限設定通常需要反向思考。

例如「匿名發表」,底下的設定說明是「拒絕匿名發表」,表示被選到的版面就變成拒絕匿名發表而不是允許匿名發表。反過來說,也就是沒被選到的版面就是允許匿名發表了。
最近公司要求更新防毒軟體Symantec Endpoint Protection的版本,需要移除舊版並重新安裝新版,有位同事的電腦上裝了比較舊的Symantec AntiVirus,請他做新增移除時,卻跳出一個視窗要求輸入移除密碼,同事說當初電腦來的時候Symantec AntiVirus就已經由電腦廠商裝上去了,他也不知道密碼。

後來上網搜尋了一下,發現Symantec AntiVirus在安裝時,就算安裝者沒有輸入密碼,安裝程式也會自行建立預設的密碼。

預設密碼為:symantec

輸入後就可以順利移除了。

參考資料:
http://basuya.blogspot.tw/2007/06/symantec-antivirus.html
簡單來說,單獨出現一次[i]時,是不受影響的,除非是你加上了結束符號[/i]。現有的快速解法就是在編輯文章的下面選項中勾選「關閉這篇文章的 BBCode 代碼功能」可以整個disable該篇文章的BBCode代碼替換機制。
如果你是要去說明BBCode的功能,那可以用[code]去包(發表這篇時意外發現了JForum一個小Bug,[/code]應該要抓最相鄰的開頭[code]才對,目前的版本中,程式會抓最先遇到的[code]當開頭。)
[code][i]大家好[/i][/code]

JForum Bug(在啟用BBCode時):
[code][code]錯誤的code[/code][/code]
這樣子會留下一個尾巴[/code]
最近拿到了兩支16GB的隨身碟,預設是格式化為FAT32,想說拿來放影片檔剛剛好,但是現在的片子都越來越大,例如DVD格式的可能就有4.7GB(如果壓成ISO檔時),那就超過FAT32的單檔4GB容量上限,結果是複製不進去。

但是如果把它格式化成NTFS的話,又只能在Windows作業系統上讀取,不是很方便,上網找找看比較哪種比較優時,發現了自己可能孤陋寡聞已久,微軟已經老早就推出這個exFAT格式了,底下兩篇供大家參考,我就不再贅述啦:

徹底研究exFAT (上)
徹底研究exFAT (下)
 
Forum Index » Profile for andowson » Messages posted by andowson
Go to:   
Mobile view