Instalación de Programas en Linux
De Zona Tux
Introducción
Uno de los principales problemas que encuentran los nuevos usuarios de Linux a la hora de usar su sistema es cómo instalar programas. Esto debido a que la mayoría de los que hemos usado el “otro" sistema operativo nos acostumbramos a instalar programas mediante el sencillo procedimiento conocido como “doble clik, aceptar, aceptar, aceptar, terminar". De ahí el desconcierto de los usuarios nóveles de Linux al intentar instalar programas: simplemente no entienden qué significa todo eso de ./configure, make, RPM, DEB, apt y tantos otros términos desconocidos.
Este documento pretende dar un poco de luz a esos usuarios. Intentaré no usar términos muy técnicos, a fin de mantener el texto entendible para cualquier persona.
Legal
Copyright 2004-2005 Christian González G. (cgonz@linuxmail.org), Grupo de Usuarios de Linux en la Universidad de la Frontera (GRULUF). Se concede permiso para citar el contenido de este documento por cualquier medio, siempre que se mantenga esta nota de copyright.
¿Qué es un programa?
NOTA: en esta sección no pretendo dar una cátedra sobre programación, sino simplemente aclarar algunos conceptos básicos. Por lo tanto, muchas explicaciones pueden contener algunas inexactitudes con el fin de mantener la simplicidad. Así que, programadores y hackers en general: ¡guarden sus lanzallamas! :-)
Un programa es simplemente una secuencia de instrucciones que el computador (u “ordenador" para nuestros amigos españoles) puede interpretar y ejecutar, a fin de conseguir un resultado.
Para construir un programa, primero se deben escribir estas instrucciones en un lenguaje de programación, es decir, un grupo de instrucciones en lenguaje semi-humano que pueden ser traducidas al lenguaje del computador. Existen muchos lenguajes (C, C++, Perl, Python, PHP, Pascal, Lisp y un laaaaargo etcétera), cada uno con sus propias características. Pero todos tienen en común el que necesitan ser traducidos al lenguaje del computador para poder ejecutarse. Esta traducción se conoce como compilación [1]. La serie de instrucciones escritas en algún lenguaje de programación se conoce como código fuente, y el programa traducido al lenguaje del computador se llama código objeto, ejecutable o binario.
Linux es un sistema de código abierto [2], lo que significa que cualquiera puede ver (y modificar) su código fuente. Y muchos de los programas que existen hoy en día para Linux también pueden ser clasificados como open source. Por lo tanto, no es raro que muchos programas sean distribuidos mediante su código fuente, por lo que es necesario compilarlos antes de poder usarlos.
¿Dónde se instalan los programas en Linux?
Muchos nuevos usuarios de Linux están acostumbrados a la “manera Windows" para instalar programas; es decir, todos los archivos pertenecientes a ese programa se instalan en un directorio (por ejemplo, C:/Archivos de programa/Mi programa). Por eso, cuando tienen que instalar un programa en Linux se sienten desorientados, y se preguntan en qu´e directorio estarán los archivos instalados.
Es más; al ver la estructura de directorios de un sistema Linux típico (con todos esos /bin, /usr, /var, /home, etc.), uno fácilmente podría confundirse. Sin embargo, todo cobra sentido al entender la "filosofía Unix". Los programas no se instalan en un solo directorio, sino que almacenan sus archivos en distintos directorios, según su función. Así, los archivos ejecutables (o binarios) se almacenan en el directorio /bin o en /usr/bin; los archivos de configuración en /etc; la documentación en /usr/share/doc; los manuales en /usr/man o /usr/local/man; cada usuario tiene su propio directorio dentro de /home, etc.
La ventaja de este método es que no necesitas saber en qué parte se encuentra un programa determinado; sólo necesitas saber cuál es el nombre del ejecutable.
Así por ejemplo, puedes simplemente ejecutar el comando reboot (que sirve para reiniciar) y el sistema automáticamente buscará ese ejecutable en /bin, en /usr/bin o en donde corresponda. De la misma manera, basta con escribir man reboot para que el sistema despliege la página de manual de reboot, sin que tengas que especificar la ruta al manual.
Por lo tanto, en general no importa saber en qué parte específica del sistema de archivos está instalado un programa. Claro que hay ocasiones en que vas a necesitar saber en qué parte se encuentra un archivo específico, pero hay muchos mecanismos para eso.
Instalar, parte de la administración
En este punto quiero recordarte que en Linux existe algo denominado privilegios. Y en general, para instalar programas necesitarás privilegios de administrador, lo que significa que debes tener acceso al password del usuario root (administrador) del sistema. Si tú mismo instalaste Linux en tu computador, no deberías tener problemas en tener acceso a este password (a menos que lo hayas olvidado, pero ese ya es otro tema; sólo puedo recomendarte comer muchas uvas pasas para tener buena memoria), pero si estás intentando hacer esto en un computador que no es el tuyo, es probable que no puedas hacerlo.
Hay varios métodos para trabajar como usuario root dentro de Linux:
- Lo más lógico: ingresar como usuario root (ya sea en modo texto o mediante un administrador de acceso en modo gráfico).
- Si ya ingresaste como un usuario “normal" (sin privilegios de root), puedes convertirte en root mediante el comando “su". Lo puedes ejecutar en un emulador de terminal de tu escritorio, o en una terminal de texto [3]. Obviamente, necesitarás saber el password del usuario root.
Así que ya sabes: para instalar programas en Linux, necesitas tener privilegios de root. Supongo que entenderás tan bien como yo que ésta es una de las precauciones de seguridad de Linux.
Ahora que ya estás listo, vamos al grano: ¿ Cómo se instalan los programas en Linux ?
Código fuente
Supongamos que te has encontrado la web del programa SuperPoetaVirtual versión 8.0, que sirve para que cualquiera pueda escribir poesía a la altura de Pablo Neruda [4]. Vas a la sección Downloads y te encuentras con que debes descargar un archivo llamado SuperPoetaVirtual-8.0-11.tar.gz. En las instrucciones de instalación lees que debes compilarlo para poder usarlo.
Eso, estimado linuxero, es un programa distribuido mediante su código fuente. Por lo general es un conjunto de archivos empaquetados y comprimidos. Sus nombres suelen terminar con las letras .tar.gz o también .tar.bz2. Para poder usarlos, tienes que compilarlos (traducirlos al lenguaje del computador).
Ventajas de la instalación desde código fuente
- Puede ser usado en cualquier sistema que cuente con el compilador adecuado.
- Todos los programas open source pueden ser obtenidos mediante código fuente. Esto es una exigencia de las principales licencias del código abierto (como la GPL).
- Pueden ser modificados. Si conoces el lenguaje de programación en el que está escrito el programa, puedes modificarlo a tu antojo.
- Pueden ser optimizados. Durante el proceso de compilaci´on, puedes optimizar el programa, a fin de que ocupe mejor los recursos de tu computador, lo que implica un aumento en la velocidad, rendimiento, etc [5].
Desventajas de la instalación desde código fuente
- Necesitas un compilador del lenguaje en que fue escrito el programa. Si bien la mayoría de las distribuciones de Linux incluyen una amplia variedad de compiladores, no siempre están instalados en el sistema particular que estás usando.
- El proceso de instalación es más lento. En programas muy grandes (por ejemplo, OpenOffice.org o Xorg), el proceso de compilación fácilmente puede durar varias horas, e incluso días.
- No hay un sistema de administración centralizado, lo que implica dificultad para actualizar, eliminar, etc. Si quieres desinstalar un programa, debes eliminar manualmente los archivos instalados por ese programa, uno por uno [6].
Procedimiento para instalar un programa desde el código fuente
- Descomprimir el archivo descargado (en caso de que venga comprimido, obviamente). Lo más común es usar el comando tar xvzf archivo.tar.gz para archivos .tar.gz, o el comando tar xvjf archivo.tar.bz2 para los .tar.bz2. También puedes usar herramientas gráficas, como ark (KDE) o file-roller (Gnome).
- Leer el archivo README y/o el archivo INSTALL. Aquí se encuentran las instrucciones para instalar y usar el programa. Por lo general, el archivo indica ejecutar las siguientes tres instrucciones:
- ./configure
- make
- make install
- Tras esto, ya deberías poder usar el programa, simplemente escribiendo el nombre del ejecutable o de la manera que indique la documentación.
Sistemas de paquetes
Siguiendo con nuestro ejemplo del programa SuperPoetaVirtual, supongamos que el proceso de compilación dura aproximadamente 30 minutos en un PC relativamente rápido. Por eso sus creadores quieren hacerle la vida fácil al usuario y entregarle el programa ya compilado y listo para instalar. Para eso pueden usar los sistemas de paquetes.
Un paquete es simplemente el programa ya compilado y empaquetado (muchas veces comprimido comprimido) en un sólo archivo, conteniendo las instrucciones necesarias para su instalación. Los sistemas de paquetes fueron un gran avance en la administración de sistemas Linux, ya que presentan varias ventajas:
- Permiten centralizar la administración de programas. Puedes tener una base de datos que guarde información acerca de los programas instalados, los archivos correspondientes a cada programa, la fecha en que fueron instalados, el espacio que ocupan en el disco duro, etc.
- Se pueden distribuir programascompilados y listos para su instalación. Esto implica un importante ahorro en tiempo y esfuerzo para el usuario.
- No necesitas tener un compilador para instalar un programa.
- Facilitan la administración del sistema. Tareas como la actualización, desinstalación y consultas acerca del programa ahora pueden ser realizadas con un simple comando.
A continuación se explica el funcionamiento de los sistemas de paquetes más usados dentro de Linux.
Debian Package (dpkg)
Este sistema de paquetes fue creado por Ian Jackson en 1993, y actualmente es usado por la distribucin Debian. Los archivos empaquetados con este sistema tienen la extensión .deb.
A continuación algunas instrucciones básicas:
dpkg help : Muestra las opciones del programa dpkg.
dpkg --contents paquete.deb : Muestra los archivos que contiene el paquete.
dpkg --info paquete.deb : Muestra algunos datos del paquete.
dpkg --install paquete.deb : Instala el paquete especificado.
dpkg --listfiles programa : Lista los archivos de un programa ya instalado.
dpkg --remove programa : Desinstala un programa sin los archivos de configuración.
dpkg --purge programa : Desinstala un programa y sus archivos de configuración.
Red Hat Package Manager (rpm)
Este sistema fue creado por Red Hat y actualmente es usado por muchas distribuciones (Red Hat, Fedora, Mandrake, SuSE, Conectiva, etc.). Sus archivos terminan con la extensión .rpm.
A continuación algunas instrucciones básicas:
rpm --help : Muestra una breve ayuda acerca del sistema rpm.
rpm -ivh paquete.rpm : Instala un paquete.
rpm -Uvh paquete.rpm : Actualiza un programa ya instalado. Si no estaba instalado antes, entonces lo instala. Es la forma recomendada de instalar un rpm.
rpm -Fvh paquete.rpm : Actualiza un programa ya instalado. Si no estaba instalado antes, entonces no hace nada.
rpm -e programa : Desinstala un programa. Nótese que no es necesario indicar la versión del programa.
rpm -qi programa : Muestra informaci´on sobre un programa instalado.
rpm -ql programa : Lista los archivos pertenecientes a un paquete.
rpm -ql programa | grep bin : Muestra los archivos ejecutables pertenecientes a un programa.
rpm -qf /ruta/a/un/archivo : Muestra el nombre del paquete dueño de un archivo.
ebuild
El Infierno de las dependencias
Todo esto de los sistemas de paquetes suena muy bien, pero hay algunos inconvenientes. Supongamos, por ejemplo, que nuestro programa SuperPoetaVirtual utiliza para su funcionamiento una biblioteca [7] llamada libversos. Supongamos también que hemos descargado la versión RPM de SuperPoetaVirtual, pero no hemos instalado libversos. Al intentar instalar SuperPoetaVirtual con el comando rpm -Uvh SuperPoetaVirtual-8.0-11.rpm, el sistema se negará a hacerlo, entregándonos un mensaje de error de “dependencias no resueltas".
Supongamos que después de mucho investigar, alguien nos dice que necesitamos instalar primero el paquete libversos-0.95-2.rpm, ya que SuperPoetaVirtual depende de esta biblioteca para funcionar. Lo descargamos, pero el sistema ahora alega que libversos necesita el paquete poetax-0.53 para funcionar, el cual no está instalado. Y así sucesivamente...
¿ Entiendes ahora por qué algunos hablan del "Infierno de las dependencias" ?
Puede ser muy tedioso satisfacer todas las dependencias manualmente. Es posible instalar a la fuerza (sin satisfacer las dependencias), pero los resultados pueden ser impredecibles. Tal vez simplemente no te funcione alguna de las características del programa, o tal vez tu sistema se niegue a arrancar la próxima vez que reinicies.
Para solucionar este problema se han creado algunas herramientas que se encargan de instalar un programa y todas sus dependencias. A continuación se describen las más famosas.
Advanced Package Manager (apt)
Este sistema, muy famoso entre los usuarios de Debian, funciona hoy también en RedHat, Fedora y otras distribuciones. Para instalar un paquete y sus dependencias, apt busca los paquetes necesarios en repositorios, que pueden ser desde un CD hasta un servidor en Internet. Los repositorios se indican en el archivo /etc/apt/sources.list [8]. apt se encarga de descargar e instalar todo lo necesario, mediante simples instrucciones escritas por el usuario.
apt-get update : Actualiza la lista de paquetes que está en los repositorios. Es necesario ejecutar este comando periódicamente antes de hacer cualquier otra operación con apt.
apt-get install paquete : Instala un paquete y sus dependencias.
apt-get upgrade : Actualiza los programas instalados en tu PC a la última versión disponible en los repositorios.
apt-cache search palabra clave : Busca en la lista de paquetes (y en sus descripciones) los que correspondan a la palabra clave que le hemos indicado. Muy útil para buscar programas.
apt-get dist-upgrade : Actualiza la distribución completa.
apt-get remove paquete : Desinstala un paquete.
apt-get autoremove : Elimina cualquier paquete que no sea necesitado despues de una desinstalación.
Yellow dog Updater Modified (yum)
Este sistema fue creado por la distribución Yellow dog. Es actualmente el sistema oficial de Fedora. Al igual que apt, usa repositorios para buscar los paquetes a instalar. La lista de repositorios se indican en el archivo /etc/yum.conf.
yum install paquete : Instala un paquete y sus dependencias.
yum search paquete : Busca un paquete en la lista de paquetes disponibles.
yum update : Actualiza los programas instalados a la última versión disponible en los repositorios.
yum upgrade : Actualiza la distribución completa.
yum remove programa : Elimina un programa y todos los que dependen de él.
Red Hat Network
urpmi
Este sistema fue creado para la distribución Mandriva (anteriormente Mandrake) y es el sistema de paquetes oficial de esta distribución. También usa el concepto de repositorios, e inclusive los CDs de instalación son tratados como un repositorio más (quedan configurados al concluir la instalación del sistema).
urpmi.update -a : Actualiza la información de los paquetes disponibles en los repositorios que tengamos configurados.
urpmi paquete : Instala un paquete y sus dependencias.
urmpq palabraclave : Busca en la lista de paquetes (y en sus descripciones) los que correspondan a la palabra clave que le hemos indicado. Muy útil para buscar programas.
urpmi --auto-select : Instala la última versión disponible de los paquetes que tengamos instalados en el sistema.
urpme paquete : Elimina el paquete seleccionado y todos los paquetes que dependan de él.
urpmi.addmedia : Se utiliza para agregar repositorios.
urpmi.removemedia : Se utilizan para quitar repositorios.
pacman
emerge
yast
Herramientas gráficas
Muchas de las herramientas comentadas anteriormente poseen interfaces gráficas. Por ejemplo, synaptic es un excelente front-end para la herramienta apt. Sin embargo, como su funcionamiento es muy intuitivo, no las vamos a comentar aquí. Vas a tener que probarlas tú mismo.
Otros métodos de instalación
Hoy en día, muchos programas tienen sus propios sistemas de instalación (por ejemplo, Mozilla Firefox, aMSN, algunos paquetes de Quake 2 y 3, etc.). En ese caso sólo tienes que leer la documentación que acompaña al programa.
Recomendaciónes finales
Ya que has tenido la paciencia de llegar hasta aquí, permíteme premiarte con unos cuantos consejos finales.
- Usa siempre el sistema de paquetes que te ofrezca tu distribución de Linux. Así te evitarás muuuuchos problemas y podrás hacer uso de todas las ventajas que te ofrece tu distribución (actualizaciones automáticas, rápida corrección de errores y uso de los parches apropiados, etc.).
- Evita instalar desde código fuente. De lo contrario corres el riesgo de terminar con un sistema Linux desordenado, en el que no sepas ni siquiera qué programas has instalado.
- Si quieres usar un programa y no encuentras un paquete apropiado para tu distribución, puedes crear el tuyo. No es tan difícil como parece a primera vista. Busca información acerca de los programas alien y checkinstall, que te ayudarán en esta tarea.
- Si necesitas opciones especiales de compilación para algún programa, usa los paquetes de código fuente. Por ejemplo, los archivos .src.rpm contienen el código fuente de los programas empaquetados con RPM. Así puedes modificar lo que estimes necesario y luego reconstruir el paquete rpm con un simple comando.
Conclusiones
Hoy en día, la dificultad de instalar programas en Linux ha disminuido mucho. De hecho, muchos linuxeros encuentran que la forma de administrar programas del “otro" sistema operativo es obsoleta y tendiente a graves errores.
Los sistemas de paquetes sobre Linux son robustos y fáciles de usar. Por ello, Linux está logrando ser una plataforma al alcance de los usuarios “normales", pero sin dejar de ser un sistema sólido.
Así que ya no tienes la excusa de que no usas Linux porque “es muy difícil". Sólo tienes que dedicarle algo de tiempo a aprender su manejo... y te aseguro que no te arrepentirás.
Enlaces de interés
Traducción al español de la FAQ de Fedora
Guía de Ubuntu en español
FAQ de Linux en español
Buscador de RPMs
Buscador de RPMs
Agradecimientos
Al Centro de Modelación y Computación Científica (CMCC) de la Universidad de la Frontera, en especial a Daniel Escobar, por proveernos un espacio donde alojar la web del GRULUF.
Observaciones
- También existen los llamados lenguajes interpretados, en los que esta traducción se realiza a medida que el programa se ejecuta. Pero para los propósitos de este documento, no se hará diferencia entre ambos tipos de lenguaje.
- En inglés, open source.
- Si iniciaste en modo gráfico, puedes cambiar a una terminal mediante la combinación Ctrl+Alt+F1. Luego puedes volver al ambiente gráfico con las teclas Ctrl+Alt+F7.
- Realmente espero que nunca llegue a escribirse un programa así. ¿ Te imaginas el tener que leer este documento en verso ?
- Muchos usuarios argumentan que la única forma de usar al máximo los recursos de tu computador es compilar los programas con todas las optimizaciones que puedas. Sin embargo, expertos opinan que el aumento en el rendimiento de las aplicaciones es pequeño en la mayoría de los casos. Y por lo general, las aplicaciones que pueden obtener aumentos significativos de rendimiento al ser compiladas (como el kernel o la glibc), ya vienen optimizadas “de fábrica" para distintas arquitecturas.
- Algunos programas en código fuente incluyen un script llamado “make uninstall", que se encarga de borrar todos los archivos instalados por ese programa. Pero lamentablemente, la mayoría de los programas no incluyen este script.
- Sí, ya sé que en general se les suele llamar librerías, pero la traducción correcta del inglés “library" es biblioteca (en inglés, librería se dice “bookstore").
- En las últimas versiones de apt (por ejemplo, en la que está disponible para Fedora Core 3), los repositorios se indican de manera distinta. Lee la documentación de apt para más información.
