GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie installiere ich Pakete unter Linux (CentOS) ohne Root-Benutzer mit automatischer Abhängigkeitsbehandlung?

Es ist möglich, yum und rpm zu verwenden, um jedes Paket im Repository der Distribution zu installieren. Hier ist das Rezept:

Suchen Sie den Paketnamen

Verwenden Sie yum search .

Herunterladen

Laden Sie das Paket und alle seine Abhängigkeiten mit yumdownloader herunter (was standardmäßig auf CentOS verfügbar ist). Sie müssen ihn passieren --resolve Abhängigkeitsauflösung zu erhalten. yumdownloader Downloads in das aktuelle Verzeichnis, es sei denn, Sie geben einen --destdir an .

mkdir -p ~/rpm
yumdownloader --destdir ~/rpm --resolve vim-common

Wählen Sie einen Präfix-Standort aus

Es könnte ~ sein , ~/centos , oder ~/y . Wenn Ihr Zuhause langsam ist, weil es sich auf einem Netzwerkdateisystem befindet, können Sie es in /var/tmp/... einfügen .

mkdir ~/centos

Extrahieren Sie alle .rpm-Pakete

Extrahieren Sie alle .rpm-Pakete an den von Ihnen gewählten Präfix-Speicherort.

cd ~/centos && rpm2cpio ~/rpm/x.rpm | cpio -id
  • rpm2cpio gibt die .rpm-Datei als .cpio-Archiv auf stdout aus.
  • cpio liest es von stdin
  • -i bedeutet extrahieren (in das aktuelle Verzeichnis)
  • -d bedeutet fehlendes Verzeichnis erstellen

Sie können optional -v verwenden :ausführlich

Umgebung konfigurieren

Sie müssen die Umgebungsvariable PATH konfigurieren und LD_LIBRARY_PATH damit die installierten Pakete korrekt funktionieren. Hier ist das entsprechende Beispiel aus meinem ~/.bashrc :

export PATH="$HOME/centos/usr/sbin:$HOME/centos/usr/bin:$HOME/centos/bin:$PATH"

L='/lib:/lib64:/usr/lib:/usr/lib64'
export LD_LIBRARY_PATH="$L:$HOME/centos/usr/lib:$HOME/centos/usr/lib64"

Bearbeitete Anmerkung (danke an @AmitNaidu für den Hinweis auf meinen Fehler):

Gemäß der Bash-Dokumentation zu Startdateien wird beim Herstellen einer Verbindung zu einem Server über ssh nur .bashrc bezogen:

Aufgerufen durch entfernten Shell-Daemon

Bash versucht festzustellen, wann es mit seiner Standardeingabe ausgeführt wird, die mit einer Netzwerkverbindung verbunden ist, wie wenn es vom Remote-Shell-Daemon, normalerweise rshd, oder dem Secure-Shell-Daemon sshd ausgeführt wird. Wenn Bash feststellt, dass es auf diese Weise ausgeführt wird, liest und führt es Befehle aus ~/.bashrc aus, wenn diese Datei existiert und lesbar ist.

Wenn Sie nun viele Pakete auf diese Weise installieren möchten, möchten Sie den Vorgang möglicherweise automatisieren. Wenn ja, werfen Sie einen Blick auf dieses Repository.

Zusätzliche Anmerkung:Wenn Sie versuchen, gcc, zlib, make, cmake, git, fish, zsh or tmux zu installieren , sollten Sie wirklich die Verwendung von Conda in Betracht ziehen, siehe meine andere Antwort.


TL;DR Verwenden Sie Miniconda, Conda-Forge ist erstaunlich.

curl "https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh" | sh

Oder alternativ:

curl https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh > Miniconda.sh
bash Miniconda.sh -b -p ~/conda
# -b is used to specify that this is done "in batch", so skip the EULA prompt
# -p lets you specify where you want conda installed

Häufig gesuchte Pakete:

  • gcc conda install gcc
  • zlib conda install zlib
  • machen Sie conda install make
  • cmake conda install cmake
  • git conda install git
  • Fisch conda install -c conda-forge fish
  • zsh conda install -c ActivisionGameScience zsh
  • tmux conda install -c conda-forge tmux
    • Dieser tmux hat einen Fehler im Namen der verwendeten Ncurse-Bibliothek. Sie können dies umgehen, indem Sie zu Ihrem da/lib gehen Ordner und Symlink ln -sT libtinfow.so.6.1 libtinfo.so.6

Für den Rest können Sie https://anaconda.org/search?q= versuchen .

Ich habe lange versucht, einen Paketmanager dazu zu bringen, unter CentOS/RedHat gut zu funktionieren, aber ohne Erfolg. Das Beste, was ich tun konnte, war, ein Gentoo-Präfix an der richtigen Stelle auf einem anderen CentOS mit Root-Zugriff zu installieren und dann einen .tar.xz zu scp der gesamten Installation auf den Zielserver (einziger Weg, um einen richtigen gcc für Gentoo Prefix zu erhalten). Ich könnte emerge (Erstellen und Installieren) von Paketen auf dem Zielserver, aber es gab immer wieder Probleme mit Lokalen und Berechtigungen.

Ich habe kürzlich eine Benutzerinstallation einiger interessanter Pakete mit conda erreicht. So installieren Sie es über die Befehlszeile:

curl "https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh" | sh

Wenn Ihr Home-Ordner wie ich auf einem Remote-Laufwerk (einem Netzwerkdateisystem) gehostet wird, möchten Sie ihn vielleicht nicht in Ihrem Home-Ordner installieren, also sollten Sie etwas wie mkdir /var/tmp/lo verwenden Geben Sie dann einen Installationsordner wie /var/tmp/lo/da an während der Installation.

Sie können dann ziemlich viele Pakete installieren, wenn auch vielleicht nicht alle, die Sie wollten. Wenn es sich nicht im Standardkanal befindet, wird es meistens in conda-forge sein . Unter https://anaconda.org/search?q= können Sie nach vorhandenen Paketen suchen

Andere Paketmanager, die ich versucht habe, nach conda zu verwenden:

Linuxbrew

Ich dachte, dass es damit einfach wäre, Homebrew (Linuxbrew) zu installieren, aber ihre Quellen sind chaotisch und verwenden einen hartcodierten absoluten Pfad zum Ruby-Interpreter, der fehlschlägt, weil es nicht die letzte Version ist und so weiter und so weiter und ich gab hoch.

Nichts

Nix erfordert weiterhin die Verwendung des /nix-Ordners. Sie haben es auch hartcodiert und es ist schwierig, es bei jedem Download, der während der Installation durchgeführt werden muss, korrekt zu speichern (ganz zu schweigen von Updates).

Gentoo-Präfix

Ich gehe davon aus, dass Gentoo Prefix jetzt einfacher direkt zu installieren ist, da wir gcc auf dem Zielserver verwenden können. -- Ok, ich habe es versucht, bin aber während der Installation auf Berechtigungsfehler gestoßen (2018-09-28):

portage.exception.OperationNotPermitted: chown(b'~/gentoo/tmp/var/tmp/portage/sys-apps/gentoo-functions-0.12/image/var', 2000, 2000)

PkgSrc

Ich werde es jetzt mit pkgsrc versuchen. -- Verwenden Sie die (ältere) Version 64-Bit EL 6.x, wenn Sie CentOS 6 verwenden oder wenn Probleme mit der (G)LibC-Version mit 7.x auftreten. -- Kein Glück, pkgsrc kodiert fest /usr/pkg/sbin und /usr/pkg/bin . Es kann also nicht als Benutzer verwendet werden, es sei denn, es wird vielleicht eine Fakechroot-Umgebung eingerichtet. Aber ich habe das noch nie gemacht und ich erwarte Usability-Probleme.

Bitte kommentieren/antworten Sie, wenn es Ihnen gelingt, einen anderen Paketmanager zu installieren.


Linux
  1. So installieren Sie Nextcloud mit ISPConfig 3.1

  2. Benutzer zu Gruppe in Linux hinzufügen, Anleitung (mit Beispielen)

  3. So installieren Sie Erlang auf Rocky Linux/Alma Linux/CentOS 8

  4. So verwalten Sie CentOS Linux mit einer GUI

  5. UNIX / Linux:So löschen Sie den root-äquivalenten Benutzer (Nicht-Root-Benutzer mit UID 0)

So installieren Sie DRBD unter CentOS Linux

So installieren Sie Java 14 unter Linux, Ubuntu, CentOS

So beschränken Sie den Root-Benutzer in CentOS

So installieren Sie Python 2.7 unter CentOS 7.1 oder 6.7 mit Anaconda

So installieren Sie Drupal auf CentOS 7 mit Apache

So installieren Sie WordPress auf CentOS 7.1 mit Apache