- Хроники. - -

Сборка Mono 2.6.1 из исходного кода

Posted By Ikutsin On 17 января 2010 @ 14:53 In .NET C#,Управление и разработка | Comments Disabled

[1]Из за большого количества нововведений в Mono 2.6 от Mono 2.4
(в том числе и необходимых для работы моих приложений) я решил установить его и на моем выделенном сервере. Эта статья является продолжением Установка Mono на Dreamhost [2], так что советую начать именно с нее.
Mono 2.6.1 работает и со старыми зависимостями от Mono 2.4, так что можнл было просто замиенить пути четырем последним пакетам в старом скрипте. Новый скрипт переписан в компактный вид, чтобы не искать названия библиотек по всему файлу. Удален nice, так как мне он не нужен.
Добавлен также простой лог в файл, чтобы понять на каком месте оборвался скрипт если это произошло. Теперь, скачивает, распаковывает и устанавливет каждый пакет одна функция. Из за специфики некоторых пакетов я использовал case для добавления спец. параметров и т.д.

После выполнения скрипта меняем PATH в своем .bash_profile на новый. Тоже самое делаем в FastCGI диспечерах.
Теперь наслаждаемся новой версией 🙂

А вот сам скрипт:

#!/bin/bash
##Find updates at /?s=mono

mono_ver="2.6.1"
current_dir=`pwd`
mono_dir="${HOME}/mono-${mono_ver}"
mono_src="${HOME}/_archive/src/mono-build-${mono_ver}"

log_file="${current_dir}/logg-${mono_ver}.txt"
echo -e "Starting mono install to $mono_dir" > $log_file

mkdir -p "${mono_dir}"
mkdir -p "${mono_dir}/etc"
mkdir -p "${mono_src}"

## Setup the source environment variables to ensure that any custom
## pkg-config libraries can be located and progressive compilations
## can use the C# compiler and other Mono tools
export DYLD_LIBRARY_PATH="${mono_dir}/lib:${DYLD_LIBRARY_PATH}"
export LD_LIBRARY_PATH="${mono_dir}/lib:${LD_LIBRARY_PATH}"
export LIBRARY_PATH="${mono_dir}/lib:${LIBRARY_PATH}"
export C_INCLUDE_PATH="${mono_dir}/include"
export CPLUS_INCLUDE_PATH="${mono_dir}/include"
export ACLOCAL_PATH="${mono_dir}/share/aclocal"
export PKG_CONFIG_PATH="${mono_dir}/lib/pkgconfig:${PKG_CONFIG_PATH}"
export PATH="${mono_dir}/bin:${PATH}"

function logg {
	echo -e "[`date`] $1" >> $log_file
	echo "-- $1"
}
##download extract install
function getLib {
	#spp=(${1//// })
	spp=`echo $1 | sed "s/.*\///"`
	name=${spp[${#spp[@]}-1]}
	##reslving folder names
	case $name in
		 jpegsrc.v7*) name_dir="jpeg-7" ;;
		 *) name_dir=`echo $name | sed "s/\.tar.*$//"` ;;
	esac	

	logg "$name: started"
	cd ${mono_src}
	##nice -n 19 (wget, tar, ./configure, make, amke install)
	wget -c "$1"
	if [ $? -ne 0 ]; then exit 1; fi
	logg "$name: downloaded"
	##resolve archive format
	case $name in
		 *bz2) tar -xjf "$name" ;;
		 *gz) tar -xzf "$name" ;;
	esac
	if [ $? -ne 0 ]; then exit 1; fi
	logg "$name: extracted"

	cd "${mono_src}/${name_dir}"
	if [ $? -ne 0 ]; then exit 1; fi
	logg "$name: entered archive"
	paramz=""
	##Additional params for dependencies
	case $name in
		libiconv*) paramz="--enable-extra-encodings";;
		zlib*) paramz="--shared";;
		bison*) paramz="--without-libintl-prefix";;
		libxml2*) paramz="--with-iconv=${mono_dir}" "--with-zlib=${mono_dir}";;
		libxslt*) paramz="--with-iconv=${mono_dir}";;
		glib*) paramz="--with-libiconv=gnu";;
		*) paramz="";;
	esac

	##install it
	./configure "--prefix=${mono_dir}" "$paramz"
	if [ $? -ne 0 ]; then exit 1; fi
	logg "$name: configured"
	make
	if [ $? -ne 0 ]; then exit 1; fi
	logg "$name: compiled"
	make install
	if [ $? -ne 0 ]; then exit 1; fi
	logg "$name: extracted"

	logg "$name: finished"
	cd ${current_dir}
	#read -p "PAUSED... Press any key or CTL-C"
}

libs=(
"http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz"
"http://ftp.gnu.org/pub/gnu/gettext/gettext-0.17.tar.gz"
"http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz" #again to recompile / recommended in install guide
"http://iweb.dl.sourceforge.net/project/libexif/libexif/0.6.18/libexif-0.6.18.tar.bz2"
"http://www.zlib.net/zlib-1.2.3.tar.gz"
"http://iweb.dl.sourceforge.net/project/libpng/00-libpng-stable/1.2.40/libpng-1.2.40.tar.gz"
"http://www.ijg.org/files/jpegsrc.v7.tar.gz"
"ftp://ftp.remotesensing.org/pub/libtiff/tiff-3.9.1.tar.gz"
"http://iweb.dl.sourceforge.net/project/giflib/giflib%204.x/giflib-4.1.6/giflib-4.1.6.tar.bz2"
"http://ftp.gnu.org/gnu/bison/bison-2.4.1.tar.bz2"
"http://xmlsoft.org/sources/libxml2-2.7.6.tar.gz"
"http://xmlsoft.org/sources/libxslt-1.1.26.tar.gz"
"http://ftp.gnome.org/pub/GNOME/sources/glib/2.22/glib-2.22.2.tar.bz2"
##here are the mono libs
##"http://ftp.novell.com/pub/mono/sources/libgdiplus/libgdiplus-2.4.2.tar.bz2"
"http://ftp.novell.com/pub/mono/sources/libgdiplus/libgdiplus-2.6.tar.bz2"
##"http://ftp.novell.com/pub/mono/sources/mono/mono-2.4.2.3.tar.bz2"
"http://ftp.novell.com/pub/mono/sources/mono/mono-2.6.1.tar.bz2"
##"http://ftp.novell.com/pub/mono/sources/xsp/xsp-2.4.2.tar.bz2"
"http://ftp.novell.com/pub/mono/sources/xsp/xsp-2.6.tar.bz2"
##I don't want it
##"http://ftp.novell.com/pub/mono/sources/mono-basic/mono-basic-2.4.2.tar.bz2"
##"http://ftp.novell.com/pub/mono/sources/mono-basic/mono-basic-2.6.tar.bz2"
)

for ix in ${!libs[*]}
do
	getLib ${libs[$ix]}
done

Article printed from Хроники.:

URL to article: /1202-sborka-mono-2-6-1-iz-isxodnogo-koda

URLs in this post:

[1] Image: /wp-content/uploads/2010/01/mono_logo.png

[2] Установка Mono на Dreamhost: /1078-ustanovka-mono-na-dreamhost-ili-drugoj-vydelennyj-server

Copyright © 2008 Все, что меня окружает. All rights reserved.