build static link nginx

因為敝公司系統的環境有 OpenSUSE 跟 SUSE Linux Enterprise Sever SP2/SP3 混合,所以要更新 nginx 時往往要生出三個版本,實在有點搞人,不過其實也可以不要理會 libcrypt 版本不合的訊息啦,可是還是覺得編譯一個萬用的版本比較方便維護。

nginx 一共需要用到 libpthread, libcrypt, libpcre, libssl, libcrypto, libz, libdl,其中可以另外設定的有 OpenSSL, PCRE, Zlib 這三種,可以提供 libcrypt, libpcre, libssl, libcrypto, libz, libdl,然後 pthread 的就靠系統提供的 static 的 .a 了,所以要生出編譯的指令如下:

備註:假設 我們自己 Download 的 openssl, pcre, zlib 的原始碼都放在 /usr/src 底下

Conky

Conky 是一款類似 Mac OS X GeekTool 的桌面小工具 (其實 Conky 比較早出生,不過我比較晚發現 XD)。

他們都可以透過一些內建的 Function 或者寫 shell script 來顯示電腦的狀態 (或者想印在桌面的狀態),例如我現在的桌面是這樣的

大致上就是顯示天氣,網路速度、流量,CPU、記憶體、硬碟等使用率,然後還有 CPU 溫度跟風扇的資訊,最下面有 parse RSS (Gentoo Security) 的部分

參考網路設計師 Conky Google Now 這個主題

小弟合併了官網其他人貢獻的設定,稍微修改了一下

閱讀更多

install graylog2

Graylog2 是一個開源的 log 收容器,主要有兩個部份集合而成 serverweb interface,兩個都是由 Java 寫的,Server 的部份可以收容 syslog over TCP/UDP, 同時他也有自己的格式 GRLF (Graylog Extended Log Format),背後的儲存是搭配 mongodb,而搜尋引擎則由 elasticsearch 提供。另外的 web interface 也是 Java 寫成的 (早期好像是 Ruby on Rails),主要的功能就是提供一個漂亮的搜尋與分析的界面。

所以要使用 Graylog2 需要安裝五個元件

軟體 版本
Java Runtime Environment 7u51
elasticsearch 0.90.10
mongodb 2.4.9
graylog2-server 0.20.1-1rc
graylog2-web-interface 0.20.1-1rc

我們先從 elasticsearch 開始安裝起,以下都用目前最新的版本來示範,基本上不分什麼 Linux Distribution,我們單位都用 SUSE,不過 Gentoo 或 Ubuntu 也都適用就是

閱讀更多

saltstack 自定 grains

上一集 中,簡單的介紹了 Salt 的使用方法,這集要稍微深入的介紹 Salt 的其中一個部份 - Grains,Grains 基本上就是機器的資訊,通常指的是不會變動的部份,比方說 CPU 有幾顆、記憶體有多少、作業系統是用什麼的 (CentOS, Ubuntu, SUSE…etc)、網卡資訊,至於會變動的資訊通常會用 Salt 的 Pilar 功能,雖然 SaltStack 支援很多種 Linux Distribution,而且他的 API 也儘可能的豐富每一個 Distro,像是套件管理系統就有支援 CentOS 的 yum、 Ubuntu 的 APT、 SUSE 的 zypper,但是終究不是每一個系統的特色都能夠完整的支援 (可能需要自己貢獻上去?),像是 SUSE Linux Enterprise Server (簡稱 SLES) 除了大版本號,還有小版本的 Service Pack,撰文的今天剛好出了 SLES 11 SP3,但是 Salt 內建的 Grains 只有偵測到 OS 是 SLES 就沒了,有時候我會依照不同的 Service Pack 需要不一樣的設定 (因為 SP2 的套件有時候會支援某些功能,但是 SP1 時候還沒有,像是 sudoer 的設定),但是不能判斷版本怎麼辦? 沒關係 Salt 具有高度擴充性,我們可以自定想要的 Grains。

閱讀更多

自拍神器 Casio TR15 開箱

注意這款號稱「自拍神器」系列的相機也已經大概半年多了吧,大概是半年前小弟的女友跟小弟提起的,不過可怕的神器連價格也很可怕,此款的前兩代 TR150 台灣官方售價是一萬一,但是因為出貨速度緩慢,市場缺貨缺得要死,市場上大陸的水貨竟然叫價到接近 3 萬,實在是不知道台灣卡西歐在做什麼,製造速度有這麼慢嗎?這種水貨商實在讓人覺得坑殺小朋友不眨眼,尤其是在 Facebook 卡西歐的官方粉絲頁更有一些電信商趾高氣昂,更氣的是還買了一台兩百多萬的賓士!讓我都想去開通訊行坑殺高中生 & 俗稱的水水 (管他是不是正妹,這台拍下去保證各個都是正咩) XD

其實我後來也就忘記這件事了,因為女友也叫我不要買,因為實在背離原價太多了,一直到六月中,再逛 Mobile01 時,突然看到消費相機版的卡西歐有人 po 了一篇文章說 TR200 的下一代 TR350 (大陸的稱呼) 已經在六月初上市了,然後台灣也會上國際版的,代號是 TR15,於是就上了 Facebook 的卡西歐粉絲頁看了一下,果然會上!!但是!他媽的卡西歐是搶劫嗎,TR15 的售價竟然是兩萬四,竟然比 TR150 貴了一倍多 = =,不過功能也多一些些就是了 (他媽的再罵一次 Casio 以為你是萊卡嗎!),電容式觸碰螢幕,螢幕解析度也提升到 92 萬畫素,然後有 Wifi ,在傳輸照片或者是自拍控制都相當方便,核心處理引擎也變成兩顆,不管是開機速度或者拍照處理速度都比之前的更快,但主要的規格都差不多還是維持 1/2.3 寸的 1210 萬畫素、光圈 2.8、超廣角的等效焦距 21mm。

閱讀更多

Saltstack 使用心得&簡介

身為一個系統管理者,當你管理的機器數量只有十來台時,你可以很輕鬆的一台一台進去管理、設定機器,但是隨著服務開始搞大了,機器數量變成數十台時,也許會需要一些工具來輔助管理,之前我都是用 Fabric 來幫忙管理,不過 Fabric 有個缺點是他只是一個下指令的管理工具,當然我之前都硬幹,用 put 硬把他當成管理 configuration 的工具,上傳完了再下一個 reload 的指令,當然這樣也不是不行,不過似乎真的是一個很土炮的方法,但是隨著機器的數量越來越大,已經到達幾百臺的時候,就算是用 Fabric + parallel 其實還是覺得很怪,一來是雖然他已經平行處理了,但是他的 output 卻變成無序的,也就是當受管理的機器有 output 他就直接顯示在管理端上,有點惱人就是,另外一個是 Fabric 需要自己寫 Group 管理,要自己定義東西,而不能透過簡單的 query 來對想要的機器下指令就好,所以最近開始想要轉型使用 configuration management tool,常見的選擇是 puppetchefCFEngine 之類的,不過最近有個當紅的 OpenSource 軟體出現了,那就是 SaltStack

閱讀更多

solve dmesg appeared nouveau No connectors reported connected with modes after upgrading kernel to 3.8 or 3.9

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
[drm] Initialized drm 1.1.0 20060810
[drm] nouveau 0000:01:00.0: Detected an NV50 generation card (0x0a8280a2)
[drm] nouveau 0000:01:00.0: Checking PRAMIN for VBIOS
[drm] nouveau 0000:01:00.0: ... appears to be valid
[drm] nouveau 0000:01:00.0: Using VBIOS from PRAMIN
[drm] nouveau 0000:01:00.0: BIT BIOS found
[drm] nouveau 0000:01:00.0: Bios version 70.18.2c.00
[drm] nouveau 0000:01:00.0: TMDS table version 2.0
[drm] nouveau 0000:01:00.0: MXM: no VBIOS data, nothing to do
[drm] nouveau 0000:01:00.0: DCB version 4.0
[drm] nouveau 0000:01:00.0: DCB outp 00: 01000302 00020030
[drm] nouveau 0000:01:00.0: DCB outp 01: 02000300 00000000
[drm] nouveau 0000:01:00.0: DCB outp 02: 02011362 0f220010
[drm] nouveau 0000:01:00.0: DCB outp 03: 01022310 00020010
[drm] nouveau 0000:01:00.0: DCB conn 00: 00001030
[drm] nouveau 0000:01:00.0: DCB conn 01: 00202161
[drm] nouveau 0000:01:00.0: DCB conn 02: 00000200
[drm] nouveau 0000:01:00.0: Parsing VBIOS init table 0 at offset 0xD0B7
[drm] nouveau 0000:01:00.0: 0xD40D: Condition still not met after 20ms, skipping following opcodes
[drm] nouveau 0000:01:00.0: 0xD411: Condition still not met after 20ms, skipping following opcodes
[drm] nouveau 0000:01:00.0: Parsing VBIOS init table 1 at offset 0xD608
[drm] nouveau 0000:01:00.0: Parsing VBIOS init table 2 at offset 0xE0DA
[drm] nouveau 0000:01:00.0: Parsing VBIOS init table 3 at offset 0xE10F
[drm] nouveau 0000:01:00.0: Parsing VBIOS init table 4 at offset 0xE2C2
[drm] nouveau 0000:01:00.0: Parsing VBIOS init table at offset 0xE327
[drm] nouveau 0000:01:00.0: 0xE327: Condition still not met after 20ms, skipping following opcodes
[TTM] Zone  kernel: Available graphics memory: 3051544 kiB
[TTM] Zone   dma32: Available graphics memory: 2097152 kiB
[TTM] Initializing pool allocator
[TTM] Initializing DMA pool allocator
[drm] nouveau 0000:01:00.0: Detected 512MiB VRAM (DDR2)
mtrr: type mismatch for e0000000,10000000 old: write-back new: write-combining
[drm] nouveau 0000:01:00.0: 512 MiB GART (aperture)
[drm] Supports vblank timestamp caching Rev 1 (10.10.2010).
[drm] No driver support for vblank timestamp query.
[drm] nouveau 0000:01:00.0: 3 available performance level(s)
[drm] nouveau 0000:01:00.0: 0: core 135MHz shader 270MHz memory 135MHz voltage 850mV
[drm] nouveau 0000:01:00.0: 1: core 405MHz shader 810MHz memory 405MHz voltage 900mV
[drm] nouveau 0000:01:00.0: 3: core 589MHz shader 1402MHz memory 400MHz voltage 1000mV
[drm] nouveau 0000:01:00.0: c: core 405MHz shader 810MHz memory 405MHz voltage 900mV
[drm] nouveau 0000:01:00.0: allocated 1440x900 fb: 0x310000, bo ffff8801a78dc000
fbcon: nouveaufb (fb0) is primary device
[drm] nouveau 0000:01:00.0: no native mode, forcing panel scaling
Console: switching to colour frame buffer device 180x56
fb0: nouveaufb frame buffer device

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
[drm] Initialized drm 1.1.0 20060810
nouveau  [  DEVICE][0000:01:00.0] BOOT0  : 0x0a8280a2
nouveau  [  DEVICE][0000:01:00.0] Chipset: GT218 (NVA8)
nouveau  [  DEVICE][0000:01:00.0] Family : NV50
nouveau  [   VBIOS][0000:01:00.0] checking PRAMIN for image...
nouveau  [   VBIOS][0000:01:00.0] ... appears to be valid
nouveau  [   VBIOS][0000:01:00.0] using image from PRAMIN
nouveau  [   VBIOS][0000:01:00.0] BIT signature found
nouveau  [   VBIOS][0000:01:00.0] version 70.18.2c.00.04
nouveau  [     PFB][0000:01:00.0] RAM type: DDR2
nouveau  [     PFB][0000:01:00.0] RAM size: 512 MiB
nouveau  [     PFB][0000:01:00.0]    ZCOMP: 960 tags
nouveau  [  PTHERM][0000:01:00.0] FAN control: none / external
nouveau  [  PTHERM][0000:01:00.0] fan management: disabled
nouveau  [  PTHERM][0000:01:00.0] internal sensor: yes
[TTM] Zone  kernel: Available graphics memory: 3050978 kiB
[TTM] Zone   dma32: Available graphics memory: 2097152 kiB
[TTM] Initializing pool allocator
[TTM] Initializing DMA pool allocator
mtrr: type mismatch for e0000000,10000000 old: write-back new: write-combining
nouveau  [     DRM] VRAM: 512 MiB
nouveau  [     DRM] GART: 512 MiB
nouveau  [     DRM] TMDS table version 2.0
nouveau  [     DRM] DCB version 4.0
nouveau  [     DRM] DCB outp 00: 01000302 00020030
nouveau  [     DRM] DCB outp 01: 02000300 00000000
nouveau  [     DRM] DCB outp 02: 02011362 0f220010
nouveau  [     DRM] DCB outp 03: 01022310 00020010
nouveau  [     DRM] DCB conn 00: 00001030
nouveau  [     DRM] DCB conn 01: 00202161
nouveau  [     DRM] DCB conn 02: 00000200
[drm] Supports vblank timestamp caching Rev 1 (10.10.2010).
[drm] No driver support for vblank timestamp query.
nouveau  [     DRM] 3 available performance level(s)
nouveau  [     DRM] 0: core 135MHz shader 270MHz memory 135MHz voltage 850mV
nouveau  [     DRM] 1: core 405MHz shader 810MHz memory 405MHz voltage 900mV
nouveau  [     DRM] 3: core 589MHz shader 1402MHz memory 400MHz voltage 1000mV
nouveau  [     DRM] c: core 405MHz shader 810MHz memory 405MHz voltage 900mV
nouveau  [     DRM] MM: using COPY for buffer copies
nouveau 0000:01:00.0: No connectors reported connected with modes
[drm] Cannot find any crtc or sizes - going 1024x768
nouveau  [     DRM] allocated 1024x768 fb: 0x70000, bo ffff8801a7c37c00
fbcon: nouveaufb (fb0) is primary device

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
2
3
4
5
6
SSL handshake handler: 0
[debug] 7585#0: *1 SSL_do_handshake: 0
[debug] 7585#0: *1 SSL_get_error: 5
[info] 7585#0: *1 peer closed connection in SSL handshake while SSL handshaking, client: x.x.x.x, server: 0.0.0.0:443                                  
[debug] 7585#0: *1 close http connection: 14
[debug] 7585#0: *1 SSL_shutdown: 1

閱讀更多

用 map 的功能把 nginx 變成簡單的應用程式防火牆

要幫 nginx 增加安全性的話,大概首推 modsecurity 這個模組了,不過目前他只有支援 nginx 1.2 穩定版,尚未支援 1.3 開發版,基本上具有下列功能

  1. 超過 16000 規則防範下列攻擊
    • SQL injection
    • Cross-site Scripting (XSS)
    • Local File Include
    • Remote File Include
  2. 可客製化規則,保護下列的應用
    • WordPress
    • cPanel
    • osCommerce
    • Joomla
  3. 包含了 OWASP Core Rule Set
  4. IP 聲望偵測
  5. Malware Detection

不過有一些在更簡單的功能,像是有時候會自己想擋一些 bot,或者要判斷合法的 referrer 才給過之類的就不在這個之內了,這時候我們可以利用 map 來幫我們做簡單的過濾。

閱讀更多