viernes, 31 de mayo de 2019

Contenedor Repositorio en proxmox

En un post anterior puse en marcha un servidor proxmox en un servidor de aula.
En este otro ví como restaurar máquinas virtuales desde los backups de dichos contenedores.

En esté voy a intentar recordar como realicé el primero de ellos, el de repositorio, basándome el el siguiente post de Esteban:

https://enavas.blogspot.com/2018/02/virtualizacion-del-mirror-y-repositorio.html


La idea es crear una máquina que nos sirva de servidor web dónde tengamos alojado un mirror del repositorio de ubuntu bionic. Este repositorio que crearemos será un espejo del de nuestros compañeros de la sección AdministracionSI, y es desde donde se actualizan nuestros equipos de linex.

Además crearemos otro repositorio local propio del centro donde podremos añadir los paquetes que queramos y para que estén accesibles desde todo el centro. Así por ejemplo, para instalar VirtualBox no será necesario ni colocar el repositorio de VirtualBox, ni descargar el paquete e instalarlo a mano. Símplemente lo descargamos en ésta máquina, lo añadimos a nuestro repositorio local y ya podremos instalarlo desde cualquier máquina del centro con una tarea puppet, pkgsync, o directamente con un apt install.

Comienzo a intentar recordar. Todo este proceso que detallo a continuación da lugar al backup del contenedor repositorio que vimos en el post anterior.

- Lo primero es crear una máquina nueva a partir de la plantilla de debian 9 que anteriormente hemos descargado, pulsando el botón "Create CT" en la parte superior derecha del entorno de administración web. En la siguiente web puedes ver el proceso aunque es muy intuitivo.

http://somebooks.es/crear-contenedores-linux-partir-plantillas-proxmox-ve/

A la máquina le he dado 1 Giga de Ram y 512 de swap. Como va a albergar el mirror completo le he dado 400 GB de disco para que haya espacio suficiente. Una vez creada se puede aumentar el tamaño de disco cuando haga falta. La ram , swap y procesador se puede modificar sin problema.

- Después de creada la maquina lo primero es darlo de alta el la base de datos ldap para que coja siempre la misma ip. Yo le doy ip dentro de la rama de controlies Hardware-hosts.
Como se puede ver aquí, al seleccionar la máquina, en la sección de "network" podemos ver la mac que le ha asignado pve.
 - Actualizamos el sistema con una apt update, apt-upgrade

CREAR MIRROR LOCAL

- Lo siguiente sería ya crear el mirror. En la siguiente página de Esteban Navas puedes ver cómo hacerlo:


Básicamente es instalar un servidor apache, el paquete apt-mirror y colocar un cron para que se actualice y limpie por las noches el repositorio. Además hay que configurar qué repositorio queremos tener un espejo. Como vemos se configura en  /etc/apt/mirror.list.
En nuestro caso vemos que son los repositorios bionic, bionic-updates, bionic-backports, bionic-security de ubuntu y los de bionic y linex de la sección, (tanto en 32 como en 64 bits). 
También hacemos del repositorio de google-chrome de 64 bits.

root@repositorio:~# cat /etc/apt/mirror.list
############# config ##################
#
# set base_path    /var/spool/apt-mirror
#
# set mirror_path  $base_path/mirror
# set skel_path    $base_path/skel
# set var_path     $base_path/var
# set cleanscript $var_path/clean.sh
# set defaultarch  <running host architecture>
# set postmirror_script $var_path/postmirror.sh
# set run_postmirror 0
set nthreads     20
set _tilde 0
set limit_rate 2000k 

#
############# end config ##############
#

#########    Repositorios Desarrollo para ubuntu bionic 18.04 Arquitectura i386  ########################
#########################################################################################################
deb-i386 http://desarrollo.educarex.es/es.archive.ubuntu.com/ubuntu/ bionic main restricted universe multiverse
deb-i386 http://desarrollo.educarex.es/es.archive.ubuntu.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-i386 http://desarrollo.educarex.es/es.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-i386 http://desarrollo.educarex.es/security.ubuntu.com/ubuntu/ bionic-security main restricted universe multiverse
deb-i386 http://desarrollo.educarex.es/solointranet/ubuntu/bionic/ bionic linex
deb-i386 http://linex.educarex.es/ubuntu/bionic/ bionic linex


#########    Repositorios Desarrollo para ubuntu bionic 18.04  Arquitectura amd64  ########################
###########################################################################################################

deb-amd64 http://desarrollo.educarex.es/es.archive.ubuntu.com/ubuntu/ bionic main restricted universe multiverse
deb-amd64 http://desarrollo.educarex.es/es.archive.ubuntu.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-amd64 http://desarrollo.educarex.es/es.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-amd64 http://desarrollo.educarex.es/security.ubuntu.com/ubuntu/ bionic-security main restricted universe multiverse
deb-amd64 http://desarrollo.educarex.es/solointranet/ubuntu/bionic/ bionic linex
deb-amd64 http://linex.educarex.es/ubuntu/bionic/ bionic linex

############ REPOSITORIO DE GOOGLE   #####################################################################

deb-amd64 http://dl.google.com/linux/chrome/deb/ stable main


################### limpiar repos ###########################################################
#
clean http://desarrollo.educarex.es/es.archive.ubuntu.com/ubuntu/
clean http://desarrollo.educarex.es/security.ubuntu.com/ubuntu/ 
clean http://desarrollo.educarex.es/solointranet/ubuntu/
clean http://linex.educarex.es/ubuntu/bionic/
clean http://dl.google.com/linux/chrome/deb/

- Para comenzar a crear el repositorio, basta con lanzar el proceso apt-mirror o bien esperar que llegue la hora del cron que hemos añadido.


CREAR REPOSITORIO LOCAL

- Para crear un repositorio local usamos el paquete reprepro. En el siguiente post de Esteban puedes verlo:


Básicamente instalar reprepro, ya que apache lo tenemos instalado, generar una clave para firmar el repositorio y copiar el id de la clave generada y crear el archivo de configuración:

root@repositorio:~# cat /var/www/html/ies/conf/distributions 
Origin: IES Fuente Roniel
Label: Ubuntu Bionic Beaver packages
Suite: bionic
Codename: bionic
Architectures: amd64 i386
Components: main
Description: Paquetes adicionales para el IES
DebIndices: Packages Release . .gz .bz2
SignWith: id_clave_generada
root@repositorio:~# 

Que como vemos nos crea un repositorio para ubuntu bionic tanto en i386 como amd64. Sólo habría que cambiar y poner la id de la clave generada y en todo caso los campos Origin y Description que son comentarios.

Creamos enlaces y demás, viene bien explicado en la web de Esteban, y ya solo queda descargar los paquetes que queremos incorporar al repositorio (y los descargo en/var/www/html/paquetes/ ) y luego los añadimos desde la carpeta de reprepro /var/www/html/ies/ con la orden: reprepro includedeb bionic paquete.deb.
 
COLOCAR REPOSITORIOS EN CLIENTES

Una vez creados los respositorios tendremos que cambiar el sources.list en los clientes.

Yo me ayudo de la tarea apt version 2.4.0 que se puede encontrar en puppetlabs y se puede descargar desde el siguiente enlace:

https://forge.puppet.com/v3/files/puppetlabs-apt-2.4.0.tar.gz


Utililizo los siguientes recursos puppet:


# borramos los archivos de fuentes antiguos ya que los vamos a crear con el modulo puppetlabs-apt
#        Modificado modulo apt para que deje /etc/apt/sources.list vacío siempre y fuentes se
#       gestionen por puppet

 # si queremos borrar archivos antiguos los ponemos aquí

        file {"/etc/apt/sources.list.d/repoXubuntu.list":
                ensure => absent;
        }
# borramos el sources.list ya que los que vamos a crear los ponemos en /etc/apt/sources.list.d/
        file {"/etc/apt/sources.list":
                content => "# No anadir repositorios aquí, colocarlos en /etc/apt/sources.list.d/";
        }
        # fijamos variables para repositorios
        case $lsbdistcodename {
                "bionic": {
                        $mirror='mirror'
                        $mirrories='mirror2'
                }
        }
       # obtenemos claves de repositorio desconocidas
        exec { "getrepositorieskeys":
                command => '/usr/local/sbin/launchpad-getkeys',
                refreshonly => true
        }
        # añadimos los repositorios del centro con el recurso de puppetlabs apt
        apt::source { "es.archive.ubuntu.com-${lsbdistcodename}":
# Si queremos cambiar a la de desarrollo comentamos la primera location y descomentamos la 2ª
                location => "http://${mirror}.${domain}/es.archive.ubuntu.com/ubuntu/",
#                location => "http://desarrollo.educarex.es/es.archive.ubuntu.com/ubuntu/",
                repos    => 'main restricted universe multiverse',
                release  => "${lsbdistcodename}",
        }
        apt::source { "es.archive.ubuntu.com-${lsbdistcodename}-updates":
# Si queremos cambiar a la de desarrollo comentamos la primera location y descomentamos la 2ª# #                location => "http://${mirror}.${domain}/es.archive.ubuntu.com/ubuntu/",
#                location => "http://desarrollo.educarex.es/es.archive.ubuntu.com/ubuntu/",
                repos    => 'main restricted universe multiverse',
                release  => "${lsbdistcodename}-updates"
        }
        apt::source { "es.archive.ubuntu.com-${lsbdistcodename}-backports":
# Si queremos cambiar a la de desarrollo comentamos la primera location y descomentamos la 2ª
                location => "http://${mirror}.${domain}/es.archive.ubuntu.com/ubuntu/",
#               location => "http://desarrollo.educarex.es/es.archive.ubuntu.com/ubuntu/",
                repos    => 'main restricted universe multiverse',
                release  => "${lsbdistcodename}-backports"
        }

        apt::source { "security.ubuntu.com-${lsbdistcodename}":
# Si queremos cambiar a la de desarrollo comentamos la primera location y descomentamos la 2ª
                location => "http://${mirror}.${domain}/security.ubuntu.com/ubuntu",
#                location => "http://desarrollo.educarex.es/security.ubuntu.com/ubuntu/",
                repos    => 'main restricted universe multiverse',
                release  => "${lsbdistcodename}-security"
        }
   # añadimos repositorio desarrollo.educarex.es
        apt::source { "solointranet-${lsbdistcodename}":
# Si queremos cambiar a la de desarrollo comentamos la primera location y descomentamos la 2ª#                location => "http://${mirror}.${domain}/solointranet/ubuntu/${lsbdistcodename}",
#        location => "http://desarrollo.educarex.es/solointranet/ubuntu/${lsbdistcodename}",
                release  => "${lsbdistcodename}",
                repos    => 'linex',
        }
        # añadimos repositorio linex.educarex.es
        apt::source { "linex.educarex.es-${lsbdistcodename}":
# Si queremos cambiar a la de desarrollo comentamos la primera location y descomentamos la 2ª               location => "http://${mirror}.${domain}/linex.educarex.es/ubuntu/${lsbdistcodename}",
#                 location => "http://linex.educarex.es/ubuntu/${lsbdistcodename}",
                release  => "${lsbdistcodename}",
                repos    => 'linex',
        }
        # añadimos repositorio local del centro
        apt::source { "repositorio-local-${lsbdistcodename}":
                location => "http://${mirror}.${domain}/ies",
                release    => "${lsbdistcodename}",
                repos    => 'main',
        }
        #añadimos repositorio de google chrome para tener actualizado navegador
       apt::source { "dl.google.com":
               architecture => "amd64",
               release    => "stable",
               location => "http://${mirror}.${domain}/dl.google.com/linux/chrome/deb/",
               repos => 'main',
       }   
   # y anadimos la clave de repositorio de fuenteroniel

        exec { "AnadeClaveFuenteroniel":
                command => "wget -O- http://repositorio/ies/ies.asc  > iesrepositorio.asc;cat iesrepositorio.asc| apt-key add -",
                cwd => "/root",
                path => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                timeout => 3600,
                unless => "apt-key list|grep id_clave_repositorio_reprepro",
        }
     
Con esta tarea dejamos el /etc/apt/sources.list vacio y cada repositorio lo colocamos en el directorio /etc/apt/sources.list.d/
 
Una peculiaridad es que los repositorios apuntan a  la variable mirror y mirror2, estos son alias, bien lo podemos cambiar en la tarea por 
                         $mirror='repositorio.fuenteroniel'

 o bien crear un alias en phpldapadmin para la máquina en el directorio hosts => nombredelcentro:

Le damos a copiar este objeto

y le cambiamos el dc, asociate_domain y cNAMErecord.



así vemos que por ejemplo el del repositorio local queda:

administrador@informatico-pro:~$ cat /etc/apt/sources.list.d/repositorio-local-bionic.list 
# This file is managed by Puppet. DO NOT EDIT.
# repositorio-local-bionic
deb http://mirror.fuenteroniel/ies bionic main
administrador@informatico-pro:~$ 

mirror.fuenteroniel lo resolvería dns por el nombre de la máquina: repositorio.fuenteroniel.
De esta manera podemos tener varios repositorios y para cambiarlo tan sólo tendríamos que cambiar elAsocciatedDomain en la base de datos de LDAP.


No hay comentarios:

Publicar un comentario