Indice






















Introduccion
En esta clase se toco el tema referente a instalacion de programas. Los programas en Linux generalmente contienen varios archivos, ya sean de configuracion, documentacion, librerias, etc. Por esta razon, a los programas a instalar se les llama tambien 'paquetes'.
El termino paquete abarca el aspecto de que un programa contiene varios archivos y los necesita para su funcionamiento normal.
Veremos las dos formas mas comunes de instalar un paquete, usando un archivo con extencion rpm y usando un archivo con extencion tar.gz

Ventajas principales de RPM
  • Contenido de informacion del programa dentro del mismo RPM
  • Base de datos con todos los programas instalados
  • Sistema dependencias entre programas
  • Capacidad de consultas podedoras a la BD o archivos RPM
  • Facil compilacion de un archivo de funte a uno binario












Instalacion RPM
RPM significa: Redhat Package Management.
El archivo .rpm es un archivo de tipo binario y comprimido. Es un formato nuevo definido en la definicion de rpm.
Existen 3 tipos de archivos RPM y se diferencian por su contenido. Estos son:
  1. RPM con archivos binarios (executables/compilados) dependientes de plataforma. Estos archivos teminan en: .PLATAFORMA.rpm
  2. RPM con archivos de codigo fuente. Estos archivos teminan en: .src.rpm
Para los archivos RPM binarios, estas con las plataformas:
  • i386
    • i586 (Optimizado para Pentium Clasic y MMX)
    • i686 (optimizado para PentiumII y III)
  • alpha
  • sparc
  • mips
  • noarch
  • ...
Existe un tipo binario especial de RPM que no depende de ninguna plataforma y este es: noarch
La plataforma 'noarch' significa que se puede instalar en cualquier plataforma. Los demas archivos binarios RPM solo se pueden instalar en la plataforma para los cuales fueron creados.
Por ejemplo, si un archivo temina en .i386.rpm, solo se puede instalacion en un procesador Intel compatible.

Creacion de RPM
Los archivos RPM se crean siempre desde un .src.rpm que contiene el codigo fuente del programa a instalar. Luego, se compila este .src.rpm y se genera el RPM binario para la plataforma en la cual se compilo. Por ejemplo, si compilamos un .src.rpm en una Pentium, se creara un archivo .i386.rpm

Syntaxis de los nombres de archivos RPM
Todos los archivos RPM de RedHat tienen un syntaxis definida para nombrarlos.
Esta es:
NOMBRE-VERSION-BUILD-TYPE.rpm
En donde:
  • NOMBRE: es el nombre del programa. Puede ser cualquier nombre valido de archivo, pero generalmente es una sola palabra o una palabra con un guion(-)
  • VERSION: es la version del programa. Generalmente son 2 o 3 numeros separados por puntos. Algunas veces contienen letras.
  • BUILD: es el numero de veces que se compilo el .src.rpm para crear este RPM. Generalmente es solo un numero, pero puede tener tambien letras o numeros separados por puntos.
  • TYPE: es tipo de RPM, binario o fuente. Los binarios toman los nombres de plataformas(arriba ccitados) y los fuentes siempre toman el nombre 'src'
Ejemplos:
Curso Introductorio a Linux
nombre de archivo
NOMBRE
VERSION
BUILD
TYPE
rpm
up2date-2.5.4-1.i386.rpm
up2date
2.5.4
1
i386
rpm
up2date-gnome-2.5.4-1.i386.rpm
up2date-gnome
2.5.4
1
i386
rpm
xinetd-2.1.8.9pre15-2.i386.rpm
xinetd
2.1.8.9pre15
2
i386
rpm
mount-2.11b-3.i386.rpm
mount
2.11b
3
i386
rpm
docbook-3.1-4.noarch.rpm
docbook
3.1
4
noarch
rpm
imap-4.7-6.src.rpm
imap
4.7
6
src
rpm
imap-2000-3.i386.rpm
imap
2000
3
i386
rpm
krb5-devel-1.2.2-5.i386.rpm
krb5-devel
1.2.2
5
i386
rpm
usermode-1.36-2.6.x.i386.rpm
usermode
1.36
2.6.x
i386
rpm
vixie-cron-3.0.1-40.1.i386.rpm
vixie-cron
3.0.1
40.1
i386
rpm

Todos estos ejemplos son nombres de archivos reales.

Notas sobre nombres de RPM
  • esta syntaxis de nombres de archivos es valida solo para RedHat. Las demas distribuciones basadas en RPM usan syntaxis parecidas o iguales.
  • Cuando el NOMBRE contiene el string '-devel' al final, esto significa que el rpm contiene los archivos necesarios para desarrollar con el nombre del paquete. Por ejemplo, el nombre krb5-devel contiene los archivos necesarios para desarrollar aplicaciones que usen las librerias Kerberos5. Generalmente estos archivos contiene todos los .h necesarios para compilar en C/C++
  • Los archivos con plataforma i386 correr en todos los procesadores de la arquitectura IA32, osea, en todas los procesadores: i386, i486, Pentium, Pentium MMX, Pentium Pro, Pentium II, Pentium III, Pentium Xeon, AMD(todos), Cyrix(todos), etc.
  • Si el nombre del archivo es muy complicado, como usermode-1.36-2.6.x.i386.rpm, empesar a leer el archivos desde atras, osea, desde .rpm. Opcional, listar la informacion del archivo con: 'rpm -qpi usermode-1.36-2.6.x.i386.rpm '

Instalando archivos rpm
Los archivos RPM se usan para instalar un programa dado. En cada archivo RPM existe informacion referente al programa, como:
  • Informacion detallada de nombre, version, etc
  • Directorios en los cuales debe ir cada archivo que forma parte del paquete/programa
  • Scripts que se deben ejecutar antes y despues de realizar la instalacion que son necesarios para que el programa quede instalado correctamente.
Para instalar un paquete RPM, se usa un comando llamado(sorpresa): rpm
Este comando, como cualquier otro, recive opciones y parametros.
Las opciones mas usadas son: install, upgrade, remove. Que se usan para instalar, actualizar o borrar un programa.

Comando Install
Para instalar un archivo .rpm se usa la syntaxis:
$ rpm -i archivo.rpm
Este comando debe ejecutarse solo si no existe una version previa del paquete. Si un paquete ya existe con el mismo NOMBRE, el comando rpm indicara esa situacion

Comando Upgade
Para actualizar un programa a una version mas nueva, se usa el comando:
$ rpm -U archivo.rpm
Una actualizacion, reemplaza los archivos viejos de la vieja version con los de la nueva.
Si no existe una version anterior al programa que estamos instalando, el programa se instala de la misma forma que hariamos con '-i'

Comando Remove
Para borrar un programa con todos sus archivos, se usa este comando:
$ rpm -e NOMBRE
O la forma completa:
$ rpm -e NOMBRE-VERSION-BUILD
Los numeros de version y build se pueden dejar de lado.
Si el paquete que queremos borrar se necesita para el funcionamiento correcto de otro paquete, rpm nos avisara de ello.


Opciones del comando rpm
El comando 'rpm' recive varias opciones(rpm --help). Las mas usadas a la hora de hacer un install, upgrade o remove son:
-h: muestra el porcentaje de la operacion
-v: muestra mas mensajes de lo que se esta haciendo.
Asi, la forma de ejecutar los install, upgrade y remove son:
$ rpm -ivh archivo.rpm
$ rpm -Uvh archivo.rpm
$ rpm -ev NOMBRE
respectivamente


Consultas RPM
Posiblemente lo mas poderoso de RPM son las consultas a la BD de archivos instalados o los archivos.rpm
Hay dos tipos de consultas: a la BD y a los archivos.
Al consultar a la BD, se optiene informacion de los programas ya instalados.
Al consultar a un archivo, se optiene informacion solo del archivo consultado.

Consultas a la BD
Aqui se muestran las opciones mas usadas:
rpm -q NOMBRE
Muestra la version del paquete NOMBRE instalado
rpm -qi NOMBRE
Muestra la descripcion completa del programa NOMBRE instalado
rpm -ql NOMBRE
Muestra todos los archivos que el programa NOMBRE contiene o instalo
rpm -qf archivo
Muestra el NOMBRE del paquete al cual pertenece una archivo. Puede ser cualquier archivo.
rpm -qa
Muestra todos los NOMBRES de los paquetes instalados. El output de esta consulta es muuy largo

Consultas a los archivos .rpm
Las consultas a los archivos .rpm son muy parecidas a las consultas a la BD con la diferencia de que llevan la opcion '-p' y ademas el consjunto de consultas es reducido.
rpm -qp archivo.rpm
Muestra el NOMBRE del archivo
rpm -qpi archivo.rpm
Muestra la informacion completa del archivo
rpm -qpl archivo.rpm
Muestra el contenido del archivo


Ejemplos de consultas:
Aqui se muestran varios ejemplos de consultas. En cada ejemplo se muestra primero la version de consulta a la BD y despues(si existe) la version de consulta a un archivo .rpm
Ver que archivos executables contiene un programa:
$ rpm -ql NOMBRE | grep bin
$ rpm -qpl archivo.rpm | grep bin

Ver a que paquete pertene un archivo y luego mostrar todos los archivos del paquete:
$ rpm -qf /etc/inittab
$ rpm -qf /etc/inittab > /tmp/nombre.tmp
$ rpm -ql `cat /tmp/nombre.tmp`

Ver si tenemos instalado el paquete samba:
$ rpm -qa | grep samba















Instalacion tar.gz
La instalacion tar.gz se realiza desde un archivo que termina con la extencion .tar.gz

Introcucion rapida a tar y gzip
Esta extencion significa que el archivo es un archivo de tipo .tar y que a su vez esta comprimido.
Los archivos .tar son aglomerados de archivos, es decir, dentro de un archivo .tar existen uno o varios archivos.
Ejemplo, si queremos enviar el contenido de todo un directorio por email, primero lo agrupamos en un archivo .tar y luego lo enviamos. Asi, enviamos solo un archivo envez de enviar los archivos uno por uno.
El problema es que el archivo .tar no esta comprimido.
Ahi es donde entra el programa de compresion llamado gzip.
gzip comprime un archivo y lo guarda con la extension .gz
Asi, si comprimimos un archivo que termina en .tar, este se convierte en .tar.gz
Comando basicos:
gzip -9v archivo
Comprime el archivo usando maxima compresion. Agrega la extencion .gz
gunzip -v archivo.gz
Descomprime el archivo. Le saca la extencion .gz
tar cf archivo1.tar directorio1
Crea el archivo archivo.tar y guanda en el todo el contenido del directorio directorio1
tar xf archivo1.tar
Hace un untar de archivo1.tar en el directorio artual
tar xf archivo1.tar -C /tmp
Hace un untar de archivo1.tar en el directorio /tmp
tar czf archivo.tar.gz directorio1
Crea el archivo archivo.tar.gz y guanda en el todo el contenido del directorio directorio1. Comprime el archivo usando la maxima compresion
tar xf archivo1.tar.gz -C /tmp
Hace un untar/gunzip de archivo1.tar en el directorio /tmp



Introcuccion rapida a make
Un archivo .tar.gz contiene un codigo fuente del programa a instalar. Por ello, debemos compilar el programa, y luego copiarlo a un ubicacion final para que quede totalmente instalado.
Todos estos pasos se realizan usando el comando 'make'.
Este comando busca un archivo llamado 'Makefile' en el directorio actual en donde se especifica que se debe hacer.
El archivo Makefile esta separado por secciones o targets. Cada target es como una subrutina en donde se define que hacer.
Asi, tenemos targets para compilar, para mover los archivos a la ubicacion final, etc.
Los target mas usados son:
all
es e target por defecto. Si no se especifica un target, este es el que se ejecuta
install
realiza todas las operaciones de moviento de archivos a su ubicacion final. Por ejemplo, mueve los executables a /usr/bin
clean
borra todos los archivos generados al realizar la compilacion, osea, los executables, .o, etc
dist-clean
deja el directorio de los codigos fuente igual a como estaba originalmente. Borra todo lo que se creo en los anteriores targets
uninstall
Borra todo lo que se instalo en el target install

Para indicar que target usar, le pasamos el nombre del target a make como 1er parametro:
$ make dist-clean
Si no le pasamos ningun parametro, se ejcuta el primer target que se encuetra.
Este primer target se llama por convencion: all

Introduccion rapida a configure.sh
El problema con el archivo Makefile es que es muy dependiente de la plataforma y SO en el cual se esta compilando el programa.
Asi, una solucion seria tener un Makefile para cada Plataforma/SO o, tener una forma de crear un Makefile luego de detectar la Plataforma/SO.
Para esto, se usa el script 'configure.sh'. Este script crea un Makefile que se adecue a nuestra Plataforma/SO.


Instalando un .tar.gz
Aqui veremos como instalar un programa distribuido en un archivo .tar.gz
Veremos como se usan los comandos arriba citados.
Para este ejemplo, usaremos en programa apache. Apache es el servidor web mas usado del mundo. La instalacion real de apache puede ser un poco distinta en la vida real.
Nuestro archivo se llama entonces: apache-1.3.20.tar.gz

  1. Despaquetar el programa
Para esto, primero descomprimimos con gzip y obtenermos un .tar. Luego usamos tar para despaquetar el archivo. Tambien creamos un directorio temporal de trabajo.
$ mkdir /tmp/apache
$ gunzip apache-1.3.20.tar.gz
$ tar -xf apache-1.3.20.tar -C /tmp/apache
Otra opcion para no usar gunzip y tar es:
$ tar xzf apache-1.3.20.tar.gz -C /tmp/apache

  1. Crear el Makefile
Para crear el archivo Makefile, debemos ejecutar configure.sh.
Si no se encuentra alguna libreria que se necesita para la compilacion del programa, configure.sh imprimira un mensaje de error y terminara su ejecucion.
Creamos el Makefile:
$ cd /tmp/apache/apache-1.3.20
$ ./configure.sh

Para ver parametros opcionales, ejecutar './configure.sh --help'

  1. Compilar el programa
Para compilar el programa, simplemente ejecutamos make.
$ make

  1. Instalamos en programa
Para esto le decimos a make que ejecute el target 'install' del archivo Makefile.
$ make install

Con estos 4 pasos, ya tenemos instalado nuestro programa apache. Ahora solo nos queda usarlo.

Todos los pasos juntos:
$ ./configure.sh
$ make
$ make install

Aqui vemos que es muy sencillo instalar un programa que se distribuye en formato .tar.gz













Comparacion RPM vs tar.gz
El RPM tiene muchas ventajas sobre el .tar.gz.

el RPM es binario ya contiene programas compilados
Por ejemplo, en el ejemplo de la instalacion del apache, que pasa si el configure.sh detecta que nos falta una libreria? Vamos a tener que bajar y compilar la libreria que nos hace falta. En esto no hay problema hasta que nos damos cuenta que nos hace falta 5 librerias para compilar apache.
Con un RPM, no hace falta compilar un programa para tenerlo funcionando. Alguien ya hiso eso por nosotros.
El RPM es de facil desinstalacion
El .tar.gz tiene un target llamado 'uninstall' que sirve para dsinstalar. Pero ese target esta en el archivo Makefile, asi que no podemos borrar todo el directorio en donde compilamos apache. Al menos tenemos que mantener el archivo Makefile.
Que pasa si borramos apache y nos olvidamos que un programa llamado php necesitaba apache para funcionar?
El sistema de dependencias de RPM nos avisa de esto y en el caso de tar.gz nos avisa nuestra memoria.
El tar.gz es mas configurable
Las configuracion se realizan al pasarle parametros al configure.sh. En RPM podemos hacer esto tambien, pero necesitamos instalar el archivo .src.rpm y luego compilarlo.
La cantidad de pasos para cambiar obciones de compilacion es casi la misma.





Ejemplos
Aqui veremos unos pocos ejemplos practicos

Ejemplo 1: Instalando un rpm
Antes de instalar un rpm, primero revisamso si necesitamos hacer un upgrade.
Para este, buscamos si ya tenermos instalado el NOMBRE del archivo rpm.
O hacemos una consulta a toda la BD y luego buscamos un string parecido al NOMBRE del archivo rpm. Para el ejemplo, instalamos el rpm: gftp-2.0.8-1.i386.rpm
Tambien usamos wildcards para no tener que escribir todo el nombre del archivo y asi evitamos la fatiga.

$ rpm -q gftp
$ rpm -qa|grep ftp
$ rpm -ivh gftp*2.0.8*rpm
Ejemplo 2: Instalando un rpm con dependencias
Algunos rpm dependen de otros. Estas dependencias pueden ser otros programas o librerias u paquetes rpm con casi el mismo nombre. En este caso vamos a instalar el programa Netscape Comminucator. El Netscape consta de 3 archivos .rpm. Estos son:
netscape-common-4.77-1.i386.rpm
netscape-communicator-4.77-1.i386.rpm
netscape-navigator-4.77-1.i386.rpm
Si instalamos el netscape-communicator, este depende de: netscape-common
Si instalamos el netscape-navigator, este depende de: netscape-common
"Depende de", significa que el paquete debe estar instalado, o debe instalarse al mismo tiempo.
Para este ejemplo, vamos a instalar netscape-communicator que depende de netscape-common. Como netscape-common no esta instalado, vamos a instalarlo al mismo tiempo.
Para instalar varios rpm al mismo tiempo, simplemente le pasamos todos los archivos como parametros al comando rpm:
$ rpm -ivh netscape-communicator*rpm netscape-common*rpm
No importa el orden, solo importa que todos se pasen como parametros al mismo tiempo.

Ejemplo 3: Borrando un rpm
Aqui vamos a probar el mensaje de error que ocurre cuando queremos borrar un RPM y eso rompe una dependencia.
Ejecutar el ejemplo 2 y luego esto:
$ rpm -ev netscape-common
Aqui veremos un mensaje que nos dice que si borrarmos el paquete netscape-common, el paquete netscape-communicator no va a funcionar mas.
El comando rpm sale sin hacer nada.
Si en realidad queremos borrarlo, debemos pasar todas las dependencias como parametros:
$ rpm -ev netscape-common netscape-communicator
aqui tampoco importa el orden de los parametros.


Ejemplo 4: Actualizando un programa
Al actualizar un programa, hay ver si este programa tiene algun archivo de configuracion. Estos archivos de configuracion pueden variar entre versiones y hay que asegurarce si se debe volver a configurar la nueva version o si se puede usar el archivo de configuracion viejo.
Para este ejemplo usaremos el programa samba que es un servidor de servicios de redes Windows.
Su archivo de configuracion es /etc/smb.conf
Asi, si realizamos un actualizacion, este archivo se puede renombrar o dejar intacto por el comando rpm. Cada caso tiene su significado:
Se se crea
El archivo de configuracion:
/etc/smb.conf.rpmsave
se reemplazo y esta es la copia de seguridad
/etc/smb.conf.rpmnew
se dejo intacto, el archivo de configuracion por defecto se deja como ejemplo.

Siempre que se actualizan programas servidores, se debe tener en cuenta esto.









Arriba
Volver, volver
© Oliver Schulze L.
sáb jun  9 15:20:26 PYT 2001
Hosted by www.Geocities.ws

1 1