¿Instalar paquetes en el directorio local?

38

Me gustaría instalar paquetes de software, similares a apt-get install <foo>pero:

  1. Sin sudoy
  2. En un directorio local

El propósito de este ejercicio es aislar compilaciones independientes en mi servidor de integración continua .

No me importa compilar desde la fuente, si eso es lo que se necesita, pero obviamente preferiría el enfoque más simple posible. Intenté apt-get source --compile <foo>como se menciona aquí, pero no puedo hacer que funcione para paquetes como autoconf. Obtuve el siguiente error:

dpkg-checkbuilddeps: Unmet build dependencies: help2man

Tengo help2man compilado en un directorio local, pero no sé cómo informar a apt-get de eso. ¿Algunas ideas?

ACTUALIZACIÓN : Encontré una respuesta que casi funciona en https://askubuntu.com/a/350/23678 . El problema chrootes que requiere sudo. El problema apt-get sourcees que no sé cómo resolver las dependencias. Debo decir que se chrootve muy atractivo. ¿Hay un comando equivalente que no requiere sudo?

Gili
fuente
Sugiero que sea un duplicado de esta pregunta: [ askubuntu.com/questions/147654/… [1]: askubuntu.com/questions/147654/…
77
@kamil, no lo es. No estoy tratando de instalar sin acceso a la red. Estoy tratando de instalar sin sudoy en un directorio que no es del sistema.
Gili
44
Chicos, por favor no desestimen mi pregunta sin explicar por qué . Gracias.
Gili
Si no tiene root en el sistema, no podrá resolver dependencias fácilmente . Sin embargo, a veces es posible; tendría que comenzar a instalar el software en su hogar, comenzando con las dependencias más bajas y modificando su LD_PATH para que los programas puedan encontrar sus bibliotecas. Sin embargo, fallará si alguno de los paquetes requiere root (o suid) para ejecutarse.
Enero
@Enero, estoy tratando de compilar un proyecto de software dentro de un sistema de compilación automatizado. Hasta donde sé, ninguna de sus dependencias (necesarias para compilar) requiere root.
Gili

Respuestas:

20

En general, esto no es factible, ya que te meterías con el sistema de dependencias apt.

Hay dos soluciones:

  1. Instale el paquete fuente, cambie al directorio fuente, configure e instale el paquete independientemente de los sistemas de empaquetado manualmente en el directorio que elija.

    apt-get source <package>
    

    Esto no necesita root, descarga la fuente del paquete, lo descomprime en un directorio dentro del directorio actual. Luego puede cambiar a ese directorio, realizar modificaciones en la fuente, configurar la instalación en otro destino, etc.

    Sin embargo, configurar a qué directorio de instalación deben ir los programas depende del programa en particular. Muchos programas usan el ./configure --prefix localdirpara dirigir la instalación a localdir; pero esto no es siempre el caso.

  2. Cree un entorno chroot en el que instalará los paquetes:

    debootstrap precise myfancyinstall
    

    Ahora ha creado una instalación ficticia en el directorio myfancyinstall /

    chroot myfancyinstall
    

    Puede usar apt-get install dentro de la jaula chroot para instalar lo que desee.

enero
fuente
Esto parece prometedor. Usar apt-get sourcesin --compileparece suprimir la advertencia sobre dependencias insatisfechas (lo que me permite resolverlas yo mismo)
Gili
¿Hay alguna manera de obtener paquetes que no tengan fuente de esta manera también?
soandos
La solución (2) funcionará independientemente. De lo contrario, está solo: tal vez haya otra forma de instalar el paquete. O descargar el archivo del paquete deb y descomprimirlo con AR: ar vx mypackage.deb. Luego analice el contenido del paquete y descubra cómo instalarlo manualmente.
Enero
14

usando un shell bash y adquiriendo el archivo "package.deb" (suponiendo que el nombre del paquete es "paquete") puede ejecutar el siguiente comando para lograr lo que desea: instalar el paquete para que su directorio de inicio sea tratado de la misma manera "/ "se trataría en una instalación normal.

Este es el comando:

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

Es posible que se enfrenten a algunos errores, como falta $ HOME / var / lib / dpkg / lock, así que simplemente cree todos los archivos faltantes que obtendrá de los errores y luego la instalación debería funcionar sin sudo.

tenga en cuenta que si "apt-get download" no funciona, puede intentar con "apt download" o "apitutde download package".

Si ninguno de los métodos funciona, puede descargar el paquete manualmente desde http://packages.ubuntu.com/

otro método sería ejecutar el comando chroot con el parámetro $ HOME y luego instalarlo de la misma manera que antes solo sin --root = $ HOME. ese comando lo llevaría a un shell donde "/" es su $ HOME actual. para volver al modo normal no olvides "salir"

buena suerte.

usuario172681
fuente
Después de crear los archivos faltantes de los que se quejaba dpkg, comenzó a segfaularse.
Matt Chambers el
0

Si se encuentra en un alojamiento web compartido con sshacceso pero no apt-getsin root, etc. o un sistema restringido de manera similar, lo siguiente puede funcionar para usted. Funcionó para mí en un sistema donde uname -adevolvió algo comoSMP 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)"
Iolsmit
fuente