I tried:
if ! command -v ruby &> /dev/null
then
# - proverbot's version
# First, install Ruby, as that is for some reason required to build
# the "system" project
# git clone https://github.com/rbenv/ruby-build.git ~/ruby-build
# mkdir -p ~/.local
# PREFIX=~/.local ./ruby-build/install.sh
# ~/.local/ruby-build 3.1.2 ~/.local/
# - u-pycoq's version
# sudo apt-get install ruby-full
sudo apt-get install rbenv
rbenv init
eval "$(rbenv init - bash)"
echo 'eval "$(rbenv init - bash)"' >> ~/.bashrc
sudo apt-get install ruby-build
# ruby-build 3.1.2
rbenv install 3.1.2
rbenv global 3.1.2
ruby -v
else
echo "Error: failed to install ruby"
fi
but I get my ruby build is not up to date perhaps but when I install it -- it is up to date. Therefore, why is the proverbot's attempt 3.1.2 if it doesn't exist?
inspired from: https://superuser.com/questions/340490/how-to-install-and-use-different-versions-of-ruby
Seems it works with 2.7.1 but not with 3.1.2
sudo apt-get install rbenv
rbenv init
eval "$(rbenv init - bash)"
echo 'eval "$(rbenv init - bash)"' >> ~/.bashrc
sudo apt-get install ruby-build
# mkdir -p ~/.local
# PREFIX=~/.local
# sh ~/ruby-build/install.sh
mkdir -p ~/.local
ruby-build 2.7.1 ~/.local
rbenv global 2.7.1
# ruby-build 2.3.1p112 ~/.local/
# ruby-build 3.1.2 ~/.local/
# rbenv global 3.1.2
ruby -v
bot@513314bdda2a:~/ruby-build$ ruby -v
ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [aarch64-linux-gnu]
Main command that fails
I think this is the main command that fails after rbenv and ruby-build are installed:
rbenv install 3.1.2
with
ruby-build: definition not found: 3.1.2
See all available versions with `rbenv install --list.
If the version you need is missing, try upgrading ruby-build.` will add it to the question.
Might my version of ubuntu be the issue?
I tried it in a different server outside my docker container and ruby works. In the docker container it says it's:
bot@513314bdda2a:~/ruby-build$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
is that an issue?
I tried updating ruby-build
I ran sudo apt-get update
then sudo apt-get upgrade ruby-build
then mkdir -p ~/.local
then ruby-build 3.1.2 ~/.local/
and the error is ruby-build: definition not found: 3.1.2
Tried a bunch of ubuntus but failed
#!/usr/bin/env bash
# - get ubuntu version for ubuntu img
#docker run -it --rm ubuntu:20.04 /bin/bash
docker run -it --rm ubuntu:18.04 /bin/bash
apt-get update && apt-get install -y lsb-release && apt-get clean all
lsb_release -a
#apt-get install git
apt-get update
apt-get upgrade ruby-build
apt-get install rbenv
apt-get install ruby-build
rbenv install 3.1.2
# - get ubuntu version for miniconda3 docker img
docker run -it --rm continuumio/miniconda3:latest /bin/bash
#sudo apt-get install lsb-release
#apt-get install lsb-release
apt-get update && apt-get install -y lsb-release && apt-get clean all
lsb_release -a
Output of ruby-build https://gist.github.com/brando90/8a40e83df107f5a915ba105d9fb0121c
$ ruby-build --definitions
1.8.5-p52
1.8.5-p113
...
gist is that all 3.x.x are missing.
Tried updating ruby-build manually but failed
I did do:
git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
then
git -C "$(rbenv root)"/plugins/ruby-build pull
then I installed 3.1.2 with rbenv it seemed to succeed but then ruby --version doesn't seem right?
bot@e3a50e4f740f:~$ rbenv install 3.1.2
To follow progress, use 'tail -f /tmp/ruby-build.20221207002433.1304.log' or pass --verbose
Downloading ruby-3.1.2.tar.gz...
-> https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.2.tar.gz
Installing ruby-3.1.2...
Installed ruby-3.1.2 to /home/bot/.rbenv/versions/3.1.2
bot@e3a50e4f740f:~$
bot@e3a50e4f740f:~$
bot@e3a50e4f740f:~$
bot@e3a50e4f740f:~$ ruby --version
ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [aarch64-linux-gnu]
bot@e3a50e4f740f:~$ rbenv global 3.1.2
bot@e3a50e4f740f:~$ ruby --version
ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [aarch64-linux-gnu]
Option: Official rbenv instructions
alas, that didn't work :frowning:
$ rbenv install 3.1.2
rbenv: no such command `install'
I did:
mkdir ~/.rbenv
cd ~/.rbenv
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'eval "$(~/.rbenv/bin/rbenv init - bash)"' >> ~/.bashrc
bash
# exec $SHELL
rbenv install 3.1.2
using the official instructions: https://github.com/rbenv/rbenv#basic-git-checkout
Probably best to use a ruby docker container? But how do I get one with the specific version I want 3.1.2 (or any specific version)?
refs:
- cross: https://www.reddit.com/r/ruby/comments/zeimmr/why_cant_i_install_ruby_312_in_linux_docker/
- all attempts documented here: https://github.com/brando90/ultimate-utils/blob/master/tutorials_for_myself/my_bash/ruby_install_ubuntu.sh
- discord for ruby was really helpful even though we didn't solve it: https://discord.com/channels/518658712081268738/650031651845308419
CodePudding user response:
This doesn't work on an ubuntu docker container which is the title of the question, but it at least worked on the HPC with Ubuntu I was using, so it can still be useful for future readers, a real anser on a ubuntu docker container is still needed and wanted
# - install rbenv for installing ruby
mkdir ~/.rbenv
cd ~/.rbenv
git clone https://github.com/rbenv/rbenv.git .
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc.user
echo 'eval "$(rbenv init -)"' >> ~/.bashrc.user
exec $SHELL
bash
source ~/.bashrc.user
rbenv -v
# - install ruby-build
mkdir ~/.ruby-build
cd ~/.ruby-build
git clone https://github.com/rbenv/ruby-build.git .
export PATH="$HOME/.ruby-build/bin:$PATH"
echo 'export PATH="$HOME/.ruby-build/bin:$PATH"' >> ~/.bashrc.user
exec $SHELL
bash
source ~/.bashrc.user
ruby-build --version
# - install ruby without sudo -- now that ruby build was install
mkdir -p ~/.local
# ruby-build 3.1.2 ~/.local/
rbenv install 3.1.2
rbenv global 3.1.2
ruby -v
which ruby
CodePudding user response:
Given the giant effort I've put so far I think the best is just to re-build the docker image from scratch starting from all the docker images you need. For me I need to start from these:
FROM continuumio/miniconda3
# FROM --platform=linux/amd64 continuumio/miniconda3
#FROM ubuntu:20.04
#FROM ubuntu:18.04
FROM ruby:3.1.2
but re-building the image I tested to see if the right ruby image was available once I started the ruby 3.1.2 container (if you want a different one I assume going to the docker website for ruby works or try different version tags or do latest). Output:
(meta_learning) brandomiranda~ ❯ docker run -it --rm ruby:3.1.2 bash
Unable to find image 'ruby:3.1.2' locally
3.1.2: Pulling from library/ruby
077c13527d40: Pull complete
a3e29af4daf3: Pull complete
3d7b1480fa4d: Pull complete
426e8acfed2a: Pull complete
7301bf329e1e: Pull complete
1e6ce022773b: Pull complete
08fd3b7f7d99: Pull complete
2a797222ff77: Pull complete
Digest: sha256:7681a3d37560dbe8ff7d0a38f3ce35971595426f0fe2f5709352d7f7a5679255
Status: Downloaded newer image for ruby:3.1.2
root@70d03f6408cd:/# ruby --version
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [aarch64-linux]