Recientemente me he visto obligado a compilar GCC ya que no contaba con root en la máquina final en la cual tenía que instalar varios programas. Para instalar todos y cada uno de estos programas he tenido que hacer malabares y compilar el código fuente de cada uno de ellos para emplearlos desde el home del usuario. Pero no contaba ni siquiera con un compilador y esperar a que este estuviera instalado por el administrador era impensable.

Entendiendo el problema

El objetivo inicial era disponer de un usuario con un gestor de paquetes sin necesidad de root y que operase por completo desde el home del usuario al que tenía acceso, todo ello sabiendo que la máquina a la que tenía acceso no contaba con un compilador GCC instalado.

Mi objetivo fue el siguiente:

  • En un primer lugar necesitaba un compilador, totalmente ajeno a las carpetas del sistema. Es decir necesitaba instalar GCC dentro de una carpeta del home del usuario.
  • De paso contar con un gestor de paquetes que me diera plena libertad de instalar dentro del home del usuario todo el software que me hiciera falta. En este caso contaba con la idea de instalar “linuxbrew“, que por si no lo conocéis se trata de un gestor de paquetes que ha sido portado a Linux del proyecto brew para OSX. Brew cumple con mis necesidades ya que compila código fuente del software que vayamos a instalar y lo ubica en el home del usuario, por lo que no afecta a la máquina.

Resolviendo el problema – Primera parte

Para poder resolver este problema decidí levantar un contenedor de Docker con el mismo linux en la misma versión que la máquina de destino donde iba a llevar esta solución, intentando buscar la mayor compatibilidad binaria.

docker run -ti --name maquina ubuntu /bin/bash

Una vez se ha descargado las imágenes que componen este contenedor, es necesario instalar todo el software que nos va a permitir compilar todo el software que llevaremos a la máquina de destino. Es decir nuestro objetivo pasa por crear una especie de “compilación cruzada”. Para ello haremos uso del siguiente comando:

//Accedemos al contenedor
docker exec -it maquina /bin/bash
//Instalamos el software
apt-get update
apt-get install build-essential curl file git python-setuptools ruby

El siguiente paso es crear un usuario idéntico al de la máquina de destino, en mi caso voy a crear el usuario “pablo” ya que supuestamente la máquina de destino tendrá ese mismo usuario.

adduser pablo

Instalamos brew en el contenedor – Segunda parte

Una vez contamos con el software necesario para compilar y hemos creado el usuario que imita al de la máquina de destino, tenemos que pasar a instalar linuxbrew en este usuario, pero antes nos movemos dentro del contenedor a nuestro nuevo usuario:

//Si tenemos que volver a acceder al contenedor
docker exec -it maquina /bin/bash
// Cambianmos de usuario
su pablo

Ahora pasamos a instalar brew en nuestro usuario y tras ello instalaremos el conjunto de software mínimo dentro de brew. Esta instalación de brew será la que trasladaremos a la otra máquina y contará con todo lo necesario para funcionar.

git clone https://github.com/Linuxbrew/brew.git ~/.linuxbrew
PATH="$HOME/.linuxbrew/bin:$PATH"
export MANPATH="$(brew --prefix)/share/man:$MANPATH"
export INFOPATH="$(brew --prefix)/share/info:$INFOPATH"
brew update --force
// Ahora instalamos el software necesario en la otra maquina 
brew install gcc ruby git python perl make nano

Con esto la carpeta de .linuxbrew de nuestro home pasará a contener todo el software que hemos instalado con nuestro usuario. Por esto ahora lo único que debemos es:

  1. Comprimir la carpeta de linuxbrew
  2. Transferirla a la máquina de destino
  3. Configurar el .bashrc para que cargue las variables de entorno necesarias
cd
tar zcvf brew.tar.gz .linuxbrew
scp brew.tar.gz usuario@maquinadestino:/home/usuario

En la máquina de destino entonces:
Descomprimimos:

cd
tar xvf brew.tar.gz 

Añadimos las variables de entorno necesarias en el .bashrc del home:
export MANPATH=”$(brew –prefix)/share/man:$MANPATH”
export INFOPATH=”$(brew –prefix)/share/info:$INFOPATH”

Con esto ya podríamos tener el software que hemos instalado en el docker. Pudiendo trasladar el que nos interese y luego probar a instalar directamente con Docker. Una forma “rápida” de instalar software cuando no te dejan pero lo necesitas si o sí.

Categorías: Linux

Entradas relacionadas

DevOps

OpenShift: Instalación local con Docker o binarios

Llevo una tarde entera pegándome con la documentación de OpenShift para instalarlo en un servidor CentOS 7.3 que he levantado en una máquina de Azure. Mi objetivo sencillamente vocacional, tengo la intención de manejar con Leer más…

Linux

Crear una VPN con nuestra Raspberry Pi

Para mi disponer de mi propia VPN es una gran ventaja, ya que me permite varias cosas: Acceder desde fuera de casa a la red local de mi casa: Pudiendo controlar cualquier equipo de forma Leer más…

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies