¿Instalar archivos de desarrollo localmente para construir en el sistema sin acceso de root?


10

Hay un servidor en el que trabajo, que ejecuta una versión anterior de Linux. No tengo acceso de root al sistema, así que quería construir una versión más reciente de una herramienta que uso mucho (Vim 7.3). Pensé que simplemente lo construiría e instalaría en ~ / bin. Sin embargo, requiere archivos de desarrollo ncurses que no están instalados en todo el sistema. Encontré las rpm de ncurses-devel y extraje las carpetas 'lib' e 'include', ¿dónde las pondría y cómo le diría al script ./configure que las encontrara para poder configurar y construir el paquete localmente?

Editar: terminé trabajando alrededor de esto instalando el sistema operativo idéntico en Virtualbox, y construyendo el paquete allí y copiando sobre los binarios.


serverfault.com/questions/23734 puede ser lo suficientemente similar para ayudar. La mayoría de las respuestas implican instalar lo que es efectivamente un sistema completo dentro de su homedir, pero eso se puede solucionar en Gentoo Prefix y Rootless Gobo.
Ephemient

Respuestas:


13

Hice esto con bastante frecuencia en mi último trabajo: la solución que pareció funcionar mejor fue crear un directorio ~ / usr y usar el argumento --prefix para apuntar los scripts ./configure en la dirección correcta. Aquí están los pasos:

  • Cree el directorio ~ / usr e incluya los directorios lib y bin debajo de él.
  • En su .profile, .bashrc u otro script de inicio de shell, agregue lo siguiente (o equivalente en el dialecto de su 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
  • Al construir paquetes, use ./configure --prefix=/home/<username>/usr

Este arreglo funcionó para mí en la mayoría de las situaciones en las que necesitaba construir cosas en el espacio de usuario. La parte más difícil generalmente es encontrar y construir todas las dependencias que necesita, pero eso solo requiere buscar en Google o usar de manera juiciosa la funcionalidad 'get source' de su administrador de paquetes.


No me funcionó del todo. El script de configuración no parece encontrar nada en ~ / usr
postfuturist

Tuve el mismo problema @postfuturist. Terminé arreglándolo usando en ${HOME}lugar de ~todas mis llamadas de exportación, y luego pkg-config estaba contento y pude encontrar mis bibliotecas y paquetes instalados por el usuario.
phyatt

3

Normalmente debería poder reconfigurar y cambiar el código para definir una nueva ubicación en su directorio de inicio u otra ruta para todas las bibliotecas y programas ...

Pero, en mi humilde opinión, la forma más fácil (si tiene mucho espacio) es usar chroot en un subdirectorio con toda una distribución de Linux instalada en él. Por supuesto, como usuario normal, no puede usar chroot , pero puede usar estas excelentes herramientas: fakechroot y fakeroot

Para crear el sistema de archivos chroot, me gusta implementar un directorio con Debian (o cualquier derivado de Debian como ubuntu) usando la utilidad debootstrap .

Por lo tanto, el procedimiento es fácil (no ingresaré detalles técnicos, lea los manuales de comandos):

  • Obtenga e instale: herramientas fakeroot, fakechroot y debootstrap
  • crear un subdirectorio usando debootstrap (solo pude ejecutar esto como root. Puedes hacerlo en otra computadora y copiar los binarios si es necesario)
  • Ejecutar: fakechroot fakeroot chroot mydebian-dir

Si necesita más detalles, creo que tenía un script en algún lugar para hacer todo esto.


1

Otra solución para este problema es utilizar el Prefijo Gentoo, como lo hacen los usuarios de MacOSX y otras plataformas (solaris, AIX):

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

Compilará la pila Gentoo (con portage) en una ubicación $ PREFIX. Utiliza los paquetes de Gentoo, la mayoría de los paquetes admiten el uso de estas configuraciones.

Portage hará un seguimiento de todas las dependencias, tendrá la última versión del software, la comunidad lo ha probado ...


1

Si prefix=/home/foo/usrno funciona, intente:

CFLAGS=-I/home/foo/usr/include LDFLAGS=-L/home/foo/usr/lib ./configure
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.