Certificación LFCE. Actualizar paquetes desde la red, un repositorio o el sistema de archivos local.

Este artículo forma parte de una serie de documentación enfocada a preparar el examen de certificación Linux Foundation Certified Engineer (LFCE)” para Centos 7. Pertenece a la sección de competencias “Network filesystems & file services”.

Paquetes

Introducción.

Esta es una de las secciones donde no está muy claro que nos pueden pedir en el examen LFCE.

  • Actualizar paquetes desde la red… ¿es actualizar paquetes desde un repositorio no?. Para actualizar paquetes por red es necesario que sea desde un repositorio ¿se refiere quiza a un repositorio local “propio”?
  • Actualizar desde el sistema de archivos local… ¿desde un repositorio local? ¿desde una iso montada?
  • ¿Será necesario saber crear repositorios “propios” con createrepo?

Intentaremos en el artículo ver todas estas posibilidades y tener claro el uso de repositorios.

Configuración de repositorios para yum

La configuración de yum se realiza a través del fichero /etc/yum.conf
No suele ser normal que tengamos que tocar la configuración de este fichero salvo la configuración de los repositorios que se realiza en ficheros individuales en un directorio tal como nos indica al final de yum.conf

# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d

Por tanto hay que acordarse de que para obtener la ayuda de man para configurar estos ficheros será necesario usar man yum.conf. Puede ser muy importante en el examen.

Un vistazo a una instalación de Centos 7 nos mostrará una serie de ficheros de configuración de repositorios

[~]# ll -lh /etc/yum.repos.d/ 
1,7K dic  9 09:59 CentOS-Base.repo
1,3K dic  9 09:59 CentOS-CR.repo
 649 dic  9 09:59 CentOS-Debuginfo.repo

Cada uno de ellos puede incluir uno o más repositorios. Deben acabar en “.repo” si no el sistemas los obvia (una forma de desactivarlos).
Si echamos un ojo a uno. p.e. “Centos-Base.repo” nos encontramos con varias secciones que definen repositorios. Por ejemplo:

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

Una breve descripción de las opciones más importantes.

  • [base] El identificador para esta sección de repositorio
  • name El nombre del repositorio (tal como lo mostrará yum
  • baseurl Excluyente con la siguiente. Dirección “directa” del repositorio. Puede ser http, https, ftp, fs local,…
  • mirrorlist Apunta a un archivo que contiene una lista de baseurls. Al usar un archivo con varias nos aseguramos que si una falla puede acceder a otras.
  • gpgcheck (0/1) Si va a chequear o no la clave gpg del repositorio (para verificar que es el “auténtico”)
  • gpgkey La clave de seguridad del repositorio que normalmente tendremos en local de la primera vez que se usa el repositorio.
  • enable (0/1) En este caso no aparece pero se usa mucho para activar o desactivar este repositorio. Por defecto es activado (otra forma de desactivar un repositorio).

(Solo curiosidad). Te preguntarás de donde obtiene el valor de las variables “$releasever”, $basearch, $infra, … Pues el fichero yum.conf tiene una variable que apunta a un paquete distroverpkg=centos-release. De dicho paquete centos-release (sería redhat-release para un RHEL) se obtienen las variables

[]# rpm -qa | grep centos-release
centos-release-7-2.1511.el7.centos.2.10.x86_64

O bien con yum info

[]# yum info centos-release
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.heanet.ie
 * extras: ftp.heanet.ie
 * updates: ftp.heanet.ie
Installed Packages
Name        : centos-release
Arch        : x86_64
Version     : 7
Release     : 2.1511.el7.centos.2.10
Size        : 35 k
Repo        : installed
From repo   : base
Summary     : CentOS Linux release file
License     : GPLv2
Description : CentOS Linux release files
  • $releasever = 7.2.1511
  • $basearch = x86_64
  • $infra = Este parece que no se usa de momento.

En este caso caso nuestro “mirrorlist” sería

mirrorlist=http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=

Si listamos los repositorios con yum repolist nos mostrará los configurados y entre ellos el que acabamos de ver:

[]# yum repolist  
Complementos cargados:fastestmirror  
Loading mirror speeds from cached hostfile  
 * base: ftp.heanet.ie  
 * extras: ftp.heanet.ie  
 * updates: ftp.heanet.ie   

id del repositorio      nombre del repositorio        estado
base/7/x86_64           CentOS-7 - Base               9.007
extras/7/x86_64         CentOS-7 - Extras             191
updates/7/x86_64        CentOS-7 - Updates            369
repolist: 9.567

Esto es lo mínimo a saber para moverte por la configuración de repositorios. Posteriormente modificaremos alguno para apuntar a una ruta de un Apache “nuestro”.

Configuración de Apache para servir directorios navegables.

Este titulo tan raro de esta sección es ciertamente aclarativo. Para poder servir un repositorio desde un servidor necesitamos:

  • Un servidor http con una configuración adecuada. Apache en este caso pero podría ser otro
  • Directorios con los paquetes en el formato adecuado y una BBDD asociada.
  • La utilidad para crear / actualizar la BBDD del repositorio, createrepo.

Inicialmente vamos a preparar un Apache que nos sirva un directorio “browseable”

Instalación de Apache y preparación de la ruta.

Instalamos Apache, un navegador local para hacer pruebas y la utilidad rsync. Activamos e iniciamos Apache (el puerto en el FW lo habilita ya el instalador).

yum install httpd lynx rsync
systemctl enable httpd
systemctl start httpd

Creamos un directorio en la ruta por defecto que usa Apache para hacerlo más sencillo. La estructura del directorio será conforme a Version / Release para poder crear más repositorios posteriormente con la misma sintaxis.

mkdir -p /var/www/html/repos/centos/7/2/

Normalmente no será necesario hacer nada más ya que en la configuración por defecto de Apache en Centos 7 dejará navegar por dichas rutas -> http://host/repos/… En el examen no tendremos un navegador así que una configuración de este tipo tendriamos que probarla con lynx que para algo lo hemos instalado.

lynx http://localhost/repos

Esto nos informará del directorio que estamos usando y nos dejará movernos por estos. Si da algún tipo de error algo está mal.

Obtención de los paquetes.

Para obtener los paquetes tenemos varias opciones. Un par de ellas que combinadas son las mejores probablemente. Copiar los paquetes de una ISO y/o sincronizarlos con un repositorio.

Copia de paquetes de la ISO de Centos en la versión correspondiente.

Esto es tan sencillo como bajar la ISO adecuada de los repositorios correspondientes, montarla y copiar los ficheros.

mkdir -p /var/www/html/repos/centos/7.2.1511/os/x86_64/
mount -t iso9660 CentOS-7-x86_64-DVD-1511.iso /media/
cp -R /media/* /var/www/html/repos/centos/7.2.1511/os/x86_64/

¿Por que hemos creado directorios adicionales? Para no limitarlos. Si navegamos por los mirror de Centos vemos que el equivalente a la ISO base cuando bajas un DVD es ese mismo directorio “../os/x86_64”. Podemos tener solo este repositorio pero si queremos crear el resto de repositorios adicionales que no incluye el DVD base como extras, updates, cloud,… también podremos hacerlo. Podríamos no haberlo hecho y servir el “base” directamente en “../7.2.1511/”. Sería correcto pero nos limitaríamos.

Podemos irnos a la sección “Pruebas de repositorio local” para ir probándolo.

Si buscamos en el internete Mirrors de Centos veremos que en el listado aparecen muchos que además de servir por http/https y/ ftp tambien nos facilitan una “dirección” rsync. Usaremos esa dirección para sincronizar con nuestro repositorio.

[]# rsync -avzn rsync://mirror.in2p3.fr/ftp/linux/CentOS/7.2.1511/os/x86_64/ /var/www/html/repos/centos/7.2.1511/os/x86_64/

Si queremos solo probarlo para ver un informe de ficheros que cambian añadiremos el flag -n. Esto hará que nos informe pero sin copiar ficheros.

Podemos verificarlo previamente y posteriormente

[root@localhost ~]# du -sch /var/www/html/repos/centos/7.2.1511/os/x86_64/
7,4G    /var/www/html/repos/centos/7.2.1511/os/x86_64/
7,4G    total

Atención. Estos repositorios tienen ya una BBDD en fichero que gestiona los paquetes incluidos en el repositorio. Desde el momento que siempre que copiamos / sincronizamos nuevos paquetes también lo hacemos con la BBDD no hay ningúna razón para recrearla con createrepo. Si añadierasmos paquetes propios o sincronizaramos solo directorios de paquetes si que podría ser necesario (ver posteriormente el uso de createrepo).

Pruebas de repositorio local

Para probar nuestro repositorio en red local lo mejor es desactivar el resto. Lo más rápido es renombrar los ficheros (renombramos extensiones a “.repo.NO” p.e.) o los moverlos a un directorio de Backup. Creamos un fichero p.e.
CentOS-Base-local.repo con una configuración nuestra que apunte a nuestro servidor de Apache ya sea local en un servidor de nuestra red.

[base_local]
name=CentOS-$releasever - Base - RepositorioLocal
baseurl=http://localhost/repos/centos/7.2.1511/os/x86_64/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

Podemos evitar complicaciones como variables y sin gpg key si deseamos. Si ya hemos tenido un repositorio externo en igual version funcinarán las keys instaladas. Lo probamos ahora de forma sencilla con yum repolist

[root@localhost ~]# yum repolist
Complementos cargados:fastestmirror
Loading mirror speeds from cached hostfile
id del repositorio  nombre del repositorio              estado
base_local          CentOS-7 - Base - RepositorioLocal  9.007

Lo importante es que nos liste nuestro repositorio y SOBRE TODO el número de paquetes. Si no conecta a nuestro repositorio nos pondrá 0 paquetes.
Podemos probar a instalar un paquete que no tengamos, p.e.:

yum install git

Veremos que el nos resuelve dependencias y nos informa que el repositorio de instalación es el nuestro **”base_local”. Si lo instalamos y hacemos un “yum info git” nos informará que está instalado desde nuestro repositorio.

Configuración de repositorio desde ficheros locales

Hemos visto ya como usar Apache para crear una copia de repositorio local y configurar nuestros S.O. para instalar desde esta. Otra opción interesante es saber como configurar la instalación desde un sistemas de ficheros ya sea local o más incluso más interesane en NFS.
En nuestro caso ya hemos visto las distintas opciones de copias a local repositorios externos. Solo sería necesario cambiar las ubicaciones por otras más correctas y modificar la definición del repo para instalar paquetes desde local. En nuestro caso y con las rutas usadas previamente para Apache un ejemplo sería:

[base_local]
name=CentOS-$releasever - Base - RepositorioLocal
baseurl=file:///var/www/html/repos/centos/7.2.1511/os/x86_64/

Los repositorios desde ficheros nos serán muy útiles desde NFS e incluso también puntualmente poder montarlos desde un DVD local o una ISO para lo cual usamos exactamente el mismo método.
Atención: cuando usamos en el parámetro baseurl el valor file debemos empezar la ruta con tres barras “///”.

Crear repositorios locales propios con “createrepo”.

Hasta ahora hemos visto como replicar y/o usar repositorios ya existentes ya sea de red, dispositivos locales y/o replicados desde estos. Dichos repositorios incluyen un fichero con una BBDD de paquetes. Si alteramos los paquetes existentes en el directorio quitando y/o añadiendo dicha BBDD quedaría desfasada.
Si quisieramos crear un repositorio propio o modificar uno existente lo hariamos con la utilidad createrepo. Cuando hablo de propio me refiero a un repositorio con paquetes propios nuestros o seleccionados.

yum install createrepo

Vamos a ver un ejemplo sencillo con un paquetes externos que bien podrian ser nuestro :).
Creamos un directorio local, que nos valga ya para servir con Apache también.

mkdir /var/www/html/repos/centos/eldespistado

Bajamos p.e. el paquete de la utilidad rdiff-backup de Enterprise Linux 7. Si teneos algún repositorio ya de EPEL lo desactivamos previamente ya que está incluido en EPEL.

cd /var/www/html/repos/centos/eldespistado
wget http://pkgs.repoforge.org/rdiff-backup/rdiff-backup-1.2.8-4.el7.rf.x86_64.rpm

Creamos el repositorio con createrepo

createrepo /var/www/html/repos/centos/eldespistado/

Si vamos al directorio en concreto veremos que nos ha creado un subdirectorio repodata con una serie de ficheros en este. Esto es la BBDD de paquetes del repositorio. Es necesario para yum.
Configuramos como siempre un archivo de repositorio en /etc/yum.repos.d/ p.e.:

[ed_local]
name=Eldespistado - RepositorioLocal
baseurl=http://localhost/repos/centos/eldespistado/
gpgcheck=0

Si hacemos un yum repolist deberá listar nuestro repo ed_local con un solo paquete disponible:

[root@localhost ~]# yum repolist
Complementos cargados:fastestmirror
Loading mirror speeds from cached hostfile
id del repositorio  nombre del repositorio           estado
ed_local            Eldesi1stado - RepositorioLocal  1
repolist: 1

Instalaremos de la forma habitual el paquete. Nos indicará que instalará desde nuestro repositorio ed_local

yum install rdiff-backup

Ayudas durante el examen.

  • man yum.conf y se busca por “name=” para ir directo a la sección de definiciones de repos.

Leave a Reply

Your email address will not be published. Required fields are marked *

*