Programmiersprachen unter U7 - oder: warum dauert Ruby so lange?
Wie auch in früheren Versionen unserer Hosting-Platform bieten wir in Uberspace 7 eine ganze Reihe von Programmiersprachen in gleich mehreren Versionen an. So könnt ihr dort zum Beispiel node.js in den wahlweise Versionen 6, 8 und 9 nutzen. Bei PHP stehen 5.6, 7.1 und auch 7.2 bereit.
Geschichtsstunde
In Uberspace 6 besteht unsere Software-Kollektion aus der bekannten Verzeichnisstruktur unter /package, die sich djb irgendwann mal ausgedacht hat:
[root@cygnus ~]# /package/host/localhost/nodejs-4/bin/node -v
v4.8.6
[root@cygnus ~]# /package/host/localhost/nodejs-6/bin/node -v
v6.12.0
Möchte eine Userin nun die Version 6 von Node.js nutzen, muss sie entweder wie oben den vollen Pfad zum node binary angeben oder den länglichen /package/host/...-Prefix in den $PATH mit aufnehmen. Letzteres ist - je nach Software - eine händische Änderung in der ~/.bashrc oder in einer Software-spezifischen Datei wie ~/etc/phpversion. Anschließend ist ein Re-Login notwendig. Abgesehen davon, dass diese Variante in der Bedienung eher umständlich ist, ist sie auch fehleranfällig. Der Erfolg hängt stark davon ab, dass der $PATH richtig gesetzt ist. Eure Support-Anfragen zeigen, dass das öfter als uns lieb ist zu Problemen führt.
Uberspace 7
Unter Uberspace 7 gibt es kein Node.js im $PATH, kein /package und kein Editieren von Shell-Dateien durch User, nur ein simples uberspace tools version use node 6. Dann ist, auch ohne Logout/Login-Spiel, plötzlich alles Version 6.
Aber wie?
Damit wir den Versionswechsel so stabil wie möglich gestalten können, haben wir uns hier das auch beim Ruby Version Manager (RVM) eingesetzte Pattern der Wrapper-Scripts abgeschaut:
[root@tuttle ~]# file /usr/bin/node
/usr/bin/node: Python script, ASCII text executable
Hinter jedem Tool-Binary wie node oder php, aber auch php-fpm für den Webserver steht ein Hardlink zu einem von uns entwickelten Python-Script. Dieses Script schnappt