Is it possible to reinstall/fix Mac OS X's system ruby without doing a complete OS reinstall?

Is it possible? I'm running into various issues at least once a week since it got corrupted or something, especially with homebrew.

If it is possible, but would just be a better idea to start from a clean slate, please let me know.


Solution 1:

In my understanding -- please correct me if I am wrong -- you don't have to reinstall all of Mac OS X to reinstall your system Ruby. As you may know, the System Ruby lives in /System/Library/Frameworks/Ruby.framework/. If that folder is deleted or corrupted, or if the symlinks that point to it are deleted or changed, you won't have a working System Ruby install.

To fix, try this:

  1. Insert your Mac OS X Install DVD
  2. Open the Mac OS X Install DVD folder
  3. Open the Optional Installs folder
  4. Open the Xcode Tools folder
  5. Open the XcodeTools package. This will start the Xcode Tools Installer. Follow the instructions.

It also doesn't hurt to get the latest Xcode from http://developer.apple.com/technologies/xcode.html

Full disclosure: I have done these steps. I'm pretty sure it restores the Ruby.framework, but it has not restored the symlinks (typically in /usr/bin) for me.

Solution 2:

If you use Pacifist then it's possible to just reinstall Ruby.

  1. Insert your OS X DVD
  2. Run Pacifist
  3. Select "Open Apple Install Discs"
  4. Select the disc
  5. Search "Ruby.framework"
  6. Right click and select "Install to Default Location"

This will reinstall Ruby, to setup the symlinks from /usr/bin to point to it use Pacifist again:

  1. Search "Contents of BSD.pkg"
  2. Open: usr -> bin
  3. Select the links and files that you require
    • cap
    • capify
    • erb
    • ferret-browser
    • gem
    • gpgen
    • irb
    • mongrel_rails
    • rails
    • rake
    • rb-keygen
    • rdoc
    • redcloth
    • ri
    • ruby
    • testrb
    • update_rubygems
  4. Right click and select "Install to Default Location"

In general if you need to figure out what installer a file came from on your system in a terminal:

$ pkgutil --file-info /usr/bin/ruby
volume: /
path: usr/bin/ruby

pkgid: com.apple.pkg.BSD
pkg-version: 10.5.0.1.1.1188305148
install-time: 1203610823
uid: 0
gid: 0
mode: 120755

The pkgid should then give you a hint, and then you either find that installer and run it again or use Pacifist to selectively do it.

You can also see what other files are in that package with:

$ pkgutil --files com.apple.pkg.BSD
.
Library
Library/Documentation
Library/Documentation/Commands
Library/Documentation/Commands/grep
...

I've found the best way to deal with Ruby on OS X is to get your system to the default state with the above process. Remove any MacPort, Fink or versions you have manually compiled. Install RVM and use that to manage installing newer versions.


Turns out that I had removed my system Ruby and had problems installing pow (http://pow.cx) on my mac because of it. So I installed Pacifist and followed the advice in this post and am back in business. Thanks!

Solution 3:

Old post, but I was just switching from ports to homebrew so...

For homebrew issues, I resolved it by installing rvm and symlinking. So if you have rvm installed you can can start by typing:

which ruby

with the output of that do something like:

ln -s /Users/username/.rvm/rubies/ruby-1.9.2-p290/bin/ruby /usr/bin/ruby

Solution 4:

I made a real mess of my Ruby installation on OSX but I used this GUI from the RVM team and managed to resolve it with little effort and no hacking around on a CLI

http://jewelrybox.unfiniti.com