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

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

Hacer persistentes los cambios en ulimit (limits.conf)


Cuando cambiamos algún valor de los disponibles en ulimit, sólo se mantiene en nuestra sesión. Si salimos y volvemos a entrar los perdemos. Esto es útil para cambios temporales pero no cuando queremos que sean persistentes tras el cierre de sesión.

Como ya sabéis la mayoría, el comando ulimit -a nos dice los valores y límites establecidos para nuestro usuario:

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 20
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Los que más se suelen cambiar son el número de ficheros abiertos de forma simultanea por el usuario, el número de procesos por usuario, ciclos de cpu, etc. Para nuestra sesión, lo solemos hacer directamente en la línea de comandos:

# ulimit -n
1024
# ulimit -n 2048
# ulimit -n
2048

Si salimos de la sesión y entramos de nuevo, el valor volverá a ser 1024. En el caso de Red Hat y derivados, así como Debian debemos especificar estos valores en el fichero /etc/security/limits.conf, así los haremos persistentes.

El propio fichero está perfectamente documentado con comentarios, sino, también tenemos la página man de limits.conf para más información:

$ man limits.conf
# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#            
#
#Where:
# can be:
#        - an user name
#        - a group name, with @group syntax
#        - the wildcard *, for default entry
#        - the wildcard %, can be also used with %group syntax,
#                 for maxlogin limit
#        - NOTE: group and wildcard limits are not applied to root.
#          To apply a limit to the root user,  must be
#          the literal username root.
#
# can have the two values:
#        - "soft" for enforcing the soft limits
#        - "hard" for enforcing hard limits
#
# can be one of the following:
#        - core - limits the core file size (KB)
#        - data - max data size (KB)
#        - fsize - maximum filesize (KB)
#        - memlock - max locked-in-memory address space (KB)
#        - nofile - max number of open files
#        - rss - max resident set size (KB)
#        - stack - max stack size (KB)
#        - cpu - max CPU time (MIN)
#        - nproc - max number of processes
#        - as - address space limit (KB)
#        - maxlogins - max number of logins for this user
#        - maxsyslogins - max number of logins on the system
#        - priority - the priority to run user process with
#        - locks - max number of file locks the user can hold
#        - sigpending - max number of pending signals
#        - msgqueue - max memory used by POSIX message queues (bytes)
#        - nice - max nice priority allowed to raise to values: [-20, 19]
#        - rtprio - max realtime priority
#        - chroot - change root to directory (Debian-specific)
#
#                 
#

#*               soft    core            0
#root            hard    core            100000
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#ftp             -       chroot          /ftp
#@student        -       maxlogins       4

FAQ de RHCS (Red Hat Cluster Suite)


Lo primero de todo, perdonad la falta de actualización durante las últimas semanas, no he estado en España y tampoco he tenido el tiempo suficiente para escribir en el blog, estudiar, etc. Vamos a ir retomando poco a poco el ritmo. Hoy simplemente os quiero dejar un enlace para que lo guardéis en vuestros favoritos. Os será de gran utilidad si administráis RHCS (Red Hat Cluster Suite).

Se trata de las FAQ (Frequently asked questions/Preguntas frecuentes) relacionadas con el clustering de Red Hat (en este caso a través de Fedora). Encontraremos un montón de preguntas resueltas sobre problemas comunes que nos encontramos en este sistema de Cluster, también configuraciones típicas, operación, etc. Para hacerlo más claro y fácil de revisar, está separado por secciones según componentes (cman, fencing, GFS, CLVM, DLM, rgmanager, etc).

¡Espero que os sean de utilidad!

Red Hat Cluster: “generic error” al crear un IP Resource


redhat logoLlevo unos días haciendo pruebas con una maqueta de Red Hat Cluster Suite en CentOS. De momento, voy estudiando los distintos comandos y ficheros de configuración, aunque utilizo luci/ricci para la gestión del cluster vía web.

Uno de los primeros problemas que me encontré es de lo más simple. La idea es crear un recurso IP, que levanta una IP virtual en uno de los nodos del cluster. Esa IP la podemos utilizar posteriormente como recurso para un servicio HTTP ó MySQL por ejemplo, IP que en caso de fallo del nodo activo se traspasará junto con el resto de servicio a otro nodo del cluster.

Lo único que hay que tener claro es que la subred de esa IP debe estar configurada en alguna de las interfaces de red de los nodos, sino el rgmanager no sabrá donde levantarla. La máscara es opcional, pero por ahí venían todos mis problemas. Recibía el siguiente error al levantar el servicio:

Dec 28 21:41:53 nodo1 rgmanager[3563]: Initializing service:IP
Dec 28 21:42:32 nodo1 rgmanager[3563]: Recovering failed service service:IP
Dec 28 21:42:32 nodo1 rgmanager[3563]: start on ip "192.168.1.200/255.255.255.0" returned 1 (generic error)
Dec 28 21:42:33 nodo1 rgmanager[3563]: #68: Failed to start service:IP; return value: 1
Dec 28 21:42:33 nodo1 rgmanager[3563]: Stopping service service:IP
Dec 28 21:42:35 nodo1 rgmanager[3563]: Service service:IP is recovering

Y la configuración del recurso/servicio:

<service autostart="0" domain="IP_FAILOVER" name="IP" recovery="relocate">
<ip address="192.168.1.200/255.255.255.0" monitor_link="1" sleeptime="10"/>
</service>

El problema, tras darle unas cuantas vueltas era tan simple como que la máscara se especifica como bits de máscara de red, es decir, en lugar de 255.255.255.0, 24:

<service autostart="0" domain="IP_FAILOVER" name="IP" recovery="relocate">
<ip address="192.168.1.200/24" monitor_link="1" sleeptime="10"/>
</service>

Tratamos de arrancar el servicio y ya levanta la IP virtual correctamente. Puede parecer una tontería pero es útil tenerlo en cuenta por si os pasa.

Dec 28 21:47:31 nodo1 rgmanager[3331]: Starting stopped service service:IP
Dec 28 21:47:37 nodo1 rgmanager[8561]: [ip] Adding IPv4 address 192.168.1.200/24 to eth0
Dec 28 21:47:44 nodo1 rgmanager[3331]: Service service:IP started

ACL (Access Control List) en sistemas de ficheros GNU/Linux


Para un usuario medio de GNU/Linux e incluso para la mayoría de usuarios avanzados, las posibilidades que nos ofrecen el sistema de permisos y propietario estándar es más que suficiente. No obstante, conviene conocer el sistema de listas de control de acceso, conocido comúnmente como ACL (Access Control List) que nos permite extender estos permisos a nivel de ficheros y directorios.

Estas ACL permiten definir permisos concretos para un determinado usuario o grupo en ficheros y directorios, además, se asignan igual que los permisos estándar, con formato octal o simbólico (rwx). Básicamente, en caso de tener un fichero o directorio con unos permisos concretos determinados para su propietario y grupo, nos permite añadir usuarios o grupos extra con unos permisos completamente independientes a los definidos con los permisos estándar.

Activar ACL en el sistema de ficheros

Verificamos con el comando tune2fs si el sistema de ficheros sobre el que queremos tener ACL tiene activado ACL:

# tune2fs -l /dev/mapper/VolGroup00-LogVol00 | grep acl
Default mount options:    user_xattr acl

En caso de no aparecer la opción, tendríamos que remontar el filesystem añadiendo la flag, para hacerlo persistente habría que añadirla en el /etc/fstab.

[root@cluster01 ~]# mount -o remount,acl /
# mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw,acl)

Ver y cambiar las ACL en ficheros/directorios

Para listar los permisos genéricos de un fichero o directorio y las ACL utilizamos el comando getfacl

# getfacl prueba.tmp
# file: prueba.tmp
# owner: root
# group: root
user::rw-
group::r--
other::r--

El fichero prueba.tmp no tiene ACL establecidas, sólo vemos los permisos estándar. Para comenzar a añadir permisos de ACL utilizamos el comando setfacl. En la página man encontramos información relativa a la sintaxis y formato para el cambio de permisos en usuarios y grupos, máscara y otros:

      [d[efault]:] [u[ser]:]uid [:perms]
              Permissions of a named user. Permissions of the file owner if uid is empty.

       [d[efault]:] g[roup]:gid [:perms]
              Permissions of a named group. Permissions of the owning group if gid is empty.

       [d[efault]:] m[ask][:] [:perms]
              Effective rights mask

       [d[efault]:] o[ther][:] [:perms]
              Permissions of others.

Vamos a ver algún ejemplo. En este primer caso vamos a asignar permiso total (777) al usuario foo contra el fichero anterior, del cual es propietario root.

# setfacl -m u:foo:7 prueba.tmp

Y ahí lo tenemos, con sus permisos especiales asignados con ACL:

# getfacl prueba.tmp 
# file: prueba.tmp
# owner: root
# group: root
user::rw-
user:foo:rwx
group::r--
mask::rwx
other::r--

También los podemos asignar con notación simbólica en lugar de octal, vamos a cambiarlo a únicamente lectura para foo:

# setfacl -m u:foo:r prueba.tmp
# getfacl prueba.tmp 
# file: prueba.tmp
# owner: root
# group: root
user::rw-
user:foo:r--
group::r--
mask::r--
other::r--

Si nos fijamos, al listar el fichero con un ls vemos que ha aparecido un ‘+’ indicando que hay ACLs asignadas:

# ll prueba.tmp
-rw-r--r--+ 1 root root 0 Sep 28 17:32 prueba.tmp

Si con el parámetro ‘-m’ cambiabamos las ACL, con ‘-x’ las borramos para un usuario concreto, y con ‘-b’ para todas las asignadas al fichero:

# setfacl -x u:foo prueba.tmp
# setfacl -b prueba.tmp

A la hora de asignar ACL para directorios, resulta interesante poder asignar unas ACL por defecto para todas aquellos subdirectorios que se vayan creando, así como los ficheros que contenga y se vayan metiendo. Vamos a asignar permiso total al usuario foo para el directorio prueba, es prácticamente igual que con ficheros pero añadiendo la ‘d’ de default:

# setfacl -m d:u:foo:rwx testdir

Nota: Sólo a los directorios se les puede añadir ACLs por defecto, si lo hacéis en ficheros:

# setfacl -m d:u:foo:rwx test
setfacl: /root/test: Only directories can have default ACLs

Si revisamos las ACL del directorio vemos asignados todos los default, podríamos también cambiarlo para el propietario, el grupo y ‘otros’ además de para los nuevos usuarios que añadamos vía ACL:

# getfacl testdir/
# file: testdir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:foo:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

Espero que esta introducción a las ACL en GNU/Linux os haya sido de utilidad, es un mundo poco explorado pero lleno de posibilidades.

Cómo crear un RAID 1 por software en RHEL y CentOS


raid1Vamos a ver como crear un RAID 1 (espejo) por software entre dos discos extra añadidos a un sistema CentOS o RHEL. Este sistema nos ofrece total redundancia de datos a expensas de utilizar el doble de espacio en disco. En caso de disponer una controladora para hacer el RAID por hardware lógicamente es más recomendable que esta opción, ya que el rendimiento es mucho mejor.

Vamos a partir de la base de que además del disco que engloba el sistema, tenemos dos discos más disponibles para trabajar:

# fdisk -l | egrep -e "hdb|hdd"
Disk /dev/hdb doesn't contain a valid partition table
Disk /dev/hdd doesn't contain a valid partition table
Disk /dev/hdb: 1073 MB, 1073741824 bytes
Disk /dev/hdd: 1073 MB, 1073741824 bytes

Creación del RAID 1

Lo primero que tenemos que hacer es configurar dos particiones, una en cada disco y del tipo RAID AUTODETECT (fd). Aquellos que tengáis dudas con este paso, revisad este artículo: crear y eliminar particiones con fdisk en Linux

Haríamos este paso en ambos discos:

# fdisk /dev/hdd
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

The number of cylinders for this disk is set to 2080.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2080, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-2080, default 2080):
Using default value 2080

Command (m for help): t Selected partition 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
# partprobe

El resultado hasta el momento sería esto (omitiendo el disco de sistema):

# fdisk -l

Disk /dev/hdb: 1073 MB, 1073741824 bytes
16 heads, 63 sectors/track, 2080 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hdb1               1        2080     1048288+  fd  Linux raid autodetect

Disk /dev/hdd: 1073 MB, 1073741824 bytes
16 heads, 63 sectors/track, 2080 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hdd1               1        2080     1048288+  fd  Linux raid autodetect

Ahora ya podemos hacer uso del comando mdadm para crear el RAID 1 entre las particiones configuradas en ambos discos. Especificamos con -v la opción verbose, -C significa la creación del raid seguido del nombre asignado al array /dev/md0 y le indicamos que los dos discos serán activos (-n 2), podríamos asignar discos spare con -x. Finalmente especificamos los dispositivos a configurar en el array (las dos particiones creadas antes) y especificamos que es un RAID 1 con -l 1:

# mdadm -v -C /dev/md0 -n 2 /dev/hdb1 /dev/hdd1 -l 1
mdadm: size set to 1048192K
mdadm: array /dev/md0 started.

Monitorizar y gestionar el RAID

Podemos ver el estado del RAID en cualquier comento con mdadm –detail seguido del RAID a revisar:

# mdadm --detail /dev/md0
/dev/md0:
        Version : 0.90
  Creation Time : Tue Sep 27 18:02:46 2011
     Raid Level : raid1
     Array Size : 1048192 (1023.80 MiB 1073.35 MB)
  Used Dev Size : 1048192 (1023.80 MiB 1073.35 MB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Tue Sep 27 18:03:33 2011
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           UUID : 9a7817d8:038050a4:82a2f37d:414f679e
         Events : 0.2

    Number   Major   Minor   RaidDevice State
       0       3       65        0      active sync   /dev/hdb1
       1      22       65        1      active sync   /dev/hdd1

En caso de que uno de los discos fallase, habría que sacar del raid el disco fallido y reemplazarlo por otro, con el cual habría que seguir todos los pasos anteriores para prepararlo.

Forzamos el disco como fallido para hacer la prueba:

# mdadm /dev/md0 -f /dev/hdd1
mdadm: set /dev/hdd1 faulty in /dev/md0

Si ahora hicieramos un mdadm -D /dev/md0 veríamos el fallo del disco y el estado degraded:

# mdadm --detail /dev/md0
/dev/md0:
        Version : 0.90
  Creation Time : Tue Sep 27 18:02:46 2011
     Raid Level : raid1
...
...
...
          State : clean, degraded
 Number   Major   Minor   RaidDevice State
       0       3       65        0      active sync   /dev/hdb1
       1       0        0        1      removed

       2      22       65        -      faulty spare   /dev/hdd1

Sacamos el disco fallido del raid:

# mdadm /dev/md0 -r /dev/hdd1
mdadm: hot removed /dev/hdd1

Ahora el estado seguiría siendo degraded pero sin el disco fallido, así que sólo quedaría añadir un nuevo disco para que el RAID se reconstruyera:

# mdadm /dev/md0 -a /dev/hdd1
mdadm: re-added /dev/hdd1

Y automáticamente debería activarse el rebuild/recover y sincronizar la información entre ambos discos:

# mdadm -D /dev/md0
/dev/md0:
        Version : 0.90
  Creation Time : Tue Sep 27 18:02:46 2011
     Raid Level : raid1
     Array Size : 1048192 (1023.80 MiB 1073.35 MB)
  Used Dev Size : 1048192 (1023.80 MiB 1073.35 MB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Tue Sep 27 18:12:32 2011
          State : clean, degraded, recovering
 Active Devices : 1
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 1

 Rebuild Status : 44% complete

           UUID : 9a7817d8:038050a4:82a2f37d:414f679e
         Events : 0.6

    Number   Major   Minor   RaidDevice State
       0       3       65        0      active sync   /dev/hdb1
       1      22       65        1      spare rebuilding   /dev/hdd1

Eliminar un RAID

Para eliminar un RAID antes hay que pararlo, y posteriormente destruirlo:

# mdadm -vS /dev/md0
mdadm: stopped /dev/md0
# mdadm -vr /dev/md0

A partir de aquí, pues únicamente quedaría dar formato a /dev/md0 con el sistema de ficheros que necesitéis y gestionarlo como un sistema de ficheros normal.

Esquema raid: dis.um.es

6 trucos útiles del gestor de paquetes yum


YumPara una primera toma de contacto con Yum os aconsejo leer el artículo que publiqúe hace ya un tiempo: Gestión de paquetes en Linux con Yum, posteriormente estos trucos os pueden ser de utilidad.

En qué paquete se encuentra un determinado fichero

A través del parámetro whatprovides podemos consultar en la base de datos de yum qué paquete contiene un determinado fichero. Esto es realmente útil por ejemplo si necesitamos saber en qué paquete se encuentra una determinada librería que necesitamos por dependencias, un fichero de configuración, etc.

Aquí por ejemplo necesitamos saber el paquete que contiene la librería libssl3.so, gracias a whatprovides vemos que se trata de nss-3.12.8-4.el5_6:

# yum whatprovides libssl3.so
46 packages excluded due to repository priority protections

Other       : libssl3.so

nss-3.12.8-4.el5_6.i386 : Network Security Services
Repo        : updates
Matched from:
Other       : libssl3.so

Instalar únicamente actualizaciones de seguridad

Instalando (a través de yum por supuesto) el paquete yum-security activamos en nuestro sistema la posibilidad de instalar únicamente aquellas actualizaciones relacionadas con la seguridad. Primero lo instalamos:

# yum install yum-security

Una vez instalado podemos lanzar una consulta para examinar las actualizaciones de seguridad pendientes en el sistema:

# yum list-security

Y finalmente para instalarlas:

# yum update --security

Hacer downgrade de un paquete instalado

Para poder bajar de versión un paquete instalado por yum también tendremos que instalar un plugin extra ya que por defecto no está permitido. El paquete es yum-allowdowngrade. Procedemos a instalarlo:

# yum install yum-allowdowngrade

Una vez instalado podemos hacer downgrade de la versión del paquete que queramos del siguiente modo:

# yum --allow-downgrade install mysql

También podemos verificar antes las versiones disponibles para instalar/downgrade:

# yum --allow-downgrade info mysql

Ver las dependencias de un paquete

A través de la opción deplist podemos verificar las dependencias que se instalarán junto con el paquete que queremos instalar.

# yum deplist httpd

package: httpd.i386 2.2.3-45.el5.centos.1
dependency: libz.so.1
provider: zlib.i386 1.2.3-3
dependency: /bin/mv
provider: coreutils.i386 5.97-23.el5_4.2
provider: coreutils.i386 5.97-23.el5_6.4
provider: coreutils.i386 5.97-23.el5_6.3
dependency: liblber-2.3.so.0
provider: openldap.i386 2.3.43-12.el5_5.3
provider: openldap.i386 2.3.43-12.el5_6.7
provider: openldap.i386 2.3.43-12.el5_6.5
...
...

Instalar un RPM y que yum instale las dependencias

Mediante la opción localinstall podemos instalar un paquete rpm local de modo que si fuera necesaria la instalación de otro paquete por dependencias sería yum quien revisara en sus repositorios si existen y en casi afirmativo los instalaría.

# yum localinstall /home/alex/xxxxxxxxxx.rpm

Actualizar un paquete instalado por yum mediante un RPM

Muy similar a localinstall, pero en este caso la opción localupdate nos permite actualizar un paquete que hemos instalado previamente con yum a través de un rpm local. Al igual que en la anterior opción, si es necesario, yum resolverá las dependencias.

# yum localupdate /home/alex/xxxxxxxxxx.rpm

Automatizar instalaciones de CentOS con Kickstart


CentOSKickstart/Anaconda permite realizar instalaciones desatendidas de sistemas CentOS (y por ende Red Hat y derivados) de modo que podamos instalar y configurar todos los equipos que queramos sin realizar la instalación uno a uno. Además podemos añadir tareas pre y post instalación para instalar software extra, realizar configuraciones, etc. Por supuesto esto es extremadamente útil para instalaciones masivas de sistemas.

Básicamente se tiene que crear un fichero (ks.cfg) en el cual se especifican las ordenes que tienen que realizarse en la instalación, esto incluye tanto los pasos de particionado como de configuración de red, paquetes, método de instalación, etc. Para aprender en profundidad las opciones que nos ofrece Anaconda y el fichero Kickstart os recomiendo encarecidamente leer la documentación oficial de Red Hat ya que aquí vamos a tratarlo por encima por ser demasiado extenso (hay incluso una GUI para hacerlo de forma gráfica).

Si necesitáis un fichero ks.cfg base, sabed que en cualquier sistema RHEL, CentOS cuando se termina la instalación automáticamente se guarda un fichero en /root/anaconda-ks.cfg que muestra como sería el fichero ks.cfg si quisieramos hacer una instalación igual de forma desatendida.

En este caso vamos a utilizar el siguiente ks.cfg, de nuevo os recomiendo leer la documentación de Red Hat citada anteriormente para saber personalizarlo al máximo:

install
cdrom
url --url http://ftp.udl.es/pub/centos/5.6/os/i386
lang en_US.UTF-8
keyboard es
network --device eth0 --bootproto static --ip 192.168.0.157 --netmask 255.255.255.0 --gateway 192.168.0.1 --nameserver 80.58.0.33 --hostname pruebacentos.com
rootpw --iscrypted $1$OarXPadVzGFPz3wjA0GwkkW3dp/ad/
firewall --enabled --port=22:tcp
authconfig --enableshadow --enablemd5
selinux --disabled
timezone --utc Europe/Madrid
bootloader --location=mbr --driveorder=hda

clearpart --linux --drives=hda
part /boot --fstype ext3 --size=100 --ondisk=hda
part pv.2 --size=0 --grow --ondisk=hda
volgroup VolGroup00 --pesize=32768 pv.2
logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=256 --grow --maxsize=512
logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow

%packages
@core
%post
/usr/bin/yum -y update

Alguna particularidad de este ejemplo es que usamos la instalación desde un cdrom, que se trata de un netinstall y que descargamos la imagen desde FTP, que asignamos una IP estática, la clave de root, el particionado, únicamente instalamos el paquete base (@core) y que tras finalizar la instalación actualizamos el sistema con yum.

Existen varias formas de decirle a nuestra instalación que tiene que usar Kickstart, ya sea desde un Diskette, CD-ROM o desde la red. Esto podemos especificarlo en el momento del boot del instalador (boot prompt).

Instalación desde Diskette

linux ks=hd:fd0:/ks.cfg

Instalación desde CD

Especificamos la ruta directa en el CD al fichero Kickstart

linux ks=cdrom:/ks.cfg

Instalación desde red/url

En este caso tendríamos que tener un servidor DHCP que le asignara IP al equipo para poder acceder a la URL

linux ks=http://192.168.0.111/ks.cfg

De esta forma hay un problema, que tenemos que manualmente especificar la ruta al Kickstart en el boot prompt. El paso final para evitar esto es modificar la ISO de CentOS y especificar ahí este punto, de modo que no requiera intervención por nuestra parte en ningún punto.

Para ello, descargamos la ISO, en mi caso del NetInstall y la montamos como si fuera una ruta local:

# sudo mount -o loop -t iso9660 CentOS-5.6-i386-netinstall.iso /media/iso_centos

Ahora tenemos que modificar el fichero isolinux.cfg y modificar el boot así que copiamos todo a otra ruta (el CD se monta como solo lectura) y modificamos este fichero:

# cp -R /media/iso_centos/ /home/alex/

Ahora modificamos el fichero isolinux/isolinux.cfg y modificamos:

Antes:

label linux
  kernel vmlinuz
  append initrd=initrd.img

Después:

label linux
  kernel vmlinuz
  append initrd=initrd.img ks=cdrom:/isolinux/ks.cfg

En este caso copiaremos el fichero ks.cfg en la carpeta “isolinux”, y como luego lo quemaremos en un CD usamos la opción de cdrom. Si fuerais a cogerlo desde la red, en vez de cdrom ponéis la url del ks.cfg y solucionado.

Ahora solo nos quedaría hacer una nueva iso con nuestro netinstall modificado, podemos usar el comando mkisofs. Debemos especificarle el boot para que cree una ISO booteable:

cd /home/alex/iso_centos/ && mkisofs -o /home/alex/centos_5.6_kickstart.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-info-table -boot-load-size 4 -R -J -T .

Una vez que tenemos la iso creada solo falta grabarla a CD y arrancar con ella el servidor/PC, toda la instalación se debería hacer de forma automática y desatendida.

Guía de instalación de Red Hat 6 Beta


Hace unas semanas que se publicó la esperada versión BETA de Red Hat Enterprise Linux 6 (RHEL). Vamos a usar dicha versión para hacer una guía del proceso de instalación. Para todos aquellos interesados, ya se puede descargar la ISO desde el sitio FTP de Red Hat:

ftp://ftp.redhat.com/pub/redhat/rhel/beta/6/i386/iso/

Comenzamos en la pantalla de inicio, en la cual podemos seleccionar comenzar una instalación nueva, actualizar el sistema, arrancar en modo de rescate y arrancar con el disco local. Usando la tecla [TAB] podemos modificar las opciones de arranque de cada modo para personalizarlo (añadir drivers extra, instalación en modo texto, etc).

En este caso vamos a hacer la instalación sin realizar ninguna modificación, así que seleccionamos la primera opción.

Guía de instalación de Red Hat 6

Seleccionamos el idioma que será usado para el proceso de instalación, personalmente me gusta utilizar siempre inglés

Guía de instalación de Red Hat 6

Seleccionamos el tipo de teclado (es).

Guía de instalación de Red Hat 6

Elegimos el medio a través del cual hacemos la instalación, en este caso la hacemos localmente desde el CD/DVD, aunque como ya hicimos en otras instalaciones (Por ejemplo CentOS 5) podemos usar un FTP remoto, URL o directorio NFS.

Guía de instalación de Red Hat 6

Saltamos la verificación del DVD y comenzamos la instalación:

Guía de instalación de Red Hat 6

Entramos en la instalación en modo texto, en mi caso ha sido forzado a que la máquina virtual no tenía suficiente memoria RAM para ejecutar el modo gráfico, no obstante el proceso es prácticamente idéntico (por defecto saldrá el entorno gráfico).

En primera instancia tenemos que inicializar los discos duros en caso de ser nuevos, hay que tener en cuenta que se eliminará cualquier dato que haya en ellos. Si hicierais la instalación sobre un disco con otro sistema ya instalado, por ejemplo CentOS, Fedora, etc os avisaría sobre ello y daría opción de reinstalarlo, eliminarlo o compartir el disco entre ambos sistemas:

Guía de instalación de Red Hat 6

Una vez inicializado el disco, seleccionamos la zona horaria:

Guía de instalación de Red Hat 6

Configuramos la clave para el usuario root:

Guía de instalación de Red Hat 6

Comenzamos el particionado del disco, podemos elegir usar el disco completo, reemplazar el sistema operativo anterior o utilizar únicamente el espacio libre. En nuestro caso usamos el disco completo ya que no tenemos nada más instalado. Si utilizamos la primera opción la instalación creará el particionado estándar con las otras opciones podremos personalizarlo. Fijaos que ya podemos seleccionar EXT4 como sistema de ficheros (por defecto):

Guía de instalación de Red Hat 6

Una vez realizado el particionado, comenzará la instalación de los paquetes  básicos y el sistema base:

Guía de instalación de Red Hat 6

Ya tenemos instalado nuestro sistema Red Hat Enterprise Linux 6 Beta, como veis ha sido realmente sencillo. Algo que me ha llamado la atención es que no haya tenido la opción de seleccionar paquetes y aplicaciones extra en este proceso de instalación, algo que siempre hemos podido hacer en CentOS y RHEL anteriores. Quizás sea por ser la versión beta, no obstante, si apareciera dicha opción en la instalación gráfica podríamos elegir entre distintos servicios y aplicaciones para instalar, también suelen permitir configurar las tarjetas de red, algo que en este caso no me ha sido solicitado tampoco.

Guía de instalación de Red Hat 6