Este documento foi traduzido usando tecnologia de tradução automática de máquina. Sempre trabalhamos para apresentar traduções precisas, mas não oferecemos nenhuma garantia em relação à integridade, precisão ou confiabilidade do conteúdo traduzido. Em caso de qualquer discrepância, a versão original em inglês prevalecerá e constituirá o texto official.

Problemas do Sistema Operacional

O Harvester roda em um sistema operacional baseado em openSUSE. O sistema operacional é um artefato produzido pelo elemental-toolkit. As seções a seguir contêm informações e dicas para ajudar os usuários a solucionar problemas relacionados ao sistema operacional.

Como fazer login em um nó Harvester

Os usuários podem fazer login em um nó Harvester com o nome de usuário rancher e a senha ou chave SSH fornecida durante a instalação. O usuário rancher pode executar comandos privilegiados sem inserir uma senha:

# Run a privileged command
rancher@node1:~> sudo blkid

# Or become root
rancher@node1:~> sudo -i
node1:~ # blkid

Como posso instalar pacotes? Por que alguns caminhos são somente leitura?

O sistema de arquivos do sistema operacional, como uma imagem de contêiner, é baseado em imagem e imutável, exceto em alguns diretórios.

Recomendamos usar um toolbox contêiner para executar programas não empacotados no sistema operacional Harvester para fins de depuração. Por favor, consulte este artigo para aprender como construir e executar um toolbox contêiner.

O sistema operacional Harvester também fornece uma maneira de habilitar o modo de leitura/gravação temporariamente. Por favor, siga os seguintes passos:

Habilitar o modo de leitura/gravação pode danificar seu sistema se arquivos forem modificados. Use-o por sua própria conta e risco.

  • Para a versão v0.3.0, precisamos aplicar uma solução alternativa primeiro para tornar alguns diretórios não sobrepostos após habilitar o modo de leitura/gravação. Em um nó Harvester em execução, execute o seguinte comando como root:

      cat > /oem/91_hack.yaml <<'EOF'
      name: "Rootfs Layout Settings for debugrw"
      stages:
        rootfs:
          - if: 'grep -q root=LABEL=COS_STATE /proc/cmdline && grep -q rd.cos.debugrw /proc/cmdline'
            name: "Layout configuration for debugrw"
            environment_file: /run/cos/cos-layout.env
            environment:
              RW_PATHS: " "
      EOF
  • Reinicie o sistema para o menu GRUB. Pressione ESC para permanecer no menu.

    grub menu
  • Pressione e na primeira entrada do menu. Anexe rd.cos.debugrw à linha linux (loop0)$kernel $kernelcmd. Pressione Ctrl + x para inicializar o sistema.

    edit boot parameter

Como editar permanentemente os parâmetros do kernel

Os seguintes passos são uma solução alternativa. O Harvester informará a comunidade assim que uma resolução permanente estiver em vigor.

  • Remonte o diretório de estado em modo de leitura/gravação:

      # blkid -L COS_STATE
      /dev/vda2
      # mount -o remount,rw /dev/vda2 /run/initramfs/cos-state
  • Edite o arquivo de configuração do grub e anexe parâmetros à linha linux (loop0)$kernel $kernelcmd. O seguinte exemplo adiciona um parâmetro nomodeset:

      # vim /run/initramfs/cos-state/grub2/grub.cfg
      menuentry "${display_name}" --id cos {
        # label is kept around for backward compatibility
        set label=${active_label}
        set img=/cOS/active.img
        loopback $loopdev /$img
        source ($loopdev)/etc/cos/bootargs.cfg
        linux ($loopdev)$kernel $kernelcmd ${extra_cmdline} ${extra_active_cmdline} nomodeset
        initrd ($loopdev)$initramfs
      }
  • Reinicie para que as alterações tenham efeito.

Como mudar a entrada padrão do menu de inicialização do GRUB

Para mudar a entrada padrão, primeiro verifique o atributo --id de uma entrada do menu. As entradas do menu do Grub estão localizadas nos seguintes arquivos:

  • /run/initramfs/cos-state/grub2/grub.cfg: Contém as entradas padrão, de fallback e de recuperação

  • /run/initramfs/cos-state/grubcustom: Contém a entrada de depuração

No seguinte exemplo, o id da entrada é debug.

# cat \
    /run/initramfs/cos-state/grub2/grub.cfg \
    /run/initramfs/cos-state/grubcustom

<...>
menuentry "${display_name} (debug)" --id debug {
  search --no-floppy --set=root --label COS_STATE
  set img=/cOS/active.img
  set label=COS_ACTIVE
  loopback loop0 /$img
  set root=($root)
  source (loop0)/etc/cos/bootargs.cfg
  linux (loop0)$kernel $kernelcmd ${extra_cmdline} ${extra_passive_cmdline} ${crash_kernel_params}
  initrd (loop0)$initramfs
}

Você pode configurar a entrada padrão executando os seguintes comandos:

# mount -o remount,rw /run/initramfs/cos-state
# grub2-editenv /run/initramfs/cos-state/grub_oem_env set saved_entry=debug

Se necessário, você pode desfazer a alteração executando o comando grub2-editenv /run/initramfs/cos-state/grub_oem_env unset saved_entry.

Como depurar uma falha ou travamento do sistema

Coletar log de falhas

Se os rastros de pânico do kernel não forem registrados no log do sistema quando um sistema falha, uma maneira confiável de localizar o log de falhas é usar um console serial.

Para habilitar a saída de mensagens do kernel para um console serial, siga os seguintes passos:

  • Inicie o sistema no menu GRUB. Pressione ESC para permanecer no menu.

    grub menu

  • Pressione e na primeira entrada do menu. Anexe console=ttyS0,115200n8 à linha linux (loop0)$kernel $kernelcmd. Pressione Ctrl + x para inicializar o sistema.

    edit boot parameter serial

    Ajuste as opções do console de acordo com seu ambiente. Certifique-se de adicionar a console= string ao final da linha.

  • Conecte-se à porta serial para capturar logs.

Coletar despejos de memória

Para falhas de pânico do kernel, você pode usar o kdump para coletar despejos de memória.

Por padrão, o sistema operacional é inicializado sem o recurso kdump habilitado. Os usuários podem habilitar o recurso selecionando a debug entrada de menu ao inicializar, como no seguinte exemplo:

grub menu debug

Quando um sistema falha, um despejo de memória será armazenado no diretório /var/crash/<time>. Fornecer o despejo de memória aos desenvolvedores ajuda-os a solucionar e resolver problemas.