Administración de paquetes
De XTech Capacitacion
Tabla de contenidos
|
Código fuente y código objeto
Cuando hablamos de código fuente (o solo fuentes) nos referimos a aquellas líneas de texto escritas en algún lenguaje de programación que es suceptible de ser interpretado o compilado por otro programa (llamados intérpretes y compiladores).
La importancia del código fuente en el mundo del software libre, radica en que el mismo nos permitirá modificar los programas (a nosotros o a quien nosotros contratemos para ello) de manera que se corrijan los errores o se modifiquen los comportamientos que no nos gusten.
Por esta misma razón es que en el mundo del software no libre, nunca se habla de código fuente, ya que la modificación de los programas está prohibida sobre pena legal. E aquí el fundamento por el que muchos llamamos a este software no libre, "privativo".
El pasaje de código fuente a código objeto (o sus sinónimos: binarios o ejecutables) se puede realizar por dos métodos distintos:
- Si lo que tenemos es un lenguaje interpretado, entonces el intérprete de comandos de ese lenguaje irá leyendo línea a línea y ejecutará las órdenes. Esto sucede en lenguajes como el
html. - En cambio, si tenemos un leguaje compilado, el compilador tomará todo el código fuente y de una vez, generará un código objeto que luego un sistema operativo podrá ejecutar luego de instalado el binario.
Entonces, las etapas por las que pasa el código están descriptas en el siguiente gráfico:
La interpretación de este esquema es la siguiente (de izquierda a derecha):
- El programador ingresa a través del teclado las líneas de código (proceso de edición) en un editor. Este editor puede ser un editor de texto simple (como el vi, nano, kwrite, gedit o cualquier otro similar) o puede ser un completo IDE (Entorno Integrado de Desarrollo) que brinde mucha ayuda al mismo, facilitando la tarea del programador. Una vez terminada esta etapa, tendremos el código fuente listo para la siguiente.
- En la segunda etapa, el compilador toma el código fuente y lo Traduce a código objeto, dejándolo listo para la siguiente etapa.
- La última etapa es lo que vulgarmente llamamos instalación. Se trata de el proceso que realiza el editor de enlaces (L-Editor) al copiar adecuadamente ese ejecutable en el sistema anfitrión, a la vez que lo enlaza con las bibliotecas compartidas del sistema. Dejándo totalmente operacional para el usuario.
Lugares para conseguir fuentes y ejecutables
La principal fuente de obtención de "fuentes" (valga la redundancia) y/o ejecutables, es el sitio web del mismo software que queremos instalar. Esto nos garantiza el acceso a las versiones más recientes del mismo. Algunos ejemplos:
- http://es.openoffice.org/ Fuentes y binarios para OpenOffice.org la suite de oficina de mayor avance en la actualidad.
- http://www.gimp.org/downloads/ Fuentes y binarios para Gimp, el programa de edición de imágenes de mapa de bits.
- http://www.mozilla.org/products/firefox/ Fuentes y binarios para Firefox, el navegador de mayor crecimiento de la actualidad (incluídos los navegadores privativos).
- http://www.kdevelop.org/index.html?filename=HEAD/download.html Fuentes y binarios para Kdevelop, el entorno de desarrollo de aplicaciones para KDE.
Pero sucede que algunos paquetes son adaptados por las distribuciones para un mejor comportamiento en la misma o solamente para "agiornarlo" al estilo de la misma. Así que también les damos otros ejemplos de donde empezar a buscar lo que necesitamos, aunque esto es solo eso, un punto de partida, no pretende ser el listado de todos los paquetes existentes, ni mucho menos:
- http://www.us.debian.org/distrib/packages Listado de paquetes para Debian y sus derivados.
- https://www.ututo.org/cgi-bin/bsoname.pl/
- http://packages.gentoo.org/categories/
En otros casos hay sitios completos que se encargan de recopilar paquetes y ponerlos a disposición de los usuarios:
Comprimir y descomprimir archivos
tar -zxvf lpt.tar.gz
Descomprime y Desempaqueta el archivo lpt.tar.gz
tar -zcvf lpt.tar.gz /home/LPT
Empaqueta y Comprime el directorio /home/LPT dentro de lpt.tar.gz
tar -jxvf lpt.tar.bz2
Descomprime y Desempaqueta el archivo lpt.tar.bz2
tar -jcvf lpt.tar.bz2 /home/LPT
Empaqueta y Comprime el directorio /home/LPT dentro de lpt.tar.bz2
tar -M -cvpf /dev/fd0 /directorio_a_comprimir
Empaqueta el directorio actual en múltiples Diskette. Se debe realizar como root.
tar -M -xvpf /dev/fd0
Desempaqueta el archivo desde el primer diskette y va solicitando de a uno hasta completar la restauración del directorio. Este paso debe realizarce como root.
Instalación de binarios en el sistema
Instalar paquetes deb
El programa dpkg es la base del sistema de gestión de paquetes de Debian. Fue creado por Ian Jackson en 1993; es similar a rpm. Se utiliza para instalar, quitar, y proporcionar información sobre los paquetes .deb.
Éste es en sí mismo una herramienta de bajo nivel; se necesita un frontal de alto nivel para traer los paquetes desde lugares remotos o resolver conflictos complejos en las dependencias de paquetes. Debian cuenta con apt para esta tarea.
Instalación de paquetes deb:
dpkg -i nombre_del_paquete.deb
Para hacer consultas:
dpkg -S nombre_del_paquete (admite comodines)
Por ejemplo:
# dpkg -S stdio.h libc6-dev: /usr/include/stdio.h libc6-dev: /usr/include/bits/stdio.h perl: /usr/lib/perl/5.6.0/CORE/nostdio.h
Para desinstalar:
dpkg -r nombre_del_paquete
El resto de opciones de dpkg puede verse con man dpkg.
Para observar que paquetes tenemos instalados en el sistema:
dpkg -l
Esto nos dará la información de si el paquete está instalado efectivamente o si tiene daños (como ejemplo), también el nombre real y una breve descripción del mismo.
Automatizando la instalación con apt
APT es un acrónimo para Advanced Packaging Tool, un sistema de gestión de paquetes creado por el proyecto Debian. Su objetivo es simplificar en gran medida la instalación y eliminación de programas en los sitemas Linux.
No existe un programa apt en sí mismo; éste es una librería de funciones C++ que se emplea por varios programas de línea de comandos para distribuir paquetes, en especial, apt-get y apt-cache.
Existen también programas que proporcionan un front end para APT, generalmente basados en apt-get, como aptitude con una intefaz de texto ncurses o synaptic con una interfaz gráfica GTK+.
Existe un repositorio central con más de 13000 paquetes apt utilizados por apt-get y programas derivados para descargar e instalar aplicaciones directamente desde Internet, conocida como una de las mejores cualidades de Debian.
APT fue diseñado originariamente para trabajar con paquetes .deb en lo sistemas Debian, pero desde entonces ha sido modificado para trabajar con paquetes RPMs, y para funcionar en otros sistemas operativo, como Mac OS X.
Actualizando la lista de paquetes disponibles
El sistema de paquetes utiliza una base de datos para llevar un monitoreo de los paquetes instalados, los no instalados y cuales están disponibles para su futura instalación. El programa apt-get utiliza esta base de datos para averiguar como instalar los paquetes que son requeridos por el usuario y para indagar sobre que paquetes adicionales serán requeridos para que el seleccionado funcione correctamente.
Para actualizar la lista, se utiliza el comando
apt-get update
Este comando busca el paquete en los archivos listados en /etc/apt/sources.list
Es una buena costumbre ejecutar este comando regularmente para mantenerse informado acerca de las posibilidades de actualización para el sistema, particularmente las actualizaciones de seguridad.
El archivo /etc/apt/sources.list
El contenido de este archivo, normalmente sigue este formato:
# See sources.list(5) for more information, especialy
# Remember that you can only use http, ftp or file URIs
# CDROMs are managed through the apt-cdrom tool.
deb http://http.us.debian.org/debian stable main contrib non-free
deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
deb http://security.debian.org stable/updates main contrib non-free
# Uncomment if you want the apt-get source function to work
#deb-src http://http.us.debian.org/debian stable main contrib non-free
#deb-src http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
La primera palabra en cada línea, deb o deb-src, indican el tipo del archivo: si son paquetes binarios (deb) o paquetes fuente (deb-src), que son los códigos originales, más el archivo de control de Debian (.dsc) y el diff.gz que contienen los cambios necesarios para "debianizar" el programa.
Las líneas que comienzan con # nos indican que son comentarios o fuentes que no están siendo utilizadas por nuestro sistema en este momento. De manera que si queremos agregarlas, solo necesitamos borrar el #. A este proceso se lo suele llamar descomentar.
Cómo utilizar APT localmente
Algunas veces se pueden llegar a tener muchos paquetes .deb, los que quisiera instalar utilizando APT para que las dependencias fueran resueltas automáticamente.
Para hacer esto, cree un directorio y coloque los .deb que quiera instalar en él. Por ejemplo:
# mkdir /root/debs
Usted puede modificar la lista de definiciones en el archivo de control de paquetes para su depósito con un archivo override. Dentro de este archivo se pueden definir opciones para descartar las que vienen por defecto en el paquete. Por ejemplo:
touch archivo
Dentro de este archivo se pueden definir opciones para descartar las que vienen por defecto en el paquete. Por ejemplo:
paquete prioridad sección
Paquete es el nombre del paquete o programa, la prioridad puede ser baja, media o alta y sección es la sección a donde pertenece. El nombre de archivo no importa, deberá pasarlo como argumento después para dbpkg-scanpackages. Si no desea escribir un archivo override entonces utilice /dev/null cuando ejecute dbpkg-scanpackages.
Continuando en el directorio /root se hace lo siguiente:
# dpkg-scanpackages debs archivo | gzip > debs/Packages.gz
En la línea anterior, archivo es el archivo de override, el comando genera un archivo debs/Packages.gz el cual contiene información acerca de los paquetes, la que es utilizada por APT. Para usar los paquetes, finalmente agregue:
deb file:/root debs/
Después de eso, utilice los comandos de APT como siempre. También podría generar un deposito de fuentes de paquetes. Para hacer eso, haga exactamente lo mismo, pero recuerde que necesita tener los archivos .orig.tar.gz, .dsc y .diff.gz en el directorio y cambie Sources.gz por Packages.gz. El programa utilizado también es diferente. Es el dpkg-scansources. El comando completo se vería así:
# dpkg-scansources debs | gzip > debs/Sources.gz
Observe que dpkg-scansources no necesita un archivo override. La línea de sources.list es:
deb-src file:/root debs/
Instalando paquetes
Finalmente, ¡el proceso que estaba esperando!. Con su archivo sources.list listo y su lista de paquetes disponibles al día, todo lo que necesita es ejecutar apt-get para tener el paquete que quiera instalado. Por ejemplo, puede ejecutar:
# apt-get install xchat
APT buscará en su base de datos para encontrar la versión más reciente del paquete y lo descargará del servidor correspondiente especificado en sources.list. Si este paquete necesitara otro para funcionar (como en este caso) APT resolverá las dependencias e instalará los paquetes necesarios. Observe este ejemplo:
# apt-get install nautilus Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: bonobo libmedusa0 libnautilus0 The following NEW packages will be installed: bonobo libmedusa0 libnautilus0 nautilus 0 packages upgraded, 4 newly installed, 0 to remove and 1 not upgraded. Need to get 8329kB of archives. After unpacking 17.2MB will be used. Do you want to continue? [Y/n]
El paquete nautilus necesita las librerías compartidas mencionadas, así pues APT las descargará del servidor. Si se especifican antes los nombres de esas librerías con el comando apt-get APT no pregunta, si desea continuar o no; supone automáticamente que se desean instalar esos paquetes.
Esto significa que APT sólo pregunta por confirmación cuando se van a instalar paquetes que no fueron especificados en la línea de comando.
Eliminando paquetes
Si ya no necesita utilizar cierto paquete, puede eliminarlo de su sistema utilizando APT. Para realizar esta tarea sólo escriba: apt-get remove paquete. por ejemplo:
# apt-get remove gnome-panel Reading Package Lists... Done Building Dependency Tree... Done The following packages will be REMOVED: gnome-applets gnome-panel gnome-panel-data gnome-session 0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded. Need to get 0B of archives. After unpacking 14.6MB will be freed. Do you want to continue? [Y/n]
Como se puede apreciar en el ejemplo anterior, APT se hace cargo de eliminar los paquetes dependientes del paquete eliminado. No hay manera de eliminar un paquete utilizando APT sin eliminar los paquetes que éste necesitaba.
Ejecutando apt-get como en el ejemplo causará que los paquetes sean eliminados, pero sus archivos de configuración, si existían, permanecerán intactos en el sistema. Para una eliminación completa del paquete, ejecute:
# apt-get --purge remove gnome-panel Reading Package Lists... Done Building Dependency Tree... Done The following packages will be REMOVED: gnome-applets* gnome-panel* gnome-panel-data* gnome-session* 0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded. Need to get 0B of archives. After unpacking 14.6MB will be freed. Do you want to continue? [Y/n]
Observe el "*" después de los nombres. Esto indica que los archivos de configuración de cada paquete serán eliminados también.
Actualizando paquetes
Las actualizaciones de los paquetes son un gran éxito de APT. Pueden realizarse con tan sólo un comando: apt-get upgrade. Puede utilizar esa opción para actualizar los paquetes de la distribución actual, o bien para actualizar a una nueva distribución, aunque el comando apt-get dist-upgrade es una mejor opción para esto.
Es muy útil utilizar este comando con la opción -u. Esta opción muestra la lista completa de paquetes que APT actualizará. Sin ella, se estaría actualizando a ciegas. APT descargará las versiones más recientes de cada paquete y las instalará de la manera más apropiada. Es muy importante ejecutar siempre apt-get update antes de probar esto. Observe este ejemplo:
# apt-get -u upgrade Reading Package Lists... Done Building Dependency Tree... Done The following packages have been kept back cpp gcc lilo The following packages will be upgraded adduser ae apt autoconf debhelper dpkg-dev esound esound-common ftp indent ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0 libesd0-dev libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev liborbit0 libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit procps psmisc 29 packages upgraded, 0 newly installed, 0 to remove and 3 not upgraded. Need to get 5055B/5055kB of archives. After unpacking 1161kB will be used. Do you want to continue? [Y/n]
El proceso es muy fácil. Note que en las primeras líneas apt-get menciona que algunos paquetes fueron conservados. Esto significa que hay versiones nuevas de estos paquetes pero no fueron actualizados por alguna razón. Algunas razones pueden ser dependencias fallidas (el paquete del cual depende no tiene una versión nueva para actualizar) o nuevas dependencias (el paquete ahora depende de nuevos paquetes que la versión anterior).
Descubriendo nombres de paquetes
Por ejemplo, supongamos que usted quiere revivir la gloria de la época dorada del Atari 2600. Quiere utilizar APT para instalar un emulador de Atari, y después bajar algunos juegos, puede hacer lo siguiente:
- apt-cache search atari
atari-fdisk-cross - Partition editor for Atari (running on non-Atari) circuslinux - The clowns are trying to pop balloons to score points! madbomber - A Kaboom! clone tcs - Character set translator. atari800 - Atari emulator for svgalib/X/curses stella - Atari 2600 Emulator for X windows xmess-x - X binaries for Multi-Emulator Super System
Hemos encontrado muchos paquetes relacionados con lo que estamos buscando. Para obtener mayor información de un paquete específico, hacemos lo siguiente:
# apt-cache show stella Package: stella Priority: extra Section: non-free/otherosfs Installed-Size: 830 Maintainer: Tom Lear <tom@trap.mtview.ca.us> Architecture: i386 version: 1.1-2 Depends: libc6 (>= 2.1), libstdc++2.10, xlib6g (>= 3.3.5-1) Filename: dists/potato/non-free/binary-i386/otherosfs/stella_1.1-2.deb Size: 483430 MD5sum: 11b3e86a41a60fa1c4b334dd96c1d4b5 Description: Atari 2600 Emulator for X windows Stella is a portable emulator of the old Atari 2600 video-game console written in C++. You can play most Atari 2600 games with it. The latest news, code and binaries for Stella can be found at: http://www4.ncsu.edu/~bwmott/2600
Alien: Conversor de paquetes deb, rpm, tgz y slp en linux.
Usando alien (que es un script en perl), podemos convertir por ejemplo paquetes de debian (debian, esware, etc ...) en rpm's (Red Hat, Conectiva, Mandrake, SuSE, ...), o paquetes rpm en tgz (muy sencillos de descomprimir), de una forma sencilla, rápida y muy cómoda.
Convertir un rpm (clara-0.9.8-6.i386.rpm) en un tgz (en este caso se convierte en clara-0.9.8.tgz).
$ alien -t clara-0.9.8-6.i386.rpm clara-0.9.8.tgz generated
Conversión del un deb en un rpm, conservando los scripts:
# alien -r -c xfce_3.8.11-1_i386.deb xfce-3.8.11-2.i386.rpm generated
Podemos comprobar el paquete usando el comando rpm:
$ rpm -qip xfce-3.8.11-2.i386.rpm
Como siempre podemos obtener más información sobre alien, usando el comando man alien o invocando el help, como podemos ver a continuación:
$ alien --help
Para convertir a o desde paquetes RPM es necesario tener instalado el gestor de RPM's (Red Hat Package Manager).
Y para convertir paquetes al formato Debian es necesario los paquetes dpkg, dpkg-dev y debmake tal y como se indica en la página web del alien.
instalar paquetes rpm
Es importante destacar que rpm es tanto el formato de empaquetado como el comando que sirve para instalarlo. Por lo que su uso es particularmente simple de recordar. Según aquellos que prefieren este sistema frente al deb, éste requiere de menos opciones o bien son más simples de entender en su lógica que los otros.
Para nosotros es solo cuestión de gustos, necesidades y costumbre. Cómo se usa?:
rpm -i paquete.rpm
Para instalar un paquete rpm
rpm -e paquete.rpm
Para desinstalar un paquete rpm
rpm -q paquete.rpm
Para consultar la version de un paquete instalado
rpm -ql paquete.rpm
Para listar los archivos instalados por un paquete
rpm -qa
Para listar todos los paquetes instalados en el sistema
Automatizando la instalación con urpmi
La herramiente urpmi es el elemento central de todo el conjunto urpmi. Esta herramienta permite la instalación de rpms conocidos y resuelve las dependecias para usted, basándose en las bases de datos de los paquetes. Es la herramienta natural de la actual distribución Mandriva (ex Mandrake).
La invocación simple de este comando es para instalar un paquete, esto se hace así:
# urpmi vim
Esto instalará el paquete vim y todos aquellos paquetes de cuales dependa.
urpmi también intenta ayudar si no se conoce el nombre exacto del paquete. Por ejemplo, si quiere instalar el sistema de preparación de documentos DocBook y no conoce que paquetes necesita, puede hacerse lo siguiente:
[root@localhost root]# urpmi docbook The following packages contain docbook: docbook-dtd31-sgml docbook-dtd412-xml koffice docbook-style-dsssl docbook-style-dsssl-doc docbook-style-xsl docbook-utils docbook-dtd41-sgml [root@localhost root]# urpmi docbook-dtd41-sgml To satisfy dependencies, the following packages are going to be installed (1 MB): libxml2-utils-2.4.16-2mdk.i586 docbook-dtd41-sgml-1.0-5mdk.noarch sgml-common-0.6.3-4mdk.noarch Is it OK? (Y/n)
Y, si aceptamos esto, le instalará los paquetes y sus dependencias.
urpme
El comando urpme es similar al comando urpmi, excepto que elimina los paquetes instalados. Éste también le preguntará eliminar todos aquellos paquetes que sean dependientes del paquete que se va a eliminar. Por ejemplo, para desintalar samba-common con el comando urpme samba-common da lo siguiente:
[root@localhost root]# urpme samba-common To satisfy dependencies, the following packages are going to be removed (14 MB): samba-common-2.2.3a-10mdk samba-2.2.3a-10mdk samba-client-2.2.3a-10mdk Is it OK? (Y/n)
urpmq
El comando urpmq le permite buscar paquetes. Ústed proporciona un término de búsqueda y urpmq intentará encontrar el nombre de los paquetes que contengan ese término. Se devolverán resultados de lista de páquetes sean tanto paquetes instalados como no. Así, por ejemplo, si quiere conocer que paquetes tienen relación con el kernel, puede utilizar el comando urpmq kernel, esto hará lo siguiente:
[root@localhost root]# urpmq kernel The following packages contain kernel: kernel-source kernel-headers kernel22 kernel-secure-2.4.18.6mdk kernel-doc-pdf kernel-doc-ps kernel-doc kernel-alert kernel22-smp fortune-kernelcookies kernel-2.4.18.6mdk kernel-doc-html kernel-enterprise-2.4.18.6mdk kernel-smp-2.4.18.6mdk
urpmf
El comando urpmf es una herramiente de búsqueda más avanzada que le permitirá buscar un archivo en todos los paquetes instalados o disponibles. Así, por ejemplo, si prueba de compilar un programa y el script de configuración se queja de no encontrar ncurses.h, puede hacer urpmf ncurses.h para encontrar que éste es parte del paquete libncurses5-devel (entonces después usted puede escribir urpmi libncurses5-devel para instalarlo si lo quiere).
[root@localhost root]# urpmf ncurses.h libncurses5-devel:/usr/include/ncurses.h libncurses5-devel:/usr/include/ncurses/ncurses.h php-devel:/usr/src/php-devel/extensions/ncurses/php_ncurses.h
urpmi.addmedia
Este comando le permite añadir nuevas fuentes de rpms a sus bases de datos urpmi.
Si la fuente és un recurso remoto, éste ha de tener los archivos hdblist adecuados (los mirrors de Mandriva tienen estos archivos, otros puede que no). Ústed puede usar este comando para añadir fuentes que están ubicadas en un CD o disco duro. Una lista de fuentes de Mandriva está disponible en: http://easyurpmi.zarb.org/index.php?language=es junto con un práctico programa que nos prepara el comando para agregar fuentes con urpmi.addmedia. De todas maneras, miremos como hacerlo nosotros mismos.
Como ejemplo se puede añadir una fuente que contiene las actualizaciones de seguridad de Mandrake 8.2, haciéndose de esta manera:
[root@localhost root]# urpmi.addmedia updates \ ftp://ftp.sunet.se/pub/Linux/distributions/mandrake/updates/8.2/RPMS \ with ../base/hdlist.cz added medium updates retrieving description file of "updates"... ...retrieving done retrieving source hdlist (or synthesis) of "updates"... % Total % Received % Xferd Average Speed Time Curr. Dload Upload Total Current Left Speed 100 402k 100 402k 0 0 3653 0 0:01:52 0:01:52 0:00:00 4833 ...retrieving done examining whole urpmi database
Una vez la fuente ha sido añadida, se puede comprobar e instalar actualizaciones de seguridad con urpmi.update -a seguido de urpmi --auto-select.
Ahora, a lo mejor, ústed ha bajado un gran número de interesantes rpms y decide ponerlos en un CD. Por lo que deberemos agregar esa fuente avisándole que no estará disponible hasta que incertemos el CD. Se puede hacer esto con el siguiente comando:
[root@localhost root]# urpmi.addmedia mycd removable://mnt/cdrom/ added medium mycd building hdlist [/var/cache/urpmi/partial/hdlist.mycd.cz]
urpmi.removemedia
Este comando elimina una fuente de paquestes de la base de datos. Por ejemplo,
[root@localhost root]# urpmi.removemedia updates
eliminará las fuentes de actualización que hemos añadido anteriormente.
urpmi.update
El comando urpmi.update visita todas las fuentes de rpms que han sido definidas previamente y actualiza la lista de paquetes si fuera necesario. Por ejemplo, si añadió una fuente de seguridad hace un par de meses y nuevas actualizacions han aparecido, ústed necesitará hacer
[root@localhost root]# urpmi.update -a
para actualizar las bases de datos. Ústed puede instalar las actualizacions con
[root@localhost root]# urpmi --auto-select
O de una manera más atrevida, ambas cosas de una vez.
[root@localhost root]# urpmi.update --auto-select
Kernel
El kernel o núcleo de linux se podria definir como el corazón del sistema operativo. Es el encargado de que el software y el hardware puedan trabajar juntos.
Las funciones mas importantes del mismo, aunque no las únicas, son:
- Administrar la memoria, para todos los programas en ejecución.
- Administrar del tiempo de procesador, para que estos programas en ejecucion lo utilicen.
- Es el encargado de que podamos acceder a los perifericos y dispositivos de la computadora de una manera cómoda.
Existen dos versiones del kernel de Linux:
- Versión de producción: Ésta es la versión estable. Es el resultado final de las versiones de desarrollo o experimentales.
- Cuando el equipo de desarrollo del kernel experimental, decide que ha conseguido un kernel estable y con la suficiente calidad, se lanza una nueva versión de produción (estable). Esta versión es la que se debería utilizar para un uso normal del sistema, ya que es la considerada libre de fallas en el momento de su lanzamiento.
- Versión de desarrollo: Esta versión es experimental y es la que utilizan los desarrolladores para programar, comprobar y verificar nuevas características, correcciones, etc. Estos núcleos suelen ser inestables y no se deberían usar, a no ser que sepas lo que hacés.
Como interpretar los numeros de las versiones:
- Las versiones del kernel se numeran con 3 conjuntos de dígitos, de la siguiente forma: XX.YY.ZZ[.zz]
- XX: Indica la serie principal del kernel. Hasta el momento solo existen la 1 y 2. Este número cambia cuando la manera de funcionamiento del kernel ha sufrido una transformación muy importante. Por eso es que a cambiado tan poco.
- YY: Indica si la versión es de desarrollo o de producción. Un número impar, significa que es de desarrollo, uno par, que es de producción.
- ZZ: Indica nuevas revisiones dentro de una versión, en las que lo único que se ha modificado, son fallas de programación (bugs).
- zz: Es un número que puede aparecer o no. Se usa para cuando se realizan correcciones mínimas o muy puntuales que no merezcan (a criterio de Linus Torvalds) un cambio del número ZZ.
Unos ejemplos para entenderlo mejor:
- kernel 2.4.0: Kernel de la serie 2 (XX=2), versión de produccion 4 (YY=4 par), primera versión de 2.4 (ZZ=0)
- kernel 2.4.31: Kernel de la serie 2, versión 4, en el que se han corregido errores de programación presentes en las versiones anteriores al número 31 (ZZ=31)
- kernel 2.6.13.2: Kernel de la serie 2 (XX=2), versión de producción 6 (YY=6 par), corrección de errores número 13 (ZZ=13), sub versión de corrección 2 (zz=2). Y la última estable a la hora de escribir esto!
- kernell 2.7.3:Kernel de la serie 2, versión de desarrollo 7, corrección de errores 3.
Compilación del kernel
Compilar el kernel es una de las primeras acciones que todo administrador debería hacer justo después de haber instalado el sistema y de haber creado un usuario.
Aunque a primera vista pueda parecer algo complicado es un procedimiento muy sencillo y que nos permitirá optimizar el sistema eliminando componentes no usados y acceder a servicios hardware y software personalizados.
Requerimientos del sistema para compilar el KERNEL
Lo primero es asegurarnos de que nuestro sistema está preparado para compilar el kernel.
Necesitamos las fuentes del kernel (un archivo de más de 7 Mb que podemos encontrar en http://kernel.org) descomprimidas en el directorio /usr/src/linux.
Necesitaremos alrededor de 50 Mb libres en el disco para que pueda hacerse la compilación.
Una vez conseguido y desempaquetado el kernel pasaremos a leer el archivo README, donde se explica con detenimiento las instrucciones para que todo nos salga bien.
Otros paquetes software que necesitaremos seran: g++ g++-3.3 gcc gcc-3.3 libstdc++5-3.3-dev y make (para la compilación), bin86-utils (para la construcción del kernel), libncurses5 y libncurses5-devel (solo si queremos menús para la selección de opciones), tcl/tk (solo si queremos ver los menús en una ventana X), lilo (si queremos usarlo para arrancar el kernel).
Para ubuntu, se necesita instalar build-essential con el siguente comando:
sudo apt-get install build-essential
Pasos previos
Primero debemos descomprimir el archivo linux-2.6.13.2.tar.bz2 de la siguiente manera:
# tar -xjvpf linux-2.6.13.2.tar.bz2 -C /usr/src/
Luego realizar un enlace simbólico dentro del directorio /usr/src/ llamado linux de la siguiente manera:
# ln -s linux linux-2.6.13.2
Una vez que sabemos que nuestro sistema está preparado para poder compilar el kernel de Linux podemos utilizar la configuración actual del kernel que se encuentra ejecutándose, de esta manera vamos a activar algunas funciones nuevas o ajustar mejor alguna ya activa como por ejemplo el tipo de procesador, ya que si es un kernel estándard lo más seguro es que esté configurado para un procesador 386 mientras, que quizás, nuestro procesador sea un Pentium4, en ese caso estamos desperdiciando potencia de procesamiento. Para ello debemos copiar el archivo .conf a nuetro nuevo kernel. Los pasos a seguir son los siguientes.
# cd /usr/src/linux-2.6.10 # cp .config /usr/src/linux/.config
De la siguiente manera convertimos la vieja configuración a las nuevas características provistas por el nuevo kernel manteniendo la configuración del sistema actual.
# make oldconfig
Luego de este comando es posible que debamos contestar alguna preguntas para activar las nuevas funciones. Lo aconsejable es dejarlas como están y cuando se recorra el menú de configuración se actuvarán si es necesario.
Tipos de compilación
Lo primero es seleccionar las opciones que queremos incluir en el kernel, esto se hace desde /usr/src/linux con uno de los siguientes comandos:
make config
Pregunta una a una, todas las opciones a incluir/excluir del kernel nuevo.
make menuconfig
Ordena todas las preguntas en intuitivos menús que facilitan la comprensión y edicion de las opciones (necesita tener ncurses instalado).
make xconfig
Similar al anterior pero ejecutado desde un terminal X. Crea una ventana con botones desplegables, ordenando las opciones de una manera todavía más intuitiva (necesita X y tcl/tk).
Las opciones a elegir dependeran de cada máquina y de las funciones que vaya a realizar, así como del hardware instalado. Pulsando ? en cada opción tenemos una breve explicación de lo que hace, al final suele haber una recomendacion para su uso, si esta ayuda no es suficiente las fuenets del kernel llevan abundante informacion en el directorio Documentation/
Para kernels de la familia 2.4.X
Una vez seleccionadas las opciones hay que realizar los todos estos comandos:
make dep
Crea los enlaces necesarios para que las opciones elegidas formen parte del kernel final.
make clean
Elimina restos de compilaciones anteriores que podrían interferir en el proceso.
En este momento el kernel ya esta listo para empezar a compilarse, lo cual se hace con uno de los siguientes comandos:
make zImage
El comando estándar. Crea un kernel y lo deja en el directorio arch/XXX/boot/ (donde XXX es la arquitectura de la máquina local, i386 para las PC).
make zdisk
Igual al anterior pero coloca el kernel en un diskette para usarlo como disco de arranque.
make zlilo
Crea el kernel y lo instala usando el lilo. Esta opción no es recomendable a menos que tengas muy claro lo que estás haciendo. Es mejor dejarla para cuando tengamos más experiencia.
Nota: si el kernel es demasiado grande podemos reducir su tamaño colocando una b delante los targets de make, es decir, las ordenes quedarian: make bzImage, make bzdisk o make bzlilo.
Opcionalmente, si hemos seleccionado el uso de módulos, deberemos compilarlos con la orden make modules e instalarlos con la orden make modules_install
Un fallo muy común es el producido por módulos mal instalados, repetidos o no utilizados. Para evitarlo asegúrese de eliminar (mejor mover a otro sitio) los módulos antiguos que se encuentran en el directorio /lib/modules.
También es conveniente hacer depmod -a después de haber instalado los nuevos módulos.
Para kernels de la familia 2.6.X
Para los nuevos kernels la órden de compilación se resume a:
make install
NOTA: También sirve utilizar los pasos para kernels 2.4.X, pero es mejor en un paso ;)
Pasos finales
Si hemos hecho make zdisk o make zlilo y todo ha ido bien, solo nos queda reiniciar la máquina para usar el nuevo kernel.
Si hemos hecho make zImage (la opción más recomendable), nos moveremos al directorio arch/i386/boot/ y copiaremos el archivo zImage (o bzImage, según el caso) al directorio donde tengamos los kernels (generalmente /boot o /, aunque esto es totalmente configurable).
[xtech] [/]$ ls /boot total 934 lrwxrwxrwx 1 root root 17 Dec 28 21:33 System.map -> System.map-2.0.32 -rw-r--r-- 1 root root 104597 Nov 18 1997 System.map-2.0.32 -rw-r--r-- 1 root root 512 Dec 28 21:48 boot.0300 -rw-r--r-- 1 root root 4536 Oct 19 1997 boot.b -rw-r--r-- 1 root root 300 Oct 19 1997 chain.b -rw------- 1 root root 15872 Feb 18 03:12 map lrwxrwxrwx 1 root root 18 Dec 28 21:33 module-info -> module-info-2.0.32 -rw-r--r-- 1 root root 11773 Nov 18 1997 module-info-2.0.32 -rw-r--r-- 1 root root 308 Oct 19 1997 os2_d.b -rw-r--r-- 1 root root 403276 Jan 30 11:55 vmlinuz-2.2.1 -rw-r--r-- 1 root root 402114 Feb 6 14:54 vmlinuz-2.2.2
Último paso
Es editar el archivo /etc/lilo.conf para asegurarnos de que apunta al nuevo kernel, en nuestro caso:
[xtech] [/]$ cat /etc/lilo.conf
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz-2.2.2
label=linux
root=/dev/hda3
read-only
image=/boot/vmlinuz-2.2.1
label=2.2.1
root=/dev/hda3
read-only
Nota: Fíjense que siempre es importante guardar una copia del anterior kernel, por si algo fallara, poder arrancar con él y ejecutar el comando /sbin/lilo para guardar los cambios, lilo informará de los cambios mas o menos asi:
[root] [/]$ /sbin/lilo Added linux * Added 2.2.1
Si lilo se queja asegúrese que los directorios y los nombres de archivo que aparecen en lilo.conf son correctos.
Solo nos queda reiniciar con la orden reboot para arrancar con el nuevo kernel.
Recomendaciones finales
Éstas son solo instrucciones genéricas, no tomen al pie de la letra los nombres de archivo, ni directorios, pues pueden variar en cada caso. Este es un proceso crítico para el sistema y hay que saber bien lo que se está haciendo, una lectura obligada es el Kernel-como del proyecto LuCAS.
Si algo fallara, algunos consejos, revise que tenga todo lo necesario, que el kernel esté bien descomprimido en /usr/src/linux/, a veces es necesario el comando make mrproper (limpieza a fondo) justo después de descomprimirlo.
Procure mantenerse actualizado en cuanto a versiones del kernel.
En el archivo Documentation/Changes hay una lista de los requerimientos software de cada kernel, asegúrese de cumplirlos.
Si aún así, sigue fallando podría ser que las fuentes estuviesen corrompidas o que haya encontrado un nuevo bug... :-)
Otras formas de actualizar el kernel
Seguramente todos estos pasos no serán necesarios en muchos casos, puesto que este trabajo de recompilación suele ser realizado por parte de los realizadores de las distribuciones en si mismas.
Por eso, es una buena idea, suscribirse a la/las listas de la distribución que usamos y preguntar antes de ponernos a recompilar si ya hay un kernel compilado con el soporte o funcionalidad que nosotros queremos. Y de dónde descargarla.
Este proceso de compilación es bueno conocer, pero se trata de un procedimiento crítico, por lo que deberíamos dejarlo siempre como última opción. La mayoría de los casos puede resolverse con kernels precompilados y empaquetados.


