Installazione dei pacchetti nella directory locale?


38

Vorrei installare pacchetti software, simili a apt-get install <foo>ma:

  1. Senza sudoe
  2. In una directory locale

Lo scopo di questo esercizio è quello di isolare build indipendenti nel mio server di integrazione continua .

Non mi dispiace compilare dalla fonte, se è quello che serve, ma ovviamente preferirei l'approccio più semplice possibile. Ho provato apt-get source --compile <foo>come indicato qui, ma non riesco a farlo funzionare per pacchetti come autoconf. Ottengo il seguente errore:

dpkg-checkbuilddeps: Unmet build dependencies: help2man

Ho help2man compilato in una directory locale, ma non so come informarlo. Qualche idea?

AGGIORNAMENTO : ho trovato una risposta che funziona quasi su https://askubuntu.com/a/350/23678 . Il problema chrootè che richiede sudo. Il problema apt-get sourceè che non so come risolvere le dipendenze. Devo dire, chrootsembra molto attraente. Esiste un comando equivalente che non richiede sudo?


Suggerisco che sia un duplicato di questa domanda: [ askubuntu.com/questions/147654/… [1]: askubuntu.com/questions/147654/…

7
@kamil, non lo è. Non sto cercando di installare senza accesso alla rete. Sto cercando di installare senza sudoe in una directory non di sistema.
Gili,

4
Ragazzi, per favore non sottovalutate la mia domanda senza spiegare il perché . Grazie.
Gili,

Se non si dispone di root sul sistema, non sarà possibile risolvere facilmente le dipendenze . A volte è possibile, però; dovresti iniziare a installare il software a casa tua, iniziando con le dipendenze più in basso e modificando LD_PATH in modo che i programmi possano trovare le loro librerie. Tuttavia, fallirai se uno dei pacchetti richiede root (o suid) per essere eseguito.
Gennaio

@Gennaio, sto cercando di compilare un progetto software all'interno di un sistema di compilazione automatizzato. Per quanto ne so, nessuna delle sue dipendenze (richiesta per la compilazione) richiede il root.
Gili,

Risposte:


20

Questo, in generale, non è fattibile, perché si incasinerebbe il sistema di dipendenze apt.

Esistono due soluzioni:

  1. Installa il pacchetto sorgente, passa alla directory sorgente, configura e installa il pacchetto indipendentemente dai sistemi di packaging manualmente in una directory a tua scelta.

    apt-get source <package>
    

    Questo non ha bisogno di root, scarica l'origine del pacchetto, decomprime in una directory all'interno della directory corrente. È quindi possibile passare a quella directory, apportare modifiche all'origine, configurare l'installazione su un'altra destinazione, ecc.

    La configurazione in quale directory di installazione devono andare i programmi dipende, tuttavia, dal programma specifico. Molti programmi usano il ./configure --prefix localdirper indirizzare l'installazione su localdir; ma questo non è di gran lunga il caso.

  2. Crea un ambiente chroot in cui installerai i pacchetti:

    debootstrap precise myfancyinstall
    

    Ora hai creato un'installazione fittizia nella directory myfancyinstall /

    chroot myfancyinstall
    

    È possibile utilizzare apt-get install all'interno della gabbia chroot per installare ciò che si desidera.


Sembra promettente. Usare apt-get sourcesenza --compilesembra sopprimere l'avvertimento sulle dipendenze non soddisfatte (permettendomi di risolverle da solo)
Gili,

C'è un modo per ottenere pacchetti che non hanno fonti anche in questo modo?
soandos,

La soluzione (2) funzionerà indipendentemente. Altrimenti, sei da solo: forse c'è un altro modo di installare il pacchetto. O scaricare il file pacchetto deb e scompattarlo con ar: ar vx mypackage.deb. Quindi analizza il contenuto del pacchetto e scopri come installarlo manualmente.
gennaio

14

usando una shell bash e acquisendo il file "package.deb" (supponendo che il nome del pacchetto sia "pacchetto") è possibile eseguire il comando seguente per ottenere ciò che si desidera - installare il pacchetto in modo tale che la propria directory home sia trattata allo stesso modo "/ "verrebbe trattato in una normale installazione.

Questo è il comando:

apt-get download package; dpkg -i --force-not-root --root=$HOME package.deb

Potresti incontrare alcuni errori, come $ HOME / var / lib / dpkg / lock mancante, quindi crea tutti i file mancanti che otterrai dagli errori e l'installazione dovrebbe funzionare senza sudo.

nota che se "apt-get download" non funziona, puoi provare "apt download" o "apitutde download package".

se nessuno dei due metodi funziona, puoi semplicemente scaricare il pacchetto manualmente da http://packages.ubuntu.com/

un altro metodo sarebbe quello di eseguire il comando chroot con il parametro $ HOME e installarlo nello stesso modo di cui sopra solo senza --root = $ HOME. quel comando ti porterebbe in una shell dove "/" è la tua $ HOME corrente. per tornare alla modalità normale non dimenticare di "uscire"

in bocca al lupo.


Dopo aver creato i file mancanti di cui si è lamentato dpkg, ha appena iniziato a segfaulting.
Matt Chambers,

0

Se sei su un web-hoster condiviso con sshaccesso ma apt-getsenza root ecc. O un sistema similmente limitato, ciò che segue potrebbe funzionare per te. Ha funzionato per me su un sistema in cui è uname -atornato qualcosa di simileSMP Debian 4.9.65-3+deb9u2~bpo8+1 (2017-01-05) x86_64 GNU/Linux

# examples tried on a shared hoster with ssh access but no apt-get no root etc.
# http://mirrors.kernel.org/ubuntu/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb
# https://github.com/dvorka/hstr/releases/download/1.25/hstr_1.25-1_amd64.deb

debURL="http://mirrors.kernel.org/ubuntu/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb"
# get the filename only, remove all till last slash "/"
# see http://wiki.bash-hackers.org/syntax/pe#substring_removal
debFile=${debURL##*/}
# change to your desired directory for installation/unpacking; here: $HOME
cd $HOME
# get the .deb file (no dependencies checked or resolved here)
curl -OL $debURL 
# unpack only the data part from the .deb file
# see https://en.wikipedia.org/wiki/Deb_%28file_format%29
ar p $debFile data.tar.xz | tar xJv --strip-components=2 -f - 
rm -v $debFile # clean up
echo "Done unpacking $debFile into $(pwd)"
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.