- Хроники. - http://usanov.net -

Компиляция Mono 2.10.2 с исходного кода

Posted By Ikutsin On 25 июня 2011 @ 13:25 In .NET C# | Comments Disabled

[1]Устал я ждать обновление Longterm версии, так-что решил обновится уже сейчас. Longterm версия сейчас 2.6.7 особо не отличается от описанной в моем предыдущем посте [2]. И для меня, как для человека, пишущего код на C# практически каждый день — морально устарела.

Чтобы сохранить Вам, дорогой читатель немного времени, выложил я также, обновленные скрипты. Сегодня речь пойдет о ручной установке Mono 2.10.2 на Debian. Точнее скрипт тестировался на debian, но ничего не мешает запустить его в другой Linux системе.

Для данной статьи я выбрал сборку с исходного кода по ряду причин:

  • лучше позволяет контролировать процесс установки
  • обычно устанавливается все в одно место
  • позволяет иметь несколько установленных версий
  • сложнее убить систему (и это проверенно автором 😉 )
  • подходит для установки на VPS — например DreamHost

Ладно, поехали…

Мне потребовался не один вечер, чтобы разобраться во всех зависимостях и поставить все библиотеки в одно локальное место, без надобности корневых привилегий. Самой проблемной частью оказался libGdiPlus. Вполне возможно, что даже с этим скриптом понадобится определенный «допил», редактирование конфигурационных файлов и перезапуск. К сожалению, без понимания того что делает скрип, при возникновении проблем будет не обойтись. По этому расскажу сначала о нем.

Скачать mono-install.sh [3]

Я попытался сохранить ссылки на решения возникающих проблем прямо в файле скрипта. Из конфигурации тут пожалуй только MONO_PREFIX. Остальной экспорт параметров зависит от него. Скрипт содержит две функции — одна для логирования (файл создается в текущей папке. За прогрессом можно следить с помощью команды tail). Вторая — getLib — его основное тело, взято из моей предыдущей статьи [2]. Я также разделил установку моно и графической библиотеки на два массива, это libs и libsGdiPlus.

Не думаю, что это хорошая идея просто запустить скрип и ждать результата. Во первых это определенно долгий процесс, во вторых при перезапуске, уже собранные библиотеки пере собирать уже не надо. В общем, процесс такой:

запускам скрипт, если упал, смотрим где по логам, все что было собрано комментируем в списках, решаем проблему, пере запускаем скрипт.

Установка lib

Эта часть отличается от предыдущего скрипта только обновлением версий. С этой частью проблем нигде не возникало. Но возможно, в целях экономии ресурсов, некоторые библиотеки стоит использовать из стандартного набора (если они были установлены заранее).

Установка libgdiplus

Я бы не советовал вообще ставить эту библиотеку без необходимости. Основная проблема, особенно при установке на серверные версии, это зависимость libgdiplus от X11. Если X11 есть, то нужен glib и как показывает практика, версии посвежей, чес в стабильных репозиториях дистрибутивов. Вместе с glib устанавливаем и все форматы файлов. Далее, хоть один шрифт для Cairo и саму библиотеку.

Теперь последняя проблема связанная с X11, без запущенного сервера тесты не пройдут. Не могу сказать насколько это важно, но подобные проблемы возникают и на Mac OS и на FreeBSD [4]. В этом случае «дособрать» libgdiplus прийдется в ручную. Так как сборка падает на make, то ./configure проходит правильно. Нужно отредактировать файл Makefile (в моем случае путь ~/src/mono-build-2.10.2/libgdiplus-2.10) убрав от-туда упоминание о папке tests (переменные SUBDIRS и DIST_SUBDIRS). Посде этого оставить в массиве только ссылку на libgdiplus и за комментировать ./configure в функции getLib.

После завершения, получаем следующие результаты:

Debian подопытный OpenSuse с предустановленной версией Mono
user@debian:~/mono-2.10.2/bin$ ./mono -V
Mono JIT compiler version 2.10.2 (tarball Wed Jun 15 10:42:32 EDT 2011)
Copyright (C) 2002-2011 Novell, Inc and Contributors. www.mono-project.com
TLS: __thread
SIGSEGV: altstack
Notifications: epoll
Architecture: x86
Disabled: none
Misc: softdebug
LLVM: supported, not enabled.
GC: Included Boehm (with typed GC and Parallel Mark)
rupert@linux:~> mono -V
Mono JIT compiler version 2.10.2 (tarball Mon Apr 18 15:10:34 UTC 2011)
Copyright (C) 2002-2011 Novell, Inc and Contributors. www.mono-project.com
TLS:           __thread
SIGSEGV:       altstack
Notifications: epoll
Architecture:  x86
Disabled:      none
Misc:          debugger softdebug
LLVM:          yes(2.9svn-mono)
GC:            Included Boehm (with typed GC and Parallel Mark)
user@debian:~/mono-2.10.2$ source ./mono-env
[mono] ~/mono-2.10.2 @ mono-test-install
Active Mono: /home/user/mono-2.10.2/bin/mono
Other Mono executables: /usr/bin/monoYour have a working System.Drawing setup
Your file system watcher is: System.IO.InotifyWatcher
mono-test-install
Active Mono: /home/user/mono-2.10.2/bin/mono
Other Mono executables: /usr/bin/monoYour have a working System.Drawing setup
Your file system watcher is: System.IO.InotifyWatcher

Несмотря на то что тесты были пропущены, вроде результаты похожи.


Article printed from Хроники.: http://usanov.net

URL to article: http://usanov.net/2103-kompilyaciya-mono-2-10-2-s-isxodnogo-koda

URLs in this post:

[1] Image: http://usanov.net/wp-content/uploads/2011/06/install_program_ubuntu.jpg

[2] моем предыдущем посте: http://usanov.net/1202-sborka-mono-2-6-1-iz-isxodnogo-koda

[3] mono-install.sh: http://usanov.net/wp-content/uploads/2011/06/mono-install.sh_.txt

[4] FreeBSD: http://dev.n0ll.com/?p=857

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