28 de Diciembre, 2005

El hack de la semana: pkg_find

Como comentaba r0sk no hace mucho, el orden preferido para trabajar con un sistema OpenBSD es: base, paquetes, ports y, finalmente, código fuente.

Es decir, siempre que el software instalado en la base se ajuste nuestras necesidades, lo usaremos. Si no, ya sea porque nos falta algo o porque lo que buscamos no es lo que ya hay instalado, usaríamos los paquetes binarios que proporciona el proyecto (aka packages). Si no existe ese paquete usaremos el port (compilar nosotros mismos usando el árbol de ports), y si no está soportado por los ports, nos divertiremos un rato con el fuente mainstream del producto y sus más que probables linux-centrismos :P.

La única pega que le encuentro al sistema es que no existe una forma cómoda de buscar paquetes. Y ahí voy yo con mi hack de 15 minutos :D.

Primero acotar la definición de forma cómoda. En realidad si existe una forma bastante razonable de buscar paquetes empleando el árbol de ports, pero para mi no es cómodo instalarlo (es grande) para solo realizar búsquedas, si a fin de cuentas suelo necesitar muy pocos paquetes instalados (en este servidor, con todo lo que hace, solo hay 35).

Otra posibilidad, que ya comentaba hace un tiempo, es recurrir a una de las diferentes páginas web que nos permiten buscar en el árbol de ports (esto sí es cómodo :P).

Pero tampoco es lo que busco, porque la mayor parte del tiempo ya sabemos qué queremos instalar, pero no conocemos el nombre exacto del paquete para que pkg_add(1) lo instale. Esta es mi propuesta: pkg_find.

La primera vez que usamos el script se bajará la lista de paquetes disponibles en el FTP que indiquemos (por defecto el central de OpenBSD, ojo que no todos los servidores tienen los mismos paquetes). Por lo demás su funcionamiento es sencillo: indicamos una expresión regular y nos muestra los paquetes cuyo nombre se ajusta, preguntando si queremos instalar si solo hay un paquete que encaje (hago un pkg_add -r paquete_encontrado).

Veamos un ejemplo, buscando aquellos paquetes cuyo nombre empiece por vim:

$ ./pkg_find ^vim
packages.lst not found, downloading from:
ftp.openbsd.org/pub/OpenBSD/3.8/packages/i386
Done!
vim-6.3.85p0-gtk.tgz
vim-6.3.85p0-no_x11.tgz
vim-lang-6.3.85-gtk.tgz
vim-lang-6.3.85-no_x11.tgz
4 packages match...

Si queremos instalar el segundo paquete listado, o ponemos el nombre tal cual, o jugamos un poco más con las expresiones regulares:

$ ./pkg_find ^vim-6.*-no_x11
vim-6.3.85p0-no_x11.tgz
Install it? n
OK, may be later.

Se pueden indicar parámetros por variables de entorno, como se explica en un comentario al comienzo del código.

Vale, tendría que haberme puesto con Ruby, pero ¡es que era tan claro hacerlo en shell! ;)

Actualización: Álvaro me ha comentado si no sería mejor descargar el index.txt (si está disponible). Bueno, ahora el script intenta hacer eso, y si falla vuelve al ls de antes :).

Anotación por Juan J. Martínez, clasificada en: openbsd, scripting.

Hay 9 comentarios

Gravatar

Hace tiempo que me hice un script en python que hacía algo similar. Aunque el mio no admitía expresiones regulares :(

por anavarro, en 2005-12-28 13:13:43

Gravatar

Pues si, yo iba vía web ftp://ftp.openbsd.org/pub/OpenBSD/3.8/packages/i386/ a mirar el nombre exacto del paquete a pasar como argumento de pkg_add. Los hay que somos muy cómodos y ahora, con pkg_find, lo seremos más todavía ;).

por r0sk, en 2005-12-28 13:17:46

Gravatar

Al #c1170: ¿¡qué dices!? AWK powah! Yo no he hecho nada XDDDDDD

por Juanjo, en 2005-12-28 13:51:44

Gravatar

# ./pkg_find wiki
packages.lst not found, downloading from:
ftp.openbsd.org/pub/OpenBSD/3.8/packages/i386
Done!
mediawiki-1.4.4.tgz
zope-zwiki-0.41.0.tgz
2 packages match...
#


Así da gusto :)

por r0sk, en 2005-12-29 10:36:09

Gravatar

Y no seria mejor marcar una ruta absoluta para el download del fichero ese?
Además... el ftp de openbsd no mete el user y password automaticamente y tambien hace el get? puedes ahorrarte unas lineas (creo)

por un visitante, en 2005-12-29 17:26:36

Gravatar

Precisamente la comodidad que tiene es esa... así ahora mismo, de cabeza, pues no sé cual es el nombre del paquete para SDL. La ruta sí la sé, teniendo en cuenta mi versión del sistema y la arquitectura que uso, pero eso ya me lo hace el script, además de permitirme buscar el nombre del paquete.

En cualquier caso el script me vale a mi, y teniendo el fuente seguro que puedes adaptarlo a tus necesidades :)

por Juanjo, en 2005-12-29 21:47:33

Gravatar

o por lo menos no se si tenias constancia de ello la herramienta se llama pkg_search y esta desarrolado por la gente de OpenBSD-PT.com ya desde hace mas o menos 10 meses que lo vengo usando en mis diferentes maquinas que administro.

Os dejo el link y como el anuncio del detergente bajelo comparelo y si encuentra algo mejor quedeselo.

http://www.openbsd-pt.com/tools/pkg_search/index.html

Un Saludo y Feliz Año

por un visitante, en 2006-01-05 23:30:34

Gravatar

Mientras Marc Espie implementa la opción -i de pkg_add, cada cual se apaña con lo que puede :)

En misc@ me apuntaron a 2 propuestas más (una en shell, muy completa, y otra en Perl). Vamos... que hay para elegir.

por Juanjo, en 2006-01-06 01:54:59

Gravatar

Juanjo tambien vale para 3.8 stable con decirle q no ya esta a la pregunta ya esta te baja la paqueteria de 3.8 o la version que uses yo lo vengo usando desde 3.5 estable y --current :)

Por cierto el paquete del port hay que tocarlo un poco a mano la version a bajar porque pone la version 19 y es la 21 (no me acuerdo asi a ojo donde se cambia pero es asi)

Me gustaria que lo probaras y vieras que es asi tal como lo describo

Un Saludo

por un visitante, en 2006-01-06 21:16:27

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: