/c0/u1 del /c0/u0 start rebuild disk=0 ignoreECC
2013年8月1日 星期四
當 3ware SATA Raid 莫名其妙某個 drive 變成另一個 array 的處理方法
NOTE 下來不然每次都要找半天...
2013年6月19日 星期三
Ubuntu 12.04 + valgrind 3.8.1
2013年6月11日 星期二
nginx + smokeping with fastcgi on FreeBSD
緣起
一直以來都會用 Smokeping 來監視各個機房的對外網路狀況,但 Smokeping 全由 perl 寫成,在某次大搬風之後遺失了設定,所以只能暫時跑著 CGI mode。但是剛剛實在是太誇張的慢了,等到 proxy 一直 timeout ,所以就決定還是來把乖乖設定好吧。
說來也有趣,當時的變動是把 lighttpd 換成 nginx,但不知道什麼原因,當時竟然為了要跑 smokeping 所以必須要借助 lighttpd 去跑 FastCGI 所以把 lighttpd 跑在 127.0.0.0:8080 然後用 nginx proxy 到 lighttpd,然後又好像 smokeping 的 FastCGI 哪裡沒設定好不會動,所以又只好變成了 在 lighttpd 上面跑 CGI mode (真的是脫褲子放屁加吃飽了撐著)
作法
大概看到有幾種方法讓 nginx 直接透過 FastCGI 處理 smokeping :
1) 用 p5-CGI-SpeedyCGI (參考 1)
2) 用 p5-Plack 透過 PSGI 來跑 perl-FastCGI (參考)
3) 用 p5-FCGI 和 p5-FCGI-ProcManager 來跑 perl-FastCGI (參考)
這邊是挑 2、3 來測,但 3 比較簡單一點也完工了,步驟大概是這樣:
1) 安裝需要的套件
cd /usr/ports/www/p5-FCGI && make install clean cd /usr/ports/www/p5-FCGI-ProcManager && make install clean cd /usr/ports/www/spawn-fcgi && make install clean或是用 pkg :
pkg install p5-FCGI p5-FCGI-ProcManager spawn-fcgi2) 編輯 smokeping 的 fastcgi wrapper,vim /usr/local/smokeping/htdocs/smokeping.fcgi 檔案如下:
# -*-perl-*- use FCGI; use FCGI::ProcManager; use lib qw(/usr/local/smokeping/lib); use Smokeping 2.004002 ; use CGI::Fast; my $cfg = "/usr/local/etc/smokeping/config"; my $proc_manager = FCGI::ProcManager->new( {n_processes => 5} ); my $request = FCGI::Request(); $proc_manager->pm_manage(); while (my $q = new CGI::Fast) { Smokeping::cgi($cfg,$q); } while($request->Accept() >= 0) { my $q = new CGI::Fast; $proc_manager->pm_pre_dispatch(); Smokeping::cgi($cfg,$q); $proc_manager->pm_post_dispatch(); exit(0); }
3) 編輯啟動 fastcgi 的 script, vim /usr/local/smokeping/htdocs/spawn-smoke 檔案如下:
#!/bin/sh /usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 你要的PORT\ -P /var/run/smokeping-fastcgi.pid -u www \ -f /usr/local/smokeping/htdocs/smokeping.fcgi
4) 修改 nginx.conf ,增加 smokeping 的設定
location /smokeping/smokeping.cgi { error_log /PATH_TO/smoke-error.log info; access_log /PATH_TO/smoke-access.log combined; fastcgi_pass 127.0.0.1:你要的PORT; fastcgi_param SCRIPT_FILENAME /usr/local/smokeping/htdocs$fastcgi_script_name; include fastcgi_params; } location /smokeping/ { error_log /PATH_TO/smoke-error.log info; access_log /PATH_TO/smoke-access.log combined; alias /usr/local/smokeping/htdocs/; }然後記得跑
/usr/local/smokeping/htdocs/spawn-smoke之後再把 nginx 跑起來就沒問題了。
UPDATE: 要自動啟動的話 改 rc.conf
spawn_fcgi_enable="YES" spawn_fcgi_app="/usr/local/smokeping/htdocs/smokeping.fcgi" spawn_fcgi_bindaddr="127.0.0.1" spawn_fcgi_bindport="PORT"Update: slave 設定
smokeping_enable="YES" smokeping_flags="--master-url=http://MASTER.cgi --slave-name=SLAVENAME --cache-dir=/var/run/smokeping --shared-secret=SECRET"
# Define these smokeping_* variables in one of these files: # /etc/rc.conf # /etc/rc.conf.local # /etc/rc.conf.d/smokeping # # DO NOT CHANGE THESE DEFAULT VALUES HERE # # smokeping_flags="" smokeping_enable=${smokeping_enable-"NO"} smokeping_pidfile=${smokeping_pidfile-"/usr/local/var/smokeping/smokeping.pid"} smokeping_fcgi_pidfile=${smokeping_fcgi_pidfile-"/var/run/smokeping-fastcgi.pid"} smokeping_logfile=${smokeping_logfile-"/var/log/smokeping.log"} smokeping_user=${smokeping_user-"smokeping"} smokeping_group=${smokeping_group-"smokeping"} . /etc/rc.subr name="smokeping" rcvar="smokeping_enable" load_rc_config $name command="/usr/local/bin/smokeping" command_args="--logfile=${smokeping_logfile}" pidfile="${smokeping_pidfile}" fcgi_pidfile="${smokeping_fcgi_pidfile}" extra_commands="reload" reload_cmd="smokeping_reloadcmd" start_precmd="smokeping_startprecmd" stop_cmd="smokeping_stopcmd" status_cmd="smokeping_statuscmd" spawn_smokeping_fcgi="/usr/local/smokeping/htdocs/spawn-smoke" smokeping_reloadcmd() { $command --reload } smokeping_statuscmd() { if [ ! -e $pidfile ]; then echo "pidfile does not exist. $name is not running?"; exit 1; fi if pgrep -F $pidfile >/dev/null; then echo "$name is running."; else echo "$name is not running."; exit 1; fi } smokeping_stopcmd() { if pgrep -F $pidfile >/dev/null; then kill $sig_stop `cat $pidfile`; wait_for_pids `cat $pidfile`; kill $sig_stop `cat $fcgi_pidfile`; wait_for_pids `cat $fcgi_pidfile`; rm -rf $fcgi_pidfile; else echo "$name is not running."; exit 1; fi } smokeping_startprecmd() { if [ ! -e $smokeping_logfile ]; then install -o smokeping -g smokeping /dev/null $smokeping_logfile || echo "ERROR: Could not initialize logfile at $smokeping_logfile."; fi if [ ! -e $fcgi_pidfile ]; then $spawn_smokeping_fcgi; echo "starting smokeping fastcgi"; fi }
2013年5月18日 星期六
忘記 google play 的 keystore 密碼
如果您跟小弟一樣患了老年痴呆,怎樣想也想不起來 Google Play 的 Keystore 簽章密碼,然後一 Google 發現這是一件非常嚴重的事情的時候,也許這個好心人寫的 「android-keystore-password-recover」可能可以讓你鬆一口氣 (如果密碼組成大概是有限區間的某些字串排列組合的話!)
跑了兩個小時,但他並沒有幫我找到密碼(但不代表他不管用!)。
因為當我覺得程式跑太慢,試圖修改程式以便更符合自己的密碼規則,然後開始思考該塞哪些 wordlist 的時候,不小心就被我想到原始的密碼了。
跑了兩個小時,但他並沒有幫我找到密碼(但不代表他不管用!)。
因為當我覺得程式跑太慢,試圖修改程式以便更符合自己的密碼規則,然後開始思考該塞哪些 wordlist 的時候,不小心就被我想到原始的密碼了。
2013年5月9日 星期四
ubuntu 底下 ufw 作 rate limit
大概就是
就會對本機 IP 1.2.3.4 的 port 1234,2234 做出 30 秒只能連線六次的限制。
然後不用預設的30/6的話就不用上面那條,直接是 allow 然後手動改 /etc/ufw/before.rules
在
ufw limit proto tcp from any to 1.2.3.4 port 1234,2234
就會對本機 IP 1.2.3.4 的 port 1234,2234 做出 30 秒只能連線六次的限制。
然後不用預設的30/6的話就不用上面那條,直接是 allow 然後手動改 /etc/ufw/before.rules
在
# Don't delete these required lines, otherwise there will be errors *filter :ufw-before-input - [0:0] :ufw-before-output - [0:0] :ufw-before-forward - [0:0] :ufw-not-local - [0:0] # End required lines之後加上
# Limit IP connection(s) # Limit to 10 concurrent connections on port 80 per IP #-A ufw-before-input -p tcp --syn --dport 80 -m connlimit --connlimit-above 300 -j DROP # Limit to 20 connections on port 80 per 2 seconds per IP #-A ufw-before-input -p tcp --dport 80 -i eth1 -m state --state NEW -m recent --set #-A ufw-before-input -p tcp --dport 80 -i eth1 -m state --state NEW -m recent --update --seconds 1 --hitcount 20 -j DROP更機車的設定可以參考這裡
訂閱:
文章 (Atom)