Mantener archivos de configuración sincronizados en varias PC

15

Tengo algunas máquinas Linux diferentes y muchos archivos de configuración (y carpetas) en cada uno.

Por ejemplo:

~/.ssh/config
~/.config/openbox/rc.xml
~/.config/openbox/autostart.sh
~/.scripts/ ( folder )
~/.bashrc
...etc

¿Existe un método simple y elegante para mantener estos archivos sincronizados entre mis máquinas (uno no tiene acceso a Internet) ?

Además, algunos archivos necesitarán un proceso de sincronización más avanzado, ya que tendrán que diferir ligeramente ... por ejemplo:

Mi teclado de escritorio tiene una variedad de teclas de acceso rápido, donde mi computadora portátil casi no tiene ninguna. Lo uso XF86Mailpara abrir Thunderbird en mi escritorio, pero Meta+ Men mi computadora portátil.

My Home Desktop y Work Desktop están más orientados a "usuarios múltiples", donde mi Laptop es solo para mí. Entonces, en mi computadora portátil, tiendo a mantener el archivo 'rc.xml' para openbox en /etc/xdg/openbox/rc.xmlpero en las computadoras de escritorio en~/.config/openbox/rc.xml

Stefan
fuente

Respuestas:

10

Mantenga los archivos bajo control de versiones. Esto tiene múltiples beneficios, incluida la facilitación de mantener los archivos sincronizados (confirmar en una máquina, actualizar en los demás) y mantener un historial de cambios (para que pueda descubrir fácilmente qué rompió un programa que funcionó el mes pasado).

Uso CVS y sincronizo los repositorios con Unison o sneakernet, pero eso es porque lo he estado haciendo desde un tiempo antes del control de versión distribuido ampliamente disponible. Cualquier persona que comience ahora debe usar una herramienta de control de versiones distribuida adecuada , como bazar, darcs, git, mercurial, ...

Administrar archivos que necesitan diferir entre máquinas siempre es un poco complicado. Si el lenguaje de configuración permite condicionales, úselos. De lo contrario, si hay un mecanismo de inclusión, úselo para dividir el archivo de configuración en una parte dependiente de la máquina y una parte compartida. Mantenga todas las partes dependientes de la máquina en un directorio separado (algo parecido ~/.local/NAME/) al que siempre se hace referencia a través de un enlace simbólico ( ~/.here-> local/NAMEen cada máquina). Tengo algunos archivos generados por un script en la parte compartida a partir de parámetros guardados en la parte específica de la máquina; esto impide modificar estos archivos indirectamente a través de una interfaz de configuración GUI. Evite configurar cosas /etc, es más difícil sincronizar entre máquinas.

Gilles 'SO- deja de ser malvado'
fuente
Yo uso gitpara este propósito. mi repositorio para ~/.etctambién tengo un ~/.usry un ~/.varDeseo que estos directorios sean estándar para que KDE deje de lanzar todos los archivos tmp / var / config / etc en .kde. Es muy difícil saber dónde está lo que quiero en mi directorio personal.
xenoterracide
5

Estoy de acuerdo con la respuesta de control de versiones , pero otro método con el que he estado experimentando recientemente es Dropbox . Es esencialmente un sistema de control de versiones que se sincroniza automáticamente entre todas sus máquinas, por lo que si edita un archivo en una computadora verá los cambios reflejados en sus otras computadoras en un par de segundos, sin necesidad de comprometerse con la primera y actualizar en la último.

Su plan básico gratuito es de 2GB, así que lo uso para versionar mis archivos de configuración y registros de chat

Michael Mrozek
fuente
El principal beneficio que veo aquí es que es mucho más fácil de configurar.
Ashesh Kumar Singh
3

Puppet y Cfengine son dos buenas herramientas para sincronizar archivos (y mucho más ...)

rkthkr
fuente
También hay chef, pero estas herramientas son realmente para administrar una gran cantidad de máquinas, probablemente exageradas para 2 o 3 sistemas
xenoterracide
1

Hoy, uno podría obtener lo mejor de la primera (dvcs) y la segunda (dropbox) respuestas con sparkleshare , que proporciona una experiencia de usuario similar a dropbox con almacenamiento basado en git detrás de escena.

emjayess
fuente