Woop!

Instalación de Spacewalk sobre CentOS 5


Este manual describe la instalación de la versión 0.5 de Spacewalk sobre la distribución CentOS 5.



Características de Spacewalk





Requisitos para la instalación de Spacewalk


- Debido a la configuración de Apache es recomendable dedicar un servidor a Spacewalk. No es necesario dedicar un servidor real a esta aplicación, podemos utilizar una máquina virtual sin problemas, en nuestro caso instalaremos Spacewalk sobre un contenedor OpenVZ. Fedora 10 y CentOS 5 son los únicos sistemas soportados para instalar Spacewalk. Se recomienda tener un mínimo de 2GB de memoria RAM, si vas a utilizar una máquina virtual bajo VMware, Xen, etc.. recuerda asignar como mínimo esta cantidad.

- Un servidor de bases de datos Oracle. Cuando Red Hat empezó a trabajar en RHN (Red Hat Network), las bases datos libres como MySQL, PostgreSQL, etc.. no cumplían los requisitos necesarios para el proyecto, por aquel entonces Oracle era la mejor elección. Actualmente solo es posible ejecutar Spacewalk sobre una base de datos Oracle, aunque se está trabajando para soportar PostgreSQL. En cualquier caso podemos utilizar la versión gratuita, aunque no es software libre, Oracle XE (Express Edition).



Instalación de Oracle XE (10g Express Edition) en CentOS


Limitaciones de la versión Express Edition de Oracle:

- 1GB máximo de memoria.
- 4GB máximo de espacio en disco.
- Una única base de datos.
- Requiere 747MB de memoria swap.

Pasos a seguir para instalar Oracle XE sobre CentOS:

- Deshabilitar el sistema de seguridad SELinux, utilizando la aplicación system-config-securitylevel-tui.

- Antes de instalar los paquetes RPMs de Oracle, tenemos que tener instalada la librería libaio y la calculadora bc (necesaria para algún script interno):

yum install libaio bc


- Descargar desde la web de Oracle XE la versión Universal para Linux, es muy importante instalar esta versión y no la Western European, el paquete se llama Oracle Database 10g Express Edition (Universal). Para descargar el paquete RPM de la versión 10.2.0.1 podemos utilizar este enlace (se requiere una cuenta en Oracle...).

- También se necesitan las aplicaciones cliente para conectarnos a Oracle que podemos descargar desde la web Oracle Instant Client, descargar los 4 paquetes: oracle-instantclient-basic, oracle-instantclient-jdbc, oracle-instantclient-devel y oracle-instantclient-sqlplus. IMPORTANTE: tenemos que instalar estos paquetes y no confundirnos el paquete cliente con oracle-xe-client.

- Una vez tengamos descargados los paquete de cliente y servidor de Oracle lo instalamos con Yum:

yum --nogpgcheck localinstall oracle-xe-univ-*.rpm oracle-instantclient-basic-*.rpm oracle-instantclient-jdbc-*.rpm oracle-instantclient-devel-*.rpm oracle-instantclient-sqlplus-*.rpm


NOTA: Si estamos dentro de OpenVZ al tratar de instalar el paquete oracle-xe-univ tratará de modificar algunos parámetros en /proc, generando el error Operation not permitted" setting key "net.ipv4.tcp_syncookies", simplemente forzando otra vez la instalación del RPM se instalará sin problemas..



Configuración de Oracle XE para adaptarlo a Spacewalk


- Una vez terminada la instalación del paquete RPM de Oracle XE, el propio script nos indicará que tenemos que ejecutar "/etc/init.d/oracle-xe configure" para proceder a la configuración de Oracle con la ayuda de un asistente:

/etc/init.d/oracle-xe configure


- IMPORTANTE!! Si Spacewalk y Oracle van a estar en el mismo servidor, el puerto HTTP para la gestión de Oracle no puede ser el 8080 ya que posteriormente se utilizará para el Tomcat de Spacewalk, tendremos que utilizar otro, por ejemplo el 9000. Dejar el puerto por defecto para "database listener" (1521/tcp) y habilitar el inicio del servidor Oracle en el arranque.

- La instalación tardará unos 4-5 minutos y después podremos acceder a la interfaz web de gestión del servidor Oracle desde la URL: http://127.0.0.1:9000/apex. Si se trata de una instalación remota, es muy probable que no tengamos acceso.. y tendremos que utilizar un tunel SSH o algo similar: ssh -L 9000:localhost:9000 -l root -N spacewalk.example.com (donde spacewalk.example.com es el FQDN o IP de la máquina que estamos instalando).

Una vez dentro del panel de gestión de Oracle:

  1. Entrar con el usuario "sys" y la contraseña anterior.
  2. Adminstración -> Usuarios de Base de Datos
  3. Crear el usuario spacewalk , activando todos los privilegios, incluido el rol de DBA, IMPORTANTE!!

- El script oracle_env.sh se encarga de configurar la variable $ORACLE_HOME y añadir los binarios al $PATH, lo añadimos al directorio /etc/profile.d para que se ejecute automáticamente en cada login:

cd /etc/profile.d 
ln -s /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh 
. /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh 


- Modificar la configuración de Oracle para permitir 400 conexiones, modificar además el comportamiento de _optimizer_filter_pred_pullup y _optimizer_cost_based_transformation para evitar problemas con Spacewalk, finalmente reiniciar Oracle:

# sqlplus spacewalk@xe
 
SQL> alter system set processes = 400 scope=spfile; 
SQL> alter system set "_optimizer_filter_pred_pullup" = false scope=spfile; 
SQL> alter system set "_optimizer_cost_based_transformation" = off scope=spfile;
SQL> alter system set query_rewrite_enabled = true;
SQL> quit 
 
# /sbin/service oracle-xe restart




Instalación de Spacewalk en CentOS


Es posible instalar Spacewalk sobre Fedora 9 y CentOS 5, en ambos casos están soportadas las arquitecturas i386 y x86_64. En nuestro caso, vamos a hacer la instalación sobre una CentOS 5, mas concretamente sobre un contenedor OpenVZ. Si vas a instalar Spacewalk sobre un contenedor OpenVZ consultar estas notas antes de continuar, ya que será necesario hacer algunos pequeños cambios para que Tomcat y Oracle funcionen sin problemas.

- Habilitamos el repositorio EPEL para poder instalar con Yum el paquete openjdk, Spacewalk necesita Java Virtual Machine 1.6 o una versión superior. EPEL (Extra Packages for Enterprise Linux) es un repositorio con paquetes extras para Red Hat, CentOS, etc.. que mantiene el proyecto Fedora.

rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-2.noarch.rpm
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL 


- Instalar el repositorio de Spacewalk con los paquetes RPM para instalar/actualizar con Yum:

# rpm -Uvh http://spacewalk.redhat.com/yum/0.4/rhel/5Server/i386/spacewalk-repo-0.4-1.el5.sw.noarch.rpm
# rpm --import http://spacewalk.redhat.com/yum/RPM-GPG-KEY-spacewalk

# cat /etc/yum.repos.d/spacewalk.repo
[spacewalk]
name=Spacewalk
baseurl=http://spacewalk.redhat.com/yum/0.4/rhel/5Server/$basearch/
gpgkey=http://spacewalk.redhat.com/yum/RPM-GPG-KEY-spacewalk
enabled=1
gpgcheck=1


- NOTA: La aplicación spacewalk-setup tratará de usar key GPG de Red Hat, por lo que si hacemos la instalación en CentOS tendremos que crear un enlace simbólico para evitar problemas:

ln -s /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release


- Instalar el paquete "spacewalk" y todas sus dependencias (serán mas de 250 paquetes.. así que paciencia):

yum install spacewalk


- NOTA: Por error algunos paquetes de Spacewalk y/o EPEL pueden estar firmados con la key GPG de Red Hat por lo que tendremos que importarla (mas información en un post de Fabian Arrotin):

# rpm --import http://www.redhat.com/security/37017186.txt


Si durante la configuración de Spacewalk nos encontramos con algún error tendremos que revisar el contenido del log /var/log/rhn/rhn-installation.log, para obtener algo mas de información...



Configuración de Spacewalk



Una vez terminada la instalación de todos los paquetes necesarios para Spacewalk, procedemos a su configuración con la ayuda del asistente spacewalk-setup:

spacewalk-setup --disconnected


El asistente spacewalk-setup nos pedirá los siguientes datos:

  1. Usuario y contraseña de acceso a la base de datos Oracle: spacewalk
  2. SID de Oracle: xe
  3. Hostname y puerto TCP para acceso al servidor Oracle: localhost y 1521/tcp

Una vez terminada la instalación de Spacewalk tendremos que entrar vía web para crear el usuario administrador del Satellite.



Primeros pasos con Spacewalk


Crear un canal de software en Spacewalk

- En la versión actual de Spacewalk no existe ningún método cómodo para sincronizar/actualizar los paquetes RPMs de un determinado canal, veremos los pasos necesarios para gestionar un canal de software, subir y actualizar los paquetes RPM del mismo. Estas instrucciones son prácticamente una traducción/adaptación al castellano del Wiki de Spacewalk: Uploading RPM packages into Spacewalk. Además la gestión de canales es algo limitada, permitiendo utilizar únicamente una distribución por organización, los desarrolladores están trabajando en mejorar estos dos aspectos.

- El primer paso es crear un canal de software. Aunque existe un script para automatizar esta tarea vía XML-RPC, create_channel.py, lo más cómodo es utilizar la interfaz web, para ello: Canales -> Administrar canales de software -> Create new channel. El formulario nos pedirá: nombre, etiqueta, arquitectura, etc.. y tipo de canal (padre o hijo).

- Existen 2 tipos de canales: padre o hijo. Los canales padre contienen los paquetes core/base de una determinada distribución, por regla general se corresponden con el repositorio "base", los *canales hijos* cuelgan de un determinado canal padre y contienen actualizaciones del repositorio "base" y/o paquetes adicionales, etc.. En nuestro caso vamos a crear un canal padre para el repositorio base de CentOS 5 y el canal hijo "updates" para las actualizaciones de la distribución.

Canal padre para CentOS 5

Canal hijo para CentOS 5

- Descargar los paquetes RPM de un repositorio: Es posible hacer esta tarea de varias formas: rsync, wget, reposync, etc.. o si ya tenemos un mirror local del repositorio trabajando directamente sobre el (montando la partición por NFS, CIFS, SSHFS, etc..). Una de las formas mas cómodas para empezar puede ser utilizar reposync del paquete yum-utils, ejemplo para crear un mirror local de CentOS 5 en el directorio /root/centos-5-x86-base que coincide con la etiqueta del canal:

yum install yum-utils
reposync --repoid=base --download_path=/root/centos-5-x86-base


- Subir los paquetes RPMs desde el mirror local al servidor Spacewalk con el script rhnpush. Este script en Python se encarga de analizar el contenido de cada paquete RPM del directorio con el mirror local que le indiquemos, y de asignarlo al canal de software que le indiquemos. Ejemplo para subir contenido del directorio /root/centos5-base-x86 al canal con alias centos5-base-x86. (Existe mas información sobre el script rhnpush en la página de Red Hat Network).

NOTA 1: Es importante que exista el directorio /var/satellite y que Apache tenga permisos de escritura en el, será allí donde rhnpush deje la información. Dependiendo de la arquitectura, distribución y versión se necesitará mas o menos espacio disponible para guardar los RPMs. A modo de referencia para la arquitectura x86 de CentOS 5 se necesitan unos 4GB disponibles.

NOTA 2: En la primera ejecución del script nos pedirá usuario y contraseña para Red Hat Network, este dato se corresponde con el administrador de Spacewalk.

mkdir -p /var/satellite
chown apache:apache /var/satellite
rhnpush --channel=centos5-base-x86 --server=http://localhost/APP --dir=/root/centos5-base-x86/base/CentOS


- La primera vez que ejecutemos rhnpush tardará bastante ya que tendrá que procesar cada paquete y registrarlo en la base de datos, para posteriormente almacenarlo en /var/satellite, una vez termine podremos empezar a gestionar el canal/software desde Spacewalk: Canales -> CentOS 5 Base x86 -> Paquetes



Registrar un cliente en Spacewalk

- Antes de poder registrar clientes deben existir canales en Spacewalk, ver el punto anterior Crear un canal de software en Spacewalk

- Además se necesita crear una "Llave de Activación" (Activation Key) para el registro vía XML-RPC desde los clientes, para ello entrar en la interfaz web de Spacewalk: Sistemas -> Llaves de activación -> Crear nueva llave. Le damos un nombre, descripción, asignamos un canal por defecto y configuramos los derechos (Aprovisionamiento, Monitorización, Virtualización, etc..). Tenemos que anotar la key generada ya que será la que utilicemos para registrar clientes.

- IMPORTANTE: Si el servidor donde se está ejecutando Spacewalk no es un RHEL oficial, por ejemplo ocurre con CentOS, es necesario que esté instalado el paquete rhel-instnum disponible en el repositorio spacewalk-tools, en caso de no estarlo el registro de clientes en fallará:

rpm -ivh http://stahnma.fedorapeople.org/spacewalk-tools/spacewalk-client-tools-0.0-1.noarch.rpm
yum install rhel-instnum
/sbin/rhn-satellite restart


- Una vez tenemos la "Activation Key" tan solo tendremos que ejecutar el script rhnreg_ks desde el cliente que queremos añadir a Spacewalk (este paquete/script también está dentro del repositorio spacewalk-tools, ejemplo:

rpm -ivh http://stahnma.fedorapeople.org/spacewalk-tools/spacewalk-client-tools-0.0-1.noarch.rpm
yum -y install rhn-setup yum-rhn-plugin usermode-gtk pyOpenSSL

rhnreg_ks --serverUrl=http://spacewalk.example.com/XMLRPC --activationkey=1-9d0c1dc06708cfbd68d5fa47870be935


- Para mas información sobre consultar la página del Wiki: Registering clients in Spacewalk



FAQ sobre Spacewalk


- ERROR: Al registrar un servidor con rhnreg_ks devuelve el error: Error reading hardware information: dbus_bindings.DBusException, Error reading DMI information: dbus_bindings.DBusException

- SOLUCIÓN: Comprobar que los servicios haldaemon y messagebus están arrancados, y forzar de nuevo el registro del servidor:

# service messagebus restart
# chkconfig messagebus on
# service haldaemon restart
# chkconfig haldaemon on
# rhnreg_ks --force --serverUrl=http://spacewalk.example.com/XMLRPC --activationkey=1-9d0c1dc06708cfbd68d5fa47870be935



- ERROR: Al tratar de realizar cualquier operación con Spacewalk el cliente devuelve el error: Invalid function call attempted.

- SOLUCIÓN: Es necesario instalar el paquete yum-rhn-plugin en el cliente (como la tarea ha fallado será necesario volver a programarla/re-programarla y forzar una ejecución con rhn_check). Revisar además el fichero /var/log/up2date para detectar cualquier otro problema durante la interacción con Spacewalk, será en este fichero donde se registren todos los errores de RHN.

yum install yum-rhn-plugin
rhn_check -vvvvv



- PREGUNTA: ¿Como puedo forzar la ejecución de tareas encoladas en RHN?

- SOLUCIÓN: Spacewalk tiene un planificador de tareas (taskomaticd) para distribuir en el tiempo las acciones a realizar en los servidores, por regla general desde que programamos una tarea hasta que llega a ejecutarse pueden llegar a pasar unas horas, si queremos forzar las tareas pendientes en RHN podemos utilizar rhn_check desde la máquina cliente. Mas información en la página que describe la arquitectura de Spacewalk:

rhn_check -v



- PREGUNTA: En CentOS 4, ¿Qué paquete contiene los scripts rhnreg_ks, rhn_check, etc..?

- RESPUESTA: Los scripts para poder registrar un servidor CentOS 4 en Spacewalk se encuentra en el paquete up2date del repositorio spacewalk-tools:

rpm -ivh http://stahnma.fedorapeople.org/spacewalk-tools/spacewalk-client-tools-0.0-1.noarch.rpm
yum install up2date



- ERROR: Failed: The package signing key for Red Hat, Inc. is not on the gpg keyring.

- SOLUCIÓN: Estamos tratando de instalar un paquete RPM firmado con una key GPG que no está en nuestro keyring. Para solucionar este problema tenemos que añadir la key GPG de los paquetes que queremos instalar/actualizar, o bien, poner a 0 la variable useGPG en la configuración up2date para no hacer la comprobación GPG:

# rpm --import /usr/share/rhn/RPM-GPG-KEY
# rpm -qa gpg* 

# grep useGPG /etc/sysconfig/rhn/up2date 
useGPG[comment]=Use GPG to verify package integrity
useGPG=0



- ERROR: Al tratar de instalar/actualizar un paquete Spacewalk devuelve el error "Failed: Some of the packages specified were on a skip list".

- SOLUCIÓN: El motivo de este error es que up2date tiene configurado en el parámetro pkgSkipList un listado de paquetes a excluir en las actualizaciones. Para deshabilitar este comportamiento podemos modificar la variable pkgSkipList del fichero /etc/sysconfig/rhn/up2date o utilizar el asistente up2date-config para modificar la configuración de RHN de forma mas cómoda. También puede ocurrir que la directiva noReplaceConfig esté habilitada, si es así y el RPM a actualizar/instalar trata de modificar un fichero de configuración este fallará ya que se trata de un cambio bloqueado. La solución pasa por configurar el parámetro como noReplaceConfig=0 manualmente o con up2date-config:

# grep ^noReplaceConfig /etc/sysconfig/rhn/up2date
noReplaceConfig[comment]=When selected, no packages that would change configuration data are automatically installed
noReplaceConfig=0




- ERROR: Error while executing packages action: X is not signed [[6]].

- SOLUCIÓN: El error se debe a que estamos tratando de instalar un paquete RPM que no está firmado con GPG (esto suele ocurrir cuando creamos un canal con paquetes propios), en este caso la solución pasa por quitar la comprobación GPG en el plugin yum-rhn-plugin de Yum:

# cat /etc/yum/pluginconf.d/rhnplugin.conf 
[main]
enabled = 1
gpgcheck = 0



- ERROR: El cliente devuelve "Fatal error in Python code occured [[6]]" (code -1)"

- SOLUCIÓN: Los motivos de este error pueden ser varios, puede ser solucionado con: revisar la correcta sintaxis del fichero de configuración de RHN /etc/sysconfig/rhn/up2date, re-instalar el paquete up2date desde el repositorio spacewalk-tools, y borrando la cache del mismo:

# grep ";" /etc/sysconfig/rhn/up2date 
# yum remove up2date
# rm -rf /var/spool/up2date/
# yum install up2date


Si esto no soluciona el problema, y el cliente es un CentOS 4, tendremos que instalar la última versión del paquete up2date desde el FTP de Red Hat.


- PREGUNTA: ¿Es posible forzar una actualización de hardware/software de un cliente en Spacewalk?

- RESPUESTA: Por defecto si modificamos o añadimos un elemento hardware en un servidor no se reflejará automáticamente en Spacewalk, para ello podemos programar un refresco del hardware desde el WebUI (System -> Details -> Hardware -> Schedule Hardware Refresh), o bien utilizar el script rhn-profile-sync para sincronizar el perfil hardware/software del cliente. Si queremos tener el inventariado de hardware actualizado puede ser interesante añadir una ejecución periódica de dicho script utilizando cron y/o añadirlo en algún script de inicio para que se ejecute en cada reinicio del servidor.

En este ejemplo, cada sábado a las 21:56 se fuerza una ejecución de rhn-profile-sync. Para no cargar el servidor Spacewalk antes de cada ejecución se llama al comando sleep para esperar N segundos, donde N es un número aleatorio entre 1 y 600, de modo que las actualizaciones se sincronizarán entre las 21:50 y 22:00, evitando así que el servidor pueda saturarse.

# Actualizar el hardware/software contra el servidor Spacewalk, todos los sábados a las 21:50
21 50 * * 6             root    sleep `expr $RANDOM \% 600` ; /usr/sbin/rhn-profile-sync


NOTA: En CentOS 4 los comandos para refrescar el software y hardware son up2date -p y up2date --hardware respectivamente.


- PREGUNTA: ¿Como puedo dar de baja un cliente de Spacewalk/Satellite/RHN?

- RESPUESTA: Para dar de baja o borrar una máquina de Spacewalk/Satellite tenemos que borrar el sistema desde la interfaz o vía API, para ello vamos a Systems, seleccionamos el cliente a borrar, "Delete System -> Delete Profile" (si lo queremos automatizar vía API XML-RPC tendremos que utilizar la función System.deleteSystems).

Además, es necesario borrar el fichero /etc/sysconfig/rhn/systemid para evitar que el cliente trate de volver a conectarse al servidor Spacewalk/Satellite/RHN:

rm -f /etc/sysconfig/rhn/systemid




- PREGUNTA: ¿Como se activa el soporte para Cobbler desde Spacewalk?

- SOLUCIÓN: Para habilitar el acceso a la web de Cobbler desde Spacewalk es necesario editar el fichero /etc/cobbler/settings y poner a 1 el valor de la variable redhat_management_permissive: 1, posteriormente solo es necesario reiniciar los servicios Apache y Cobbler para acceder vía web (http://spacewalk.example.com/cobbler/web) con los mismos usuarios de Spacewalk:

# vim /etc/cobbler/settings
(..)
redhat_management_permissive: 1
(..)

# /etc/init.d/cobblerd restart
# /etc/init.d/httpd restart




- PREGUNTA: ¿Como puedo renovar el certificado de Spacewalk?

- SOLUCIÓN: El certificado incluido hasta la versión 0.8 de Spacewalk caducó el día 2010-07-13, mostrando el error "El certificado de su satélite ha expirado. Por favor contacte a Red Hat para obtener un nuevo certificado" en la ventana de login. Para renovar el certifado tenemos que descargar uno nuevo desde el repositorio GIT he instalarlo con la utilidad rhn-satellite-activate:

# wget http://tinyurl.com/26qh5y9 -O spacewalk-public.cert
# rhn-satellite-activate --rhn-cert spacewalk-public.cert




Referencias sobre Spacewalk



Powered by Woop!