Gostaria de poder duplicar a lista de systemd
unidades habilitadas de uma máquina para outra.
Uma systemd
unidade é habilitada ou desabilitada com base na existência (ou falta) de um link simbólico. Neste momento, a melhor ferramenta que consegui pensar é tree
ou talvez find
? Então, em teoria, eu poderia escrever algo; mas já não existe uma ferramenta para fazer isso?
Em um mundo perfeito, ele examinaria todos os vários diretórios onde esses links simbólicos são criados (conheço 3: /etc/systemd /run/systemd ~/.config/systemd/user
) e renderizaria um arquivo legível que poderia ser usado para reproduzir as configurações em outro computador. Também útil para backup.
Para criar uma lista de serviços systemd ativados , podemos usar
Isso nos deixaria com a variável ENABLED_SERVICES com uma lista de serviços habilitados, um por linha.
Para habilitar todos os serviços nesta lista, podemos usar
Você provavelmente desejará revisar os comandos antes de serem realmente executados. Você pode fazer isso executando
(cuidado com a declaração de eco adicional ).
A única coisa que resta é obter a variável ENABLED_SERVICES do sistema A para o sistema B , para que possam ser usados para habilitar os serviços lá. Existem várias opções para fazer isso. Por exemplo, você pode redirecionar a saída do primeiro comando para um arquivo, transferi-lo para o sistema B e atribuir a saída do comando cat deste arquivo para uma variável com o nome ENABLED_SERVICES .
No entanto, pode ser mais simples usar uma versão modificada do primeiro comando
e copie a saída e cole-a em um terminal no sistema B . Este comando produz várias linhas de saída, o que é perfeitamente adequado.
Você conhece a velha piada em que o desenvolvedor diz "Não há bug, funciona no meu laptop!" então o colega que descobriu o bug responde "Então, enviaremos seu laptop"? Quando você tenta fazer uma cópia exata de um sistema de produção, está se aproximando perigosamente desse abismo.
Em vez de reutilizar (na realidade, muitas vezes parcialmente não intencional) artefatos de modificação não documentada do estado do sistema, coloque o estado pretendido na linguagem implantável mais expressiva, consistente e mãos-livres que você puder ( ansible é seu amigo ) e armazene-o no controle de versão ( git é seu amigo). Use instantâneos do estado efetivo (para isso, o rsync provavelmente é bom o suficiente) para validar que você aperfeiçoou esse método pelo menos uma vez (comparando um sistema novo configurado automaticamente com o criado à mão), caso contrário, apenas para fins de diagnóstico e recuperação de desastres.