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

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

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

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

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

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

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

Скачать mono-install.sh

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

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

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

Установка lib

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

Установка libgdiplus

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

Теперь последняя проблема связанная с X11, без запущенного сервера тесты не пройдут. Не могу сказать насколько это важно, но подобные проблемы возникают и на Mac OS и на FreeBSD. В этом случае «дособрать» 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

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

Метки:, , ,

3 комментария в “Компиляция Mono 2.10.2 с исходного кода”

  1. Большое спасибо за инфу как раз искал

  2. Вот если бы вы еще deb-пакет собрали и поделились

  3. Да вроде есть такие уже.. здесь описаны.