21

Based on my previous thread : RVM installed by Ruby not working? where i had installed RVM using the root user, I then had to entirely remove the RVM install and now i am installing as a user.

So i did :

  1. Create a new user by doing : useradd newuser
  2. Follow the instructions on the RVM website and execute the command : bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )

Now, i get the error : mkdir: cannot create directory `/usr/local/rvm': Permission denied

The new user i created does not have access to this directory. I manually tried creating the folder but the same error. Please help.

EDIT : The original problem occured because i did not restart the terminal and it was still using the old settings.

Now, I got a new problem : After installing RVM, i cannot run it and it gives me an error : rvm command not found.

Here is the output of my ~/.bash_profile

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"  # This loads RVM into a shell session.

And here is output from ~/.bashrc file

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"  # This loads RVM into a shell session.
Community
  • 1
  • 1
YD8877
  • 10,401
  • 20
  • 64
  • 92
  • What happens when you give the user write permission to the directory he's trying to use? – jdl Mar 09 '11 at 23:48
  • do you get this error when you run the bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head ) command or when you execute a command after? – rogermushroom Mar 09 '11 at 23:58
  • I get it when i run the command bash < <( curl rvm.beginrescueend.com/releases/rvm-install-head ) – YD8877 Mar 10 '11 at 00:03
  • As i look into the /usr/local folder, it is owned by the root user. I do not understand then. Why am i supposed to install RVM as a normal user as suggested to me in this thread : http://stackoverflow.com/questions/4911504/rvm-installed-by-ruby-not-working – YD8877 Mar 10 '11 at 00:05

12 Answers12

68

mkdir: cannot create directory `/usr/local/rvm': Permission denied

If you've run the rvm installer as root previously, remove /usr/local/rvm and /etc/rvmrc.

tristan
  • 1,021
  • 1
  • 8
  • 9
  • 8
    The problem was rvm_path that was set to /usr/local in /etc/rvmrc – Philippe Rathé Jun 27 '11 at 18:11
  • Just a heads up, this doesn't work if you install the RVM Ubuntu 11.10 package. – James McMahon Mar 05 '12 at 16:01
  • 8
    Worked for me too. Just don't forget to exit the shell and log in again before trying to install again. – Jordan Jul 27 '12 at 04:25
  • Yes, RVM is broken with a global install. You can fight it and manhandle file permissions or just rip it out and have lots of duplication and let it do it's thing. – fijiaaron Oct 29 '12 at 09:45
  • 2
    I also had to remove /etc/profile.d/rvm.sh http://stackoverflow.com/questions/9555868/how-can-i-get-rid-of-something-running-on-every-new-terminal-session – johnmartirano Jul 25 '13 at 20:32
  • And you need to restart your shell session: http://stackoverflow.com/questions/14153005/rvm-installation-usr-local-rvm-permission-denied-before-this-i-deleted-ho – MatthiasFranz Mar 05 '15 at 10:15
18

RVM is easy to install, but you are making it harder by trying to mix and match installation types. You do NOT need to create a new user. When run, RVM will create a directory in your home directory: ~/.rvm, and install everything inside it. That means you will have all the correct permissions. You do NOT need to be running as root, you do NOT need to use sudo. I'd recommend closing all your command-lines and open one fresh and start at your home directory. If you are running as root, log out, and log back in to your normal account. For a single-user install you do NOT need to be root.

For a single user, using RVM as their Ruby sandbox, use the single-user installation docs. Follow ALL the instructions on that page, INCLUDING the "Post Install" section.

Close your terminal window, and reopen it. If you have correctly followed the instructions above, typing rvm info should spit out a template of what is to come once you install a Ruby instance. If you see nothing output, or get an error, then retrace your steps in the "Post Install" section, and go through the "Troubleshooting" section. Most of the problems people have occur because they didn't bother to read the directions.

Once RVM is installed, type rvm notes and read what dependencies you need to install. If you do not add those files your Rubies installed will be missing functionality. They will work, but some of the creature comforts you'll hear about won't work and you will wonder why.

After installing the dependencies you should be in good shape to install Rubies. Type rvm list known for all the Rubies RVM can install. If you want 1.8.7 type rvm install 1.8.7, and, similarly, rvm install 1.9.2 for Ruby 1.9.2. If you want a particular revision you can add that, based on the ones in the list.

It's important to periodically update RVM using rvm get head. That will add features, fix bugs, and tell RVM about new versions of Ruby it can install if you request.

After installing a Ruby, type rvm list and it should show up in the list, looking something like this:

rvm rubies

   ruby-1.8.7-p334 [ x86_64 ]
   ruby-1.9.2-p180 [ x86_64 ]

Type rvm use 1.9.2 --default to set a default Ruby that will be sticky between logins. Use the version of whatever Ruby you want to default to if 1.9.2 doesn't float your boat. Once you've defined a default it should look something like:

rvm rubies

   ruby-1.8.7-p334 [ x86_64 ]
=> ruby-1.9.2-p180 [ x86_64 ]

Before you begin installing gems into a RVM-managed Ruby, read "RVM and RubyGems ", in particular the part that says "DO NOT use sudo... ". I repeat. Do NOT use sudo to install any gems, in spite of what some blog or web page says. RVM's author knows better when it comes to working with RVM controlled Rubies. That is another mistake people use with RVM, again as a result of not reading the directions.

On Mac OS, you'll need the latest version of XCode for your OS. Do NOT use the XCode that came with Snow Leopard on the DVD. It is buggy. Download and install a new version from Apple's Developer site. It's a free download requiring a free registration. It's a big file, approximately 8GB, so you'll want to start it and walk away. Install XCode, and you should be ready to have RVM install Rubies.

Finally, RVM installs easily, as will the Rubies you ask it to install. I have it on about four or five different machines and VMs on Mac OS, Ubuntu and CentOS. It takes me about a minute to install it and another minute to configure it and start installing a new Ruby. It really is that easy.

the Tin Man
  • 158,662
  • 42
  • 215
  • 303
  • Okay, i followed the instructions off the RVM website. And now i am getting bash: rvm: command not found after installing RVM and updating the ~/.bash_profile file and restarting the terminal too :( – YD8877 Mar 10 '11 at 00:46
  • @WarDoGG, Append the end of your `~/.bash_profile` showing where you've added the line to your startup to your original question. Also append the output of `echo $PATH`. Your path should show `~/.rvm` as the first entry. – the Tin Man Mar 10 '11 at 00:52
  • This is the output of echo $PATH : /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin – YD8877 Mar 10 '11 at 00:53
  • This is what i have added at the end of ~/.bash_profile : [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # This loads RVM into a shell session. – YD8877 Mar 10 '11 at 00:54
  • Please add updates to the end of your original question by re-editing it. That way everything is in one place when we see your progress, instead of having to look everywhere on the page. – the Tin Man Mar 10 '11 at 00:56
  • @WarDoGG, if you look at your PATH, you can see RVM did not initialize, so something in your .bash_profile is blocking it. That is covered in the installation page on the RVM site, under troubleshooting, so you didn't follow the directions. Please do so. – the Tin Man Mar 10 '11 at 00:57
  • Thanks. I added the output of my ~/.bash_profile in my original question. – YD8877 Mar 10 '11 at 01:04
  • @WarDoGG, what do you get when you type `ls ~/.rvm`? Do you get a list of files and directories, or do you get an error? What OS are you running, what shell, and are you logged in as you, or as root? – the Tin Man Mar 10 '11 at 01:10
  • @WarDoGG, from looking at your pasted PATH, you're running as root. REREAD the first paragraph in my answer. – the Tin Man Mar 10 '11 at 01:14
  • I do not have any other account on my linux box other than root. I never use sudo and never use su. – YD8877 Mar 10 '11 at 01:49
  • That is why i had to create a new user account. – YD8877 Mar 10 '11 at 01:49
  • ls ~/.rvm gives me files in my ~/.rvm folder which are actually located under /home/newuser/.rvm typing whoami at the command prompt says newuser – YD8877 Mar 10 '11 at 01:50
  • 1
    @WarDoGG, "I do not have any other account on my linux box other than root. I never use sudo and never use su." O.M.G. That is such a bad idea. Do NOT run a Unix or Linux box as root unless you have a really good reason and the knowledge of why you should be doing that. Jumping in and out to do maintenance is OK, but not for normal use. That said, being logged-in as your normal user, *NOT* root, and installing RVM as that user should fix things. – the Tin Man Mar 10 '11 at 03:00
6

I solved this by adding

export rvm_path=~/.rvm

to ~/.bash_profile

glebtv
  • 3,739
  • 1
  • 22
  • 10
6

I had the original issue reported in this question, "mkdir: cannot create directory `/usr/local/rvm': Permission denied" when trying to install rvm.

This is my scenario and how I solved it - maybe this will help others with this same issue.

I have Ubuntu 11.04 installed on a laptop, I only have 1 user, the one I created at install time, named nathan. When I would try to install rvm as nathan, the rvm installer saw me as root and kept trying to install rvm globally, but since I wasn't really root, it couldn't get access to create directories in /usr/local/rvm.

I'm far from an expert with Ubuntu, so I'm sure there are easier/better ways to accomplish the things I did (and I would love to learn about them), but this worked for me:

  1. I created a new user called rubydev
  2. I logged in as rubydev, opened a terminal and typed:

    rubydev~$ bash < <(curl -B http://rvm.beginrescueend.com/install/rvm)
    
  3. rvm installed correctly and I logged out of rubydev

  4. Signed back in as nathan, opened a terminal and typed "su" (you could do all this with sudo, I am lazy)
  5. After successfully getting root, I typed the following commands:

    root: /home/nathan# cp -R /home/rubydev/.rvm .
    
    root: /home/nathan# chown -R nathan .rvm
    
    root: /home/nathan# chgrp -R nathan .rvm
    
    root: /home/nathan# exit
    
    nathan~$ echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bash_profile
    
    nathan~$ echo 'export rvm_path="/home/nathan/.rvm"' > ~/.rvmrc
    
    nathan~$ source .bash_profile
    
  6. At this point, rvm was correctly installed under my home directory. To verify I typed:

    nathan~$ type rvm | head -1
    rvm is a function (if you don't get this response, something else is wrong)
    
  7. Read the notes and installed any dependencies

    nathan~$ rvm notes
    
  8. I installed some rubies

    nathan~$ rvm install 1.8.7-head
    nathan~$ rvm install 1.9.2-head
    
  9. Verified install

        nathan~$ rvm list
    
        rvm rubies
            ruby-1.8.7-head [x86_64]
            ruby-1.9.2-head [x86_64]
    
        nathan~$ rvm use 1.9.2
        using /home/nathan/.rvm/gems/ruby-1.9.2-head
    
        nathan~$ rvm list
    
        rvm rubies
           ruby-1.8.7-head [x86_x64]
        => ruby-1.9.2-head [x86_x64]
    
  10. Finally, I edited the preferences on the terminal itself to ensure the "Run command as as login shell" under the "Title and Command" tab was checked. It seems .bash_profile isn't otherwise processed.

  11. I removed the rubydev user I created in step 1.

With all of that, I have a working rvm under Ubuntu 11.04 using my preferred username.

Nathan Ratcliff
  • 1,392
  • 12
  • 15
5

If you first installed RVM as root and then uninstalled it. And now you are trying to install it as a non sudo user and you're getting the following error:

mkdir: cannot create directory `/usr/local/rvm': Permission denied

Make sure that you have logged out of the root session before trying to install under the user.

Scott Bartell
  • 2,801
  • 3
  • 24
  • 36
2

For me running

__rvm_unload

Worked first, this was due to the fact that I had rvm installed as for multiuser.

Calin
  • 6,661
  • 7
  • 49
  • 80
2

If you installing RVM as a user then the RVM folder should be generated in your home directory:

~/.rvm 

Where there should be no permissions problems at all.

I would suggest it is picking up some old config that is left over from your system installation.

Ensure there is no /etc/rvmrc or $HOME/.rvmrc file left over because it might be using previously initialised variables from these files to construct an incorrect installation path.

if we look at this section of the bash script:

if [[ ${rvm_ignore_rvmrc:-0} -eq 0 ]]; then
  for file in /etc/rvmrc "$HOME/.rvmrc  " ; do
    if [[ -s "$file" ]] ; then
      source $file
    fi
  done
fi

It is trying to find one of these files, if it finds one if will run it possibly initialising rvm_path which will subsequently not be set as $HOME/.rvm by this command

rvm_path="${rvm_path:-"$HOME/.rvm"}"
rogermushroom
  • 5,486
  • 4
  • 42
  • 68
  • Thanks alot for the suggestion. I did restart my terminal and i could install RVM but now, i am getting bash: rvm: command not found after installing RVM and updating the ~/.bash_profile file and restarting the terminal too :( – YD8877 Mar 10 '11 at 00:46
  • Ensure the rvm script exists in ~/.rvm/scripts directory if not there is something wrong with your installation. Then add this to your ~/.bash_profile and ~/.bashrc [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" (one should work), then restart your temrinal again – rogermushroom Mar 10 '11 at 00:56
  • I added the output of my ~/.bash_profile in my original question. – YD8877 Mar 10 '11 at 01:03
2

I had the same issue. When I tried to create a gemset I would get a permission denied error. I just forgot to run the "rvm use 1.8.7" command first. After that I was able to create and use the gemset without any problems.

Diego
  • 21
  • 1
2

In lasts versions of rvm you need remove /etc/profile.d/ also.

This happen often if you try to install as root and then try again as a regular user.

Hope this help.

johananp
  • 21
  • 2
2

Look for file rvm.sh below /etc directory (It may be in /etc, or /etc/init.d). Also, try some grep rvm /etc -r, so you can find some files/lines which prevent you from installing rvm in your $HOME dir.

kaineer
  • 21
  • 1
0

If you installed rvm as root and you are getting permission denied issues (maybe you are deploying with capistrano as a non root user) then you could try rvm fix-permissions after doing things like rvm install 2.2.2 as root and creating a gemset as root.

Jason R
  • 2,085
  • 20
  • 12
0

Scott Bartell's solution worked for me. i am on a Digital Ocean premade image, where they had already setup rvm as root. 1. deleted /etc/rvmrc . 2. added export rvm_path=~/.rvm to ~/.bash_profile 3. logged out of ssh session to virtual machine 4. logged back in and presto!

would have commented but rep is 3 points too low :)