¿Cómo puedo lograr una administración de actualizaciones similar a "Git" para Linux?

14

Quiero administrar las actualizaciones de mi sistema Linux de manera similar a como lo hace Git , al poder moverme hacia adelante y hacia atrás dentro de las "revisiones". ¿Cómo podría hacer eso?

Patrick Villela
fuente
Como administrador de sistemas Linux / Unix que se ocupa de los aspectos más profundos de cómo funcionan los sistemas Linux / Unix, no puedo imaginar qué tipo de cambios necesitaría hacer en su sistema para requerir un sistema de revisión similar a Git. Lo principal que obtiene cambios en estos sistemas son las instalaciones de software y los archivos de configuración. Los archivos de configuración son fáciles de respaldar manualmente y realizar un seguimiento. Y cae en una mentalidad de "configúralo y olvídalo".
JakeGould

Respuestas:

12

Probablemente deberías mirar NixOS , que usa el administrador de paquetes Nix .

NixOS es una distribución de GNU / Linux que tiene como objetivo mejorar el estado del arte en la gestión de la configuración del sistema. En las distribuciones existentes, las acciones como las actualizaciones son peligrosas: actualizar un paquete puede provocar que otros paquetes se rompan, actualizar un sistema completo es mucho menos confiable que reinstalar desde cero, no puede probar con seguridad cuáles serán los resultados de un cambio de configuración, no puede deshacer fácilmente los cambios en el sistema, etc.

usuario408342
fuente
12

Lo que probablemente esté buscando se llaman herramientas de administración de configuración . Hay varios para elegir, pero es muy subjetivo cuál es el mejor en cualquier situación.

Personalmente, encontré que Puppet es bastante fácil de comenzar, pero otras opciones populares son Salt y Ansible .

Nifle
fuente
Ya usé títeres en vagabundo, pero no recuerdo haber podido deshacer alguna cosa desordenada que hice en mi sistema operativo ...
Patrick Villela
44
Las herramientas de administración de configuración generalmente no proporcionan la funcionalidad de "reversión". La "reversión" está eliminando el sistema y está utilizando la herramienta de administración de configuración para reconfigurar el sistema. Por ejemplo, puede usar una herramienta de aprovisionamiento simple como Razor para formatear y reinstalar el sistema operativo. Luego, entrega una herramienta como Chef para aplicar la configuración.
ctc
2
¿Está destinada la bruja? :)
Ruslan
¿Cfengine está muerta? Recuerdo haber intentado obtener algo que estaba feliz de usar en mi pequeño clúster cuando era administrador de sistemas. Pero nunca terminé desplegándolo.
Peter Cordes
Con cualquiera de estas herramientas, obtienes el control de la versión manteniendo tus archivos de configuración maestros en git. Lo que obtienes de ellos es centralizar y reducir la configuración de un sistema completo a uno de los pocos archivos de texto.
Peter Cordes
10

Es probable que esto sea excesivo para su pregunta, pero la forma más fácil de revertir los cambios masivos / a nivel del sistema es la captura de imágenes:

https://en.wikipedia.org/wiki/Snapshot_%28computer_storage%29

No ha mencionado los detalles de su plataforma, pero dado que está familiarizado con git, no sería demasiado difícil imaginar que podría estar interesado en usar un sistema de archivos más complejo. Si usara un sistema de archivos de última generación (ignore el nombre de click-bait-y), podría "rebobinar" por completo su sistema con un simple comando insertado en su terminal. Todos los cambios realizados se revertirán con muy poco retraso / esfuerzo. ZFS sería su mejor opción y podría consultar este increíble artículo de Ars para ver si puede ser algo que valga la pena para usted (también hay muchas otras muchas funciones excelentes):

http://arstechnica.com/information-technology/2014/02/ars-walkthrough-using-the-zfs-next-gen-filesystem-on-linux/

ebrio
fuente
2
Otra opción es btrfs, que por cierto tiene soporte oficial para empresas de Ubuntu, SUSE> = 11, Oracle. Aunque todavía se está desarrollando y blahblahblah, es confiable para el uso diario de escritorio y funciona muy bien.
ignis
1
@ignis: Recientemente encontré un Btrfs inconsistente y no recuperable a pesar de un RAID 5 debajo, y escuché sobre dos instancias más en el trabajo. Por lo tanto, no ignoraría ligeramente esas advertencias sobre que no está listo para su uso en producción. No quería creerlo antes de encontrarlo. Tal vez se deba a una RAM defectuosa, que es una de las razones por las cuales las personas de ZFS recomiendan encarecidamente el uso de la memoria ECC. Supongo que lo mismo podría aplicarse a Btrfs.
MvG
6

Dependiendo de lo que quiera decir con "actualizaciones", puede estar interesado en herramientas de administración de configuración como etckeeper , que le permiten registrar cambios en la configuración del sistema automáticamente y volver a las configuraciones anteriores.

Si Git es una herramienta familiar, y si por "actualizaciones" quiere decir "actualizaciones de la configuración del sistema" en lugar de "actualizaciones de los paquetes del sistema" o "actualizaciones de todos los archivos almacenados en el servidor", entonces esto puede ser lo que está buscando para.

Vale la pena considerar que si está utilizando herramientas como Puppet, Ansible, Etckeeper, etc., no siempre es posible "retroceder" limpiamente sin pérdida de datos, a menos que haga todo el trabajo (por ejemplo, instantáneas, como se menciona en otra respuesta). El enfoque correcto dependerá de su situación (por ejemplo, las instantáneas no serían apropiadas para un sistema de producción en el que podría perder los pedidos de los clientes al retroceder).

Chris Burgess
fuente
2

He usado OpenVMS en el pasado, viene por defecto con un sistema de archivos de versiones .

Si las herramientas como la marioneta no llegan lo suficientemente lejos, tal vez esté buscando un sistema de archivos de versiones.

Niels van Reijmersdal
fuente
1

Si realmente desea administrar todo su sistema (incluida la versión del kernel) como git, está buscando NixOS .

Para una versión menos complicada, puede usar el administrador de paquetes de NixOS, nix, de casi cualquier Unix. Nix se puede instalar como un usuario simple, aunque es más fácil instalarlo como root. Una vez que se instala nix, puede usarlo para instalar paquetes como usuario sin privilegios, y funciona bien junto con su administrador de paquetes existente, sin conflictos. También es muy fácil eliminar completamente nix de su sistema, por lo que realmente no hay excusa para no probarlo. ;-)

Para abordar directamente su pregunta, Nix define su sistema completo instalado como un entorno, que es, como un git commit, un puntero a un conjunto de punteros a versiones muy específicas de todos los paquetes instalados.

Cuando Nix actualiza un paquete, crea un nuevo entorno, que apunta a un nuevo conjunto de punteros a paquetes (principalmente a los existentes, para paquetes que no se han actualizado; nuevamente, esto es muy similar a un nuevo git commit, que principalmente apunta a archivos anteriores sin cambios y algunas nuevas versiones de archivos modificados).

Es, por supuesto, trivial cambiar a una versión anterior del entorno y, en mi opinión, bifurcar (es decir, crear un nuevo entorno basado en uno anterior). Se puede cargar un entorno para un shell específico (de hecho, es el conjunto de variables de entorno disponibles para un shell, de ahí el nombre), por lo que también puede tener fácilmente diferentes entornos para diferentes proyectos en la misma máquina. ¡No más problemas de dependencia porque un proyecto no relacionado necesita otra versión de una biblioteca!

NixOS lleva eso al siguiente nivel y administra toda su computadora, incluido el kernel, de manera similar, permitiendo actualizaciones de muy bajo riesgo de toda la máquina.

No he terminado de leerlos todos, pero recomiendo las pastillas Nix de Lethalman como introducción a Nix.

Gary Verhaegen
fuente
0

Si eres del tipo experimental, puedes intentar simplemente registrar todo tu sistema de archivos en un repositorio git local. Esto sería ... interesante, creo.

  1. git init en el directorio raíz /
  2. Construya un .gitignore para la raíz que ignora los directorios cuyo contenido cambia con frecuencia o no debe registrarse:
    • / dev
    • /correr
    • / tmp
    • / proc
    • / perdido + encontrado
    • ...
  3. Agregue a los tipos de archivo específicos .gitignore que desee excluir:
    • * .tmp
    • *.Iniciar sesión
    • ...
  4. Agregue sus contenidos iniciales con git add -A .
  5. Cometer la instantánea con git commit -m "Initial Snapshot"
  6. Usa tu computadora
  7. Agregar periódicamente instantáneas git commit -Am "Snapshot X"o similares

Algunos beneficios serían:

  • Herramientas familiares para el historial de revisiones, como gitkygit diff
  • Cualquier livecd u otro sistema operativo con git podría restaurar sus copias de seguridad
  • ¿Podría llevar todo su sistema a github y restaurarlo en otras máquinas o compartirlo con personas ...?
  • La ramificación sería rápida e intuitiva
  • /, el directorio git en tu raíz inspiraría la confianza para abusar de tu sistema y ser más aventurero, similar al código fuente
  • Cada instantánea posterior sería relativamente pequeña en comparación con otras soluciones de respaldo
  • Sería genial para revisar y rastrear cambios de configuración en / etc.
  • Podría ser pionero en esto y llamarlo linit - linux in git.
  • Infamia

Algunas rarezas pueden incluir:

  • Es poco probable que pueda restaurar / retirar ramas o revisiones con cambios significativos, o cambios en los archivos que están en uso mientras se ejecuta el sistema, tal vez tenga un USB de arranque mínimo con git para este propósito
  • Compromisos iniciales bastante grandes
  • Comprobado en directorios .git posteriores -?
  • gitesperamos que funcione como se espera cuando se encuentra en un directorio de código fuente anidado en el gitcontenedor raíz .
  • / etc / passwd y / etc / shadow tendrían que incluirse en el repositorio para mantener y rastrear a los usuarios y restaurarlos a otras máquinas, pero ahora cualquier persona con acceso de visualización (tal vez en github) puede ver información confidencial como los contenidos, permisos, y hashes de contraseña de sus usuarios.
Ehryk
fuente
3
Es muy probable que este enfoque falle horriblemente, ya que git no manejará los permisos correctamente. Suponiendo que haga todo eso como root, esencialmente debería dividir todo el sistema de archivos a root, y eso, a su vez, interrumpirá las operaciones de escritura. Por ejemplo, toma una instantánea, la restaura, el propietario del directorio de registro de apache se convierte en root (en lugar de http), apache no puede escribir en el directorio, no se inicia. Lo sé porque intenté algo similar, pero en una escala mucho más pequeña, e incluso en eso, hubo problemas.
Tuncay Göncüoğlu
Eche un vistazo a Nix, como se sugiere en otra respuesta;)
Michael Pankov
¡Bueno saber! Pensé que manejaba los permisos, al menos el octeto, ya que mis scripts retienen la bandera x en el clon, pero no pensé en la propiedad de archivos y grupos
Ehryk
Parece que hay herramientas adicionales que retendrán los permisos y las propiedades completas, si es necesario. Una de esas herramientas es git-cache-meta , y aquí hay una lista
Ehryk