練功房推薦書單

  • 黑心建商的告白:買屋前不看會哭的17堂課
  • 黑心房仲的告白:買屋簽約前最後救命的17堂課
  • 黑心投資客炒房告白:搞懂中古屋坑錢陷阱的17堂課
  • 猛虎出閘制霸版:最新OCP Java SE 6 Programmer專業認證(附原始程式碼及範例檔)
Messages posted by: andowson
Forum Index » Profile for andowson » Messages posted by andowson
Message
今天在 Red Hat Linux 7.3 上遇到同樣的問題,而且重開機之後還是無效 smilie

錯誤訊息大致如下:
[root@eip2 root]# iptables -L -n
/lib/modules/2.4.20-28.7/kernel/net/ipv4/netfilter/ip_tables.o: init_module: Device or resource busy
Hint: insmod errors can be caused by incorrect module parameters, including invalid IO or IRQ parameters
/lib/modules/2.4.20-28.7/kernel/net/ipv4/netfilter/ip_tables.o: insmod /lib/modules/2.4.20-28.7/kernel/net/ipv4/netfilter/ip_tables.o failed
/lib/modules/2.4.20-28.7/kernel/net/ipv4/netfilter/ip_tables.o: insmod ip_tables failed
iptables v1.2.8: can't initialize iptables table `filter': iptables who? (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.


連重新安裝iptables也無效 smilie

後來找到下列這篇文章,終於找到解法了:
http://phorum.study-area.org/index.php?topic=13185.0

因為Red Hat 7.3內建了ipchains及iptables 2種firewall。而且用chkconfig --list | grep ip 去查,發現在啟動時2個都有設為啟動,不過似乎ipchains會比iptables優先啟動。
解決方式如下:
將ipchains給disable掉
chkconfig ipchains off
然後再重新開機(不重新開機沒辦法關閉ipchains),就可以了。
今天在CentOS 4.7 ia64上遇到了這個問題
iptables v1.2.11: can't initialize iptables table `filter': iptables who? (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

試了一下網路上介紹的方法:
先用下列的指令去檢查是否有載入iptables的相關模組
lsmod | grep ip

如果沒有再手動載入

modprobe ip_tables
modprobe ip_conntrack
modprobe iptable_filter
modprobe ipt_state

結果載入不了

後來,用uname -a比較了另一台同型號也是跑CentOS 4.7 ia64但可以正常執行iptables的主機,發現兩部主機的kernel版本有差,推論應該是這部主機升級kernel後沒有reboot,於是將該部主機重新開機,然後再試一次就可以了。

參考資料:
http://www.linuxquestions.org/questions/linux-networking-3/iptables-v1-3-8-cant-initialize-iptables-table-%60filter-577212/#post2860895
公司目前還有部分主機在跑 REHL 3,而且一定要執行audit服務,只好改用定期刪檔的方式來處理:
# remove old save.xxx from /var/log/audit.d every week (2010.10.25 by Andowson)
46 4 * * 0 root find /var/log/audit.d -name save.* -mtime +730 -type f -print0 -exec rm -rf {} \;

其中 -mtime +730是找出修改日期大於730天的檔案,也就是save.xxx最長會保留730天,也就是保留兩年。

參考資料:
http://sucre.javaeye.com/blog/544164
最近發現網站的upload目錄底下出現一些空的目錄,原本檔案上傳的程式的邏輯是在檔案上傳時同時依年、月、日建立三層目錄(例如upload/2010/10/24),將檔案放在日期那一層。如果事後將該檔案刪除,就會留下一個空的日期目錄。

要將這些空目錄一個一個去找出來顯然不太聰明而且相當費時,我們可以簡單的利用 find 指令來找,有兩個參數可用,分別是 -depth 與 -empty。另外可以加上 -type d 讓它只找目錄,不加的話,它會會連空檔案都找出來。
find ~/www/upload -depth -empty -type d

確認沒問題後,配合 -exec 就可以將這些目錄全部刪掉了:
find ~/www/upload -depth -empty -type d -exec rmdir -v {} \;

最後,要正本清源還是得修改程式,將刪除檔案的功能補上檢查上層目錄是否為空並刪除該上層目錄的功能,如果不是每個月都有檔案上傳的話,可以考慮刪到月那一層的目錄。

參考資料:
http://people.debian.org.tw/~chihchun/2010/04/15/find-the-empty-dir/
在使用Subversion作為版本控制軟體後,常常會發現將檔案上傳到伺服器後,系統出現隱藏的.svn目錄。如果我們想要將這些目錄刪除,可透過下列方式:
1.在網站的根目錄下執行下列指令,找出這些.svn目錄的路徑
du --si | grep .svn | awk '{print $2}' > /tmp/svn.txt

2.透過cat指令將/tmp/svn.txt的內容印出作為rm 的參數即可
rm -rf `cat /tmp/svn.txt`

3.最後,我們可以連/tmp/svn.txt也一起刪掉
rm -rf /tmp/svn.txt

改用新的判斷方式並加入了次數的判斷,以當天失敗超過三次者才加入阻擋

#!/bin/bash
# Name: banip.sh
# Author: Andowson Chang (andowson [at] gmail [dot] com)
# Version: 0.3
# Since: 2007-01-21
# Last Modified: 2010-10-24

# 修改這邊的參數
EXTERNAL_INTERFACE="eth0" # value can be "eth0" or "ppp0"
BANNED_HOST_FILE="/tmp/bannedhosts.txt"
HISTORY_HOSTS_FILE="/tmp/history.txt"
IPTABLES="/sbin/iptables"
GREP_PARAM="^[[:digit:]]*\.[[:digit:]]*\.[[:digit:]]*\.[[:digit:]]*"
TODAY=`date +%Y-%m-%d`
SECURE_LOG="/tmp/secure.$TODAY"
FAILURE_LOG="/tmp/failure.$TODAY"
FAILED_LOG="/tmp/failed.$TODAY"

# 將資料資料範圍縮小到今天
grep $TODAY /var/log/secure > $SECURE_LOG
grep "authentication failure" $SECURE_LOG | awk '{print $12}' | cut -d"=" -f2 > $FAILURE_LOG
# 因rhost可能是domain name方式,為避免重複計算次數,另存到一個檔案去
grep "Failed password for invalid user" $SECURE_LOG | awk '{print $11}' > $FAILED_LOG
grep "Failed password" $SECURE_LOG | grep -v "invalid user" | awk '{print $9}' >> $FAILED_LOG

# 找出攻擊的主機IP
cat $FAILURE_LOG $FAILED_LOG > /tmp/attacker.log

# 加入新增的主機
touch $HISTORY_HOSTS_FILE
sort /tmp/attacker.log | uniq > /tmp/attacker_ip1
sort $HISTORY_HOSTS_FILE | uniq > /tmp/attacker_ip2
comm -23 /tmp/attacker_ip[1-2] > $BANNED_HOST_FILE   # 新增主機資料
rm -rf /tmp/attacker*

# 將攻擊的主機IP加到iptables擋掉
for ip in $( grep $GREP_PARAM $BANNED_HOST_FILE )
do
    #計算失敗次數
    failcount=`grep $ip $FAILURE_LOG | wc -l`
    failcount2=`grep $ip $FAILED_LOG | wc -l`
    #超過三次失敗者加入阻擋名單
    if [ $failcount > 3 ] || [ $failcount2 > 3 ]; then
        echo "Deny access to 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 >> $HISTORY_HOSTS_FILE
    fi
done

rm -rf $BANNED_HOST_FILE
rm -rf $SECURE_LOG
rm -rf $FAILURE_LOG
rm -rf $FAILED_LOG
昨天幫主機啟動第二張網卡,設定了另一個IP,並修改了一下/etc/hosts,結果今天早上就收到一封信:

$$$$$$$$$$$$$$$$ License Exception $$$$$$$$$$$$$$$$


Unable to start WebLogic Server!!
WebLogic: license error, Invalid host IP


$$$$$$$$$$$$$$$$ License Exception $$$$$$$$$$$$$$$$


把第二張網卡停用也無法重新啟動WebLogic Server,甚至把/etc/hosts回復成原來的樣子也起動不了。 smilie
後來上網搜尋了一下,找到這篇:http://www.buildanddeploy.com/node/5,發現把主機IP移到/etc/hosts第一行,再重起WebLogic Server就成功了。



最近在作每日晨檢時發現主機的記憶體使用率都在99%以上(用top指令將used/total),但是同事說Linux的記憶體使用率算法不是這樣子算,可以參考下面這篇文章來定義真正的記憶體使用率:
http://ssorc.tw/rewrite.php/read-599.html
這篇的內容很不錯,值得參考:
http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html
原本以為下了umout指令後,再用mount的結果去檢查或檢查/etc/mtab的內容,沒發現到那個被mount的目錄就解決了,可是後來發現,如果把新的NAS設備的IP改成新的IP,在原先那部主機(註:OS是Red Hat Linux 7.3)只要下了df指令,系統還是會整個block住。如果又把NAS改回舊的IP,則卡住的現象就消除了。
後來經過詢問廠商,我發現到雖然/etc/mtab是所有已掛載的檔案系統的資訊,但實際上/proc/mounts裡面才是目前系統還在使用中的mount的紀錄,使用cat /proc/mounts將其內容印出來:
[root@eip2 proc]# cat mounts
rootfs / rootfs rw 0 0
/dev/root / ext3 rw 0 0
/proc /proc proc rw 0 0
usbdevfs /proc/bus/usb usbdevfs rw 0 0
/dev/cciss/c0d0p1 /boot ext3 rw 0 0
none /dev/pts devpts rw 0 0
/dev/cciss/c0d0p5 /home ext3 rw 0 0
none /dev/shm tmpfs rw 0 0
/dev/cciss/c0d1p1 /usr ext3 rw 0 0
/dev/cciss/c0d0p2 /var ext3 rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
10.66.19.20:/data_web2/eip2 /data_web2/eip2 nfs rw,v3,rsize=4096,wsize=4096,hard,udp,lock,addr=10.66.19.20 0 0
172.16.36.100:/vol/vol3 /mnt/test nfs rw,v3,rsize=4096,wsize=4096,hard,udp,lock,addr=172.16.36.100 0 0
//10.66.19.80/repository /mnt/repository smbfs rw,file_mode=0755,dir_mode=0755 0 0

可以發現多了一行
172.16.36.100:/vol/vol3 /mnt/test nfs rw,v3,rsize=4096,wsize=4096,hard,udp,lock,addr=172.16.36.100 0 0

這就是為什麼下了df指令後會卡住的原因了,找到這個被忽略的mount目錄後,就很容易解決了。
一樣在新的NAS上建立一個vol3的分享目錄,然後再到主機上去下umount指令即可:
[root@eip2 proc]# umount /mnt/test
[root@eip2 proc]# mount
/dev/cciss/c0d0p7 on / type ext3 (rw)
none on /proc type proc (rw)
usbdevfs on /proc/bus/usb type usbdevfs (rw)
/dev/cciss/c0d0p1 on /boot type ext3 (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/cciss/c0d0p5 on /home type ext3 (rw)
none on /dev/shm type tmpfs (rw)
/dev/cciss/c0d1p1 on /usr type ext3 (rw)
/dev/cciss/c0d0p2 on /var type ext3 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
10.66.19.20:/data_web2/eip2 on /data_web2/eip2 type nfs (rw,addr=10.66.19.20)
//10.66.19.80/repository on /mnt/repository type smbfs (0)
[root@eip2 proc]#


別忘了,還要將NAS上那個vol3刪除掉,這時再去下df指令,很快就可執行完畢了。
http://www.devdaily.com/blog/post/best-practices/tell-me-some-best-practices-for-my-own-practice
最近向廠商借測一部NAS設備,測試完畢後,廠商於約定時間來拆走設備。結果拆之前忘了將掛載上來的NFS網路磁碟機先卸載(umount),導致留下一堆process處於status D(所謂的uninterruptible sleep)的狀態,用kill -9 去砍,砍半天也砍不掉,網路上查,發現uninterruptible sleep必須reboot才能解。

後來,正巧我們採購的NAS設備送來了,把設備的IP設成跟原先一樣,分享也設成一樣,然後再去原先的主機下umount,就成功了。

結論:如果碰到這種因為把Storage抽走而造成的Device is busy現象,可以的話就是把設備再接回去,不然就是想辦法模擬出一個同樣IP及同樣分享名稱的目錄,再umount看看。如果真的不行,就只好reboot或reset了。

15 Practical PostgreSQL Database Administration Commands
自JForum 2.2.0起嘗試開始支援Cluster,目前先使用JBoss Cache作為預設的Cache引擎,因此預設是會啟動JBoss Cache,透過JGroups的UDP mcast來做資料複寫,如果您在同一台主機上需要安裝第二套的JForum,則第二套的JForum需要記得修改mcast_addr這個參數,以避免與第一套JForum所使用的JBoss Cache重疊到,例如:
      <jgroupsConfig>
         <UDP discard_incompatible_packets="true" enable_bundling="false" enable_diagnostics="false" ip_ttl="2"
              loopback="false" max_bundle_size="64000" max_bundle_timeout="30" mcast_addr="228.10.10.11"
              mcast_port="45588" mcast_recv_buf_size="25000000" mcast_send_buf_size="640000"
              oob_thread_pool.enabled="true" oob_thread_pool.keep_alive_time="10000" oob_thread_pool.max_threads="4"
              oob_thread_pool.min_threads="1" oob_thread_pool.queue_enabled="true" oob_thread_pool.queue_max_size="10"
              oob_thread_pool.rejection_policy="Run" thread_naming_pattern="pl" thread_pool.enabled="true"
              thread_pool.keep_alive_time="30000" thread_pool.max_threads="25" thread_pool.min_threads="1"
              thread_pool.queue_enabled="true" thread_pool.queue_max_size="10" thread_pool.rejection_policy="Run"
              tos="8" ucast_recv_buf_size="20000000" ucast_send_buf_size="640000" use_concurrent_stack="true"
              use_incoming_packet_handler="true"/>
         <PING num_initial_members="3" timeout="2000"/>
         <MERGE2 max_interval="30000" min_interval="10000"/>
         <FD_SOCK/>
         <FD max_tries="5" shun="true" timeout="10000"/>
         <VERIFY_SUSPECT timeout="1500"/>
         <pbcast.NAKACK discard_delivered_msgs="true" gc_lag="0" retransmit_timeout="300,600,1200,2400,4800"
                        use_mcast_xmit="false"/>
         <UNICAST timeout="300,600,1200,2400,3600"/>
         <pbcast.STABLE desired_avg_gossip="50000" max_bytes="400000" stability_delay="1000"/>
         <pbcast.GMS join_timeout="5000" print_local_addr="true" shun="false" view_ack_collection_timeout="5000"
                     view_bundling="true"/>
         <FRAG2 frag_size="60000"/>
         <pbcast.STREAMING_STATE_TRANSFER/>
         <pbcast.FLUSH timeout="0"/>

      </jgroupsConfig>

這樣子才不會影響到第一套JForum的JBoss Cache。
本站今天正式升級至JForum 2.2.1版。如果有發現任何問題請回報給我。
版面設計感謝sochin的協助。
 
Forum Index » Profile for andowson » Messages posted by andowson
Go to: