Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Cómo compilar el núcleo (kernel) de GNU/Linux en CentOS.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2008 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.

Introducción.

Una de las grandes ventajas de que el núcleo (kernel) GNU/Linux sea equipamiento lógico libre (Software Libre) es el poder descargar el código fuente del núcleo, configurar éste para compilar específicamente con opciones adecuadas a necesidades particulares o con controladores específicos para un sustento físico (hardware) en particular, compilarlo y obtener como resultado mejoras en el desempeño.

La gran variedad de distribuciones de GNU/Linux instalan un núcleo (kernel) que fue configurado y compilado con opciones genéricas y que permiten utilizar éste en una gran variedad de dispositivos y computadoras. Esto facilita la vida a los desarrolladores y empaquetadores que trabajan para cada distribución pues de esta forma con cuatro o cinco versiones del paquete de núcleo abarcan la mayoría de los sustentos físicos en el mercado. Ésto elimina la necesidad de los usuarios por compilar el núcleo.

Por mencionar un ejemplo, el paquete del núcleo de CentOS 5 y Red Hat Enteprise Linux 5 que se distribuye para arquitecturas i686 incluye opciones y optimizaciones genéricas que permiten utilizar un mismo paquete RPM del núcleo para una amplia variedad de sistemas. Éste incluye el soporte para ser utilizado con microprocesadores como Pentium Pro, Pentium II, Pentium III, Pentium 4, Pentium M, Celeron, Athlon, Duron, Cyrix i686, etc. Evidentemente este soporte genérico impide poder explotar todo el potencial e instrucciones de un modelo de microprocesador en particular.

Un ejemplo del porque conviene recompilar el núcleo.

Si, por ejemplo, se dispone una computadora portátil (Laptop) Compaq Armada M300 con microprocesador Pentium III (Coppermine) de 500 MHz, con 320 MB RAM, circuitos integrados Intel PIIX4, tarjeta de audio ESS Technology ES1978, tarjeta de red Ethernet Pro 100 y otros ciertos dispositivos en particular, el núcleo genérico incluido en la instalación funcionará bien, pero se tendrá un desempeño inferior. Configurar y compilar el núcleo específicamente para las características de este modelo de computadora portátil, excluyendo de la configuración funciones que jamás se utilizarán en este sistema, mejorará su desempeño significativamente.

En sistemas caseros y computadoras portátiles con cierta antigüedad, pueden excluirse funciones como el soporte para más de 4 GB de RAM, soporte genérico para arquitectura ix86, soporte para otros modelos de computadoras portátiles, soporte para más de un microprocesador, soporte para IPv6 y otras opciones que solo serían útiles en otro tipo de sistemas como servidores.

Puede agregarse soporte para más periféricos, como por ejemplo más dispositivos USB y compilar algunos controladores (cómo el soporte para LVM) dentro del núcleo en lugar de hacerlo como módulos a fin de mejorar el desempeño durante el arranque del sistema.

En un servidor se puede mejorar mucho el desempeño configurando y compilando exclusivamente las opciones y módulos específicos para la configuración de sustento físico (hardware) y funciones requeridas para los servicios a brindar.

Procedimientos.

Determinar el sustento físico y controladores.

Este procedimiento es complicado e implica contar con un cierta experiencia y conocimientos generales acerca del sustento físico (hardware).

Módulos utilizados por el sistema.

Utilizando el mandato lsmod es posible determinar que controladores se están utilizando en el sistema. Esta lista de controladores debe tomarse muy en cuenta a fin de evitar excluir alguno de éstos. Utilice el mandato de la siguiente forma:

/sbin/lsmod

Lo anterior puede devolver una salida similar a la siguiente, que dependerá del sustento físico del sistema:

Module                  Size  Used by
nls_utf8                1888  1 
vfat                   12768  1 
fat                    50268  1 vfat
sg                     35536  0 
sd_mod                 28112  2 
usb_storage            46848  1 
scsi_mod              148044  3 sg,sd_mod,usb_storage
i2c_dev                 7492  0 
dm_multipath           18856  0 
backlight               5220  0 
snd_es1968             28192  1 
gameport               13608  1 snd_es1968
snd_ac97_codec         97760  1 snd_es1968
ac97_bus                1728  1 snd_ac97_codec
snd_seq_dummy           3556  0 
snd_seq_oss            30976  0 
snd_seq_midi_event      7008  1 snd_seq_oss
snd_seq                47856  5 snd_seq_dummy,snd_seq_oss,snd_seq_midi_event
snd_pcm_oss            41184  0 
snd_mixer_oss          16192  1 snd_pcm_oss
battery                12932  0 
ac                      5796  0 
snd_pcm                72168  3 snd_es1968,snd_ac97_codec,snd_pcm_oss
button                  7984  0 
parport_pc             27524  0 
snd_timer              22148  2 snd_seq,snd_pcm
snd_page_alloc         10216  2 snd_es1968,snd_pcm
parport                35400  1 parport_pc
snd_mpu401_uart         7872  1 snd_es1968
snd_rawmidi            23392  1 snd_mpu401_uart
joydev                 11232  0 
snd_seq_device          8044  4 snd_seq_dummy,snd_seq_oss,snd_seq,snd_rawmidi
snd                    52068  13 snd_es1968,snd_ac97_codec,snd_seq_oss,snd_seq,
                              snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_timer,
                              snd_mpu401_uart,snd_rawmidi,snd_seq_device
e100                   34220  0 
soundcore               7264  1 snd
mii                     5440  1 e100
i2c_piix4               8780  0 
pcspkr                  2624  0 
i2c_core               24432  2 i2c_dev,i2c_piix4
serio_raw               6500  0 
floppy                 55652  0 
dm_snapshot            17472  0 
dm_zero                 1920  0 
dm_mirror              25568  0 
ext3                  132488  2 
jbd                    42100  1 ext3
uhci_hcd               23696  0 
ohci_hcd               22916  0 
ehci_hcd               33740  0

Tipo de microprocesador.

La información del microprocesador se puede consultar leyendo el contenido del archivo virtual /proc/cpuinfo utilizando el mandato less del siguiente modo:

less /proc/cpuinfo

Lo anterior puede devolver una salida similar a la siguiente, que dependerá del tipo de microprocesador del que se disponga:

processor	: 0
vendor_id : GenuineIntel
cpu family : 6
model : 8
model name : Pentium III (Coppermine)
stepping : 3
cpu MHz : 498.164
cache size : 256 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 sep
mtrr pge mca cmov pat pse36 mmx fxsr sse
bogomips : 996.86
clflush size : 32

Dispositivos PCI.

El mandato lspci permite determinar los dispositivos PCI (Peripheral Component Interconnect o Interconexión de Componentes Periféricos) presentes en el sistema.

/sbin/lspci

Lo anterior puede devolver una salida similar a la siguiente, que dependerá de los dispositivos PCI de los que que se disponga:

00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge
(AGP disabled) (rev 03)
00:04.0 CardBus bridge: Texas Instruments PCI1211
00:05.0 VGA compatible controller: ATI Technologies Inc 3D Rage LT Pro (rev dc)
00:07.0 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 02)
00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:07.2 USB Controller: Intel Corporation 82371AB/EB/MB PIIX4 USB (rev 01)
00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
00:08.0 Multimedia audio controller: ESS Technology ES1978 Maestro 2E (rev 10)
00:09.0 Ethernet controller: Intel Corporation 82557/8/9/0/1 Ethernet Pro 100 (rev 09)
00:09.1 Serial controller: Agere Systems LT WinModem
01:00.0 Ethernet controller: 3Com Corporation 3CRPAG175 Wireless PC Card (rev 01)

Dispositivos USB.

De manera similar al mandato lspci, el mandato lsusb permite determinar los dispositivos USB (Universal Serial Bus o Transporte Universal en Serie) presentes en el sistema. Conecte a las ranuras USB del sistema los dispositivos USB más frecuentemente utilizados y utilice el mandato lsusb.

/sbin/lsusb

Lo anterior puede devolver una salida similar a la siguiente, que dependerá del tipo de dispositivos USB de los que se disponga:

Bus 001 Device 005: ID 0457:0151 Silicon Integrated Systems Corp. Super Flash
1GB / GXT 64MB Flash Drive
Bus 001 Device 004: ID 05ac:0201 Apple, Inc. USB Keyboard [Alps or Logitech,
M2452]
Bus 001 Device 003: ID 05ac:1001 Apple, Inc. Keyboard Hub [ALPS]
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Instalación el equipamiento lógico necesario.

Para CentOS, a fin de disponer de los paquetes RPM de fuentes, se debe configurar primero los depósitos yum de los paquetes RPM fuentes (.src.rpm) como el nuevo archivo /etc/yum.repos.d/CentOS-Sources.repo, con el siguiente contenido:

#source packages
[sources]
name=CentOS-$releasever - Sources
baseurl=http://mirror.centos.org/centos/$releasever/os/SRPMS/
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

#source packages
[sources-updates]
name=CentOS-$releasever - Sources Updates
baseurl=http://mirror.centos.org/centos/5/updates/SRPMS/
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

Al terminar se continúa con la instalación de los paquetes RPM binarios de el compilador gcc, cabeceras de desarrollo para el lenguaje de programación C, paquete de desarrollo de ncurses, para construir la herramienta de configuración del núcleo y el paquete para creación de paquetería RPM:

yum -y install gcc glibc-devel ncurses-devel rpm-build

Si se va a utilizar la herramienta de configuración gráficos, hay que instalar además los paquetes qt-devel y gcc-c++ del siguiente modo:

yum -y install qt-devel gcc-c++

Obtener el código fuente del núcleo.

A partir de los depósitos de la distribución utilizada.

Utilizar el paquete fuente de la distribución de GNU/Linux utilizada garantiza que se utilizará la misma versión oficial de núcleo para producción del distribuidor, la cual seguramente incluye parches específicos para funcionar con la instalación de esa distribución de GNU/Linux. Esto garantiza que se mantendrá la compatibilidad de los API (Application Programming Interface o Interfaz de Programación de Aplicaciones) requeridos por aplicaciones de terceros.

Primero se instala el paquete yum-utils de la siguiente forma:

yum -y install yum-utils

El paquete yum-utils incluye la herramienta yumdownloader, misma que se utilizará para descargar el paquete fuente del paquete RPM del kernel, del siguiente modo:

yumdownloader --source kernel

Suponiendo que se tiene instalado el paquete del núcleo denominado kernel-2.6.18-92.1.6.el5, lo anterior descargara desde los depósitos de equipamiento lógico en Internet el paquete kernel-2.6.18-92.1.6.el5.src.rpm dentro del directorio de trabajo actual.

Se procede a instalar el paquete fuente kernel-2.6.18-92.1.6.el5.src.rpm de la siguiente forma:

rpm -ivh kernel-*.src.rpm

Esto instalará los fuentes y parches para el núcleo en el directorio /usr/src/redhat/SOURCES/ y el archivo de especificación para construir el paquete binario RPM como /usr/src/redhat/SPECS/kernel-2.6.spec.

Para poder utilizar el código fuente, hay que descomprimir y aplicar los parches incluidos por el distribuidor. Esto se consigue utilizando el mandato rpmbuild con las opciones -bp y --target=[arquitectura], donde [arquitectura]representa la arquitectura genérica del microprocesador. En el caso de CentOS 5, están disponibles las configuraciones genéricas para i586, i686, x86_64, ia64, ppc, ppc64, s390 y s390x y las variantes i686-PAE, para equipos , i686-xen, ia64-xen y x86_64-xen, para utilizar las funciones de Xen que permiten utilizar paravirtualización.

Las opciones -bp inician parcialmente el la construcción del paquete (build) pero solo hasta la sección %prep (preparativos) del archivo de especificación, lo que significa que se descomprimirá el fuente del núcleo y se aplicarán los parches.

Se debe acceder al directorio /usr/src/redhat/SPECS/.

cd /usr/src/redhat/SPECS/

Posteriormente se procede a descomprimir fuentes y aplicar parches. La opción --target=i686 se utilizará en ejemplo a continuación para que se instale un archivo previamente configurado con opciones genéricas para la arquitectura i686.

rpmbuild -bp --target=i686 kernel-2.6.spec

Considerando en el ejemplo que se instaló el paquete fuente RPM kernel-2.6.18-92.1.6.el5.src.rpm, solo resta es acceder al directorio /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.i686/ para configurar las opciones que se utilizarán.

cd ../BUILD/kernel-2.6.18/linux-2.6.18.i686/

Dentro del paquete RPM se incluyen varios archivos con configuraciones genéricas de acuerdo a la arquitectura, los cuales se instalan dentro del directorio /usr/src/redhat/SOURCES/. Uno de estos archivos se selecciona y copia automáticamente dentro del directorio /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.i686/ cuando se define la arquitectura con la opción --target del mandato rpmbuild.

kernel-2.6.18-i586.config Configuración genérica para arquitectura i586 (Pentium, Pentium MMX, AMD K5, AMD K6, AMD K6 II, AMD K6 III).
kernel-2.6.18-i686.config Configuración genérica para arquitectura i686 (Pentium Pro, Pentium II, Pentium III, Pentium 4, Pentium M, Xeon, Celeron, AMD K7, AMD Athlon XP, AMD Duron).
kernel-2.6.18-i686-debug.config Configuración genérica para arquitectura i686, con opciones de depuración. Solo recomendado para desarrolladores y escenarios donde se requiere diagnóstico.
kernel-2.6.18-i686-PAE.config Configuración genérica para arquitectura i686, con soporte PAE (Physical Address Extension) que añade capacidades para utilizar mayor espacio de intercambio (swapspace). Utilizado en sistemas con más de 4 GB de RAM.
kernel-2.6.18-i686-xen.config Configuración genérica para arquitectura ia64 (Intel Itanium), con soporte para Xen. Permite utilizar paravirtualización a través de Xen.
kernel-2.6.18-ia64.config Configuración genérica para arquitectura ia64.
kernel-2.6.18-ia64-debug.config Configuración genérica para arquitectura ia64, con opciones de depuración. Solo recomendado para desarrolladores y escenarios donde se requiere diagnóstico.
kernel-2.6.18-ia64-xen.config Configuración genérica para arquitectura ia64, con soporte para Xen. Permite utilizar paravirtualización a través de Xen.
kernel-2.6.18-ppc64.config Configuración genérica para arquitectura PPC de 64 bit (G5).
kernel-2.6.18-ppc64-debug.config Configuración genérica para arquitectura PPC de 64 bit, con opciones de depuración. Solo recomendado para desarrolladores y escenarios donde se requiere diagnóstico.
kernel-2.6.18-ppc.config Configuración genérica para arquitectura PPC de 32 bit (G3 y G4).
kernel-2.6.18-ppc-smp.config Configuración genérica para arquitectura PPC de 32 bit, con soporte de Multi-Procesamiento Simétrico (SMP).
kernel-2.6.18-s390.config Configuración genérica para arquitectura s390.
kernel-2.6.18-s390x.config Configuración genérica para arquitectura s390x.
kernel-2.6.18-s390x-debug.config Configuración genérica para arquitectura s390, con opciones de depuración. Solo recomendado para desarrolladores y escenarios donde se requiere diagnóstico.
kernel-2.6.18-x86_64.config Configuración genérica para arquitectura x86_64 (AMD K8, AMD Athlon 64, AMD Opteron).
kernel-2.6.18-x86_64-debug.config Configuración genérica para arquitectura x86_64, con opciones de depuración. Solo recomendado para desarrolladores y escenarios donde se requiere diagnóstico.
kernel-2.6.18-x86_64-xen.config Configuración genérica para arquitectura x86_64, con soporte para Xen. Permite utilizar paravirtualización a través de Xen.

Descargar desde kernel.org

La principal ventaja de descargar el núcleo desde kernel.org es que se contará con la más reciente versión, mejoras y más dispositivos soportados. El inconveniente es que puede perderse la estandarización con la distribución utilizada o bien la compatibilidad con algunas aplicaciones de terceros que dependen directa o indirectamente de una versión en particular del núcleo o un API incluido en alguna versión en particular del núcleo.

Se accede hacia http://www.kernel.org/ y se descarga, desde la parte inferior de la portada del sitio, la versión más reciente del núcleo.

wget \
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.10.tar.bz2

Lo anterior descargará el paquete linux-2.6.25.10.tar.bz2.

Se procede a descomprimir linux-2.6.25.10.tar.bz2 utilizando lo siguiente:

tar jxvf linux-2.6.25.10.tar.bz2

Lo anterior descomprimirá el contenido en un directorio denominado linux-2.6.25.10. Solo resta es acceder hacia este directorio para configurar las opciones que se utilizarán.

cd linux-2.6.25.10

Configuración del núcleo.

Se puede utilizar el mandato make con la opción config de la siguiente forma:

make config

El inconveniente de ésto es que se tendrá que responder una a una cada una de las opciones del núcleo. Solo se recomienda para usuario muy experimentados.

Se puede utilizar el mandato make con la opción menuconfig de la siguiente forma:

make menuconfig

Lo anterior compilará y ejecutará una interfaz hecha en ncurses que permitirá examinar el árbol de opciones y habilitar y deshabilitar de una forma más amistosa, pues cada opción incluye una ayuda que explica para que sirve y si es seguro incluirla, compilarla como módulo o excluirla.

menuconfig, pantalla principal

En general, se puede empezar excluyendo las optimizaciones genéricas y funciones que nunca se utilizarán en el sistema como el multiprocesamiento simétrico y soporte para más de 4 GB de RAM.

menuconfig, excluyendo funciones genéricas

Y luego seleccionado el tipo exacto de microprocesador y excluir las funciones genéricas.

menuconfig, tipo de microprocesador

Pueden habilitarse o excluirse funciones y módulos, de acuerdo a las necesidades y el sustento físico determinado previamente con los mandatos lsmod, lspci y lsusb, en el resto de las opciones del árbol de configuración de menuconfig.

En general se puede compilar dentro del núcleo lo siguiente:

  • Controladores para dispositivos integrados en la tarjeta madre que sean de uso continuo.
  • Controladores de dispositivos de uso continuo, como controladores de disco y transportes (buses) SCSI (Small Computers System Interface o Sistema de Interfaz para Pequeñas Computadoras), ATA (Advanced Technology Attachment), PATA (Parallel Advanced Technology Attachment), SATA (Serial Advanced Technology Attachment), RAID (Redundant Array of Inexpensive Disks o conjunto redundante de discos independientes), etc.
  • Soporte de LVM (Logical Volume Manager o Gestor de Volúmenes Lógicos).
  • Controladores para sistemas de archivos (ext3).

En general se debe evitar incluir dentro del kernel y solo compilar como módulo lo siguiente:

  • Controladores de dispositivos periféricos (como los controladores para cámaras digitales).
  • Controladores para cualquier dispositivo que se pueda remover del sistema (es decir dispositivos USB, Firewire, Bluetotooth, etc.).
  • Controladores de dispositivos que se intercambien con frecuencia.

La regla general es mantener el núcleo lo más pequeño posible y evitar incluir dentro de éste demasiados controladores. Si se compila un controlador dentro del núcleo y el dispositivo es retirado del sistema o éste sufre algún tipo de daño que afecte su funcionamiento, el núcleo puede sufrir conflictos con el resto de los controladores o bien sufrir un fallo. Es preferible compilar como módulos los controladores de todo aquello que se pueda remover del sistema, incluyendo los dispositivos que utilicen ranuras PCI.

Al terminar de configurar lo anterior, simplemente se sale de menuconfig para guardar los cambios.

Compilación del núcleo.

La compilación se inicia utilizando el mandato make.

make

Instalación del núcleo.

Después de varios minutos, dependiendo de la capacidad del sistema, se procede a instalar primero los módulos:

make modules_install

Al concluir el procedimiento, se instala el núcleo.

make install

Lo anterior instalará el núcleo en el directorio /boot, creará el archivo system.map correspondiente, creará la imagen del disco RAM correspondiente y añadirá una entrada en el archivo /boot/grub/grub.conf, respetando los núcleos previamente instalados al colocarse como opción de arranque secundaria.

Simplemente reinicie y pruebe el nuevo núcleo. Si todo parece funcionar correctamente, puede editar el archivo /boot/grub/grub.conf y colocar el nuevo núcleo como predeterminado.

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
#          initrd /initrd-version.img
#boot=/dev/hda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.25.10)
        root (hd0,0)
        kernel /vmlinuz-2.6.25.10 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.25.10.img
title CentOS (2.6.18-92.1.6.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-92.1.6.el5 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.18-92.1.6.el5.img

NOTA: Es muy importante siempre conservar una copia del núcleo que viene con la distribución utilizada en caso de presentarse problemas.

Creando paquete RPM.

Se puede crear un paquete RPM a partir de los binarios recién compilados. Acceda de nuevo hacia el directorio del núcleo recién compilado y utilice el mandato make con la opción binrpm-pkg de la siguiente forma:

make binrpm-pkg

Si desea crear un paquete RPM compilando todo de nuevo, puede utilizar el mandato make con la opción rpm-pkg de la siguiente forma:

make rpm-pkg

La instalación del paquete resultante se realiza utilizando el mandato rpm con las opciones -ivh (instalar, descriptivo y mostrar barra de progreso), a fin de que se mantengan instalados los paquetes del núcleo existentes en el sistema y estos coexistan, permitiendo elegir con cual iniciar el sistema desde el arranque con Grub.

rpm -ivh /usr/src/redhat/RPMS/i386/kernel-2.25.10-2.i386.rpm

Lo anterior instalará el paquete RPM del núcleo recién creado, sin afectar a otras versiones de paquetes del núcleo que estén previamente instaladas. Al terminar, solo será necesario eligir desde Grub el núcelo con el cual se iniciará el sistema.

   Grub version 0.97 (639K lower / 261056K upper memory)
_________________________________________________________________
|CentOS (2.6.25.10) |
|CentOS (2.6.18-92.1.6.el5) |
|CentOS (2.6.18-92.1.1.el5) |
| |
| |
| |
| |
| |
| |
| |
| |
|________________________________________________________________|

Use the
and the to select which entry is highlighted.

Press enter to boot the selected OS or 'p' to enter a
password to unlock the next set of features.







Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Última Edición: 14/07/2008, 21:31|Hits: 43,301 Ver la versión para imprimir