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 :).



Publicidad

Aviso: Los siguientes comentarios pertenecen a las personas que los han enviado.
El administrador de este sitio web no es responsable de los mismos.

[comentarios] Hay 9 comentarios:

Gravatar
28/12/2005 13:13:43
buen trabajo!
por anavarro (IP: 80.24.59.*@80.58.5.237)
Comentario de anavarro
Hace tiempo que me hice un script en python que hacía algo similar. Aunque el mio no admitía expresiones regulares :(
Gravatar
28/12/2005 13:17:46
Vía web
por r0sk (IP: 217.130.44.*)
Comentario de r0sk
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 ;).
Gravatar
28/12/2005 13:51:44
regexp
por Juanjo (IP: 192.168.0.*)
Comentario de Juanjo
Al #c1170: ¿¡qué dices!? AWK powah! Yo no he hecho nada XDDDDDD
Gravatar
29/12/2005 10:36:09
Funcionando, y sin problemas
por r0sk (IP: 217.130.44.*)
Comentario de r0sk
# ./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 :)
Gravatar
29/12/2005 17:26:36
uhm
por un visitante (IP: 62.93.164.*)
Comentario de un visitante
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)
Gravatar
29/12/2005 21:47:33
En eso estamos
por Juanjo (IP: 192.168.0.*)
Comentario de Juanjo
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 :)
Gravatar
05/01/2006 23:30:34
Esto ya estaba" implementado"
por un visitante (IP: 83.61.145.*)
Comentario de un visitante
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
Gravatar
06/01/2006 01:54:59
En -current
por Juanjo (IP: 192.168.0.*)
Comentario de Juanjo
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.
Gravatar
06/01/2006 21:16:27
respuesta sobre pkg_script para stable
por un visitante (IP: 83.49.69.*)
Comentario de un visitante
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

! Esta entrada no permite nuevos comentarios.

Los comentarios se bloquean automáticamente tras 15 días desde la publicación del artículo.

Si deseas comentar algo relacionado con el texto, puedes enviarme un e-mail.