|
Curso Introductorio a Linux
|
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:
- RPM con archivos binarios (executables/compilados)
dependientes de plataforma. Estos archivos teminan en: .PLATAFORMA.rpm
- 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:
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
- 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
- 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'
- Compilar el programa
Para compilar el programa, simplemente ejecutamos make.
$ make
- 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
|
|
|