Actualización del sistema

Una tarea que es muy importante para el administrador es la de mantener actualizado el sistema y la instalación de nuevo software en él. Dado que el mundo de GNU/Linux se mueve muy rápidamente se tendrán que tener los recaudos necesarios para que el sistema que se esta administrando no quede pronto obsoleto. Ahora esto no hay que confundirlo con que se tenga que estar pendiente de todo lo que cambia en nuestro sistema, ya que si así lo hiciéramos nos pasaremos mas tiempo actualizándolo que usándolo.

Mucha gente siente la necesidad de actualizar el sistema cada vez que una versión nueva de la distribución que se esta usando sale, pero esto también es una perdida de tiempo ya que no todo el sistema cambia por lo que no se justifica la compra de una nueva distribución o el bajarse los 6 discos que la componen. Por esto, la mejor forma de realizar una actualización del sistema es haciéndola a mano, lo que trataremos de ver con unos puntos clave del sistema como lo son el kernel, las bibliotecas y el software esencial para el funcionamiento óptimo del sistema.

Actualizando el núcleo

La actualización del núcleo o kernel del sistema no es bajarse el código fuente de este y realizar una compilación. Esto permite habilitar ciertas funciones que no vienen en los kernel pre-compilados o puede desactivar otras que no son necesarias.

Los fuentes del kernel se pueden obtener de numerosos sitios de ftp. El más conocido es el de kernel.org cuya página es http://www.kernel.org y el ftp es ftp://ftp.kernel.org . Los kernel se encuentran indexados por el número de la versión (ej v2.4) donde se encontraran los sucesivos niveles de parche de cada versión (ej 2.4 parche 18 seria 2.4.18). El kenel vendrá comprimido en dos formas posibles, tar.gz y tar.bz2. Este último sistema de compactación es mucho más eficiente que gz.

El método para descomprimirlos es el habitual, se recomienda la lectura de las páginas de manual de cada uno de los métodos de compactación para efectuarlo. Se deberá realizar la descompresión en el directorio /usr/src donde se creara un directorio con el nombre de la versión del kernel y su nivel de parche. Existe un enlace que estará apuntando a los fuentes del kernel anterior denominado linux. Este enlace deberá cambiarse para que apunte al código del kernel nuevo.

[root#pantano:/usr/src]# ln -sf /usr/src/2.2.16 /usr/src/linux

Hay que tener en cuenta que para realizar la compilación del kernel se deberá contar con los compiladores necesarios. Estos son el gcc y el g++ que son los compiladores de C y C++ que deberán estar instalados en el sistema. Mas adelante veremos como podremos tener una versión reciente de estos.

Una vez que nos sesionamos que tenemos todo lo necesario se procederá a ejecutar el programa de configuración del kernel. Existen 3 formas de realizar esto: La primera y menos recomendable es el ejecutar en el directorio /usr/src/linux la sentencia "make config" que correrá un script que nos preguntaran uno a uno todos los aspectos del kernel. Esta forma es por demás de tediosa y no la veremos aquí.

Otra forma es realizarlo a través de un front-end gráfico realizando un make xconfig con lo que tendremos una vista bastante cómoda para efectuar la configuración. El problema que puede presentarse aquí es que no se cuente con los paquetes de desarrollo del lenguaje Tk que se utilizan para el programa en X por lo que posiblemente no funcione en algunos sistemas.

Una tercer forma es la de ejecutar make menuconfig que nos levantará un programa de configuración pero de consola y es la forma que funciona de forma más cómoda.

La sugerencia es que se tome como punto de partida la configuración del kernel anterior. Esta puede tomarse al haberse guardado en un archivo que podrá tener un nombre como "configuración.kernel.fecha" o el que se les ocurra. SI no lo tienen lo pueden generar a partir del programa de configuración del kernel anterior solicitándole que guarde la configuración en un archivo. Opción que aparece en la parte inferior de la ventana de configuración en el menuconfig. Ahora se puede tomar con la opción de carga de configuración del kernel nuevo, la configuración anterior y modificarla según nuestros requerimientos. Una vez realizado los cambios de configuración necesarios se recomienda el guardar la configuración en un archivo, además de en el mismo kernel, para futuros cambios.

Cuando se termina de configurar, se le instará al ejecutar make dep y make clean. Al hacer make dep se prepararán las dependencias necesarias para efectuar la compilación. Cuando acabe, hay que hacer un make clean. Esto elimina ficheros objetos y demás de la versión anterior. No olvidar este paso.

Después de preparar dependencias, puede ejecutar make zImage o make zdisk (esta es la parte que tarda más tiempo). make zImage compilará el núcleo y lo dejará comprimido en arch/i386/boot/zImage junto a otros ficheros. Con make zdisk el nuevo núcleo se copiará además en el disquete que esté puesto en la disquetera /dev/fd0. Esto es interesante para probar núcleos; si explota (o simplemente no hace nada) se quita el disquete de la disquetera y se podrá arrancar el núcleo antiguo. Además sirve para arrancar si se borró accidentalmente el núcleo del disco duro.

Otra opción es efectuar la compactación del kernel con un método más eficiente dado que el LILO se pone nervioso con núcleos muy grandes. Por esto se podrá efectuar un make bzImage lo que compactara aún mas el kernel. Un núcleo comprimido se descomprime automáticamente al ser ejecutado. Una vez que se tenga un nuevo núcleo que parezca funcionar como se desea, será el momento de instalarlo. Casi todo el mundo utiliza LILO (LInux LOader) para esto. Una forma muy cómoda de llevar todo el tema del LILO, si lo tenemos instalado, y las compilaciones, etc, es añadir lo siguiente en el /etc/lilo.conf

...
image=/vmlinuz
        label=ultimo
        root=/dev/hd[loquesea]
        read-only
        append = ""
image=/vmlinuz.old
        label=anterior
        root=/dev/hd[loquesea]
        read-only
        append = ""

Al compilar, si lo hacemos con la secuencia de comandos

[root#pantano:/usr/src/linux]# make dep
[root#pantano:/usr/src/linux]# make clean
[root#pantano:/usr/src/linux]# make zlilo
[root#pantano:/usr/src/linux]# make modules
[root#pantano:/usr/src/linux]# make modules_install

El make zlilo renombrará la anterior imagen del kernel a /vmlinuz.old, dejando la nueva como /vmlinuz, e instalará LILO, a continuación con lo cual lo hacemos todo automáticamente.

La órdenes make modules; make modules_install compilarán los módulos que hayamos seleccionado, y los instalarán. No hay olvidar ejecutar depmod -a en cuanto hayamos arrancado con dicho núcleo. En caso de que estemos compilando por segunda vez una misma versión de núcleo, y hayamos variado el número de módulos a compilar, es posible que la ejecutar make dep nos encontremos con un mensaje de error; esto se debe a que los antiguos módulos que no hayamos compilado ahora no son borrados. Pueden borrarse tranquilamente.

Actualizando las bibliotecas

La mayor parte del software de GNU/Linux esta compilado para que utilice bibliotecas compartidas, por esto muchas veces se requieren juego de bibliotecas mas recientes para un determinado programa. Las bibliotecas son compatibles en forma ascendente, es decir que un programa compilado para una versión antigua de bibliotecas funcionará igual con una versión mas reciente de las mismas pero lo contrario no se aplicará.

Las últimas versiones de las bibliotecas de GNU/Linux puede encontrarse en los servidores de ftp://ftp.suncite.unc.edu. Los archivos de "versión" que se encuentran allí deberán explicar el proceso de instalación. Se deben bajar los ficheros image-versión.tar.gz y inc-versión.tar.gz donde versión es la versión de las bibliotecas a instalar, por ejemplo 4.4.1. Son ficheros tar comprimidos con gzip; el fichero image contiene las imágenes de las bibliotecas a instalar en /lib y /usr/lib. El fichero inc contiene los ficheros de inclusión a instalar en /usr/include.

El fichero release-versión.tar.gz debe explicar el método de instalación detalladamente (las instrucciones exactas varían para cada versión). En general, se necesita instalar los ficheros de bibliotecas .a y .sa en /usr/lib. Estas son las bibliotecas utilizadas en tiempo de compilación.

Además, los ficheros imagen de las bibliotecas compartidas libc.so.version se instalan en /lib. Estas son las imágenes de las bibliotecas compartidas que son cargadas en tiempo de ejecución por los programas que utilizan las bibliotecas. Cada biblioteca tiene un enlace simbólico utilizando el número de versión mayor de la librería en /lib.

Por ejemplo, la versión 4.4.1 de la librería libc tiene un número de versión mayor de 4. El fichero que contiene la librería es libc.so.4.4.1. Existe un enlace simbólico del nombre libc.so.4 en /lib apuntando a este fichero. Por ejemplo, cuando se actualiza de libc.so.4.4 a libc.so.4.4.1, necesita cambiar el enlace simbólico para apuntar a la nueva versión.

Es muy importante que se cambie el enlace simbólico en un solo paso, como se indica más abajo. Si de alguna forma borrase el enlace simbólico libc.so.4, los programas que dependen del enlace (incluyendo utilidades básicas como ls y cat) dejarán de funcionar. Utilice el siguiente comando para actualizar el enlace simbólico libc.so.4 para que apunte al fichero libc.so.4.4.1

[root#pantano:~]# ln -sf /lib/libc.so.4.4.1 /lib/libc.so.4

Se necesita también cambiar el enlace simbólico libm.so.version de la misma forma. Si se está actualizando a una versión diferente de las bibliotecas, sustituya lo anterior con los nombres adecuados. La nota de la versión de la librería debe explicar los detalles. (Ver sección sobre enlaces simbólicos para más información).

Actualizando gcc

El compilador de C y C++ gcc se utiliza para compilar software en su sistema, siendo el más importante el núcleo. La versión más reciente de gcc se encuentra en los servidores FTP de Linux. En sunsite.unc.edu se encuentra en el directorio /pub/Linux/GCC (junto con las bibliotecas). Debe existir un fichero release para la distribución gcc detallando qué ficheros se necesitan obtener y como instalarlos.