Installare i file di sviluppo localmente per costruire sul sistema senza accesso root?


10

C'è un server su cui lavoro, che esegue una versione precedente di Linux. Non ho accesso root al sistema, quindi volevo creare una versione più recente di uno strumento che uso molto (Vim 7.3). Ho pensato di costruirlo e installarlo in ~ / bin. Tuttavia, richiede file di sviluppo di ncurses che non sono installati a livello di sistema. Ho trovato ncurses-devel rpm ed ho estratto le cartelle 'lib' e 'include', dove le metterei e come direi allo script ./configure di trovarle in modo da poter configurare e costruire correttamente il pacchetto localmente?

Modifica: ho finito per risolvere questo problema installando lo stesso sistema operativo in Virtualbox e costruendo lì il pacchetto e copiando i file binari.


serverfault.com/questions/23734 potrebbe essere abbastanza simile per aiutarti. La maggior parte delle risposte implica l'installazione di un sistema efficace all'interno di Homedir, ma può essere risolto in Gentoo Prefix e Rootless Gobo.
effimero

Risposte:


13

L'ho fatto abbastanza frequentemente nel mio ultimo lavoro: la soluzione che sembrava funzionare meglio era creare una directory ~ / usr e usare l'argomento --prefix per indirizzare gli script ./configure nella giusta direzione. Ecco i passaggi:

  • Crea la directory ~ / usr e includi le directory lib e bin sottostanti.
  • Nel tuo .profile, .bashrc o altro script di shell init, aggiungi quanto segue (o equivalente nel dialetto della shell):
    export PATH=$PATH:~/usr/bin
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/usr/lib
    export C_INCLUDE_PATH=$C_INCLUDE_PATH:~/usr/include
    export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:~/usr/include
  • Quando si creano pacchetti, utilizzare ./configure --prefix=/home/<username>/usr

Questa disposizione ha funzionato per me per la maggior parte delle situazioni in cui avevo bisogno di costruire cose nello spazio utente. La parte più difficile di solito è trovare e costruire tutte le dipendenze di cui hai bisogno, ma ciò richiede solo un google google o un uso giudizioso della funzionalità "get source" del gestore pacchetti.


Non ha funzionato abbastanza per me. Lo script configure non sembra trovare nulla in ~ / usr
postfuturist il

Ho avuto lo stesso problema @postfuturist. Ho finito per risolverlo usando ${HOME}anziché ~in tutte le mie chiamate di esportazione, e quindi pkg-config è stato felice ed è stato in grado di trovare librerie e pacchetti installati dall'utente.
phyatt,

3

Normalmente dovresti essere in grado di riconfigurare e modificare il codice per definire una nuova posizione nella tua home directory o altro percorso per tutte le librerie e programmi ...

Ma, IMHO, il modo più semplice (se hai molto spazio) è usare chroot in una sottodirectory con tutta una distribuzione Linux installata al suo interno. Di cuorse come un normale utente non puoi usare chroot , ma puoi usare questi fantastici strumenti: fakechroot e fakeroot

Per creare il filesystem chroot, mi piace distribuire una directory con Debian (o qualsiasi derivato Debian come Ubuntu) usando l' utility debootstrap .

Quindi la procedura è semplice (non entrerò nei dettagli tecnici, leggere i manuali di comando):

  • Ottieni e installa: strumenti fakeroot, fakechroot e debootstrap
  • creare una sottodirectory usando debootstrap (sono stato in grado di eseguirlo solo come root. Puoi farlo su un altro computer e copiare i binari se necessario)
  • Esegui: fakechroot fakeroot chroot mydebian-dir

Se hai bisogno di maggiori dettagli, penso di avere una sceneggiatura da qualche parte per fare tutto questo.


1

Un'altra soluzione per questo problema sta usando il prefisso Gentoo, come fanno gli utenti MacOSX e altre piattaforme (solaris, AIX):

http://www.gentoo.org/proj/en/gentoo-alt/prefix/

Compilerà lo stack Gentoo (con portage) in una posizione $ PREFIX. Utilizza i pacchetti Gentoo, la maggior parte dei pacchetti supporta l'utilizzo di queste impostazioni.

Portage terrà traccia di tutte le dipendenze, avrai l'ultima versione del software, è stata testata dalla community ...


1

Se prefix=/home/foo/usrnon funziona, prova:

CFLAGS=-I/home/foo/usr/include LDFLAGS=-L/home/foo/usr/lib ./configure
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.