OS X 10.8 + rvm + Ruby 1.8.7 = Pure Hell


Der Titel sagt ja schon alles: Da ich mein System vor knapp einer Woche auf die neue Version von Mac OS X aktualisiert habe, musste ich auch etliche Tools neu installieren. Die im Titel genannte Kombination bereitete mir einige Kopfschmerzen, weil es zu dem Thema zwar einige Beiträge gibt, allerdings keine die auf das neue Betriebssystem ausgelegt sind, und daher doch etliches nicht so funktionierte, wie die Artikel vorschlugen. Nach einem halben Tag des Lesens und Experimentieren habe ich nun alles zum laufen bekommen, und möchte hier kurz für alle darlegen, wie das zu schaffen ist (wer nur an den einzelnen Schritten in Form einer kurzen Schritt-für-Schritt-Anleitung interessiert ist, findet am Endes dieses Artikels eine Zusammenfassung <– Link funktioniert erst, wenn man vorher auf "more" geklickt hat!).

Seit Lion gibt es Schwierigkeiten mit dem installieren alter Ruby-Versionen. Gründe dafür gibt es einige: zunächst unterstützt Apple seit der XCode Version 4.0 neben dem Standard GCC Compilern nun auch LLVM-Compiler, und seit XCode 4.2 wird der GCC ganz über Bord geworfen, und als symbolischer Link zeigt der Befehl gcc nun auf einen LLVM-Compiler:

pygospa@lalaith ~ % ls -ahl /usr/bin/gcc
lrwxr-xr-x  1 root  wheel    12B 29 Jul 04:48 /usr/bin/gcc@ -> llvm-gcc-4.2

(Bemerkung: Eingabezeilen sind nach dem Systemprompt % angegeben, und die Zeilen grau hervorgehoben; nicht hervorgehobene Zeilen sind Ausgaben des Systems nach der Eingabe)

Wer Apples aktuelles Betriebssystem, Mountain Lion, als “Clean Install” installiert (was ja schon an für sich ein kleiner Akt ist, da Apple eigentlich immer nur das “Update” vorsieht) kommt dann nur noch an die XCode-Version 4.4. Außerdem verzichtet Apple seit 10.8 auch auf das X Window System. Seit Jaguar ließ sich dieses über Apples Implementierung namens X11.app optional über die mitgelieferten CDs nachinstallieren und parallel zu Apples Aqua Oberfläche benutzt werden kann, seit Leopard gehört es zur Standardinstallation. Für Mountain Lion nun muss man sich eine X11-Umgebung eigenständig nachinstallieren: Dies ist zwar kein Problem, aber auch das muss man natürlich vorher wissen 😉
Auch das GNU Build System fehlt, und muss manuell nachinstalliert werden.

rvm ist ein Tool, das es erlaubt, verschiedene Versionen von Ruby parallel zu installieren, und auch für jede Ruby-Version ein eigenes Set an Gems separat zu installieren (bzw. sogar so weit zu gehen und diese bis auf Projektebene fein zu Granulieren). Da OS X mit einer vorinstallierten Ruby-Version daher kommt, welche auch vom System genutzt wird, ist eine Änderung hier schwierig – Upgrading sollte ja in der Regel möglich sein, für die Arbeit müsste ich aber leider ein Downgrade vornehmen; etwas das nicht nur sehr viel problematischer vonstatten geht, sondern auch dafür sorgen könnte, dass bestimmte Systemteile nicht mehr funktionieren könnten. rvm ist hier die Lösung! In der Theorie ist es über einen Einzeiler mithilfe der Unix-Tools cURL und bash als Script-Interpreter in der Konsole installiert:

pygospa@lalaith ~ % bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

In vielen, auch sehr aktuellen Anleitungen wird darauf hingewiesen, dass danach noch das Shell-Profil verändert werden muss

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"

Dies ist aber sicher nicht mehr nötig, das neue Installationsskript übernimmt die Einträge in die Shells, sodass der Befehl rvm im System bekannt ist. Durch die Compiler-Problematik lässt sich unter rvm kein Ruby-System installieren. Da XCode nicht standardmäßig installiert wird, fehlt der Befehl natürlich ganz, wenn XCode nicht ausdrücklich nachinstalliert wird. Viele Entwickler installieren XCode nur, weil mit diesem auch die ganzen Entwicklertools aus der Unix-Welt mitgeliefert werden, und man sich nicht manuell um die gesamte Software kümmern muss.

Auf vielen Seiten wird fälschlicher Weise auch noch der Hinweis gegeben, dass man die Tools auch mit dem clang-Compiler kompilieren könne, etwa wie folgt:

rvm install 1.9.3 --reconfigure --debug -C --enable-pthread --with-gcc=clang

Auch wenn sich Ruby mit ihr fehlerfrei kompilieren lässt – so rät rvm stark von dieser Variante ab. Die Software wird nicht stabil kompiliert und fehlerhaftes Verhalten ist bekannt!

Installation von GCC (über GitHub und Homebrew)

Wenn man zu den Menschen gehört, die XCode nicht benötigt (welches das “GNU Build System” und GCC ja eh nicht mehr beinhaltet) dann sollte man sich dieses auch nicht mehr installieren, und macht sich die Arbeit ein wenig leichter, indem man sich den OSX GCC Installer von Kenneth Reitz installiert. Bei GitHub gibt es neben dem Quelltext auch schon fertig kompilierte Versionen; allerdings noch nicht für Mountain Lion. Ich denke, es wird nicht lange dauern, bis auch hier eine kompilierte Version zur Verfügung steht.

Ich jedoch habe einen anderen Weg gewählt, denn ich habe XCode installiert, und möchte hier einen etwas saubereren Weg wählen; sauberer, da der vorher beschriebene weg einen vorhandenen gcc-Befehl überschreibt. XCode wird dadurch unbrauchbar und müsste erneut installiert werd, und würde dann wieder den vom OSX GCC Installer installierten Compiler überschreiben, etc.

Neben den Pakete-Managern Fink und MacPorts (ehemals DarwinPorts) gibt es neuerdings aber auch den Homebrew-Manger. Auch mit diesem lässt sich die GNU Compilersuite installieren, allerdings wird diese in einem Verzeichnis unter /usr/local abgelegt, und verlinkt nach /usr/local/bin welches sich ebenfalls standardmäßig in der $PATH-Variable befindet, also dann auch im gesamten System als Nachschlageort für Befehle bekannt ist. Damit werden auch Konflikte mit schon vorhandenem gcc, sowohl durch Pfad als auch durch die Benennung, vermieden. So sehen die Tools aus die wir nachher installieren werden (über die Abhängigkeiten kommen natürlich noch weitere Befehle hinzu):

pygospa@lalaith ~ % ls -ahl /usr/local/bin/
lrwxrwxr-x   1 pygospa  wheel    36B  1 Aug 02:14 autoconf@ -> ../Cellar/autoconf/2.69/bin/autoconf
lrwxrwxr-x   1 pygospa  wheel    38B  1 Aug 02:14 automake@ -> ../Cellar/automake/1.12.2/bin/automake
lrwxrwxr-x   1 pygospa  wheel    46B  1 Aug 02:23 gcc-4.2@ -> ../Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2

In der Theorie ist die Installation von Homebrew sehr einfach; es handelt sich um in Ruby geschriebene Software, die sich ebenfalls durch einen Einzeiler in der Konsole installieren lässt:

pygospa@lalaith ~ % /usr/bin/ruby -e "$(/usr/bin/curl -fsSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)"

Leider scheint es bei Mountain Lion eine Änderung im Rechtesystem gegeben zu haben; brauchte man bei Lion lediglich Administrationsrechte, um Homebrew zu installieren, so sind bei Mountain Lion auch für die Installation von einfachen Paketen Administrationsrechte notwendig; eine Installation per sudo ist nicht möglich, da man dann root-Rechte hat, was die Installation abfängt:

pygospa@lalaith ~ % sudo /usr/bin/ruby -e "$(/usr/bin/curl -fsSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)"
Password:
Don't run this as root!

Ohne sudo wiederum gibt es folgenden Fehler:

pygospa@lalaith ~ % /usr/bin/ruby -e "$(/usr/bin/curl -fsSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)"
This script requires the user pygospa to be an Administrator.
(...)

Der Grund ist im Quelltext zu finden:

abort <<-EOABORT unless `groups`.split.include? "admin"

Der Benutzer muss also in der Gruppe “admin” sei, was unter OS X nur ein Administrator ist; der Standard-Benutzer sollte aber ein Benutzerkonto ohne Administrator-Rechte haben. Nun wird es aber nach der Installation mit einem Administrator-Konto notwendig, dass auch alle weiteren Befehle mit mindestens Administrator-Rechten durchgeführt wird:

pygospa@lalaith /usr % brew update
/usr/local/.git: Permission denied
Error: Failure while executing: git init 
pygospa@lalaith /usr % brew install autoconf
Error: Could not create /usr/local/Cellar
Check you have permission to write to /usr/local

Hier funktioniert zwar sudo, aber man sollte sudo auch hier nicht verwenden, denn dann werden alle weiteren Tools mit root-Rechten installiert. Zwar werden diese mit Rechten installiert, dass auch normale Benutzer sie verwenden können; allerdings gibt man jedem Code/Programm, das über Homebrew installiert wird, root-Rechte. Selbst die Macher von Homebrew raten davon ab:

Homebrew is designed to work without using sudo. You can decide to use it but we strongly recommend not to do so.
(…)
You should only ever sudo a tool you trust. Of course, you can trust Homebrew 😉 But do you trust the multi-megabyte Makefile that Homebrew runs?
(…)
It’s too high a risk to sudo such stuff. It could break your base system, or alter it subtly.

(Quelle: Homebrew FAQ)

Wie also danach die Software installieren? Es gibt im Internet einige wahnwitzige Ideen:

  • Die Installation über einen Administrator-Account ist genau so witzlos, denn auch dieser gibt den Tools mehr Rechte, als sie eigentlich benötigen.
  • Eine weitere Lösung schlägt vor, mit dem Tool chown den Ordner einfach dem Benutzer zuzuweisen (und es gibt sogar Lösungsvorschläge die das ganze auch noch mit der rekursiven Option vorschlagen):
    eru@lalaith ~ % sudo chown -R pygospa usr/
    eru@lalaith ~ % ls -ahl /
    drwxr-xr-x@ 12 pygospa wheel 408B 30 Jul 19:47 usr

    Auch das ist in meinen Augen Murks, da hier eine durchdachte Ordnerstruktur grundlegend verändert wird, und das in einem wichtigen Systemordner. Ich zitiere mal aus der Dokumentation zur “Linux Filesystem Hierarchy”:

    Hence, this [/usr] is one of the most important directories in the system as it contains all the user binaries, their documentation, libraries, header files, etc…. X and its supporting libraries can be found here. User programs like telnet, ftp, etc…. are also placed here.
    (…)
    In current Unices, /usr is where user-land programs and data (as opposed to ‘system land’ programs and data) are.

    (Quelle: Linux-Filesystem-Hierarchy)

    Man sollte also genau wissen, was man hier macht – und ich finde, den Ordner (samt Unterordnern) einem Standardbenutzer zu überschreiben gehört sicherlich nicht dazu.

    Hierzu eine kleine Anekdote, die vielleicht darlegt, wie wichtig dieser Ordner ist: Während eines anderen Projekts habe ich mal die Benutzerrechte für /urs kurzfristig ändern wollen, und vertat ich mich bei den absoluten Oktalwerten für die Benutzerrechte. Ich wählte 0776 statt 0775, machte den Ordner also lesbar aber nicht mehr ausführbar. Plötzlich bemerkte ich schlagartig ein durchdrehen meines Kühlers. Mit knapp 7.000rpm versuchte dieser die CPU herunter zu kühlen, die bei einer Temperatur von 97°C war. Ein Blick in die Prozessliste zeigte, dass das opendirectoryd den Prozessor überbeanspruchte. Eher zufällig bemerkte ich das dieses erst passiert ist, nachdem ich die Rechte geändert hatte, und sah diese noch einmal durch – ein Korrigieren sorgte dafür, das die CPU-Auslastung nachließ und wenig später auch die CPU-Temperatur und die Lüfter-Umdrehungen sanken. Hier hat die Änderung dafür gesorgt, dass ein Service der im Hintergrund läuft und ansonsten eigentlich unbemerkt bleibt, plötzlich nicht mehr anständig arbeiten konnte, und daher das System in die Knie zwang.

  • Die beste (im Sinne von am Schlimmsten) vorgeschlagene Lösung besagte nun, dass man doch mittels chmod die Benutzerrechte derart ändern solle, das jeder vollen Zugriff auf das Verzeichnis /usr, bzw. das vom Script angelegte Verzeichnis /usr/local hat.
    root@lalaith # chmod 777 /usr
    root@lalaith # ls -ahl /usr
    drwxrwxrwx     7 root  admin   238B 31 Jul 20:28 local

    Die Bedeutung dessen ist, das hiernach wirklich jeder, sogar jeder Gast-Account, und natürlich auch jedes Programm, egal wie wenig Benutzerrechte es hat, den Ordner verändern kann! Nach der Erklärung von oben sollte klar sein, warum auch das keine Lösung sein kann!

Was also tun?!

Seit Mountain Lion gehören die Ordner unter dem root-Verszeichnis nicht mehr der Gruppe “admin” sondern der Gruppe “wheel” an. “wheel” ist eine aus der Unix-Welt stammende Gruppe, die Benutzern dieser Gruppe erlaubt, den Befehl su zu benutzen, um zum root-Benutzer zu werden. Von Linux wurde dieses System – eine extra Sicherheitsstufe – nie übernommen (die einzig mir bekannte Ausnahme bildet hier Gentoo Linux welches als Linux ja eh eine Sonderrolle annimmt); OS X wiederum stammt von einem BSD ab, also einer Unix-Variante.

pygospa@lalaith ~ % ls -ahl /usr
(...)
drwxr-xr-x   142 root  wheel   4,7K 29 Jul 15:45 libexec/
drwxr-xr-x     7 root  wheel   238B 16 Jun 04:02 llvm-gcc-4.2/
drwxrwxr-x     7 root  admin   238B 31 Jul 20:28 local/
drwxr-xr-x   268 root  wheel   8,9K 29 Jul 04:49 sbin/
drwxr-xr-x    57 root  wheel   1,9K 29 Jul 04:49 share/
(...)

Wie man sieht, sind alle Verzeichnisse in /usr der Gruppe wheel zugeordnet; /usr/local jedoch nicht; das liegt daran, dass das Installationsscript diese Gruppe noch nicht benutzt. Wenn man eh der Benutzer ist, der auch Zugriff auf den Administrator und den root-Account hat, dann sollte dieser Benutzer eh in der Gruppe wheel stecken. Ob der Benutzer schon in der Gruppe wheel steckt, kann man ganz einfach überprüfen:

pygospa@lalaith ~ % groups pygospa
staff everyone localaccounts

Mithilfe des dscl-Tools lässt sich der Nutzer der Gruppe wheel hinzufügen. Man muss dazu allerdings einen Administrator-Account nutzen (oder für den Benutzer in der /etc/sudoers Administrationsrechte zugeteilt bekommen haben). Hier wird der Administrationsaccount eru genutzt:

eru@lalaith ~ % sudo dscl . append /Groups/wheel GroupMembership pygospa
eru@lalaith ~ % groups pygospa
staff wheel everyone localaccounts

Mithilfe von chgrp lässt sich nun die Gruppe des local-Ordners ändern.

eru@lalaith ~ % sudo chgrp -R wheel /usr/local

Nach diesem Schritt lässt sich nun auch überprüfen, ob Homebrew fehlerfrei läuft:

pygospa@lalaith ~ % brew doctor
Your system is raring to brew.
brew doctor  8,89s user 3,88s system 81% cpu 15,763 total

Nun, endlich, lässt sich gcc installieren. Als erstes müssen wir dazu die sogenannten “formulas” aktualisieren, dies geschieht mit:

pygospa@lalaith /usr % brew update
Initialized empty Git repository in /usr/local/.git/
(...)
brew update  12,57s user 2,20s system 43% cpu 33,662 total

Wie man sieht, werden diese über ein git-Repository verwaltet, welches lokal angelegt wird. Als nächstes folgen die Installationen. Für die Ruby-Versionen unter rvm benötigen wir neben dem Compiler auch die Autotools:

pygospa@lalaith ~ % brew install autoconf automake
(...)
/usr/local/Cellar/automake/1.12.2: 129 files, 2,0M, built in 13 seconds
brew install autoconf automake  15,08s user 9,13s system 107% cpu 22,625 total

Da gcc-4.2 nicht Bestandteil des Haupt-Repositories ist, sondern teil des Homebrew-dupes, ist der Befehl zum installieren ein wenig umfangreicher (wir müssen das Repository mit eingeben):

pygospa@lalaith ~ % brew install  https://raw.github.com/Homebrew/homebrew-dupes/master/apple-gcc42.rb
(...)
All compilers have a `-4.2` suffix. A GFortran compiler is also included
and is the exact same version as the compiler provided by the `gfortran`
formula in the main repository.
==> Summary
/usr/local/Cellar/apple-gcc42/4.2.1-5666.3: 106 files, 75M, built in 4 seconds

Geschafft!

X Window System

Wie schon erwähnt, wird das X Window System von OS X nicht mehr mitinstalliert, von rvm aber benötigt. Das macht allerdings relativ wenig – im Vergleich zu den anderen Tools ist XQuartz ziemlich einfach, oder wie die Amerikaner sagen – pretty damn straight forward!

Einfach die Webseite besuchen, die aktuelle Version von XQuartz herunterladen, die DMG laden, und den Installationsassistenten ausführen – fertig!

Eine Kleinigkeit muss man aber noch wissen: Damit rvm das X Windows System findet, muss noch ein Flag gesetzt werden. Dieses wird von rvm genutzt um die Include-Dateien des X Window Systems zu finden:

pygospa@lalaith ~ % export CPPFLAGS=-I/opt/X11/include
pygospa@lalaith ~ % echo $CPPFLAGS
-I/opt/X11/include

Installieren von rvm und Ruby

Wie weiter oben schon einmal angedeutet, ist das Installieren von rvm ebenfalls sehr einfach, über einen Einzeiler erledigt:

pygospa@lalaith ~ % bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

In vielen Anleitungen findet man nun hinweise darauf, wie man nun die älteren Ruby-Versionen installieren kann:

CC=/usr/bin/gcc-4.2 rvm install <ruby version>

Dabei können die aktuelleren Versionen mit LLVM kompiliert werden (und sollten dies dann auch). Wer jetzt nicht für jede Version von Ruby extra googlen möchte, sollte lieber sein rvm auf den aktuellen Stand der Entwicklung bringen (installiert wurde lediglich der Stable-Release). Dieser Stand :

pygospa@lalaith ~ % rvm get head
(...)
Upgrade of RVM in /Users/pygospa/.rvm/ is complete.

# pygospa,
#
#   Thank you for using RVM!
#   I sincerely hope that RVM helps to make your life easier and more enjoyable!!!
#
# ~Wayne


rvm 1.14.10 (master) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]

RVM reloaded!

Damit ist rvm installiert. Wenn alle anderen Tools fehlerfrei installiert wurden, dann sollte es nun auch möglich sein, unterschiedliche Versionen von Ruby zu installieren:

pygospa@lalaith ~ % rvm list
rvm rubies
# No rvm rubies installed yet. Try 'rvm help install'.

pygospa@lalaith ~ % rvm install 1.8.7
Installing Ruby from source to: /Users/pygospa/.rvm/rubies/ruby-1.8.7-p370, this may take a while depending on your cpu(s)...
(...)
Install of ruby-1.8.7-p370 - #complete 
rvm install 1.8.7  88,85s user 19,99s system 92% cpu 1:57,79 total
pygospa@lalaith ~ % rvm install 1.9.3
(...)
pygospa@lalaith ~ % rvm install 1.9.3-head
(...)
pygospa@lalaith ~ % rvm list

rvm rubies

   ruby-1.8.7-p370 [ i686 ]
   ruby-1.9.3-head [ x86_64 ]
   ruby-1.9.3-p194 [ x86_64 ]

Mit dem Wechseln der aktuell verwendeten Ruby-Umgebung verifizieren wir nun noch einmal, das auch wirklich alles geklappt hat:

pygospa@lalaith ~ % rvm current
system
pygospa@lalaith ~ % rvm use 1.8.7
Using /Users/pygospa/.rvm/gems/ruby-1.8.7-p370
pygospa@lalaith ~ % rvm current
ruby-1.8.7-p370

Wunderbar! Nach dem Aufwand haben wir uns nun alle einen schönen Eiskaffe zuzüglich einem Nachmittag am Strand verdient 🙂

Zusammenfassung, oder auch: tl;dr

    Bemerkung:

Der Benutzer pygospa ist der Standard-Benutzer, der keine Administrationsrechte hat; eru wiederum hat Administrationsrechte, und bekommt über die Verwendung von sudo dann auch noch root-Rechte.

  1. Installieren vom X Window System:
    Das XQuartz-x.dmg Image von http://xquartz.macosforge.org herunterladen, und installieren. Nach der Installation:

    pygospa@lalaith ~ % export CPPFLAGS=-I/opt/X11/include
    
  2. Installieren von GCC:
    eru@lalaith ~ % /usr/bin/ruby -e "$(/usr/bin/curl -fsSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)"
    pygospa@lalaith ~ % su eru
    eru@lalaith ~ % sudo dscl . append /Groups/wheel GroupMembership pygospa
    eru@lalaith ~ % sudo chgrp -R wheel /usr/local
    eru@lalaith ~ % exit
    pygospa@lalaith ~ % brew update
    pygospa@lalaith ~ % brew install autoconf automake
    pygospa@lalaith ~ % brew install  https://raw.github.com/Homebrew/homebrew-dupes/master/apple-gcc42.rb
  3. Installation von rvm & Ruby:
    pygospa@lalaith ~ % bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
    pygospa@lalaith ~ % rvm get head
    pygospa@lalaith ~ % rvm install 1.9.3



Typische Fehlermeldungen

Dieser Bereich ist mehr für Suchmaschinen, falls jemand auf eine der typischen Fehlermeldungen trifft, auf die ich auch getroffen bin, und diese bei Google eingibt 😉

Kein GCC-4.2 installiert

pygospa@lalaith ~ % rvm install 1.8.7
Ruby (and needed base gems) for your selection will be installed shortly.
Before it happens, please read and execute the instructions below.
Please use a separate terminal to execute any additional commands.

Notes for Mac OS X 10.8, Xcode 4.4.

For MacRuby: Install LLVM first.

For JRuby: Install the JDK. See http://developer.apple.com/java/download/ # Current Java version “1.6.0_26”
For IronRuby: Install Mono >= 2.6
For Ruby 1.9.3: Install libksba # If using Homebrew, ‘brew install libksba’

To use an RVM installed Ruby as default, instead of the system ruby:

rvm install 1.8.7 # installs patch 357: closest supported version
rvm system ; rvm gemset export system.gems ; rvm 1.8.7 ; rvm gemset import system.gems # migrate your gems
rvm alias create default 1.8.7

And reopen your terminal windows.

Xcode and gcc:

Right now Ruby requires gcc to compile, but Xcode 4.2 and later no longer ship with gcc. Instead they ship with llvm-gcc (to which gcc is a symlink) and clang, neither of which are supported for building Ruby. Xcode 4.1 was the last version to ship gcc, which was /usr/bin/gcc-4.2.

Xcode 4.1 and earlier:
– Ruby will build fine.

Xcode 4.2 and later (including Command Line Tools for Xcode):
– If you have gcc-4.2 (and friends) from an earlier Xcode version, Ruby will build fine.
– If you don’t have gcc-4.2, you have two options to get it:
* Install apple-gcc42 from Homebrew
* Install osx-gcc-installer

Homebrew:

If you are using Homebrew, you can install the apple-gcc42 and required libraries from homebrew/dupes:

brew update
brew tap homebrew/dupes
brew install autoconf automake apple-gcc42
rvm pkg install openssl

This can live side by side with an existing Xcode 4.2+ install or Command Line Tools for Xcode.

osx-gcc-installer:

If you don’t use Homebrew, you can download and install osx-gcc-installer: https://github.com/kennethreitz/osx-gcc-installer.

Warning: Installing osx-gcc-installer on top of a recent Xcode is known to cause problems, so you must uninstall Xcode before installing osx-gcc-installer. Afterwards you may install Xcode 4.2+ or Command Line Tools for Xcode if you desire.

** NOTE: Currently, Node.js is having issues building with osx-gcc-installer. The only fix is to install Xcode over osx-gcc-installer.

Press ‘q’ to continue.
The provided compiler ‘/usr/bin/gcc’ is LLVM based, it is not yet fully supported by ruby and gems, please read `rvm requirements`.

Versuch, mittels CLANG zu installieren:
rvm install 1.8.7 -C –enable-pthread –with-gcc=clang

Building ‘ruby-1.8.7-p370’ using clang – but it’s not (fully) supported, expect errors.
(…)
Ruby ‘ruby-1.8.7-p370’ was built using clang – but it’s not (fully) supported, expect errors.
Please be aware that you just installed a ruby that requires 2 patches just to be compiled on up to date linux system.
This may have known and unaccounted for security vulnerabilities.
Please consider upgrading to Ruby 1.9.3-194 which will have all of the latest security patches.

X Window System nicht installiert, oder CPPFLAGS nicht gesetzt

Ausgabe auf der Konsole:

/usr/include/tkDecls.h:1240: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute

__’ before ‘Tk_GetBitmapFromObj’
/usr/include/tkDecls.h:1245: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
/usr/include/tkDecls.h:1356: error: expected ‘)’ before ‘*’ token
/usr/include/tkDecls.h:1362: error: expected ‘)’ before ‘*’ token
/usr/include/tkDecls.h:1387: error: expected declaration specifiers or ‘…’ before ‘GC’
/usr/include/tkDecls.h:1399: error: expected declaration specifiers or ‘…’ before ‘GC’
/usr/include/tkDecls.h:1413: error: expected declaration specifiers or ‘…’ before ‘Pixmap’
/usr/include/tkDecls.h:1420: error: expected declaration specifiers or ‘…’ before ‘XColor’
/usr/include/tkDecls.h:1448: error: expected declaration specifiers or ‘…’ before ‘Pixmap’
/usr/include/tkDecls.h:1524: error: expected ‘)’ before ‘*’ token
/usr/include/tkDecls.h:1621: error: expected declaration specifiers or ‘…’ before ‘Drawable’
/usr/include/tkDecls.h:1656: error: expected ‘)’ before ‘*’ token
/usr/include/tkDecls.h:1661: error: expected ‘)’ before ‘*’ token
/usr/include/tkDecls.h:1692: error: expected specifier-qualifier-list before ‘XColor’
make[1]: *** [stubs.o] Error 1
make: *** [all] Error 1

Ausgabe in der make.log:

Fail to find [tclConfig.sh, tkConfig.sh]
Use MacOS X Frameworks.

Find Tcl/Tk libraries. Make tcltklib.so which is required by Ruby/Tk.
clang -I. -I../.. -I../../. -I../.././ext/tk -DHAVE_RB_SAFE_LEVEL -DHAVE_RB_HASH_LOOKUP -DHAVE_RB_PROC_NEW -DHAVE_RB_OBJ_TAINT -DHAVE_ST_PTR -DHAVE_ST_LEN -DRUBY_VERSION=”1.8.7″ -DRUBY_RELEASE_DATE=”2012-06-29″ -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -DWITH_TCL_ENABLE_THREAD=0 -fno-common -g -O2 -fno-common -pipe -fno-common -c stubs.c
In file included from stubs.c:10:
/usr/include/tk.h:78:11: fatal error: ‘X11/Xlib.h’ file not found
# include
^
1 error generated.
make[1]: *** [stubs.o] Error 1
make: *** [all] Error 1

One thought on “OS X 10.8 + rvm + Ruby 1.8.7 = Pure Hell

Please comment. I really enjoy your thoughts!

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s