備注:,將我的博客內容整理成冊,首先會在博客里優先發布,后續可能的話整理成電子書,主要從linux的最基礎內容開始進入Linux的Mono開發方面的話題。本文是我整理博客內容的一篇文章。
LJMA 是Linux+Jexus+MariaDB+ASP.NET的簡寫,其實就是把Jexus, MariaDB以及ASP.NET安裝在Linux系統上,組成一個環境來運行ASP.NET的應用。Jexus是Linux下的基于Mono編寫的WEB服務軟件,而MariaDB是比較小型的數據庫軟件,ASP.NET是由微軟在.NET Framework框架中所提供,開發Web應用程序的類庫,通過Mono我們可以讓他在Linux下運行。
Jexus相比其它Linux系統的WEB服務器的優勢
一、Jexus直接支持跨平臺的ASP.NET網站和PHP網站,中間無需第三方插件。
二、Jexus在靜態文件處理方面同樣擁有非常優秀的性能。
三、Jexus專們針對應用服務器的需求進行了優化,具有超強的穩定性和不間斷運行能力,其穩健度,絕不亞于其它任何WEB服務器。
四、Jexus擁有最基礎而關鍵的入侵檢測能力,這是所有其它WEB服務器所不具備的。
安裝Mono 環境
Mono是一個由Novell公司(由Ximian發起,并由Miguel de lcaza領導的,一個致力于開創.NET在Linux上使用的開源工程。它包含了一個C#語言的編譯器, 一個CLR的運行時,和一組類庫,并實現了 ADO NET和ASP NET。能夠使得開發人員在Linux用C#開發程序。)主持的項目.該項目的目標是創建一系列符合標準ECMA (Ecma-334和Ecma-335)的.Net 工具, 包括C #編譯器和共同語言(CL 即 Common Language)執行平臺(Platform).與微軟的.Net不同, Mono項目不僅可以運行于Windows系統內,還可以運行于Linux, FreeBSD, Unix, Mac OS X和Solaris。
1、系統,安裝編譯環境,為編譯Mono源碼做準備。
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 支持System.Drawing
cd /usr/local/src/
wget http://download.mono-project.com/sources/libgdiplus/libgdiplus-2.10.tar.bz2
tar -jxvf libgdiplus-2.10.tar.bz2
cd libgdiplus-2.10
./configure --prefix=/usr
make
make install
4、源碼安裝Mono 3.2.3
cd /usr/local/src/
wget http://download.mono-project.com/sources/mono/mono-3.2.3.tar.bz2
tar -jxvf mono-3.2.3.tar.bz2
cd mono-3.2.3
./configure --prefix=/usr
make
make install
輸入 mono -V 如有mono版本信息,則安裝成功.
[azureuser@mono mono-3.2.3]$ mono -V
Mono JIT compiler version 3.2.3 (tarball Sat Sep 21 03:52:16 UTC 2013)
Copyright (C) 2002-2012 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
TLS: __thread
SIGSEGV: altstack
Notifications: epoll
Architecture: amd64
Disabled: none
Misc: softdebug
LLVM: supported, not enabled.
GC: sgen
如果是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
建議大家在安裝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才行呢。
安裝Jexus
Jexus Web Server for nux 是一款基于.NET兼容環境,運行于Linux/unix操作系統之上,以支持ASP.NET為核心功能的高性能WEB服務器,用于替換Apache+mod_mono、Nginx+FastCgi 方案運行ASP.NET。Jexus不但具有跨平臺ASP.NET服務器這樣的標志性特征,同時還擁有內核級的安全監控、入侵檢測、URL重寫、無文件路由等一系列重要功能和專有特性,將在第十九章詳細介紹Jexus。
從5.3.1版本開始,Jexus的安裝過程簡化了,內置了兩個新的腳本,它們分別是“install”和“upgrade”,對應原來的“安裝”和“升級”,將Jexus的安裝過程自動化了。jexus本身的安裝和升級方式并沒有發生更多的變化,因此對于已經習慣于5.3.1之前版本的使用方式的用戶,你們仍然可以采用之前的安裝方式。
cd /usr/local/src/
wget http://linuxdot.net/down/jexus-5.4.3.tar.gz
tar -zvxf jexus-5.4.3.tar.gz
cd jexus-5.4.3
sudo ./install
安裝完成~!!!在執行install腳本時,jexus默認是安裝到/usr/jexus/中,如果想安裝到其他目錄,可以在執行該腳本時增加一個目錄的參數(比如 sudu install /usr/local/jexus/)。對于升級就是執行upgrade腳本。
啟動jexus 檢查是否正常了
cd /usr/jexus
sudo ./jws start
[azureuser@mono jexus-5.4.3]$ cd /usr/jexus/
[azureuser@mono jexus]$ sudo ./jws start
Start ... OK
[azureuser@mono jexus]$ cat log/jws.log
09-21 06:07:56: * Jexus web server start-up success.
看到了Jexus已經成功啟動的日志,我們還可以通過瀏覽器來檢查下:http://127.0.0.1/info
安裝MariaDB
MariaDB是一個向后兼容、替代MySQL的數據庫服務器。MariaDB 是一個采用 Maria 存儲引擎的 MySQL 分支版本,是由原來 MySQL 的作者 Michael Widenius 創辦的公司所開發的免費開源的數據庫服務器。
從源碼包安裝MariaDB,它的編譯需要很長的時間,推薦通過CentOS的yum方式安裝。
1、在 /etc/yum.repos.d/ 下建立 MariaDB.repo,內容如下:
[azureuser@mono etc]$ cd /etc/yum.repos.d
[azureuser@mono yum.repos.d]$ vi MariaDB.repo
# MariaDB 10.0 CentOS repository list - created 2013-08-23 13:08 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
如果是其他的操作系統,可以在這里找到相關信息。
2、使用YUM安裝MariaDB
[azureuser@mono yum.repos.d]$ sudo yum -y install MariaDB-client MariaDB-server MariaDB-devel
3、啟動數據庫
[azureuser@mono yum.repos.d]$ sudo service mysql start
如果啟動不了,請到 /data/mysql/ 下查看錯誤日志,這個日志通常是主機名.err。
4、修改Root的密碼
[azureuser@mono yum.repos.d]$ mysqladmin -u root password ‘passwd’
5、配置遠程訪問,MariaDB為了安全起見,默認情況下綁定ip( 127.0.0.1)。
[azureuser@mono yum.repos.d]$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 10.0.4-MariaDB MariaDB Server
Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY ‘passwd’ WITH GRANT OPTION;
MariaDB [(none)]> flush privileges;
第一句中"%"表示任何主機都可以遠程登錄到該服務器上訪問。如果要限制只有某臺機器可以訪問,將其換成相應的IP即可,如:
GRANT ALL PRIVILEGES ON *.* TO root@"172.168.193.25" IDENTIFIED BY "root";
第二句表示從mysql數據庫的grant表中重新加載權限數據。因為MySQL把權限都放在了cache中,所以在做完更改后需要重新加載。
6、如果系統的防火墻開著(or behind a hardware firewall or NAT)你必須放開mysql使用的TCP端口,通常都是3306。
7、大小寫敏感
用root帳號登錄后,在/etc/my.cnf 中的[mysqld]后添加添加lower_case_table_names=1,重啟MYSQL服務,這時已設置成功:不區分表名的大小寫;
lower_case_table_names參數詳解:
lower_case_table_names = 0
其中 0:區分大小寫,1:不區分大小寫
測試LJMA是否成功
放一個網站上去測試下,我這里放個小泥鰍的Mono兼容代碼版本上去,可以從這里獲取https://github.com/geffzhang/LoachsMono,使用Visual Studio編譯后放到jexus的 default站點所對應的目錄/var/www/default
LJMA環境是搭建好了,這其實僅僅是安裝上了軟件而已,而具體的配置還是有很多工作要做的呢?也就是說,您雖然搭建出來了環境,但是如果不會配置細節的東西,相當于沒有任何工作經驗,所以還是多配置Jexus或者ASP.NET。
文章列表