1. 程式人生 > >CentOS 6.3下 安裝 Mono 3.2 和Jexus 5.4

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有什麼區別呢:

  1. 速度方面: 對於ASP.NET網頁,大壓力訪問時Jexus處理速度更快; 對於靜態檔案,Jexus遠快於XSP,而且對磁碟的要求和影響小N倍;
  2. 功能方面:   XSP是以ASP.NET測試工作開發的,功能單調,而Jexus是作為生產環境使用的真實的WEB服務開發的,功能全面,因此,xsp與Jexus在功能上可比性
  3. 穩定性方面: Jexus有良好的容錯和自動糾錯能力,可以長期不間斷執行,而XSP是單程序程式,沒有任何自動糾錯機制,無法保持不間斷執行。
  4. 安全性方面: Jexus有關鍵的入侵檢測功能,XSP沒有任何安全檢測功能,沒有可比性;
  5. 多站點支援: XSP支援一站,Jexus支援任意多網站。

Jexus for linux 有如下特點:

  1. 支援多種作業系統:Jexus最初的設計目標是“跨平臺的ASP.NET WEB伺服器”,由於在Windows系統上,IIS已經是ASP.NET的優秀平臺,所以,當前的Jexus以支援Linux和FreeBSD等非Windows系統為主要設計目標。正因為這個原因,就Linux/FreeBSD等平臺的ASP.NET建設而言,Jexus具有特別重大的意義。
  2. 高效能:“高效能”是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伺服器的處理能力和傳輸速度。
  3. 安全性:Jexus核心含有安全監控機制,絕大多數惡意訪問在進入網站前就會被Jexus直接禁止,這是Jexus有別於其它WEB伺服器的又一大特色,所以,Jexus特別適合那些對安全要求較高的企業網站或政府網站使用。
  4. 穩定性:從執行機制而言,Jexus系統中,有專門檢測工作程序執行狀態的管理單元,任何一個程序退出或者任何一個ASP.NET網站應用程式域退出,被會被管理單元發現並得到重啟,從而保證了Jexus能夠7*24小時不間斷工作;從程式本身而言,Jexus程式程式碼力求簡潔,BUG很少,同時,Jexus的每個版本在正式釋出之前,都要經過嚴格的壓力測試,影響穩定性的因素,幾乎在正式釋出之前即已被全部排除。
  5. 功能強大:Jexus支援URL重寫,支援多目標伺服器的反向代理,支援PHP,支援GZIP壓縮傳輸,並且,可以利用不同埠、不同虛擬路徑、不同域名設定任意數量的網站,這些功能要素,表明了Jexus是一款功能完整而強勁的WEB伺服器。
  6. 安裝、配置、操作極為簡單,服務社群化,各種問題能得到快速的處理,有良好的後續服務支撐能力。

本文是在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命令就可以看下下面的結果表示安裝成功:

image

三、安裝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

image

image

image