Manejo de actualizaciones de paquetes FreeBSD usando pkg_add

Manejo de actualizaciones de paquetes FreeBSD usando pkg_add

Estoy intentando utilizar pkg_addel comando de FreeBSD para instalar y actualizar paquetes binarios en una especie de escenario de compilación una vez, instalación en varias máquinas. Funciona bien al instalar un paquete nuevo, pero las actualizaciones me desconciertan. Por ejemplo, si quiero actualizar un paquete que estádepende depor otro paquete, no puedo simplemente instalarlo:

# pkg_add /path/to/somepackage-2.0.tbz
pkg_add: package 'somepackage' or its older version already installed

En este punto, puedo eliminar la versión anterior del paquete si paso -fal pkg_deletecomando:

# pkg_delete -f somepackage-1.0
pkg_delete: package 'somepackage-1.0' is required by these other packages
and may not be deinstalled (but I'll delete it anyway):
anotherpackage-1.0

Pero... y esto es lo que mata... ¡ahora la información de dependencia ha desaparecido! Puedo instalar la actualización:

# pkg_add /path/to/somepackage-2.0.tbz

Y ahora los intentos de eliminarlo tendrán éxito sin ningún error:

# pkg_delete somepackage-2.0

¿Cómo manejo esto con elegancia (donde "con elegancia" significa "de una manera que preserve la información de dependencia sin necesidad de reconstruir/reinstalar toda la cadena de dependencia)?

¡Gracias!

Respuesta1

Como habrás descubierto, pkg_addno se pueden actualizar los puertos correctamente. Sin embargo, el portupgradepaquete hace esto bastante bien y es el método que uso y recomiendo (hay otros disponibles si no te gusta este método).

Una vez que el puerto esté instalado, simplemente puede ejecutarlo portupgrade -aPPy actualizará todos los puertos instalados en el sistema mediante paquetes. Si no desea actualizar ningún puerto, puede ejecutar portupgrade -RPP [category/port]para actualizar un puerto en particular y los puertos de los que depende. Ejecutar el programa sin argumentos actualizará el puerto que pertenece al directorio actual (es decir, cd /usr/ports/security/openssl ; portupgradeactualizará openssl, sin la -PPopción construirá el puerto desde la fuente); y si no está en un directorio de puerto, mostrará ayuda (igual que la -hopción).

Editar:
De forma predeterminada, portupgrade instalará los paquetes si existen en el directorio definido por la PKG_PATHvariable ambiental (el valor predeterminado es $PACKAGES/All, $PACKAGESel valor predeterminado es $PORTSDIR/packages; por lo tanto, la ruta predeterminada es /usr/ports/packages/All).

Si no existen allí, descargará los paquetes (por preferencia) de $PKG_SITES(toma un URI con subcarpetas Latesty All; sin valor predeterminado), o $PACKAGEROOT(toma un URI con la ruta espejo normal debajo; el valor predeterminado es "ftp://ftp.freebsd.org").

Una manera fácil de hacer esto es usar una máquina para compilar/almacenar en caché los paquetes que se instalarán en otra máquina.

  • Puede crear paquetes desde el árbol de puertos make packageen el directorio del puerto (que también instalará el puerto).
  • Puede usarlo portupgradepara actualizar una máquina y almacenar en caché los archivos del paquete para usarlos en otras máquinas; los comandos antes mencionados almacenarán en caché los archivos del paquete en el directorio predeterminado (ver arriba).
  • Puede utilizar portupgrade sólo para recuperar los paquetes y no instalarlos con portupgrade -aPPFo portupgrade -RPPF [category/port].

Una vez que tenga los archivos del paquete almacenados en caché, puede compartir el directorio mediante NFS, FTP, HTTP, etc. siempre que los archivos sean accesibles desde otras máquinas. Establezca PACKAGESo PKG_SITEcon los valores apropiados para que apunte al servidor de almacenamiento en caché. Ejecute el portupgradecomando típico, debería extraer los paquetes del servidor de caché e instalarlos.

Nota: El árbol de puertos debe estar actualizado en todos los servidores para portupgradeque funcione correctamente (intentará actualizarse a cualquier versión que esté en el árbol de puertos local). Si va a tener los mismos puertos/paquetes instalados en todas las computadoras, podría ser más fácil compartir un /usr/portsdirectorio de servidores (por ejemplo, a través de NFS) y montarlo en todos los demás servidores.

Respuesta2

Quizás pkg_replacesea lo que estás buscando.

Lo estoy usando desde hace algún tiempo. Una de mis máquinas FreeBSD actúa como servidor de compilación y compila (usando portmaster) todos los paquetes para las otras máquinas. Estoy usando pkg_replacepara instalar estos paquetes previos a la compilación en todas las demás máquinas.

http://www.FreeBSD.org/cgi/url.cgi?ports/ports-mgmt/pkg_replace/pkg-descr

Respuesta3

O puede confiar en Portsnap o CVSup, que se describen aquí:

http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/ports-using.html

información relacionada