Skip to content

LabIC-UFF/labic-maquinas-clientes-kvm

Repository files navigation

maquinas-clientes

Parte 0: configuração do host com Ubuntu 22.04 server

  1. 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)
  2. Após instalação, ajuste a senha de root
    • sudo su
    • passwd
  3. Configure o SSH para acesso remoto de root
    • Edite: /etc/ssh/sshd_config
      • Modifique: #PermitRootLogin prohibit-password para PermitRootLogin yes
      • Adicione: PubkeyAcceptedKeyTypes=+ssh-rsa
  4. Instale os drivers da NVIDIA através do ubuntu
    • sudo ubuntu-drivers install nvidia
  5. Execute o comando nvidia-smi
    • Verifique versão do driver e versão suportada do CUDA!
    • Caso nvidia-smi não funcione, reinicie, e tente novamente. Só continue quando funcionar.

Parte 1-3: Configuração Multipass + libvirt + ufw + port forwarding

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.

Base Técnica

Para essa parte, considere os três textos de referência:

Parte 1/3: configurando Multipass com libvirt

  1. Instale o libvirt daemon
    • sudo apt install libvirt-daemon-system
  2. Instale o Multipass
    • sudo snap install multipass
  3. Conecte o libvirt com multipass
    • sudo snap connect multipass:libvirt
  4. Teste o multipass (I)
    • multipass list
    • Se der erro, verifique antes de prosseguir!
  5. Pare o multipass e configure o libvirt
    • multipass stop --all
    • sudo multipass set local.driver=libvirt
  6. Teste o multipass (II)
    • multipass launch
    • multipass list
    • Se der erro, verifique antes de prosseguir!
  7. Teste o virsh e apague a vm de teste
    • virsh list
    • multipass delete NOME_VM --purge
  8. 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
    • virsh net-destroy default
    • virsh net-start default
    • ip addr (verifique virbr0)

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.

Parte 2/3: lançando a VM personalizada com NFS+LDAP

  1. Monte o /home via NFS do servidor 192.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
  2. 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
  3. Desmonte o /home na hospedeira
    • umount /home
  4. Edite o arquivo labic-auto-launch.sh
    • Ajuste a linha CPUS=16
    • Ajuste a linha MEM=15G
    • Ajuste demais linhas de configuração
  5. Lance a máquina convidada mpvirtual01 (ajuste o nome)
    • ./labic-auto-launch.sh mpvirtual01
    • Verifique atentamente se existem erros no processo!
  6. Verifique o acesso à máquina mpvirtual01 criada
    • multipass list
      • multipass shell mpvirtual01
      • exit para sair
    • virsh list
      • virsh console mpvirtual01
      • Ctrl+] para sair
  7. Verifique o IP da máquina criada
    • virsh net-dhcp-leases default

Parte 3/3: configurando o firewall ufw e encaminhamento de portas

  1. Instale o ufw
    • sudo apt install ufw
  2. Libere o acesso ao ssh (IMPORTANTE!)
    • sudo ufw allow ssh
    • sudo ufw allow OpenSSH
  3. Verifique os acessos liberados
    • ufw show added
    • ufw status
    • Se não tiver SSH liberado, não prossiga!
  4. Habilite o firewall ufw
    • ufw enable
  5. Verifique os status gerais e defaults
    • ufw status verbose
      • Padrão esperado: Default: deny (incoming), allow (outgoing), deny (routed)
  6. 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 hospedeiro 192.168.0.0/16
    • 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
  7. 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 convidado 10.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

  8. Recarregue o firewall ou reinicie
    • bash /etc/libvirt/hooks/qemu
    • ufw reload
    • OU
    • reboot (somente se achar necessário... deveria funcionar sem isso!)
  9. Teste acesso externo fora do hospedeiro
  10. Parabéns! A VM está acessível externamente!

Parte 4: configurando passthrough do driver NVIDIA para VM convidada

TODO.

No momento, estamos evitando passthrough e utilizando nativamente as GPUs, para evitar (MAIS) problemas. Mas é possível aparentemente.

Algumas dicas, caso queira tentar:

Dicas extras

Para configurar SSH no cliente

  • adicionar linha em /etc/ssh/sshd_config

Dica CUDA - Ubuntu 22.04

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

CUDA HPC Toolkit (CUDA 11.7)

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 via apt

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages