Crear repositorio basado en el contenido del DVD de instalación y exportarlo mediante http

Habitualmente cuando creo un nuevo laboratorio para realizar pruebas, suelo configurar un repositorio local en una de las máquinas para posteriormente exportarlo mediante Apache. Esto es especialmente útil cuando tenemos varios entornos virtualizados y necesitamos instalar software en ellos sin disponer de conexión a Internet.

En esta entrada vamos a copiar el contenido de los dvd de instalación de CentOS 7 a un directorio y posteriormente vamos a configurar Apache para que exporte el directorio y sea accesible a través de nuestra red local. El repositorio se podrá utilizar para instalar software y también para realizar instalaciones por red.

Escenario

  • Servidor CentOS 7
  • SELinux activado
  • FirewallD activado
  • Servicio httpd instalado

Procedimiento

El primer paso será crear el directorio dónde copiaremos el contenido de nuestro repositorio, en mi caso voy a crear el directorio /repo.

mkdir /repo/

A continuación copiamos el contenido del dvd de instalación al directorio /repo. Para realizar este paso yo he utilizado rsync, también es totalmente válido el uso de cp.

rsync -avr --progress /mnt/dvd /repo/

Una vez finalice la copia ya tendremos todos los datos necesarios para configurar nuestro repositorio, esto es debido a que el dvd de instalación incluye los ficheros repodata del repositorio. En caso de realizar un repositorio personalizado tendríamos que hacer uso de la herramienta createrepo la cual se encarga de generar los ficheros repodata necesarios para el funcionamiento del repositorio.

Al tener habilitado SELinux vamos a tener que re-etiquetar todo el contenido del directorio /repo para que el daemon httpd pueda leer su contenido, de lo contrario SELinux bloqueara el intento de lectura y recibiremos un error 403 cuando intentemos acceder vía http.

semanage fcontext -a -t httpd_sys_content_t "/repo(/.*)?"; restorecon -R /repo/

Ahora ha llegado el momento de configurar Apache para que exporte el contenido de nuestro repositorio. En mi caso voy a exportar el repositorio en http://<host_ip>/repo (dónde host_ip es cualquier ip disponible en el host).

El primer paso será crear un nuevo fichero de configuración dónde definiremos el Apache Directory y asignaremos un Alias para nuestro repositorio.

vi /etc/httpd/conf.d/repo.conf

# Definicion Alias
<IfModule alias_module>
   Alias /repo /repo
</IfModule>

# Definicion Directory
<directory repo="">
   Options Indexes FollowSymLinks
   AllowOverride None
   Require all granted
</directory>

Una vez guardado el fichero de configuración lo re-etiquetaremos con la etiqueta SELinux adecuada:

semanage fcontext -a -t httpd_config_t repo.conf; restorecon repo.conf

Ahora reiniciamos el servicio httpd o forzamos a re-cargar su configuración:

systemctl restart httpd

Ahora el servicio httpd está exportando nuestro repositorio mediante http por el puerto 80, sin embargo, el firewall no tiene una regla que permita establecer conexión con el puerto 80, así que tenemos que generar dicha regla. Para ello haremos uso del comando firewall-cmd:

firewall-cmd --permanent --add-service=http; firewall-cmd --reload

En estos momentos nuestro repositorio está siendo exportado mediante http y es accesible por cualquier equipo conectado a nuestra red. Ahora vamos a generar un fichero de configuración para que yum lo utilice como repositorio:

vi /etc/yum.repos.d/centos7Dvd.repo

[CentOS7_DVD]
name=CentOS 7 Dvd Repository
baseurl=http://<host_ip>/repo/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

<host_ip> será la IP del servidor que está exportando el repositorio por http.

Ahora ya tenemos todo configurado y podríamos empezar a instalar paquetes a través de nuestro repositorio de red (siempre que tengamos el paquete a instalar disponible).

Comentarios

Entradas populares de este blog

Recuperar contraseña de root en CentOS 7 / RHEL 7