GNU/Linux >> Linux Esercitazione >  >> Linux

Come installare pacchetti in Linux (CentOS) senza utente root con gestione automatica delle dipendenze?

È possibile utilizzare yum e rpm per installare qualsiasi pacchetto nel repository della distribuzione. Ecco la ricetta:

Trova il nome del pacchetto

Usa yum search .

Scarica

Scarica il pacchetto e tutte le sue dipendenze usando yumdownloader (che è disponibile su CentOS per impostazione predefinita). Dovrai passarlo --resolve per ottenere la risoluzione delle dipendenze. yumdownloader viene scaricato nella directory corrente a meno che non specifichi un --destdir .

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

Scegli una posizione del prefisso

Potrebbe essere ~ , ~/centos o ~/y . Se la tua casa è lenta perché si trova su un file system di rete, puoi inserirla in /var/tmp/... .

mkdir ~/centos

Estrai tutti i pacchetti .rpm

Estrai tutti i pacchetti .rpm nella posizione del prefisso che hai scelto.

cd ~/centos && rpm2cpio ~/rpm/x.rpm | cpio -id
  • rpm2cpio restituisce il file .rpm come archivio .cpio su stdout.
  • cpio lo legge da stdin
  • -i significa estrarre (nella directory corrente)
  • -d significa creare la directory mancante

Puoi facoltativamente utilizzare -v :prolisso

Configura l'ambiente

Dovrai configurare la variabile d'ambiente PATH e LD_LIBRARY_PATH affinché i pacchetti installati funzionino correttamente. Ecco l'esempio corrispondente dal mio ~/.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"

Nota modificata (grazie a @AmitNaidu per aver segnalato il mio errore):

Secondo la documentazione di bash sui file di avvio, quando ci si connette a un server tramite ssh, viene recuperato solo .bashrc:

Invocato dal demone della shell remota

Bash tenta di determinare quando viene eseguito con il suo input standard connesso a una connessione di rete, come quando viene eseguito dal demone della shell remota, solitamente rshd, o dal demone della shell sicura sshd. Se Bash determina che viene eseguito in questo modo, legge ed esegue i comandi da ~/.bashrc, se quel file esiste ed è leggibile.

Ora, se vuoi installare molti pacchetti in questo modo, potresti voler automatizzare il processo. In tal caso, dai un'occhiata a questo repository.

Nota extra:se stai tentando di installare uno qualsiasi dei file gcc, zlib, make, cmake, git, fish, zsh or tmux , dovresti davvero prendere in considerazione l'utilizzo di conda, vedi la mia altra risposta.


TL;DR Usa Miniconda, conda-forge è incredibile.

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

Oppure, in alternativa:

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

Pacchetti comunemente ricercati:

  • gcc conda install gcc
  • zlib conda install zlib
  • crea conda install make
  • cmake conda install cmake
  • git conda install git
  • pesce conda install -c conda-forge fish
  • zsh conda install -c ActivisionGameScience zsh
  • tmux conda install -c conda-forge tmux
    • Questo tmux ha un bug con il nome della libreria ncurse che usa. Puoi aggirare il problema andando al tuo da/lib cartella e collegamento simbolico ln -sT libtinfow.so.6.1 libtinfo.so.6

Per il resto, puoi provare https://anaconda.org/search?q= .

Ho provato a lungo a far funzionare bene un gestore di pacchetti su CentOS/RedHat, ma senza successo. Il meglio che potevo fare era installare un prefisso Gentoo nella posizione corretta su un altro CentOS con accesso root, quindi scp a .tar.xz dell'intera installazione sul server di destinazione (unico modo per ottenere un gcc appropriato per Gentoo Prefix). Potrei emerge (compila e installa) pacchetti sul server di destinazione, ma continuava a riscontrare problemi con locali e permessi.

Recentemente ho realizzato un'installazione utente di alcuni pacchetti interessanti utilizzando conda. Ecco come installarlo dalla riga di comando:

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

Se, come me, la tua cartella home è ospitata su un'unità remota (un file system di rete), potresti non voler installarla nella tua cartella home, quindi potresti voler usare qualcosa come mkdir /var/tmp/lo quindi specifica una cartella di installazione come /var/tmp/lo/da durante l'installazione.

Sarai quindi in grado di installare molti pacchetti, anche se forse non tutti quelli che volevi. La maggior parte delle volte, se non è nel canale predefinito, sarà in conda-forge . Puoi controllare i pacchetti esistenti su https://anaconda.org/search?q=

Altri gestori di pacchetti che ho provato a usare dopo conda:

Linuxbrew

Ho pensato che con ciò sarebbe stato facile installare homebrew (linuxbrew) ma i loro sorgenti sono disordinati e usano il percorso assoluto codificato per l'interprete ruby, che fallisce perché non è l'ultima versione e così via e così via e ho dato su.

Niente

Nix richiede ancora di utilizzare la cartella /nix. L'hanno anche hardcoded ed è difficile sedarlo correttamente da ogni download che deve fare durante l'installazione (per non parlare degli aggiornamenti).

Prefisso Gentoo

Mi aspetto che Gentoo Prefix sia più facile da installare direttamente ora che gcc può essere utilizzato sul server di destinazione. -- Ok, ho provato ma ho riscontrato bug di autorizzazione durante l'installazione (28-09-2018):

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

PkgSrc

Adesso proverò pkgsrc. -- Utilizzare la versione (precedente) EL 6.x a 64 bit se su CentOS 6 o se si riscontrano problemi di versione (G)LibC con quella 7.x. -- Nessuna fortuna, pkgsrc hardcoded /usr/pkg/sbin e /usr/pkg/bin . Quindi non può essere utilizzato come utente, a meno che non si crei un ambiente fakechroot. Ma non l'ho mai fatto e mi aspetto problemi di usabilità.

Commenta/rispondi se riesci a installare qualsiasi altro gestore di pacchetti.


Linux
  1. Come installare Nextcloud con ISPConfig 3.1

  2. Aggiungi utente al gruppo in Linux, come farlo (con esempi)

  3. Come installare Erlang su Rocky Linux/Alma Linux/CentOS 8

  4. Come gestire CentOS Linux con una GUI

  5. Come faccio a conoscere le autorizzazioni di un utente specifico su Linux con accesso root?

Come installare DRBD su CentOS Linux

Come installare Java 14 su Linux, Ubuntu, CentOS

Come limitare l'utente root in CentOS

Come installare Python 2.7 su CentOS 7.1 o 6.7 con Anaconda

Come installare Drupal su CentOS 7 con Apache

Come installare WordPress su CentOS 7.1 con Apache