Имея в хозяйстве замечательный накопитель от компании Synology, я довольно долгое время грустил по поводу того, что в нём отсутствует
Итого, дано:
1. Железо: NAS Synology 110j с процессором Marvell mv5281 на борту.
2. ОС DSM 4.0 (на базе малораспространённого дистрибутива Linux)
Необходимо: Установить последнюю версию mono + xsp.
Подготовка
Компания Synology не озадачилась предоставить возможности для установки дополнительных пакетов традиционным для *nix систем способом, т.е. через консоль. Поэтому для начала необходимо ознакомится с топиком по адресу www.synology-forum.ru/index.php?showtopic=38, и выполнить необходимые телодвижения. Конечным результатом будет установка и запуск консольного менеджера пакетов ipkg. Я не могу в этой статье привести краткий конспект, поскольку накопители Synology выпускаются на различных процессорах и рецепт для каждой архитектуры будет свой.
Сборка и установка MONO
После того как заработал менеджер пакетов ipkg, получаем и распаковываем последние исходники mono (на тот момент это был 2.10.9). По ходу повествования, если необходимо, доустанавливайте необходимые пакеты с помощью ipkg самостоятельно, поскольку в силу специфики «железки» я не могу полностью виртуализировать среду для чистого эксперимента, а многие пакеты у меня были поставлены по ходу «плясок с бубном» и я уже подзабыл что необходимо устанавливать дополнительно.
wget http://download.mono-project.com/sources/mono/mono-2.10.9.tar.bz2
tar -xvf mono-2.10.9.tar.bz2
Процесс сборки mono:
cd mono-2.10.9
./configure --prefix=/usr --sysconfdir=/etc/mono
должно проходить нормально, если что не так смотрим в config.log. Вероятнее всего необходимо будет доставить некоторые пакеты.
Напоминаю, что просто команда make у меня не справилась с компиляцией. Необходимо добавить флаги '-Wl,-lpthread,-lrt'. Но этого оказалось мало. При линковке с библиотекой pthread в последней отсутствовали некоторые функции. Возможно, что это связано с архитектурой и на Intel`ах будет всё OK. Тем не менее, на моём ARM непосредственно перед компиляцией, мне дополнительно пришлось выполнить следующие заклинания:
mkdir /opt/arm-none-linux-gnueabi/lib_disabled
mv /opt/arm-none-linux-gnueabi/lib/libpthread* /opt/arm-none-linux-gnueabi/lib_disabled
cp /lib/libpthread.so.0 /opt/arm-none-linux-gnueabi/lib/
cd /opt/arm-none-linux-gnueabi/lib/
ln -s libpthread.so.0 libpthread.so
ln -s libpthread.so.0 libpthread-2.5.so
В /opt/etc/ipkg/cross-feed.conf изменить на
src/gz cross ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/stable
ipkg remove perl
ipkg install perl
Магия с libpthread была выяснена гуглением и как ясно из команд мы подменяем библиотеку. Мне не ведомо, почему так случилось, но это факт. А вот переустановка perl – это вообще нечто. У меня изначально пакеты ставились из «нестабильной» ветки (unstable). Возможно, что в вашем случае всё будет нормально.
Итак, запасаемся попкорном и компилируем… процесс не быстрый и местами даже интересный.
make CFLAGS+='-Wl,-lpthread,-lrt'
Итак, если компиляция mono закончилось успешно, устанавливаем его командой
make install
и проверим
mono --version
должна выдать что-то вроде
Mono JIT compiler version 2.10.9 (tarball Sun Apr 15 18:40:39 MSK 2012)
Copyright (C) 2002-2011 Novell, Inc, Xamarin, Inc and Contributors. www.mono-project.com
TLS: __thread
SIGSEGV: normal
Notifications: epoll
Architecture: armel,soft-float
Disabled: none
Misc: softdebug
LLVM: supported, not enabled.
GC: Included Boehm (with typed GC and Parallel Mark)
Сборка и проверка XSP
Среда установлена, теперь необходимо установить XSP – сервер ASP.NET приложений для mono. Я понимаю, что «сервер ASP.NET» для XSP — это звучит слишком сильно, но и не забываем, на чём он будет эксплуатироваться.
Здесь всё банально…
wget http://download.mono-project.com/sources/xsp/xsp-2.10.tar.bz2
tar -xvf xsp-2.10.tar.bz2
cd xsp-2.10
./configure
make install
после установки проверим:
cd /src/Mono.WebServer.XSP
mono xsp4.exe --applications /:./../../test
должна выдать
xsp4
Listening on address: 0.0.0.0
Root directory: /xsp-2.10/src/Mono.WebServer.XSP
Listening on port: 8080 (non-secure)
Hit Return to stop the server.
Запускаем броузер, набираем адрес NAS и порт 8080. Наш сервер должен выдать тестовую страницу
Готовим подопытное ASP.NET MVC приложение
1. Создаём проект ASP.NET MVC 3 Web Application
2. Я выбирал Internet Application
3. В исходный текст внесём небольшое исправление
4. Я настроил публикацию через файловую систему (выберите по вкусу то, что настроено на вашем NAS, например FTP)
5. Запускаем XSP на папку в которую будем деплоить наше приложение
mono xsp4.exe --applications /:./volume1/web/TestMvcOnSynology
6. Далее необходимо включить в проект сборки MVC, чтобы они деплоились вместе с нашим приложением, поскольку в MONO они отсутствуют. Для этого в свойствах подключенных сборок устанавливаем свойство «Копировать локально» в True. Список сборок: System.Web.Helpers, System.Web.Mvc, System.Web.WebPages, добавляем сборки System.Web.Razor, System.Web.WebPages.Razor, System.Web.WebPages.Deployment и также устанавливаем свойство «копировать локально» в true.
7. Так же, в целях ознакомления, я «вырезаю» из приложения авторизацию и все упоминания об EntityFramework (это тема отдельной статьи).
1. Удаляем ссылку на EntityFramework, System.Data.Entity
2. Исключаем из проекта AccountController.cs;
3. из Моделей исключаем AccountModels.cs;
4. из представлений исключаем полностью папку Account
5. В _Layout.cshtml удаляем секцию с id=logindisplay
6. Исключаем из проекта файл _LogOnPartial.cshtml
Всё. Можно деплоить приложение и наслаждаться результатом:
Напоследок
1. Учитывая, что Microsoft не так давно открыла исходники всего стека ASP.NET вероятнее всего более правильно будет подключить пакет MVC из codeplex`а к приложению и все ссылки переключить на него и в таком виде деплоить приложение.
2. Вместо вырезания авторизации необходимо реализовать собственные механизм без использования EntityFramework, но, как я указывал, это отдельная тема.
Автор: AndyGrom