Installing RVM

The install process is very easy, and is the very same for any distro, including Archlinux. You have two choices, one system-wide, another as a user. The first is for production servers, or if your are alone on your machine. You'll need root privileges. The second is the recommended for multiple users on the same machine (like a development test box). If you do not know which to choose, start with a single user installation.

The upstream instructions for installing RVM should just work. The install script is aware enough to tell you what packages you need to install on Archlinux to make different rubies work. This usually involves gcc and some other stuff needed to compile ruby.

As an observation, installing RVM with gem is not recommended anymore. This article uses the recommended documentation with minor tweaks to make work on Archlinux.

Pre-requisites

Before starting, you will need the following to get the installation process going:

$ pacman -S git curl

Single-user installation

Note: This will install to your home directory only (~/.rvm), and won't touch the standard Arch ruby package, which is in /usr.

For most purposes, the recommended installation method is single-user, which is a self-contained RVM installation in a user's home directory.

Use the script that rvm docs recommends to install. Make sure to run this script as the user for whom you want RVM installed (i.e. your normal user that you use for development).

After the script has finished, add yourself and your users to the 'rvm' group. (The installer does not auto-add any users to the rvm group. Admins must do this.) For each one, repeat:

$ sudo usermod -a -G rvm <user>

Group memberships are only evaluated at login time. Log the users out, then back in. You too: close out your current shell or terminal session and open a new one. (You may attempt reloading your ~/.bash_profile with the following command:

$ source ~/.bash_profile

However, closing out your current shell or terminal and opening a new one is the preferred way for initial installations.)

RVM will be automatically configured for every user on the system (in opposite to the single-user installation); this is accomplished by loading /etc/profile.d/rvm.sh on login. Archlinux defaults to parsing /etc/profile which contains the logic to load all files residing in the /etc/profile.d/ directory.

You only use the sudo command during the install process. In multi-user configurations, any operations which require sudo access must use the rvmsudo command which preserves the RVM environment and passes this on to sudo. There are very few cases where rvmsudo is required once the core install is completed, except for when updating RVM itself. There is never a reason to use sudo post-install. rvmsudo should only be needed for updating with

$ rvmsudo rvm get head

In order to prevent the installation breakage by this cause, you may add this configuration to your /etc/sudoers file:

Post Installation

If you receive rvm: not found, you may need to source your ~/.bash_profile (or wherever you put the line above):

$ . ~/.bash_profile

Check if the rvm function is working:

$ rvm notes

Finally, see if there are any dependency requirements for your installation by running:

$ rvm requirements

(Follow the returned instructions if any.)

Very important: whenever you upgrade RVM in the future, you should always run rvm notes and rvm requirements as this is usually where you will find details on any major changes and/or additional requirements to ensure your installation stays working.

Some extras

You may put in your ~/.bashrc the following lines to get some useful features:

Using RVM

The RVM documentation is quite comprehensive and explanatory. However, here are some RVM usage examples to get you started.

Installing an environment

To see what Ruby environments are available to install, run:

$ rvm list known

To install one, run:

$ rvm install

For example, to install Ruby 1.8.7 one would run the following command:

$ rvm install 1.8.7

This should download, configure and install Ruby 1.8.7 in the place you installed RVM. For example, if you did a single user install, it will be in ~/.rvm/rubies/1.8.7.

Switching Environment

To switch from one environment, to another simply run:

$ rvm use

For example to switch to Ruby 1.8.7 one would run the following command:

$ rvm 1.8.7

You should get a message telling you the switch worked. It can be confirmed by running:

$ ruby --version
ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-linux]

Note that this environment will only be used in the current shell. You can open another shell and select a different environment for that one in parallel. Also, the default environment will be the system ruby in /usr. This can be changed using RVM if you wish; for more details consult the RVM documentation.

The ASCII arrow indicates which environment is currently enabled. In this case, it is Ruby 1.8.7. This could be confirmed by running:

$ ruby --version
ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-linux]

RVM update

Simply use:

$ rvm update

Revert the default ruby to system ruby

If you want to use the system ruby, i.e. the one installed in /usr by the standard Archlinux package, run

$ rvm use system

Further Reading

This is just a simple introduction to switching ruby versions with RVM. There is lots more that you can do with it, including managing different set of gems in different environments. For more information, consult the very comprehensive RVM documentation. This page is a good place to start.

Troubleshooting

You'll need to take care with rvm installations, since ArchLinux is very well updated, and some earlier ruby's patchlevels do not like it. RVM many times do not choose the latest patchlevel version to install, and you'll need to check manually on the ruby website, and force RVM to install it.

"data definition has no type or storage class"

This appears to be specific to 1.8.7, but if you get this error while compiling the following steps will fix your problem:

The patchlevels >p378 have a problem with gem paths, when $GEM_HOME is set. The problem is known and fixed in 1.9.2. (http://redmine.ruby-lang.org/issues/3584). If you really need 1.9.1 please use p378.