Z niewiadomych powodów Synology usunęło pakiet Mono z repozytorium ipkg. Jednak i na to znajdzie się sposób. Przecież wszystko da się skompilować ze źródeł.

Poniżej przestawię jak to zrobić. Przyznaję jednak, że jest to tylko tłumaczenie. Oryginalny post znajduje się tutaj. Wielkie dzięki dla Kennetha za jego wysiłek! Mój wkład, to przetestowanie tego na DS411 oraz użycie stabilnej wersji Mono-2.10.9 zamiast Mono-alpha-2.11.0, czyli mimo wszystko nie za dużo ;)

Ostrzeżenie: ta kompilacja można na prawdę zająć duuużo czasu, liczonego w godzinach.

 

  • Na początku instalujemy wymagane narzędzia do przeprowadzenia kompilacji:
ipkg install wget nano make automake autoconf bison \
    glib libc-dev libstdc++ m4 gcc gawk textutils gettext zlib
  • Pobieramy i wypakowujemy źródła projektu Mono:
wget "http://download.mono-project.com/sources/mono/mono-2.10.9.tar.bz2"
tar -xf mono-2.10.9.tar.bz2
  • Konfigurujemy źródła dla naszej maszyny:
cd mono-2.10.9 ./configure --prefix=/opt/mono-2.10.9

Przełącznik ‘prefix’ pozwoli nam później zainstalować skompilowaną wersję Mono w tym właśnie folderze, zamiast użycia domyślnego “/usr”. Dzięki temu w przyszłości łatwiej będzie wszystko usunąć lub aktualizować.

  • Edytujemy konfiguracje, tak aby dodać łączenie z biblioteką “rt”.
    Rozwiązuje to problem opisany tutaj, gdzie brakuje metod odwołujących się to czasu procesora.

W plikach:

mono/metadata/Makefile
mono/mini/Makefile
mono/profiler/Makefile

Edytujemy wartość zmiennej flag dla linkera (LDFLAGS):

LDFLAGS = -lrt
  • Dodatkowo, poprawiamy problem z nieistniejącymi symbolami w bibliotece pthreads, która domyślnie instaluje się z pakietów ipkg. Problem szczegółowo opisany na forum Synology.

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

  • Kompilujemy:

make

  • Instalujemy (automatycznie do /opt/mono-2.10.9):

make install

  • Dowiązujemy narzędzia, tam gdzie zainstalowałyby się domyślnie:

ln -s /opt/mono-2.10.9/bin/mono /opt/bin/mono
ln -s /opt/mono-2.10.9/bin/mcs /opt/bin/mcs
ln -s /opt/mono-2.10.9/bin/gmcs /opt/bin/gmcs

  • I finalny test:

mono --version
Mono JIT compiler version 2.10.9 (tarball Tue May 29 16:18:24 CEST 2012)
Copyright (C) 2002-2011 Novell, Inc, Xamarin, Inc and Contributors. www.mono-project.com
TLS: normal
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)

Gotowe, brawo!