Cómo usar GNU Stow para administrar programas instalados desde fuentes y archivos dotfiles
Objetivo
Administre fácilmente programas instalados desde archivos fuente y dotfiles usando GNU stow
Requisitos
Permisos de raíz
Dificultad
FÁCIL
Convenciones
#: requiere que los comandos de Linux determinados se ejecuten con privilegios de root
directamente como usuario root o mediante el uso del comandosudo
$ – requiere que los comandos de Linux determinados se ejecuten como un usuario normal sin privilegios
Introducción
A veces tenemos que instalar programas desde el origen: tal vez no estén disponibles a través de los canales estándar, o tal vez queramos una versión específica de un software. GNU stow es un programa muy agradable de fábrica de enlaces simbólicos
que nos ayuda mucho a mantener los archivos organizados de una manera muy limpia y fácil de mantener.
Obteniendo estiba
Es muy probable que tus repositorios de distribución contengan stow
, por ejemplo en Fedora, todo lo que tienes que hacer para instalarlo es:
# dnf install stow
o en Ubuntu/Debian puedes instalar stow ejecutando:
# apt install stow
En algunas distribuciones, stow no está disponible en los repositorios estándar, pero se puede obtener fácilmente añadiendo algunas fuentes de software adicionales (por ejemplo, epel en el caso de Rhel y CentOS7) o, como último recurso, compilándolo desde el código fuente: Requiere muy pocas dependencias.
Compilando estiba desde la fuente
La última versión de almacenamiento disponible es la 2.2.2
: el tarball está disponible para descargar aquí: https://ftp.gnu.org/gnu/stow/
.
Una vez que hayas descargado las fuentes, debes extraer el tarball. Navegue hasta el directorio donde descargó el paquete y simplemente ejecute:
$ tar -xvpzf stow-2.2.2.tar.gz
Una vez extraídas las fuentes, navegue dentro del directorio stow-2.2.2 y, para compilar el programa, simplemente ejecute:
$ ./configure
$ make
Finalmente, para instalar el paquete:
# make install
De forma predeterminada, el paquete se instalará en el directorio /usr/local/
, pero podemos cambiar esto, especificando el directorio a través de la opción --prefix
del script de configuración. o agregando prefix="/your/dir"
al ejecutar el comando make install
.
En este punto, si todo funcionó como se esperaba, deberíamos tener stow
instalado en nuestro sistema.
¿Cómo funciona la estiba?
El concepto principal detrás de Stow está muy bien explicado en el manual del programa:
The approach used by Stow is to install each package into its own tree,
then use symbolic links to make it appear as though the files are
installed in the common tree.
Para comprender mejor el funcionamiento del paquete, analicemos sus conceptos clave:
El directorio de almacenamiento
El directorio stow es el directorio raíz que contiene todos los paquetes stow
, cada uno con su propio subárbol privado. El directorio de almacenamiento típico es /usr/local/stow
: dentro de él, cada subdirectorio representa un paquete
Guardar paquetes
Como se dijo anteriormente, el directorio stow contiene "paquetes", cada uno en su propio subdirectorio separado, generalmente con el nombre del programa en sí. Un paquete no es más que una lista de archivos y directorios relacionados con un software específico, administrados como una entidad.
El directorio de destino de almacenamiento
El directorio de destino de almacenamiento es un concepto muy sencillo de explicar. Es el directorio en el que deben aparecer los archivos del paquete para instalarse. De forma predeterminada, se considera que el directorio de destino de stow es el que se encuentra encima del directorio desde el que se invoca stow. Este comportamiento se puede cambiar fácilmente usando la opción -t
(abreviatura de –target), que nos permite especificar un directorio alternativo.
Un ejemplo práctico
Creo que un ejemplo bien hecho vale más que 1000 palabras, así que mostremos cómo funciona Stow. Supongamos que queremos compilar e instalar libx264
. Clonemos el repositorio git que contiene sus fuentes:
$ git clone git://git.videolan.org/x264.git
Unos segundos después de ejecutar el comando, se creará el directorio “x264” que contendrá las fuentes, listas para ser compiladas. Ahora navegamos dentro de él y ejecutamos el script configure
, especificando el directorio /usr/local/stow/libx264 como --prefix
:
$ cd x264 && ./configure --prefix=/usr/local/stow/libx264
Luego compilamos el programa y lo instalamos:
$ make
# make install
El directorio x264 debería haberse creado dentro del directorio stow: contiene todo el material que normalmente se habría instalado directamente en el sistema. Ahora, todo lo que tenemos que hacer es invocar stow. Debemos ejecutar el comando desde dentro del directorio stow, usando la opción -d
para especificar manualmente la ruta al directorio stow (el valor predeterminado es el directorio actual), o especificando el destino con -t
como se dijo antes. También debemos proporcionar como argumento el nombre del paquete que se va a guardar. En este caso ejecutamos el programa desde el directorio stow, por lo que todo lo que necesitamos escribir es:
# stow libx264
Todos los archivos y directorios contenidos en el paquete libx264 ahora se han vinculado simbólicamente en el directorio principal (/usr/local) de aquel desde el cual se invocó stow, de modo que, por ejemplo, los archivos binarios libx264 contenidos en /usr/local/bin
, los archivos contenidos en /usr/local/stow/x264/etc
están ahora tiene un enlace simbólico en /usr/local/etc
y así sucesivamente. De esta manera, al sistema le parecerá que los archivos se instalaron normalmente y podremos realizar un seguimiento fácilmente de cada programa que compilamos e instalamos. Para revertir la acción, simplemente usamos la opción -D
:
# stow -d libx264
¡Se hace! Los enlaces simbólicos ya no existen: simplemente "desinstalamos" un paquete almacenado, manteniendo nuestro sistema en un estado limpio y consistente. En este punto debería quedar claro por qué stow también se utiliza para gestionar archivos de puntos. Una práctica común es tener todos los archivos de configuración específicos del usuario dentro de un repositorio git, para administrarlos fácilmente y tenerlos disponibles en todas partes, y luego usar stow para colocarlos donde corresponda, en el directorio de inicio del usuario.
Stow también evitará que usted anule archivos por error: se negará a crear enlaces simbólicos si el archivo de destino ya existe y no apunta a un paquete en el directorio stow. Esta situación se denomina conflicto en la terminología de estiba.
¡Eso es todo! Para obtener una lista completa de opciones, consulta la página de manual de almacenamiento y no olvides contarnos tu opinión al respecto en los comentarios.