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.