CentOS 6.3下 安裝 Mono 3.2 和Jexus 5.4
CentOS是一個基於RHEL的Linux發行版,其目的是為了提供一套免費與自由的企業等級Linux發行版。CentOS的名稱來自於「Community ENTerprise Operating System」,從名稱便可以知道這是一套由社群主導、並以企業級使用者為主要目標的作業系統。
目前CentOS是網頁伺服器用途的主機中最廣為使用的一套Linux發行版。根據統計,目前大約有30%的Linux伺服器使用CentOS。許多書籍、網站在介紹Linux的操作方式時,也會援引CentOS作為操作介面。通常CentOS都會在RHEL推出新版本之後,經過一小段時間的修改與測試之後再推出新的版本,而其版本編號大多也會跟隨RHEL的版本編號,例如目前最新版本的CentOS 6,其相對應的RHEL版本便是RHEL 6。
Jexus web server for linux 是一款基於.NET相容環境,運行於Linux/unix作業系統之上,以支援ASP.NET為核心功能的高效能WEB伺服器,用於替換Apache+mod_mono、Nginx+FastCgi 方案執行ASP.NET。Jexus不但具有跨平臺ASP.NET伺服器這樣的標誌性特徵,同時還擁有核心級的安全監控、入侵檢測、URL重寫、無檔案路由等一系列重要功能和專有特性。
Mono Xsp 和Jexus有什麼區別呢:
- 速度方面: 對於ASP.NET網頁,大壓力訪問時Jexus處理速度更快; 對於靜態檔案,Jexus遠快於XSP,而且對磁碟的要求和影響小N倍;
- 功能方面: XSP是以ASP.NET測試工作開發的,功能單調,而Jexus是作為生產環境使用的真實的WEB服務開發的,功能全面,因此,xsp與Jexus在功能上可比性
- 穩定性方面: Jexus有良好的容錯和自動糾錯能力,可以長期不間斷執行,而XSP是單程序程式,沒有任何自動糾錯機制,無法保持不間斷執行。
- 安全性方面: Jexus有關鍵的入侵檢測功能,XSP沒有任何安全檢測功能,沒有可比性;
- 多站點支援: XSP支援一站,Jexus支援任意多網站。
Jexus for linux 有如下特點:
- 支援多種作業系統:Jexus最初的設計目標是“跨平臺的ASP.NET WEB伺服器”,由於在Windows系統上,IIS已經是ASP.NET的優秀平臺,所以,當前的Jexus以支援Linux和FreeBSD等非Windows系統為主要設計目標。正因為這個原因,就Linux/FreeBSD等平臺的ASP.NET建設而言,Jexus具有特別重大的意義。
- 高效能:“高效能”是Jexus的重要的設計目標。雖然Jexus基於Mono環境執行,但Jexus並非全部由Mono的.NET元件構成,對於涉及效能的關鍵程式碼,Jexus非常巧妙地大量採用了Linux/Unix本身的優秀特性,從程式碼層保證了Jexus的效能優勢。
同時,Jexus的框架特徵也為高效能提供了基礎保證。Jexus不象XSP那樣,純HTML也需要經過ASP.NET處理,更不象Apache和Nginx等伺服器,需要通過外掛的形式間接地對ASP.NET進行支援,Jexus把HMTL靜態檔案處理模組、ASP.NET處理模組、靜態檔案快取記憶體機制、epoll/poll資料傳輸機制等進行了高度整合,從架構本身入手,最大限度地提高WEB伺服器的處理能力和傳輸速度。 - 安全性:Jexus核心含有安全監控機制,絕大多數惡意訪問在進入網站前就會被Jexus直接禁止,這是Jexus有別於其它WEB伺服器的又一大特色,所以,Jexus特別適合那些對安全要求較高的企業網站或政府網站使用。
- 穩定性:從執行機制而言,Jexus系統中,有專門檢測工作程序執行狀態的管理單元,任何一個程序退出或者任何一個ASP.NET網站應用程式域退出,被會被管理單元發現並得到重啟,從而保證了Jexus能夠7*24小時不間斷工作;從程式本身而言,Jexus程式程式碼力求簡潔,BUG很少,同時,Jexus的每個版本在正式釋出之前,都要經過嚴格的壓力測試,影響穩定性的因素,幾乎在正式釋出之前即已被全部排除。
- 功能強大:Jexus支援URL重寫,支援多目標伺服器的反向代理,支援PHP,支援GZIP壓縮傳輸,並且,可以利用不同埠、不同虛擬路徑、不同域名設定任意數量的網站,這些功能要素,表明了Jexus是一款功能完整而強勁的WEB伺服器。
- 安裝、配置、操作極為簡單,服務社群化,各種問題能得到快速的處理,有良好的後續服務支撐能力。
本文是在Windows Azure雲平臺上 使用CentOS 6.3 + Mono 3.2 + Jexus 5.4 的安裝簡要教程:
一、更新系統,安裝編譯環境,為編譯Mono原始碼做準備。Mono 3.2的原始碼編譯要求系統中存在一個Mono 2.4以上的環境,所以我們按照《32和64位的CentOS 6.0下 安裝 Mono 2.10.8 和Jexus 5.0》這篇文章編譯安裝完成2.10.8 環境,下面我簡要列一下:
1、 更新系統
yum –y update
2、安裝Mono原始碼安裝需要的庫
yum -y install gcc gcc-c++ bison pkgconfig glib2-devel gettext make libpng-devel libjpeg-devel libtiff-devel libexif-devel giflib-devel libX11-devel freetype-devel fontconfig-devel cairo-devel
在執行yum 更新系統的時候就發生瞭如下錯誤:
--> Running transaction check ---> Package gc.x86_64 0:7.1-10.el6 will be installed ---> Package glibc-headers.x86_64 0:2.12-1.80.el6_3.5 will be installed --> Processing Dependency: kernel-headers >= 2.2.1 for package: glibc-headers-2. 12-1.80.el6_3.5.x86_64 --> Processing Dependency: kernel-headers for package: glibc-headers-2.12-1.80.e l6_3.5.x86_64 --> Finished Dependency Resolution Error: Package: glibc-headers-2.12-1.80.el6_3.5.x86_64 (updates) Requires: kernel-headers Error: Package: glibc-headers-2.12-1.80.el6_3.5.x86_64 (updates) Requires: kernel-headers >= 2.2.1 You could try using --skip-broken to work around the problem ** Found 1 pre-existing rpmdb problem(s), 'yum check' output follows: kernel-2.6.32-220.13.1.el6.x86_64 has missing requires of kernel-firmware >= ('0 ', '2.6.32', '220.13.1.el6')
解決方法:修改檔案vi /etc/yum.conf 將exclude=kernel*前加註釋即可解決,此引數的意思是排除安裝或更新kernel開頭的軟體,而我們安裝gcc需要依賴kernel相關的軟體glibc-headers-2.12-1.80.el6_3.5.x86_64 。
3、安裝Mono需要的GDI+相容API的庫Libgdiplus
cd /usr/local/src/
tar -jxvf libgdiplus-2.10.tar.bz2
cd libgdiplus-2.10
./configure --prefix=/usr
make
make install
4.1、原始碼安裝Mono
cd /usr/local/src/
wget http://download.mono-project.com/sources/mono/mono-3.2.1.tar.bz2
tar -jxvf mono-3.2.1.tar.bz2
./configure --prefix=/usr
make
make install
輸入 mono -V 如有mono版本資訊,則安裝成功.
4.2、Git安裝 mono
cd /usr/local/src/
tar -jxvf mono-2.10.8.tar.bz2
cd mono-2.10.8
./configure --prefix=/usr
make
make install
輸入 mono -V 如有mono版本資訊,則安裝成功.
如果是64位版本的CentOS,在後續安裝好Jexus 5,啟動的時候會發生以下錯誤:
Sender: jws.exe, Sender TypeName: AppDomain
Exception Source: jws, TargetSite Name: A
Message is:
An exception was thrown by the type initializer for Mono.Unix.Native.Stdlib
StackTrace is:
at A.G.A (System.String[] A) [0x00000] in <filename unknown>:0
IsTerminating: True
建議你執行下命令ldconfig,建議大家在安裝mono後,都 ldconfig一下 。(ldconfig命令的用途,主要是在預設搜尋目錄(/lib和/usr/lib)以及動態庫配置檔案/etc/ld.so.conf內所列的目錄下,搜尋出可共享的動態連結庫(格式如前介紹,lib*.so*),進而創建出動態裝入程式(ld.so)所需的連線和快取檔案.快取檔案預設為/etc/ld.so.cache,此檔案儲存已排好序的動態連結庫名字列表. )
另外有一點也非常重要,要在編譯Mono的是指定安裝到/usr(./configure --prefix=/usr),如果安裝到一個系統根本"不瞭解"的資料夾,僅ldconfig都不行,還要在/etc/ld.so.conf檔案或/etc/ld.so.conf.d 中新增路徑後再 ldconfig才行呢。
二、原始碼編譯mono 升級到最新3.2 版本,我這裡用了Git方式安裝,從Mono的主幹上拉下來的程式碼編譯後是3.3版本:
安裝前把mono所需的依賴包安裝好:
yum –y install build-essential automake autoconf libtool bison libglib2.0-dev libfreetype6-dev libfontconfig-dev gettext libgif-dev libtiff4-dev libpng12-dev libexif-dev libx11-dev libxft-dev libjpeg-dev
git clone git://github.com/mono/mono.git
./autogen.sh --prefix=/usr [要注意目標資料夾,一定要指定同一個地方,強烈建議用 --prefix=/usr 引數]
make
編譯完後,進入安裝mono 2.10.8 的原始檔夾,以管理員身份執行 “make uninstall”。
cd /usr/local/src/mono-2.10.8
sudo make uninstall
然後進入mono-3.2.0 目錄
sudo make install
執行mono -V命令就可以看下下面的結果表示安裝成功:
三、安裝Jexus 5.4 :從5.3.1版本開始,Jexus的安裝過程簡化了,內建了兩個新的指令碼,它們分別是“install”和“upgrade”,對應原來的“安裝”和“升級”,將Jexus的安裝過程自動化了。jexus本身的安裝和升級方式並沒有發生更多的變化,因此對於已經習慣於5.3.1之前版本的使用方式的使用者,你們仍然可以採用之前的安裝方式。
cd jexus-5.4
sudo ./install
安裝完成~!!!在執行install指令碼時,jexus預設是安裝到/usr/jexus/中,如果想安裝到其他目錄,可以在執行該指令碼時增加一個目錄的引數(比如 sudu install /usr/local/jexus/)。對於升級就是執行upgrade指令碼。
啟動jexus 檢查是否正常了
cd /usr/jexus
sudo ./jws start