Cómo Instalar archivos .tar.gz, tar.bz, .tgz, tbz

Aunque muchas veces cuando todavía no tenemos mucha experiencia en GNU/Linux sentimos como un problema utilizar paquetes de archivos comprimidos tipo .tar.gz. en realidad estos tienen muchas ventajas respecto a otros sistemas de distribución de archivos.

Por ejemplo, si utilizamos un paquete .rpm o similares, todo parece marchar bien, hasta que intentamos instalarlo en una distribución diferente.

A veces funciona sin inconvenientes, otras veces no.
Si bien en el caso de apt encontramos notables ventajas respecto a .rpm en lo que hace a la solidez del manejo de las llamadas dependencias (archivos que deben estar en el sistema como bibliotecas, etc para lograr una correcta instalación de una aplicación dada), siempre queda la posibilidad que una utilidad no sea encontrada en los repositorios o que la version existente no sea todo lo nueva que necesitamos.

Tambien existe klik, que es muy bueno, y tiene muchas aplicaciones 'listas para usar' pero todavia falta incorporar una buena cantidad de programas.
De una u otra forma, en algun momento no nos vamos a librar de utilizar algun paquete comprimido tipo tarball (llamamos paquete a un conjunto de archivos contenidos todos juntos -mediante tar- y comprimidos -puede con gzip o con bzip-) por lo que es mejor que conozcamos cómo hacerlo.

1.Comprimiendo archivos con gzip

Lo que hace gzip es crear un nuevo archivo comprimido con la extension .gz Por ejemplo: Tenemos un archivo que se llama pepe.txt y luego de comprimirlo con gzip, ademas del archivo original, tendremos uno nuevo de nombre pepe.txt.gz

Si quisieramos ver el contenido de un archivo comprimido (pero sin descomprimir) utilizamos el comando zcat

Por ejemplo en nuestro caso:

zcat pepe.txt.gz

Si quisiereamos descomprimir el archivo en cuestion utilizamos el comando gunzip. En nuestro ejemplo seria

gunzip pepe.txt.gz

2.Comprimiendo archivos con bzip2

Es una forma de compresión mas avanzada, pero no todas son ventajas, asi como comprime más tambien tarda más en hacerlo. El archivo generado en este caso tiene una extension .bz o bz2.

Si quisieramos ver el contenido de un archivo comprimido (pero sin descomprimir) utilizamos el comando bzcat

Por ejemplo en nuestro caso:

bzcat pepe.txt.bz2

Si quisiereamos descomprimir el archivo en cuestión utilizamos el comando gunzip. En nuestro ejemplo seria

bunzip2 pepe.txt.bz2

3. Empaquetando con el comando .tar

Debemos tener en claro lo que hace .tar Este comando no comprime sino que empaqueta.
O sea que podemos crear un solo archivo '.tar' con varios archivos dentro. Cuando hacemos copias tipo backup o para enviar por correo puede ser de utilidad crear una archivo .tar comprimido. Veamos un paso a paso sobre como crear un archivo 'tar.

  1. Colocamos todos los archivos que deseamos empaquetar en un directorio.

  2. Escribimos el siguiente comando: tar -cvf [nombre_del_archivo.tar] *
    Veamos esto en detalle:

    Para ver las opciones y el uso completo lo ideal es ver desde linea de comandos man tar

  1. Comprimimos el paquete generado con .tar mediante el comando gzip de la siguiente manera:

    gzip [archivo.tar]

4. Comprimir el paquete generado con .tar mediante el comando bzip2 en lugar de gzip.

Es un proceso muy similar. Vamos a utilizar una tuberia (que sirve para concatenar la salida de un proceso con la entrada de otro).
Vamos a concatenar la salida de un .tar (empaquetado) con la entrada del compresor bzip2.
Luego redireccionaremos este conjunto hacia un archivo. De esta manera efectuamos todo el proceso en una sola linea. La sintaxis seria:

tar -c archivos | bzip2 > archivo.tar.bz2

Donde 'archivos' podria ser un '*' si todos los archivos del directorio van a ser incluidos. De lo contrario habra que indicar uno a uno cuales empaquetaremos. Luego el simbolo '|' nos indicara que concatenaremos dos procesos (el de empaquetar -tar- con el de comprimir -bzip2-) Esto se llama tubería y en España lo conocen como 'fontanería' (en ingles 'pipes')
El producto final de ambos procesos lo redireccionamos a un archivo con extension .tar.bz2

Hagamos un ejercicio practico (primero con gzip y luego lo cambiamos por bzip2:

  1. Creamos el directorio /tmp/ejercicio
mkdir /tmp/ejercicio

2. Copiamos al directorio en cuestion los siguientes archivos (fueron elegidos al azar y podrian ser cualquier otro grupo:/etc/passwd /etc/pmount.allow /etc/protocols /etc/resolv.conf

cp /etc/passwd /etc/pmount.allow /etc/protocols /etc/resolv.conf /tmp/ejercicio

Lo anterior va todo en la misma linea o si no alcanza dejar que sea la misma linea de comandos quien la coloque en el 'renglon seguido' (sin tocar 'Enter') Podriamos habernos posicionado en /etc y copiar directamente los archivos, pero es buena practica acostumbrarse a utilizar rutas completas, como veremos especialmente cuando hagamos scripts en bash.

3.Creamos el archivo .tar para lo cual utilizaremos el nombre 'directorio' (podria ser cualquier otro) posicionados en el directorio 'ejercicio'.

/tmp/ejercicio#: tar -cvf directorio.tar *

4.Comprimimos el paquete con gzip de la siguiente manera:

gzip directorio.tar
Con este ultimo paso habremos sustituido el paquete anterior por uno nuevo comprimido de nombre directorio.tar.gz

5.Ahora borramos todo el archivo directorio.tar.gz y creamos el archivo .tar.bz

rm /tmp/ejercicio/directorio.tar.gz

losindios /tmp/ejercicio#: tar -c * | bzip2 > directorio.tar.bz2

Si ahora hacemos 'ls' sobre el subdirectorio /tmp/ejercicio veremos que hay un nuevo archivo llamado directorio.tar.bz2 y si hacemos bzcat directorio.tar.bz2 podremos ver que en su interior se encuentran los archivos que empaquetamos.

  1. Nomenclatura usada para los archivos empaquetados

Veremos una forma curiosa y a veces (si no conocemos el motivo) hasta un poco molesta. Es la forma de nombrar los archivos .tar.gz o .tar.bz2 .
Veamos por ejemplo este paquete perteneciente al midnight commander:

mc-4.5.55.tar.gz

El nombre 'mc' nos dice que se trata de midnight commander, pero luego con un signo '-' aparece un numero 4.5.55 El primer numero (4) nos indica que se trata de esa version.
Luego el numero intermedio nos indica que se trata de una version no-estable ya que no es par. Si este numero fuera por ejemplo '6' en lugar de '5' indicaria una version estable.
Finalmente el numero 55 indica que se han hecho ya 55 modificaciones sobre la version original. Pero esto puede no ser asi ya que muchas veces no se lleva un orden tan estricto. De todos modos el numero nos indica que hay unas cuantas modificaciones realizadas a la version original.
Tambien es posible encontrar una notacion como esta:

mc-4.5.55-src.tar.gz

Son los mismos datos vistos con anterioridad pero se agrega un dato: 'src'. Estop significa 'source code' o 'codigo fuente' y por lo tanto está indicando que el paquete no esta compilado sino que es código fuente (para instalarlo debemos compilarlo).

mc-4.5.55-x86.tar.gz

Se trata de un paquete con el archivo binario para una plataforma Intel x86.

mc-4.5.55-x86-static.tar.gz

Este paquete con bibliotecas estáticas es más grande que los paquetes normales porque trae todo lo necesario para que la aplicación funcione. En este caso no tenemos que buscar dependencias, ya que el mismo paquete normalmente trae todo lo que necesitamos.
¿Ventajas?
Puede que sí en cuanto a la instalación individual de un programa, pero...es siempre preferible tener instaladas las dependencias para utilizar en forma conjunta por todos los programas que las necesiten. Esto significa que si luego otro programa las solicita no ocuparemos lugar en nuestro disco rígido volviéndolas a instalar y utilizaremos la anterior. Por otro lado la ventaja de la instalación con bibliotecas estáticas, es que, no tendremos problemas de 'dependencias' comunes en otras instalaciones.
Hay, en cambio otra forma de empaquetar que utiliza bibliotecas dinámicas y que tiene la siguiente nomenclatura:

mc-4.5.55-x86-dinamic.tar.gz

5. ¿Que es compilar?

Las computadoras no entienden el lenguaje humano y a su vez el lenguaje que utilizan las computadoras no es entendible para los humanos.
La solución esta en utilizar alguno de los muchos lenguajes de programación existentes para escribir programas.
Entre estos lenguajes podemos mencionar al lenguaje Assembler (el mas cercano al lenguaje de máquina y por lo tanto muy difícil de manejar para el programador).
En este lenguaje fue escrita la primera version de Linux, pero luego su creador -Linux Torvalds- lo abandonó en favor de otro lenguaje conocido como 'lenguaje C', diseñado por las mismas personas que crearon el Sistema Operativo Unix.
Existen miles de lenguajes posibles de usar. Cuando un programa está escrito en esta forma, (sin compilar) su contenido es conocido como 'fuente' o 'código fuente'
A menudo vamos a leer que una de las cosas que diferencia al software libre del software propietario es que en los primeros es perfectamente legal conocer 'los fuentes', ya sea por la propia curiosidad de conocerlo, o para modificarlos en el deseo de mejorarlos.

Ahora bien, ¿podemos utilizar un programa en esta forma directamente aplicado a la computadora?
¡No, no podemos!
Previamente debemos hacer algo así como una 'traducción' al lenguaje que entienden las maquinas y eso justamente ...es lo que llamamos compilación.

Pero aquí, puede aparecer una confusión...hay ciertos programas que no se compilan y que normalmente se conocen como programas de 'lenguajes interpretados' . Bash es un ejemplo de esto.

Si abrimos un programa creado en bash, veremos que solo contiene comandos como los que hemos conocido (comandos bash agrupados en un programa). Con un editor de texto podemos ver y entender perfectamente lo que dice allí. ¿Entonces?
Simplemente existe un 'interprete de comandos' (que en el caso de bash esta integrado al kernel de gnu/linux) que permite decirle al SO en forma que este lo 'entienda'.
Resumiendo: Existen programas compilados y programas interpretados. En ambos casos hay una conversión de una u otra manera a un lenguaje que entienda la maquina. Los programas compilados son siempre mas rápidos de ejecutar que los programas interpretados. Estos últimos se usan en pequeñas aplicaciones. Los lenguajes compilados mas usados en el SO linux son C y C++.

5.1. Compilación en paquetes .tar.gz

Dentro de un paquete .tar.gz pueden haber programas ya compilados y listos para usar o bien simple código fuente que debe ser compilado para poder usar en nuestras máquinas.
También tiene que ver la función que cumple una utilidad que llamaremos enlazador. El código fuente de un programa debe enlazarse con utilidades generalmente externas llamadas bibliotecas, mal llamadas por un defecto de traducción 'librerias' (la traducción de 'library' del ingles no es librería sino biblioteca).
Estas bibliotecas no se utilizan en un solo programa sino en muchos y por esto es común que se encuentren dentro de nuestra computadora una sola vez. Existen dos formas diferentes de realizar la compilación y estas son:

Como se comprenderá este segundo método, si bien es mas sencillo para compilar, tiene el inconveniente de ocupar mas espacio que el dinámico.

5.2. Utilizacion de paquetes .tar.gz

Lo mas común es que dentro de un paquete .tar.gz encontremos archivos con el código fuente y sin las bibliotecas. Lo primero que haremos será desempaquetar y descomprimir el archivo .tar.gz de la siguiente manera:

  1. Bajamos de Internet o copiamos de un Cd, Dvd, pendrive o cualquier otra fuente donde se encuentre el paquete, a un directorio creado especialmente preferiblemente dentro de /tmp (ya que luego lo descartaremos). Por ejemplo podríamos crear un directorio con el nombre del programa o cualquier otro que podamos identificar con facilidad.

  2. Descomprimimos y desempaquetamos mediante el siguiente comando:

    tar -zxvf [archivo.tar.gz]
  3. Esto creara automaticamente un nuevo directorio ya desempaquetado y descomprimido.

5.3 Utilizando ./configure

Veremos que en la primera fase de la compilación configure, si llega a haber errores (como dependencias que faltan), nos informa todo lo que nos hace falta.
Cuando mencionamos dependencias nos podemos estar refiriendo a alguna biblioteca que nos falte o a una versión mas nueva del compilador. Todos los elementos anexos al paquete pero que normalmente no vienen dentro del mismo.
Hay que tener un poco de paciencia en esta parte, que es donde normalmente casi todos fracasan, por no entender qué hay que hacer.
Simplemente, papel y lapicera y a anotar todo lo que falta, o está corrupto o desactualizado. Si está corrupto, averiguar el lugar donde se encuentra, anotarlo y borrarlo. Para eso aprendimos a usar el comando 'find' por ejemplo .

Supongamos que necesitamos el compilador "gcc" en su última versión. Es muy importante que este compilador esté en nuestra computadora en su última versión, ya que es quién compila los programas hechos en C por ejemplo. Buscamos la pagina oficial y descargamos la ultima version estable.
En la página oficial de gcc (
http://gcc.gnu.org/)

Pero veamos esto con más detalle.

  1. Si estamos usando Firefox podemos ir a Editar=>Preferencias=>Desacargas
    y ubicar la próxima descarga en un directorio temporal. De todos modos, desde otros navegadores es posible luego cortar (mover) el paquete bajado a un archivo temporal, esto simplemente para no "llenar" inutilmente nuestro disco rígido.

  2. Mediante las teclas Ctrl+Alt+F1 (cualquiera hasta el F6 inclusive) entramos en una consola.
  3. Dentro de la consola escribimos

    root

    y luego el sistema nos va a pedir nuestro password, lo escribimos también. Con Ubuntu, no podremos utilizar root, a menos que lo hayamos configurado para usarlo. Si no lo hemos hecho, debemos escribir en consola, como usuario comun:

    sudo [comando a utilizar]

  4. Vamos con el comando "cd" hasta el lugar donde se encuentra el paquete a instalar.

  5. Una vez que estamos posicionados sobre el paquete escribimos en la consola:

tar -zxvf [nombre completo del archivo].tar.gz

    6. Hecho esto veremos un nuevo subdirectorio con nuestro paquete ya desempaquetado y descomprimido.

7. Ahora le llega el momento a configure. Lo debemos escribir en la consola de la siquiente manera:

./configure

    Este verificará que todo esté en condiciones para compilar el programa en cuestión. Si falta alguna biblioteca, nos lo dirá en este momento. De nada valdría seguir adelante forzando el programa, ya que no tendríamos buenos resultados. Si algo falta es el momento de detener todo y ponerse a bajar de Internet cualquier dependencia que nos falta antes de seguir adelante. No vale la pena utilizar opciones como -f o –force ya que solo atraseremos el desastre que seguramente aparecerá en algun momento por una compilación incorrecta.
    Una vez que bajamos cualquier dependencia que falte o este corrupta o desactualizada volvemos a escribir './configure'. Cuando este comando no nos indique errores, recién allí pasaremos al siguiente paso.

8. Continuamos el proceso de compilación escribiendo en nuestra consola el comando:

make

Dependiendo de los recursos de la máquina y del programa que estemos compilando, make puede tardar en completarse.
Finalizado Make, escribiremos
    1. make install
      para que el programa se instale en nuestra máquina.

A veces los pasos no son exactamente los indicados, para saber cuando hay variantes, la mejor manera es siempre leer el archivo Install o Readme que nos llevará de la mano y que seguramente viene con el paquete correspondiente.

Hay variantes a este metodo, por ejemplo para instalar Thunderbird (el cliente de correo de Mozilla) o Firefox (uno de los navegadores de Mozilla), empezamos el proceso igual que lo visto, desempaquetando y descomprimiendo. Pero luego encontramos que ya tenemos los binarios y no será necesario compilar, por lo que directamente procedemos a crear un vínculo para usar el mismo.

¿Qué pasa con los archivos .tar.bz?

El proceso de compilación es exactamente el mismo, lo único diferente es la forma de comprimir que en lugar de utilizar gzip utiliza otro compresor llamado bzip. Podemos descomprimir estos paquetes utilizando la siguiente sintaxis en nuestra consola:

bzip2 -cd [nombrearchivo] | tar xvf

Veamos un poco, el comando bzip2 es para la descompresión propiamente dicha, luego debemos apuntar el archivo en cuestión colocando el nombre exactamente como lo hemos bajado. Finalmente ese símbolo '|' nos permite continuar la acción con otro proceso. Se trata del desempaquetado que se realiza mediante tar en la forma conocida.

Debemos tomar en cuenta, que si bien esta es la forma predeterminada de trabajar con este tipo de archivos, siempre debemos leer el archivo README que acompaña los paquetes, ya que pueden haber instrucciones especificas para cierto paquete.

00ooxxoo00