Картинка блога

Из за большого количества нововведений в Mono 2.6 от Mono 2.4
(в том числе и необходимых для работы моих приложений) я решил установить его и на моем выделенном сервере. Эта статья является продолжением Установка Mono на Dreamhost, так что советую начать именно с нее.
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

Метки:, ,

14 комментариев в “Сборка Mono 2.6.1 из исходного кода”

  1. Полезная вещь, такие исходники.

  2. Спс! Скачала, буду устанавливать.

  3. Пригодится и мне такая вещь.

  4. Конечно пригодится, это однозначно! Спс автору!

  5. Огромное спасибо автору за статью,очень полезна.

  6. Спасибо автору за труды!

  7. Тоже скачал, думаю пригодится!

  8. А ведь действительно хороший скрипт. =)

  9. соглашусь полезно

  10. Интересная работа

  11. Очень интересная сборка очень понравилась

  12. Большое спасибо за полезный скрипт! Немного подточил и собрал с его помощью mono 2.8.1 в Debian.

Trackbacks/Pingbacks

  1. Mono 2.6.1 и VirtualBox
  2. Компиляция Mono 2.10.2 с исходного кода