Instalar un paquete localmente para un usuario: ¿mejores prácticas?

18

Quiero instalar Git localmente a un usuario en un servidor RHEL (no tengo acceso de root) ¿Cuál sería su forma más limpia / organizada de instalar software en una cuenta de usuario local?

  • ¿Instalar todo en el directorio de inicio de ese usuario?
  • ¿Cómo sería el diseño del directorio?
  • ¿Instalarías desde la fuente o RPM?
  • ¿Si desde RPM usarías YUM o RPM?
wiredin
fuente

Respuestas:

17

Hay formas de instalar rpms en un directorio de usuarios usando rpm, pero no creo que sea sencillo. No creo que haya una manera de hacerlo yum.

Mi práctica estándar se ha convertido en compilar desde la fuente a un localdirectorio en mi casa

$ mkdir ~/local
$ mkdir ~/local/bin
$ mkdir ~/local/lib
$ mkdir ~/local/include

Descargo la fuente como lo haría /usr/localcuando tengo root, por ejemplo, en ~/local/git.

Al compilar establezco el prefijo en el localdirectorio

$ configure --prefix=/home/user_name/local
$ make
$ make install

Luego agrego ~/local/bina mi $ PATH en .bash_profile.

Por supuesto, el problema con la instalación desde la fuente es que no se obtiene una resolución de dependencia automática. Si encuentra que necesita instalar dependencias, compílelas e instálelas como se indica arriba. Luego, cuando compila git, debe actualizar los indicadores de compilación para que busquen en la ubicación correcta las bibliotecas de la dependencia e incluyan archivos:

./configure --prefix=/home/user_name/local LDFLAG='-L/home/user_name/local/lib' CFLAGS='-I/home/user_name/local/include' CPPFLAGS='-I/home/user_name/local/include' CXXFLAGS='-I/home/user_name/local/include'
drs
fuente
Esto funcionó perfectamente, gracias por el consejo!
wiredin
13

Un archivo .rpm es en realidad una forma de cpioarchivo, que se parece mucho a una forma simple de tar. La rpm2cpioutilidad probablemente esté instalada en el sistema y no requiere privilegios para usarla; escribe a estándar, para convertir:

rpm2cpio whatever.rpm > whatever.cpio

Hay una manera de que man cpiote puedas ver a ti mismo, pero lo que ahora quieres hacer es alimentar el archivo a cpio en modo "copiar en":

cat whatever.cpio | cpio -i

Es muy probable que el material esté organizado en un árbol de directorios para que los archivos vayan a las ubicaciones apropiadas (bin, etc., etc.). Si no existen en su pwd, obtendrá un error, pero eso mostrará una lista de los archivos en el archivo (puede obtener lo mismo con el modificador -t/ --list). Si desea crear los directorios automáticamente, use -d. Entonces, una forma rápida de desempaquetar un rpm:

rpm2cpio whatever.rpm | cpio -i -d

Puede usar esto para instalar en $ HOME. El único problema será si el programa espera encontrar cosas /etc, etc., ya que muchas cosas tienen su ubicación de instalación codificada para cualquier propósito cuando se compilan.

Construir desde la fuente es probablemente una mejor opción (ya que puede proporcionar la ubicación correcta), pero si puede hacer que esto funcione en cualquier caso, entonces es rápido y simple.

Además, el explorador de archivos del comandante de medianoche ( mc), y probablemente otros exploradores de archivos además, le permitirán navegar por una jerarquía rpm o cpio (o tar comprimido o zip) y copiar archivos individuales como si el archivo estuviera desempaquetado (crea un sistema de archivos temporal para navegar con el contenido del archivo).

encerrada dorada
fuente
0

Esta es una alternativa (no usa yum) y el permiso será extraño, pero puede chownhacerlo para el usuario objetivo después: - también es un éxito o error :-(

#-## Download all dependency for the RPM -- 
#sudo yum install yum-utils
#sudo yumdownloader --resolve --destdir ~/download bash

#-## Install all downloaded to an alternate root 
#sudo rpm --initdb --root <user_home_dir>
#sudo rpm --root <user_home_dir> -Uvh --nodeps ~/download/*

Luego, agregue ubicaciones apropiadas a su ruta.

Kalpesh Patel
fuente