Como reutilizar / estender o mecanismo de metadados do etckeeper para o controle git de sistemas de arquivos não-/ etc, ou estender diretamente com o dito recurso?

16

Visão geral + pergunta

Eu quero o controle de metadados do sistema de arquivos do tipo etckeeper para diretórios não controlados por / etc, git. Diretórios domésticos e de aplicativos da web, entre outros, são classicamente sensíveis aos metadados (propriedade de arquivo, ACL, permissões). Isso pode ser extremamente útil / importante para empregar o git para implantação automatizada de servidores (junto com ferramentas como o Fabric ), entre outras coisas. Eu gostaria de reutilizar o recurso do tipo etckeeper nos diretórios, seja com o próprio etckeeper ou qualquer outra coisa.

Alguém pode sugerir quaisquer dicas / truques / soluções de trabalho para fornecer um ou ambos dos seguintes:

  1. aplicar o mecanismo do etckeeper (apenas se preocupe com a capacidade específica do git do etckeeper) para diretórios não-controlados por / git. (Pode assumir pelo menos Debian / Ubuntu Linux; gostaria de suporte a MacOSX / homebrew, se possível.)
  2. estender git com suporte a metadados (além de coisas simplificadas como git-cache-meta ) para suportar uma capacidade do tipo etckeeper ou melhor?

Mais detalhes, fundo

Há um interesse crescente em estender o git com recursos de controle de metadados do sistema de arquivos . O "mecanismo" de metadados do etckeeper parece bastante poderoso e confiável na minha experiência, e o etckeeper parece popular com os outros também. metastore menos, pelo menos em parte devido aos desafios não baseados em texto / hostil de mesclagem do metastore . Além disso, o etckeeper parece ter começado com um núcleo baseado em metastore, mas depois mudou para o seu próprio (especulativo?).

Obviamente, isso tem dependências específicas do SO / sistema de arquivos. (por exemplo, não tentar implantar automaticamente no Windows.) Sugira um opcionalextensão (se for uma "extensão nativa") do git, habilitado sob demanda pelo usuário com conseqüências conhecidas de quebra de plataforma cruzada, de tal forma que o comportamento nativo não quebra a facilidade de compatibilidade entre plataformas do Git "por padrão". Além disso, não é necessário salvar metadados unix / darwin / etc extravagantes (como ACLs); usuário básico / grupo / outros perms e propriedade de usuário / grupo ficariam bem. (Essas são as únicas coisas que atualmente estão quebrando as coisas em meu "controle / políticas de segurança / vulnerabilidade".) SOs específicos que eu estou mirando na frente: Debian, Ubuntu, MacOS 10.6+. Mais tarde: Redhat (CentOS, Fedora, RHEL), SUSE, talvez outros Linuxes, e * BSD (FreeBSD, NetBSD, OpenBSD). Não vejo necessidade / aplicação para Windows / VMS (mesmo que o VMS possa ser posix-friendly) ou outros sistemas operacionais não-unix-like em qualquer ponto previsível.

Veja também: background em recursos de git preexistentes, metadados de arquivos / rastreamento de tipo de arquivo nesta pergunta de stackoverflow que eu publiquei .

Desenvolver requisitos para um novo projeto?

Além disso: se alguém quiser desenvolver requisitos para essa capacidade, tenho certeza de que isso poderia ser útil, particularmente para um projeto novo / incompleto para abordar acima.

Johnny Utahh
fonte
Para sua informação. Encontrou este Q & A no ServerFault: O etckeeper pode ser usado para rastrear arquivos de configuração fora do / etc? .
Johnny Utahh
Você provavelmente poderia conseguir isso usando alguns ganchos git (potencialmente sofisticados) .
Justin ᚅᚔᚈᚄᚒᚔ
Ganchos personalizados: certo, como com o git-cache-meta, como mencionado acima; útil, mas uma solução simplista. Infelizmente, estou procurando "empurrar" essa funcionalidade para além dos ganchos personalizados do usuário em algo "de propriedade da comunidade" para melhor funcionalidade / confiabilidade / recursos / codereview / etc. Além disso, não quero escrever do zero, pelo menos não sozinho.
Johnny Utahh
Para sua informação. Minha pergunta de stackoverflow: O que significa 'git commit' quando diz 'create mode…' no stdout?
Johnny Utahh
Alguma atualização aqui?
cregox

Respostas:

4

De acordo com esta resposta de falha de servidor , você apenas faz isto:

Está bem ali na man page .

  • Crie um diretório /foo
  • Inicialize com o etckeeper: etckeeper -d /foo init
  • Commit aplicar commits no diretório: etckeeper -d /foo commit 'message'
SamB
fonte
Muito interessante. Não consigo encontrar portas / testes do etckeeper rodando no Mac OS X. Nada no homebrew nem em qualquer outro lugar substancial. Alguém sabe de alguma coisa?
Johnny Utahh
Estou pedindo as sugestões do etckeeper para o Mac OS X portando aqui: joeyh.name/code/etckeeper/discussion
Johnny Utahh
@ JohnnyUtahh: não parece ter sido uma resposta do Joey ou de qualquer outra pessoa ... você fez algum progresso em uma porta do OS X?
iconoclast
@ JohnnyUtahh: a propósito, eu encontrei este: github.com/myint/etckeeper
iconoclast
@iconoclast Eu não fiz nenhum trabalho para uma porta OS X, ou qualquer trabalho neste projeto, para esse assunto. github.com/myint/etckeeper parece útil - obrigado!
Johnny Utahh
4

Eu investiguei esse problema e decidi criar um projeto git-store-meta para ele.

O git-store-meta é um script perl que integra os recursos interessantes do git-cache-meta, metastore, setgitperms e mtimestore. Deve servir para um bom compromisso da flexibilidade, funcionalidade, desempenho e portabilidade e consistência entre plataformas.

Danny Lin
fonte
Ainda não encontrei tempo para testar e revisar o git-store-meta, mas à primeira vista parece completo e bastante promissor. Muito apreciado. Estou muito ansioso para testar isso. Mais uma vez obrigado, @ Danny Lin.
Johnny Utahh
@ 'Danny Lin', referenciei git-store-meta na minha pergunta relacionada ao stackoverflow .
Johnny Utahh
Meu ponto de vista: Esta solução (git-store-meta) é melhor que a utilização indevida do etckeeper.
Guettli
Atualização: Acabei de ler o README.md em git-store-meta e ficou ótimo . Eu pareço ter que eu ou alguém da minha equipe tente isso na próxima chance que tivermos.
Johnny Utahh