¿Hay alguna forma de obtener APT para instalar paquetes en mi directorio de inicio?
No quiero hacer cambios en todo el sistema.
Alternativamente, ¿hay algún administrador de paquetes de Linux basado en el directorio de inicio?
¿Hay alguna forma de obtener APT para instalar paquetes en mi directorio de inicio?
No quiero hacer cambios en todo el sistema.
Alternativamente, ¿hay algún administrador de paquetes de Linux basado en el directorio de inicio?
Respuestas:
Dpkg no tiene la función --relocate que tiene RPM. Sin embargo, vale la pena considerar cuántos paquetes RPM admiten esa función. Básicamente, no se puede hacer.
Lo que podría hacer es usar un chroot si desea probar algo antes de instalarlo globalmente en el sistema. Para hacer esto, necesita poder acceder a la raíz. Lo primero que debe hacer es crear un chroot básico:
# debootstrap lenny lenny-chroot
Esto crea un chroot de Lenny dentro del lenny-chroot
directorio.
Ahora podemos ingresar al chroot:
# chroot lenny-chroot
Ahora podemos hacer lo que queramos e instalar cualquier cosa sin que estropee el resto del sistema. Cuando hayamos terminado, simplemente escriba exit o presione ctrl-D
Linuxbrew es otro administrador de paquetes no root para Linux (basado en el popular sistema de administración de paquetes Homebrew para OS X) que compila desde la fuente y mantiene los archivos binarios en su directorio de inicio.
Citando los documentos, las características de Linuxbrew son:
El prefijo Gentoo hace exactamente lo que quieres.
Instala todos los paquetes en un directorio especificado. No se requiere acceso de root. Si desea deshacerse de él, simplemente elimine el directorio base.
PD: Esto no funciona en Ubuntu> = 11.04, o cualquier otro derivado de Debian con Multiarch.
Como una pequeña adición a la opción de compilarlo, existe la opción a mitad de camino de compilar en un paquete con una opción de prefijo diferente en el momento de la compilación (con "checkinstall" o quizás algún otro método). La ventaja es que el paquete aparecerá en los administradores de paquetes, como aptitude o synaptic.
Además de eso, creo que en algunos casos puede ser posible descargar el .deb real y forzar un prefijo diferente a través de la instalación de dpkg, pero creo que no es algo que se pueda hacer con cualquier paquete aleatorio, pero deben haber sido compilados con alguna variable para su ubicación (en lugar del prefijo explícito literal) que exportaría antes de instalar. Sin embargo, no sé nada sobre el procedimiento, google para "prefijo dpkg instdir".
Puede usar fakechroot : eche un vistazo a la demostración en su sitio web.
Roboless GoboLinux puede hacer exactamente lo que está pidiendo: administrador de paquetes, sin privilegios elevados, en su propio directorio de inicio. Espero que sepas lo que estás haciendo; rootless no es el modo de instalación más bien mantenido de Gobo, y cuando solía usarlo hace unos años requería algunos ajustes ya que el script de instalación estaba un poco desactualizado en relación con otros cambios de Gobo.
También hay klik que vuelve a empaquetar bastantes .deb
s, puede instalar paquetes en su directorio de inicio y no requiere privilegios de root para operar ... pero la configuración inicial requiere root.
Generalmente obtengo las fuentes y reviso un archivo como "INSTALAR". Por lo general, hay instrucciones para hacer ./configure --prefix=somedir
. Entonces tienes que agregar somedir/bin
a tu camino.
No, no creo que puedas.
Lo mejor que puedo pensar ahora es usar apt-get source
y compilar su paquete. Tal vez podría modificar de alguna manera el procedimiento (que puede ser más o menos automatizado) para instalar los paquetes en su hogar.
Otro es usarlo dpkg -X
para extraerlo en un directorio de su elección.
Hay muy pocos casos en los que necesite instalar paquetes en su carpeta de inicio.
Sin embargo, puede compilar e instalar software en su máquina local. Simplemente descomprima, luego configure con ./configure --prefix=$HOME/local
o algún otro directorio. Entonces puedes make
y make install
como siempre. Esto compilará e instalará ese programa ~/local/
, por ejemplo, el programa que ejecute estará en ~/local/bin/programmname
.
Según mi propia experiencia, no hay una manera fácil de usar los paquetes DEB existentes para instalar en otro directorio que no sea un entorno chroot . Las herramientas de instalación de Debian / Ubuntu dpkg / aptitude / dselect requieren privilegios de root para funcionar correctamente.
Ahora, dado el DEB de origen, puede modificar el archivo Debian / rules para que el paquete se construya e instale en un árbol de directorios diferente, pero no está utilizando los paquetes binarios ya disponibles.
Como otros han mencionado, puede usar debootstrap y crear fácilmente un entorno chroot, lo que he hecho en el pasado para tener un entorno de 32 bits en un host de 64 bits, pero esto requiere instalar un chroot con al menos los paquetes base duplicados. Si tiene el espacio y esta es una solución viable, puede acoplarla dchroot
, o incluso mejor schroot
, para permitir la ejecución fácil de las aplicaciones instaladas en el entorno chroot.
Tengo problemas para imaginar cómo funcionaría eso con los repositorios oficiales de una distribución. ¿Cómo debería resolver las dependencias? ¿Del sistema o de sus directorios personales? ¿Qué pasa si encuentra diferentes versiones en ambos?
Lo mejor que se me ocurre sería un entorno chroot'd como lo hacen las personas para aplicaciones de 32 bits en sistemas de 64 bits. Es más costoso ya que llamarías debootstrap en el chroot, pero con un poco de simblinking y diversión de script de envoltura de shell, podría hacer lo que quieras.
Todavía estoy trabajando en el problema, pero debootstrap es básicamente lo que necesitas y debería funcionar con fakeroot. debootstrap es solo un montón de scripts de shell, así que lo estoy separando para ver qué lo hace funcionar. La parte difícil será desinstalar los archivos una vez que estén instalados.
Lamentablemente, no he oído hablar de ninguna distribución que proporcione algo como esto (aunque estoy seguro de que sería muy popular). Sin embargo, es posible que pueda imitar la distribución basada en rpm ... No he intentado esto, pero puede crear una base de datos de rpm basada en el usuario y luego instalar las rpm en la base de datos de usuario.
Intenta configurar una nueva distribución basada en el usuario con:
rpm --initdb --dbpath DIRECTORY
Luego hay varias opciones que pueden ayudar:
--prefix
--relocate
Tengo una solución que he utilizado con éxito para instalar una GRAN colección de paquetes de software cooperantes en un servidor Debian de la escuela, donde no tengo acceso a la raíz (ni siquiera para instalar otro administrador de paquetes). No utiliza deboostrap
ni ningún administrador de paquetes.
El método es en parte manual, pero he hecho todo lo posible para que sea conveniente.
Utiliza este script que he llamado install
(no lo olvides chmod +x
):
#!/bin/bash
# PREFIX is the installation root, i.e. a directory you have write access to
PREFIX=$HOME
# unpack the archive to $PREFIX
ar p "$1" data.tar.xz | tar xJ -C $PREFIX
# go through all unpacked text files and search for occurences of /usr/...
# we're gonna replace some of them with $PREFIX/usr
files=$(dpkg --contents $1 | grep '^-' | awk '{print $6}' | sed 's/^..//' | sort | uniq)
for f in $files; do
file="${PREFIX}${f}"
if grep -Iq . "$file"; then
if grep -q '/usr' "$file"; then
# interactively ask for each occurence, if it should be replaced
vim -c '%s#/usr#'$PREFIX'/usr#gc' -c 'wq' "$file"
fi
else
echo "Leaving binary file $file unmodified"
fi
done
Por lo general, primero descargo un archivo deb usando apt-get download package_name
. Luego ejecuto ./install package_name_blabla.deb
y decido manualmente sobre cada aparición /usr
en los archivos desempaquetados, si se debe reemplazar por $PREFIX/usr
o no.
Esta decisión depende completamente de qué paquetes están instalados por el sistema y cuáles se instalan utilizando este método. Por lo general, por ejemplo, los archivos pkg-config necesitan esta sustitución, mientras que las líneas shebang como #!/usr/bin/perl
no. La regla general es que la ruta resultante debe apuntar a un archivo existente.
Con los paquetes instalados de esta manera, obviamente necesita informarles a los otros programas sobre ellos. Esto se puede lograr añadiendo los valores correctos a LD_LIBRARY_PATH
, PATH
, PYTHONPATH
, PKG_CONFIG_PATH
, CMAKE_MODULES_PATH
, CMAKE_PREFIX_PATH
etc.
Hay una advertencia en este enfoque, que las dependencias no se descargan / instalan automáticamente; tienes que hacer un seguimiento de ellos manualmente.
Además, APT obviamente no conoce estos paquetes, por lo que siempre los mostrará como faltantes. Pero eso tiene sentido: quién querría instalar una aplicación de todo el sistema que depende de la instalación de un usuario.
Si desea desinstalar un programa, puede enumerar el contenido del archivo deb usando ar p "$1" data.tar.xz | tar tJ
y luego eliminar todos estos archivos del PREFIX
.