Tengo curiosidad por saber cómo la gente está implementando los puertos de FreeBSD en su entorno. Supongo que la mayoría de las personas que usan FreeBSD están utilizando puertos (y a menudo portupgrade para actualizar con binarios). Sin embargo, estoy interesado en cómo tienes esta configuración, ya que no estoy satisfecho con cómo funcionan las cosas en las versiones recientes. Ahora estoy ejecutando FreeBSD 9.0 y tengo problemas.
He configurado las cosas de la siguiente manera:
- / usr / ports se comparte a través de NFS desde un nodo (con la 'actualización de búsqueda de portsnap').
- Cada nodo monta / usr / ports con lectura-escritura
- He configurado "WRKDIRPREFIX = / usr / tmp" en /etc/make.conf en todos los nodos
- He configurado el Portsnap para usar un índice local agregando lo siguiente a /usr/local/etc/pkgtools.conf:
ENV['LOCALINDICES'] ||= '/var/db'
ENV['PORTS_INDEX'] ||= ENV['LOCALINDICES'] + '/INDEX.local'
Puedo ejecutar portupgrade -p package
con éxito para construir un paquete y luego portupgrade -P package
instalar el binario en los otros nodos.
Sin embargo, en algún momento recibo el siguiente problema: /var/db/INDEX.local:23265:dbm_store failed
No puedo pensar en ninguna otra optimización que pueda hacer al sistema, ya que el índice ahora reside localmente, y lo único que realmente se exporta es el árbol de puertos y nunca se escribe nada desde los nodos.
Respuestas:
Nunca estuve completamente satisfecho con el sistema de puertos en un entorno grande: siempre parece que necesita aplicar alguna administración externa para que funcione bien.
Mis mejores consejos (en orden de preferencia ascendente, "peor" solución a "mejor" solución):
Si está construyendo en cada host, no lo haga .
Si debe hacerlo, no lo haga a través de NFS con montajes de lectura y escritura como describe: por lo general, puede confiar en que los puertos hagan lo correcto y no pisotear el árbol de puertos si proporciona directorios de trabajo alternativos, pero siempre es mejor esté seguro que lo siento: ejecute un espejo CVS / csup local y csup todos sus hosts desde ese cuadro, luego construya localmente como lo haría si fueran máquinas individuales.
Sí, sé que esto significa tener más espacio en disco en los hosts y un paso adicional. También es casi seguro que no tendrá problemas.
Consideración: Probablemente desee sincronizar los archivos de configuración del paquete (rsync o similar) desde un "host de configuración" designado para garantizar la coherencia en cada máquina (incluso puede rsync el árbol de puertos completo si lo desea, en lugar de usar csup en cada nodo).
Use un Host de compilación, cree paquetes e instálelos.
Una solución mucho mejor que construir en cada máquina individual: use un host de compilación para crear paquetes y apunte sus herramientas a esos paquetes.
Esto significa mantener un host de compilación para cada arquitectura que ejecute (o compilación cruzada), pero en última instancia es más agradable para sus máquinas de destino (no hay trabajos de compilación grandes, una garantía de coherencia)
Use una herramienta de configuración / administración del sistema.
Esta es la solución con la que terminé: construyo una imagen de servidor estándar y la implemento en mi entorno usando
radmind
. Puedes hacer cosas similares con Puppet o Chef . Esto tiene todas las ventajas de usar un host de compilación (consistencia, menos carga en los servidores individuales) y agrega el beneficio de la administración de la configuración.Advertencia: esto solo funciona realmente bien si sus máquinas son "idénticas". Es decir, puede instalar el mismo conjunto de puertos en todas ellas. Se puede trabajar si tienen diferentes conjuntos de puertos, sino que aumenta sustancialmente la carga administrativa.
Descargo de responsabilidad: soy el encargado del mantenimiento del puerto
sysutils/radmind
. Sí, me gusta tanto que lo adopté.Todo esto se basa en mi experiencia en la gestión de entornos FreeBSD de varios tamaños (que van desde 1-2 máquinas hasta más de 100). Las herramientas de configuración / administración del sistema que impulsan y mantienen una imagen estandarizada son realmente la mejor manera de manejar esto en mi experiencia.
fuente
Es extraño que nadie mencione ports-mgmt / tinderbox :
También cambiar a pkgng simplifica enormemente las implementaciones de paquetes.
Compruébalo en github: https://github.com/pkgng/pkgng
fuente
PACKAGEROOT
/PACKAGESITE
y usar radmind o Puppet / Chef).pkg_delete
primero debe ejecutarse y luego instalar la nueva versión. OpenBSD ha manejado esto mejor al incluir una opción de actualización enpkg_add
. No estoy seguro acerca de Portupgrade, pero portmaster puede funcionar simplemente usando INDEX y no un árbol de puertos completo.He administrado más de 100 servidores de FreeBSD simplemente compartiendo / usr de solo lectura sobre NFS bien ajustado, moviendo las bases de datos de paquetes de / var a / usr y haciendo enlaces simbólicos con ellos (no es estrictamente necesario pero habilita pkg_info y tal). Es posible que haya habido uno o dos archivos más que debían moverse en una dirección u otra y vincularse entre sí, pero toda la configuración me llevó alrededor de una hora para descubrirlo. Funcionó muy, muy bien. Si me hubiera topado con problemas de escala, habría agregado servidores NFS adicionales y dividido la carga de trabajo, pero nunca apareció. El rendimiento nunca fue un problema para mí (de hecho, fue genial), pero supongo que podría poner el servidor NFS / usr (o una copia del mismo) en un md.
fuente
Parece que desafortunadamente nadie obtuvo una buena solución para esto. Lo más probable es que esto se deba a limitaciones en las herramientas subyacentes.
Esto es lo que se me ocurrió: descarté la idea de exportar todo el árbol de puertos. En cambio, cedí y puse un árbol de puertos completo en cada nodo. Luego monté 'paquetes' sobre NFS (para permitir la distribución de paquetes).
También tengo la intención de utilizar un proxy de almacenamiento en caché (probablemente Squid) para acelerar el proceso de portnap. Escribí una breve publicación sobre cómo configurar esto en mi blog.
Referencias
fuente