¿Cómo instalar un programa localmente sin privilegios de sudo?


73

Supongamos que tengo acceso ssh a algún servidor Ubuntu como usuario y necesito algunas herramientas que no sean del sistema para instalarlo por conveniencia (mc, rtorrent, mcedit). No quiero molestar a los administradores de estos pequeños programas.

¿Hay alguna manera de instalarlos (hacerlos correr) sin usar algo como sudo apt-get install?



Consulte también ¿Dónde se debe colocar un ejecutable local? para discusión relevante.
George M



Respuestas:


33
  1. Compile e instale en ~/bin(y edite su .bashrcpara configurarlo PATHpara incluirlo). las bibliotecas pueden compilarse e instalarse de manera similar ~/lib(configurarse LD_LIBRARY_PATHpara que apunten a ellas), y los encabezados de desarrollo pueden instalarse, por ejemplo, en ~/includes.

  2. Dependiendo de los detalles específicos de los programas que desea instalar y las bibliotecas de las que dependen, puede descargar los archivos .deb y usar ' dpkg-deb -x' para extraerlos debajo de su directorio de inicio. A continuación, tendrá una gran cantidad de "diversión" estableciendo el PATH, LD_LIBRARY_PATHy otros variables. Cuanto más complejo sea el programa o la aplicación que esté instalando, más divertido estará para :)

    Por supuesto, no podrá instalar los setuidarchivos binarios de esta manera; se instalarán pero (dado que no tiene permiso para hacerlos rootear o establecer el setuidbit en ellos), solo serán archivos binarios normales de su propiedad .

    Del mismo modo, los demonios y los servicios del sistema que esperan ejecutarse como ciertos UIDo tienen la capacidad de cambiar uid, o esperan que los archivos estén en su /etclugar, ~/etcetc., es probable que no funcionen bien, si es que funcionan.

  3. La mayoría de los administradores de sistemas se consideran mcy mceditsean inocuos, programas de "mayormente inofensivos".

    Sin embargo, muy pocos considerarían que instalar un cliente torrent sea inofensivo, especialmente si tienen que pagar por el ancho de banda o terminan siendo legalmente responsables. La mayoría de los administradores de sistemas probablemente no estarán del todo felices de que los usuarios finales instalen dicho software sin permiso. Pueden decir "seguro, adelante, noquear" o no ... pero debe preguntar sobre cualquier cosa que pueda causar problemas a los propietarios / administradores de la máquina.


He oído que la configuración LD_LIBRARY_PATHes un truco malvado . ¿Esto también se aplica aquí, o he entendido mal?
Will Vousden

1
Se aplican todos los problemas con la configuración de LD_LIBRARY_PATH. Sí, es, o puede ser, un hack malvado. a veces, los hacks malvados son necesarios para lograr objetivos particulares ... lo crucial al romper las "reglas" es conocerlas lo suficientemente bien como para saber de qué están diseñadas para salvarte, y exactamente por qué necesitas romperlas en este caso particular y cuáles son o pueden ser los riesgos.
cas

Solo tenía que instalar un programa independiente (zoom), así que primero probé la segunda opción ( dpkg-deb -xen un directorio local). Trabajado como un encanto. No tuve que hacer ningún LD_LIBRARY_PATHtruco. Incluso si tuviera que hacerlo, lo haría en la misma línea de comando para no afectar la configuración global (por ejemplo $ LD_LIBRARY_PATH=/home/usr1/zoom/opt/zoom:/home/usr1/zoom/opt/zoom/zoom ZoomLauncher).
Antony

solo necesita establecer LD_LIBRARY_PATH si uno o más de los paquetes que desea instalar proporcionan bibliotecas compartidas. Si solo se trata de archivos ejecutables, datos, documentos, archivos de configuración, etc., puede usar las bibliotecas del sistema.
cas

50

Necesita compilarlos desde la fuente. Debería ser solo una cuestión de

apt-get source PACKAGE
./configure --prefix=$HOME/myapps
make
make install

El binario se ubicaría en ~/myapps/bin. Por lo tanto, agregue export PATH="$HOME/myapps/bin:$PATH"a su .bashrcarchivo y vuelva a cargar el .bashrcarchivo con source ~/.bashrc. Por supuesto, esto supone que gcc está instalado en el sistema.


66
¿Qué pasa con las dependencias? ¿Hay alguna forma de manejarlos automáticamente sin ejecutar el mismo código para cada uno de ellos?
yura

1
@Yura no, tienes que hacerlo tú mismo.
Ulrich Dangel

¿Qué pasa si no tienes los privilegios para hacer esto? ¿Es habitual tener el permiso para compilar software sin acceso a sudo / root?
Freedo

5

Puede usar JuNest , que crea un pequeño contenedor de Linux en el directorio del usuario, donde puede instalar cualquier paquete.


0

Me enfrenté al mismo problema, así es como lo solucioné rápidamente, suponiendo que tenga un servidor Linux del mismo sistema operativo y arquitectura.

  1. Instale el software en el sistema que controla

  2. Encuentre el ejemplo ejecutable which pythony cópielo en~/

  3. Copie las bibliotecas con:

    ldd "$(which python)"  | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ~/
    

Transfiera el ejecutable y las bibliotecas al otro sistema donde solo tiene privilegios locales, luego ejecute lo siguiente:

mkdir ~/lib
export PATH="$PATH:~/lib"
export LD_LIBRARY_PATH=~/lib:/lib:/usr/lib

Esto creará una carpeta ~/libpara almacenar las bibliotecas, agregarla a su ruta y decirle a LD que mire las bibliotecas allí, así que solo agregue sus archivos ejecutables y las bibliotecas allí, ahora puede ejecutarlo como lo haría en otro lugar

Esto puede ser muy hacky, pero es muy portátil, rápido, y todavía no he encontrado algo que no pueda ejecutar de esa manera, por supuesto, el software no puede intentar hacer cosas que necesitan acceso a la raíz, como enlazar a un puerto inferior de 1024, etc.


-1

Estoy teniendo el mismo problema que tú. Todavía no lo he probado, pero parece que Linuxbrew puede ser útil en este tema.

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.