O porquê de appVMs baseadas em um template com seu próprio OS não funcionarem

Se você quer ir direto ao ponto, pula o texto e começa ler a partir do “conclusão”.

Olá. Já faz um tempo que eu tava tentando criar um template do Manjaro Linux em uma VM que eu fiz, mas até agora não consegui, e descobri o motivo.

Embora eu tenha conseguido criar a VM de template, e instalar o Manjaro nela, quando usei esse template pra fazer uma appVM, a appVM não salvava os dados. Depois de ler uma documentação do Qubes, descobri que em uma appVM padrão do Qubes, existem 4 discos vituais, os xvd (xen virtual block device).

Os discos em uma appVM padrão são:

  • xvda -
    Aqui é onde fica a raiz do sistema operacional, que é pega do template. Contém basicamente tudo que esteja fora do diretório /home¹.
    Qualquer coisa modificada nesse disco será descartada após desligar a appVM.

  • xvdb -
    Os dados que você salva na sua appVM ficam aqui. É o único disco que salva as modificações feitas nele. O diretório /home é montado aqui, ou seja, tudo que for colocado no diretório /home vai ficar nesse disco.

  • xvdc -
    Aqui é colocado um swap (que é tipo usar um pedaço do disco como memória ram) , e as modificações temporárias feitas fora do /home.
    Qualquer coisa modificada nesse disco será descartada após desligar a appVM

  • xvdd -
    Onde fica o kernel da appVM. O kernel que for colocado aqui, vem do diretório /var/lib/qubes/vm-kernels
    Qualquer coisa modificada nesse disco será descartada após desligar a appVM

(Como minha appVM não usa um kernel vindo do Qubes, ela só tem os 3 primeiros discos.)

Enfim, na minha primeira instalação do Manjaro, eu instalei TUDO, inclusive o /home, no disco xvda. Como já escrevi,

Qualquer coisa modificada nesse disco será descartada após desligar a appVM

Isso explica porque ela não estava salvando os dados.

Eu pensei que a solução seria apenas criar uma partição no disco xvdb, e montar ela no diretório /home, ou seja, mandar salvar o que estivesse no /home, no disco xvdb.

O problema é que quando eu fiz isso no meu template, a appVM nem terminava do bootar, e tinha apenas interface de texto, dizendo que não conseguia encontrar o /home. Depois de reler essa parte da documentação, percebi que:

nada do disco xvdb do seu template vai ser copiado para o disco xvdb da appVM

Depois bootar a appVM e usar cli, eu vi que o disco xvdb estava completamente vazio. Não tinha nem tabela de partição. Consegui criar uma partição no xvdb da minha appVM, mas quando fui configurar o /etc/fstab para montar a partição no /home, persebi que não estava funcionando. Aí eu percebi que o arquivo fstab fazia parte da raiz do OS, e estava sendo escrito no disco xvda. Como disse antes,

Qualquer coisa modificada nesse disco será descartada após desligar a appVM

Conclusão

Se você instalar todo o seu OS no disco xvda do seu template, as appVMs desse template vão agir como disposableVMs, descartando toda mudança feita nela.

Se você instalar parte do seu OS no xvda, e instalar o /home no disco xvdb, você vai presisar colocar algum programa pra ser executado durante o boot que monte a partição do disco xvdb no /home, e se a partição não existir, criá-la.

Observações

Já que eu sou um iniciante, é provável que haja algum erro no meu texto. Se perceberem, por favor me corrijam.

1- Técnicamente, é tudo que esteja fora do diretório /rw/, mas pra simplificar, eu disse apenas /home.

4 Likes

Muito bom conteúdo! Apesar de não ser iniciante, já aprendi aqui algumas coisas. Por isso não consigo comfirar que está correto. Mas é uma boa investigação.

Na verdade, está em falta instruções sobre como fazer um template:

1 Like

Muito bom conteudo @Veiodocafe! Eu tambén aprendi algumas coisas! :clap:

2 Likes

Eu acho que /rw/config/rc.local é bom lugar pra colocar esse programa.

1 Like

Parabéns pelo conteúdo manin

2 Likes

Caraca gente, obrigado, de verdade. Depois que eu não consegui instalar um template do Manjaro fiquei me sentindo um idiota e passei uma semana fora do forum.

Sério, ver que eu consegui ajudar vocês a aprender alguma coisa já me botou pra cima.

Obrigado @deeplow , @gonzalo-bulnes e @den1ed

: )

2 Likes

Oi gonzalo, blz? Eu não entendi se é no /rw/config/rc.local do template, ou da appVM.

Explica aí? c:

Como você já escreveu, quando ligar uma AppVM, os arquivos que não fazem parte do diretório /rw são copiados desde a TemplateVM.

O /rw/config/rc.local da AppVM é executado durante o boot, e pode ser utilizado pra modificar qualquer coisa na AppVM.

Se você quiser modificar alguma AppVM de forma permanente, mas no quiser que tudas as AppVMs criadas desde essa TemplateVM também sejan modificadas, é possível criar arquivos de configuração no diretório /rw (ou /home) da AppVM, e colocar no /rw/config/rc.local um programa pra copiar os archivos no lugar adequado durante o boot. Issa é a idéa. :bulb:


Dito isto, montar a partição do disco xvdb no /home (e se a partição não existir, criá-la), é um exemplo que aplica-se a tudas as AppVM. Após reconsiderar, eu acho que a minha sugestão não era muito boa; é provável que modificar a TemplateVM seja uma melhor idéa neste caso. …mas sempre é bom ter opções! :wink:

A explicação faz sentido @Veiodocafe ?

1 Like

Legal ! Não sabia que o /rw/config/rc.local executava durante o boot. Achei que tinha que ser executado manualmente.

Verdade. Se fossemos colocar o programa no /rw/config/rc.local, teriamos que fazer isso em cada appVM.

Além disso, até onde sei, o diretório /rw/ é criado pelo Qubes, e, imagino eu, que todas as configurações dentro dele também. Inclusive, a configuração de executar o rc.local. Então, uma máquina virtual com um OS que não é nativo do Qubes, não vai ter o /rw/ e as configurações.

Eu não sei você, mas eu gostaria bastante que o Qubes possibilitasse a instalação de outros OSs com mais facilidade…

1 Like

Eu diria que só falta mesmo um guia para a comunidade começar a contribuir mais para isto.

Sobre o tema de copiar arquivos desde a TemplateVM no /home da AppVM, achei interesante (Inglês):