Pular para o conteúdo principal

Solução de problemas

Primeiro passo​

rc doctor

Confere plataforma, libkrun, GPU, CUDA, virtualização aninhada, guest, confinamento e imagens. Cada linha começa com ok, info, warn ou FAIL, e a falha traz o motivo.

Couldn't find or load libkrunfw.5.dylib​

Causa: a libkrun upstream abre a libkrunfw só pelo nome (dlopen("libkrunfw.5.dylib")), e o loader dinâmico não a acha fora dos caminhos padrão.

Correção: a libkrun do .#krun (macOS) já abre a libkrunfw pelo caminho absoluto no store do Nix, então o erro só aparece com uma libkrun de outra origem. Nesse caso o launcher ainda define DYLD_LIBRARY_PATH com o diretório de RUNNER_KRUN_LIB: confira se ele é um caminho completo e se a libkrunfw está no mesmo diretório.

krun_start_enter rc=-22​

Causa: no macOS, o binário não tem o entitlement com.apple.security.hypervisor.

Correção: compile com task build, que assina o host. Um go build direto gera um binário sem assinatura.

/opt/runner/guest: not found​

Causa: o guest foi compilado dinâmico. As imagens são Alpine (musl) e não têm o loader da glibc; o kernel acha o arquivo, mas não o interpretador, e reporta not found.

Correção: compile com task build, que gera o guest estático e reprova se ele sair dinâmico. Depois reconstrua as imagens.

Comportamento antigo depois de mudar o guest​

Causa: a imagem em uso foi construída com o guest anterior.

Correção: rode rc image build --stack <l> de novo. A chave do cache inclui o guest, então uma imagem nova é gerada sozinha; não é preciso apagar nada.

Argumento com espaço chega partido no guest​

Causa: a libkrun leva o argv do primeiro processo pela cmdline do kernel, que separa por espaço.

Correção: não passe comando composto como argumento. Grave num arquivo e execute o arquivo — é o que o start.sh e o warmup do build fazem.

VM for X did not become ready ... console: ...​

Causa: o guest não respondeu ao job sh true da espera de prontidão. A mensagem traz o fim do console do guest, que normalmente diz o motivo (guest dinâmico, start.sh falhando, imagem corrompida).

Correção: leia o trecho de console da mensagem. Os casos mais comuns são os desta página: guest dinâmico ou imagem desatualizada.

machine X did not become ready / failed to start​

Causa: o processo vmm da máquina morreu no boot ou o guest não respondeu. A mensagem cita a última linha do vmm.log escrita neste start (o log é em append), por exemplo nested virtualization is not supported on this host.

Correção: leia a linha citada. O log inteiro é o vmm.log do diretório que rc machine data-dir --name X imprime; o console sai em rc machine logs --name X.

INVALID_STATE: machine X is running; stop it first or use force​

Causa: delete (e outras operações de máquina parada) numa máquina ligada.

Correção: rc machine stop --name X antes, ou --force para matar.

machine X is paused; resume it (rc machine resume) or stop it first​

Causa: start ou exec numa máquina pausada.

Correção: rc machine resume --name X, ou stop para desligar.

resolve secret 'NOME': env_unset​

Causa: um --secret-env (ou [secrets] com from_env) aponta para uma variável que não existe no ambiente de quem deu o start.

Correção: exporte a variável antes do start; o valor é lido a cada start e nunca fica gravado.

O programa na máquina não resolve um nome (bad address)​

Causa: a política de saída não permite o nome; o DNS do gateway responde NXDOMAIN de propósito.

Correção: confira o egress-denials.log do diretório da máquina (rc machine data-dir) e libere com rc machine update --name X --allow-host <nome>, com a máquina ligada. Veja Rede e volumes.

E007​

Causa: --gpu (ou "gpu": true) numa stack sem gpu no catálogo.

Correção: use uma stack com GPU, como a llama. CUDA não existe: a GPU é Vulkan (Venus). Veja GPU.

E006: unsupported language​

Causa: a linguagem não está no catálogo ou a imagem dela ainda não foi construída neste host.

Correção: rc languages mostra o catálogo e ready. Construa com rc image build --stack <l>.

E005: stdin too long​

Causa: stdin acima de 1.000.000 bytes.

Correção: reduza a entrada ou envie os dados como arquivo em files (até 4 MiB somando todos os arquivos).

sem acesso a /dev/kvm (Linux)​

Causa: o usuário não tem permissão de leitura e escrita em /dev/kvm, ou o KVM não está habilitado.

Correção: habilite o KVM no host e dê ao usuário acesso ao dispositivo (em geral, o grupo kvm).

Windows​

Não é suportado: a libkrun upstream não tem backend WHP. O build para Windows falha de propósito.

A API respondeu "status": "success", mas o programa falhou​

Não é erro. status diz que a API executou o job. O resultado do programa está em stderr e exception ("Timeout", "Compilation failed").