Monday, February 15, 2016

¿Para qué compilar desde fuente?


Sigo sin entender para qué cojones debo de compilar.

Así pensaba yo también. No tiene sentido usar algo si no entiendo primero su utilidad. Te comparto un ejemplo/experiencia que tuve. 

Me moví a Arch porque busco algo más ligero que Freya y a la vez, algo que me ayude a aprender sobre la instalación y mantenimiento del sistema operativo: algo que me permita "tener control" de los detalles, para aprender de estos. Como sabemos, Arch requiere ser instalado "desde el suelo": el sistema base no tiene GUI, es sólo el prompt y una CLI. Vos agregás componentes según tu voluntad y preferencias.
Estoy usando Awesome WM en lugar de un Destkop Environment completo. También uso urxvt como Terminal, en lugar de una terminal pesada. Esto hace mi escritorio ligero. Ahora bien, extraño la transparencia en Terminal, como la de Pantheon-Terminal en Freya, porque permite trabajar en Terminal sobre tu navegador por ejemplo, y leer cosas mientras trabajás en Terminal. Esto me lleva a un predicamento: 

  • Podría instalar Pantheon-Terminal en Arch, pero no quiero algo tan pesado ni con barra de menú porque es un desperdicio de pixeles... más aun en una laptop. Quiero ahorrar pixeles y dedicarlos a más contenido, no a botones.
  • En todo caso, la selección de Terminal no es el problema; Awesome WM no soporta transparencias de manera nativa, sino que require un "composite manager", gestor de composición de ventanas para lograrlo. Esto significa que puedo usar virtualmente cualquier Terminal y tener transparencia, siempre y cuando tenga un Composite Manager.
Después de documentarme, aprendí que el Composite Manager llamado Unagi, es ligero y de hecho,  fue desarrollado para Awesome WM. Unagi es un paquete adicional en Arch (y diría que en muchas otras distros). No toda la gente lo usa ni lo necesita, así que no tiene sentido para los desarrolladores de Arch, incluirlo como paquete oficial en el sistema base; hacerlo sería abusar del almacenaje de quienes no lo usarán: esta sería una definición justa del término BLOATWARE. Por eso Unagi está en el AUR, el Repositorio de Usuarios de Arch; acá hay software de calidad, en tarballs, listo para ser descargado, compilado e instalado manualmente por quien desee usarlo. 

Así que, para ejemplificar los pasos que te compartí antes, hice lo siguiente:


$ wget https://aur.archlinux.org/cgit/aur.git/snapshot/unagi.tar.gz
$ tar xvf unagi.tar.gz
$ cd unagi 
$ cat PKGBUILD 
$ makepkg -s 
$ sudo pacman -U unagi.tar.xz

Explicación: descargué el tarball (paquete comprimido), lo extraje, creó un directorio con contenido; me moví a ese directorio, leí el script de instalación o PKGBUILD (es recomendado leer el script de instalación -si entendés de bash-scripting :v para confirmar que el script está limpio y no tiene nada malicioso.); compilé el paquete asegurándome de forzar dependencias a ser instaladas (el script incluye referencias a esas dependencias), e instalé el paquete... aunque pude ahorrarme la última línea y usar $ makepkg -sri  en su lugar.



Y listo. Ahora que tengo Unagi instalado, puedo trabajar en las configuraciones apropiadas dentro de Awesome para hacer que mi terminal sea transparente. Y esa, es otra historia. Hasta pronto :)

Overview: Instalar paquetes desde el código fuente.

A veces no encontrarás cierto software en los repos oficiales de tu Distro. Esto es por diversas razones: a lo mejor es software privativo y ponerlo en los repos oficiales contradice la filosofía de la Distro, o no es soportado directamente porque no es totalmente estable o compatible con la Distro o su DE oficial; tal vez está en versión Beta o Alfa incluso, etc. Sin embargo, siempre podés instalar ese software, si vas a un repo no-oficial de tu Distro (como el AUR en Arch) o si vas a un repo externo. Lo que tenés que hacer es algo llamado "compilar el código fuente" (compile/build from source).

Vamos a detallar las instrucciones para compilar en la CLI desde Arch. En esencia, el procedimiento total es igual en toda Distro, pero algunos comandos cambian. 

Pre-requisitos.

Antes de todo, necesitás: 
  • Un usuario regular. Por motivos de seguridad no podés instalar paquetes del AUR o repositorios externos, desde Root. 
    • Truco personal: tengo un directorio dentro de /home/usuario exclusivo para descargar paquetes fuente y compilarlos. $ mkdir ~/AUR_downloads
  • Que Arch tenga instalado el base-devel (devel= "development"; o sea, un conjunto de paquetes para desarrollo): $ pacman -S --needed base-devel
    • Específicamente, los paquetes que se requieren son: 
      • gcc (Compilador GNU para C, C++, Java, etc.)
      • wget (para descargar los paquetes comprimidos, alias "tarballs")
      • makepkg (para compilar localmente)
      • fakeroot (como dije en el punto principal anterior, instalar como root no es recomendado ni permitido; fakeroot "emula" un ambiente root para instalar paquetes desde código fuente).
         

Procedimiento.

Una vex tenés todo esto, podés instalar paquetes no-oficiales. En esencia, el proceso es simple: 
  • Descargar el paquete, o tarball (esto es un archivo .gz; usás wget).
    • $ wget foo.gz
  • Descomprimir/extraer el paquete ( se usa $ tar xvf ); un directorio nuevo es creado (Por eso tengo un fólder sólo para paquetes, para mantener todas los tarballs y los directorios extraídos organizados) con algunos archivos; PKGBUILD, README y otros. compilados.
    • $ tar xvf foo.gz
    • $ cd foo
  • Compilar e instalar el paquete (en Arch se usa $makepkg; en otras distros esto puede variar); esto producirá un archivo con el nombre del paquete, en formato .xz). Se puede con una de estas formas:
    • $ makepkg -sri   (compila, resuelve dependencias e instala).
    • O de esta forma: 
      • $ makepkg -s
      • $ sudo pacman -U foo.xz
  • Regocijarte y fappear a lo grande. 

Entradas populares.