Actualización de paquetes en FreeBSD usando Portupgrade

By 5 de agosto de 2007 BSD, FreeBSD One Comment

bookdmon.jpgHe recogido este documento, corrigiendo el port donde se encuentra justamente portupgrade.

La razón de la edición de este post, es por que está magistralmente explicado como tratar a grandes rasgos con la instalación de paquetería.

Autor: Juan RP
Fecha: 28/08/2002
Ultima revisión: 04-08-2007


El sistema de ports y uno de sus grandes inconvenientes: actualizar paquetes. El problema que muchos usuarios tenían antes de que existiera Portupgrade era que , despues de tener instalado un port y querer actualizarlo a una versión mas reciente, tenian dos paquetes iguales en la base de datos /var/db/pkg de diferente versión, con lo cual obteniamos errores con las dependencias, o teniamos que borrar el paquete e instalar el paquete nuevo para no tener las dos versiones instaladas. Por suerte tenemos Portupgrade el cual contiene varias herramientas para administrar, actualizar, reconfigurar los ports/paquetes y arreglar dependencias entre otras cosas. Despues entraremos en mas detalles, por ahora vamos al primer paso , obtener Portupgrade.

Instalación de Portupgrade

Para instalar dicho paquete , podemos hacerlo de 2 modos: o instalamos el paquete binario y sus dependencias mediante el comando pkg_add, o instalamos y compilamos automaticamente el port. Aqui os explico los 2 pasos:

1ª opción (pkg_add):

pkg_add -r portupgrade

2ª opción (port):

cd /usr/ports/port-mgmt/portupgrade && make install clean

Podemos comprobar si lo tenemos bien instalado y ver los ficheros que trae el paquete mediante el comando pkg_info -L 'portupgrade*' | more. Si todo ha ido correctamente , ya tendremos Portupgrade listo para que haga el trabajo "sucio".

Configuración de cvsup y algo mas...

Antes de usar portupgrade ,debemos tener instalado en nuestro sistema el paquete cvsup, el procedimiento será el mismo para instalarlo, pero podremos elegir entre 2 versiones:

  • cd /usr/ports/net/cvsup-without-gui && make install cleanEste es la versión para ejecutarlo en modo texto
  • cd /usr/ports/net/cvsup && make install cleanEste programa se puede ejecutar en modo grafico y en modo texto

Despues de tenerlo instalado podemos actualizar nuestra raiz de ports :-).

Tenemos 2 opciones para actualizar nuestro directorio de ports, aunque los dos usan el mismo comando al fin y al cabo. O bien elegimos el método tradicional (cvsup -g -L 2 /ruta/donde/esta/ports-supfile), o en su lugar podemos utilizar una alternativa:

#cp /etc/defaults/make.conf /etc/

Y editaremos este mismo fichero que hemos copiado a /etc, y quedará de la siguiente forma:

SUP_UPDATE=yes
SUP=/usr/local/bin/cvsup
SUPFLAGS= -g -L 2
SUPHOST=cvsup.uk.FreeBSD.org
SUPFILE=/usr/share/examples/cvsup/stable-supfile
PORTSSUPFILE=/usr/share/examples/cvsup/ports-supfile
DOCSUPFILE=/usr/share/examples/cvsup/doc-supfile

Si usais una conexion lenta (modem) , podeis añadir el flag -z a SUPFLAGS, el cual hará que comprima los datos con el consiguiente aumento de velocidad. Una vez tenemos estas lineas metidas , podemos irnos a /usr/ports y teclear el siguiente comando para actualizar automáticamente nuestra raiz de ports: make update.

Gracias a las lineas referentes a cvsup que metimos anteriormente en /etc/make.conf, podremos utilizar el comando make update dentro del directorio /usr/src.El cual actualizará nuestro directorio de fuentes completo ( vease sys,doc,ports ... ).

Ahora que ya tenemos actualizada nuestra raiz de ports , os explicaré el funcionamiento básico de todos los comandos que contiene portupgrade.

Mirando con pkg_info -L 'portupgrade*' vemos que este paquete contiene los siguientes comandos:

  • pkg_deinstall
  • pkg_fetch
  • pkg_glob
  • pkg_sort
  • portcvsweb
  • portsclean
  • portsdb
  • portupgrade
  • portversion
  • portinstall
  • pkgdb

portsdb y ports_glob son equivalentes, los dos hacen la misma función.

  • pkg_deinstallEs un comando casi equivalente al que viene incluido con la instalación base de FreeBSD, pkg_delete, pero añade algunas mejoras , tales como recursividad -r , recursividad invertida -R y algunas mas. Para mas información te recomiendo que mires la página man.
  • pkg_fetchEste comando se usa para bajar paquetes binários de localizaciones remotas, entre sus características est´ el flag -R, el cual baja las dependencias que necesite el paquete.
  • pkg_globSirve para listar todos los paquetes instalados en el sistema y opcionalmente las dependencias de estos, hace la misma función que pkg_info con algunas mejoras añadidas. Opcionalmente puedes listar todos los paquetes ordenados por orden de dependencias combinandolo con pkg_sort, ejemplo : pkg_glob -a | pkg_sort .
  • pkg_sortLee de la entrada estandar y ordena los paquetes por orden de dependencias.
  • portcvswebInvoca el primer navegador disponible que tengamos , para utilizar la herramienta CVSweb, con la cual podremos navegar por el CVSROOT de ports.
  • portscleanUna util herramienta con la cual podremos limpiar los directorios de trabajo de la raiz de ports, borrar paquetes antiguos en /usr/ports/distfiles, y librerias compartidas que estan repetidas o que no tienen utilidad.
  • portsdbEsta herramienta genera una base de datos (INDEX.db), basandose en el ídice de los ports (/usr/ports/INDEX).Se autogenera cuando la base de datos es muy antigua a comparacion con INDEX. Se recomienda ejecutar con los flags -uU despues de actualizar nuestra raiz de ports.
  • portupgradeLa mas importante de todas las que contiene el paquete, con la cual actualizaremos, reconfiguraremos todos los paquetes instalados en el sistema.
  • portversionNos servirá para comparar las versiones de los paquetes instalados con los que tenemos en la raiz de ports y nos dir´ cuales hace falta actualizar.
  • portinstallUtilidad que nos servira para instalar el port o paquete binario que le digamos.
  • pkgdbCon esta última podremos generar/regenerar la base de datos que usa portupgrade para ver las dependencias y versiones de los paquetes, normalmente usaremos los flags -uf y -F para rehacer la base de datos y revisar/reparar las dependencias respectivamente.

Comandos básicos

Para actualizar todos los paquetes que tenemos instalados en nuestro sistema , utilizaremos el comando portupgrade -va, el cual la primera vez que lo ejecutemos llamará a pkgdb internamente y creara la base de datos que utilizara portupgrade. Si ademas quisieramos hacer la actualizaci&oocute;n en modo interactivo añadiriamos el flag -i, el cual nos preguntará si queremos actualizar o no ese paquete.

Si solo queremos actualizar un paquete en cuestión , por ejemplo mozilla , lo ejecutaríamos de tal modo: portupgrade -v mozilla, ademas por si no fuera poco deseamos actualizar las dependencias de este paquete tambien, añadiremos el flag -r. Interesante eh ?. Para ver mas características del comando portupgrade, os aconsejo que veais la página man cuidadosamente.

Que no teneis espacio en /usr, por culpa de la compilacion de ports y quereis liberar espacio?. La respuesta a este problema esta en el comando portsclean -CD. Este borrará todos los directorios de trabajo de compilación de los ports y los tarballs de paquetes de versiones antiguas que se encuentran en /usr/ports/distfiles. Como siempre , mas informaci&ocute;n en la página man.

Por supuesto no todo son alegrias, y de vez en cuando deberias de ejecutar el comando pkgdb -F para arreglar los problemas que hayan surgido con las dependencias. No entraré en detalles con este comando ya que está suficientemente claro lo que se debe hacer.

Si deseamos instalar un port o paquete que no tenemos instalado en nuestro sistema deberemos de utilizar el comando portinstall seguido de los flags correspondientes y el nombre o nommbres de estos. Ejemplo:

# portinstall -m WITH_GNOME=no -v xchat

Aquí vemos un nuevo flag -m el cual le pasa parámetros al comando make para la compilación, lo siguiente queda claro para que sirve :P.

Por ultimo os pondré un ejemplo sobre como recompilar un port y añadirle una opción de configuración, el port que utilizaré será: (pure-ftpd). Olvidásteis darle soporte MySQL a vuestro servidor ftp y quereis habilitar esa opción ?. La solución es esta:

# portupgrade -m WITH_MYSQL=yes -vf pure-ftpd

En este comando encontramos un nuevo flag -f el cual significa force, osea que fuerza a reinstalarlo. Espero que haya quedado claro.

Finalizando

He analizado uno por uno los comandos que contiene el paquete portupgrade y os he puesto algunos ejemplos de como usarlos , podeis ver que las opciones son muy flexibles y podeis combinarlas como os plazca. Para cualquier duda sobre el funcionamiento de la herramienta/s, no olvideis recurrir a la pagina man antes de preguntar por el irc o en las listas de correo. Espero que este pequeño tutorial sirva de guía para que os vayais introduciendo en actualizar paquetes.

Última actualización: 2007-08-04 06:08
Autor: Juan RP
Revisión: 1.0

One Comment

Leave a Reply

Your email address will not be published.