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

![[xml]](/images/xml.gif)
