Systemid persistente systemd em um ambiente linux incorporado stateless (UBI / UBIFS)

1

Eu tenho uma máquina Linux embutida que tem um sistema de arquivos raiz somente de leitura que é carregado a partir de um UBI / UBIFS.

Sempre que o dispositivo é inicializado, ele cria um novo ID de máquina systemd, que eu compreendo ao ler o documentação :

The machine ID is usually generated from a random source during system installation and stays constant for all subsequent boots. Optionally, for stateless systems, it is generated during runtime at early boot if it is found to be empty.

A partir da leitura do systemd machine-id-setup.c , eu entendo como funciona no sentido de que, ele tentará gerar o ID da máquina em / etc / machine-id se ele não existir, se isso falhar e a partição for somente leitura , ele irá gerar em / run / machine-id e montá-lo em / etc / machine-id (não em um symlink).

Existe uma pergunta: eu posso ter um ID de máquina fixo para um dispositivo sem estado? As duas opções que tenho são:

1) Armazene o ID da máquina no armazenamento não volátil (externo / eMMC):

  • Após a inicialização, verifique se o / etc / machine-id existe
  • Se não existir, continue pelos serviços do systemd passando o serviço / montagem que gera o ID da máquina (como normal).
  • Novo arquivo de serviço: uma vez gerado o ID da máquina, copie essa cadeia para uma partição que não esteja na memória / NAND, ou seja, eMMC (não volátil).

Portanto, agora que o dispositivo foi inicializado pelo menos uma vez e o ID da máquina é armazenado em um meio de armazenamento não volátil; a sequência de inicialização é a seguinte:

  • O dispositivo inicializa e monta a partição não volátil.
  • Verifica se existe um ID de máquina não volátil (igual ao primeiro passo acima)
  • Este arquivo existe, portanto, montá-lo em / etc / machine-id
  • O arquivo de serviço que manipula a população de / etc / machine-id agora não é executado porque isso já existe.

2) Modifique o systemd machine-id-setup.c arquivo e altere os diretórios codificados permanentemente onde o ID da máquina é gerado, armazenado e salvo. No entanto, eu gostaria de evitar essa solução, pois isso significa que eu teria que modificar os arquivos do sistema systemd.

Alguém poderia compartilhar algum insight sobre isso?

Obrigado

    
por Brendan 31.10.2017 / 06:06

1 resposta

0

Você está pedindo para misturar conceitos contraditórios: Persistência implica estado, mas você quer que o sistema seja sem estado.

Além das opções que você mencionou, você também pode procurar usar um sistema de arquivos "Union" ou "Overlay". Isso instruiria o SO a procurar primeiro um arquivo em um sistema de arquivos persistente e, se não estiver presente, verifique o sistema de arquivos sem estado. É assim que o LiveCD é implementado, dando a alusão de poder modificar arquivos no que é claramente um meio somente de leitura.

    
por 31.10.2017 / 20:50