# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

Cómo instalar memcached a través de YUM en CentOS


Para aquellos que no os apetezca liaros a compilar, podéis instalar memcached en CentOS a través de yum utilizando los repositorios DAG.

Lo primero es instalar el repositorio de RPMforge (DAG), en este caso es un equipo de 64 bits así que instalamos el correspondiente (revisad aquí los diferentes enlaces):

# rpm -Uhv http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS//rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm

Una vez instalado ya podemos hacer instalaciones y consultas contra ese repositorio, procedemos a instalar memcached:

# yum install memcached.x86_64

Es probable que recibáis un error de dependencias, concretamente este:

perl-AnyEvent-5.240-1.el5.rf.noarch from rpmforge has depsolving problems
  --> Missing Dependency: perl(Net::SSLeay) >= 1.33 is needed by package perl-AnyEvent-5.240-1.el5.rf.noarch (rpmforge)
Error: Missing Dependency: perl(Net::SSLeay) >= 1.33 is needed by package perl-AnyEvent-5.240-1.el5.rf.noarch (rpmforge)
 You could try using --skip-broken to work around the problem
 You could try running: package-cleanup --problems
                        package-cleanup --dupes
                        rpm -Va --nofiles --nodigest

El error es debido a que memcached necesita una versión igual o superior a la 1.33 de perl(Net::SSLeay) y en el repositorio base se encuentra la 1.30. Procedemos entonces a instalar la versión correspiondiente, en este caso no está instalada la 1.30, si estuviera habría que desinstalarla antes:

# wget http://packages.sw.be/perl-Net-SSLeay/perl-Net-SSLeay-1.36-1.el5.rfx.x86_64.rpm
#  rpm -i perl-Net-SSLeay-1.36-1.el5.rfx.x86_64.rpm

Ahora ya podemos instalar memcached sin el fallo de dependencias:

# yum install memcached.x86_64

Cambiar la zona horaria en CentOS y RHEL


Si por algún motivo habéis instalado un servidor RHEL, CentOS y derivados y os habéis olvidado de configurar bien la zona horaria, podéis modificarla después de una forma muy sencilla. Todos los ficheros de usos horarios se encuentran en la ruta /usr/share/zoneinfo. Simeplemente tenéis que crear un enlace simbólico en /etc/localtime hacia el uso horario que utilicéis:

Borramos la configuración actual:

rm -f /etc/localtime

Y enlazamos con nuestro uso horario:

# ln -s /usr/share/zoneinfo/Europe/Madrid /etc/localtime

Automáticamente se habrá corregido el uso horario en el sistema:

# date
vie mar 18 13:30:10 CET 2011

Yum atascado en “Setting up Update Process”


En este caso, yum dejaba de responder en el punto de “Setting up Update Process“, pero puede pasar en cualquier momento de su ejecución. Para encontrar el problema podemos seguir los siguientes pasos:

  1. Revisar el log de yum en /var/log/yum.log en busca de errores
  2. Comprobar que no hay otra instancia de yum corriendo en el sistema (ps aux | grep yum)
  3. Hacer debug del proceso atascado con el comando strace (strace -p PID)
  4. Hacer un yum clean all.

Si pese a esos tres puntos seguís sin encontrar el fallo,es muy probable (era mi caso) que la base de datos de yum tenga algún tipo de corrupción. Para regenerarla hacemos lo siguiente:

# rm -f /var/lib/rpm/__db*
# rpm --rebuilddb
# yum clean all

Ahora podemos volver a intentar ejecutar yum de nuevo y comprobar si funciona correctamente.

CentOS: añadir drivers durante la instalación del SO


En caso de que utilicéis equipos que por ejemplo, tengan controladoras de disco RAID o cualquier componente un poquito “especial” es posible que durante la instalación de CentOS, RHEL o FEDORA tengáis que añadir los drivers de forma manual. Personalmente solo me ha sucedido una vez, concretamente con una controladora HP Embedded SATA RAID Controller.

Bien, en caso de que tengáis que añadir los drivers a mano durante la instalación, y una vez que hayáis conseguido los drivers, tendréis que grabarlos en un USB, CD, DVD o medio que queráis (en servidores HP, simplemente montad la imagen del diskette a través de la iLO).

Una vez iniciada la instalación, en el momento de empezar la instalación, escribimos “linux text updates dd” en caso de querer hacer la instalación en modo texto, o “linux updates dd” en caso de querer hacer la instalación en modo gráfico:

CentOS Linux instalacion

De este modo, el propio sistema nos pedirá que insertemos el CD/Diskette en el que tenemos los drivers, para que la instalación los cargue en memoria y los use durante la misma. Seleccionas el medio en el que tienes los drivers (aparecerán a modo de partición tipo sda o similar) y los cargamos.

Ahora mismo no tengo disponible una imagen de este punto del proceso, pero veréis que es muy intuitivo. Una vez cargados los drivers la instalación continúa de forma normal.

Aquí tenéis no obstante una guía de instalación de CentOS 5

APF: Unable to load iptables module (ip_tables), aborting


En caso de recibir el siguiente error en el log de APF:

Unable to load iptables module (ip_tables), aborting.

El problema solamente lo he encontrado en instalaciones Fedora, y se soluciona modificando el siguiente parámetro en el fichero de configuración de apf:

fichero: /etc/apf/conf.apf

Parámetro:

MONOKERN="0" 

Lo pasamos a:

MONOKERN="1"

Y reiniciamos APF:

/etc/init.d/apf restart

El origen del problema reside en tener iptables compilado en el kernel de forma estática en lugar de como módulo.

Cómo instalar debootstrap en RHEL / CentOS


Debootstrap es una herramienta que srive para crear un sistema Debian básico desde cero, sin la necesidad de utilizar dpkg o apt. Básicamente se descarga los archivos .deb para posteriormente desempaquetarlos en un directorio en el cual podemos posteriormente hacer “chroot“.

En mi caso era necesario para poder virtualizar un sistema Debian desde CentOS utilizando Xen. Utilizamos debootstrap para construir el sistema Debian en unas particiónes dentro de un volumen lógico y posteriormente ese volumen es el que utilizaremos como máquina virtual (pero esto es otro tema).

Para instalar deboostrap en RHEL / CentOS o Fedora previamente nos bajamos el rpm correspondiente (en este caso el de 32 bits):

wget ftp://ftp.muug.mb.ca/mirror/fedora/epel/5/i386/debootstrap-1.0.7-3.el5.noarch.rpm

Instalamos gettext ya que lo requiere como dependencia:

yum install gettext

Y finalmente instalamos debootstrap:

rpm -Uvh debootstrap-1.0.7-3.el5.noarch.rpm

Ya podemos hacer uso de la herramienta, en el siguiente ejemplo instalamos Debian Lenny para i386 desde el FTP de Debian dentro de un volumen lógico montado como /home/vm/debian/ :

debootstrap --arch i386 lenny /home/vm/debian/ http://ftp.us.debian.org/debian

Una vez finalizado el proceso ya podríamos acceder con chroot al sistema:

chroot /home/vm/debian/

Cómo montar un servidor DHCP


Esta es una forma sencilla de instalar y configurar un servidor DHCP en una máquina Linux (Red-Hat, CentOS, Fedora). Voy a mostraros los pasos para hacerlo y una configuración básica para hacer funcionar el equipo como servidor DHCP.

DHCP (sigla en inglés de Dynamic Host Configuration Protocol – Protocolo Configuración Dinámica de Servidor) es un protocolo de red que permite a los nodos de una red IP obtener sus parámetros de configuración automáticamente. Se trata de un protocolo de tipo cliente/servidor en el que generalmente un servidor posee una lista de direcciones IP dinámicas y las va asignando a los clientes conforme éstas van estando libres, sabiendo en todo momento quién ha estado en posesión de esa IP, cuánto tiempo la ha tenido y a quién se la ha asignado después. (Wikipedia)

En primera instancia, instalamos el paquete necesario vía yum:

yum install dhcp.i586

Una vez instalado, podemos utilizar como base para el fichero de configuración el que nos ofrecen con la instalación. Incorpora comentarios sobre cada una de las opciones y configuraciones para hacer más sencilla la puesta en marcha del servicio:

cp /usr/share/doc/dhcp-4.1.0p1/dhcpd.conf.sample /etc/dhcp/dhcp.conf

El fichero de ejemplo es el siguiente:

# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#

# option definitions common to all supported networks...
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;

default-lease-time 600;
max-lease-time 7200;

# Use this to enble / disable dynamic dns updates globally.
#ddns-update-style none;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;

# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.

subnet 10.152.187.0 netmask 255.255.255.0 {
}

# This is a very basic subnet declaration.

subnet 10.254.239.0 netmask 255.255.255.224 {
 range 10.254.239.10 10.254.239.20;
 option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
}

# This declaration allows BOOTP clients to get dynamic addresses,
# which we don't really recommend.

subnet 10.254.239.32 netmask 255.255.255.224 {
 range dynamic-bootp 10.254.239.40 10.254.239.60;
 option broadcast-address 10.254.239.31;
 option routers rtr-239-32-1.example.org;
}

# A slightly different configuration for an internal subnet.
subnet 10.5.5.0 netmask 255.255.255.224 {
 range 10.5.5.26 10.5.5.30;
 option domain-name-servers ns1.internal.example.org;
 option domain-name "internal.example.org";
 option routers 10.5.5.1;
 option broadcast-address 10.5.5.31;
 default-lease-time 600;
 max-lease-time 7200;
}

# Hosts which require special configuration options can be listed in
# host statements.   If no address is specified, the address will be
# allocated dynamically (if possible), but the host-specific information
# will still come from the host declaration.

host passacaglia {
 hardware ethernet 0:0:c0:5d:bd:95;
 filename "vmunix.passacaglia";
 server-name "toccata.fugue.com";
}

# Fixed IP addresses can also be specified for hosts.   These addresses
# should not also be listed as being available for dynamic assignment.
# Hosts for which fixed IP addresses have been specified can boot using
# BOOTP or DHCP.   Hosts for which no fixed address is specified can only
# be booted with DHCP, unless there is an address range on the subnet
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.
host fantasia {
 hardware ethernet 08:00:07:26:c0:a5;
 fixed-address fantasia.fugue.com;
}

# You can declare a class of clients and then do address allocation
# based on that.   The example below shows a case where all clients
# in a certain class get addresses on the 10.17.224/24 subnet, and all
# other clients get addresses on the 10.0.29/24 subnet.

class "foo" {
 match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
}

shared-network 224-29 {
 subnet 10.17.224.0 netmask 255.255.255.0 {
   option routers rtr-224.example.org;
 }
 subnet 10.0.29.0 netmask 255.255.255.0 {
   option routers rtr-29.example.org;
 }
 pool {
   allow members of "foo";
   range 10.17.224.10 10.17.224.250;
 }
 pool {
   deny members of "foo";
   range 10.0.29.10 10.0.29.230;
 }
}

Veréis que es un fichero con muchísimas opciones, os dejo un ejemplo más sencillo. En el siguiente dhcp.conf utilizamos la interfaz de red eth0 para las tareas de DHCP, esta interfaz tiene configurada la red 192.168.0.0/24 (subnet), sobre la cual vamos a reservar las IPs desde la 192.168.0.200 a la 192.168.0.220 para las asignaciones DHCP (range).

Esto es lo más básico, respecto a las distintas opciones añadidas en el fichero sample de configuración véis especificado lo que es cada cosa:

ddns-update-style none;
ddns-updates off;
deny client-updates;
one-lease-per-client false;
allow bootp;
option T150 code 150 = string;

subnet 192.168.0.0 netmask 255.255.255.0 {
  interface eth0;
   range 192.168.0.200 192.168.0.220;
       option subnet-mask 255.255.255.0;
       default-lease-time 6000;
       max-lease-time 7200;
       option time-offset -3600;
}

Finalmente, arrancamos el servicio:

/etc/init.d/dhcp start

Y el log (en mi caso vuelca a messages):

Oct 23 19:35:37 sylv1006 dhcpd: Internet Systems Consortium DHCP Server 4.1.0p1
Oct 23 19:35:37 sylv1006 dhcpd: Copyright 2004-2009 Internet Systems Consortium.
Oct 23 19:35:37 sylv1006 dhcpd: All rights reserved.
Oct 23 19:35:37 sylv1006 dhcpd: For info, please visit http://www.isc.org/sw/dhcp/
Oct 23 19:35:37 sylv1006 dhcpd: Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file
Oct 23 19:35:47 sylv1006 dhcpd: Internet Systems Consortium DHCP Server 4.1.0p1
Oct 23 19:35:47 sylv1006 dhcpd: Copyright 2004-2009 Internet Systems Consortium.
Oct 23 19:35:47 sylv1006 dhcpd: All rights reserved.
Oct 23 19:35:47 sylv1006 dhcpd: For info, please visit http://www.isc.org/sw/dhcp/
Oct 23 19:35:47 sylv1006 dhcpd: Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file
Oct 23 19:35:47 sylv1006 dhcpd: Wrote 0 leases to leases file.
Oct 23 19:35:47 sylv1006 dhcpd: Listening on LPF/eth0/00:16:3e:1d:36:42/192.168.0.0/24
Oct 23 19:35:47 sylv1006 dhcpd: Sending on   LPF/eth0/00:16:3e:1d:36:42/192.168.0./24
Oct 23 19:35:47 sylv1006 dhcpd: Sending on   Socket/fallback/fallback-net

Ahora que todo funciona correctamente, podemos configurar DHCP para que arranque automáticamente:

chkconfig dhcpd on

Instalar y configurar vnc-server en CentOS/RHEL/Fedora


La instalación de un servidor vnc en sistemas CentOS, Fedora y Red Hat es muy sencilla. Gracias a la instalación de este servicio podremos conectarnos a la máquina de forma remota y con entorno gráfico con un cliente vnc o con el propio visor de escritorio remoto de Linux (Vinagre en Ubuntu).

En primera instancia, procedemos a la instalación vía yum del servidor vnc:

yum install vnc-server

Una vez finalizada, hemos de retocar el fichero de configuración “/etc/sysconfig/vncservers”, en el que definimos los usuarios a los que vamos a permitir conectar remotamente y las preferencias de sus conexiones. En el siguiente ejemplo permitimos la conexión al usuario “alex”, con una resolución de pantalla de 1024×768:

# vim /etc/sysconfig/vncservers

VNCSERVERS="1:alex"
VNCSERVERARGS[1]="-geometry 1024x768"

Si quisieramos tener múltiples usuarios:

VNCSERVERS="1:alex 2:pepe 3:laura"
VNCSERVERARGS[1]="-geometry 1024x768"
VNCSERVERARGS[2]="-geometry 640x480"
VNCSERVERARGS[3]="-geometry 800x600"

Ahora hemos de asignar una clave a cada uno de los usuarios vnc. Debemos loguearnos con cada usuario en la shell y ejecutar el siguiente comando:

vncpasswd

Finalmente arrancamos vnc-server como root:

service vncserver start

Por defecto se configura para que arranque automáticamente, pero por si acaso:

chkconfig vncserver on

Ahora ya podemos conectarnos desde un cliente VNC o el visor de escritorios remotos de Linux. El puerto a utilizar es el 5900 + el número de pantalla asignado (es el ID asignado en el fichero vncservers, 1:alex 2:pepe 3:laura…), alex sería el 5901, pepe el 5902, etc.

Un punto a tener en cuenta, si accedéis por VNC y no entráis con el gestor de ventanas Gnome, editad el fichero de configuración del usuario (~/.vnc/xstartup) y cambiad la referencia a “twm” por “gnome-session”

#!/bin/sh

# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &  # Esto cambiadlo por exec gnome-session