martes, 8 de enero de 2013

[HOWTO] Instalar CentOS 6 en un PC con poca Memoria RAM


Bueno, como parte de mis "Proyectos de Verano" me propuse tomar una vieja torre de un PC de Escritorio que me fue quedando desde hace tiempo, y decidí transformarla en un Servidor Casero. Primero empecé formateando el PC, generando las nuevas particiones y luego instalando CentOS como sistema operativo.

El problema es que mi máquina tenía solo 384MB de RAM, y el instalador no quería ejecutarse debido a que había poca memoria, lo que me parecía raro siendo que los requisitos de memoria de CentOS son mucho menores que eso.

Luego descubrí que por un extraño bug de Anaconda (el script encargado de manejar los paquetes durante la instalación), el sistema no consideraba la memoria SWAP a la hora de hacer la instalación, haciendo que la memoria disponible sea mucho menor que la real.

Por suerte este bug se puede corregir "al vuelo" de la instalación, para ello necesitamos:

  • Un disco LiveCD o LiveDVD de CentOS 6 en adelante.
  • Que la máquina a la cual se le va a instalar CentOS tenga sus particiones ya creadas: Como mínimo una partición de SWAP, y dos particiones ext4 (para el / y el /home).
  • Que la cantidad de memoria disponible (RAM+SWAP) sea mayor o igual a 1GB.
Primero booteamos el LiveCD (o LiveDVD) en modo gráfico (si hay más de 256MB de RAM) o en modo texto (con menos de 256MB de RAM). Luego entramos como usuario root con el siguiente comando desde la terminal:
su -

Luego abrimos en el editor de texto el archivo /usr/sbin/anaconda, en modo gráfico usaremos:
gedit /usr/sbin/anaconda

O en modo consola:
vim /usr/sbin/anaconda

En el archivo /usr/sbin/anaconda buscaremos  la palabra within y modificaremos la función within_available_memory añadiendo la linea return True, quedando así:
def within_available_memory(needed_ram):
    return True
    # kernel binary code estimate that is
    # not reported in MemTotal by /proc/meminfo
    epsilon = 15360 # 15 MB
    return needed_ram < (iutil.memInstalled() + epsilon)

Guardamos el archivo. Con esto eliminamos un requerimiento de memoria absolutamente innecesario (que nadie sabe por qué se puso en el código).

Ahora abrimos el archivo /usr/lib/anaconda/storage/__init__.py, de la misma forma que lo hicimos con el archivo anterior:
gedit /usr/lib/anaconda/storage/__init__.py

O bien:
vim /usr/lib/anaconda/storage/__init__.py

Busca la cuarta ocurrencia de la palabra swapoff y modifica una parte de la función umountFilesystems de:
    for device in devices:
        if not device.format.mountable and \
           (device.format.type != "swap" or swapoff):
           continue

Para que quede como:
    for device in devices:
        if not (device.format.mountable and \
           (device.format.type != "swap" or swapoff)):
           continue

Si no lo ves bien, la idea es poner un paréntesis abierto después de if not y un cierre de paréntesis después de or swapoff. Con esto se debiese eliminar el bug de los requisitos de memoria. Guardamos el archivo. Ahora en la consola introducimos el siguiente comando:
liveinst

Se va a ejecutar el instalador de CentOS, ya no debería haber problemas con la instalación. Se ha probado este método en máquinas virtuales desde 192MB en RAM en adelante, así que ese debiese ser el mínimo para poder instalar CentOS. Espero que hayan disfrutado el HOWTO. ¡Saludos!

Fuente: http://lists.centos.org/pipermail/centos/2011-July/115367.html

No hay comentarios:

Publicar un comentario