Skip to content

Objetivos

  • Crear un repositorio local para dnf y publicarlo via un WebServer.
  • El proveedor de Software clamav, ha hecho disponible el paquete RPM para RHEL > 8, pero no provee un repositorio Oficial de DNF/YUM. Se le ha solicitado crear un repositorio local con la última versión disponible de este software.

Entorno Inicial

  • Usuario: student
  • Máquina: servera
  • Contraseña inicial: student
  • Herramientas utilizadas: Shell Bash y utilidades básicas de Linux.

Pasos del Laboratorio

Prerequisitos

  1. Inicio de sesión

    • Inicia sesión en la máquina servera desde bastion como el usuario student utilizando la llave privada proporcionada:
    ssh student-#-servera
    

Parte 1: Creación de Repositorio

  1. Cambiar a superusuario

    • Usa el comando sudo -i para obtener privilegios de root:
    sudo -i
    
  2. Se procederá a crer un directorio en cual tendrá el contenido del repositorio local en /opt/repo-local-clamav.

    mkdir -p /opt/repo-local-clamav
    

  3. Se decargará en este directorio el archivo RPM solicitado.
    cd /opt/repo-local-clamav
    curl -LO https://www.clamav.net/downloads/production/clamav-1.4.2.linux.x86_64.rpm
    cd
    
  4. Consultar el contenido del directorio.
    find /opt/repo-local-clamav/
    
  5. Instalar paquete para creación de repositorio.
    dnf install createrepo -y
    
  6. Crear repositorio local.
    createrepo /opt/repo-local-clamav/
    
  7. Consultar el contenido del directorio.

    find /opt/repo-local-clamav/
    
    En la salida debe existir la metada del repositorio similar a:
    /opt/repo-local-clamav/
    /opt/repo-local-clamav/clamav-1.4.2.linux.x86_64.rpm
    /opt/repo-local-clamav/repodata
    /opt/repo-local-clamav/repodata/f0b016f48ad13f2918100205609688ec45bcd0a102bf5facce4267aab82654f9-primary.xml.gz
    /opt/repo-local-clamav/repodata/ea5e56c8ededf9542ad4955f31bc6842daa7aeb9ad2a5236455f914cf51eb72e-filelists.xml.gz
    /opt/repo-local-clamav/repodata/474ad35a83a3c26cefb187f0d72145af6bb74b2608cc2eaf6b8f9466318f80bd-other.xml.gz
    /opt/repo-local-clamav/repodata/4de2a02b77f9dc339ce7ed958200cfe870d2d85c9c112ad55a2b249946ff5328-primary.sqlite.bz2
    /opt/repo-local-clamav/repodata/62a3025cc3536a07a1bde9ce7a5a23d647e13cacb30a3f1e9fecffe520918402-filelists.sqlite.bz2
    /opt/repo-local-clamav/repodata/8bc19179b93e1938f2f9ea8c8ac35c4090b3ff9e3a8084b3b746f2591d558488-other.sqlite.bz2
    /opt/repo-local-clamav/repodata/repomd.xml
    

  8. Validar funcionamiento de repositorio local (no webserver). Crear archivo /etc/yum.repos.d/repo-local-clamav.repo.

    cat << EOF > /etc/yum.repos.d/repo-local-clamav.repo
    [repo-local-clamav]
    name=clamav Repo Local
    baseurl=file:///opt/repo-local-clamav
    gpgcheck=no
    EOF
    
    9. Listar repositorios de YUM/DNF.
    dnf repolist
    
    Salida debe contener:
    repo-local-clamav                 clamav Repo Local
    

  9. Instalar paquete clamav, desde repositorio local.

    dnf install clamav
    
    Aceptar con y

  10. Desinstalar paquete clamav, desde repositorio local.

    dnf remove  clamav -y
    

Parte 2: Publicación de Repositorio

  1. Definir contexto de SELinux para directorio
    semanage fcontext -a -t public_content_t '/opt/repo-local-clamav(/.*)?'
    restorecon -RvF /opt/repo-local-clamav
    
  2. Instalar apache.
    dnf install httpd -y
    
  3. Habilitar e Iniciar apache.
    systemctl enable --now httpd
    
  4. Agregar configuración de repositorio local en apache.
    cat << EOF > /etc/httpd/conf.d/repo-local-clamav.conf
    <Directory "/opt/repo-local-clamav">
    Options Indexes
    Require all granted
    </Directory>
    Alias /repo-local-clamav /opt/repo-local-clamav
    EOF
    
  5. Aplicar configuración apache.
    systemctl restart httpd
    
  6. Validar contenido publicado.
    curl -I http://localhost/repo-local-clamav/repodata/repomd.xml 
    
    Debe mostrar salida similar a:
    HTTP/1.1 200 OK 
    Date: Tue, 15 Apr 2025 23:48:28 GMT
    Server: Apache/2.4.62 (Rocky Linux)
    Last-Modified: Tue, 15 Apr 2025 23:24:05 GMT
    ETag: "c01-632d976fe1101"
    Accept-Ranges: bytes
    Content-Length: 3073
    Content-Type: text/xml
    
  7. Habilitar puertos 80 en firewall.
    firewall-cmd --add-service http --permanent
    firewall-cmd --reload
    
  8. Modificar configuración re repositorio local para utilizar contenido en Apache. Editando archivo /etc/yum.repos.d/repo-local-clamav.repo, remplazando file por http.
     sed -i "s/^\(baseurl=\).*/\\1http:\/\/$(hostname -f)\/repo-local-clamav/g" /etc/yum.repos.d/repo-local-clamav.repo 
     cat  /etc/yum.repos.d/repo-local-clamav.repo
    
  9. Instalar paquete clamav, desde repositorio local.
    dnf install clamav
    
    Aceptar con y
  10. Puede copiar el archivo /etc/yum.repos.d/repo-local-clamav.repo, a otro servidor y probar instalar el paquete.

    NOTA: Utilice scp o rsync.

  11. Regresa al usuario student:

    exit
    

Resultados Esperados

  • Se ha creado correctamente un repositorio local de paquetes RPM accesible mediante dnf.
  • El repositorio local ha sido publicado y es accesible a través de un servidor web configurado adecuadamente.
  • El paquete de software ClamAV, compatible con RHEL 8 o superior, ha sido integrado al repositorio local.
  • El servidor es capaz de instalar y gestionar ClamAV utilizando dnf desde el repositorio local creado.