Artigo testado com as distribuições
Gentoo e
Void. Sendo que Gentoo é a distribuição "hospedeira" e a Void a distribuição "convidada".
Apesar de eu testar com Gentoo e Void, teoricamente você pode fazer o procedimento com qualquer distribuição. Vai ter que adaptar alguma coisa, mas se tiver, vai ser pouco.
Primeiro passo: na distribuição hospedeira, crie um diretório com o nome que preferir. No meu exemplo, eu criei um diretório chamado "void", pois a distribuição convidada será Void
Linux.
# mkdir /mnt/void
Obs.: se usar outro nome, não esqueça de alterar nos comandos a seguir.
Entre no diretório:
# cd /mnt/void
Baixe o arquivo rootfs da Void Linux em:
Veja na imagem, em destaque, o arquivo que eu escolhi: a versão do Void com glibc, para 64-bits.
Após copiar o link, baixe o arquivo com:
# wget [link]
Extraia-o:
# tar xvf arquivo-baixado.tar.xz
Depois proceda com os comandos para o chroot:
# mount --rbind /sys /mnt/void/sys && mount --make-rslave /mnt/void/sys
# mount --rbind /dev /mnt/void/dev && mount --make-rslave /mnt/void/dev
# mount --rbind /proc /mnt/void/proc && mount --make-rslave /mnt/void/proc
# cp /etc/resolv.conf /mnt/void/etc/
# PS1='(chroot) # ' chroot /mnt/void/ /bin/bash
Pronto, agora você está dentro do Void Linux.
Atualize o xbps (gerenciador de pacotes do Void), os pacotes existentes e depois instale o editor Vim:
# xbps-install -Su xbps
# xbps-install -u
# xbps-install vim
Edite o arquivo rc.conf:
# vim /etc/rc.conf
Ele é bem comentado e autoexplicativo.
Veja imagem:
Opcionalmente edite o arquivo do idioma do sistema e atualize a configuração:
# vim /etc/default/libc-locales
# xbps-reconfigure -f glibc-locales
Crie a senha de root:
# passwd
Agora vamos fazer a configuração para que os aplicativos gráficos do Void possam aparecer no Gentoo.
Ainda no Void, instale o xauth:
# xbps-install xauth
Depois execute o comando:
# xauth list
Isso vai dizer qual é o arquivo que deve ser criado para fazer a "ligação gráfica" entre o hospedeiro e o convidado.
Aqui o resultado foi:
xauth: file /root/.xauthcktac6 does not exist
Então o arquivo é o ".xauthcktac6".
Em um novo terminal, na distro hospedeira, execute o mesmo comando. Aqui resultou em:
ladybug/unix:0 MIT-MAGIC-COOKIE-1 bb3b796bd8fdb677735d74f057df6758
O "ladybug" é o nome da máquina hospedeira! Importante.
Ainda no sistema hospedeiro execute:
# xauth extract /mnt/void/root/.xauthcktac6 ladybug/unix:0
Esse comando vai enviar para o arquivo ".xauthcktac6" (dentro do Void Linux), o código identificador (MAGIC COOKIE) do sistema hospedeiro (ladybug).
Altere os nomes onde for necessário com base no resultado dos comandos anteriores.
Agora, se você executar:
# echo $DISPLAY
Tanto no Void, quanto no Gentoo, deve obter o MESMO resultado. Aqui deu ":0".
Se no sistema convidado não der o mesmo resultado, execute nele:
# export DISPLAY=":0"
Para testar se um aplicativo gráfico instalado no sistema convidado vai abrir no sistema hospedeiro, instale o xcalc no sistema convidado:
# xbps-install xcalc
Depois execute:
# xcalc
Se der certo, o aplicativo irá abrir:
Para evitar ter problemas com fontes, instale:
# xbps-install xorg-fonts
Para evitar problemas com drivers de vídeo, instale o pacote apropriado para o seu hardware. No meu caso:
# xbps-install xf86-video-amdgpu mesa-vulkan-radeon
Será que a "gambiarra" funciona com um aplicativo mais complexo? Testei o emulador de GameCube:
# xbps-install dolphin-emu
# dolphin-emu
O emulador Dolphin da imagem acima, estava instalado no Void, não no Gentoo, porém abriu no Gentoo. A ROM do jogo estava no Gentoo, em um disco externo. Precisei montar o disco dentro do Void assim, no sistema hospedeiro:
# mount /dev/sda1 /mnt/void/mnt/
Conclusão
Uma distro dentro da outra é diferente do uma máquina virtual. Coisas são compartilhadas com o sistema hospedeiro, como o Kernel. Veja:
O Void está usando o kernel do sistema hospedeiro. Mas mesmo assim, fazer isso pode ser uma tarefa divertida de realizar, e também pode ser útil para testar programas sem interferir no sistema principal.
Para desfazer o procedimento, faça o seguinte no terminal do sistema convidado:
# exit
Para sair do chroot.
Depois:
# umount /mnt/void/sys -l
# umount /mnt/void/dev -l
# umount /mnt/void/proc -l
Agora, se quiser, pode deletar o diretório inteiro:
# rm -rf /mnt/void
Ou, se quiser montar novamente, não delete o diretório e repita os passos:
# cd /mnt/void
# mount --rbind /sys /mnt/void/sys && mount --make-rslave /mnt/void/sys
# mount --rbind /dev /mnt/void/dev && mount --make-rslave /mnt/void/dev
# mount --rbind /proc /mnt/void/proc && mount --make-rslave /mnt/void/proc
# PS1='(chroot) # ' chroot /mnt/void/ /bin/bash
Aceito sugestões e críticas construtivas!
Obrigado.
Fontes: