Últimamente me he dado cuenta de que en Arch Linux tengo unos cuantos paquetes instalados desde AUR (unos 57 paquetes) y muchos están desactualizados. Por esta razón decidí crear un repositorio local con los paquetes que instalé de AUR y de esta forma agregar los futuros paquetes que instale localmente además de mantener actualizados los que ya tengo instalados.

Para crear y administrar un repositorio local lo mejor es instalar un programa que funciona desde el terminal llamado local-repo. Este programa permite gestionar los paquetes de un repositorio local además de mantenerlos actualizados con una sola línea de comando.

Otra característica que tiene es que descarga, compila y crea un paquete automáticamente del repositorio de AUR con introducir un simple comando.

Instalar local-repo

local-repo se encuentra en el repositorio de AUR, así que descargamos el paquete del repositorio, lo descompirmimos y lo instalamos con makepkg.

[usuario@equipo ~]$ wget https://aur.archlinux.org/packages/lo/local-repo/local-repo.tar.gz
[usuario@equipo ~]$ tar -xf local-repo.tar.gz
[usuario@equipo ~]$ cd hello
[usuario@equipo ~]$ makepkg -sic

Configurar el repositorio

Con el paquete local-repo ya instalado procedemos a configurar nuestro repositorio local.

Crear las carpetas del repositorio

Vamos a crear tres carpetas dentro del directorio de nuestro repositorio, una para los logs, otra para almacenar los archivos PKGBUILD y una última carpeta que contendrá los paquetes del repositorio y la base de datos del repositorio.

Yo tengo una partición destinada a repositorios locales que monto automáticamente al inicio en /media/repos. Dentro de esa partición crearé mi repositorio local para arch linux el cual llamaré mi_repo y contendrá las tres carpetas mencionadas anteriormente.

[usuario@equipo ~]$ cd /media/repos
[usuario@equipo repos]$ mkdir mi_repo mi_repo/logs mi_repo/pkgbuilds mi_repo/pkgs-x86_64

Configurar local-repo

Ahora que tenemos creadas las carpetas necesarias para el repositorio debemos configurar local-repo creando el archivo ~/.config/local-repo. En el interior de este archivo pondremos lo siguiente ajustando los valores a nuestro caso particular.

[mirepo-local]
path = /media/repos/mi_repo/pkgs-x86_64
sign = no
signdb = no
log = /media/repos/mi_repo/logs/local-repo-log
buildlog = /media/repos/mi_repo/logs/build-logs
pkgbuild = /media/repos/mi_repo/pkgbuilds

A continuación una breve descripción de que hace cada opción

  • path -> Indica la ubicación de los paquetes del repositorio.
  • sign -> Firma los paquetes con una clave PGP.
  • signdb -> Firma la base de datos con una clave PGP.
  • log -> Ubicación del archivo donde se guardará el log de local-repo.
  • buildlog -> Carpeta donde se almacenarán los logs al construir los paquetes.
  • pkgbuild -> Carpeta donde almacenar los archivos PKGBUILD.

Hay unas cuantas opciones más y ejemplos de configuración que podéis consultar en el archivo /usr/share/local-repo/config.example o en la documentación.

Agregar y eliminar paquetes al repositorio

El siguiente paso es agregar paquetes a nuestro repositorio puesto que ahora mismo esta vacío. Para agregar un paquete se puede copiar directamente a la carpeta del repositorio (en mi caso /media/repos/mi_repo/pkgs-x86_64) y después actualizar la base de datos manualmente, pero esto es poco práctico y ya que tenemos instalado local-repo vamos a utilizarlo.

Agregar paquetes

Para agregar paquetes depende de dónde se encuentre ubicado el paquete. Si es un paquete que tenemos almacenado en el disco duro lo agregaríamos al repositorio de la siguiente forma.

[usuario@equipo ~]$ local-repo nombre-repositorio -a ruta-del-paquete

y si es un paquete que hay que descargar y construir del repositorio de AUR utilizaríamos el siguiente comando.

[usuario@equipo ~]$ local-repo nombre-del-repositorio -A nombre-paquete
Nota: Cuándo agregamos paquetes del repositorio de AUR se descarga el PKGBUILD y se crea el paquete igual que si usáramos el comando makepkg -L. Por este motivo debemos tener en cuenta que esta opción puede llevar mucho tiempo, sobre si los paquetes deben ser compilados.

Eliminar paquetes

Eliminar paquetes es bastante más rápido que agregarlos y se puede hacer también con local-repo.

[usuario@equipo ~]$ local-repo nombre-repositorio -r nombre-paquete

Agregar el repositorio local a la lista de repositorios

El último paso es añadir nuestro repositorio a pacman.conf para que poder utilizarlo con pacman. Para hacerlo abrimos con privilegios de root el archivo /etc/pacman.conf y agregamos al final lo siguiente.

[mirepo-local] 
SigLevel = Optional TrustAll 
Server = file:///media/repos/mi_repo/pkgs-x86_64

Tenemos que sustituir el valor de Server por la ruta a la capeta que contiene los paquetes de nuestro repositorio local. Para ver más opciones y detalles del archivo pacman.conf consulta la página man de pacman.conf.

Finalmente sincronizamos las bases de datos de pacman y ya tenemos listo nuestro repositorio.

[usuario@equipo ~]$ sudo pacman -Sy

Actualizar repositorio local

Aunque ya tenemos nuestro repositorio funcionando es muy importante mantener los paquetes actualizados y no crear el repositorio y dejarlo abandonado. Para actualizarlo es tan simple como escribir el siguiente comando en el terminal.

[usuario@equipo ~]$ local-repo -UV

La opción -U actualiza los paquetes que se encuentren en AUR y la opción -V actualiza los paquetes CVS de AUR (como los git, svn o cvs por ejemplo).

Nota: Al igual que cuando agregamos paquetes de AUR, al actualizar se deben compilar los programas y crear el paquete para ArchLinux. Por este motivo conviene mantener actualizado el repositorio y evitar así largos períodos de compilación.