¿Cómo instalar Mono en macOS para que mono funcione en terminal?


Estoy tratando de obtener una instalación Mono que se ejecuta en un mac (OS X versión 10.10.5), y mientras que los estados de instalación que se ha completado con éxito, no soy capaz de llamar mono desde el terminal.

Para instalarlo, corrí uninstallMono.sh como root para asegurarnos de que no teníamos ningún cruft sobrante, ejecutamos MonoFramework-MDK-4.0.4.1.macos10.xamarin.x86.pkg. El instalador parecía completarse con éxito, pero un intento de llamar a mono devuelve

- bash: mono: comando no encontrado

El framework mono parece estar instalado:

Lees-Mac-Pro:Downloads kevinmack$ cd /Volumes/Macintosh\ HD/Library/Frameworks/
Lees-Mac-Pro:Frameworks kevinmack$ ls -l
total 32
lrwxr-xr-x  1 root  wheel   71 Jan 20  2015 AEProfiling.framework -> ../../Applications/Motion.app/Contents/Frameworks/AEProfiling.framework
lrwxr-xr-x  1 root  wheel   74 Jan 20  2015 AERegistration.framework -> ../../Applications/Motion.app/Contents/Frameworks/AERegistration.framework
lrwxr-xr-x  1 root  wheel   74 Jan 20  2015 AudioMixEngine.framework -> ../../Applications/Motion.app/Contents/Frameworks/AudioMixEngine.framework
drwxr-xr-x  8 root  admin  272 Sep 12 11:24 Mono.framework
lrwxr-xr-x  1 root  wheel   60 Sep  9 22:16 NyxAudioAnalysis.framework -> /System/Library/PrivateFrameworks/NyxAudioAnalysis.framework
drwxr-xr-x  5 root  wheel  170 Jan 20  2015 PluginManager.framework
drwxr-xr-x  8 root  wheel  272 Sep  9 22:19 iTunesLibrary.framework

...pero no está presente en /usr/bin e intentar encontrar su ejecutable usando which mono no devuelve nada.

 48
Author: Jacek Laskowski, 2015-09-12

8 answers

Actualizar (ya que esto todavía está recibiendo vistas dos+ años después):

Las últimas versiones de Mono (5.x) el proceso de instalación crea un archivo (mono-commands) en /etc/paths.d que contiene la ruta de acceso de:

/Library/Frameworks/Mono.framework/Versions/Current/Commands

Así que /usr/local/bin ya no se usa...

Original

Las versiones más recientes de mono cumplen con los requisitos de "El Capitan" de no instalar nada en /usr/bin y por lo tanto ahora se usa /usr/local/bin. No estoy seguro de cuál mono 4.x liberar que empezó en...

Pero asumiría que no tienes /usr / local / bin en tu camino(?), try:

export PATH=/usr/local/bin:${PATH}
which mono
which mcs

En mi caso, tengo 4.2.0 instalado:

$ which mono
/usr/local/bin/mono
$ which mcs
/usr/local/bin/mcs
$ mono --version
Mono JIT compiler version 4.2.0 (explicit/2701b19 Mon Aug 31 09:57:28 EDT 2015)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
$ cat `which mcs`
#!/bin/sh
export PATH=$PATH:/Library/Frameworks/Mono.framework/Versions/4.2.0/bin
export PKG_CONFIG_PATH=/Library/Frameworks/Mono.framework/External/pkgconfig:/Library/Frameworks/Mono.framework/Versions/4.2.0/lib/pkgconfig:/Library/Frameworks/Mono.framework/Versions/4.2.0/share/pkgconfig:$PKG_CONFIG_PATH
exec /Library/Frameworks/Mono.framework/Versions/4.2.0/bin/mono $MONO_OPTIONS /Library/Frameworks/Mono.framework/Versions/4.2.0/lib/mono/4.5/mcs.exe "$@"
 25
Author: SushiHangover,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-08 19:55:09

En OS X El Capitan, ejecute lo siguiente en Terminal para soportar mono comando

export PATH=/Library/Frameworks/Mono.framework/Versions/Current/bin/:${PATH}
 88
Author: Jeffrey Neo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-02 04:31:39

Es mejor usar la siguiente exportación:

Export PATH=PATH PATH:/Library/Frameworks/Mono.framework/versions/Current/bin/

  1. Usted no modifica el orden anterior del CAMINO (Es muy importante!!)
  2. Utilizará la versión actual (cuando actualice la versión no es necesario cambiar la variable PATH)

Otra opción (la mejor opción) es incluir una nueva línea al final del fichero / etc / paths con el contenido: / Library / Frameworks / Mono.framework/Versions/Current / bin

En este caso, la ruta estará disponible para todos los usuarios en el sistema.

 12
Author: Agnoia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-07 23:14:18

He estado viendo esta página porque yo también tuve problemas con la instalación de Mono (por primera vez) en El Capitán. Encontré que el framework estaba instalado pero los comandos no fueron puestos en el /usr/local/bin. Los enlaces simbólicos no parecían funcionar porque obtenía errores al intentar usar el comando mono y estaba buscando bibliotecas en el lugar equivocado.

Lo que finalmente encontré que funcionó (por prueba y error) fue establecer PATH PATH para el framework Mono usando el comando en terminal:

export PATH=/Library/Frameworks/Mono.framework/Versions/4.2.0/bin/:${PATH}

Dado que no soy un programador o codificador (al menos no durante mucho tiempo y nunca en OS X), esto me permitió ejecutar Duplicati usando mono (que era la razón por la que lo quería en primer lugar), pero no estoy seguro de si esta es la forma correcta de resolver esto o incluso si esto se debe hacer en absoluto. ¿Alguien con experiencia en programación real para comentar o aclarar?

 6
Author: fredgeorge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-25 18:51:08

Después de la primera instalación de Mono Framework usando brew cask descubrí que brew ofrece Mono (!)

Primero desinstalé Mono.

$ brew cask uninstall mono-mdk

Y lo instaló usando brew install mono y eliminó todos los cambios de configuración en ~/.zshrc.

Parece que es mucho más agradable:

$ type mono
mono is /usr/local/bin/mono

$ mono --version
Mono JIT compiler version 4.6.2 (Stable 4.6.2.7/08fd525 Tue Nov 22 22:05:18 GMT 2016)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
    TLS:           normal
    SIGSEGV:       altstack
    Notification:  kqueue
    Architecture:  amd64
    Disabled:      none
    Misc:          softdebug
    LLVM:          supported, not enabled.
    GC:            sgen

Primero utilicé brew cask para instalar el framework Mono y tuve que agregar /Library/Frameworks/Mono.framework/Home/bin a la variable de entorno PATH.

$ brew cask info mono-mdk
mono-mdk: 4.6.2.7
http://www.mono-project.com/
Not installed
From: https://github.com/caskroom/homebrew-cask/blob/master/Casks/mono-mdk.rb
==> Name
Mono
==> Artifacts
MonoFramework-MDK-4.6.2.7.macos10.xamarin.universal.pkg (pkg)
➜  kafunk git:(master) brew cask install mono-mdk
==> Downloading https://download.mono-project.com/archive/4.6.2/macos-10-universal/MonoFramework-MDK-4.6.2.7.macos10.xamarin.universal.pkg
######################################################################## 100,0%
==> Verifying checksum for Cask mono-mdk
==> Running installer for mono-mdk; your password may be necessary.
==> Package installers may write to any location; options such as --appdir are ignored.
Password:
==> installer: Package name is Mono Framework
==> installer: Installing at base path /
==> installer: The install was successful.
  mono-mdk was successfully installed!

Desde que utilizo oh-my-zsh {[29] } definí MONO_HOME en ~/.zshrc y ajustado PATH en consecuencia:

export MONO_HOME=/Library/Frameworks/Mono.framework/Home
export PATH=$MONO_HOME/bin:$PATH

Con eso mono está disponible:

$ mono --version
Mono JIT compiler version 4.6.2 (mono-4.6.0-branch/08fd525 Thu Nov 10 20:28:28 EST 2016)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
    TLS:           normal
    SIGSEGV:       altstack
    Notification:  kqueue
    Architecture:  x86
    Disabled:      none
    Misc:          softdebug
    LLVM:          yes(3.6.0svn-mono-master/8b1520c)
    GC:            sgen
 6
Author: Jacek Laskowski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-02 14:34:12

El Capitán ahora protege ciertos directorios del sistema en modo "rootless" (también conocido como Protección de Integridad del Sistema). Si ejecuta el comando ls-lo/System/Library / LaunchDaemons verá que los directorios y archivos que hay debajo están marcados como "restringido."

Puede desactivar el modo sin raíz de esta manera:

  1. Reinicie en modo de recuperación (reinicie y mantenga pulsado Cmd-R)
  2. Abrir un terminal
  3. Utilice este comando: csrutil disable

Reinicie y ejecute el comando que funcionó antes de El Capitán

  1. Instale la última versión de Mono.

Cuando haya terminado, es muy recomendable que vuelva a habilitar SIP siguiendo los mismos pasos, pero utilizando csrutil enable en el paso 3.

Me encontré con un problema con la misma causa raíz al intentar instalar módulos pear/pecl y aplicaciones macports/homebrew. Estos normalmente necesitan instalar archivos en /usr /include y/usr / lib, que ahora también están restringidos.

Nota: Respuestas anteriores alrededor de Internet sobre este problema le dan instrucciones para modificar la configuración de NVRAM, pero Apple declaró que el método NVRAM dejaría de funcionar con la liberación pública de El Capitán. La versión de GM ya ha deshabilitado la solución de NVRAM, por lo que esta respuesta debería proporcionarle lo que necesita para seguir adelante.

 3
Author: anilreddy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-27 09:40:56

Resumen Rápido: Atm, el instalador mono framework solo funciona correctamente si lo instala en root. Agregará automáticamente /Library/Frameworks/Mono.framework/Versions/Current/Commands a $PATH, pero no se si necesitarás agregar /Library/Frameworks/Mono.framework/Versions/Current/bin/ a mano o si todo funciona. (Commands es un enlace simbólico a bin, pero todavía puede no funcionar)

Más en profundidad: Recientemente instalé mono desde MonoFramework-MDK-4.8.0.520.macos10.xamarin.universal.pkg. Lo instalé en /Volumes/osxapps/ en lugar de root, pero la instalación aún esperaba que todo estuviera en root. Añadió /Library/Frameworks/Mono.framework/Versions/Current/Commands a $PATH pero todo en /Library/Frameworks/Mono.framework/ eran solo directorios vacíos. Todos los archivos residían en /Volumes/osxapps/Library/Frameworks/Mono.framework/.

Además, mucho de lo que estaba en /Volumes/osxapps/Library/Frameworks/Mono.framework/ incluyendo Commands no eran carpetas sino enlaces simbólicos que no funcionaban porque esperaban que las carpetas estuvieran en root. Por ejemplo: Si todo estuviera instalado en root, /Library/Frameworks/Mono.framework/Versions/Current/Commands es un enlace simbólico a /Library/Frameworks/Mono.framework/Versions/Current/bin y /Library/Frameworks/Mono.framework/Versions/Current/ es también un enlace simbólico.

He añadido:

export PATH="/Volumes/osxapps/Library/Frameworks/Mono.framework/Versions/4.8.0/bin:$PATH"

A .bash_profile, en ~/, que me permitió ejecutar los comandos / ejecutables, pero todos murieron con errores porque todavía esperaban que las cosas estuvieran en la raíz.

Así que copié la carpeta de /Volumes/osxapps/Library/Frameworks a /Library/Frameworks/ y eso resolvió todos los errores y las cosas están funcionando correctamente, pero ahora tengo dos copias de Mono.framework y no quería que se instalara en root en primer lugar, porque root está en un SSD, y el espacio es limitado.

Una mejor solución sería desinstalar mono de acuerdo con las instrucciones en la parte inferior de esta página y luego reinstalar en root.

Sin embargo, todavía sería mejor, para mí, instalar en /Volumes/osxapps/, pero no conozco la mejor manera de hacerlo. (Probablemente podría recrear un montón de enlaces simbólicos). Iba a decirle al mono-proyecto que su instalador lo arruina todo si no lo instala en root, pero tampoco estoy seguro de la mejor manera de hacerlo. Así que, en cambio, he publicado aquí, con lo que he aprendido hasta ahora, con la esperanza de que podría ayudar a alguien más.

 1
Author: FragmentalStew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-29 22:29:27

Intente instalar la versión anterior. 3.4.0 está funcionando para mí OSX (10.10.5)..

Http://origin-download.mono-project.com/archive/3.4.0/macos-10-x86 /

 0
Author: anilreddy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-26 11:04:35