Instalación de software
Siendo la nuestra una compañía de software, tenemos un buen conocimiento de instalación de software en Windows (en realidad, algunos más que otros).
En el sistema operativo de Microsoft es prácticamente obligado mantener una política de instalación estándar para que un software sea aceptado en muchas de las organizaciones que lo despliegan. De hecho, Windows Installer y los archivos de instalación .msi son prácticamente exigidos por cualquier técnico de sistemas de cualquier organización.
En UNIX, no hay un estándar tan claro. Es más frecuente encontrarse las siguientes situaciones:
- Software distribuído como código fuente que hay que compilar. Hay que estar familiarizado con el comando configure, make (o más frecuentemente gmake) y tener instalado el compilador de C++ (gcc suele ser el que triunfa en estas cosas). Cuando tenemos un error, tendremos que recurrir a nuestro conocimiento de desarrollo C++ en UNIX multiplataforma para arreglarlo, lo que convierte en difícil cualquier esfuerzo de "portabilidad".
- Software del que se distribuyen los binarios "sueltos": Por ejemplo, Apache Tomcat. Se distribuye un fichero.tar.gz, que descomprimimos y desempaquetamos, como vimos en un capítulo anterior, y posteriormente configuramos manualmente, con nuestro editor. También es frecuente que el sofware venga acompañado por un script, Korn Shell, Perl o similar, para realizar una configuración básica de sus ficheros de configuración, etc.
- Software que se proporciona con los binarios empaquetados por un instalador que "emula" los de Windows (por ejemplo una interfaz Java). Este instalador puede ir desde a realizar una configuración sencilla en el software distribuido, a requerir instalarse como superusuario y hacer todo tipo de configuraciones, no sólo en el software, sino también en el sistema (como los instaladores de grandes productos de IBM tipo WebSphere).
- Software empaquetado con el estándar de paquetes del sistema. Desafortunadamente, el estándar de paquetes de sistema requiere la instalación como superusuario (cosa que no siempre es necesaria para un software). También hay que tener en cuenta que cada sistema UNIX ha decidido que la forma estándar de instalar paquetes es distinta.
Estándares de paquetes
Solaris:
En Solaris el sistema de instalación estándar de los paquetes se origina atrás en System V. Los comandos para instalar paquetes empiezan por pkg*. Para ejecutar los comandos pkg* que listan el software o que transfieren de formato comprimido a formato expandido no se requieren privilegios especiales, pero para instalar o desinstalar, es necesario ser superusuario.
El famosísimo sitio de software de libre distribución http://sunfreeware.com tiene los paquetes en este formato.
Cuando Solaris se ramificó en OpenSolaris, se inventaron un nuevo sistema de packages, porque el sistema clásico va un poco mal con el tema de instalaciones distribuidas o de control de las dependencias.
Ejercicio:
Instalar un paquete de sunfreeware en un sistema Solaris
Paso 1: Descargar top-3.6.1-sol10-sparc-local.gz en, por ejemplo, $HOME/download
Paso 2: Descomprimir en directorio propio: gunzip $HOME/download/top-3.6.1-sol10-sparc-local.gz
Paso 3: Hacernos superusuario
Paso 4: Desempaquetar con pkgrans al directorio /var/spool/pkg: pkgtrans $HOME/download/top-3.6.1-sol10-sparc-local /var/spool/pkg
The following packages are available:
1 SMCtop top
(sparc) 3.6.1
Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]:
(si no queremos escribir en el spool, podemos hacerlo a cualquier otro directorio, no como root)
Paso 5: Instalar: pkgadd -d /var/spool/pkg
# pkgadd -d .
The following packages are available:
1 SMCtop top
(sparc) 3.6.1
Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]:
Processing package instance from
top(sparc) 3.6.1
LeFebvre et al
AIX: Los paquetes de AIX están empaquetados en un formato de fichero con extensión .bff conocido como Backup File Format. El comando que los instala se llama installp. Como siempre, es mucho más fácil hacer cualquier cosa con el smit que directamente con el comando, por la miríada de opciones que hay que aprenderse (es decir, todo el mundo prefiere invocar smit easy_install o smit install_software). Para listar los paquetes instalados, podemos usar smit list_installed_software, mucha gente se sabe el comando lslpp -a.
HP-UX: Para instalar software, se tiene una familia de comandos de utilización similar a la de Solaris, pero con mucha más complejidad. Los comandos empiezan por sw*. Listar el software con swlist nos produce una lista de todo lo que hay instalado. Los parches se instalan con estos comandos, y el sistema de gestión de sofware tenía una funcionalidad para conectarse a un repositorio de parches (software depot) y traérselos todos.
Linux: En el mundo Linux hay dos familias de empaquetamiento de software, la de Debian (ficheros .deb, se manejan con el comando dpkg) y la de Red Hat (Red Hat Package Manager, ficheros .rpm, se manejan con el comando rpm), que no sólo es utilizado por Red Hat, sino también por Fedora o SuSE.
Es relativamente fácil transformar un package de un formato a otro con herramientas como alien (kitenet.net/programs/alien), aunque mejor usar los packages relativos a nuestra distribución.
Por encima de los ficheros .rpm y .deb hay herramientas de gestión de sofware que nos instalan y desinstalan, preguntan y actualizan.
Por encima de todo esto aún existen herramientas que analizan dependencias entre paquetes (las metaherramientas), y que son capaces de realizar actualizaciones de red. Los principales son yum, que funciona con el sistema RPM, RHN que es específico para Red Hat Linux, y Debian Advanced Package Tool (APT), que aunque empezó trabajando con packages Debian ahora trabaja con todo.
El comando rpm: Instala, verifica, y pregunta. Antiguamente también construía packages, pero ahora la funcionalidad se ha pasado a un comando adicional llamado rpmbuild. Dependiendo de si entramos en modo instalación o pregunta (--install o --query), el comando tiene un comportamiento específico (opciones a ver: --install, --upgrade, --erase, o --query)
El comando dpkg: Lo mismo pero en el mundo Debian. Las opciones a ver son --install, --remove, y -l para listar los packages. Si instalamos uno que ya está instalado, nos sobreescribe sin piedad el anterior. Por ejemplo, supongamos que tenemos instalado el paquete nvi, y hacemos esto:
# dpkg --install ./nvi_1.79-16a.1_i386.deb
(Reading database ... 24368 files and directories currently installed.)
Preparing to replace nvi 1.79-14 (using ./nvi_1.79-16a.1_i386.deb) ...
Unpacking replacement nvi ...
Setting up nvi (1.79-16a.1) ...
Checking available versions of ex, updating links in /etc/alternatives ...
(You may modify the symlinks there yourself if desired - see 'man ln'.)
Leaving ex (/usr/bin/ex) pointing to /usr/bin/nex.
Leaving ex.1.gz (/usr/share/man/man1/ex.1.gz) pointing to
/usr/share/man/man1/nex.1.gz.
Como vemos, se enrolla como las persianas. Podemos emplear el flag -l para buscar por un patrón.
$ dpkg -l nvi
Desired=Unknown/Install/Remove/Purge
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
| / Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
| | / Name Version Description
+++-===========-==============-================================
i i nvi 1.79-16a.1 4.4BSD re-implementation of vi.
Meta gestion de packages: Las herramientas de meta gestión de paquetes sirven para simplificar la localización de paquetes, automatizar la instalación o actualización y facilitar la gestión de interdependencias. Quedémonos con los dos nombres yum y APT, sepamos que en Fedora12 por defecto viene yum, aunque APT con rpms también funcionaría.
Ejercicio de este tema
Instalar el cluster de parches recomendados en Solaris
Instalar un package de Solaris
Instalar un package rpm en Fedora12
Bibliografía:
Recomiendo la lectura del capítulo 12 de Nemeth et al.
Instalar el sistema operativo
Installing Linux and OpenSolaris. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
Netbooting PCs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
Setting up PXE for Linux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
Netbooting non-PCs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
Using Kickstart: the automated installer for Red Hat Enterprise Linux. . . 365
Setting up a Kickstart configuration file . . . . . . . . . . . . . . . . . . . . . . . . . 365
Building a Kickstart server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
Pointing Kickstart at your config file. . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Using AutoYaST: SUSE’s automated installation tool . . . . . . . . . . . . . . . . . 367
Automating installation with the Ubuntu installer . . . . . . . . . . . . . . . . . . . . 368
Installing Solaris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Network installations with JumpStart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
Network installations with the Automated Installer . . . . . . . . . . . . . . . . . . . 375
Installing HP-UX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
Automating Ignite-UX installations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
Installing AIX with the Network Installation Manager . . . . . . . . . . . . . . . . . . . . 380
Gestión de paquetes
Managing packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
Managing Linux packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
rpm: manage RPM packages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
dpkg: manage .deb packages in Ubuntu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
Using high-level Linux package management systems. . . . . . . . . . . . . . . . . . . . . 384
Package repositories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
RHN: the Red Hat Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
APT: the Advanced Package Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
apt-get configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
An example /etc/apt/sources.list file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
Creation of a local repository mirror. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
apt-get automation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
yum: release management for RPM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Zypper package management for SUSE: now with more ZYpp! . . . . . . . . . 392
Managing packages for UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Solaris packaging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
HP-UX packaging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
Software management in AIX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
Control de versiones, entornos de desarrollo
Revision control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
Backup file creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
Formal revision control systems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
Subversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Software localization and configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Organizing your localization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
Compiling locally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
Distributing localizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
Using configuration management tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
cfengine: computer immune system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
LCFG: a large-scale configuration system. . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
Template Tree 2: cfengine helper. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410
DMTF/CIM: the Common Information Model . . . . . . . . . . . . . . . . . . . . . . 410
Sharing software over NFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
Package namespaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
Dependency management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Wrapper scripts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413