Solaris: Crear un paquete pkg

OpenSolaris Dejar un comentario

Cualquiera que haya estado administrando Solaris se ha tenido que enfrentar alguna vez a la instalación de un paquete pkg, casi todo el software que existe para Solaris está en este formato. En este artículo vamos a ver, de forma superficial, cómo podemos crear nuestros propios paquetes pkg para Solaris, bien para distribuir nuestro propio software, bien para crear un paquete con software, el cual podamos distribuir facilmente por todas nuestras máquinas.

Comandos pkg

  • pkgadd, este comando lo utilizaremos para añadir nuevos paquetes.
  • pkgrm, cuando deseemos eliminar un paquete del sistema, debemos emplear este comando.
  • pkginfo, nos da información sobre los paquetes instalados en el sistema.
  • pkgchk, nos permite chequear el contenido de un paquete.

Crear el fichero de prototipos

Para crear un paquete pkg debemos crear un fichero con toda la información sobre los distintos ficheros que compondrán el paquete, este fichero se conoce como fichero de prototipos. Para crear el fichero de prototipos debemos hacer una lista de los ficheros del sistema que compondrán el paquete. Para nuestro ejemplo vamos a utilizar una utilidad que estoy desarrollando, los ficheros deben estar en los directorios, los cuales serán utilizados para su instalación una vez que el paquete sea creado.

Vamos a crear un paquete con los ficheros del directorio /usr/local/LWPutils/, si hacemos un find sobre el directorio podremos ver su contenido.

(root@huelva)# find /usr/local/LWPutils/
/usr/local/LWPutils/
/usr/local/LWPutils/bin
/usr/local/LWPutils/bin/lwpstat
/usr/local/LWPutils/src
/usr/local/LWPutils/src/Makefile.template
/usr/local/LWPutils/src/configure
/usr/local/LWPutils/src/lwpstat.1
/usr/local/LWPutils/src/lwpstat.1_EN
/usr/local/LWPutils/src/lwpstat.1_SP
/usr/local/LWPutils/src/lwpstat.c
/usr/local/LWPutils/src/sysc.h
/usr/local/LWPutils/src/Makefile
/usr/local/LWPutils/src/sysc.o
/usr/local/LWPutils/src/lwpstat
/usr/local/LWPutils/src/sysc.c
/usr/local/LWPutils/src/lwpstat.o
(root@huelva)#
(root@huelva)# find /usr/local/LWPutils/ -print > /tmp/LWPutils_files

Como podemos ver en la salida anterior, hemos utiliza el comando find para crear el fichero /tmp/LWPutils_files, este fichero lo utilizaremos para generar el fichero de prototipos.

(root@huelva)# cat files_LWPutils | pkgproto > LWPutils_prototype
(root@huelva)#
(root@huelva)# cat LWPutils_prototype
d none /usr/local/LWPutils 0700 root root
d none /usr/local/LWPutils/bin 0700 root root
f none /usr/local/LWPutils/bin/lwpstat 0700 root root
d none /usr/local/LWPutils/src 0700 root root
f none /usr/local/LWPutils/src/Makefile.template 0600 root root
f none /usr/local/LWPutils/src/configure 0700 root root
f none /usr/local/LWPutils/src/lwpstat.1 0600 root root
f none /usr/local/LWPutils/src/lwpstat.1_EN 0600 root root
f none /usr/local/LWPutils/src/lwpstat.1_SP 0600 root root
f none /usr/local/LWPutils/src/lwpstat.c 0600 root root
f none /usr/local/LWPutils/src/sysc.h 0600 root root
f none /usr/local/LWPutils/src/Makefile 0600 root root
f none /usr/local/LWPutils/src/sysc.o 0600 root root
f none /usr/local/LWPutils/src/lwpstat 0700 root root
f none /usr/local/LWPutils/src/sysc.c 0600 root root
f none /usr/local/LWPutils/src/lwpstat.o 0600 root root
(root@huelva)#

Ya hemos creado el fichero de prototipos, ahora crearemos el fichero con la información del paquete, este fichero lo llamaremos pkginfo y su contenido será tendrá los siguientes campos:

(root@huelva)# cat pkginfo
PKG="LWPutils"
NAME="Utility LWP 1.0"
VERSION="1.0"
ARCH="sparc"
CLASSES="none"
CATEGORY="utility"
VENDOR="http://jjmora.es"
PSTAMP="4thSep07"
EMAIL="jjmora@arrakis.es"
ISTATES="S s 1 2 3"
RSTATES="S s 1 2 3"
BASEDIR="/"
(root@huelva)#

Una vez creado el fichero pkginfo, añadimos la siguiente línea al fichero de prototipos /tmp/LWPutils_files

i pkginfo

Generamos el paquete

Ahora solo nos queda utilizar el comando pkgmk para generar el paquete, para ellos debemos crear un directorio, en el que se almacenará toda la información y ficheros que contendrá el paquete. Creamos un directorio en /tmp

(root@huelva)# cd /tmp
(root@huelva)# mkdir LWPutils
(root@huelva)# pkgmk -o -r / -d /tmp/LWPutils -f /tmp/LWPutils_prototype
## Building pkgmap from package prototype file.
## Processing pkginfo file.
WARNING: missing directory entry for
WARNING: missing directory entry for
## Attempting to volumize 16 entries in pkgmap.
part  1 -- 300 blocks, 21 entries
## Packaging one part.
/tmp/LWPutils/LWPutils/pkgmap
/tmp/LWPutils/LWPutils/pkginfo
/tmp/LWPutils/LWPutils/root/usr/local/LWPutils/bin/lwpstat
/tmp/LWPutils/LWPutils/root/usr/local/LWPutils/src/Makefile
/tmp/LWPutils/LWPutils/root/usr/local/LWPutils/src/Makefile.template
/tmp/LWPutils/LWPutils/root/usr/local/LWPutils/src/configure
/tmp/LWPutils/LWPutils/root/usr/local/LWPutils/src/lwpstat
/tmp/LWPutils/LWPutils/root/usr/local/LWPutils/src/lwpstat.1
/tmp/LWPutils/LWPutils/root/usr/local/LWPutils/src/lwpstat.1_EN
/tmp/LWPutils/LWPutils/root/usr/local/LWPutils/src/lwpstat.1_SP
/tmp/LWPutils/LWPutils/root/usr/local/LWPutils/src/lwpstat.c
/tmp/LWPutils/LWPutils/root/usr/local/LWPutils/src/lwpstat.o
/tmp/LWPutils/LWPutils/root/usr/local/LWPutils/src/sysc.c
/tmp/LWPutils/LWPutils/root/usr/local/LWPutils/src/sysc.h
/tmp/LWPutils/LWPutils/root/usr/local/LWPutils/src/sysc.o
## Validating control scripts.
## Packaging complete.
(root@huelva)#

Ya está el paquete creado, aunque su contenido esta en el directorio /tmp/LWPutils/LWPutils, tendremos que crear el fichero tar.

(root@huelva)# cd LWPutils/
(root@huelva)# ls
LWPutils
(root@huelva)# tar -cvf /tmp/LWPutils_1.0_SPARC.pkg.tar ./LWPutils
a ./LWPutils/ 0K
a ./LWPutils/pkgmap 2K
a ./LWPutils/pkginfo 1K
a ./LWPutils/root/ 0K
a ./LWPutils/root/usr/ 0K
a ./LWPutils/root/usr/local/ 0K
a ./LWPutils/root/usr/local/LWPutils/ 0K
a ./LWPutils/root/usr/local/LWPutils/bin/ 0K
a ./LWPutils/root/usr/local/LWPutils/bin/lwpstat 23K
a ./LWPutils/root/usr/local/LWPutils/src/ 0K
a ./LWPutils/root/usr/local/LWPutils/src/Makefile 1K
a ./LWPutils/root/usr/local/LWPutils/src/Makefile.template 1K
a ./LWPutils/root/usr/local/LWPutils/src/configure 1K
a ./LWPutils/root/usr/local/LWPutils/src/lwpstat 23K
a ./LWPutils/root/usr/local/LWPutils/src/lwpstat.1 2K
a ./LWPutils/root/usr/local/LWPutils/src/lwpstat.1_EN 2K
a ./LWPutils/root/usr/local/LWPutils/src/lwpstat.1_SP 2K
a ./LWPutils/root/usr/local/LWPutils/src/lwpstat.c 12K
a ./LWPutils/root/usr/local/LWPutils/src/lwpstat.o 9K
a ./LWPutils/root/usr/local/LWPutils/src/sysc.c 8K
a ./LWPutils/root/usr/local/LWPutils/src/sysc.h 1K
a ./LWPutils/root/usr/local/LWPutils/src/sysc.o 14K
(root@huelva)#

Ya tenemos nuestro paquete pkg listo para ser distribuido, podríamos comprimirlos con la utilidad gzip

Probar el nuevo paquete

Vamos a realizar un prueba para comprobar que todo ha funcionado correctamente y que nuestro paquete se puede instalar perfectamente en el sistema. Creamos un nuevo directorio /tmp/PRUEBAS/.

(root@huelva)# cd /tmp/
(root@huelva)# mkdir PRUEBA
(root@huelva)#
(root@huelva)# cp LWPutils_1.0_SPARC.pkg.tar ./PRUEBA/
(root@huelva)# cd PRUEBA/
(root@huelva)# ls
LWPutils_1.0_SPARC.pkg.tar
(root@huelva)# tar -xvf LWPutils_1.0_SPARC.pkg.tar
x ./LWPutils, 0 bytes, 0 tape blocks
x ./LWPutils/pkgmap, 1213 bytes, 3 tape blocks
x ./LWPutils/pkginfo, 197 bytes, 1 tape blocks
x ./LWPutils/root, 0 bytes, 0 tape blocks
x ./LWPutils/root/usr, 0 bytes, 0 tape blocks
x ./LWPutils/root/usr/local, 0 bytes, 0 tape blocks
x ./LWPutils/root/usr/local/LWPutils, 0 bytes, 0 tape blocks
x ./LWPutils/root/usr/local/LWPutils/bin, 0 bytes, 0 tape blocks
x ./LWPutils/root/usr/local/LWPutils/bin/lwpstat, 22836 bytes, 45 tape blocks
x ./LWPutils/root/usr/local/LWPutils/src, 0 bytes, 0 tape blocks
x ./LWPutils/root/usr/local/LWPutils/src/Makefile, 520 bytes, 2 tape blocks
x ./LWPutils/root/usr/local/LWPutils/src/Makefile.template, 518 bytes, 2 tape blocks
x ./LWPutils/root/usr/local/LWPutils/src/configure, 877 bytes, 2 tape blocks
x ./LWPutils/root/usr/local/LWPutils/src/lwpstat, 22836 bytes, 45 tape blocks
x ./LWPutils/root/usr/local/LWPutils/src/lwpstat.1, 1609 bytes, 4 tape blocks
x ./LWPutils/root/usr/local/LWPutils/src/lwpstat.1_EN, 1631 bytes, 4 tape blocks
x ./LWPutils/root/usr/local/LWPutils/src/lwpstat.1_SP, 1928 bytes, 4 tape blocks
x ./LWPutils/root/usr/local/LWPutils/src/lwpstat.c, 11652 bytes, 23 tape blocks
x ./LWPutils/root/usr/local/LWPutils/src/lwpstat.o, 8456 bytes, 17 tape blocks
x ./LWPutils/root/usr/local/LWPutils/src/sysc.c, 7679 bytes, 15 tape blocks
x ./LWPutils/root/usr/local/LWPutils/src/sysc.h, 60 bytes, 1 tape blocks
x ./LWPutils/root/usr/local/LWPutils/src/sysc.o, 13316 bytes, 27 tape blocks
(root@huelva)# ls
LWPutils                  LWPutils_1.0_SPARC.pkg.tar
(root@huelva)#
(root@huelva)# pkgadd -d . 

The following packages are available:
  1  LWPutils     Utility LWP 1.0
                  (sparc) 1.0 

Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]: 

Processing package instance  from  

Utility LWP 1.0(sparc) 1.0

http://jjmora.es

## Processing package information.
## Processing system information.
   16 package pathnames are already properly installed.
## Verifying disk space requirements.
## Checking for conflicts with packages already installed.
## Checking for setuid/setgid programs. 

Installing Utility LWP 1.0 as  

## Installing part 1 of 1.
[ verifying class  ] 

Installation of  was successful.
(root@huelva)#
(root@huelva)# pkginfo -l LWPutils
   PKGINST:  LWPutils
      NAME:  Utility LWP 1.0
  CATEGORY:  utility
      ARCH:  sparc
   VERSION:  1.0
   BASEDIR:  /
    VENDOR:  http://jjmora.es
    PSTAMP:  4thSep07
  INSTDATE:  Sep 16 2007 19:57
     EMAIL:  jjmora@arrakis.es
    STATUS:  completely installed
     FILES:       16 installed pathnames
                   3 directories
                   3 executables
                 191 blocks used (approx) 

(root@huelva)#

Como podemos comprobar el paquete se ha instalado perfectamente, con el comando pkginfo podemos ver todoa la información del paquete.

Nota - Si tiene alguna pregunta o sugerencia sobre este artículo, por favor, no dude en ponerse en contacto conmigo mediante email en jjmora AT arrakis DOT es

Deja un comentario

My name is null, /dev/null
Algunos derechos reservados. Licencia Creative Commons