文章出處

備注:,將我的博客內容整理成冊,首先會在博客里優先發布,后續可能的話整理成電子書,主要從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

image

LJMA環境是搭建好了,這其實僅僅是安裝上了軟件而已,而具體的配置還是有很多工作要做的呢?也就是說,您雖然搭建出來了環境,但是如果不會配置細節的東西,相當于沒有任何工作經驗,所以還是多配置Jexus或者ASP.NET。

一鍵安裝腳本 https://github.com/cjy37/linux-asp.net-installScript


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()