Tradução estruturada do passo a passo oficial da Wiki do NixOS para o Proxmox




O Proxmox suporta tanto Máquinas Virtuais tradicionais (KVM) quanto Contêineres Linux (LXC), e o NixOS roda muito bem em ambos. O guia está dividido nessas duas abordagens.


Opção 1: Instalação em Máquina Virtual (KVM)

Embora seja possível gerar discos genéricos qcow2, a recomendação oficial é gerar uma imagem no formato nativo VMA. Isso permite definir configurações de hardware da VM (CPU, memória, rede) direto no seu código Nix, sem precisar configurar tudo manualmente na interface do Proxmox.

1.Gerar a imagem VMA:Pode demorar na primeira execução.
Execute o seguinte comando em uma máquina que já tenha o Nix instalado. Ele precisará compilar uma versão modificada do QEMU para suportar o formato VMA:
nix run github:nix-community/nixos-generators -- --format proxmox
Dica: Você pode passar um arquivo de configuração adicional usando --configuration seu_arquivo.nix.
2.Transferir e Restaurar a VM no Proxmox:Via terminal do Proxmox.
Copie o arquivo gerado (com a extensão .vma.zst) para o servidor Proxmox, no diretório de armazenamento de dumps (ex: /var/lib/vz/dump/).

Em seguida, recrie a VM rodando este comando:
qmrestore /var/lib/vz/dump/vzdump-qemu-nixos-[versao].vma.zst <vmid> --unique true
(Substitua <vmid> pelo ID numérico que deseja dar à sua máquina virtual).

Atenção: O endereço MAC da interface de rede principal (net0) vem zerado por padrão. Passar a flag --unique true (como acima) na hora de restaurar corrige isso gerando um MAC válido.
3.Iniciar e acessar a VM:
Por padrão, a imagem gerada expõe um terminal serial para facilitar o acesso inicial. No servidor Proxmox, inicie a VM e conecte-se ao terminal:
qm start <vmid>
qm terminal <vmid>
Você será logado automaticamente como usuário root. Para sair da visualização do terminal serial, pressione Ctrl+O.

Nota sobre Cloud-init: Para permitir que o Proxmox gerencie as configurações de rede pelo boot, você pode adicionar services.cloud-init.network.enable = true; no seu arquivo configuration.nix. Isso ativará o systemd-networkd e o cloud-init.

Opção 2: Instalação em Contêiner (LXC)

Se você precisa de uma alternativa mais leve que consome menos recursos, pode rodar o NixOS em um LXC.

1.Gerar o template LXC:
Rode o seguinte comando na sua máquina com Nix para gerar o arquivo base:
nix run github:nix-community/nixos-generators -- --format proxmox-lxc
2.Criar o contêiner no Proxmox:Ative a opção 'nesting'.
Copie o tarball (arquivo compactado gerado) para o servidor Proxmox. Pela interface web ou linha de comando, crie um novo contêiner usando este template.
  • Importante: A opção de nesting (aninhamento) precisa estar marcada nas opções do contêiner (versões mais recentes do Proxmox já ativam isso por padrão).
  • Limitações da Interface: Pela interface web do Proxmox, configurar a rede e adicionar chaves SSH para o usuário root vai funcionar corretamente. No entanto, definir o nome da máquina (hostname) ou a senha do root pela interface não funcionará. É recomendado abrir o console e definir a senha manualmente no primeiro boot.
3.Ajustar o Console e Criar a Configuração Base:Apenas se o console falhar.
Se você abrir o console na interface web do Proxmox e ele não aparecer, vá nas opções do contêiner e mude o Console Mode de tty (o padrão) para /dev/console.
Ao acessar o LXC, você notará que ele não vem com o arquivo /etc/nixos/configuration.nix por padrão. Crie um arquivo com a configuração mínima abaixo:
Nix
{ pkgs, modulesPath, ... }:
{
  imports = [
    (modulesPath + "/virtualisation/proxmox-lxc.nix")
  ];
  environment.systemPackages = [ pkgs.vim ];
}
4.Atualizar os canais e aplicar:Etapa obrigatória pós-configuração.
Com o arquivo criado, atualize os canais do Nix e reinicie o contêiner antes de tentar compilar o sistema pela primeira vez com o comando:
nixos-rebuild switch
Nota sobre Rede no LXC: O template usa systemd-networkd por padrão para permitir que o Proxmox gerencie as configurações de rede. Se quiser desativar isso para gerenciar as interfaces manualmente de dentro do NixOS, você deve adicionar proxmoxLXC.manageNetwork = true; nas suas configurações.



Nenhum comentário

“Não importa o método empregado na construção da ponte; o essencial é compreender a engenharia que a sustenta.” — Delphini, 2025.

Tecnologia do Blogger.