27 octubre 2014

Paquetes: Noción de paquete - Información de paquetes

Noción de paquete.
   En otros sistemas operativos podemos descargar una aplicación y una vez descargada ejecutar un programa llamado install.exe, el cual instalará nuestra aplicación.
   En Linux no funciona así. Las aplicaciones, herramientas, utilidades, actualizaciones, se suministran en forma de paquetes. 
   

    El paquete contiene los archivos necesarios para que el programa funcione y una reglas que pueden ser de varios tipos:
  • Gestión de dependencias: El paquete sólo se instalará si determinados archivos/programas que necesita, ya están instalados.
  • Preinstalación: Antes de instalar el paquete se realizan determinadas acciones, como crear directorios.
  • Postinstalación: Después de la instalación se realizan algunas acciones, puede servir como ejemplo los parámetros de un fichero de configuración
   Linux Mint, basada en Ubuntu que a su vez se basa en Debian utiliza un tipo de paquetes: DEB. Muchas veces también escucharéis que Ubuntu utiliza el formato DPKG (Debian Package).
   Otras distribuciones, por ejemplo Fedore, Red Hat, su formato de paquete por defecto es RPM (Red Hat Package Manager).
   El paquete por tanto, cdependenciasontiene los archivos del programa, más otros archivos necesarios para su instalación. Estos metapaquetes son necesarios para que el programa encargado de la gestión de los paquetes (dpkg) los instale correctamente: verifique las dependencias, si no existen las instale, cree los directorios, borre los paquetes y dependencias antiguas, etcétera.
   He hablado de dokg como gestor de paquetes y es cierto, sin embargo existe otra herramienta, más completa, que gestiona mejor la instalación: apt-get. ¿Por qué gestiona mejor?, porque si el paquete que instalamos requiere de otros paquete (dependencias), los instala, así que es apt-get y no nosotros quienes se encarga de gestionar las dependencias. Incluso nos advierte de dependencias no necesarias pero si convenientes. Recordemos que la "a" de apt, significa Advanced, avanzado.

   Como usuarios/administradores, nos podemos complicar la vida todo lo que queramos, pero no es conveniente. Por ello no me cansaré nunca de decir que instaléis siempre los paquetes que están previstos para nuestra distribución.
   En las entradas anteriores hemos tratado ampliamente el tema de los repositorios, donde se encuentran almacenados los paquetes, tanto los oficiales como de terceros. Investigad, mirad si existe ese paquete para vuestra distribución, si existe mirad si es estable, etcétera.
   Si no queréis complicaciones, lo cual es muy saludable para vosotros y vuestro sistema, disponéis de dos herramientas magnificas: Gestor de Software y Synaptic. Pocos problemas tendréis si descargáis los paquetes con estas herramientas, fáciles de usar.
   Por último, una aplicación no deja de ser una herramienta. Si queréis un programa para escuchar música, evaluad vuestra necesidades, buscad en Internet, páginas de Linux Mint, Ubuntu, foros etcétera. Esa investigación, reconozco que muchas veces pesada, se convierte en conocimiento y ya sabéis lo que dice el refrán: el saber no ocupa lugar. Los archivos inútiles sí.

Nuestros paquetes
   
   Saber los paquetes que tenemos instalados en nuestro, incluso tener una fichero con el listado de nuestros paquetes, no está de más.
   Podemos utilizar el siguiente comando en el terminal:
    $ apt-cache pkgnames    
   No suministra la lista de paquetes que apt conoce, instalados en nuestro sistema.
   La lista es muy extensa y no la podemos tener completa en nuestro terminal, lo más conveniente es enviar la lista de paquetes a un archivo al que podemos llamar mis-paquetes.
   La instrucción apt-cache pkgnames, por defecto dirige la información de salida al terminal, vamos a forzar que lo haga en el archivo:
   $ apt-cache pkgnames > mis-paquetes  
   Comprobaréis que no ha salido ninguna lista de paquetes en el terminal, pero si entráis en la Carpeta personal de vuestro escritorio veréis allí el archivo. En Linux Mint, por defecto, se abre con el editor Gedit, clic dos veces sobre el icono y resuelto. Pero también lo podéis abrir con Write de LibreOffice.

   Otro comando que lista los paquetes instalados es dpkg. Para ello hemos de ejecutar el comando:

   $ dpkg -l 

   Otra forma de escribirlos sería:

  $ dpkg --list  

   Al igual que con el comando anterior, no aparece toda la información en la ventana del terminal. Podemos utilizar la solución anterior, que el listado se quede en un archivo, por ejemplo: mis-paquetes-dpkg. Para ello ejecutamos la instrucción de esta forma:

   $ dpkg -l > mis-paquetes-dpkg

   En nuestra carpeta personal tendremos el archivo mis-paquetes-dpkg.

   Veamos un ejemplo de la salida que proporciona este comando en nuestro terminal:


    La primera y segunda columna están ocupadas con los caracteres "ii". Veamos el contenido, posible de estas columnas.
   En la primera columna pueden aparecer los siguientes caractéres:
  • u: Unknown (Desconocido)
  • i: Install (Instalado)
  • r: Remove (Eliminado)
  • p: Purge (Purgado)
  • h: Hold (Retenido)
   Los caracteres que pueden aparecer en la segunda columna son:
  • n: Not (No instalado)
  • i: Inst. (Instalado correctamente)
  • c: Cfd-files (Archivos de configuración, pertenecen al sistema)
  • u: Unpacked (El paquete está sin desempaquetar)
  • f: Failed-cfg (Fallo en eliminar los archivos de configuración)
  • h: Half-inst (El paquete está a medio instalar)
  • W: trig-aWei (Se está esperando que se ejecuten los paquetes declarados de interés)
   Habrá un tercera columna si se produce un error:
  • R: Reinst-requerid (Se necesita reinstalar el paquete)
Conocer el estado de un paquete.

   Si queremos conocer el estado (status) de alguno de nuestros paquetes debemos ejecutar el comando: dpkg -s nombre_del_ paquete. Por ejemplo queremos conocer el estado de nuestro programa brasero, ejecutaremos:

   $ dpkg -s brasero  

   Esta sera parte de la información que suministra, por problemas de espacio en la imagen, pero os recomiendo experimentar con esta instrucción.


    Podemos ver como en la línea Status nos indica: instal ok installed (ii). Además nos proporciona información muy interesante, sus dependencias, pero también dependencias recomendadas (Recommends: brasero-cdrkit, yelp).
   Incluso nos señala determinados conflictos que este paquete puede tener con otros, en este caso se rediere a nautilus-cd-burner.

   Algunas veces no tener instaladas determinadas dependencias, es decir programas complementarios que un programa necesita para funcionar, es una fuente de errores, con solución. Pero aquí tenemos una forma de conocerlas y poder comprobar, con los comandos anteriores, si están o no instaladas.

    Por otra parte la información sobre los conflictos es importante para resolver algunos problemas que un paquete pueda presentar, debido, precisamente a tener otro instalado que es quien los crea.

Conocer las dependencias de un paquete

  El comando anterior dpkg -S <paquete>, daba información sobre la dependencias de ese paquete, pero tenemos más comandos para ello.
   Muy útil y recomendable es el comando apt-cache dependes <paquete>. Vamos a utilizarlo para ver las dependencias del programa brasero.

    $apt-cache depends brasero  

  Esta es la salida que muestra el programa Terminal:


    Vemos que la información aparece más ordenada, en primer lugar nos de un listado de las dependencias, a continuación las sugeridas, las recomendadas y con quién puede entrar en conflicto.

   Para ver el árbol de dependencias completo podemos utilizar el comando apt-rdepends. Este comando nos mostrara las dependencias de las dependencias del paquete. Normalmente tenemos que instalar apt-rdepends en nuestro sistema para disponer de este comando.
   La instalación la haríamos:

  $ sudo apt-get install apt-rdepends 

   Esto de dependencias de la dependencias, se denomina dependencias recursivas (de ahí la r que añadimos a dependes). Es sencillo de entender con un ejemplo. No voy a utilizar brasero, por el montón de dependencias y librerias, voy a utilizar uno llamado file, así que escribo en el terminal:

   $ apt-redepends file  

   Este es el resultado:


   El paquete file tiene dos dependencias:
  1. libc6
  2. libmagicl
   Más bajo verermos que libc6 depende de:
  1. libgcc1
   libgcc1 depende de:
  1. gcc-4.9-base
  2. libc6
    Ambos pre-dependen de otro paquete: multiarch.support    
   Como veis las dependencias son recursivas, unas recurren a otras. Con este comando, un lápiz y una hoja de papel podemos crear un gráfico que represente el árbol de dependencias del paquete file.

   Y el comando estelar sería apt-cache dump, pero con cuidado, no lo digo porque podáis provocar un error sino por la cantidad de información que suministra, la de todos todos los paquetes instalados. Puede tirarse bastante tiempo listando en vuestra terminal. Por ello voy a utilizarlo solo para el paquete brasero con la siguiente instrucción, que viene a decir que ejecute la instrucción, pero solo sobre el paquete brasero:

   $ apt-cache dump | grep brasero 

   La información que aparece en nuestro terminal es (no aparece toda por problemas de espacio):


   Al ver esta pantalla os podéis hacer una idea de la cantidad de información que suministra cuando ejecutamos a "pelo" apt-cache dump y realiza esto mismo pero con todos los paquetes que tenemos.

   Con estos comandos estamos en disposición de saber algo más sobre los paquetes, las dependencias requeridas, las librerías que necesitan etcétera.

    Gracias por vuestra atención.

No hay comentarios:

Publicar un comentario