Coding with Titans

so breaking things happens constantly, but never on purpose

Mono na Synology NAS DS411

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.

  1. 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
  1. 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
  1. 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ć.
  1. 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
  1. 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
  1. Kompilujemy:
make
  1. Instalujemy (automatycznie do /opt/mono-2.10.9):
make install
  1. 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
  1. 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!