Come installare il programma localmente senza i privilegi di sudo?


73

Supponiamo di avere un accesso ssh ad alcuni server Ubuntu come utente e ho bisogno di alcuni strumenti non di sistema da installare per comodità (mc, rtorrent, mcedit). Non voglio disturbare gli amministratori per questi piccoli programmi.

C'è un modo per installarli (farli funzionare) senza usare qualcosa di simile sudo apt-get install?



Vedi anche Dove dovrebbe essere collocato un eseguibile locale? per discussioni pertinenti.
George M



Risposte:


33
  1. Compila e installa in ~/bin(e modifica il tuo .bashrcper impostare il PATHper includerlo). allo stesso modo le librerie possono essere compilate e installate ~/lib(impostate LD_LIBRARY_PATHper puntare ad essa), e le intestazioni di sviluppo possono essere installate in es ~/includes.

  2. A seconda dei dettagli specifici dei programmi che si desidera installare e delle librerie da cui dipendono, è possibile scaricare i file .deb e utilizzare ' dpkg-deb -x' per estrarli sotto la propria directory home. Si avrà quindi un sacco di "divertimento" l'impostazione della PATH, LD_LIBRARY_PATHe altri variables. Più complesso è il programma o l'app che stai installando, più ti divertirai :)

    Naturalmente, non sarai in grado di installare i setuidbinari in questo modo - installeranno ma (poiché non hai il permesso di chown per root o impostare il setuidbit su di essi) saranno solo normali binari di tua proprietà .

    Allo stesso modo, i demoni e i servizi di sistema che si aspettano di essere eseguiti in maniera certa UIDo hanno la possibilità di cambiare uid, o si aspettano che i file si trovino /etcpiuttosto ~/etce così via, probabilmente non funzioneranno bene, se non del tutto.

  3. La maggior parte degli amministratori di sistema considererebbe mced mceditessendo programmi "per lo più innocui" e innocui.

    Pochissimi, tuttavia, considererebbero innocua l'installazione di un client torrent, soprattutto se devono pagare per la larghezza di banda o finire per essere legalmente responsabili. La maggior parte dei amministratori di sistema probabilmente non sarebbe del tutto felice per gli utenti finali di installare tale software senza autorizzazione. Potrebbero dire "certo, vai avanti, buttarti fuori" o potrebbero non ... ma dovresti chiedere qualsiasi cosa possa causare problemi ai proprietari / amministratori della macchina.


Ho sentito che l' impostazione LD_LIBRARY_PATHè un trucco malvagio . Questo vale anche qui o ho frainteso?
Will Vousden,

1
Si applicano tutti i problemi con l'impostazione LD_LIBRARY_PATH. sì, è, o può essere, un trucco malvagio. a volte gli hack malefici sono necessari per raggiungere determinati obiettivi ... la cosa cruciale quando si infrangono le "regole" è conoscerle abbastanza bene da sapere da cosa sono progettate per salvarti, ed esattamente perché è necessario romperle in questo caso particolare e quali sono o potrebbero essere i rischi.
Caso

Dovevo solo installare un programma indipendente (zoom), quindi per prima cosa ho provato la seconda opzione ( dpkg-deb -xsu una directory locale). Ha funzionato come un fascino. Non ho dovuto fare alcun LD_LIBRARY_PATHtrucco. Anche se dovessi farlo, lo farei nella stessa riga di comando in modo da non influire sulle impostazioni globali (ad esempio $ LD_LIBRARY_PATH=/home/usr1/zoom/opt/zoom:/home/usr1/zoom/opt/zoom/zoom ZoomLauncher).
Antony,

devi solo impostare LD_LIBRARY_PATH se uno o più pacchetti che vuoi installare forniscono librerie condivise. Se si tratta solo di eseguibili e dati, documenti e file di configurazione, ecc., Può utilizzare le librerie di sistema.
CAS

50

È necessario compilare questi dal sorgente. Dovrebbe essere solo una questione di

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

Il binario verrebbe quindi localizzato in ~/myapps/bin. Quindi, aggiungi export PATH="$HOME/myapps/bin:$PATH"al tuo .bashrcfile e ricarica il .bashrcfile con source ~/.bashrc. Naturalmente, questo presuppone che gcc sia installato sul sistema.


6
E le dipendenze? C'è un modo per gestirli automaticamente senza eseguire lo stesso codice per ognuno di essi?
yura,

1
@yura no devi farlo da solo.
Ulrich Dangel,

E se non avessi i privilegi per farlo? È normale avere il permesso di compilare software senza accesso sudo / root?
Freedo, il

5

Puoi usare JuNest , che crea un piccolo contenitore Linux nella directory dell'utente, dove puoi installare qualsiasi pacchetto.


0

Ho affrontato lo stesso problema, ecco come l'ho risolto rapidamente, supponendo che tu abbia un server Linux dello stesso sistema operativo e architettura.

  1. Installa il software sul sistema che controlli

  2. Trova l'esempio eseguibile which pythone copialo in~/

  3. Copia le librerie con:

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

Trasferisci l'eseguibile e le librerie sull'altro sistema in cui hai solo i privilegi locali, quindi esegui quanto segue:

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

Questo creerà una cartella ~/libper archiviare le librerie, aggiungerla al tuo percorso e dire a LD di guardare le librerie lì, quindi basta aggiungere i tuoi eseguibili e le librerie lì, ora puoi eseguirlo come faresti altrove

Questo può essere molto confuso, ma è molto portatile, veloce e non ho ancora trovato qualcosa che non posso eseguire in quel modo, ovviamente, il software non può provare a fare cose che richiedono l'accesso come root, come il binding a una porta inferiore di 1024, ecc.


-1

Sto avendo lo stesso problema come te. Non l'ho ancora provato, ma sembra che Linuxbrew possa essere utile su questo problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.