Criando um repositório Git em / (root) para configurações de rastreamento?

23

Então eu uso o Git principalmente para fins de desenvolvimento, mas acabei de perceber que eu poderia usá-lo para armazenar versões dos arquivos de configuração que eu tenho na minha instalação do Ubuntu.

Minha configuração proposta é:

  • git init a repo em /

  • Adicione um .gitignore at / que ignora todos os arquivos, exceto as configurações específicas que quero acompanhar.

    Por exemplo, o .gitignore pode conter ( fonte ):

    ## Ignore everything...
    *
    
    ## Except...
    !/etc/default/tlp
    !/etc/crontab
    
  • Sempre que altero essas configurações de baixo nível, posso rastreá-las.

Existe alguma coisa que poderia dar errado com essa configuração? O kernel sempre precisa de / para ter apenas determinadas pastas? Isso estragará o funcionamento de qualquer aplicativo?

    
por abhi divekar 19.05.2017 / 21:22

5 respostas

32

A resposta para ambas as suas perguntas é não, você pode criar qualquer diretório que desejar no / . a única coisa que pode acontecer são alguns problemas de permissão com alguns caminhos espaciais, eu acho.

No entanto, é melhor armazenar o diretório .git em outro lugar, algo parecido com:

git --git-dir=/home/user/backup-root --work-tree=/

Leia aqui .

    
por Ravexina 19.05.2017 / 21:30
18

Na verdade, você provavelmente deseja arquivos de configuração de controle de versão em /etc/ (você não se importa com as entradas do diretório raiz / , notavelmente diretórios como proc ou usr ou bin in / ), então você pode querer instalar o etckeeper package

E você também pode controlar alguns subdiretórios selecionados (como /usr/share/applications/ que você mencionou).

No entanto, não mexa no sistema gerenciamento de pacotes do Ubuntu. Talvez você deva principalmente fazer o backup da lista atual de pacotes instalados.

    
por Basile Starynkevitch 20.05.2017 / 08:08
6

Ter um repositório do git / funciona bem, exceto pelo fato de que ele dificulta perceber quando você tem um repositório do git de nível mais baixo com problemas, pois ele responderá para todos eles.

Nota: é menos trabalhoso e provavelmente mais útil usar 'debsums'

sudo apt-get install debsums

O que permitirá que você detecte rapidamente (a maioria) alterações em binários ou em arquivos de configuração.

Como exemplo dos pacotes instalados, aqui estão aqueles que diferem dos pacotes upstream.

$ sudo debsums -c
/boot/vmlinuz-4.10.0-19-generic

E você pode obter uma lista de arquivos de configuração alterados com:

$ sudo debsums -ec
debsums: missing file /etc/default/chromium-browser (from chromium-browser package)
 /etc/libvirt/libvirt.conf
 <snip>

Observe como o navegador chromium é empacotado incorretamente e possui um arquivo listado na lista de arquivos de pacote que não existe.

/var/lib/dpkg/info/chromium-browser.list

Isso usa os dados do dpkg e evita um grande diretório / workflow /.git.

    
por gdahlm 19.05.2017 / 21:50
5

Então, tenho explorado as outras respostas e descobri um procedimento que funciona para mim:

  • Crie um .gitignore em / . Isso foi muito mais complicado do que eu pensava que seria, por causa da maneira como o Git manipula arquivos de lista branca em subpastas. Eu usei este e este link para me ajudar.

    ## Source: https://stackoverflow.com/a/29932318/4900327
    ## Comments are on new lines because trailing whitespace matters in Git (stackoverflow.com/a/8865858/4900327)
    
    # Blacklist all files, folders and subfolders in the same directory as the .gitignore file.
    /*
    # Do not blacklist the .gitignore file.
    !.gitignore
    
    # Now whitelist certain files.
    # For files in subfolders, some hoops must be jumped through (stackoverflow.com/a/16318111/4900327):
    
    ## Whitelisting files in /etc/ folder:
    # Whitelist the /etc/ folder (the git repo folder is whitelisted always)
    !/etc/
    # Blacklist all files in /etc/ folder.
    /etc/*
    # Whitelist specific file(s) in /etc/ folder.
    !/etc/crontab
    
    
    ## Whitelisting files in /etc/default/ folder:
    # /etc/ is already whitelisted, and its contents blacklisted.
    # Whitelist /etc/default/ folder.
    !/etc/default/
    # Blacklist all files in /etc/default/ folder.
    /etc/default/*
    # Whitelist specific file(s) in /etc/default/ folder.
    !/etc/default/tlp
    
    
    ## Whitelisting files in /home/USERNAME/ folder:
    # Whitelist /home/ folder.
    !/home/
    # Blacklist all files in /home/ folder.
    /home/*
    # Whitelist /home/USERNAME/ folder.
    !/home/USERNAME/
    # Blacklist all files in /home/USERNAME/ folder.
    /home/USERNAME/*
    # Whitelist specific file(s) in /home/USERNAME/ folder
    !/home/USERNAME/.bash_profile
    !/home/USERNAME/.bashrc
    
  • Ir para / e executar git init . Até agora, não consegui armazenar a pasta .git/ em outro diretório usando o link mencionado por @Ravexina .

  • Execute git add . e git status . Você deve obter uma lista de todos os arquivos de configurações que o Git está rastreando.

    If you used the above '.gitignore', it should track '/etc/crontab', '/etc/default/tlp', '/home/USERNAME/.bash_profile', and '/home/USERNAME/.bashrc'.
    
  • Confirme com git commit -m "Initial settings files" .

  • Você pode acompanhar as alterações com git log -p -- path/to/file ou gitk path/to/file . Mais discussões sobre este aqui .

por abhi divekar 20.05.2017 / 11:03
2

Se você for armazenar material sensível (como /etc/shadow ) no git repo, você deve se certificar de que não é legível por todos os usuários, já que Por padrão, os objetos terão a permissão 444 e os diretórios tem a permissão 0755 . Você pode alterar a permissão de .git para 700 ou coloque em /root

Outro problema é que o git não armazena permissões de arquivos como o arquivo sistema, e não armazena atributos estendidos. Para arquivos, git somente armazena se eles são executáveis. Então, se você quiser restaurar um excluído arquivo, seu proprietário e grupo será root (se você fizer isso como root), e sua A permissão será 644 ou 755 . Pode ser problemático para serviços arquivos de configuração cujo proprietário não é root.

    
por yt7b97q- 21.05.2017 / 10:11