身為一個系統管理者,當你管理的機器數量只有十來台時,你可以很輕鬆的一台一台進去管理、設定機器,但是隨著服務開始搞大了,機器數量變成數十台時,也許會需要一些工具來輔助管理,之前我都是用 Fabric 來幫忙管理,不過 Fabric 有個缺點是他只是一個下指令的管理工具,當然我之前都硬幹,用 put 硬把他當成管理 configuration 的工具,上傳完了再下一個 reload 的指令,當然這樣也不是不行,不過似乎真的是一個很土炮的方法,但是隨著機器的數量越來越大,已經到達幾百臺的時候,就算是用 Fabric + parallel 其實還是覺得很怪,一來是雖然他已經平行處理了,但是他的 output 卻變成無序的,也就是當受管理的機器有 output 他就直接顯示在管理端上,有點惱人就是,另外一個是 Fabric 需要自己寫 Group 管理,要自己定義東西,而不能透過簡單的 query 來對想要的機器下指令就好,所以最近開始想要轉型使用 configuration management tool,常見的選擇是 puppet、chef、CFEngine 之類的,不過最近有個當紅的 OpenSource 軟體出現了,那就是 SaltStack。
solve dmesg appeared nouveau No connectors reported connected with modes after upgrading kernel to 3.8 or later
My Linux box installed a nVidia GeForce GT210 (a.k.a. Chipset GT218) graphic card. Before kernel 3.7, I append video=VGA-1:1440x900@60
to kernel parameters. Because I use a 2-meter-long VGA line to connect my computer and monitor, I have to enforce using VGA port as display output. And it works perfectly.
The dmesg before kernel 3.7 says
1 | [drm] Initialized drm 1.1.0 20060810 |
The kernel 3.7 or prior version was enforced using VGA as output successfully. And the resolution is right.
But after upgrading to 3.8 or above, I found that the parameter video=VGA-1:1440x900@60
causes a faulty screen after booting. I google it, and find some people bump into the same problem. No signal to monitor after kernel modesetting fails Problems with kernel-3.8 and kernel-3.9 modesetting
The kernel 3.8 or above says
1 | [drm] Initialized drm 1.1.0 20060810 |
The kernel 3.8 says it cannot find a connector?
I read the documents of KMS, and then I solved the problem.
E-M5 木質手把
再次從 HOSON 團隊拿到了一個測試手把。
不同的是這次手柄是木質的 !
E-M5 的主人們不用再羡慕只有 E-P5 有限量版的木質手柄了 :P
借用一下 E-P5 木質手柄的圖
因為選用的木頭不同所以顏色是不一樣的,E-P5 是加拿大楓木,而版友所選的是質地經過測試很堅固的柚木。
設計團隊測試了柚木跟槐木,發現槐木還是軟了一點,他們更看過紫檀木,不過後來因為成本過高就作罷了。
註: 柚木在 wiki 裡面記載 「機械性質極強、乾燥性良好,收縮率小、木質強韌、耐久性高、對菌類及蟲害抵抗力強 … 木理通直、質地堅硬、細緻,材面含油脂之觸感,乾燥性良好,耐久性高,為所有木材中膨脹收縮最少者一,尺寸安定性佳。材面木紋美觀優雅、且加工容易、為世界上高級木材之一。」
Safari 無法建立 nginx ssl_ciphers 使用 RC4 的連線
前幾天幫部門把原本提供 HTTPS 的 squid 換成 nginx,結果馬上被反應 Mac 上面的 Agent 不能連線但是又不知道為什麼,因為其他的瀏覽器 Chrome Firefox 不管作業系統 Windows Linux Mac 上的都可以連真的很弔詭,麻煩同事用跟 Agent 一樣的 Framework 重寫一個簡單的版本也不行,測了很久也找不太到癥結點,後來靈機一動,何不試看看 Safari … 結果果然不出所料… Unable to establish a secure connection
XDDD 搞什麼連 Safari 也連不了,這樣子要 Debug 我就可以自己來了,不然要一直麻煩同事跟我對測不好意思,一開始先用 tcpdump
發現 Server 送 Certificate 給 Client 之後 Client 就自己斷掉 connection ?! WTF 這太沒有頭緒了吧,後來上網搜尋 ssl connection fail safari
,結果一路看看看就看到了這個 HTTPS requests fail on sites which immediately close the connection if TLS 1.1 negotiation is attempted, on Ubuntu 12.04,起因是 OpenSSL 1.0.1 的一個 Bug,版上建議降成 OpenSSL 1.0.0 就可以了,因為我要啟用 nginx 的 spdy 所以一定要用 OpenSSL 1.0.1 才可以,不過秉持實驗的精神只好先解除這個功能,於是我就編譯了 nginx with openssl 1.0.0k,然後結果…靠背還是一樣 Safri 不能連其他都可以!不信邪改用 0.9.8y,結果在一模一樣的設定下這個 Safari 就可以連了 = = (這哪招),總之越來越神秘,只好先回到 nginx with openssl 1.0.1e,(就是死命要 spdy 就對了 XD),後來在沒什麼想法的情況下只好打開 nginx 的 debug mode error_log xxxxx debug;
,瞧瞧裡面有什麼。
結果就看到
1 | SSL handshake handler: 0 |
用 map 的功能把 nginx 變成簡單的應用程式防火牆
要幫 nginx 增加安全性的話,大概首推 modsecurity 這個模組了,不過目前他只有支援 nginx 1.2 穩定版,尚未支援 1.3 開發版,基本上具有下列功能
- 超過 16000 規則防範下列攻擊
- SQL injection
- Cross-site Scripting (XSS)
- Local File Include
- Remote File Include
- 可客製化規則,保護下列的應用
- WordPress
- cPanel
- osCommerce
- Joomla
- 包含了 OWASP Core Rule Set
- IP 聲望偵測
- Malware Detection
不過有一些在更簡單的功能,像是有時候會自己想擋一些 bot,或者要判斷合法的 referrer 才給過之類的就不在這個之內了,這時候我們可以利用 map 來幫我們做簡單的過濾。
E-M5 12mm 25mm
三年前原本買了 GF2 + LUMIX G 14mm F2.5 ASPH 要給我妹,結果他竟然嫌棄說 14mm 沒辦法變焦… 0rz… 這實在是,結果後來還是買了一般的小 DC 給她 = =+,然後去年入手了 LEICA DG SUMMILUX 25mm F1.4 ASPH
大光圈的加持真的不是蓋的等效 50mm 也相當的好取景,但是最近對焦距離 30cm 真的稍遠不過他本來就被定位在人像鏡所以其實還好,整體來說還是超級棒的一顆鏡頭,只是去參觀室內的展覽(像是小叮噹誕生前百年特展)難免又被我妹嫌棄說為什麼拍照都要站這麼遠 XDDD,以下是 GF2 搭 25mm 拍出來的照片。
nginx 設定檔規則概要
這篇是記錄一些 lighttpd 轉 nginx rewrite rule 的實作與一些注意事項,最後會講一些 squid 轉 nginx 的技巧。
這裡先講一些跟 nginx rewrite 有關的重點。
首先 nginx 算是分成 location
跟 rewrite
,lighttpd 是有 url.rewrite
、url.rewrite-repeat
跟 url.redirect
,其中 lighttpd 的 url.rewrite
就是 rewrite once 而 url.rewrite-repeat
則是重複一直 rewrite 的意思,這個則對應到 nginx rewrite
後面接的參數,也就是 break
跟 last
,break
就是 rewrite 到此為止不要再跑 rewrite
了,但是 last
就會在重頭跑 rewrite 一次,而且 last
也是 rewrite
這個 directive 的預設值,所以如果你的 rewrite 不小心變成 loop (nginx 預設是 rewrite 10 次後就噴 500)請加上 break
。至於 lighttpd 的 url.redirect
其實在 nginx 也是透過 rewrite
完成的,主要是加 redirect
跟 permanent
的參數,分別是回 302 跟 301。rewrite
的用法大約如下:
Linux cgroups
cgroups 是 Linux 的一個特色,全名是 control groups,最簡單的概念就是控制資源的分配包含了隔離、記錄的功能,最早是由 Google 的工程師開發的,並且在 2.6.24 正式進了 Kernel,後來也陸續加了不少功能,而且在 3.3 之後又加了網路優先權(priority)功能。後來的 LXC (LinuX Containers) 就是用了 cgroups 的功能來的。
由於是從 Kernel 控制的所以幾乎什麼都可以管理,舉凡 blkio
(管理輸入輸出的 block device ,像是硬碟、USB)、cpu
(設定忙碌時能使用的 CPU time)、cpuacct
(做統計用的)、cpuset
(設定由那顆 CPU 執行運算)、device
(限制能使用的設備)、memory
(限制記憶體用量)、net_cls
(似乎跟網路有關),管理的範圍是以 Group 為主,所謂的 Group 可以是同一個使用者、同一個群組、同樣的 Process。
最簡單使用 cgroups
的方式就是裝 libcgroup
來管理
刪除 memcachedb log 檔
memcachedb
用的是 BerkeleyDB 每 10M 會輸出一次 log file,所以久而久之你的資料夾會充滿一堆 log.xxxxxxxxxx
x 是數字,依序編列,在正常的 Production 環境大概不出三天就會比原本的 DB 還多了一倍的大小,如果沒有要還原的需求的話是不需要這些 log 的,清除的方法有兩個,一個是手動刪,一個是透過 memcachedb 清。
手動刪的話基本上就是用 find 就可以了,find /home/memcachedb_data/ -iname 'log*' | awk '{if (NR > 50) print}' | xargs -i -t rm -f {}
,如果是要透過 memecachedb 清則可以透過 telnet 或 netcat,指令是 db_archive
。不過如果每次都要手動下未免也太累了,所以我們可以放在 crontab 裡自動化,要放在 crontab 裡面一定要搭配 netcat ,因爲 telnet 不支援檔案重導符號 < ,只要隨便開一個檔案填入下列內容
db_archive
quit
然後在 crontab 裏面增加 0 * * * * /usr/bin/netcat localhost 5566 < /root/cmd/memcachedb_rotate_logs
即可每小時自動清一次,其中 5566 就是 memcachedb 開的 port。