linux ubuntu安裝 mono,在 Ubuntu Server 上安裝配置 Mono 生產環境

在 Ubuntu Server 上安裝配置 Mono 生產環境

在 Ubuntu Server 上安裝和配置 Apache2 + Mono 生產環境的記錄。 服務器環境是 Ubuntu Server 13.04 虛擬機模式 (Virtual Machine Mode), 安裝的 Mono 的版本是 3.2.1 , 最終環境如下圖所示:

f4df05a2f026dc200032159a74335a9a.png

準備編譯環境

還是老話題, 先準備 GCC 編譯環境, 這樣才可以從源代碼編譯安裝所需要的軟件。 首先需要安裝的是基本的編譯工具, 只要輸入下面的命令即可:

sudo apt-get install g++ gettext autoconf

接下來輸入用戶名和密碼, 就可以自動安裝必須的命令行編譯工具了。

從源代碼編譯安裝 libgdiplus

對于服務器來說, 主要運行 Apache、 ASP.Net、 Mvc 以及 WCF 等服務端程序, 一般不會運行圖形界面, 因為圖形界面會消耗額外的內存和處理器資源, 所以說 libgdiplus 不是必須安裝的, 不過一個常見的場景是需要在服務端動態生成圖片, 也會用到 libgdiplus , 因此 libgdiplus 還是推薦安裝的。 如果服務器上不需要生成圖片, 則可以不用安裝 libgdiplus 。

先安裝編譯 libgdiplus 所需的依賴項, 輸入下面的命令:

sudo apt-get install libglib2.0-dev libpng12-dev libexif-dev libx11-dev libfreetype6-dev libfontconfig1-dev libjpeg62-dev libgif-dev libxrender-dev

下載 libgdiplus 最新版的源代碼:

wget https://download.mono-project.com/sources/libgdiplus/libgdiplus-2.10.9.tar.bz2

下載完成之后解壓, 并且換到源代碼的目錄:

tar -jxvf libgdiplus-2.10.9.tar.bz2

cd libgdiplus-2.10.9

配置并檢查 libgdiplus 的編譯選項:

./configure

這是最關鍵的步驟, 如果 configure 命令中途出錯, 則一般是缺少了某個依賴的庫, 只要根據提示安裝相應的依賴庫就可以了, configure 命令運行結果如果如下圖所示, 則表示可以進行下一步了:

44c9f6d52acbe1a298d93190eef4963a.png

上圖中的配置結果不支持 tiff , 因為在服務端動態生成 tiff 圖片的需求很小, 所以這個 tiff 可以直接忽略了, 如果需要生成 tiff, 只要安裝 libtiff-dev 再次執行 configure 命令即可。

接下來接著輸入下面的命令就可以編譯并安裝 libgdiplus 了:

make

sudo make install

常見問題:

如果在 make 的過程中出現類似如下錯誤:

Making all in pixman

make[4]: Entering directory `/usr/local/src/libgdiplus-2.10.9/pixman/pixman'

source='pixman-access.c' object='pixman-access.lo' libtool=yes \

DEPDIR=.deps depmode=none /bin/sh ../depcomp \

/bin/sh ../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -Wall -fvisibility=hidden -c -o pixman-access.lo pixman-access.c

../libtool: line 852: X--tag=CC: command not found

../libtool: line 885: libtool: ignoring unknown tag : command not found

../libtool: line 852: X--mode=compile: command not found

../libtool: line 1018: *** Warning: inferring the mode of operation is deprecated.: command not found

../libtool: line 1019: *** Future versions of Libtool will require --mode=MODE be specified.: command not found

../libtool: line 1162: Xgcc: command not found

../libtool: line 1162: X-DHAVE_CONFIG_H: command not found

../libtool: line 1162: X-I.: command not found

../libtool: line 1162: X-I..: command not found

../libtool: line 1162: X-g: command not found

../libtool: line 1162: X-O2: command not found

../libtool: line 1162: X-Wall: command not found

../libtool: line 1162: X-fvisibility=hidden: command not found

../libtool: line 1162: X-c: command not found

../libtool: line 1214: Xpixman-access.lo: command not found

../libtool: line 1219: libtool: compile: cannot determine name of library object from `': command not found

make[4]: *** [pixman-access.lo] Error 1

make[4]: Leaving directory `/usr/local/src/libgdiplus-2.10.9/pixman/pixman'

make[3]: *** [all-recursive] Error 1

make[3]: Leaving directory `/usr/local/src/libgdiplus-2.10.9/pixman'

make[2]: *** [all] Error 2

解決方法是輸入下面的命令, 然后再繼續執行 make 命令:

export echo=echo

如果出現類似這樣的錯誤:

/usr/lib64/libglib-2.0.so.0: could not read symbols: Invalid operation

collect2: error: ld returned 1 exit status

make[2]: *** [testgdi] Error 1

make[2]: Leaving directory `/usr/local/src/libgdiplus-2.10.9/tests'

make[1]: *** [all-recursive] Error 1

make[1]: Leaving directory `/usr/local/src/libgdiplus-2.10.9'

make: *** [all] Error 2

解決方法是:

先執行 ./configure 命令, 然后編輯 test/Makefile 文件;

將 130 行的 LIBS = -lpthread -lfontconfig 改為 ` LIBS = -lpthread -lfontconfig -lglib-2.0 -lX11`;

再次執行 make 命令即可。

最終, 在 make 命令執行成功之后, 在繼續執行 sudo make install 命令進行安裝。

從源代碼編譯安裝 mono 、 xsp

安裝好了 libgdiplus 之后, 接下來的 mono 和 xsp 就是一路順風了, 只要簡單的敲幾行命令就可以了:

wget https://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

make

sudo make install

wget https://download.mono-project.com/sources/xsp/xsp-2.10.2.tar.bz2

tar -jxvf xsp-2.10.2.tar.bz2

cd xsp-2.10.2.tar.bz2

make

sudo make install

執行上面的命令, 一般都不會出現什么錯誤了。 現在可以測試一下安裝的 mono 和 xsp , 在終端輸入:

mono --version

可以得到如下圖的提示:

353759c5e384c66fc78c9cf80b841348.png

編譯安裝 xsp 之后, 會在 /usr/local/lib/xsp/test 目錄下生成一個 .net 測試網站, 我們可以用這個測試站點來測試 mono + xsp 的安裝, 輸入下面的命令:

cd /usr/local/lib/xsp/test

ls

xsp

可以看到的命令行輸出如下:

52f7197da07a5b0e5a735d2e538df8cc.png

打開瀏覽器, 訪問服務器的 8080 端口, 可以看到的如下的畫面, 說明 mono + xsp 已經安裝成功了。

37f7cccad13b8e858209f56f8631f950.png

安裝 apache2 和 apache2-dev

前面已經安裝好了 mono + xsp , 用來測試應用的話足夠了, 但是不能做為服務器生產環境使用, 因此還需要繼續安裝 apache http server , 并將 mono 做為 apache 的模塊掛載上去。 Apache http server 我們選擇從 Ubuntu Server 的軟件倉庫中安裝, 只要輸入下面的命令即可:

sudo apt-get install apache2 apache2-prefork-dev apache2-threaded-dev

第一個軟件包是 Apache Http 服務器, 另外兩個是 Apache 的開發包, 接下來要安裝的 mod_mono 依賴這兩個開發包, 因此一并安裝。

從源代碼編譯安裝 mod_mono

現在, 安裝 mod_mono 也是非常簡單的:

wget https://origin-download.mono-project.com/sources/mod_mono/mod_mono-2.10.tar.bz2

tar -jxvf mod_mono-2.10.tar.bz2

cd mod_mono-2.10

./configure

make

sudo make install

這個一般也不會出現什么錯誤, 基本上都能正確安裝。

配置 apache2 和 mod_mono

現在, 可以說萬事具備, 只欠東風, 只要將 mod_mono 配置并加載到 apache 中就可以了, apache 在 Ubuntu Server 上的配置目錄是 /etc/apache2 , 在編譯安裝 mod_mono 的時候, 已經將 mod_mono.conf 復制到這個目錄了, 我們只要修改 apache2 的配置, 引用這個文件即可, /etc/apache2 的目錄結構如下:

5c8bd4a95c05fd7f66b4af4392ec61e5.png

通過查看 /etc/apache2/apache2.conf 文件可以知道各個目錄的含義, 只要在 /etc/apache2/mods_enabled 目錄新建一個鏈接文件, 指向 /etc/apache2/mod_mono.conf 即可加載 mod_mono , 切換到 /etc/apache2/mods-enabled 目錄, 輸入下面的命令添加鏈接:

cd /etc/apache2/mod-enabled

sudo ln -s ../mod_mono.conf ./mod_mono.conf

現在輸入 ls -l /etc/apache2/mods-enabled/mod_*.conf , 輸出如下所示:

ls -l /etc/apache2/mods-enabled/mod_*.conf

lrwxrwxrwx 1 root root 16 Sep 6 13:34 mod_mono.conf -> ../mod_mono.conf

看到有 mod_mono.conf -> ../mod_mono.conf 的輸出提示, 說明鏈接鏈接已經做好了, 重啟 Apache 服務就會加載 mod_mono 。

有興趣的可以輸入命令 more /etc/apache2/mod_mono.conf 查看一下這個文件的內容, 看是不是很熟悉的 aspx 、 asmx 、 ashx 等都出現了。

現在在默認站點下添加一個名為 MonoTest 的測試程序, 需要編輯 /etc/apache2/sites-available/default 文件, 在文件的最后, CustomLog 指令之前, 插入下面的配置:

Alias /MonoTest "/usr/local/lib/xsp/test"

MonoServerPath MonoTest "/usr/bin/mod-mono-server2"

MonoDebug MonoTest true

MonoSetEnv MonoTest MONO_IOMAP=all

MonoApplications MonoTest "/MonoTest:/usr/local/lib/xsp/test"

Allow from all

Order allow,deny

MonoSetServerAlias MonoTest

SetHandler mono

SetOutputFilter DEFLATE

SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-gzip dont-vary

AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript

保存并關閉這個文件, 然后輸入下面的命令重啟 Apache2 服務:

sudo service apache2 restart

然后再次打開瀏覽器, 輸入地址: https://server-name-or-address/MonoTest , 看到類似下面的畫面就大功告成了:

fb2579f92b16855c6d098a684e4c463c.png

當然, 一切只是個開始, 接下來將繼續測試 ASP.Net MVC 、 EntityFramework 、 NHibernate 等常用組件在 Mono 上的表現。

參考資料

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/530100.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530100.shtml
英文地址,請注明出處:http://en.pswp.cn/news/530100.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c語言程序設計算機基礎知識,2018春C語言程序設計(合肥工業大學)

大家好!歡迎你們!無論是新同學還是老朋友,都非常高興能在這里和大家相聚!我們一如既往還說C,因為它稱霸于計算機語言,超乎我們的想象。如果想深刻的理解這個時代,就要理解計算機編程! 編程完成了…

linux 修改ldap密碼,centos – ldap強制用戶更改密碼

我正在使用CentOS-ds(基于Redhat-DS和389目錄服務器).我有LDAP設置,并努力驗證用戶(和Sudo,這是一個方便的功能!).甚至passwd也很好地改變了存儲在Ldap中的密碼.但是,我有一個小問題.登錄服務器后,如何強制所有用戶帳戶創建新密碼?我會這樣做的正常方式&…

c語言之函數存儲屬性,C語言:鏈接屬性與存儲類型

一、 鏈接屬性C語言中鏈接屬性決定如何處理在不同文件中出現的標示符。標示符的作用域與它的鏈接屬性有關,但這兩個屬性并不相同。鏈接屬性有3種: external(外部),internal(內部) 和 none(無)。1. none: 沒有鏈接的標示符,總是被當…

c語言 malloc 源碼詳解,dlmalloc源碼剖析之:mALLOc

/*如果你使用linux, douglea malloc已經默認作為glibc的malloc,新的版本可能用的是ptmalloc(dlmalloc的多線程版本)如果你用的bsd4.2及以前系統libc用的kingsley的malloc;BSD(包括freebsd,netbsd,openbsd)4.2以后版本libc用的是PHKmalloc;如果你用的windows系統用的是microsoft…

數數C語言,(舊)子數涵數·C語言——讓C幫你做計算

之前,我們學過了我們的第一個C程序——hello World。現在開始進一步學習,想一想如何讓C幫你做計算。我們先來看代碼(我沒有新建,還是用之前的hello world.cpp):好,因為之前在hello World的時候就已經學過了C的基本框架…

求10 翻譯c語言,求助:誰能幫我翻譯下最基礎的C語言,我是新手,謝謝了!

main(){int i,j,p,q,s,n,a[11]{127,3,6,28,54,68,87,105,162,18};/*定義i,j,q,p,s,n和a[11]&#xff0c;并對a數組賦值*/for(i0;i<10;i){pi;qa[i];/* 用p存儲i的數值&#xff0c;也就是記住數組的下標。用q記錄a[i]的數值&#xff0c;用作比較 */for(ji1;j<10;j)if(qif(p…

c語言之優先級 結合性與自增運算,C語言之優先級、結合性與自增運算

優先級、結合性這些概念在初學的時候并沒有放在心上&#xff0c;今天又碰到這個問題&#xff0c;查了不少資料&#xff0c;再次做個總結。在標準C語言的文檔里&#xff0c;對操作符的結合性并沒有做出非常清楚的解釋。一個滿分的回答是&#xff1a;它是仲裁者&#xff0c;在幾個…

android設置輸入框輸入字符限制,Android EditText限制輸入字符的方法總結

Android EditText限制輸入字符的方法總結最近項目要求限制密碼輸入的字符類型&#xff0c; 例如不能輸入中文。 現在總結一下EditText的各種實現方式&#xff0c; 以比較各種方法的優劣。第一種方式&#xff1a; 設置EditText的inputType屬性&#xff0c;可以通過xml或者Ja…

android動態改變菜單欄,Android動態設置主題(使用RxBus模式)

之前寫過一篇文章&#xff1a;RxBus的實現及簡單使用。今天我們嘗試使用RxBus動態切換主題。一、定義主題顏色color.xml#F44336#D32F2F#F44336#E91E63#C2185B#E91E63#795548#5D4037#795548#2196F3#1976D2#2196F3#607D8B#455A64#607D8B#FFEB3B#FBC02D#FFEB3B#673AB7#512DA8#673A…

android 圖片分析,Android圖片處理實例分析

本文實例講述了Android圖片處理的方法。分享給大家供大家參考&#xff0c;具體如下&#xff1a;package cn.szbw.util;import Android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.…

android開發按鈕顏色,Android編程實現簡單設置按鈕顏色的方法

本文實例講述了Android編程實現簡單設置按鈕顏色的方法。分享給大家供大家參考&#xff0c;具體如下&#xff1a;1.工程目錄a.在res目錄-新建drawble文件夾放入自定義圖片2.main.xmlandroid:orientation"vertical"android:layout_width"fill_parent"androi…

艾默生變頻器ev1000故障代碼_國產變頻器型號大全,梳理國產變頻的前世今生!...

在工控領域&#xff0c;變頻器已經廣為所知且應用范圍廣泛&#xff0c;各方對變頻器能給出形形色色的描述。維基百科給出的定義&#xff1a;“變頻器(variable frequency drive&#xff0c;常見縮寫VFD)&#xff0c;也稱為變頻驅動器或驅動控制器。變頻器是可調速驅動系統的一種…

android音樂播放器案例,Android MediaPlayer實現音樂播放器實例代碼

Android MediaPlayer實現音樂播放器1、布局文件android:layout_width"fill_parent"android:layout_height"fill_parent"android:orientation"vertical" >android:id"id/hint"android:layout_width"wrap_content"android:…

單邊指數信號的特點_今日股市分析:上證指數若能守住3400,蓄力反彈就有戲...

昨日整體概況上漲&#xff1a;848只 下跌&#xff1a;3009只漲停&#xff1a;69只 跌停&#xff1a;12只昨天的上證指數低開低走&#xff0c;午后沖紅又回落&#xff0c;另一邊的創業板卻是單邊下行跌超3%&#xff0c;板塊方向農業、洪水概念股、還有電力板塊較強。按照昨日置頂…

萬豐科技機器人排名_機器人系統集成“7宗最”

摘要&#xff1a;對于眾多集成商而言&#xff0c;作為典型的“夾心餅奧利奧”&#xff0c;面對客戶的各種要求&#xff0c;“不敢勉強你&#xff0c;只好為難自己”系真實寫照。1、企業數量最多GGII統計數據顯示&#xff0c;截至2019年年底&#xff0c;中國工業機器人產業企業數…

android 電池高溫關機,Android 關機問題分析指南

本篇文章主要介紹 Android 開發中的 關機 部分知識點&#xff0c;通過閱讀本篇文章&#xff0c;您將收獲以下內容:1 . 確認是亮屏關機還是滅屏關機&#xff1f;關機時是否有播放關機動畫&#xff1f;2 . 是直接關機還是關機后會自動重啟&#xff1f;3.異常關機時&#xff0c;連…

android switch 未定義,在switch語句中初始化時未定義的變量?

問題本身就是一個明顯的答案.無論如何,這是我的代碼片段......switch(cSet)...case 8:{ //Special CharactersfinalSet special;char* charSet new char[special.size() 1];charSet[special.size()] 0; //Append null terminatormemcpy(charSet, special.c_str(), special.…

android 克隆對象,克隆會破壞單例對象嗎?

假設有這樣一個場景&#xff0c;如果復制的目標對象恰好是單例對象&#xff0c;那會不會破壞單例對象呢&#xff1f;當然&#xff0c;我們在已知的情況下肯定不會這么干&#xff0c;但如果發生了意外怎么辦&#xff1f;不防來修改一下代碼。public class ConcretePrototype imp…

轉網口顯示未識別的網絡_已有1700萬用戶攜號轉網 超99%用戶1小時內辦結

攜號轉網是利國利民的大舉措&#xff0c;受到了很多電信用戶的擁護和支持。12月15日&#xff0c;工信部副部長劉烈宏在某會議上進行報告指出&#xff0c;目前我國 “攜號轉網”服務已經累計有 1700 萬用戶完成攜轉&#xff0c;一小時攜轉成功辦結率超過 99%。已有1700萬用戶攜號…

adb 更新 android sdk,[轉載]安裝Android時SDK?AVD?MANAGER時更新報錯的解決辦法

最近安裝Android SDK時&#xff0c;發現更新時出現“A folder failed to be renamed ormoved.”等類似錯誤。經過測試和G后發現解決辦法目前有兩種情況&#xff1a;1、確實是因為打開了相關目錄或者其他程序占用率文件夾句柄。關閉相關資源管理器或者關閉相關程序即可&#xff…