¿Es posible establecer una versión específica de los paquetes, de qué paquete principal depende?

10

Tenemos un entorno de desarrollo en FreeBSD 10.3. He oído que FreeBSD gestiona las dependencias de paquetes de esa manera, que siempre busca la versión más nueva de todos los paquetes, de la que depende el paquete principal. Y parece verdad. Entonces, mis preguntas son:

  1. ¿Es esto cierto? ¿Hay algún documento oficial que lo demuestre?
  2. ¿La mejor manera de superar este problema?
Sergio
fuente
77
Sospecho que puede instalar el paquete de la versión específica que necesita primero, pkg lockluego instalarlo y luego instalar todo lo que desee.
arrowd
1
También depende de qué puerto / paquete desee y en qué versión. Por ejemplo, puede tener diferentes versiones de python / postgresql / php. A veces hay múltiples paquetes disponibles para un software, a veces puede construir su paquete especial desde los puertos.
Raphael Ahrens
3
Si ejecuta a ciegas las actualizaciones de freebsd (o la actualización del paquete), sí, encontrará lo más nuevo que pueda e intentará instalarlo. Como dijo arrowd, ahora (desde 9.2 más o menos), puede bloquear pkg <pkg> que debería proteger lo que ha instalado y sus dependencias de la modificación. YMMV.
quadruplebucky

Respuestas:

1

Cómo FreeBSD construye paquetes

El proyecto FreeBSD solía construir paquetes solo para lanzamientos y ocasionalmente para las ramas ESTABLES. Los antiguos creadores de paquetes utilizaron un sistema distribuido llamado Portbuild. Usaría un gran grupo de máquinas más pequeñas de 2GB-4GB para construir paquetes. Esto era propenso a errores y lento, principalmente debido a las máquinas más antiguas. Una construcción completa aún podría tomar una semana. Hoy en día, los paquetes se crean utilizando máquinas grandes individuales que utilizan Poudriere. (De la página web de Brian Drewery ).

Vea también: Cómo actualizar una combinación de paquetes y puertos en FreeBSD

FreeBSD tiene un ABI (y API) en evolución, al igual que Solaris y Windows, mientras que Linux tiene un ABI (¿estancado?) Estable, por lo que con los viejos binarios de Linux todavía se ejecutará en una versión más nueva del sistema operativo, mientras que con sistemas operativos que no son Linux, esto no es Siempre es el caso (a veces lo es).

El uso pkg lockaún puede provocar dolores de cabeza , mientras que se bloqueará (ofrecerá una advertencia) cuando intente actualizar pkg upgrade, aún supone que las versiones con números más altos son mejores (deseables) y que es algo que querría hacer, por lo que pide permiso, y puedes permitirlo, pero no garantiza que algo más no se rompa. Vea la URL anterior, o esta discusión: " ¿Preferiría FreeBSD para bloquear versiones de paquetes binarios distribuidos a través de pkg para una versión del sistema operativo? ".

Si un paquete está bloqueado, a veces tendrá que dar permiso para desbloquearlo y realizar la actualización, mientras que eso funcionará para un paquete (y todas sus dependencias) no hay garantía de que algo más no sea incompatible con las nuevas bibliotecas ( y por lo tanto también necesita una actualización, si hay una disponible actualmente).

Blog de Brian Drewery: " FreeBSD Journal: Poudriere " opina:

"Deje de usar portmaster, portupgrade y puertos en sus servidores y cambie a paquetes.

Configurar sus propias compilaciones de paquetes con Poudriere lleva solo unos minutos y le ahorrará mucho tiempo en el futuro.

...

Si está manteniendo más de un sistema FreeBSD y no está utilizando paquetes, debería hacerlo. Mantengo solo 20 servidores, pero construir puertos en cada sistema tomó mucho tiempo y desperdicié recursos en máquinas de producción. Al construir puertos en múltiples servidores, es muy fácil sincronizar sus opciones o versiones. Al crear paquetes una vez en un sistema, disminuí la carga en mis sistemas, disminuí la cantidad de trabajo que tenía que hacer e hice que todos mis sistemas fueran consistentes. En lugar de lidiar con la misma falla en cada sistema, solo necesito manejarlo en el sistema de compilación.

Pero, el enganche ...

¿Por qué necesitarías desviarte de los paquetes oficiales? El marco de puertos proporciona opciones de soporte para que los puertos cambien la configuración en tiempo de construcción. No todas las aplicaciones admiten la configuración en tiempo de ejecución. Algunas aplicaciones deben compilarse de manera diferente según las funciones que estén habilitadas. Otros tienen opciones simplemente para disminuir la cantidad de características y dependencias en el puerto predeterminado. Para los administradores del servidor, esto puede llevar rápidamente a descubrir que algunos de los paquetes predeterminados no cumplen con sus requisitos.

Entonces ...

Hay algunas formas de obtener paquetes personalizados. Pkg admite el uso de múltiples repositorios. Se puede configurar para usar el repositorio oficial de FreeBSD como primario y uno personalizado como secundario. El paquete no está limitado por la cantidad de repositorios que puede rastrear y se pueden reordenar por prioridad. El problema con múltiples repositorios es que actualmente puede ser difícil de mantener. Cuando Pkg detecta que un paquete instalado tiene diferentes opciones o dependencias de un repositorio que está rastreando, el paquete se reinstalará potencialmente desde cualquier versión remota. Puede bloquear el paquete durante las actualizaciones con pkg lock PKGNAME y pkg unlock PKGNAME o vincularlo a un repositorio específico con pkg annotate -A repositorio PKGNAME REPONAME. También existe el sutil problema de mantener el árbol de puertos para su repositorio personalizado sincronizado con los paquetes de FreeBSD. Dado que los paquetes se crean a partir de una instantánea del árbol de puertos tomada una vez por semana, si su repositorio personalizado no coincide, puede generar conflictos. Es mucho más simple crear un paquete completo de lo que necesita con las opciones que desea.

La solución:

Poudriere (más o menos pronunciado poo-dree-year, francés para "barril de pólvora") fue escrito como un reemplazo más rápido y simple para Tinderbox. Fue escrito por el autor de Pkg Baptiste Daroussin y ahora lo mantengo principalmente junto con Baptiste y algunos otros colaboradores. Se ha convertido rápidamente en la herramienta de facto de prueba de puerto de FreeBSD y de creación de paquetes. Es la herramienta oficial de clúster de compilación y también es utilizada por el proyecto FreeBSD Ports para probar parches de barrido en lo que se denomina "ejecuciones exp.". Está escrito en el shell POSIX y se está moviendo lentamente a los componentes C. A diferencia de Tinderbox, no tiene dependencias y no requiere una base de datos.. Se ha optimizado enormemente para ser altamente paralelo en todas las operaciones. Utiliza cárceles para construir puertos en entornos de espacio aislado en condiciones muy estrictas. La creación de la cárcel se realiza una vez con un simple comando. Durante las compilaciones, la cárcel se clona automáticamente para cada CPU que se utiliza para dar a los puertos un lugar limpio para construir ".

Configurar su propio repositorio con poudriere le permite tener la flexibilidad de los puertos y la facilidad de administración de paquetes.

Robar
fuente