skip to Main Content

According to the rvm documentation at

https://rvm.io/rvm/install

it should be possible to install rvm, and subsequently a ruby, as a non-privileged user.

Under troubleshooting at

https://rvm.io/support/troubleshooting

it states:

Any user in the rvm group can update RVM, rubies, and gemsets. There
is never a reason to use sudo post-install.

rvm installs fine as a non-privileged user (There is no rvm group):

[email protected]:~$ bash ~/downloads/rvm_installer.sh stable
Downloading https://github.com/rvm/rvm/archive/1.29.12.tar.gz
Downloading https://github.com/rvm/rvm/releases/download/1.29.12/1.29.12.tar.gz.asc
...
Installing RVM to /<user-home>/.rvm/
...

However, when I try to install a ruby version, it fails (I think) trying to do an apt-get because it needs sudo privileges:

[email protected]:~$ rvm install 2.6.6
Searching for binary rubies, this might take some time.
Found remote file https://rvm_io.global.ssl.fastly.net/binaries/ubuntu/20.04/x86_64/ruby-2.6.6.tar.bz2
...
Updating system... password required for 'apt-get --quiet --yes update': 
.
Error running 'requirements_debian_update_system ruby-2.6.6',
please read /<user-home>/.rvm/log/1659735568_ruby-2.6.6/update_system.log
Requirements installation failed with status: 1.

From the log:

2022-08-05 21:39:28] requirements_debian_update_system
requirements_debian_update_system ()
{
    __rvm_try_sudo apt-get --quiet --yes update || {
        typeset __ret=$?;
        case ${__ret} in
            100)
                rvm_error "There has been an error while updating your system using `apt-get`.
It seems that there are some 404 Not Found errors for repositories listed in:

    /etc/apt/sources.list
    /etc/apt/sources.list.d/*.list

apt-get update (as a user with sudo privileges) shows no errors.

How is one supposed to install rvm so a non-privileged user can install a version of ruby?

2

Answers


  1. Chosen as BEST ANSWER

    Casper's answer above provided the missing information; there were some missing libraries. However, the steps required to be able to install as an unprivileged user were rather un-intuitive (to me, at least):

    1. Install rvm using sudo; in that process it creates the "rvm" group.

    2. Add the desired users to the rvm group Note: Attempting to install a ruby as an unprivileged user after this step still fails.

    3. sudo to root to get the rvm magic paths installed for root, then start installing a ruby, but kill the process after the requirements installation is complete.

    4. Log in as the desired unprivileged user and use rvm to install the desired ruby for that user.

    Cmds:

    sudo rvm_installer.sh stable
    sudo usermod -a -G rvm the-user
    sudo -i
    rvm install 2.6.6
        Searching for binary rubies, this might take some time.
        Found remote file https://rvm_io.global.ssl.fastly.net/binaries/ubuntu/20.04/x86_64/ruby-2.6.6.tar.bz2
        Checking requirements for ubuntu.
        Installing requirements for ubuntu.
        Updating system..
        Installing required packages: g++, gcc, autoconf, automake, bison, libffi-dev, libgdbm-dev, libncurses5-dev, libsqlite3-dev, libtool, libyaml-dev, make, pkg-config, sqlite3, libgmp-dev, libreadline-dev......................|
        Requirements installation successful.
        ^C
    exit
    sudo -i -u the-user
    rvm install 2.6.6
    

  2. My guess is your system is missing some basic system libraries for buiding Ruby from source. Hence RVM tries to fetch the build libraries for you. This will be a one-time update, and after your system has the proper libraries installed, RVM will not require sudo again.

    However if you want you can disable apt updating completely with:

    rvm autolibs disable 
    

    Note that if you have missing build requirements, then the build step of Ruby will quite likely fail. Only way to find out is to try.

    In that case you can use the requirements command to help you install missing dependencies:

    rvm requirements
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search