Estilo Linux Kung Fu: Sincronizar configuraciones

Una de las mejores cualidades de Linux y sistemas operativos similares es su profunda personalización. Si no le gusta algo, es muy probable que pueda cambiarlo fácilmente modificando algún archivo. Por ejemplo, considere bash, un shell de comandos que es bastante popular en cualquier medida. Si necesita cambiar la línea de comandos, esto es bastante factible. Si desea que una clave Tab



permita el autocompletado de nombres de archivos que no distinguen entre mayúsculas y minúsculas, tampoco es un problema. Normalmente, estos ajustes se realizan en uno de los denominados "archivos de perfil", que se .bashrc



encuentran en el directorio de inicio del usuario. Si alguien trabaja en una sola computadora, entonces no tiene ningún problema con la configuración. Contribuye al archivo







.bashrc



, y otros archivos similares, los cambios necesarios, personaliza el sistema por sí mismo y trabaja en un entorno que se comporta como él quiere. Los problemas surgen cuando alguien tiene que usar varias computadoras. Quizás estemos hablando de un servidor web, una computadora de escritorio, una máquina que desempeña el papel de un firewall y algunas docenas de Raspberry Pi. ¿Cómo configura todos estos sistemas de la misma manera? ¿Y cómo mantiene la configuración actualizada después de que esté configurada de la misma manera?



Varias opciones para sincronizar la configuración



De hecho, hay varias formas de sincronizar la configuración del sistema Linux. Dado que estas configuraciones generalmente se almacenan en algún tipo de archivos, casi cualquier mecanismo de sincronización se puede utilizar para resolver nuestro problema. Esto llevará algún tiempo, pero como resultado, puede lograr lo que desea. Suponga que puede poner todos sus archivos de configuración en un directorio y luego poner enlaces simbólicos a esos archivos en los lugares correctos de su directorio personal. Además, usando, puede rsync



sincronizar esta carpeta entre diferentes sistemas.



Si está familiarizado con Git, entonces ya ha adivinado otra opción para resolver este problema. Aquí, además de la capacidad de sincronizar la configuración, también tendrá la oportunidad de saber qué y cuándo se modificó en sus archivos de configuración. De hecho, estoy en un material de formas inusuales de usar el Git, ha hablado de ello, mostrando la sincronización de la configuración de mi sistema , basado en Git. Recientemente, sin embargo, descubrí que había un sistema llamado chezmoi , que está escrito en Go, y usa un enfoque para sincronizar configuraciones que es completamente diferente al mío.



Funciones de Chezmoi



Según los datos del repositorio del proyecto, chezmoi



ofrece al usuario las siguientes opciones:



  • Una descripción declarativa del estado deseado de los archivos del directorio de inicio.
  • Usando plantillas para crear archivos.
  • La seguridad del trabajo está garantizada por la integración con Bitwarden, con LastPass y con algunos programas para el almacenamiento local de claves.
  • Soporte para el manejo de actualizaciones atómicas. Esto protege al sistema de caer en un estado "intermedio".
  • Soporte para múltiples sistemas operativos.
  • Se informa al usuario sobre las acciones que se planean realizar, se admite el modo de "ejecución de prueba".
  • Alta velocidad de trabajo, la capacidad de elegir cuál se utiliza junto con chezmoi



    el sistema de control de versiones.


Todo parece muy interesante. El procedimiento para instalar la utilidad en diferentes sistemas operativos tiene sus propias peculiaridades, las instrucciones correspondientes se pueden encontrar en el repositorio del proyecto.



Usando chezmoi



El archivo ejecutable que da acceso a las capacidades chezmoi



, como era de esperar, repite el nombre del proyecto. Admite varios comandos, entre los que me gustaría señalar los siguientes:



  • add



    - agregar un archivo a la lista de archivos administrados por el sistema.
  • edit



    - edición de archivos.
  • diff



    - averiguar qué cambios, si los hay, están pendientes de inclusión en la versión de trabajo del archivo.
  • apply



    - inclusión de cambios pendientes de aprobación en la versión de trabajo del archivo.


Cuando se agrega un nuevo archivo al sistema, se coloca una copia en el directorio ~/.local/share/chezmoi



. Para compatibilidad con los sistemas de control de versiones, chezmoi



ignora los archivos de este directorio cuyo nombre comienza con un punto. Por lo tanto, si agrega, por ejemplo, un archivo al sistema .bashrc



, automáticamente se le cambiará el nombre dot_bashrc



.



Si solo las posibilidades se chezmoi



limitaran a esto, entonces no habría nada extraordinario en esta utilidad. Lo más interesante aquí es la sincronización de copias de archivos. Para solucionar este problema, chezmoi



utiliza un sistema de control de versiones externo. Pero, ¿qué sucede si algunas de las computadoras cuyas configuraciones se están sincronizando necesitan configuraciones especiales?



Soporte para entornos especiales



Por ejemplo, en una computadora de escritorio, debe utilizar una línea de comandos personalizada. Y en el servidor, en el firewall y en las computadoras Raspberry Pi, quedará satisfecho con la invitación habitual. Esto significa que en cada una de las computadoras, en el archivo .bashrc



, debe estar presente un valor de parámetro especial PS1



.



Esto se puede hacer agregando las entradas apropiadas a la sección del data



archivo chezmoi.yaml



. De hecho, puede usar varios formatos aquí, en particular, JSON



y TOML



. Este archivo es único para cada computadora. Le permite realizar cambios en los archivos de plantilla. Por ejemplo, una chezmoi.yaml



computadora de escritorio puede contener una entrada sobrePS1String



, que describe la configuración compleja para la línea de comandos, y en el mismo archivo para Raspberry Pi, ya se organizará una entrada similar mucho más fácilmente.



Para agregar un determinado archivo al sistema que se utilizará como plantilla (por ejemplo, un archivo .bashrc



), debe utilizar la opción de -T



comando add



. El archivo de plantilla basado en .bashrc



tendrá un nombre dot_bashrc.tmpl



. Los mecanismos estándar de plantillas de Go ofrecen al usuario chezmoi



una variedad de opciones. Además, chezmoi



te permite utilizar variables, que, por ejemplo, te permiten trabajar con el nombre y el nombre de usuario de la computadora, con identificadores de SO y arquitectura.



Gracias a las capacidades utilizadas enchezmoi



lenguaje de plantilla, el usuario tiene mucha más libertad que simplemente usar variables. En las plantillas, en particular, puede utilizar condicionales. Por ejemplo, puede verse así:



#  
export EDITOR=vi
 
# ,    
{{- if eq .chezmoi.hostname "work-laptop" }}
#     ~/<code>.bashrc</code>  work-laptop
{{- end }}

      
      





La seguridad



Chezmoi



reconoce archivos privados y los procesa en consecuencia. Entonces, un directorio es privado chezmoi



, el sistema usa un prefijo private_



al asignar nombres a archivos privados (por ejemplo, el nombre de dicho archivo puede verse así private_dot_bashrc



).



Se supone que se utilizará algún sistema de control de versiones para organizar la sincronización de archivos. En otras palabras, al configurar una computadora nueva o actualizar la configuración de una máquina determinada, sincroniza el contenido del directorio chezmoi



con una copia de la configuración almacenada en el sistema de control de versiones. Luego se aplica todo lo que se necesita configurar en el archivo de configuración y los cambios, posiblemente con una verificación preliminar de qué cambios se aplicarán.



Esto significa, por supuesto, que los archivos almacenados serán tan "privados" como lo permita el sistema de control de versiones. Si publica sus archivos de configuración en un sistema público, significa que ya no hay ninguna cuestión de "privacidad". Una forma de resolver este problema es utilizar un sistema de plantillas y no procesar el archivo de configuración con el sistema de control de versiones. Y es que, al ser único para cada equipo, en ningún caso debe procesarse mediante un sistema de control de versiones. Esto significa, entre otras cosas, que debe almacenarse de forma diferente a otros archivos.



Suponga que tiene una entrada como esta en su archivo de configuración:



hackaday:

   password: 0xdeadbeef

      
      





La contraseña debe mantenerse en secreto. Y en archivos públicos, se puede utilizar la siguiente construcción:



password = {{ .hackaday.password }}

      
      





Cuando trabaje con chezmoi



, aún puede usar archivos de configuración cifrados con gpg



.



Sistema de control de versiones



Si hablamos de sistemas de control de versiones, chezmoi



existen comandos para enviar materiales a los sistemas de control de versiones compatibles y, en consecuencia, comandos para cargar datos. Se usa el predeterminado git



, pero hay otras opciones, como hg



. Los ajustes correspondientes se realizan en el archivo de configuración.



También hay comandos que le permiten simplemente obtener el conjunto completo de archivos de configuración o exportar la configuración. Puede leer sobre estos comandos en el repositorio del proyecto. De forma predeterminada, todo el trabajo se realiza en el directorio de inicio, pero si es necesario, puede configurar el programa para que funcione con un directorio de destino diferente.



Salir



En general, se puede notar que chezmoi



parece un proyecto bien pensado. Pero no vi nada aquí que me obligara a cambiar chezmoi



de mi sistema de sincronización de configuración. Si me hubiera topado chezmoi



cuando estaba pensando en cómo resolver el problema en cuestión, entonces probablemente habría usado este proyecto en particular y no creado el mío. No discuto que el sistema de plantillas sea chezmoi



muy bueno, pero mi sistema logra un efecto similar al elegir diferentes archivos según el entorno.



Archivo de configuración únicochezmoi



difícil de manejar con un sistema de control de versiones. Sí, los usuarios generalmente no tienden a hacer esto. Si el repositorio utilizado para almacenar la configuración es privado, o si la información privada no está incluida en los archivos de configuración, puede poner opciones para el archivo de configuración en este sistema chezmoi



(digamos, puede haber una versión de este archivo para Raspberry Pi y para computadoras normales). Luego, cuando configure su computadora por primera vez, puede cambiar el nombre del archivo apropiado. Pero es más probable que simplemente se copie el archivo de configuración del sistema. El enfoque según el cual el archivo de configuraciónchezmoi



no se manejan mediante el control de versiones, existe la ventaja de que si todo está configurado correctamente, puede usar de forma segura un repositorio público para almacenar datos.



Y para que mi sistema funcione, es muy importante usar un repositorio privado, si solo a quien lo usa no le importa que sus archivos de configuración sean de dominio público. Sin embargo, todos los archivos se procesan mediante un sistema de control de versiones. El sistema le permite estar al tanto de todos los cambios sin la necesidad de utilizar plantillas, que requieren tiempo para dominarlas. Solo necesita colocar la configuración en los archivos apropiados. La única característica que puedo agregar a mi sistema, inspirada enchezmoi



, esta es la capacidad de agregarle nuevos archivos, que son monitoreados. Aunque mi sistema le permite sincronizar la configuración, ahora tiene que agregarle archivos manualmente. El archivo se mueve a un directorio especial, después de lo cual las entradas del archivo se agregan al sistema y se crea un enlace simbólico.



Pero para esto es bueno Linux. Hay muchas formas de resolver el mismo problema. Si no le gusta una cosa, puede buscar otra. Y si no le gusta nada, puede crear algo propio sin mucha dificultad. Esto, sin embargo, crea ciertos problemas cuando mucha gente común que no está acostumbrada usa Linux. No buscan elegir entre muchas opciones, quieren una solución de trabajo simple y clara. Y en la comunidad de Linux, por el contrario, es costumbre comparar constantemente todo con todo y discutir con fervor sobre cuál es mejor, emacs



ya sea vi



C o Python.



¿Cómo sincroniza la configuración en diferentes máquinas Linux?










All Articles