2011年8月31日 星期三

Building Chromium Windows @ Windows 7 64Bit

為啥會需要編 Chromium 呢?一開始是工作需求,後來漸漸變成一種想把玩 Open Source 的心態去進行,即使下了班還是播出點時間研究研究。實在是 Web Browser 佔據的場景越來越多囉,如果手邊有一套自己可以亂改的 Browser 不亦樂乎?例如去年就有人拿 chromium 改成專門用於 facebook 的瀏覽器。雖然 Open Source 界不少人反微軟,但反過來看看 OS 市佔率,還是有太多太多人都在 Windows 上玩耍,如果想服務大眾或是做出合適於大眾把玩的東西,仍舊不能放棄 Windows 平台。


整個流程請參考:Build Instructions (Windows) 即可。在此使用 Windows 7 CHT 64Bit + VS2010 Express CHT 版,官方的簡介都是以 VS2008 Express 為基準或是 VS2008、VS2010 為主,所以參考官方的流程已足矣。另外一提的,連 Webkit 還都是以 VS2005 系列來說。


環境:


CPU:AMD 945 x4
RAM:DDR3-1333 2G x4
OS:Windows 7 CHT 64Bit


安裝軟體:


VISUAL C++ 2010 EXPRESS (VS2010ExpressCHT.iso)


Microsoft Visual Studio 2010 Service Pack 1 (VS2010SP1dvd1.iso)


DirectX SDK (June 2010 DirectX SDK)


Windows Driver Kit Version 7.1.0


cygwin


Chromium depot_tools


設定:



  1. 先取得程式碼,在此使用打包好的 http://chromium-browser-source.commondatastorage.googleapis.com/chromium_tarball.html ,此為 chromium.r96198.tgz 版本

  2. 接著打開 cgywin 並且把 chromium.r96198.tgz 擺在家目錄,用 tar -xvf chromium.r96198.tgz 解開,大概要 1x 分鐘,最後把 chromium 移到家目錄

  3. 切換至 ~/chromium/src 執行

    • $ set GYP_MSVS_VERSION=2010e

    • $ gclient sync --force

    • $ GYP_DEFINES='disable_nacl=1' gclient runhooks



  4. 打開 ~/chromium/src/chrome/chrome.sln 並將 chrome 設成起始專案

  5. 設定額外 include 與 lib 資訊

    • 開啟 chrome.sln 並點選 chrome project 後,[檢視] -> [屬性管理員] -> 點選 Microsoft.Cpp.Win32.user 後,去 [VC++ 目錄] 新增 [include 目錄] 和 [程式庫目錄]的資訊



  6. 可以點 chrome project 後,按 F7 編譯了。在我這台電腦大概一開始要跑快兩小時,修一修後再跑一小時,最後才編出 chrome.exe


microsoft.Cpp.Win32.user 


chrome_vc2010_express_lib chrome_vc2010_express_include


錯誤訊息及解決方式:


問題一:


官方說可以用 C:\trunk\src\chrome> devenv.exe /build Debug chrome.sln /project chrome.vcproj 這種 cmd line 編法,但一直找不到 devenv.exe 擺在哪


解法:


對 VS2008 Express 改用 vcbuild.exe ,位置在 C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcpackages\vcbuild.exe ,且使用時得改成 vcbuild.exe /upgrade ,這樣也會開始編譯。但我還是不知道 VC++ 2010 Express 該用哪支,最後還是用開始 chrome.sln 用介面編吧


問題二:


------ 已開始建置: 專案: ppapi_cpp_objects_nacl, 組態: Debug Win32 ------
2>  graphics_3d_dev.cc
2>  video_capture_client_dev.cc
2>  file_chooser_dev.cc
2>  scrollbar_dev.cc
2>..\..\..\..\ppapi\cpp\dev\video_capture_client_dev.cc(30): error C2440: '<function-style-cast>' : 無法由 'const PP_Resource' 轉換為 'pp::Buffer_Dev'
2>          沒有可以取得來源型別的建構函式,或建構函式多載解析模稜兩可
2>  video_decoder_dev.cc
2>..\..\..\..\ppapi\cpp\dev\graphics_3d_dev.cc(28): error C2511: 'pp::Graphics3D_Dev::Graphics3D_Dev(const pp::Instance &,const pp::Graphics3D_Dev &,const int32_t *)' : 在 'pp::Graphics3D_Dev' 找不到多載成員函式
2>          C:\cygwin\home\changyy\chromium\src\native_client\src\third_party\ppapi/cpp/dev/graphics_3d_dev.h(17) : 請參閱 'pp::Graphics3D_Dev' 的宣告
2>..\..\..\..\ppapi\cpp\dev\graphics_3d_dev.cc(58): error C2039: 'ResizeBuffers' : 不是 'pp::Graphics3D_Dev' 的成員
2>          C:\cygwin\home\changyy\chromium\src\native_client\src\third_party\ppapi/cpp/dev/graphics_3d_dev.h(17) : 請參閱 'pp::Graphics3D_Dev' 的宣告
2>..\..\..\..\ppapi\cpp\dev\graphics_3d_dev.cc(62): error C2039: 'ResizeBuffers' : 不是 'PPB_Graphics3D_Dev' 的成員
2>          C:\cygwin\home\changyy\chromium\src\native_client\src\third_party\ppapi/c/dev/ppb_graphics_3d_dev.h(37) : 請參閱 'PPB_Graphics3D_Dev' 的宣告
2>..\..\..\..\ppapi\cpp\dev\graphics_3d_dev.cc(63): error C3861: 'pp_resource': 找不到識別項
... 


解法:


把這東西給關掉 XD 在 cygwin 底下,切換到 ~/chromium/src 後,執行 $ GYP_DEFINES='disable_nacl=1' gclient runhooks 後,再去重編即可。


問題三:


108>C:\WinDDK\7600.16385.1\inc\mfc42\atldef.h(4) : fatal error C1083: Cannot open include file: '..\atl30\atldef.h': No such file or directory


解法:


安裝的 WDD 中,只有 atl71 目錄而沒有 atl30,所以就是直接把 atl71 複製一份並更名為 atl30。


問題四:


fatal error: 90>libGLESv2\libGLESv2.rc(10): fatal error RC1015: cannot open include file 'afxres.h'.


解法:


將 include 資訊多加個 WDD/path/inc/mfc42 吧


其他: 


編完沒過怎辦?繼續編 XD 重複幾次會發現沒過的會減少 :P


其他參考資料:



2011年8月30日 星期二

[Unix] .screenrc 與 .cshrc 筆記

在一台共用的工作站中,很不巧地使用共用帳號來操作時,這時候常常會碰到一些軟體設定的問題,最常見的就是自己用 tarball 偷裝的軟體 XD 這時候會想透過 source my.cshrc 來更新 PATH 環境變數,來使用這些 tools,然而使用 screen 時,卻變成每開一個視窗就得手動跑一次 source my.cshrc ,有點麻煩 :P 原先這種是應該寫在 ~/.cshrc 中就好,但因為是共用帳號,所以就設法避開了。


暫時還沒找到 .screenrc 的設定法?感覺應該有辦法每次新建一個視窗後,就跑某些指令吧?總之現在先偷改 ~/.cshrc 的部分,用的方式就是看工作目錄在哪,在指定工作目錄下就跑 source my.cshrc 來解決。至少簡單地可以 work 了 Orz


~/.screenrc:


caption always "%{bw}%M/%d %c %{wb} %-w%{c}%n %t%{w}%+w%{k} %=%{G}[%H] %l%"


~/.cshrc:


...
...

set checkdir='/data/MyWorkDir'
set currdir=`pwd`
set currcheck=`echo $currdir|cut -c1-15`
if( $currcheck == $checkdir ) then
        source /data/MyWorkDir/dev.cshrc
endif


/data/MyWorkDir/dev.cshrc:


setenv PATH     ${PATH}:/data/MyWorkDir/tarball/bin
setenv EDITOR   vim
if ( ! $?WINDOW ) then
        set prompt="%n@%m[%t] %~\n> "
else
        set prompt="%n@%m[%t]($WINDOW) %~\n> "
endif


如此一來,只要一開始切換到 /data/MyWorkDir 後,每次用 screen 開啟視窗時,都會跑 /data/MyWorkDir/dev.cshrc 來更新環境變數囉。先這樣撐著用吧 XD


2011年8月29日 星期一

資源


工作之後,越來越覺得資源是很重要的議題,例如最容易忽略的時間,一天也只有 24 小時,這讓我想起大一時的計概教授總是提醒大家 BBS 一天不要玩超過 30 分鐘!可惜做到的應該不多吧?我大學之後的學生生活,幾乎天天手洗洗衣服,時間加一加也挺可觀的,說真的不如其他同學一周花 20~30 元洗烘一次。


前陣子參加義工跟小我快十歲的資訊熱愛者聊天,聽到他很徬徨要學哪種程式語言,大概是擔心走錯路,這會讓我想到同事以前學習 Java 的路程,直接在書店看哪種程式語言最多,就挑它了來學,那時候就是 Java 了,事實證明,的確也沒挑錯,到現在 Java 還是很常出現在周邊的 open source 中。這些,也是青春的資源啊。


最近也常跟另一位同事去找主管 PK ,讓我體會計劃的推行也是需要資源的,這是更強烈的。假設方向是 spinoff 的話,那就需要設法去找錢來支援自己的想法,這時候絕對不是喊喊口號或是裝傻過日子,必須在組織可行的範圍內,提出洽當的計畫方向,可能是你想做得事中的十分之一,當計畫方向已經無法跟組織相輔相成時,那就該另尋一條路,向外找投資者,這些不是別人酸葡萄眼光中可以瞧見的。除此之外,對於職場上那些見人說人話的模式,有時真的不要太認真,認真就真的輸了,一不小心就將自己的資源揮霍掉了。


聊聊休閒活動,周末跑去一間漫畫店看書,這是我第二次在漫畫店看漫畫,這次的計價方式是以一本為單位(原價 x 10% - 2),這樣看一本 One Piece 就只要 8 元,看兩集就 16 元。上一次去清大水木則是四分鐘 1 元,一小時 15 元的算法,其實兩種都不差,或許在清大水木可以一直衝刺,但在時間的追趕下會不會損失了看漫畫的樂趣呢?我覺得到漫畫店看漫畫是一種資源善用的方式呢,有些東西真的只需曾經擁有就夠了。


我覺得資源這個議題,等到了成家立業還是會碰到,如同看著周邊已有家室的好友,偶時必須拒絕聚餐邀約,但我覺得這也不是什麼損失呢。資源,在每個人的心中都有一把尺,不需人云亦云,卻也該好好珍惜啊。可以挑些自己覺得有意義的事來闖闖,用旅行來增廣見聞也好,不見得是市面上火紅的東西,但不要只想著做大事,那樣的下場不是空轉二字可以道盡,有時順著命運緣分,小量也足矣。


2011年8月22日 星期一

我來減肥的

2011/08/20 06:57:00


終於,三天兩夜的行程撐了過去了。十分難得,連續三天都早起,今年的夏天有熱血到!


這個起源是去年與失散多年的高中學長相認,而後又閒聊台灣大型的資訊活動,總之就這樣加入了工作人員陣營。細想起來,碩班的大神就曾跟我說過,一生至少去參加一次吧!看來機會就差不多來了,再加上我本身不太可能因為想聽某堂而跑去台北,那用工作人員的身分,應該動力會多一點吧?!


經過三天的相處,我發現台灣其實有許多能力不錯或是默默耕耘的資訊能力者,有的高中就寫出 apt-get 這種相似功能的套件,有的則是不小心踏入資訊圈,正徬徨著未來的生活規畫,這些都足以令人振奮的!過去我在大學資訊系中,看到大部分的都比較顧成績而已,僅有少數人把資訊能力練得很好,如今在會場瞧見許多資訊強者,有單純愛玩某款遊戲,因此架論壇管理機器踏上了資訊這條路,無論哪種切入點,至少學了許多學校沒教的事,我覺得這才是大學該學會的技能啊!


Open source 是一種熱於分享精神,隨著生活的改變,或許不再有那空閒的時間寫 code 或置身於活動中,但我想,還是存在合適自己的付出模式,找到他!並好好地繼續熱血下去吧!


2011年8月15日 星期一

[Windows] 初探 Browser Helper Object - 在特定條件下刪除 Cookie 為例

IE 附加元件


Browser Helper Object (BHO) 說穿了就像 Firefox Plugin 或 Google Chrome Extension 一樣,用來擴充瀏覽器的功能,只是實作上不同於 Firefox 跟 Chrome 的 Javascript 環境,這次使用的是 VC++ 的環境。沒想到人生中第一次實作瀏覽器 plugin 竟然是用在 IE 身上。


原先一直想用 Visual Studio Express 來實作,但裝了一陣子後,雖然可以透過 Windows Driver Kit (WDK) 來補齊 Active Template Library (ATL) 所需的 header file 或 library ,但最後看到的教學要新增一個 ATL Simple Object 時,卡關了,最後還是乖乖使用 VS 系列了。


關於範例就請直接參考 MSDN 官網:


Building Browser Helper Objects with Visual Studio 2005



來源:http://msdn.microsoft.com/en-us/library/bb250489(v=vs.85).aspx


官網寫得非常夠用!上述例子是當網頁讀完後(OnDocumentComplete),彈跳出一個視窗,如果熟悉 jQuery (或Javascript) 的話,就類似 $(document).ready(function(){ alert("Hello World!"); }); 效果。簡單地說,透過瀏覽器的事件偵測,可以玩很多好玩的東西。


由於周邊有人有這樣的需求,我就好奇播一點時間研究了一下。目前的需求:


在特定的 URL 下,刪除特定網域的 Cookie


這樣的行為基於安全性的設計,本來就是不允許的 :P 但透過安裝 BHO 後,可以刪除不同網域的 cookie 資料。所以啊,亂裝 BHO 是很危險的,並且 IE 又是 Windows 核心啊。


寫法只需更改 OnDocumentComplete(IDispatch *pDisp, VARIANT *pvarURL) 部分:


void STDMETHODCALLTYPE CHelloWorldBHO::OnDocumentComplete(IDispatch *pDisp, VARIANT *pvarURL)
{
    // Retrieve the top-level window from the site.
    HWND hwnd;
    HRESULT hr = m_spWebBrowser->get_HWND((LONG_PTR*)&hwnd);
    if (SUCCEEDED(hr))
    {
        // Output a message box when page is loaded.
        //MessageBox(hwnd, L"Hello World!", L"BHO", MB_OK);

        if ( wstrcmp( pvarURL->bstrVal , L"http://www.google.com.tw/" ) == 0 )
        {
            InternetSetCookie( "http://localhost" , "MyCookieName" , "MyCookieValue; expires=Thu, 01-Jan-1970 00:00:01 GMT" );
        }
    }
}


別忘了要引用相關函式庫:


#pragma comment(lib,"Wininet.lib")

#include <Wininet.h>


整個效果就是當瀏覽器瀏覽到 http://www.google.com.tw/ 時,對 http://localhost 網域進行設定 Cookie 的動作,由於設定的 expire time 已超過,等同於刪除指定的 cookie 資訊。這樣的清除 cookie 技巧可以用再強制幫使用者登出等等。


2011年8月10日 星期三

Building Webkit on Windows


圖片來源:http://www.webkit.org/


多年以前,總覺得 FreeBSD 系統的 make buildworld 很威,在 P-200 的電腦等級,編 FreeBSD 4 系列就花了 6 小時。而後隨著硬體的升級,並且在 VirtualBox 的環境中,大概都不用 30 分鐘了吧。一直以為這樣的等待只會出現在編譯 OS/Kernel 方面,如今在 Windows XP 上編譯 Webkit source code,沒想到浩浩蕩蕩地也等超過 30 分鐘 XD 看來我對 Windows 的軟體編譯經驗太弱了,殊不知很多大型程式碼,編譯時間也是很久的。


環境:


Windows XP with SP3
Visual Studio 2005 Express
Microsoft Platform SDK for Windows Server 2003 R2
Cygwin


Webkit 版本:


$ time svn checkout http://svn.webkit.org/repository/webkit/trunk WebKit
...
Checked out revision 92660.

real    79m43.055s
user    1m24.942s
sys     5m40.208s


步驟:


$ ~/Webkit
$ get http://developer.apple.com/opensource/internet/webkit_sptlib_agree.html
$ time ./Tools/Scripts/update-webkit
Updating OpenSource
...

real    6m53.662s
user    0m7.613s
sys     0m35.927s



$ time ./Tools/Scripts/build-webkit --debug
Installing WebKitSupportLibrary...
The WebKitSupportLibrary has been sucessfully installed in /home/user/WebKit/WebKitLibraries/win
Building results into: /home/user/WebKit/WebKitBuild
WEBKITOUTPUTDIR is set to: C:\cygwin\home\user\WebKit\WebKitBuild
WEBKITLIBRARIESDIR is set to: C:\cygwin\home\user\WebKit\WebKitLibraries\win
/cygdrive/c/Program Files/Microsoft Visual Studio 8/Common7/IDE/VCExpress.exe win\WebKit.vcproj\WebKit.sln /build Debug


錯誤訊息:


===== BUILD FAILED ======
Please ensure you have run Tools/Scripts/update-webkit to install dependencies.
You can view build errors by checking the BuildLog.htm files located at:
/home/user/WebKit/WebKitBuild/obj/<project>/<config>.
接著可在 ~/WebKit/WebKitBuild/Debug/buildfailed 看到哪個項目編譯有問題,再切換到該目錄裡尋找 BuildLog.htm 查看
例如 buildfailed 顯示 XXWebCoreXX,那就到 ~/WebKit/WebKitBuild/Debug/obj/WebCore/BuildLog.htm 查看即可。


相關筆記:


請先確認官方網站 BuildBot: WebKit,在這邊可以得知各個平台目前的狀況,有時編譯失敗不是自己環境的問題。


..\platform\DefaultLocalizationStrategy.cpp(345) : error C2001: 常數中包含新行字元
..\platform\DefaultLocalizationStrategy.cpp(347) : error C2001: 常數中包含新行字元
..\platform\DefaultLocalizationStrategy.cpp(345) : fatal error C1057: 巨集展開中未預期的檔案結尾


編輯 C:\cygwin\home\user\WebKit\Source\WebCore\platform\DefaultLocalizationStrategy.cpp
在 line 345 附近可以看到有使用全形“的地方,把他改成 \" 即可( "Look Up \"%@\"" 和 "Look Up \"<selection>\"")


error C2220: 將警告視為錯誤處理 - 沒有產生 'object' 檔案
warning C4819: 檔案含有無法在目前字碼頁 (950) 中表示的字元。請以 Unicode 格式儲存檔案以防止資料遺失


使用 VC++ 2005 Express 打開檔案後,再存檔一次即可,不需更動原始碼,即可解決問題。此 error C2220 問題可以參考 http://lists.macosforge.org/pipermail/webkit-help/2010-March/000860.html


以下是更動過得檔案
C:\cygwin\home\user\WebKit\Source\WebCore\platform\DefaultLocalizationStrategy.cpp
c:\cygwin\home\user\WebKit\Source\WebCore\css\CSSWrapShapes.h
C:\cygwin\home\user\WebKit\Source\WebCore\css\CSSWrapShapes.cpp
C:\cygwin\home\user\WebKit\Source\WebCore\rendering\RenderFlowThread.cpp
C:\cygwin\home\user\WebKit\Source\WebCore\rendering\RenderRegion.cpp
C:\cygwin\home\user\WebKit\WebKitLibraries\win\Include\ConditionalMacros.h


error PRJ0003 : 繁衍 (Spawn) 'midl.exe' 發生錯誤


將 C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin 加入 PATH 環境變數


LINK : fatal error LNK1104: 無法開啟檔案 'WebCoreTestSupport.lib'


原先是 DumpRenderTree 沒編過,而後才想起來可以找一下 WebCoreTestSupport 的狀態,在 WebKitBuild\###\obj\WebCoreTestSupport\BuildLog.htm,所以還是上面的老問題,把 WrapShapes.h 存檔一下就行啦


fatal error C1083: 無法開啟包含檔案: 'windows.h': No such file or directory


把 VC++ 2005 Express 打開,在 [工具] -> [選項] -> [專案與方案] -> [VC++ 目錄],將 "可執行檔"、"Include 檔案" 和 "程式庫檔",分別新增 C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2 對應的 Bin、Include 和 Lib 目錄


請把 How to: Use Visual C++ Express Edition with the Microsoft Platform SDK http://msdn.microsoft.com/en-us/library/ms235626(VS.80).aspx 做完。


至於執行編譯出來的 Webkit.exe 時,會碰到找不到相關的 dll 檔案,可以在下列位置確認一下:



2011年8月9日 星期二

[Javascript] 調整 TinyMCE 預設字型大小

上次隨意尋找,沒有看清楚,就荒廢了一陣子 XD


這次確實地找,看到相關的文章:



總之,解法就是可以在 tinyMCE.init 指定一個 content_css 資訊來設定顯示字型啦,例如:


@ /path/custom_content.css


body.mceContentBody {
    font-size:20px;
}


@ test.html


tinyMCE.init({
    ....
    content_css : "/path/custom_content.css?"+new Date().getTime(),
    ....
}); 


而 custom_contents.css 後面加上一個時間戳記,只是為了避免瀏覽器 cache 而已。


那些年擁抱的世界...


周末跟一位長輩聊天,聊著聊著就像說著那些年...


長輩說:「以前我們班的那些人,成績最好的當政府官員,接著來則是像我一樣當公司的員工,剩下來的要嘛不是老闆就是流氓。」


長輩的意思是要我更勇敢地衝刺,這就是為何那些成績不好的人會有兩種極端的結果,要嘛拼到老闆,要嘛就當流氓,千萬不要優柔寡斷,甚至騎驢找馬的下場就是什麼也沒有,傻傻地往前衝吧!


看著長輩談論著那些年,瞧得出他眼中的那些年的...未完成。


2011年8月3日 星期三

[Unix] 使用 Tarball 安裝 Nginx + PHP (FastCGI) + HTTPS @ FreeBSD 7

已經拖了將三過月的筆記,終於抽空寫完了。看了幾篇關於 Nginx 的文章,例如使用的資源比 Apache Web Server 少,以至於可以提供比 Apache 更多連線服務等。這次就順手安裝一下,雖然我對它還是不熟悉,就連 FastCGI 也是,只依稀知道要在 Apache Web Server 上跑 PHP,一種是用 mod_php 的方式,另一種好像就是 fastcgi 模式。網路上的文章是說 FastCGI 將 PHP 與 Web server 切開不綁在一起,使得 Web server 不會受 PHP 影響過深,也能達到節省資源。


此篇在 FreeBSD 7 環境下,採用 PHP-5.2.17、PHP-PFM 和 Nginx-1.0.5 並透過 tarball 方式進行安裝。可在到 Nginx 下載 nginx-1.0.5 stable version(Unix), 另外使用 PHP 5.2.17。而 FastCGI 的部份,有兩套管理方式,一種是使用 lighttpd 中的 spawn-fcgi ,另一種則是用 PHP-FPM ,在此選用 PHP-FPM 囉。


安裝:


下載 PHP-5.2.17:


> wget http://www.php.net/get/php-5.2.17.tar.gz/from/tw.php.net/mirror
> tar -xvf php-5.2.17.tar.gz


下載 PHP-PFM patch for PHP-5.2.17:


> wget http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz
> gzip -cd php-5.2.17-fpm-0.5.14.diff.gz | patch -d php-5.2.17 -p1


下載 Nginx-1.05:


> wget http://nginx.org/download/nginx-1.0.5.tar.gz
> tar -xvf nginx-1.0.5.tar.gz


安裝 PHP (依需求使用,但至少要有 --enable-fastcgi --enable-force-cgi-redirect --enable-fpm 資訊)


> cd php-5.2.17
>  ./configure --prefix=/path/tarball --without-pear --with-openssl --enable-mbstring --with-curl --with-imap --with-mcrypt --with-imap-ssl --with-gd --enable-pcntl --enable-fastcgi --enable-force-cgi-redirect --enable-fpm
> make install


安裝 Nginx:


> cd nginx-1.0.5
> ./configure --prefix=/path/tarball/ --with-http_ssl_module --with-pcre
> make install


設定:


PHP-FPM:


設定要跑 fastcgi 使用的 port number,預設在 9000:


> vim /path/tarball/etc/php-fpm.conf
<value name="listen_address">127.0.0.1:9000</value>


啟動 PHP-FPM:


> /path/tarball/sbin/php-fpm start
Starting php_fpm  done


停止:


> /path/tarball/sbin/php-fpm stop


Nginx :


設定 PHP FastCGI:


> vim /path/conf/nginx.conf
location ~ \.php$ {
#proxy_pass   http://127.0.0.1;
include conf/fastcgi.conf;
fastcgi_pass  127.0.0.1:9000;
fastcgi_index index.php;
}


設定 HTTPS:


建立憑證:


> cd /path/tarball/conf
> openssl genrsa -des3 -out server.key 2048
> openssl req -new -key server.key -out server.csr
> openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
> openssl rsa -in server.key -out server.key


設定 nginx.conf 之 HTTPS 部分:


> vim /path/conf/nginx.conf

在 http {} 中增加 client_max_body_size 30m; 來解決 413 Request Entity Too Large 訊息

# HTTPS server
#
server {
listen       443;
server_name  localhost;

ssl                  on;
ssl_certificate      server.crt;
ssl_certificate_key  server.key;

ssl_session_timeout  5m;

ssl_protocols  SSLv2 SSLv3 TLSv1;
ssl_ciphers  HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers   on;

location / {
root   html;
index  index.html index.htm index.php;
}
        location ~ \.php$ {
            #proxy_pass   http://127.0.0.1;
            include fastcgi.conf;
            fastcgi_param  HTTPS on; 
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
        }   
}


啟動:


> /path/tarball/sbin/nginx


停止:


> /path/tarball/sbin/nginx -s stop


如此一來,可以在 /path/tarball/html 目錄中,擺一個 index.php 檔案,用 <?php phpinfo(); ?> 來測試 PHP 是否正常工作囉。


2011年8月2日 星期二

透過 telnet 指令測試 Mail Server POP3/IMAP/SMTP 服務

很久沒碰 Mail Service 了,結果不小心忘了測試 POP3/IMAP 用的指令,翻翻以前的 code 又回憶了起來。


筆記一下:


POP3(110/995):


> telnet mail_server_ip 110
Trying mail_server_ip...
Connected to mail_server_ip.
Escape character is '^]'.
+OK POP3 mail_server_ip 2007e.104 server ready
user UserID
+OK User name accepted, password please
pass UserPasswd
+OK Mailbox open, 11 messages
quit
+OK Sayonara
Connection closed by foreign host.


IMAP(143/993):


> telnet mail_server_ip 143
Trying mail_server_ip...
Connected to mail_server_ip.
Escape character is '^]'.
* OK [CAPABILITY IMAP4REV1 I18NLEVEL=1 LITERAL+ SASL-IR LOGIN-REFERRALS STARTTLS] mail_server_ip IMAP4rev1 2007e.404 at Tue, 2 Aug 2011 17:42:07 +0800 (CST)
- login UserID UserPasswd
- OK [CAPABILITY IMAP4REV1 I18NLEVEL=1 LITERAL+ IDLE UIDPLUS NAMESPACE CHILDREN MAILBOX-REFERRALS BINARY UNSELECT ESEARCH WITHIN SCAN SORT THREAD=REFERENCES THREAD=ORDEREDSUBJECT MULTIAPPEND] User UserID authenticated
- logout
* BYE mail_server_ip IMAP4rev1 server terminating connection
- OK LOGOUT completed
Connection closed by foreign host.


SMTP(25):


使用 UserID 和 UserPasswd 測試 (採用 echo -n UserID | base64 和 echo -n UserPasswd | base64 產生資料)
> telnet mail_server_ip 25
Trying mail_server_ip...
Connected to mail_server_ip.
Escape character is '^]'.
220 mail_server_ip ESMTP Postfix
HELO localhost.localdomain
250 mail_server_ip
AUTH LOGIN
334 VXNlcm5hbWU6
VXNlcklECg==
334 UGFzc3dvcmQ6
VXNlclBhc3N3b3JkCg==
535 5.7.8 Error: authentication failed: authentication failure
quit
221 2.0.0 Bye


加密連線:


> openssl s_client -connect mail_server_ip:port