Gestión del software instalado

per Victor Carceler darrera modificació 2020-03-25T15:30:35+01:00

El SO operativo controla de manera eficiente el hardware del sistema informático. Pero normalmente, salvo el administrador del sistema, los usuarios no trabajan directamente con el SO, sino con aplicaciones instaladas. Así por ejemplo un arquitecto puede trabajar con una aplicación de CAD, y realizar bien su función, con independencia del SO en el que se ejecuta. Cuando el sistema informático presta servicios en red, todavía se hace más irrelevante para el usuario qué SO ejecuta. A los usuarios no les suele preocupar el SO sobre el que se ejecuta el servidor web que les envía su web favorita.

Así una vez que el SO está correctamente instalado y configurado, es el momento de instalar aplicaciones. Los detalles de instalación pueden variar dependiendo del SO y de la aplicación a instalar, pero podemos encontrar aspectos comunes a distintos casos:

Formas de distribución de software:

 

Código fuente
La aplicación no viene en su  forma compilada, por tanto no puede ejecutarse directamente. Antes de ejecutar la aplicación es necesario compilarla. Se requieren las herramientas de desarrollo (compilador, ensamblador, enlazador, ficheros de cabecera...) para compilar la aplicación. Durante el proceso de compilación se puede decidir sobre diferentes opciones, normalmente se decide si la aplicación ha de incluir soporte sobre características opcionales.

Al contar con el código fuente:
  • Es posible modificar la aplicación antes de compilarla
  • La aplicación puede ser portada a otro SO o a otra arquitectura hardware
  • Cuando se compila no se obtiene un ejecutable genérico, sinó uno optimizado para nuestro hardware
Forma binaria
La aplicación se distribuye compilada, lista para ejecutar. Por lo tanto no es necesario contar con las herramientas de desarrollo, pero tampoco se puede modificar la aplicación o portarla a otro SO o arquitectura diferente. Además cuando se distribuyen aplicaciones en forma binaria, se suelen utilizar ejecutables genéricos para un grupo de procesadores. Por ejemplo, una aplicación puede compilarse para el µP Pentium, de manera que sólo utilizará las características de ese µP aunque nosotros contemos con uno superior.

Dependencias:

El desarrollo de software se realiza de forma modular. Se construyen bibliotecas (o librería) con funciones comunes a muchos programas. Por ejemplo, las bibliotecas GTK+ o QT se utilizan en las aplicaciones de los entornos Gnome y KDE.  Cuando  una aplicación quiere presentar al usuario un diálogo gráfico para que escoja un fichero, la aplicación invoca la función correspondiente de la bibliteca GTK+ o QT según corresponda. Así el tamaño de las aplicaciones se puede reducir, pero se introduce una dependencia. La aplicación no se puede ejecutar si no se encuentra la biblioteca que necesita.

También pueden ocurrir otro tipo de dependencias. Una aplicación puede necesitar que esté otra instalada que proporcione determinada función.

Por ejemplo, una aplicación web puede requerir:

  • Un servidor web como Apache
  • Un intérprete de PHP
  • Acceso a un servidor de bases de datos relacional como MySQL

 

Sistema de gestión de software del SO

Si se va a instalar una pequeña aplicación o script, basta con copiarla en algún sitio en el que se pueda escribir. En GNU/Linux cualquier usuario puede poner fichero esjecutables en su propio directorio ~/bin, si se es el administrador se puede escribir en cualquier otro sitio.

En cuanto la aplicación tenga cierto tamaño, su instalación puede requerir de varios pasos (copiar ficheros en determinados sitios, modificar ficheros de configuración, crear usuarios y grupos, etc..). Así que la instalación manual, aunque siempre es posible, puede resultar laboriosa y puede ser fácil cometer algún error durante su realización.

Por ello el SO cuenta con herramientas para automatizar el proceso de instalación.

La gestión de software de un SO se encarga de:

  • Presentar un repositorio, o colección, de paquetes listos para instalar. El formato de los paquetes dependerá del sistema de gestión de software que se utilice, pero en cualquier caso un paquete es algo que se puede instalar/desinstalar/actualizar y contiene software adaptado  para nuestro SO.
  • La resolución de dependencias. Cuando queramos instalar el componente A que precisa B, el SO nos lo advertirá.
  • Comprobar la integridad del paquete y de los datos que contiene
  • Realizar la instalación, actualización y eliminado de los paquetes


El formato de los paquetes, los repositorios de software, la herramienta de gestión de dependencias o la herramienta utilizada para manejar los paquetes puede variar en función del SO.

Ejemplos:

 

GNU/Linux
Logo de RPM
Algunos formatos de paquetes muy extendidos son RPM y DEB, con gestores de dependencias como urpmi, apt o yum. Otras distribuciones, como Gentoo, optan por utilizar distribuciones de software en código fuente. Para ello utiliza el sistema Portage que está inspirado en el método de distribución de software de los BSD.
MacOSX
Logo de Apple para el binario universal
El software oficial se acostumbra a entregar en ficheros imágen .dmg, cada uno de estos ficheros permite montar un disco ram con el software a instalar en su interior. La instalación suele consistir en arrastrar el programa desde el disco ram hasta la carpeta aplicaciones del sistema. En Mac OS X, muchos programas son un sólo fichero, pues se compilan de forma estática con las librerias que utilizan. También es posible instalar software típico de Unix mediante Fink. Durante la transición entre PPC y x86, Apple distribuía programas en un formato llamado binario universal con las instrucciones para las dos famílias de procesadores.
Windows
Las versiones actuales de Windows utilizan Windows Installer como sistema de gestión de software. Los paquetes tienen la extensión .msi y también se utiliza una base de datos que lleva la cuenta de qué ficheros están instalados en el sistema y qué aplicación los instaló. De esta forma  se intenta mitigar el problema conocido como DLL HELL.

 

Manipulación de paquetes rpm

Aunque las distribuciones de GNU/Linux incorporan diferentes asistentes para facilitar la gestión de software, el trabajo de instalar/desinstalar lo acaba realizando la herramienta rpm, o si se utilizan paquetes .deb la herramienta dpkg.

Esta es una herramienta de bajo nivel, se puede utilizar para:

  • Instalar un paquete: rpm -i <paquete.rpm>
  • Actualizar un paquete con una versión más nueva: rpm -U <paquete.rpm>
  • Eliminar un paquete: rpm -e <paquete>
  • Obtener información sobre: (rpm -q)
    • Las características de un paquete
    • Los paquetes instalados
    • Dado un fichero del sistema, qué paquete lo instaló ?
  • Realizar chequeos y pruebas de integridad.
  • Simular la realización de operaciones.


Para lograr su función, la herramienta rpm consulta una base de datos con información sobre los paquetes instalados en el sistema, que se encuentra en /var/lib/rpm. No debemos alterar manualmente esta base de datos, es la propia herramienta rpm quien gestiona su uso.

Los paquetes .rpm tienen el siguiente formato:

Propiedad
Formato
nombre Indica el software empaquetado, la versión, la arquitectura y tal vez la distribución.
Por ejemplo:
banner-1.3.1-1mdk.i586.rpm
Programa: banner Versión 1.3.1 Versión del paquete: 1
Distribución: Mandriva GNU/Linux
Arquitectura: i586
datos Archivos de la aplicación comprimidos. Puede distribuirse el código fuente de la
aplicación o bien en forma binaria. Hay paquetes que únicamente incluyen documentación.
fecha
De realización y publicación
descripciones
Del paquete y de la aplicación que contiene
autor Información de quien realizó el paquete
checksum MD5
Código que permite comprobar la integridad del paquete
dependencias
Otros paquetes requeridos para instalar este
scripts
La instalación de un paquete no se limita a copiar sus contenidos, también se pueden ejecutar
ciertas acciones, como crear usuarios, grupos, etc...

En el caso de Mandriva Linux, las herramientas urpmi gestionan automáticamente las dependencias de los paquetes rpm. Cuando se utilizan paquetes .deb la herramienta análoga es apt-get.

 

Más información