it-swarm-es.com

¿Qué soluciones existen para permitir el uso del control de revisión para los archivos de configuración del servidor?

En un entorno con múltiples administradores de sistemas, veo algunas ventajas al agregar los archivos de configuración del servidor en un sistema de control de revisión. Lo más notable es la capacidad de rastrear los cambios, quién los realizó y, por supuesto, poder volver a las configuraciones de trabajo conocidas.

Estoy principalmente interesado en las soluciones de Unix/Linux, pero también me interesarían las implementaciones de Windows.

85
Dave K

He probado esto en casa (~ 3 hosts) durante algún tiempo, probando diferentes scms (RCS, Subversion, git). La configuración que funciona perfectamente para mí en este momento es git con el gancho setgitperms .

Cosas que debes considerar:

Manejo de permisos de archivos y propiedad

  • RCS: hace esto de forma nativa
  • Subversion: la última vez que lo intenté, necesitabas un contenedor alrededor de svn para hacer esto
  • git: el gancho setgitperms maneja esto de forma transparente (necesita una versión bastante reciente de git con soporte para post-checkout ganchos, sin embargo)

Además, si no quieres todos tus /etc bajo el control de versiones, pero solo los archivos que realmente modificó (como yo), necesitará un scm que admita este tipo de uso.

  • RCS: funciona solo en archivos individuales de todos modos.
  • Subversion: esto me pareció complicado.
  • git: no probem, pon "* "en el nivel superior .gitignore archivo y agregue solo los archivos que desee usando git add --force

Finalmente, hay algunos directorios problemáticos en /etc donde los paquetes pueden soltar fragmentos de configuración que luego son leídos por algún programa o demonio (/etc/cron.d, /etc/modprobe.d, etc.). Algunos de estos programas son lo suficientemente inteligentes como para ignorar los archivos RCS (por ejemplo, cron), algunos no lo son (por ejemplo, modprobe). Lo mismo con .svn directorios. Nuevamente, una gran ventaja para git (solo crea un nivel superior .git directorio).

52
8jean

Lo hice informalmente con git, pero también está el proyecto etckeeper , que es una implementación más completa y detallada.

28
pjz

Otra opción es usar una herramienta de configuración de servidor automatizada como Puppet o Cfengine para escribir las configuraciones de su servidor en un lenguaje declarativo.

Es un trabajo adicional en el front-end, pero el uso de una utilidad como Puppet le permite reconstruir y configurar automáticamente un servidor con muy poca intervención humana.

23
berberich

He estado experimentando con etckeeper que parece funcionar bastante bien. No necesito un servidor centralizado, lo que puede ser importante en algunas situaciones. Puede usar varios backends DVCS diferentes, por lo que puede elegir el que le resulte más familiar. Parece que funciona muy bien para mí, pero todavía no he intentado que los otros técnicos donde trabajo empiecen a usarlo.

10
Zoredache

He estado investigando Chef últimamente. No solo mantiene las configuraciones templatable (.erb) en el control de versiones, sino que le permite realizar acciones (como reiniciar un servicio después de cargar las configuraciones en el nodo). Chef ayuda con la gestión de paquetes para que pueda verificar dependencias con cualquier nodo con el que interactúe (es decir, debe tener el paquete Sudo instalado). Chef parece ser fácilmente extensible en Ruby, por lo que si tiene algún proceso personalizado, puede simplemente escribirlo dentro del marco proporcionado.

Pero aún no lo ha probado y tiene que instalar Ruby en el cliente y el servidor con las gemas apropiadas (esto realmente no es tan difícil). En general, parece muy fácil administrar muchos servidores en una vez.

6
bluehavana

Estoy en el proceso de implementar Puppet en toda nuestra infraestructura, y es muy propicio para mantener sus datos en el control de versiones.

Prefiero Mercurial ya que es solo una colección de archivos con algunos metadatos almacenados en directorios ocultos (fácil de administrar, fácil de entender, fácil de usar).

Mis archivos de Puppet están en/usr/local/etc/puppet/(FreeBSD 7.1). Todo lo que se necesitó para agregarle Mercurial:

> cd /usr/local/etc/puppet
> hg init

Todos los cambios se confirman con un simple "hg commit". Si un cambio aplica algo, puedo revertir cada servidor a una versión dada del archivo (por ejemplo, sudoers) con un solo comando.

Gran introducción a Mercurial

3
sh-beta

He estado usando Subversion en los servidores que administro. Funciona bien. También he configurado una instancia de Trac , por lo que tenemos una vista de línea de tiempo, sistema de tickets, navegación, etc.

Utilizando enlaces simbólicos, cron y Subversion, también configuré una distribución de configuración automatizada basada en el repositorio Subversion, donde cada servidor Linux actualiza un repositorio usando svn update con scripts (por ejemplo, scripts de firewall).

3
Martin C.

Aquí hay un caso de uso de la vida real: Subversion utilizada para administrar archivos de configuración en 4 servidores diferentes. Recomiendo usar el control de versiones para los archivos de configuración por la misma razón por la que los usarías con código: es una copia de seguridad y un botón de deshacer, todo en uno. Si administrara una cantidad mucho mayor de servidores y estuvieran mucho más cerca en términos de configuración, estaría usando algo como Puppet como se detalla en la respuesta de berberich.

La idea es que puede tener un repositorio en el que pueda extraer carpetas específicas en los servidores (por ejemplo,/var/named /) para que yo tenga un historial y una copia de seguridad de los archivos de configuración (la copia de seguridad es una ventaja si comete el error de usar una aplicación de configuración GUI que borra las adiciones editadas a mano tos Administrador del servidor en Mac OS X Server tos). Entonces es fácil probarlo en un servidor de prueba y luego actualizar el servidor de producción con archivos que funcionen sin copiarlos manualmente.

2
Chealion

Creé un proyecto hace unos años para hacer exactamente esto: Savon

Utiliza Subversion para almacenar archivos y tiene algunas características adicionales, como el seguimiento de la propiedad, los permisos y el contexto de SELinux. También le permite dividir lógicamente los cambios de su sistema de archivos en capas, por lo que puede realizar un seguimiento de los cambios que deberían ir a todos sus servidores web por separado.

1

Subversion es muy fácil de configurar y usar, y hay muchos recursos:

Procedimiento básico

Libro SVN

Descripción general de la gestión de documentos

0
Jimmie R. Houts

La mayoría de nuestros cambios se gestionan con nuestro sistema de mesa de ayuda, incluso para tareas de mantenimiento de rutina. Hemos estado moviendo lentamente nuestra documentación a una wiki para nuestro propio uso y lo que publicamos para los usuarios finales. Publicar los cambios de configuración y la discusión detrás de esto, es bueno tener abierto en nuestra intranet.

0
Waldo

Durante muchos años usé rcs para archivos que comencé a modificar, pero hace un par de años comencé a poner todo/etc bajo control git. Se requiere un poco de trabajo para registrar los archivos en grandes cantidades (algunas veces recurro a un registro enorme de "varias actualizaciones"), y he escrito algunos scripts para ayudar con esto, pero Etckeeper mencionado parece muy interesante, lo intentaré de inmediato.

0
hlovdal