Hyper-V (Português)

From ArchWiki

Hyper-V é um hipervisor incluso em algumas versões do Microsoft Windows. É capaz de executar uma máquina virtual contendo Arch Linux. Hyper-V é geralmente mais orientado ao uso empresarial do que doméstico, e não fornece uma interface tão conveniente e simples de virtualização quanto a de programas como VirtualBox, Parallels, ou VMware. Entretanto, versões mais recentes e compilações do Windows 10 e Windows Server 2016 incluem opções de configuração mais fáceis e melhor compatibilidade com Arch Linux. Recursos de rede tais como NAT para comutadores internos, NATs múltiplos e encaminhamento de portas foram adicionados sem a necessidade de configurar um Compartilhamento de Conexão com a Internet. Máquinas virtuais de segunda geração agora também funcionam adequadamente para Arch Linux.

Instalação

Hyper-V é incluso com Windows desde Windows Server 2008, bem como Windows 8, 8.1 e 10 nas suas versões Pro. Pode ser ativado via Painel de Controle em "Ativar ou desativar recursos do Windows" sob "Programas e Recursos". Ative "Hyper-V", aplique a alteração e siga as instruções na tela.

Configuração de rede

Primeiro, deve-se configurar um novo comutador virtual First, você deve configurar um novo comutador virtual para que sua máquina virtual possa se conectar à Internet. Uma vez que Hyper-V esteja ativo, inicie o Gerenciador do Hyper-V: procure por ele ou inicie-o a partir do Prompt de comando com o seguinte comando:

%windir%\system32\mmc.exe "%windir%\system32\virtmgmt.msc"

Configurar um comutador virtual

Para conectar sua máquina virtual em uma rede existente, use um comutador de rede interno ou externo (adaptador de rede virtual). Um comutador externo deve ser vinculado (em ponte) a um dos adaptadores de rede existentes do host (por exemplo, Ethernet ou Wi-Fi). Um comutador interno pode ser usado para comunicação de rede entre o host e as máquinas virtuais, sem que as máquinas virtuais tenham acesso à rede externa. Adicionar a funcionalidade NAT a um comutador interno faz com que o host atue como um roteador para as máquinas virtuais, permitindo que as máquinas virtuais acessem a rede externa.

Nem todos os recursos de rede (por exemplo, configuração NAT) podem ser configurados por meio da interface gráfica do Gerenciador do Hyper-V. Executar o PowerShell como administrador permite um melhor controle sobre a configuração.

Comutador externo

Para criar um comutador externo, na barra lateral direita, selecione "Gerenciar comutadores virtuais...". Na barra lateral esquerda da caixa de diálogo que se abre, escolha "Novo comutador de rede virtual". Em "Que tipo de comutador virtual você deseja criar?", selecione "Externo" e depois "Criar comutador virtual". Digite um novo nome para o comutador virtual. Em "Rede externa", escolha o adaptador de rede a ser vinculado ao comutador externo.

Você será avisado sobre a interrupção da rede; continue e sua rede será desconectada brevemente enquanto o comutador é configurado.

Usando o PowerShell (executado como administrador), as etapas acima podem ser feitas da seguinte forma:

# Obtém uma lista dos adaptadores de rede no host. Em um laptop, você normalmente deve ver 'Ethernet' e 'Wi-Fi'
PS C:\WINDOWS\system32> Get-NetAdapter

# Cria o comutador externo com o nome de VM-External-Switch, vinculado ao adaptador de rede chamado Wi-Fi obtido a partir do comando anterior
PS C:\WINDOWS\system32> New-VMSwitch -Name "VM-External-Switch" -AllowManagementOS $True -NetAdapterName "Wi-Fi"

Em uma máquina virtual Arch Linux, ao escolher um comutador externo como seu adaptador de rede efetivamente conecta o adaptador de rede do host Windows com a interface eth0 da máquina virtual. A interface pode ser configurada dentro do Arch Linux pelos meios usuais (systemd-networkd, netctl, etc.) com um IP estático ou com DHCP. A máquina virtual agirá como outro host na rede externa.

Por exemplo, se você deseja que a máquina virtual Arch Linux use um IP estático e o host Windows está configurado como 192.168.0.100/24, então a máquina virtual Arch Linux deverá ser configurada em algo como 192.168.0.101/24, com o mesmo gateway e servidores DNS configurados no host.

Se estiver usando DHCP na máquina virtual, o endereço IP será atribuído pelo servidor DHCP na rede externa.

Comutador interno

A partir da versão 1803 ("Fall Creators Update"), o Windows 10 tem um comutador NAT incorporado (chamado de "Default Switch") que lhe dá instantâneo acesso à Internet após a instalação da sua máquina virtual caso você a configure para usar DHCP, veja este post no blog Technet, portanto você não precisará das instruções a seguir para obter um comutador NAT funcional.

Para criar um comutador interno, siga os mesmos passos usados para criar um comutador externo, apenas substituindo as escolhas relevantes para 'comutador interno'. A partir do Windows 10 Anniversary Update (Version 1607, OS Build 14393), o suporte nativo a NAT para comutadores internos foi adicionado ao Hyper-V. Para versões anteriores, o Compartilhamento de Conexão com a Internet (ICS) pode ser usado para habilitar o acesso à rede para máquinas virtuais em comutadores internos.

Para descobrir qual versão e compilação do Windows você está usando, em um prompt de comando ou PowerShell, execute:

> winver

Usando PowerShell (execute como Administrador), um comutador interno pode ser criado com os seguintes comandos:

# Cria o comutador interno com o nome de VM-Internal-Switch
PS C:\WINDOWS\system32> New-VMSwitch -Name "VM-Internal-Switch" -SwitchType Internal

# Verifica se o comutador interno foi criado
PS C:\WINDOWS\system32> Get-VMSwitch

# Obtém o índice de interface do comutador interno recentemente criado, normalmente com o nome de 'vEthernet (nome)'
PS C:\WINDOWS\system32> Get-NetAdapter

# Configura o endereço IP do commutador interno, observando o índice de interface recuperado do comando anterior.
# Neste exemplo, o endereço de rede do comutador interno é 192.168.3.0/24 e seu índice de interface é 50.
PS C:\WINDOWS\system32> New-NetIPAddress -IPAddress 192.168.3.1 -PrefixLength 24 -InterfaceIndex 50

# As máquinas virtuais usando o comutador interno devem usar endereços IP estáticos, tal como 192.168.3.2/24.
# O suporte para DHCP em comutadores internos não foi incluído nas versões atuais do Windows (a partir da versão 1703, compilação 15063).

Com os passos acima, o host e máquinas virtuais já podem comunicar-se uns com os outros desde que estejam na mesma rede virtual (192.168.3.0/24). As máquinas virtuais, entretanto, não serão capazes de acessar a rede externa até que um NAT ou ICS seja configurado.

Na compilação 14393 ou mais recente do Windows 10, comutadores internos podem ser configurados para NAT e encaminhamento de porta:

# Cria o NAT com endereço IP no comutador interno
PS C:\WINDOWS\system32> New-NetNat -Name "VM-NAT-Network" -InternalIPInterfaceAddressPrefix 192.168.3.1/24

# Verifica se o NAT foi criado
PS C:\WINDOWS\system32> Get-NetNat

# Ativa o encaminhamento de porta para SSH na porta 2222 de qualquer interface no host para uma máquina virtual com endereço IP 192.168.3.2/24
PS C:\WINDOWS\system32> Add-NetNatStaticMapping -NatName "VM-NAT-Network" -Protocol TCP -ExternalIPAddress 0.0.0.0 -ExternalPort 2222 -InternalIPAddress 192.168.3.2 -InternalPort 22

# Verifica se o encaminhamento de portas está ativo
PS C:\WINDOWS\system32> Get-NetNatStaticMapping

Consulte a documentação da Microsoft NetNat para uma lista completa de comandos.

Para versões e compilações anteriores do Windows, o Compartilhamento de Conexão com a Internet pode ser usado. Abra Configurações de Rede e Compartilhamento, Configurações do Adaptador, onde você precisará habilitar o compartilhamento de conexão com a Internet para o seu adaptador de Internet que você normalmente usa. Uma vez que a conexão puder ser compartilhada, adicione-a a uma ponte junto com o comutador virtual que você criou na etapa anterior.

Criação de máquina virtual

Na barra lateral esquerda, selecione seu computador abaixo de "Gerenciador do Hyper-V". Na barra lateral direita, selecione "Novo" > "Máquina virtual...". No Assistente de nova máquina virtual, você pode, em geral, especificar as configurações que desejar, mas algumas devem ser obrigatoriamente configuradas.

Sob "Especificar geração", você pode escolher "Geração 1" ou "Geração 2". Máquinas virtuais de geração 1 emulam uma máquina baseada em BIOS e portas legadas. Já a geração 2, provê uma máquina baseada em UEFI. Em geral, Em geral, use a Geração 2, a menos que por motivos de compatibilidade ou portabilidade você precise usar a Geração 1. Além disso, ao usar a Geração 2 para uma máquina virtual com Arch Linux, certifique-se de desabilitar o Secure Boot nas configurações da máquina virtual em Hardware -> Segurança.

Em "Memória de inicialização" sob "Atribuir memória", selecione o suficiente para que Arch e programas possam executar adequadamente.

Em "Conexão" sob "Configurar rede", selecione o comutador virtual criado anteriormente.

Em "Conectar disco rígido virtual", selecione "Criar um disco rígido virtual", e certifique-se de que "Tamanho" está apropriado para o seu uso. O disco rígido virtual é esparso, portanto, o disco rígido virtual usará apenas o armazenamento real necessário para armazenar o que o sistema operacional virtual gravou nele.

Em "Opções de instalação", selecione "Instalar um sistema operacional inicializável a partir de um CD/DVD-ROM". Caso esteja instalando Arch a partir de um disco ou dispositivo USB, selecione "Unidade de CD/DVD física" em "Mídia", e selecione a letra apropriada. Caso esteja instalando Arch a partir de uma imagem em um arquivo ISO, selecione "Arquivo de imagem (.iso)", e selecione o arquivo na caixa de diálogo "Procurar...". Para máquinas de Geração 2, inicializar a partir de uma unidade de CD/DVD física não é suportado.

Configuração da máquina virtual

O próximo passo é ajustar as configurações da máquina virtual.

Se preferir, é possível adicionar mais processadores virtuais em sua máquina virtual. Isto permite que a máquina virtual use mais de um dos núcleos do processador, o que irá aumentar o desempenho em muitos casos. Se pretende usar a máquina virtual intensivamente, talvez queira alocar até metade de seus núcleos de processador. Para alterar o número de processadores virtuais, selecione "Processador" na barra lateral esquerda, então faça o ajuste "Número de processadores virtuais".

Altere quaisquer configurações que desejar, então selecione "OK" para aplicá-las e fechar a caixa de diálogo de configurações.

Instalação do Arch

Uma vez que a máquina virtual esteja completamente configurada, você estará pronto para instalar Arch. Na barra lateral direita, selecione "Iniciar", então "Conectar...", e uma janela de conexão abrirá. A rede deverá funcionar automaticamente quando a mídia de instalação do Arch estiver executando; verifique usando ping em um endereço que você tem conhecimento de que responderá, por exemplo

ping archlinux.org

Se não houver resposta, a conexão não está funcionando. Se este é o caso, você estará provavelmente experienciando um bug reconhecido pela Microsoft. Você pode tentar solucioná-lo instalando o hotfix a partir da página Knowledge Base, ou simplesmente aguardar um pouco e tentar novamente.

Em geral, agora você pode instalar o Arch como faria em qualquer outro sistema. As máquinas virtuais de geração 1 têm suporte somente para BIOS (sem UEFI), portanto você deve seguir as instruções específicas para BIOS para um dos vários boot loaders.

Pós-instalação

Após a instalação do Arch, você pode continuar a configurar recursos.

Para usar serviços de integração do Hyper-V, instale hyperv e inicie/ative os serviços hv_fcopy_daemon.service, hv_kvp_daemon.service e hv_vss_daemon.service.

Desligue a máquina virtual, abra a caixa de diálogo "Configurações" novamente, e na barra lateral esquerda, selecione "Unidade de DVD" sob "Controlador IDE" ou "SCSI". Em "Mídia", escolha "Nenhum". Isto fará com que a máquina virtual pare de tentar inicializar a partir da mídia de instalação a cada inicialização.

Compartilhamento de diretórios

Arquivos podem ser compartilhados entre host e guest com muito pouco esforço. Primeiro, no host, escolha a pasta que deseka compartilhar com o guest ou crie-a. Abra a caixa de diálogo "Propriedades" da pasta (alt + Enter ou clique com o botão direito e escolha "Propriedades..."). Vá para a guia "Compartilhamento" e selecione "Compartilhamento avançado...". Marque a caixa "Compartilhar esta pasta". Por padrão, a pasta terá permissões de somente leitura, o que significa que a máquina virtual poderá lê-la mas não poderá gravar nada dentro dela. Se desejar alterar estas permissões, selecione "Permissões". Aqui, você poderá escolher quais usuários poderão acessar a pasta compartilhada e quais permissões eles têm. No geral, você provavelmente estará compartilhando em ambas as direções e deve marcar "Permitir" para "Alterar" e "Ler". Antes de fechar a caixa de diálogo "Propriedades" da pasta compartilhada, anote seu "Caminho de rede", o qual deve estar na forma \\nome do computador\nome da pasta.

Depois, você precisará encontrar o endereço IP do host. Feche a caixa de diálogo "Propriedades", e abra o prompt de cmando ou PowerShell. Execute ipconfig. Você deverá ver uma entrada cujo nome termina com o nome do comutador virtual que você criou (por exemplo Ethernet adapter vEthernet (Novo Comutador Virtual)). Abaixo desta entrada, procure por Endereço IPv4 e anote-o.

Depois, você precisará montar a pasta compartilhada de dentro do Arch. Inicialize a máquina virtual. Uma vez que esteja executando, você irá primeiro instalar cifs-utils, o qual irá permitir que você monte compartilhamentos CIFS (CIFS é o protocolo que o Windows usa para pastas compartilhadas). Então, você precisará decidir onde a pasta compartilhada será montada. Uma boa escolha seria algum lugar em /mnt, como /mnt/Hyper-V.

No comando para montar o compartilhamento, substitua quaisquer barras invertidas no "Caminho de rede" que você anotou por barras normais.

# mount -t cifs [Caminho de rede com barras normais] mountpoint -o user=[usuário o qual deseja autenticar],ip=[endereço IP do host anotado anteriormente]

Será pedida uma senha para o usuário que você estará autenticando. Você pode especificá-la nas opções do comando, com password=senha, embora esta não seja uma boa idéia em termos de segurança já que a senha estará, agora, em seu arquivo de histórico de comandos; ou caso esteja executando o comando a partir de um script, salva no script indefinidamente. Em vez disso, você pode usar um arquivo de credenciais, o qual permitirá que seja especificado seu usuário e senha em um arquivo com direitos de acesso restritos. Ele poderá ter qualquer nome; por exemplo, se ele for nomeado como .credentials e salvo em seu diretório home, seria da seguinte forma:

~/.credentials
username=usuário
password=senha

Depois de criar o arquivo, altere as permissões para restringir acesso de leitura:

chmod 600 ~/.credentials

Então você poderá adicionar outra opção ao comando mount: credentials=~/.credentials. Agora, ao montar o compartilhamento, seu nome de usuário e senha serão automaticamente aplicados.

Para mais um exemplo concreto, digamos que esteja montando um compartilhamento com o caminho de rede \\PC\share em /mnt/Hyper-V, onde seu usuário no host é "John" e o endereço IP do host é 198.123.151.23. O comando de montagem deveria ser

# mount -t cifs //PC/share /mnt/Hyper-V -o credentials=~/.credentials,ip=198.123.151.23

Um problema com este método é que caso o endereço IP do host sempre mude (por exemplo, se um IP dinâmico seja atribuído via DHCP, ou caso seja movido para uma nova rede), cada instância do endereço IP do host no guest deverá ser substituída. Entretanto, o pacote smbclient provê nmblookup, um utilitário que encontra um endereço IP associado a um host SMB. Portanto, no caso do exemplo acima, você deveria executar

nmblookup PC
198.123.151.23 PC<00>

Você somente quer o endereço IP, então você pode usar head e cut para processá-lo:

nmblookup PC | head -n 1 | cut -d ' ' -f 1
192.123.151.23

Então você pode simplesmente substituir o endereço IP no comando mount:

# mount -t cifs //PC/share /mnt/Hyper-V -o credentials=~/.credentials,ip="$(nmblookup PC | head -n 1 | cut -d ' ' -f 1)"

Mais formas de montar pastas compartilhadas, incluindo montagem automática na inicialização, estão detalhados no artigo Samba.

Xorg

Programas gráficos podem facilmente ser executados em Xorg pelo pacote xf86-video-fbdev. Simplesmente instale-o juntamente com o gerenciador de janelas ou ambiente desktop que deseja usar, e você poderá iniciar o X sem qualquer problema.

Configuração da resolução

A resolução de tela é corrigida após a inicialização. Pode ser ajustada alterando parâmetros de inicialização, até o tamanho máximo de 1920x1080 (a atual limitação é de 8MB de memória de framebuffer). Quando inicializando com GRUB, isto pode ser feito editando /etc/default/grub e adicionando video=hyperv_fb:[resolução desejada] ao final da linha GRUB_CMDLINE_LINUX_DEFAULT. Depois, execute update-grub para gravar as alterações. Um exemplo de como ficaria a linha, seria algo como:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash video=hyperv_fb:1920x1080"

Se você está usando systemd-boot para diretamente inicializar o kernel, em vez disso, simplesmente adicione video=hyperv_fb:1920x1080 às opções de entrada. Por exemplo:

/boot/loader/entries/arch.conf
title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options video=hyperv_fb:1920x1080 root=PARTUUID=xxxx-xxxx rw

Modo de sessão aprimorado

Por padrão, você pode sofrer com a experiência ruim do mouse e da área de trabalho. Recursos do modo de sessão aprimorado melhoram a experiência de video e tem área de transferência integrada. Este modo utiliza o Xrdp e o módulo hv_sock do kernel. Execute o seguinte código para ativar este modo no guest:

git clone https://github.com/Microsoft/linux-vm-tools
cd linux-vm-tools/arch
./makepkg.sh
./install-config.sh

Edite ~/.xinitrc para iniciar seu ambiente desktop preferido ao fazer logon em uma sessão Xrdp. Leia xinit para configurar ~/.xinitrc.

Então desligue sua máquina virtual Arch e, usando PowerShell (execute como Administrador), você precisará ativar hv_sock em sua máquina:

Set-VM -VMName __Sua_máquina_Arch__ -EnhancedSessionTransportType HvSocket

Após ativar o modo de sessão aprimorado, o cliente Hyper-V automaticamente conecta a uma sessão Xrdp após a inicialização.

Você pode permanentemente desativar o mode de sessão aprimorado executando o seguinte comando no Powershell (execute como Administrador):

Set-VM -VMName __Sua_máquina_Arch__ -EnhancedSessionTransportType VMBus

Para conectar a um console virtual TTY, você pode temporariamente desativar o modo de sessão parimorado. O recurso do modo de sessão aprimorado pode ser ativado ou desativado individualmente para uma máquina virtual a partir de seu menu "Visualizar".

Dicas e truques

Você pode também fazer um encaminhamento do X para obter uma melhor experiência do que com o cliente padrão do Hyper-V. Uma forma de fazer isto é usando um servidor VNC como TigerVNC e conectar-se a ele a partir do Windows. Uma opção ainda melhor de se fazer isto é instalar um servidor do Windows X como VcXsrv (gratuito) ou x410 (comercial) e fazer encaminhamento do X para obter uma experiência da interface gráfica mais rápida. X410 tem suporte para vsock, que é mais confiável do que a conexão TCP/IP.