Diferencia entre revisiones de «Administración de software»

De Hacklab La Paz - r00thouse
m (algo de corrección)
Sin resumen de edición
 
Línea 1: Línea 1:
En este apartado se mostrarán los principios escenciales para manejar el software de la computadora en un sistema GNU/Linux derivado de Debian.
En este apartado se mostrarán los principios escenciales para manejar el software de la computadora en un sistema GNU/Linux derivado de Debian.


El software de la computadora se maneja en lo que se llaman paquetes que contienen los'''binarios del programa''', es decir el código máquina que le dice a la computadora qué hacer para que el programa funcione. Los programas generalmente se "empaquetan" para hacer más fácil su distribución.
El software de la computadora se maneja en lo que se llaman paquetes que contienen los '''binarios del programa''', es decir el código máquina que le dice a la computadora qué hacer para que el programa funcione. Los programas generalmente se "empaquetan" para hacer más fácil su distribución.


Existen también paquetes de software que contiene el '''código fuente''' del programa, que contiene las instrucciones en lenguajes de programación desde las cuales se construyen los '''binarios del programa '''para que este pueda ejecutarse.
Existen también paquetes de software que contiene el '''código fuente''' del programa, que contiene las instrucciones en lenguajes de programación desde las cuales se construyen los '''binarios del programa '''para que este pueda ejecutarse.

Revisión actual - 13:26 6 sep 2015

En este apartado se mostrarán los principios escenciales para manejar el software de la computadora en un sistema GNU/Linux derivado de Debian.

El software de la computadora se maneja en lo que se llaman paquetes que contienen los binarios del programa, es decir el código máquina que le dice a la computadora qué hacer para que el programa funcione. Los programas generalmente se "empaquetan" para hacer más fácil su distribución.

Existen también paquetes de software que contiene el código fuente del programa, que contiene las instrucciones en lenguajes de programación desde las cuales se construyen los binarios del programa para que este pueda ejecutarse.

En este artículo veremos los paquetes de software que contienen los binarios para ejecutar el programa.

Paquetes de Software

Un paquete de software es un programa que ha sido construido desde su código fuente y ha sido empaquetado de acuerdo a un sistema manejador de paquetes. En GNU/Linux existen dos sistemas manejadores de paquetes principales:

  • Paquetes RPM de Red Hat package manager (.rpm es la extensión de archivos empaquetados) de la distribución Red Hat y derivados.
  • Paquetes Debian (.deb es la extensión de archivos empaquetados) de la distribucón Debian y derivados.

Un paquete de software contiene uno o varios programas precompilados, además un paquete contiene información adicional (meta-data) del paquete. Esta informacion adicional incluye descripción y versión del paquete y dependencias, que ayudan al sistema manejador de paquetes a organizar todos paquetes de la computadora de forma que sea posible Instalar, Actualizar y Desinstalar programas sin que hayan problemas de dependencias entre paquetes, permitiendo así la reutilización de programas.

Dependencias entre paquetes

La idea es simple, un programa puede necesitar que otros programas y bibliotecas estén instalados para poder funcionar.

Por ejemplo si hay un programa llamado ”Calculadora” que funciona vía línea de comandos y alguién hace un programa con interfaz gráfica de usuario GUI de ”Calculadora” para facilitar su manejo y lo llama ”CalculadoraGUI”, es claro que el programa ”CalculadoraGUI” necesita o depende del programa ”Calculadora” para funcionar por que ”CalculadoraGUI” sólo es una adaptación de ”Calculadora”.

En un SO Windows la típica forma en que un programa se distribuye es que este programa incluye a todos los demás programas de los que depende y se instala con estos, pero esto provoca consecuencias.

  • Si un programa se instala sin comprobar que los programas de los que depende ya estén instalados, entonces al instalarlo se instalarán también esos programas, y si estos ya están instalados causará que se utilice más memoria del disco duro y más memoria RAM para ejecutar ese programa, esto último en el caso de las bibliotecas.

Los paquetes .rpm y .deb usados en distribuciones de GNU/Linux incluyen no sólo el programa en sí sino una lista de otros programas de los que depende, gracias a esto los sistemas manejadores de paquetes RPM y Debian pueden fácilmente consultar a su base de datos si esas dependencias están o no instaladas en el sistema. Una vez hecha esta búsqueda el manejador de paquetes sólo instalará las dependencias no satisfechas, es decir, los programas y bibliotecas que faltan. Con esto último se aprovecha cada espacio de memoria en el disco duro y se optimiza el consumo de memoria RAM resultando en un sistema más rápido y con más espacio de almacenamiento.

Paquetes Debian

Se usan en las distribuciones basadas en Debian como Ubuntu, Mint, ver más y al igual que los rpm son paquetes de software.

Los paquetes Debian contienen dos archivos comprimidos .tar y un archivo con información de control. Los paquetes .deb son paquetes binarios es decir, contienen el código máquina del programa resultado de la previa construcción de este, por eso son archivos de instalación.

Generalmente un paquete de software Debian lleva el nombre de la siguiente forma:

  • Nombre del paquete 'como por ejemplo emacs23 del editor emacs.
  • Versión un número que generalmente lleva puntos aunque no necesariamente, por ejemplo 23_23. asignada por el autor del programa.
  • Número de construcción que viene después de la versión y es colocado por el mantenedor del paquete por ejemplo 3+1-1ubuntu9.
  • Arquitectura Que viene justo antes del .deb que indica para que arquitectura de computador fue construido el paquete, por ejemplo para un PC con CPU x86 el código de esta arquitectura es i386.
  • extensión que es .deb

Por ejemplo para el editor Emacs el paquete emacs23_23.3+1-1ubuntu9.2_i386.deb contiene los binarios del programa Emacs en su versión 23 construido para ubuntu 9.2 y funciona en una aruitectura i386 que significa que es para PCs x86. Pero esta estructura de nombre es una convención para repositorios, y no es obligatoria, si una persona hace un paquete .deb puede nombrarla como le plazca solo con la extensión .deb al final.

Los dos archivos comprimidos que contiene el paquete son:

  • control.tar.gz: que contiene toda la meta-data como la versión del paquete, nombre, dependencias, tamaño que tendrá una vez instalado, etc. Esta información permite al manejador de paquetes Debian (ver más adelante) qué porgramas buscar antes de la instalación y que configurar durante la instalación del programa.
  • data.tar.gz, data.tar.bz2, data.tar.lzma o data.tar.xz: que contienen los archivos que serán instalados.
  • debian-binary: la versión de formato deb que actualmente es 2.0.

Los paquetes .deb son manejados por herramientas de gestión de paquetes que son conjuntamente con una base de datos son el sistema manejador de paquetes de Debian.

Los paquetes .deb son imcompatibles con los .rpm pero existen herramientas para convertir entre estos dos sistemas.

Herramientas para gestión de paquetes

dpkg

dpkg es el programa base del sistema manejador de paquetes Debian, con dpkg se realiza la instalación, desinstalación, actualización, etc de los paquetes de software .deb. Se maneja vía línea de comandos por lo que se considera una herramienta de bajo nivel.

dpkg puede abrirse desde una terminal siguiendo la siguiente sintaxis:

dpkg [opciones] [acción] ["nombre del paquete" ó "nombre de los archivos .deb"]

dpkg tiene muchas opciones que no describiremos aquí, pero para verlas basta con escribir en una terminal:

$ dpkg --help

ó

$ man dpkg

dpkg –help mostrará una ayuda rápida con opciones y acciones brevemente explicadas y man dpkg abrirá el manual de dpkg detallado.

Por ejemplo si obtenemos el paquete codeblocks_10.05-2_i386.deb correspondiente al editor codeblocks 10.05 y queremos instalarlo en nuestra PC seguimos los siguientes pasos:

  1. Abrimos una terminal y nos “pocisionamos” (cd) en la carpeta donde está este paquete.
  2. Escribimos en la terminal:
$ sudo dpkg --install codeblocks_10.05-2_i386.deb

y escribimos la contraseña de superusuario.

  1. Si no tenemos conflictos con dependencias se nos informará de cuanto espacio ocupará el programa una vez instalado y nos preguntará si queremos continuar, aceptamos exribiendo Y ó S.

Con estos pasos dpkg' instalará automáticamente el paquete y una vez terminada la instalación podremos ejecutar el programa codeblocks. El software que se instala no tiene un directorio fijo por que esto depende del programa o biblioteca que instalamos. Aunque podremos encontrar el ejecutable del programa instalado generalmente en el directorio /usr/bin.

El proceso para instalar bibliotecas es el mismo con dpkg ya que las bibliotecas también son empaquetadas en archivos .deb.

Si existieran problemas de dependencias (programas o bibliotecas que faltan) dpkg no instalará el programa y nos mostrará un mensaje de error con las dependencias no satisfechas. Si sólo usamos dpkg tendríamos que buscar esas dependencias manualmente en internet u obtenerlas de alguna forma. Se pueden obtener muchos paquetes de instalación en el repositorio Debian en http://www.debian.org/distrib/packages o http://packages.debian.org/stable/.

Afortunadamente existen otras herramientas de más alto nivel como apt y synaptic que se encargan de resolver dependencias simplificando el proceso de instalación.

APT

APT es una suite de herramientas que incluyen el programa apt-cache que provee información de paquetes y dependencias, apt-get se encarga de realizar operaciones de instalación, búsqueda de dependencias, actualización, y desinstalación de paquetes de software.

A diferencia de dpkg, APT puede resolver dependencias lo que quiere decir que encuentra los programas que no están en el computador pero hacen falta para instalar un paquete.

Esta tarea de búsqueda de dependencias se hace comprobando en una lista de repositorios que se especifíca en el archivo /etc/apt/sources.list. Si se cuenta con conexión a Internet aceptable, la instalación y actualización de software es muy sencilla, por que APT utilizará la lista de repositorios en /etc/apt/sources.list para buscar todos los paquetes y en este archivo se incluye la dirección del sitio oficial de la distribución (en este caso Debian7) que contienen una gran cantidad de paquetes estables y probados.

apt-cache

si sólo queres información de un paquete a instalar apt-cache esta diseñado para eso por que usa el caché del sistema manejador de paquetes, este programa se abre vía línea de comandos y su sintaxis es:
 apt-cache [opciones] paq1 [paq2 ...]
Donde paq es el paquete que pueden ser varios separados por un espacio. Las opciones escenciales de apt-cache son:
  • showpkg → Muestra información del paquete.
  • stats → Muestra estadísticas del paquete como cuantas dependencias ya están instaladas y otras.
  • unmet → Busca y muestra las dependencias faltantes.
    • Por ejemplo:
      $ apt-cache unmet samba

que muestra:

 El paquete samba versión 2:3.6.3-2ubuntu2.9 tiene dependencias incumplidas:
 Reemplaza: samba-common (<= 2.0.5a-2)
 Reemplaza: samba-common:i386 (<= 2.0.5a-2)
 
  • pkgnames → Muestra todos los nombres de paquetes, si seguido de pkgnames se escribe un párametro como por ejemplo
    $ apt-cache pkgnames recor

monstrará todos los paquetes que empiezan con ese parámetro, en este caso mostró:

recorditnow
recordmydesktop 

apt-get

Este programa apt-get permite instalar paquetes rápidamente buscando en /etc/apt/sources.list y como generalmetne este acrhivo contiene la lista de repositorios accesibles por internet, con una buena conexión a internet es muy fácil realizar esta tarea.

Sin embargo, en /etc/apt/sources.list se puede especificar otras direcciones como un DVD, redes de área local, etc, esto lo describiremos más adelante.

La sintaxis de apt-get es:

apt-get [opciones][orden] [nombre(s) de paquete(s)]

apt-get tiene una larga lista de opciones que se pueden ver rápidamente escribiendo apt-get -h o man apt-get.

Si queremos instalar el programa filezilla que es un gestor FTP usando apt-get deberíamos escribir lo siguiente:
$ sudo apt-get install filezilla
Como a se sabe no se puede instalar o desinstalar progras sin ser superusuario por eso sudo.

Lo que esta ordén hace es indicarle a apt-get que instale el programa filezilla, pero a diferencia de dpkg, al encontrar dependencias faltantes apt-get las buscará en los repositorios de /etc/apt/sources.list. Una vez las encuentre, procederá a descargar el paquete junto a todas sus dependencias faltantes. Una vez descargue las dependencias se procederá a la instalación del programa.

Al terminar todo este proceso, tendremos el programa en este caso filezilla instalado y listo para usar todo con una simple línea.

Para desinstalar un programa también podemos usar apt con la opción remove así:
$ sudo apt-get remove filezilla
Que desinstalará filezilla.

Synaptic

Synaptic es un programa GUI (con interfaz gráfica de usuario) al igual que apt resuelve dependencias y facilita el proceso de instalación. Como apt, snynaptic busca los paquetes en la lista de repositorios especificada en /etc/apt/sources.list. Si synaptic no está instalado hay que hacerlo primero con
$ sudo apt-get install synaptic
La interfaz de Synaptic es así:
Synaptic1.jpg

Para instalar un programa hay que escribir su nombre o una palabra clave con la que este relacionado en el filtro de búsqueda y aparecerá una lista de paquetes que coinciden.

Por ejemplo para instalar zim (un programa editor de texto basado en wikis), luego de escribir zim para instalarlo primero se hace click derecho en su nombre y se escoge la opción marcar paquete para instalar. Synaptic buscará automáticamente sus dependencias y nos preguntará si también queremos instalarlas, aceptamos y al final deberá quedar una pantalla similar a esta:

Finalmente se hace click en el botón aplicar, synaptic descargará los paquetes marcados y los instalará. Este software tiene muchas opciones y aprovecharemos otras de estas a lo largo del curso.

Synaptic2.jpg

Usando el script generador de descargars (cunado no se tiene conexión a Internet)

Si no se cuenta con conexión a Internet y se desea instalar un programa específico, se puede usar synaptic para ayudarnos a saber que paquetes de software hacen falta, para esto usaremos una funcionalidad que se llama generar script de descarga de paquetes siguiendo estos pasos:

  1. Escribir el nombre del programa.
  2. Marcar el porgrama para su instalación.
  3. Marcar también las dependencias que synaptic encontró automáticamente.
  4. Ir a Archivo → Generar un Script de descarga de paquetes.
  5. Guardar el Script en un medio extraíble ().
  6. Ejecutar el Script en otra computadora con conexión a Internet.
Synaptic3.png



El contenido del script es una serie de comandos con los paquetes faltantes por ejemplo así:

 #!/bin/sh
wget -c http://us.archive.trisquel.info/trisquel/pool/main/g/gnome-python-extras/python-gtkspell_2.25.3-11_i386.deb
wget -c http://us.archive.trisquel.info/trisquel/pool/main/z/zim/zim_0.54-1_all.deb

Una vez tengamos los archivos .deb descargados, los copiamos en una carpeta vacía en nuestra PC, abrimos una terminal y nos poscicionamos en esa carpeta y ejecutamos el siguiente comando:

sudo dpkg --install *.deb

dpkg instalará todos los paquetes que terminen en .deb, es decir los paquetes que descargamos. Una vez instalados, el programa que queríamos utilizar ya puede usarse.

Agregando software desde fuentes externas

Se trata de modificar el origen o repositorios oficiales según nuestra necesidad. Puede darse el caso que por ejemplo se este utilizando una una versión no actual de una distribución. Al instalar GNU/Linux el archivo /etc/apt/sources.list viene escrito con una lista de repositorios oficiales por defecto de la versión de la distribución. Si por alguna razón estos repositorios ya no tienen soporte o no se actualizan con la rapidez que buscamos podemos hacer añadir a /etc/apt/sources.list otra lista de repositorios para que busque determinados paquetes.

Por ejemplo este es el contenido del archivo sources.list que viene por defecto en la distribución Trisquel mini 6.0:
# Trisquel repositories for supported software and updates

deb http://us.archive.trisquel.info/trisquel/ toutatis main
deb-src http://us.archive.trisquel.info/trisquel/ toutatis main
deb http://us.archive.trisquel.info/trisquel/ toutatis-security main
deb-src http://us.archive.trisquel.info/trisquel/ toutatis-security main
deb http://us.archive.trisquel.info/trisquel/ toutatis-updates main
deb-src http://us.archive.trisquel.info/trisquel/ toutatis-updates main
Contiene la lista de repositorios oficiales para el manejo de software por defecto. Pero supongamos que estamos en el caso en que nuestra PC es “antigua” y cierto programas de los repositorios de la version 6.0 de Trisquel no funcionan correctamente en nuestra computadora. Entonces decidimos probar una versión anterior en este caso Trisquel 5.0 para ver si los paquetes de esa versión funcionan correctamente en nuestra computadora. Buscando en Internet se puede encontrar repositorios de las versiones anteriores de las distribuciones entonces encontramos que la dirección URL de esos repositorios son:
deb http://archive.trisquel.info/trisquel dagda main
deb-src http://archive.trisquel.info/trisquel dagda main
deb http://archive.trisquel.info/trisquel dagda-updates main
deb-src http://archive.trisquel.info/trisquel dagda-updates main
deb http://archive.trisquel.info/trisquel dagda-security main
deb-src http://archive.trisquel.info/trisquel dagda-security main
deb http://archive.trisquel.info/trisquel dagda-backports main
deb-src http://archive.trisquel.info/trisquel dagda-backports main
Correpsondientes a Trisquel 5.0. Ahora para indicarle a nuestro sistema manejador de paquetes que busque en los repositorios de Trisquel 5.0 en lugar que en los de la versión 6.0 editamos el archivo /etc/apt/sources.list con privilegios de superusuario y lo dejamos así:
# Trisquel repositories for supported software and updates
#------ Estos son los repositorios de la Versión 6.0 todos van a ser comentados con " # " para que no se tomen en cuenta -----
#deb http://us.archive.trisquel.info/trisquel/ toutatis main
#deb-src http://us.archive.trisquel.info/trisquel/ toutatis main
#deb http://us.archive.trisquel.info/trisquel/ toutatis-security main
#deb-src http://us.archive.trisquel.info/trisquel/ toutatis-security main
#deb http://us.archive.trisquel.info/trisquel/ toutatis-updates main
#deb-src http://us.archive.trisquel.info/trisquel/ toutatis-updates main
#deb http://us.archive.trisquel.info/trisquel/ toutatis-backports main
#deb-src http://us.archive.trisquel.info/trisquel/ toutatis-backports main
#------------ Estos son los repositorios de la Versión 5.0 los que ahora queremos probar ----------------
deb http://archive.trisquel.info/trisquel dagda main
deb-src http://archive.trisquel.info/trisquel dagda main
deb http://archive.trisquel.info/trisquel dagda-updates main
deb-src http://archive.trisquel.info/trisquel dagda-updates main
deb http://archive.trisquel.info/trisquel dagda-security main
deb-src http://archive.trisquel.info/trisquel dagda-security main
#deb http://archive.trisquel.info/trisquel dagda-backports main
#deb-src http://archive.trisquel.info/trisquel dagda-backports main
Lo que hicimos fue copiar los repositorios de la 5.0 y pegar en /etc/apt/sources.list, comentando los originales. Una vez guardado podemos ahora instalar software de la versión 5.0 usando synaptic, apt-get u otra herramienta.

Editar /etc/apt/sources.list es muy versátil pudiendo especificar no sólo sitios oficiales.

  • Podemos añadir listas de repositorios de otras distribuciones con paquetes .deb.
  • Podemos añadir direcciones locales (de nuestra computadora o medio extraíble como CD/DVD)
Podemos añadir direcciones de una LAN (Red de área local)

Hay otras posbilidades, sin embargo es recomendable śolo añadir direcciones confiables como medida de seguridad, ya que al añadir un sitio estamos diciendolé al sistema que confie plenamente en el contenido que este sitio alberga.

Usando repositorios locales (UMSA)

Como no todos cuentan con internet y más aún con buena conexión a internet como para realizar la descarga de paquetes para instalar programas hemos habilitado en un servidor de la red local de la carrera de informática de la UMSA que contiene los repositorios de las ramas main y contrib de Debian 7.2.0 para arquitecturas i386 y amd64.

Este servidor puede usarse como repositorio local para que los estudiantes y docentes de esta institución descarguen programas. La velocidad de descarga no se limita a la de un internet pues se usa la red local de la carrera.

Para instalar programas usando el servidor de la UMSA se necesitan una serie de pasos simples pero teniendo en cuenta que el repositorio de programas y bibliotecas funcionará correctamente sólo en versiones de Debian 7.2.0, otras distribuciones o versiones de esta distribución podrían no funcionar correctamente al instalar programas de este repositorio.

Pasos para usar el repositorio local

Estar conectado a la red local de la carrera de la UMSA

Conectar la PC o laptop con Debian 7.2.0 a la red local.

Editar sources.list

El archivo que contiene las direcciones de repositorios /etc/apt/sources.list para el manejador de paquetes de Debian deberá ser modificado, añadiendo las siguientes líneas a este archivo:

Si la arquitectura de la versión de Debian 7.2.0 es i386:
#repositorio local de la carrera UMSA i386
deb http://192.168.17.253/dvd32-1/debian wheezy main contrib
deb http://192.168.17.253/dvd32-2/debian wheezy main contrib
deb http://192.168.17.253/dvd32-3/debian wheezy main contrib
deb http://192.168.17.253/dvd32-4/debian wheezy main contrib
deb http://192.168.17.253/dvd32-5/debian wheezy main contrib
deb http://192.168.17.253/dvd32-6/debian wheezy main contrib
deb http://192.168.17.253/dvd32-7/debian wheezy main contrib
deb http://192.168.17.253/dvd32-8/debian wheezy main contrib
deb http://192.168.17.253/dvd32-9/debian wheezy main contrib
deb http://192.168.17.253/dvd32-10/debian wheezy main contrib
En cambio si la arquitectura fuera amd64:
#repositorio local de la carrera UMSA amd64
deb http://192.168.17.253/dvd64-1/debian wheezy main contrib
deb http://192.168.17.253/dvd64-2/debian wheezy main contrib
deb http://192.168.17.253/dvd64-3/debian wheezy main contrib
deb http://192.168.17.253/dvd64-4/debian wheezy main contrib
deb http://192.168.17.253/dvd64-5/debian wheezy main contrib
deb http://192.168.17.253/dvd64-6/debian wheezy main contrib
deb http://192.168.17.253/dvd64-7/debian wheezy main contrib
deb http://192.168.17.253/dvd64-8/debian wheezy main contrib
deb http://192.168.17.253/dvd64-9/debian wheezy main contrib
deb http://192.168.17.253/dvd64-10/debian wheezy main contrib

Guardar los cambios en el archivo.

Actualizar los cambios en el sistema manejador de paquetes

Como hemos modificado /etc/apt/sources.list, hace falta informarle al sistema manejador de paquetes de esto:

# apt-get update

Esta orden acutalizará la base de datos del sistema manejador de paquetes para que podamos hacer uso del nuevo repositorio.

Instalar programas y/o bibliotecas

Hecho todo lo anterior sólo hace falta usar el servidor como repositorio de descarga para instalar programas por cualquiera de los métodos descritos anteriormente.

Compartición de bibliotecas

Al igual que los programas las bibliotecas en GNU/Linux tambíen se comparten, así logra un menor consumo de recursos, para entender esto mejor se deben entender algunos conceptos:

Lo que se conoce como bibliotecas son colecciones de funciones implementadas que se usan por programas y son llamadas por estos según sea necesario. Los progradores son los que escogen que bibliotecas usar para facilitarse el trabajo de programación en lugar de codificar todo ellos mismos. La biblioteca más usada en GNU/Linux es libc (C library) y muchos programas utilizan sus funciones lo que facilita el desarollo de nuevo software usando libc para que haga tareas comunes pero que codificar desde cero sería un esfuerzo colosal.

Casi la totalidad de los paquetes distribuidos en GNU/Linux no incluyen estas bibliotecas, en lugar de eso listan las bibliotecas que usan como dependencias. Al hacer esto se permite reutilizar la biblioteca si otro programa la utiliza en lugar de instalarla multiples veces. Al hacer esto se logra entre otras cosas:

  • Reducir el uso de espacio en el disco duro y memoria RAM.
  • Si muchos programas usan la misma biblioteca en general se obtienen mejoras de rendimiento, cuando la biblioteca se actualiza.

En windows las bibliotecas dinámicas .dll son similares a las bibliotecas compartidas pero en GNU/Linux tiene la extensión .so que viene de shared object (objeto compartido). En cambio una biblioteca que no se comparte se conoce como biblioteca estática y tiene la extensión .a.

Aunque se obtiene muchas mejoras en rendimiento y uso de memoria al compartir bibliotecas, se pueden tener algunos problemas:

  • Cuando se actualiza una biblioteca, algunos programas pueden funcionar de forma incorrecta o dejar de funcionar.
  • Si por error se borran las bibliotecas de las que dependián muchos programas esos programas pueden dejar de funcionar.
  • En un caso extremo el sistema podría dejar de iniciarse.

El archivo /etc/ld.so.conf donde se especifican las rutas donde el sistema debe buscar bibliotecas compartidas y aquí se pueden adicionar rutas de confianza adicionales para la búsqueda de bibliotecas.

Las bibliotecas también tienen una utilidad para mostrar dependencias y es el comando ldd. Por ejemplo si tenemos instalado el programa anjuta (IDE de desarrollo) para ver de que bibliotecas depende ejecutamos el comando:
ldd -v /usr/bin/anjuta
Qué mostrará en pantalla con detalle las bibliotecas de las que depende anjuta para funcionar y cual es su ubucación. Una ubicación de confianza por defecto es /lib. Usualmente los problemas con las bibliotecas son a causa de que el sistema no pueda encontrar la ubiación de esta, si la bilbioteca está instalada y aún así un programa no puede encontrarla posiblemente sea un conflicto con el nombre de la biblioteca por ejemplo. Para solucionar esto, se puede actualizar el cache y los links usando ldconfig sin argumentos en con permisos de superusuario. También si esto fallará se puede crear un vínculo simbólico en caso de que haya conflictos con nombres de bibliotecas actualizadas o algo por el estilo. Esto se hace con ln y la opción -s que crea vínculos simbólicos. Así por ejemplo si al ejecutar un programa este espera que este instalada la biblioteca de nombre ld-linux-x86-64.so.2 pero el sistema tiene instalada la biblioteca ld-linux-x86-64.so.2.1 que por así decirlo representa la misma bilioteca pero el programa espera el primer nombre, entonces para satisfacer las expectativas del programa, abrimos una terminal en la dirección donde esta esta biblioteca y usamos en modo (root o superusuario):
# ln -s ld-linux-x86-64.so.2 ld-linux-x86-64.so.2.1
Que creará un vínculo simbólico entre ld-linux-x86-64.so.2.1 y ld-linux-x86-64.so.2, así el programa se ejecutará utilizando la segunda biblioteca ld-linux-x86-64.so.2.1 que tenemos instalada, después sólo debemos ejecutar
# ldconfig
Para actualizar el caché de las bibliotecas y el vínculo que creamos quedará guardado. Ver otros sitios de interés (más abajo) para mayor información.

Introducción a la administración de procesos

Cuando se ejecuta un programa al mismo tiempo se crea un proceso que son genstionados por el SO. En GNU/Linux es posible identificar, manejar procesos en en primer y segundo plano, matar procesos y ajustar prioridades. Este es un tema extenso y en este curso veremos como identificar y matar procesos brevemente.

Identificar procesos

El comando ps es una utilidad muy poderosa para esto si abrimos una terminal y lo usamos podemos obtener información importante que nos ayudará a tener mejor idea de como se manejan los procesos en la máquina y su sintaxis es simple pero posee una gran cantiad de opciones y aplicaciones.
ps [opciones]
Aquí algunas opciones:
  • -A→ Muestra todos los procesos.
  • --user [usuario]→ Muestra los procesos del usuario especificado.
  • -f→ Información detallada.
  • u→ Detallado orientado a usuario.
  • --help → Información rápida
  • --forest → Muestra en forma de árbol de procesos
  • w → Se ajusta al ancho de la pantalla
  • -l → salida larga con muchos detalles.

Las opciones pueden combinarse según su tipo, donde las opciones con - son opciones UNIX, las que no tienen guión son opciones BSD y las con dos guiones -- son GNU. Sin embargo pueden darse conflictos al combinar opciones que no son del mismo tipo.

por ejemplo si escribimos:
$ ps -Af
Nos mostrará todos los procesos de todos los usuarios detalladamente.
$ ps --user gensu --forest
Nos mostrará todos los procesos del usuario gensu en forma de árbol de procesos
$ ps u -A --user root --forest
Mostrará todos los procesos del usuario root detallado orientado al usuario que los usa y en forma de árbol. La salida de ps se muestra en columnas entonces puede que la pantalla no alcance para ver todo el detalle, para eso conviene guardar esa salida en un archivo y luego revisar el archivo con el editor de textos de preferencia, su puede hacer con:
$ ps -Al --forest > salida.txt
Entonces, si revisamos el contenido del archivo salida.txt y en realidad de cualquier salida de ps veremos estas columnas que representan datos importantes sobre los porecesos.
Columna
Función
USER El nombre del usuario que ejecuta el programa
PID Un número que identifica al proceso
PPID Un número que identifica al proceso padre de este proceso
TTY Terminal bajo la que corre el proceso
%CPU Uso del CPU
%MEM Uso de la memoria
NI Piroridad del proceso (se muestra con -l) mientras menor el número más prioridad tiene
CMD* El comando usado para abrir el proceso

El PID es un dato muy importante por que a partir de este se puede manejar el procesos y todos sus derivados ya sea para analizarlos, matarlos, cambiarles la prioridad, etc usando las herramientas adecuadas.

Existe tambíen otro programa llamdo top que muestra una tabla completa con los procesos del sistema se termina con ctrl+c.

Matando procesos

Para matar un proceso es bueno saber el PID que le corresponde y usar la herramienta kill que envía señales para matar a un proceso identificado por su PID. Es importante saber que un usuario normal no puede matar procesos de un superusuario o grupo de administradores, en cambio un superusuario tiene todo el control.

La sintaxis de kill es:

kill -s [señal] pid

Si no se especifica señal por defecto es 15 SIGTERM que sale del proceso pero permite cerrar archivos abiertos, se pueden ver otras señales con man kill.

kill es útil para terminar procesos problemáticos, por ejemplo si la computadora se cuelga o está extrañamente lenta para terminar con el proceso que ocasiona esto seguimos estos pasos:

  1. Abrimos una tty (aunque puede ser también un emulador de terminal aunque esto no siempre es posible debido al uso del CPU) con ctrl+alt+F1 para entrar en la terminal y ctrl+alt+F7 o ctrl+alt+F8 para volver a la interfaz gráfica.
  2. Nos logueamos con nombre de usuario y contraseña (preferiblemente superusuario)
  3. Ejecutamos top ó ps como se describe más arriba.
  4. Revisamos que proceso esta consumiendo la mayor cantidad de CPU o demasiada memoria RAM que puede ser el causante de que la PC haya entrado en ese estado.
  5. Para rastrear completamente al proceso podemos usar la opción --forest en ps y ver a que procesos está asociado el proceso problemático.
  6. Ya detectando ese proceso, será necesario tomar en cuenta su PID.
  7. Ejecutamos kill con una señal para terminarlo poniendo como argumento el PID del proceso.
  8. Una vez terminado el proceso comprobamos que la PC vuleve a funcionar correctamente volviendo a la interfaz gráfica con (ctrl+alt+F7)
Esto nos puede ayudar pero matar un proceso problemático no siempre es la mejor opción, se puede detener el proceso o asignarle otra prioridad, pero estos temás no se abordarán en este curso, vea los sitios de ayuda para más información.

Monitor de sistema

Adicionalmente para terminar un proceso por su nombre se puede usar la herramienta killall en lugar de kill aunque existen también programas GUI para manejar procesos uno de ellos es gnome-system-monitor, esta herramienta permite administrar los procesos de manera mas “amigable”.

Construcción de un prorama desde su código fuente

Es la mejor opción para instalar un programa si se trata de obtener el mejor rendimiento y personalización.

Esto es, obtener el código fuente del programa y construir los binarios usando herrameintas de construcción. Los binarios obtenidos estarán de acuerdo a como se configuran las opciones de construcción que uno mismo puede ajustarlas, estos binarios son de mejor calidad para nuestra computadora por que se construyen de acuerdo a sus características y necesidades específicas.

Una herrameinta de construcción quizá la más utilizada es GNU Make o también llamada make.

(continuar)

Otros sitios de ayuda

Continuar con el curso