Wie installiere ich ein Programm lokal ohne sudo-Rechte?


73

Angenommen, ich habe ssh-Zugriff auf einen Ubuntu-Server als Benutzer und ich benötige einige nicht zu installierende Systemtools (mc, rtorrent, mcedit). Ich möchte Administratoren für diese kleinen Programme nicht stören.

Gibt es eine Möglichkeit, sie zu installieren (zum Laufen zu bringen), ohne so etwas zu verwenden sudo apt-get install?






Antworten:


33
  1. Kompilieren Sie und installieren Sie in ~/bin(und bearbeiten Sie Ihr, .bashrcum festzulegen PATH, dass es enthalten sein soll). Ebenso können Bibliotheken kompiliert und installiert werden ~/lib(so eingestellt LD_LIBRARY_PATH, dass sie darauf verweisen), und Entwicklungsheader können in z ~/includes.

  2. Abhängig von den spezifischen Details der Programme, die Sie installieren möchten, und den Bibliotheken, von denen sie abhängen, können Sie die .deb-Dateien herunterladen und mit ' dpkg-deb -x' unter Ihrem Home-Verzeichnis extrahieren. Sie werden dann eine Menge „Spaß“ haben die Einstellung PATH, LD_LIBRARY_PATHund andere variables. Je komplexer das Programm oder die App, die Sie installieren, desto mehr Spaß werden Sie haben :)

    Natürlich können Sie setuidBinärdateien nicht auf diese Weise installieren - sie werden installiert, aber (da Sie nicht die Berechtigung haben, sie als Root zu speichern oder das setuidBit darauf zu setzen) sind sie nur normale Binärdateien, die Ihnen gehören .

    Ebenso funktionieren Daemons und Systemdienste, die eine bestimmte UIDAusführung erwarten oder die Möglichkeit haben, die UID zu ändern, oder erwarten, dass sich Dateien /etceher in ~/etcusw. befinden, wahrscheinlich nicht richtig , wenn überhaupt.

  3. Die meisten sysadmins halten mcund mcedit„meist harmlos“, unschädliche Programme.

    Sehr wenige würden jedoch die Installation eines Torrent-Clients als harmlos betrachten, insbesondere wenn sie für Bandbreite zahlen müssen oder rechtlich haftbar sind. Die meisten Sysadmins wären wahrscheinlich nicht ganz glücklich, wenn Endbenutzer solche Software ohne Erlaubnis installieren würden. Sie können sagen "sicher, mach weiter, schlag dich raus" oder sie können nicht ... aber du solltest nach irgendetwas fragen, das den Besitzern / Administratoren der Maschine Probleme bereiten kann.


Ich habe gehört, dass die Einstellung LD_LIBRARY_PATHein böser Hack ist . Gilt das auch hier oder habe ich das falsch verstanden?
Will Vousden

1
Es gelten alle Probleme beim Festlegen von LD_LIBRARY_PATH. Ja, es ist oder kann ein böser Hack sein. Manchmal sind böse Hacks notwendig, um bestimmte Ziele zu erreichen. Das Entscheidende beim Brechen von "Regeln" ist, sie gut genug zu kennen, um zu wissen, wovor sie dich retten und warum du sie in diesem speziellen Fall brechen musst und was die Risiken sind oder sein könnten.
cas

Ich musste nur ein unabhängiges Programm installieren (zoom), also habe ich zuerst die 2. Option ausprobiert ( dpkg-deb -xzu einem lokalen Verzeichnis). Lief wie am Schnürchen. Ich musste keine LD_LIBRARY_PATHHacks machen. Selbst wenn ich muss, würde ich es in der gleichen Befehlszeile tun, um die globalen Einstellungen nicht zu beeinflussen (zum Beispiel $ LD_LIBRARY_PATH=/home/usr1/zoom/opt/zoom:/home/usr1/zoom/opt/zoom/zoom ZoomLauncher).
Antony

Sie müssen LD_LIBRARY_PATH nur festlegen, wenn eines oder mehrere der zu installierenden Pakete gemeinsam genutzte Bibliotheken bereitstellen. Wenn es sich nur um ausführbare Dateien, Daten, Dokumente, Konfigurationsdateien usw. handelt, kann es die Systembibliotheken verwenden.
cas

50

Sie müssen diese aus dem Quellcode kompilieren. Es sollte nur eine Frage von sein

apt-get source PACKAGE
./configure --prefix=$HOME/myapps
make
make install

Die Binärdatei würde sich dann in befinden ~/myapps/bin. Fügen Sie also export PATH="$HOME/myapps/bin:$PATH"Ihrer .bashrcDatei hinzu und laden Sie die .bashrcDatei erneut mit source ~/.bashrc. Dies setzt natürlich voraus, dass gcc auf dem System installiert ist.


6
Was ist mit Abhängigkeiten? Gibt es eine Möglichkeit, sie automatisch zu verarbeiten, ohne für jeden den gleichen Code auszuführen?
Yura

1
@yura nein du musst es selber machen.
Ulrich Dangel

Was ist, wenn Sie nicht über die erforderlichen Berechtigungen verfügen? Ist es üblich, die Erlaubnis zum Kompilieren von Software ohne sudo / root-Zugriff zu haben?
Freedo

5

Sie können JuNest verwenden , das einen kleinen Linux-Container im Benutzerverzeichnis erstellt, in dem Sie beliebige Pakete installieren können.


0

Ich war mit demselben Problem konfrontiert. Hier ist, wie ich es schnell behoben habe, unter der Annahme, dass Sie einen Linux-Server mit demselben Betriebssystem und derselben Architektur haben.

  1. Installieren Sie die Software auf dem System, das Sie steuern

  2. Suchen Sie das ausführbare Beispiel which pythonund kopieren Sie es nach~/

  3. Kopieren Sie die Bibliotheken mit:

    ldd "$(which python)"  | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ~/
    

Übertragen Sie die ausführbare Datei und die Bibliotheken auf das andere System, auf dem Sie nur über lokale Berechtigungen verfügen, und führen Sie dann Folgendes aus:

mkdir ~/lib
export PATH="$PATH:~/lib"
export LD_LIBRARY_PATH=~/lib:/lib:/usr/lib

Dadurch wird ein Ordner erstellt, ~/libin dem die Bibliotheken gespeichert, Ihrem Pfad hinzugefügt und LD angewiesen werden, sich die Bibliotheken dort anzuschauen. Fügen Sie also einfach Ihre ausführbaren Dateien und die Bibliotheken dort hinzu, und Sie können sie jetzt wie an einem anderen Ort ausführen

Das mag sehr hacky sein, ist aber sehr portabel, schnell und ich habe noch nichts gefunden, was ich nicht auf diese Weise ausführen kann. Natürlich kann die Software nicht versuchen, Dinge zu tun, die root-Zugriff erfordern, wie das Binden an einen niedrigeren Port als 1024 usw.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.