- Instale o Ubuntu 22.04 server
- Utilize DHCP ou IP estático na instalação
- Atualize o instalador (via snap) durante a instalação
- Instale o driver na NVIDIA durante a instalação (se possível)
- Após instalação, ajuste a senha de root
sudo su
passwd
- Configure o SSH para acesso remoto de root
- Edite:
/etc/ssh/sshd_config
- Modifique:
#PermitRootLogin prohibit-password
paraPermitRootLogin yes
- Adicione:
PubkeyAcceptedKeyTypes=+ssh-rsa
- Modifique:
- Edite:
- Instale os drivers da NVIDIA através do ubuntu
sudo ubuntu-drivers install nvidia
- Execute o comando
nvidia-smi
- Verifique versão do driver e versão suportada do CUDA!
- IMPORTANTE: nunca tente instalar CUDA via apt ACIMA da versão informada... se for o caso, faça instalação MANUAL via .bin
- Confira a tabela de compatibilidade de driver com versão cuda: https://docs.nvidia.com/deploy/cuda-compatibility/index.html
- Caso
nvidia-smi
não funcione, reinicie, e tente novamente. Só continue quando funcionar.
- Verifique versão do driver e versão suportada do CUDA!
O objetivo é configurar o hospedeiro (host) com Multipass e biblioteca libvirt, oferecendo maior controle das VMs convidadas (guests), também configurando firewall ufw com encaminhamento de portas via nat.
Para essa parte, considere os três textos de referência:
- https://multipass.run/docs/using-libvirt
- https://www.arubacloud.com/tutorial/how-to-manage-and-forward-ports-with-ufw-on-ubuntu-18-04.aspx
- FUNDAMENTAL: https://hackernoon.com/understanding-ufw-8d70d5d8f9d2
- FUNDAMENTAL: https://www.cyberciti.biz/faq/kvm-forward-ports-to-guests-vm-with-ufw-on-linux/
- Instale o libvirt daemon
sudo apt install libvirt-daemon-system
- Instale o Multipass
sudo snap install multipass
- Conecte o libvirt com multipass
sudo snap connect multipass:libvirt
- Teste o multipass (I)
multipass list
- Se der erro, verifique antes de prosseguir!
- Pare o multipass e configure o libvirt
multipass stop --all
sudo multipass set local.driver=libvirt
- Teste o multipass (II)
multipass launch
multipass list
- Se der erro, verifique antes de prosseguir!
- Teste o virsh e apague a vm de teste
virsh list
multipass delete NOME_VM --purge
- Ajuste o serviço de DHCP do libvirt
virsh net-edit default
- Rede:
10.1.0.0/24
- Intervalo:
10.1.0.1
-10.1.0.10
- Rede:
virsh net-destroy default
virsh net-start default
ip addr
(verifiquevirbr0
)
Observação: libvirt+multipass NÃO suporta modo bridge (até 2022 pelo menos...)! O comando
multipass networks
deve dar erro! Portanto, o DHCP será necessário para as VMs, bem como o encaminhamento de portas com NAT para acesso externo.
- Monte o
/home
via NFS do servidor192.168.91.2
na hospedeira- Edite
/etc/fstab
e adicione:-
192.168.91.2:/home /home nfs soft,intr,async,cto,bg,auto,retry=2
-
mount /home
- Edite
- Copie a chave SSH pública do multipass para o usuário
ubuntu
(padrão de todas VMs)ssh-keygen -y -f /var/snap/multipass/common/data/multipassd/ssh-keys/id_rsa >> my_id_rsa.pub
cat my_id_rsa.pub >> /home/ubuntu/.ssh/authorized_keys
- Desmonte o
/home
na hospedeiraumount /home
- Edite o arquivo
labic-auto-launch.sh
- Ajuste a linha
CPUS=16
- Ajuste a linha
MEM=15G
- Ajuste demais linhas de configuração
- Ajuste a linha
- Lance a máquina convidada
mpvirtual01
(ajuste o nome)./labic-auto-launch.sh mpvirtual01
- Verifique atentamente se existem erros no processo!
- Verifique o acesso à máquina
mpvirtual01
criadamultipass list
multipass shell mpvirtual01
exit
para sair
virsh list
virsh console mpvirtual01
Ctrl
+]
para sair
- Verifique o IP da máquina criada
virsh net-dhcp-leases default
- Instale o
ufw
sudo apt install ufw
- Libere o acesso ao
ssh
(IMPORTANTE!)sudo ufw allow ssh
sudo ufw allow OpenSSH
- Verifique os acessos liberados
ufw show added
ufw status
- Se não tiver SSH liberado, não prossiga!
- Habilite o firewall
ufw
ufw enable
- Verifique os status gerais e defaults
ufw status verbose
- Padrão esperado:
Default: deny (incoming), allow (outgoing), deny (routed)
- Padrão esperado:
- Libere o acesso de encaminhamento
NEW
para a VM convidada (guest) no libvirt- Crie o arquivo de hook
qemu
(precisa ser esse nome!)- Observação: consideramos rede convidada
10.1.0.0/24
e rede externa do hospedeiro192.168.0.0/16
- Observação: consideramos rede convidada
nano /etc/libvirt/hooks/qemu
-
#!/bin/bash
-
v=$(/sbin/iptables -L FORWARD -n -v | /usr/bin/grep 192.168.0.0/16 | /usr/bin/wc -l)
-
[ $v -le 2 ] && /sbin/iptables -I FORWARD 1 -o virbr0 -m state -s 192.168.0.0/16 -d 10.1.0.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT
-
exit 0
-
- Dê permissão de execução no script
qemu
chmod +x /etc/libvirt/hooks/qemu
- Crie o arquivo de hook
- Crie uma regra de encaminhamento NAT para a porta desejada (no caso, 2222 do hospedeiro para 22 no convidado)
- Considere a interface hospedeira
enp2s0
e IP convidado10.1.0.6
- Edite o arquivo:
/etc/ufw/before.rules
- Escreva ANTES do
*filter
: -
*nat
-
:PREROUTING ACCEPT [0:0]
-
-A PREROUTING -i enp2s0 -p tcp --dport 2222 -j DNAT --to-destination 10.1.0.7:22
-
COMMIT
- Escreva ANTES do
- Considere a interface hospedeira
- Recarregue o firewall ou reinicie
bash /etc/libvirt/hooks/qemu
ufw reload
- OU
reboot
(somente se achar necessário... deveria funcionar sem isso!)
- Teste acesso externo fora do hospedeiro
ssh usuario@hospedeiro -p 2222
- Deveria cair dentro da VM convidada no hospedeiro
- Caso não funcione, volte ao hospedeiro e confira as operações
ssh root@hospedeiro
(cenário básico que deveria estar funcionando)
- Verifique mais detalhes em: https://www.cyberciti.biz/faq/kvm-forward-ports-to-guests-vm-with-ufw-on-linux/
- Parabéns! A VM está acessível externamente!
TODO.
No momento, estamos evitando passthrough e utilizando nativamente as GPUs, para evitar (MAIS) problemas. Mas é possível aparentemente.
Algumas dicas, caso queira tentar:
- adicionar linha em
/etc/ssh/sshd_config
PubkeyAcceptedKeyTypes=+ssh-rsa
- Fonte: https://bbs.archlinux.org/viewtopic.php?id=270005
- Problema verificado com log:
cat /var/log/auth.log
userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
Verifique a versão suportada pelo driver NVIDIA:
nvidia-smi
Embora CUDA 11.7 seja o mais novo, o driver nativo do Ubuntu 22.04 vem com driver 510 / CUDA 11.6.
Seguir instalação via apt quebrará o sistema muito provavelmente para um CUDA acima!
Então, faça o download e instalação manual do .bin: cuda_11.7.0_515.43.04_linux.run
(NÃO instale o driver!)
Verifique a compatibilidade do driver com o CUDA... driver 510 com CUDA 11.7 está ok: https://docs.nvidia.com/deploy/cuda-compatibility/index.html
echo 'deb [trusted=yes] https://developer.download.nvidia.com/hpc-sdk/ubuntu/amd64 /' | sudo tee /etc/apt/sources.list.d/nvhpc.list sudo apt-get update -y sudo apt-get install -y nvhpc-22-5
CUDA (11.7) via apt (somente se nvidia-smi tiver suporte a CUDA 11.7):
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600 sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ /" sudo apt-get updatesudo apt-get -y install cuda