Kategorien
Tutorials

Ruby unter Ubuntu installieren

Viele Anwendungen wie Redmine setzen ein installiertes Ruby als Programmiersprache voraus. Es gibt verschiedene Wege um Ruby unter Ubuntu zu installieren. Einige gängige Wege möchte ich in dieser Anleitung vorstellen.

Getestet wurde dieser Artikel unter Ubuntu Server 20.04 und RVM 1.29.11.

Ruby über Paketquellen installieren

Der denkbar einfachste Weg Ruby unter Ubuntu zu installieren ist der Weg über die Paketquellen:

sudo apt install ruby

Das hat aber den entscheidenden Nachteil, dass man an die Ruby-Version gebunden ist, die das Betriebssystem mitbringt. In diesem Beispiel etwa Ruby 2.7.0:

Ubuntu ruby --version
Über die Paketquellen von Ubuntu 20.04 wird Ruby in der Version 2.7.0 installiert.

Zur Zeit der Entstehung des Artikels (Januar 2021) gab es allerdings schon seit fast einem Jahr Ruby 2.7.1 oder seit drei Monaten Ruby 2.7.2. Von Ruby 3.0.0 ganz zu schweigen.

Auch eine ältere oder eine ganz bestimmte Version von Ruby kann nicht installiert werden. Das ist besonders ärgerlich, wenn eine Anwendung eine bestimmte Ruby-Version voraussetzt und wenig Spielraum lässt.

In diesem Thread geht es zwar um PHP und nicht um Ruby, er erklärt aber dennoch sehr gut die Problematik mit veralteten Paketen unter Ubuntu.

Es zeigt sich also, dass der Weg über die Paketquellen zwar sehr bequem, aber mit einigen Einschränkungen verbunden ist.

Ruby als snap installieren

Auf der offiziellen Ruby-Homepage ist folgendes zu lesen:

Snap ist ein von Canonical entwickeltes Paketierungssystem, das es erlaubt, ein Programm einschließlich seiner Abhängigkeiten für viele Linux-Distributionen zu verteilen. Damit wird das Problem behoben, dass ein Nutzer die aktuelle Ruby-Version nicht aus dem Standard-Repositorium seines Systems (wie rpm oder apt) installieren kann.

https://www.ruby-lang.org/de/news/2018/11/08/snap/

Es löst also das weiter oben beschriebene Problem, dass eine veraltete Version von Ruby installiert werden muss und kein Update möglich ist. Auch eine ältere Version von Ruby kann installiert werden.

Das offizielle snap Packet ist hier zu finden: https://snapcraft.io/ruby

snap installieren

Die Installation ist denkbar einfach:

sudo snap install ruby --classic

Der oben genannte Befehl installiert die neueste verfügbare Version von Ruby:

Ubuntu Ruby snap installieren
Als snap lässt sich auch eine aktuelle Version von Ruby unter Ubuntu installieren.

Möchte man stattdessen eine bestimmte Version von Ruby installieren, ist dies auch möglich. Mit diesem Befehl installiere ich beispielsweise die neueste Version von Ruby 2.7:

sudo snap install ruby --classic --channel=2.7/stable

Ruby-Version wechseln

Möchte man nachträglich den Channel, also die Version von Ruby ändern, ist dies wie folgt möglich:

sudo snap switch ruby --channel=2.7/stable
sudo snap refresh
Ubuntu Ruby snap switch Channel
Mit dem Schalter "switch" lässt sich zwischen den verschiedenen Ruby-Versionszweigen wechseln.

Der Channel entscheidet also über die installierte Ruby-Version. Eine Übersicht über alle verfügbaren Channels kann mit folgendem Befehl eingesehen werden:

snap info ruby
Ubuntu Ruby snap Channels
Sämtliche relevante Ruby-Versionen können als snap installiert werden.

In der Übersicht ist immer der genaue Channelname wie "latest/stable" oder "2.7/stable" und die exakte Ruby-Version des Channels zu sehen. Außerdem sieht man unter "tracking", auf welchem Channel man sich gegenwärtig befindet.

Übersicht über installierte snaps

Eine weitere Möglichkeit zu überprüfen, auf welchem Channel man sich befindet ist der Befehl snap list:

snap list
snap list
"snap list" bietet eine Übersicht über die installierten snaps.

snap aktualisieren

Alle installierten oder ein bestimmtes snap lassen sich wie folgt aktualisieren:

sudo snap refresh      # Aktualisiert alle snaps
sudo snap refresh ruby # Aktualisiert nur das Ruby-snap

snap deinstallieren

Möchte man das Ruby-snap wieder deinstallieren, geht das mit einem simplen Befehl:

sudo snap remove ruby

Einschränkungen

Im Gegensatz zur Installation über die Paketquellen bietet die Installation als snap sehr viel mehr Flexibilität. Nachteil ist allerdings, dass sich die exakte Ruby-Version nicht bestimmen lässt. Installiert man den Channel 2.7, erhält man die aktuellste 2.7er Version. Aktuell etwa 2.7.2. Die Version 2.7.1 lässt sich so jedoch nicht explizit installieren.

Ruby über RVM installieren

Die meiste Flexibilität erhält man, wenn man Ruby über RVM (Ruby Version Manager) installiert.

GPG Keys installieren

RVM empfiehlt in der offiziellen Installationsanleitung zuerst die GPG Keys zur Verifizierung der RVM Releases zu installieren. Zumindest, wenn man das dedizierte Ubuntu Packet von RVM installiert, ist der Schritt nicht zwingend erforderlich. Bei einer manuellen Installation für andere Linux-Distributionen hingegen schon. Der Vollständigkeit halber importiere ich auf meinem Ubuntu dennoch die Keys:

gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

RVM installieren

RVM wird für Ubuntu als zusätzliches Repository bereitgestellt. Diese Installationsmöglichkeit sollte auf einem Ubuntu auch bevorzugt werden.

RVM benötigt das Paket "software-properties-common". Wenn dieses nicht installiert ist, muss dieses zuvor installiert werden. Prüfen lässt sich das mit dem folgenden Befehl:

dpkg -l software-properties-common

Wenn das Paket nicht installiert ist, erscheint eine Meldung wie "dpkg-query: no packages found matching software-properties-common". In der Regel ist das Paket aber installiert. Ansonsten kann es ganz einfach über die Paketverwaltung nachinstalliert werden:

sudo apt install software-properties-common

Für die Installation muss zunächst ein neues Repository hinzugefügt werden. Das Hinzufügen des Repositorys und Installieren von RVM geht wie folgt:

sudo apt-add-repository -y ppa:rael-gc/rvm
sudo apt update
sudo apt install rvm

Anschließend muss der Benutzer, der RVM ausführen soll, noch in der Gruppe "rvm" aufgenommen und Ubuntu neu gestartet werden:

sudo usermod -a -G rvm BENUTZERNAME
sudo reboot

Damit ist RVM erfolgreich installiert und einsatzbereit.

Verfügbare Ruby-Versionen anzeigen

Welche Ruby-Versionen sich per RVM installieren lassen, kann mit folgendem Befehl eingesehen werden:

rvm list known
rvm list known
Per RVM lassen sich sämtliche Ruby-Versionen installieren.

In der Mitte steht der Zweig, also z.B. 2.7 und in den eckigen Klammern am Ende der genaue Release wie z.B. 2. "[ruby-]2.7[.2]" heißt also, dass Ruby 2.7.2 die neueste verfügbare Version von Ruby 2.7 ist.

Bei allen nachfolgenden Befehlen hat man die Wahl eine exakte Ruby-Version wie 2.7.2 (drei Stellen) oder die jeweils neueste Ruby-Version aus dem entsprechenden Zweig, z.B. 2.7 (zwei Stellen) anzusprechen.

Ruby installieren

Mit folgenden Befehlen kann eine beliebige Ruby-Version installiert werden:

rvm install 2.7   # Installiert die neueste 2.7er Version
rvm install 2.7.1 # Installiert die Version 2.7.1

Welche Ruby-Versionen installiert sind, lässt sich mit diesem Befehl anzeigen:

rvm list rubies
rvm list rubies
"rvm list rubies" gibt Auskunft über die installierten Ruby-Versionen.

An dem "=*" am Anfang der Zeile ist zu erkennen, dass das Ruby auch als Standard gesetzt wurde und aktuell aktiv ist. Ein ruby --version zeigt daher die eben installierte Version an:

ruby --version
Welche Ruby-Version verwendet wird, zeigt der Befehl "ruby --version".

Sollte ein ruby --version keine Version anzeigen, ist gegenwärtig kein Ruby aktiv. In diesem Fall muss das über RVM installierte Ruby noch mit einem der beiden Befehlen aktiviert werden:

rvm use 2.7.2
rvm use 2.7.2 --default
Der Befehl ohne --default aktiviert das Ruby nur für die aktuelle Sitzung. Der Schalter --default setzt es als Default, sodass es auch nach einem Neustart noch aktiv ist.

Neben rvm list rubies lässt sich noch mit dem Befehl which ruby einsehen, welches Ruby verwendet wird:

which ruby
rvm which ruby
"which ruby" gibt Auskunft darüber, wo das aktive Ruby installiert ist.

Ruby aktualisieren

Ein installiertes Ruby zu aktualisieren ist denkbar einfach. In diesem Beispiel aktualisiere ich Ruby 2.6.6 auf die neueste 2.7er Version:

rvm upgrade 2.6.6 2.7
Ruby rvm upgrade
Per RVM lässt Ruby auf eine neuere Version aktualisieren.
Es kann sein, dass man auf eine Ruby-Version aktualisieren möchte, die RVM (noch) nicht kennt. Durch RVM-Updates werden auch neue Ruby-Versionen in RVM verfügbar gemacht. RVM wird automatisch über die Paketquellen aktualisiert. Wenn aber eine neue Ruby-Version installiert werden soll, die RVM trotz Update nicht kennt, muss RVM auf den neuesten Masterstand aktualisiert werden. Das geht wie folgt:
rvmsudo rvm get head
rvm reload

Achtung: Dieses Vorgehen sollte man nur im Ausnahmefalle wählen, da man den stabilen Versionszweig von RVM somit verlässt und auf einen ggf. instabilen Versionszweig wechselt.
Während der Aktualisierung erscheinen mehrere Nachfragen wie weiter vorgegangen werden soll. Hier kann u.a. entschieden werden, welche Daten von der alten Ruby-Version übernommen werden sollen. In den meisten Fällen können die Nachfragen wahrscheinlich einfach bestätigt werden.
Nach der Aktualisierung sollte mit rvm list rubies noch geschaut werden, ob das gewünschte Ruby noch als Current und / oder Default festgelegt ist. Siehe dazu auch rvm use weiter oben im Artikel.

Ruby deinstallieren

Ruby unter Ubuntu zu installieren und zu aktualisieren wäre also erledigt. Eventuell soll ein installiertes Ruby aber auch wieder deinstalliert werden. Das geht mit dem folgenden Befehl:

rvm remove 2.7

Verwendete Ruby-Version ermitteln

Unabhängig von der Installationsweise gibt es mehrere Wege um die installierte Ruby-Version zu ermitteln:

ruby -v
ruby --version
which ruby

Weiterführende Links
https://www.ruby-lang.org/de/documentation/installation/
https://wiki.ubuntuusers.de/snap/

Quellen
https://www.ruby-lang.org/de/news/2018/11/08/snap/
https://rvm.io/rvm/install
https://github.com/rvm/ubuntu_rvm
https://rvm.io/rubies/installing
https://rvm.io/rubies/list
https://rvm.io/rubies/upgrading
https://rvm.io/rubies/removing

Seit mehreren Jahren begeistere ich mich privat und beruflich für die IT. Das habe ich dann auch zum Anlass genommen, diesen Blog ins Leben zu rufen, um dort praxisnahe Tutorials über verschiedene IT-Themen zu schreiben und meine selbst geschriebene Software zu veröffentlichen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert