Como posso obter o gerenciamento de atualizações do tipo "Git" para Linux?

14

Eu quero gerenciar as atualizações do meu sistema Linux de uma maneira semelhante à do Git , podendo ir e voltar dentro de "revisões". Como eu pude fazer isso?

Patrick Villela
fonte
Como administrador de sistemas Linux / Unix que lida com os aspectos mais profundos de como os sistemas Linux / Unix funcionam, não consigo imaginar que tipo de mudanças seria necessário fazer no sistema para exigir um sistema de revisão semelhante ao Git. A principal coisa que obtém alterações nesses sistemas são instalações de software e arquivos de configuração. Os arquivos de configuração são fáceis de fazer backup manualmente e acompanhar. E cai em uma mentalidade de “configure e esqueça”.
precisa saber é o seguinte

Respostas:

12

Você provavelmente deve olhar para o NixOS , que usa o gerenciador de pacotes Nix .

O NixOS é uma distribuição GNU / Linux que visa melhorar o estado da arte no gerenciamento de configurações do sistema. Nas distribuições existentes, ações como atualizações são perigosas: atualizar um pacote pode causar a quebra de outros pacotes, atualizar um sistema inteiro é muito menos confiável do que reinstalar do zero, não é possível testar com segurança quais serão os resultados de uma alteração na configuração, você não pode desfazer facilmente as alterações no sistema e assim por diante.

user408342
fonte
12

O que você provavelmente está procurando é chamado de ferramentas de gerenciamento de configuração . Existem vários para escolher, mas é muito subjetivo qual é o melhor em qualquer situação.

Pessoalmente, achei o Puppet bastante fácil de começar, mas outras opções populares são Salt e Ansible .

Nifle
fonte
Eu já utilizado fantoche nas errante, mas eu não me lembro de nunca ser capaz de desfazer algo confuso eu fiz no meu OS ...
Patrick Villela
4
As ferramentas de gerenciamento de configuração geralmente não fornecem a funcionalidade de "reversão". A "reversão" está destruindo o sistema e usando a ferramenta de gerenciamento de configuração para reconfigurar o sistema. Por exemplo, você pode usar uma ferramenta de provisionamento bare metal como Razor para formatar e reinstalar o sistema operacional. Em seguida, ele passa para uma ferramenta como Chef para aplicar a configuração.
Ctc
2
A bruxa é planejada? :)
Ruslan
O cfengine está morto? Lembro-me de tentar obter algo em que fiquei feliz em usar no meu pequeno cluster quando eu era administrador do sistema. Mas eu nunca acabei implantando.
Peter Cordes
Com qualquer uma dessas ferramentas, você obtém controle de versão mantendo seus arquivos de configuração principais no git. O que você obtém deles é centralizar e reduzir a configuração de um sistema inteiro para um dos poucos arquivos de texto.
Peter Cordes
10

Provavelmente, isso é um exagero para a sua pergunta, mas a maneira mais fácil de reverter mudanças maciças no nível do sistema é capturar instantâneos:

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

Você não mencionou as especificidades do seu equipamento, mas como você está familiarizado com o git, não seria exagero imaginar que você poderia estar interessado em usar um sistema de arquivos mais complexo. Se você usasse um sistema de arquivos de última geração (ignore o nome click-isca-y), seria possível "rebobinar" todo o seu sistema inteiro com um mero comando digitado no seu terminal. Toda e qualquer alteração feita seria revertida com muito pouco atraso / esforço. O ZFS seria sua melhor aposta e você pode consultar este incrível artigo do Ars para ver se vale a pena algo para você (existem muitos outros recursos excelentes também):

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

ebrioso
fonte
2
Outra opção é o btrfs, que a BTW possui suporte corporativo oficial do Ubuntu, SUSE> = 11, Oracle. Embora ainda esteja sendo desenvolvido e blahblahblah, é confiável para o uso diário da área de trabalho e tem um desempenho muito bom.
Ignis
1
@ignis: Encontrei recentemente um Btrfs inconsistente e não recuperável, apesar de um RAID 5 abaixo, e ouvi falar de mais duas instâncias no trabalho. Portanto, eu não desconsideraria levemente os avisos de que ele não estava pronto para uso em produção. Eu não queria acreditar antes de encontrá-lo. Talvez tenha sido devido à falta de memória RAM, que é uma das razões pelas quais as pessoas do ZFS aconselham fortemente o uso da memória ECC. Eu acho que o mesmo pode se aplicar ao Btrfs.
MvG 14/01
6

Dependendo do que você quer dizer com "atualizações", você pode estar interessado em ferramentas de gerenciamento de configuração como o etckeeper , que permitem gravar alterações na configuração do sistema automaticamente e reverter para configurações anteriores.

Se o Git é uma ferramenta familiar, e se por "atualizações", você quer dizer "atualizações na configuração do sistema", em vez de "atualizações nos pacotes do sistema" ou "atualizações em todos os arquivos armazenados no servidor", então pode ser o que você está procurando para.

Vale a pena considerar que, se você estiver usando ferramentas como Puppet, Ansible, Etckeeper etc., nem sempre é possível "reverter" de maneira limpa sem perda de dados, a menos que você passe o tempo todo (por exemplo, instantâneos, como mencionado em outra resposta). A abordagem correta dependerá da sua situação (por exemplo, a captura instantânea não seria apropriada para um sistema de produção em que você poderá perder os pedidos dos clientes ao reverter).

Chris Burgess
fonte
2

Eu usei o OpenVMS no passado, ele vem por padrão com um sistema de arquivos de versão .

Se ferramentas como o fantoche não forem suficientemente longe, talvez seja o que você está procurando em sistemas de arquivos com controle de versão.

Niels van Reijmersdal
fonte
1

Se você realmente deseja gerenciar todo o seu sistema (incluindo a versão do kernel) como o git, está procurando pelo NixOS .

Para uma versão menos envolvida, você pode usar o gerenciador de pacotes do NixOS, nix, a partir de praticamente qualquer unix. O Nix pode ser instalado como um usuário simples, embora seja mais fácil instalá-lo como root. Após a instalação do nix, você pode usá-lo para instalar pacotes como um usuário não privilegiado, e ele funciona bem ao lado do seu gerenciador de pacotes existente, sem conflitos. Também é muito fácil remover completamente o nix do seu sistema, então não há realmente nenhuma desculpa para não testá-lo. ;-)

Para responder diretamente à sua pergunta, o Nix define seu sistema instalado completo como um ambiente, que é, como um commit do git, um ponteiro para um conjunto de ponteiros para versões muito específicas de todos os pacotes instalados.

Quando o Nix atualiza um pacote, ele cria um novo ambiente, que aponta para um novo conjunto de ponteiros para pacotes (principalmente os existentes, para pacotes que não foram atualizados; novamente, isso é muito semelhante a um novo git commit, que geralmente aponta para arquivos inalterados anteriores e algumas novas versões de arquivos modificados).

É claro que é trivial mudar para uma versão anterior do ambiente e, acredito, fork (ou seja, criar um novo ambiente baseado em um anterior ao anterior). Um ambiente pode ser carregado para um shell específico (na verdade, é o conjunto de variáveis ​​de ambiente disponíveis para um shell, daí o nome), para que você também possa facilmente ter ambientes diferentes para projetos diferentes na mesma máquina. Não há mais problemas de dependência porque um projeto não relacionado precisa de outra versão de uma biblioteca!

O NixOS leva isso para o próximo nível e gerencia todo o computador, incluindo o kernel, de maneira semelhante, permitindo atualizações de risco muito baixo de toda a máquina.

Ainda não terminei de ler todos eles, mas recomendo as pílulas letais de Nix como introdução ao Nix.

Gary Verhaegen
fonte
0

Se você é do tipo experimental, tente verificar todo o seu sistema de arquivos em um repositório git local. Isso seria ... interessante, eu acho.

  1. git init no diretório raiz /
  2. Construa um .gitignore para a raiz que ignora diretórios cujo conteúdo muda frequentemente ou não deve ser verificado:
    • / dev
    • /corre
    • / tmp
    • / proc
    • / perdido + encontrado
    • ...
  3. Adicione aos tipos de arquivo específicos .gitignore que você deseja excluir:
    • * .tmp
    • *.registro
    • ...
  4. Adicione seu conteúdo inicial com git add -A .
  5. Confirme a captura instantânea com git commit -m "Initial Snapshot"
  6. Use o seu computador
  7. Adicione periodicamente instantâneos git commit -Am "Snapshot X"ou similares

Alguns benefícios seriam:

  • Ferramentas familiares para o histórico de revisões, como gitkegit diff
  • Qualquer livecd ou outro sistema operacional com git pode restaurar seus backups
  • Você poderia enviar todo o seu sistema para o github e restaurá-lo para outras máquinas ou compartilhá-lo com as pessoas ...?
  • A ramificação seria rápida e intuitiva
  • O diretório /, git em sua raiz inspiraria a confiança necessária para abusar do sistema e ser mais aventureiro, semelhante ao código-fonte
  • Cada instantâneo subsequente seria relativamente pequeno em comparação com outras soluções de backup
  • Seria ótimo para revisar e rastrear alterações de configuração em / etc
  • Você pode ser pioneiro nisso e chamar linit - linux no git.
  • Infâmia

Algumas curiosidades podem incluir:

  • É improvável que você possa restaurar / fazer checkout de ramos ou revisões com alterações significativas ou alterações nos arquivos que estão em uso durante a execução do sistema - talvez tenha um mínimo de inicialização USB com git para esse fim
  • Compromissos iniciais bastante grandes
  • Verificado nos diretórios .git subsequentes -?
  • gitespero que funcione conforme o esperado quando você estiver em um diretório de código-fonte aninhado no gitcontêiner raiz .
  • / etc / passwd e / etc / shadow precisariam ser incluídos no repositório para manter e rastrear usuários e restaurá-los para outras máquinas, mas agora qualquer pessoa com acesso à visualização (talvez no github) pode ver informações confidenciais como conteúdo, permissões, e hashes de senha de seus usuários.
Ehryk
fonte
3
É provável que essa abordagem falhe terrivelmente, pois o git não manipulará as permissões corretamente. Supondo que você faça tudo isso como root, você basicamente lançaria todo o sistema de arquivos como root, e isso, por sua vez, interromperia as operações de gravação. Por exemplo, você tira um instantâneo, restaura-o, o proprietário do diretório de log do apache se torna raiz (em vez de http), o apache não pode gravar no diretório, falha ao iniciar. Eu sei disso, porque tentei uma coisa semelhante, mas em uma escala muito menor, e mesmo nisso, houve problemas.
Tuncay Göncüoğlu 14/01
Dê uma olhada em Nix, como sugerido em outra resposta;)
Michael Pankov
Bom saber! Eu pensei que tinha permissões punho, pelo menos, o octeto, como meus scripts reter o x bandeira no clone, mas eu não penso sobre o arquivo e grupo de proprietários
Ehryk
Parece que existem ferramentas adicionais que reterão permissões e propriedades completas, se você precisar. Uma dessas ferramentas é git-cache-meta , e aqui está uma lista
Ehryk