Un paquete rpm es un paquete que contiene software que debe instalarse mediante este sistema de administración de paquetes, y los paquetes rpm generalmente se distribuyen a través de repositorios de software. En este tutorial aprendemos cómo crear un repositorio rpm personalizado y cómo configurar nuestra distribución para usarla como fuente de software.
Requisitos de software y convenciones de la línea de comandos de Linux Categoría | Requisitos, convenciones o versión de software utilizada |
Sistema | Cualquier distribución de la familia Red Hat |
Software | dnf, crear repositorio |
Otro | Privilegios administrativos para configurar el repositorio |
Convenciones | #:requiere que los comandos de Linux dados se ejecuten con privilegios de root, ya sea directamente como usuario root o mediante el uso de sudo comando $:requiere que los comandos de Linux dados se ejecuten como un usuario normal sin privilegios |
Instalación de software
Por el bien de este tutorial, crearemos nuestro repositorio personalizado en una máquina local con IP 192.168.0.39
que usará como un servidor http. En esta máquina, lo primero que debemos hacer es instalar el createrepo
paquete. La distribución instalada en la máquina remota no necesita ser una distribución basada en rpm, siempre que dicho paquete esté disponible. En nuestro caso, por ejemplo, el sistema instalado en el servidor es Debian, por lo que para instalar el paquete necesitamos ejecutar el siguiente comando:
$ sudo apt-get update && sudo apt-get install createrepo
Como dijimos antes, en nuestro ejemplo específico queremos hacer que el software alojado en nuestro repositorio personalizado sea accesible a través del protocolo HTTP, por lo que necesitamos instalar un servidor HTTP; en este caso trabajaremos con Apache. Instalarlo en Debian, es solo cuestión de ejecutar:
$ sudo apt-get install apache2
Una vez que los paquetes están instalados, podemos continuar y crear nuestro repositorio rpm en unos pocos pasos muy simples.
Creando el repositorio
El Apache VirtualHost predeterminado DocumentRoot
creado cuando Apache está instalado en Debian es /var/www/html
. En este punto, podemos optar por crear un VirtualHost para nuestro repositorio, o simplemente crear el directorio del repositorio como parte
del predeterminado. En aras de la simplicidad, en este tutorial exploraremos la última opción:
$ sudo mkdir /var/www/html/repo
El repo
directorio que creamos con el comando anterior, dentro del VirtualHost predeterminado DocumentRoot , alojará nuestros paquetes y será la base de nuestro repositorio. Para estructurarlo mejor, ahora queremos crear algunos subdirectorios
con el nombre de la distribución, su versión y la arquitectura de los paquetes que queremos que estén disponibles. Supongamos, por ejemplo, que queremos usar el repositorio en Fedora 33 x68_64
, debemos ejecutar el siguiente comando:
$ sudo mkdir -p /var/www/html/repo/fedora/releases/33/x86_64
El siguiente paso consiste en poblar el repositorio. Todo lo que tenemos que hacer es colocar los paquetes que queremos que estén disponibles, dentro del directorio del repositorio apropiado. En este caso, como ejemplo, llenaré el repositorio con un paquete obtenido al compilar el editor VSCode desde la fuente. El paquete se llama code-1.56.0-1617183449.el8.x86_64.rpm
. Una vez copiado, nuestra estructura de archivos debería verse así:
repo
└── fedora
└── releases
└── 33
└── x86_64
└── code-1.56.0-1617183449.el8.x86_64.rpm
Con nuestro repositorio poblado, todo lo que queremos hacer es ejecutar createrepo
comando dentro del directorio que contiene los paquetes. En este caso ejecutaríamos:
$ sudo createrepo /var/www/html/repo/fedora/releases/33/x86_64
El comando creará los metadatos del repositorio dentro de un directorio llamado repodata
, en función de los paquetes contenidos en el directorio de destino y debe reiniciarse cada vez que se actualiza el repositorio con nuevos paquetes o se eliminan paquetes antiguos. Una vez que se inicia el comando, nuestra estructura de directorios se verá así:
repo
└── fedora
└── releases
└── 33
└── x86_64
├── code-1.56.0-1617183449.el8.x86_64.rpm
└── repodata
├── 22ab1d1d123bb7d7cde556bf8a8ac4daf9cdb75572f40ebdd2f399908cb7f6b9-other.xml.gz
├── 26ed9b63868b2e0263dfa817e21921c4e7542c1be9f6b7875381bba6bd78d1c6-primary.sqlite.bz2
├── 50fc300a761812761cf9a8413a619da23cf336d49999753568ce19a97c025d44-other.sqlite.bz2
├── a523f54b5fcd0720c182969f991f51e125728a361f31237725dc9418d5e126ea-primary.xml.gz
├── af2fa9ea5deaffca5ffc9f3e524155defa8cfa5656962845a45c8b0e984f3e19-filelists.sqlite.bz2
├── f95849cf860f1184b97d30000ea1f9f1c35edd6d625dcd387453187510dd4a18-filelists.xml.gz
└── repomd.xml
Nuestro repositorio fue creado con éxito. Ahora tenemos que configurar nuestra distribución para usarla como fuente de software.
Agregar el repositorio como fuente de software
Pasemos a nuestra distribución basada en rpm y veamos cómo configurarla para usar nuestro repositorio personalizado como fuente de software. Los archivos de configuración del repositorio se encuentran en /etc/yum.repos.d
directorio, y debe tener el
.repo
extensión. Mirando dentro del directorio podemos ver los ya existentes:
$ ls /etc/yum/repos.d
fedora-cisco-openh264.repo fedora-updates-testing-modular.repo
fedora-modular.repo fedora-updates-testing.repo
fedora.repo rpmfusion-free.repo
fedora-updates-modular.repo rpmfusion-free-updates.repo
fedora-updates.repo rpmfusion-free-updates-testing.repo
Ahora, creemos nuestra configuración de repositorio personalizada. Dentro del expediente, como conjunto mínimo de información, debemos proporcionar:
- La identificación del repositorio
- El nombre del repositorio
- Una URL base del repositorio
- El estado del repositorio
- Si verificar la firma gpg de los paquetes o no
Guardaremos dicha información en un archivo llamado ownrepo.repo
, aquí está su contenido:
[ownrepo]
name=Own repository
baseurl=http://192.168.0.39/repo/fedora/releases/$releasever/$basearch
enabled=1
gpgcheck=0
La definición informada entre corchetes ([ownrepo]
) es el ID del repositorio y debe ser único en todas las definiciones de repositorio. Con el name
key proporcionamos un nombre legible por humanos para el repositorio como una cadena. Esto es opcional; si no se proporciona un nombre, la ID del repositorio también se usará como nombre.
Con el baseurl
key especificamos una lista de URL para el repositorio. Las URL deben estar separadas por un espacio o una coma. En nuestro ejemplo, solo proporcionamos una sola URL, pero puede notar que usamos dos variables:
La expansión del primero, $releasever
, dará como resultado la versión de lanzamiento del sistema operativo, en este caso 33
, ya que estamos instalando nuestro repositorio en un sistema Fedora 33. La segunda variable, $basearch
, se expandirá en una cadena que representa la arquitectura base del sistema, que en nuestro caso es x86_64
.
El enabled
la clave requiere un booleano valor que determina si el repositorio debe considerarse activo o no. La última clave que usamos es gpgcheck
:también requiere un valor booleano y se utiliza para determinar si se debe realizar una verificación de firma gpg en los paquetes instalados desde el repositorio. En nuestro ejemplo, simplemente deshabilitamos la verificación, ya que el repositorio es solo para uso personal.
Ahora que nuestro repositorio está configurado, podemos intentar instalar el code
paquete de él, simplemente ejecutando:
$ sudo dnf install code
Own repository 451 kB/s | 13 kB 00:00
Dependencies resolved.
==================================================================================================================
Package Architecture Version Repository Size
==================================================================================================================
Installing:
code x86_64 1.56.0-1617183449.el8 ownrepo 100 M
Transaction Summary
==================================================================================================================
Install 1 Package
Total download size: 100 M
Installed size: 294 M
Is this ok [y/N]:
Una vez que proporcionemos una respuesta afirmativa al aviso y lo confirmemos, el paquete se instalará en nuestro sistema.
Conclusiones
En este artículo aprendimos lo fácil que es crear un repositorio rpm personalizado con createrepo
utilidad, y vimos cómo crear un archivo de configuración dnf en nuestra distribución para usarlo como fuente de software. Vimos un subconjunto mínimo de
las claves que se pueden usar en la configuración del repositorio; para obtener una lista más detallada, puede consultar la documentación oficial de dnf.