Skip to content
This repository has been archived by the owner on Nov 16, 2022. It is now read-only.

Rustup auf den CIP PCs

Lukas Kalbertodt edited this page Jan 20, 2017 · 5 revisions

Der Rust Compiler sollte am besten über Rustup installiert werden. Rustup ist ein Tool zur Verwaltung unterschiedlicher Versionen vom Compiler und der Standardbibliothek. Es ist einfach, auf die neuste Compilerversion zu aktualisieren aber auch für andere Architekturen zu kompilieren.

Leider kann man Rustup nicht einfach auf CIP PCs installieren. Der Grund dafür ist das Heimatverzeichnis pro Nutzer, welches in der Größe beschränkt ist (250MB) und über das Netzwerk synchronisiert wird. Rustup würde das Heimatsverzeichnis normalerweise sehr schnell füllen. Daher muss man bei der Installation auf ein paar Dinge achten.

In dieser Anleitung wird Grundwissen über Linux, "Terminal-Befehle" und sh-Scripte vorausgesetzt. Falls es Fragen dazu gibt, fragt einfach auf Piazza!

Wohin sich Rustup installiert

Rustup installiert seine Dateien in diverse Verzeichnisse:

  • ~/.cargo/<Diverse Dateien>: Kleine, eventuell vertrauliche Informationen

  • ~/.cargo/bin: Installierte Programme und Proxies für rustc, ...; ca. 10MB

  • ~/.cargo/registry: Library-Cache, ist schnell recht groß, viele Dateien

  • ~/.rustup/toolchains: Alle installierten Rust-Compiler, mehrere 100MB

  • ~/.rustup/<alles andere>: Klein, halbwegs vertraulich, nutzerabhängig

Wichtig: Wahrscheinlich wird die derzeitige Rustup version noch den Ordner .multirust statt .rustup benutzen! Also werdet ihr euch wahrscheinlich immer, wenn ich .rustup schreibe, .multirust denken.

Auf CIP PCs installieren

Jetzt bleibt die Frage: Wie installieren wir Rustup, ohne das Heimatsverzeichnis zu füllen? Der Trick liegt dadrin, Dateisystemlinks anzulegen. Hauptsächlich wichtig sind die Verzeichnisse ~/.cargo/registry und ~/.rustup/toolchains, da die den meisten Platz einnehmen.

Die Installationsroutine würde in etwa wie folgt aussehen. Achtung: Diese Befehle sind nicht wirklich zum Copy&Pasten gedacht, sondern nur als Anhaltspunkt; bitte selber mitdenken. Insbesondere sind diese Befehle auch nicht von mir getestet und enthalten daher wahrscheinlich Fehler!

Rustup in temporäres Verzeichnis installieren

Erstmal soll sich Rustup selber installieren, aber nicht im Heimatsverzeichnis. Dazu setzen wir die $HOME Variable auf ein temporäres Verzeichnis.

export HOME_BACKUP=$HOME
export TMP_PATH=/tmp/rustii

mkdir $TMP_PATH
export HOME=$TMP_PATH

Als nächstes führen wir ganz normal die Installation durch:

curl https://sh.rustup.rs -sSf | sh -s -- -y

Nun befinden sich .cargo und .rustup hoffentlich in /tmp/rustii. Wir setzen eben noch die $HOME Variable auf den richtigen Wert zurück:

export HOME=$HOME_BACKUP

Verzeichnisse vorbereiten

Nun richten wir uns die beiden Verzeichnisse im Heimatsverzeichnis manuell ein und kopieren nach und nach die richtigen Daten aus dem temporären Verzeichnis rüber. Wir verlinken die wichtigen Ordner zu entsprechenden Ordnern in /local. Zuerst .cargo:

mkdir ~/.cargo 
cp $TMP_PATH/.cargo/env ~/.cargo/env     # Von der Installation kopieren rüberkopieren
cp -r $TMP_PATH/.cargo/bin ~/.cargo/bin  # Ebenso

mkdir -p /local/$(whoami)/.cargo/registry          # in /local Ordner mit Nutzernamen anlegen
ln -s /local/$(whoami)/.cargo/registry ~/.cargo/registry # link anlegen

Und nun .rustup (bzw. .multirust!):

mkdir ~/.multirust/
cp $TMP_PATH/.multirust/settings.toml ~/.multirust/     # Kleine Dateien rüberkopieren
cp -r $TMP_PATH/.multirust/update-hashes ~/.multirust/

mkdir -p /local/$(whoami)/.multirust/toolchains
cp -r $TMP_PATH/.multirust/toolchains/* /local/$(whoami)/.multirust/toolchains  # richtige Dateien kopieren
ln -s /local/$(whoami)/.multirust/toolchains ~/.multirust/toolchains  # link erstellen

Eventuell ist es jetzt nötig den $PATH anzupassen. Das sollte durch folgenden Befehl gehen:

echo "source ~/.cargo/env" >> ~/.profile

Danach muss man sich aus- und wieder einloggen; das führt dazu, dass die .profile Datei geladen wird.

Jetzt sollten rustc, cargo und rustup normal benutzbar sein. Aber: Natürlich sind diese nur auf dem PC benutzbar, auf dem ihr sie eingerichtet habt! /local ist lokal pro PC und wird nicht über das Netzwerk synchronisiert! Merkt euch also die Nummer.