Atualizações do sistema completo transacional

0

Estou tentando projetar uma estrutura que me permita fazer uma atualização completa das transações do Ubuntu e do sistema de arquivos raiz.

O requisito é que, se minha atualização falhar, eu queira ser capaz de reverter para o estado exato em que eu estava antes.

O Ubuntu Core parece estar fornecendo o tipo exato de funcionalidade que eu preciso, mas ele vem com muitas limitações de segurança, e é realmente um sistema bastante diferente comparado ao Ubuntu clássico.

Uma opção é ter duas partições. Eu instalaria a nova versão do sistema operacional na segunda partição, reaplicaria todas as minhas configurações e atualizaria o grub para inicializar a partir dessa partição.

No entanto, eu precisaria decidir sobre o tamanho de cada partição que não é ideal. Isso também tornaria mais complicado compartilhar alguns diretórios entre as duas versões do sistema operacional (ou seja, em vez de copiar os logs em /var , eu preferiria ser capaz de apenas vincular a montagem /var de algum outro lugar). / p>

O que eu estou pensando é ter um diretório raiz com vários diretórios vazios /etc , /lib , /opt , etc., e um diretório como /versions que conteria minhas diferentes versões do OS. Por exemplo. /versions/v1/ , /versions/v2/ .

No momento da inicialização, o processo de inicialização selecionaria a versão correta e, em seguida, vincularia a montagem de cada um dos diretórios filhos nos subdiretórios raiz.

Em outras palavras, se eu quiser inicializar a partir de /versions/v2 , isso vinculará a montagem: /versions/v2/etc on /etc /versions/v2/opt on /opt etc.

O que eu estou querendo saber é se essa é a abordagem correta para esse problema e, em caso afirmativo, como isso poderia ser feito.

    
por pzakha 14.11.2017 / 19:53

1 resposta

0

Depois de algumas pesquisas, encontrei uma maneira de alcançar o que eu estava procurando.

Eu tive que cavar a imagem initramfs ( /boot/initrd.img-... ) para descobrir como a montagem de vários sistemas de arquivos foi realizada. A imagem do initramfs para o ubuntu core foi particularmente útil.

O design que eu decidi é bastante semelhante ao do Ubuntu. Eu crio uma instalação inicial do ubuntu, faço as configurações que preciso e depois faço uma cópia profunda usando cpio e finalmente empacote a cópia em um sistema de arquivos squashfs somente leitura usando mksquashfs . Eu armazenarei a imagem do squashfs na partição principal do novo sistema operacional. Durante o carregamento do sistema operacional, editei initrd.img para montar a imagem do squashfs da versão desejada em /root e, em seguida, configurei overlayroot sobre ela, que é uma sobreposição gravável.

    
por pzakha 29.11.2017 / 17:20