Como fazer snapper-boot.service criar instantâneos para todas as configurações?

1

Eu tenho uma configuração do btrfs com vários subvolumes montados em diferentes locais do sistema de arquivos. Cada subvolume tem uma configuração para snapper:

cat /etc/conf.d/snapper

[...]
SNAPPER_CONFIGS="root home [...]"

O serviço para criar instantâneos na inicialização é definido no arquivo

cat /usr/lib/systemd/system/snapper-boot.service

[...]
ExecStart=/usr/bin/snapper --config root --cleanup-algorithm number --description "boot"
ExecStart=/usr/bin/snapper --config home --cleanup-algorithm number --description "boot"
[...]

Em vez de adicionar uma linha por subvolume , que é propensa a erros, eu gostaria de ler a lista de configurações do snapper e iterar .

Isso é possível?

É aconselhável?

    
por Archibald 13.11.2018 / 19:33

1 resposta

1

Sim, é possível implementar isso.

Uma maneira simples seria usar um script de shell que chamaria snapper repetidamente, uma vez para cada configuração. Um loop for seria suficiente para fazer isso, parece.

Você pode até fazer isso inline no arquivo de unidade do systemd:

ExecStart=/bin/sh -e -c '. /etc/conf.d/snapper; for conf in $$SNAPPER_CONFIGS; do /usr/bin/snapper --config "$$conf" --cleanup-algorithm number --description "boot"; done'

Note que você precisa escapar do $ s, de modo que o systemd não tente interpretá-las como variáveis systemd e, em vez disso, permite que o shell as interprete. (Na minha opinião, usar um shell script externo que você chama em ExecStart= é uma abordagem mais limpa, então você não precisa lidar com o escape e não precisa empacotar tudo em uma única linha.)

Outra opção seria modificar o próprio snapper para que ele pudesse lidar com isso nativamente. Digamos que ele leia esse arquivo de configuração e manipule essas configurações sempre que for chamado sem nenhum argumento --config . Essa seria uma abordagem ainda mais limpa.

Se é aconselhável ou não ... eu acho que depende. Se você obtiver essa unidade snapper-boot.sevice de um pacote da sua distribuição, poderá ter problemas sempre que houver uma atualização de pacote que possa tocar nesse arquivo. Então, de certa forma, depende da sua situação particular.

Se este arquivo de unidade for enviado com um pacote da sua distribuição Linux, você pode querer considerar abrir um relatório de erro para eles, pedindo que eles evitem codificar nomes de configuração no arquivo de unidade.

Se não for propriedade da sua distribuição, considere armazená-la em /etc/systemd/system , pois o /usr/lib é normalmente reservado para arquivos enviados e gerenciados pela distribuição Linux.

    
por 13.11.2018 / 21:06