Mit JuNest installieren Sie Anwendungen auch ohne administrative Rechte.
Wer in der Arbeit oder an der Universität an einem Linux-Rechner arbeitet und dort keine Root-Rechte hat, kennt das Problem: Selbst für die Installation einer kleinen Anwendung, die man gerade jetzt dringend braucht, muss man den Administrator bemühen. Selbst wenn der gerade verfügbar ist, kann es dauern, bis er den Wunsch erfüllt: Immerhin muss der Admin auch noch die Abhängigkeiten bedenken, die die Installation der Wunschanwendung nach sich zieht.
Der Entwickler von JuNest [1] fragte sich in dem Zusammenhang: Warum muss man eigentlich unbedingt Root sein, um Software unter Linux zu installieren? Das Ergebnis seiner Überlegungen steht mit JuNest nun zum Test an. Der Name JuNest steht für Jailed User Nest und erlaubt das Einbetten einer Linux-Umgebung innerhalb fast jeder installierten Distribution. Das auf Arch Linux basierende JuNest integriert sich ins Home der Host-Distribution und verlangt zur Installation von zusätzlichen Paketen keine Root-Rechte.
Wir haben JuNest in Ubuntu 17.10 und Fedora 27 getestet, es läuft aber auch auf fast jeder anderen Distribution. Allerdings sollte deren Kernel nicht allzu alt sein, denn JuNest macht für die verwendete Sandbox Gebrauch von Funktionen, die erst mit Linux 3.8 Einzug hielten.
Zugänglicher als Container
JuNest erstellt kein komplett isoliertes System: Die Sandbox teilt unter anderem den Kernel, das Netzwerk und einhängte Geräte mit dem Host. Sie isoliert lediglich das Root-Dateisystem. Pakete, die Sie via JuNest installieren, verändern so in keiner Weise das Host-System, können aber mit diesem kommunizieren.
Es einem unprivilegierten Anwender zu erlauben, privilegierte Aufgaben zu erledigen, erfordert ein entsprechendes Backend, ähnlich einer Chroot [2]. Ebendiese lässt sich auch im Zusammenhang mit JuNest nutzen, stellt aber keineswegs die erste Wahl dar. Derzeit empfehlen die Entwickler die Verwendung von Namespaces als Backend, da die eigentlich präferierte Methode PRoot [3] derzeit Probleme mit neueren Kerneln hat.
Der einzige Nachteil bei der Verwendung von Namespaces liegt in der eingeschränkten Portabilität von JuNest. Mit PRoot als Backend gibt es hier keine Grenzen, Namespaces beschränken die Portabilität auf Systeme mit Kerneln ab Version 3.8 und Systemd. Sie können das versteckte Verzeichnis junest/ also mitnehmen und auf anderen Systemen einsetzen, indem Sie das Verzeichnis in einer beliebigen Installation ins Home-Verzeichnis kopieren und den Suchpfad anpassen.
JuNest besteht hauptsächlich aus einer Handvoll Skripten, dem Arch-Paketmanager Pacman [4] sowie Yogurt, einem Wrapper für Yaourt [5]. Somit stehen nach der Installation sämtliche Pakete aus den Arch-Archiven zur Installation bereit, wobei Yogurt auch Pakete aus dem Anwender-Archiv AUR zugänglich macht.
Schnell installiert
Zur Installation holen Sie als normaler User mit git clone git://github.com/fsquillace/junest ~/.local/share/junest das Projekt in Ihr Home-Verzeichnis (Abbildung 1). Mit export PATH=/opt/junest/bin:$PATH passen Sie den Pfad an. Nun genügt der Aufruf junest -u, um das Projekt zu installieren (Abbildung 2). Der Parameter -u weist JuNest an, die Kernel-Namespaces zum Erstellen der Sandbox zu nutzen. Nach der Installation synchronisieren Sie mit pacman -Suy die Datenbanken und aktualisieren das System (Abbildung 3).

Abbildung 3: Die Vorarbeiten umfassen neben dem Freischalten eines Mirrors auch das Synchronisieren der Datenbanken.
Nun können Sie an das Einrichten von Paketen gehen. An erster Stelle steht immer der Befehl junest -u. Vergessen Sie das -u einmal, verwendet JuNest PRoot statt der Namespaces und gibt eine Warnung aus. Sie korrigieren das Versehen mittels exit und einem erneuten Aufruf von junest -u.
Um solchen Fehlern vorzubeugen, legen Sie am besten in der Datei .bashrc einen Alias für JuNest an, etwa alias ju='junest -u'. Speichern Sie die Datei ab, und geben Sie anschließend source .bashrc ein, um ihn sofort zu aktivieren. Nun gelangen Sie durch Aufruf von ju in den JuNest-Modus, wovon Sie sich leicht anhand des Prompts überzeugen können: Die Eingabe von ju ändert ihn nun in einen Root-Prompt innerhalb von JuNest.
Um Pakete installieren zu können, müssen Sie zunächst, wie bei Arch Linux üblich, einen oder mehrere Spiegelserver freischalten. Dazu öffnen Sie in Ihrem Home die Datei ~/.junest/etc/pacman.d/mirrorlist, entfernen das Kommentarzeichen vor den gewünschten Spiegelservern und speichern die Datei wieder ab. Danach aktualisieren Sie die Liste mit pacman -Syy.
Htop zur Beweisführung
Als erstes Demonstrationsobjekt zum Verdeutlichen des JuNest-Prinzips dient der interaktive Prozessmonitor Htop, der auf unserem Ubuntu-Testsystem nicht vorinstalliert war. Nachdem wir als normaler User mit unserem Alias ju in den JuNest-Modus gewechselt hatten, installierten wir Htop mit dem Befehl pacman -S htop (Abbildung 4).

Abbildung 4: Htop ist in Ubuntu nicht vorinstalliert und eignet sich somit gut als Demonstrationsobjekt.
Verließen wir anschließend den JuNest-Modus mit exit und versuchten, Htop zu starten, erhielten wir die Meldung, Htop sei nicht installiert. Starteten wir es aber im JuNest-Modus, so zeigte es nicht nur die Prozesse innerhalb der Sandbox an, sondern jene des Gesamtsystems.
Dabei greift die Anwendung auf Bibliotheken zu, die im Host-System installiert sind. Darin liegt ein wichtiger Unterschied zu Paketformaten wie Flatpak oder Snap, die alle benötigten Bibliotheken im Paket mitbringen, sowie zu Containern, wo der Austausch mit dem Host-System stets strengen Regeln unterliegt.
Die Weiten des AUR
Eine weitere interessante Einsatzmöglichkeit von JuNest stellt das Installieren von Paketen aus dem AUR dar, dem Arch Linux User Repository [6]. Dort finden Sie über 40?000 [7] von enthusiastischen Arch-Usern erstellte und gepflegte Pakete, die es so entweder in der Haupt-Distribution gar nicht gibt oder die zumindest einen aktuelleren Versionsstand aufweisen. Für diesen zweiten Test richteten wir zunächst JuNest unter Fedora 27 ein.
Für diesen Zweck gilt es, einige Arch-Basispakete in der JuNest-Umgebung zu installieren. Dazu wechseln Sie zunächst mittels junest -f in die JuNest-Umgebung – das -f steht für Fakeroot [8].Dann installieren Sie die Basispakete für die Entwicklungsumgebung mit pacman -S --ignore sudo base-devel (Abbildung 5). Zudem ist es sinnvoll, mit pacman -S gnu-free-fonts einige Zeichensätze nachzuziehen.
Als Objekt der Begierde dient in diesem Fall eine Git-Version des Videokonverters Handbrake (Abbildung 6). Zunächst verlassen Sie Fakeroot mittels exit und wechseln mittels junest -u wieder in den normalen JuNest-Modus. Dort starten Sie die Installation mit yogurt handbrake-gtk-git. Die Installation aus dem AUR baut das Paket nach einem hinterlegten Rezept aus dem Quellcode. Da es sich um eine relativ komplexe grafische Anwendung handelt, dauert das selbst auf aktueller und leistungsfähiger Hardware zwischen 15 und 20 Minuten.
Bei AUR-Paketen kann es auch vorkommen, dass sich diese gerade nicht bauen lassen: Viele davon entstehen aus dem jeweils tagesaktuellen Git-Code, der durchaus Fehler enthalten kann. Auch aus dieser Warte macht der Einsatz von JuNest hier Sinn, da das Host-System von den möglichen Folgen verschont bleibt. Des Öfteren fehlen auch Bibliotheken – installieren Sie diese nach, gelingt das Bauvorhaben meist. Manche Pakete im AUR erweisen sich aber auch als veraltet oder generell schlecht gepflegt.
Fazit
JuNest erweist sich als nützlich, wenn Sie Software installieren möchten, jedoch keine administrativen Rechte besitzen. Einen weiteren typischen Anwendungsfall stellt das Installieren von Software außerhalb des Paketsystems oder für Tests dar. Am Arbeitsplatz müssen Sie dabei die Richtlinien des Unternehmens beachten. Die Dokumentation von JuNest fällt allerdings recht lückenhaft aus, sodass es Eigeninitiative erfordert, hier voranzukommen. Eine mögliche Anlaufstelle für Fragen, allerdings nur auf Englisch, ist Gitter [9]. Hier beantwortet der JuNest-Entwickler geduldig und relativ zeitnah Fragen – manchmal sofort, meist aber innerhalb von 12 Stunden. Ein wenig Dokumentation findet sich zudem auf Github [10] sowie auf der Wiki-Seite von JuNest [11].
Infos
-
PRoot: https://github.com/proot-me/PRoot/blob/master/doc/proot/manual.txt
-
AUR-Paketbestand: https://aur.archlinux.org/packages/?SB=l&SO=d
-
Fakeroot: https://wiki.debian.org/FakeRoot








