Tab
que permita o preenchimento automático de nomes de arquivo sem distinção entre maiúsculas e minúsculas, isso também não é um problema. Normalmente, essas configurações são realizadas em um dos chamados "arquivos de perfil", meio que
.bashrc
localizado no diretório inicial do usuário. Se alguém trabalha em um único computador, ele não tem problemas com as configurações. Contribui para o arquivo

.bashrc
, e outros arquivos semelhantes, as alterações necessárias, personaliza o sistema para si mesmo e trabalha em um ambiente que se comporta da maneira que ele deseja. Os problemas surgem quando alguém precisa usar vários computadores. Talvez estejamos falando sobre um servidor web, um computador desktop, uma máquina que desempenha o papel de um firewall e algumas dezenas de Raspberry Pi. Como você configura todos esses sistemas para serem iguais? E como você mantém as configurações atualizadas depois de configuradas da mesma maneira?
Várias opções para configurações de sincronização
Na verdade, existem várias maneiras de sincronizar as configurações em sistemas Linux. Uma vez que essas configurações geralmente são armazenadas em algum tipo de arquivo, quase qualquer mecanismo de sincronização pode ser usado para resolver nosso problema. Isso levará algum tempo, mas como resultado você pode conseguir o que deseja. Suponha que você possa colocar todos os seus arquivos de configuração em um diretório e, em seguida, colocar links simbólicos para esses arquivos nos locais corretos em seu diretório inicial. Além disso, usando, você pode
rsync
sincronizar esta pasta entre sistemas diferentes.
Se você está familiarizado com o Git, então já adivinhou outra opção para resolver esse problema. Aqui, além da capacidade de sincronizar configurações, você também terá a oportunidade de saber o que e quando mudou em seus arquivos de configuração. Na verdade, estou em um material de formas inusitadas de usar o Git, já falei sobre isso, mostrando minha sincronização de configurações do sistema , baseada no Git. Recentemente, porém, descobri que havia um sistema chamado chezmoi , que é escrito em Go e usa uma abordagem de sincronização de configurações que é completamente diferente da minha.
Recursos Chezmoi
De acordo com os dados do repositório de projetos,
chezmoi
oferece ao usuário as seguintes opções:
- Uma descrição declarativa do estado desejado dos arquivos do diretório pessoal.
- Usando modelos para criar arquivos.
- A segurança do trabalho é garantida pela integração com o Bitwarden, com o LastPass e com alguns programas de armazenamento local de chaves.
- Suporte para manipulação de atualização atômica. Isso protege o sistema de cair em um estado "intermediário".
- Suporte para vários sistemas operacionais.
- O usuário é informado sobre as ações que estão planejadas para serem realizadas, o modo "execução de teste" é suportado.
- Alta velocidade de trabalho, a possibilidade de escolher qual é usado em conjunto com
chezmoi
o sistema de controle de versão.
Tudo parece muito interessante. O procedimento de instalação do utilitário em diferentes sistemas operacionais tem suas peculiaridades, as instruções correspondentes podem ser encontradas no repositório do projeto.
Usando chezmoi
O arquivo executável que dá acesso aos recursos
chezmoi
, não surpreendentemente, repete o nome do projeto. Suporta vários comandos, entre os quais gostaria de referir o seguinte:
add
- adicionar um arquivo à lista de arquivos gerenciados pelo sistema.edit
- edição de arquivos.diff
- descobrir quais alterações, se houver, estão com inclusão pendente na versão de trabalho do arquivo.apply
- inclusão de alterações com aprovação pendente na versão de trabalho do arquivo.
Quando um novo arquivo é adicionado ao sistema, uma cópia dele é colocada no diretório
~/.local/share/chezmoi
. Para compatibilidade com sistemas de controle de versão,
chezmoi
ignora os arquivos neste diretório cujo nome começa com um ponto. Portanto, se você adicionar, por exemplo, um arquivo ao sistema
.bashrc
, ele será automaticamente renomeado para
dot_bashrc
.
Se apenas as possibilidades fossem
chezmoi
limitadas a isso, então não haveria nada de notável nesta utilidade. O mais interessante aqui é a sincronização das cópias dos arquivos. Para resolver este problema, ele
chezmoi
usa um sistema de controle de versão externo. Mas o que acontece se alguns dos computadores cujas configurações estão sendo sincronizadas precisarem de algumas configurações especiais?
Suporte para configurações especiais
Por exemplo, em seu computador desktop, você precisa usar um prompt de linha de comando personalizado. E no servidor, no firewall e nos computadores Raspberry Pi, você ficará satisfeito com o convite de costume. Isso significa que em cada um dos computadores, no arquivo
.bashrc
, um valor de parâmetro especial deve estar presente
PS1
.
Isso pode ser feito adicionando as entradas apropriadas à seção do
data
arquivo
chezmoi.yaml
. Na verdade, você pode usar vários formatos aqui, em particular -
JSON
e
TOML
. Este arquivo é exclusivo para cada computador. Ele permite que você faça alterações nos arquivos de modelo. Por exemplo, um
chezmoi.yaml
computador desktop pode conter uma entrada sobre
PS1String
, descrevendo as configurações complexas para o prompt da linha de comando e no mesmo arquivo para o Raspberry Pi, uma entrada semelhante já será organizada de forma muito mais fácil.
Para adicionar um determinado arquivo ao sistema que será usado como modelo (por exemplo, um arquivo
.bashrc
), você precisa usar a opção de
-T
comando
add
. O arquivo de modelo baseado em
.bashrc
terá um nome
dot_bashrc.tmpl
. Os mecanismos de modelagem padrão do Go fornecem ao usuário
chezmoi
uma variedade de opções. Além disso,
chezmoi
ele permite que você use variáveis, que, por exemplo, permitem que você trabalhe com o nome do computador e nome de usuário, com sistema operacional e identificadores de arquitetura.
Graças aos recursos usados em
chezmoi
linguagem de template, o usuário tem muito mais liberdade do que apenas usar variáveis. Em modelos, em particular, você pode usar condicionais. Por exemplo, pode ser assim:
# export EDITOR=vi # , {{- if eq .chezmoi.hostname "work-laptop" }} # ~/<code>.bashrc</code> work-laptop {{- end }}
Segurança
Chezmoi
reconhece arquivos privados e os processa de acordo. Portanto, um diretório é privado
chezmoi
, o sistema usa um prefixo
private_
ao atribuir nomes a arquivos privados (por exemplo, o nome de tal arquivo pode ser semelhante
private_dot_bashrc
).
Presume-se que algum sistema de controle de versão será usado para organizar a sincronização de arquivos. Em outras palavras, ao configurar um novo computador ou atualizar as configurações de uma determinada máquina, você sincroniza o conteúdo do diretório
chezmoi
com uma cópia das configurações armazenadas no sistema de controle de versão. Em seguida, tudo o que precisa ser configurado no arquivo de configuração e as alterações são aplicadas, possivelmente com uma verificação preliminar de quais alterações serão aplicadas.
Isso significa, é claro, que os arquivos armazenados serão tão "privados" quanto o sistema de controle de versão permitir. Se você publicar seus arquivos de configuração em um sistema público, significa que não há mais nenhuma questão de "privacidade". Uma maneira de resolver esse problema é usar um sistema de modelos e não processar o arquivo de configuração com o sistema de controle de versão. E, por ser único para cada computador, em qualquer caso não deve ser processado usando o sistema de controle de versão. Isso significa, entre outras coisas, que ele deve ser armazenado de maneira diferente dos outros arquivos.
Suponha que você tenha uma entrada como esta em seu arquivo de configuração:
hackaday: password: 0xdeadbeef
A senha deve ser mantida em segredo. E em arquivos públicos, a seguinte construção pode ser usada:
password = {{ .hackaday.password }}
Ao trabalhar com
chezmoi
, você ainda pode usar arquivos de configuração criptografados com
gpg
.
Sistema de controle de versão
Se falamos sobre sistemas de controle de versão, então
chezmoi
existem comandos para enviar materiais para sistemas de controle de versão suportados e, consequentemente, comandos para carregar dados. O padrão é usado
git
, mas existem outras opções, como
hg
. As configurações correspondentes são feitas no arquivo de configuração.
Existem também comandos que permitem simplesmente obter um conjunto completo de arquivos de configuração ou exportar a configuração. Você pode ler sobre esses comandos no repositório do projeto. Por padrão, todo o trabalho é feito no diretório inicial, mas se necessário, você pode configurar o programa para trabalhar com um diretório de destino diferente.
Resultado
No geral, pode-se notar que
chezmoi
parece um projeto bem pensado. Mas eu não vi nada aqui que me obrigasse a mudar
chezmoi
do meu sistema de sincronização de configurações. Se eu tivesse tropeçado
chezmoi
quando estava pensando em como resolver o problema em questão, provavelmente usaria esse projeto específico, e não criaria o meu próprio. Não afirmo que o sistema de modelos seja
chezmoi
muito bom, mas meu sistema consegue um efeito semelhante ao escolher arquivos diferentes dependendo do ambiente.
Arquivo de configurações exclusivas
chezmoi
difícil de manusear com controle de versão. Sim, os usuários geralmente não tendem a fazer isso. Se o repositório usado para armazenar as configurações for privado, ou se as informações privadas não estiverem incluídas nos arquivos de configuração, você pode colocar opções para o arquivo de configurações neste sistema
chezmoi
(digamos, pode haver uma versão desse arquivo para o Raspberry Pi e para computadores comuns). Então, quando você configura seu computador pela primeira vez, você pode renomear o arquivo apropriado. Mas é mais provável que o arquivo de configurações do sistema seja simplesmente copiado. A abordagem segundo a qual o arquivo de configuração
chezmoi
não são manipulados pelo controle de origem, há a vantagem de que, se configurado corretamente, você pode usar com segurança um repositório público para armazenar dados.
E para que meu sistema funcione, é muito importante usar um repositório privado - se apenas quem o usa não se importa em colocar seus arquivos de configuração em domínio público. No entanto, todos os arquivos são processados usando um sistema de controle de versão. O sistema permite que você acompanhe todas as mudanças sem a necessidade de usar modelos, que levam tempo para serem dominados. Você só precisa colocar as configurações nos arquivos apropriados. O único recurso que posso adicionar ao meu sistema, inspirado por
chezmoi
, é a capacidade de adicionar novos arquivos a ele, que são monitorados. Embora meu sistema permita que você sincronize as configurações, agora você precisa adicionar arquivos manualmente. O arquivo é movido para um diretório especial, após o qual as entradas do arquivo são adicionadas ao sistema e um link simbólico é criado.
Mas é para isso que o Linux é bom. Existem muitas maneiras de resolver o mesmo problema. Se você não gosta de uma coisa, pode encontrar outra. E se você não gosta de nada, pode criar algo seu sem muita dificuldade. Isso, no entanto, cria certos problemas ao usar o Linux por muitas pessoas comuns que não estão acostumadas com isso. Eles não procuram escolher entre muitas opções, eles querem uma solução de trabalho simples e clara. E na comunidade Linux, pelo contrário, é habitual a tudo constantemente comparar com tudo e discutir com fervor sobre o que é melhor -
emacs
seja
vi
C ou Python.
Como você sincroniza as configurações nas máquinas Linux?

