From fa85ed9eb8907a57abd7be52ac09559933c7b4ab Mon Sep 17 00:00:00 2001 From: fmkiotheka <fmkiotheka@inf.ufpr.br> Date: Fri, 5 Apr 2024 10:59:30 -0300 Subject: [PATCH] feat: add remote boot --- source/pages/machines/base/estrella.md | 6 + source/pages/machines/base/urquell.md | 3 - source/pages/machines/organizacao.md | 2 +- source/pages/services/estrella-boot-remoto.md | 119 ++++++++++++++++++ 4 files changed, 126 insertions(+), 4 deletions(-) create mode 100644 source/pages/machines/base/estrella.md create mode 100644 source/pages/services/estrella-boot-remoto.md diff --git a/source/pages/machines/base/estrella.md b/source/pages/machines/base/estrella.md new file mode 100644 index 0000000..762d223 --- /dev/null +++ b/source/pages/machines/base/estrella.md @@ -0,0 +1,6 @@ +# estrella + +```{ipmiconfig} +``` + +Essa é a máquina de boot remoto. diff --git a/source/pages/machines/base/urquell.md b/source/pages/machines/base/urquell.md index 728b3b2..14decc2 100644 --- a/source/pages/machines/base/urquell.md +++ b/source/pages/machines/base/urquell.md @@ -71,9 +71,6 @@ Alguns cuidados devem ser observados no gerenciamento desta máquina: - [Autenticação do Departamento de Informática que utiliza Kerberos e LDAP.](/pages/services/urquell-autenticacao-dinf) - Monitoramento Zabbix + Postgres (pode/vai ser movido) - Só uma instância que está na urquell -- Boot remoto (pode/vai ser movido) - - tftp-hpa - - syslinux-pxe - Ceph Monitor - Servidor NTP - E-mail diff --git a/source/pages/machines/organizacao.md b/source/pages/machines/organizacao.md index 14de910..01dbfbd 100644 --- a/source/pages/machines/organizacao.md +++ b/source/pages/machines/organizacao.md @@ -84,7 +84,7 @@ possui a seguinte disposição (de cima para baixo): ? ## Rack 7 -* Máquina estrella +* [Máquina estrella](/pages/machines/base/estrella) * [Máquina torneira4](/pages/machines/virtuals/torneira4) * [Máquina torneira3](/pages/machines/virtuals/torneira3) * [Máquina torneira2](/pages/machines/virtuals/torneira2) diff --git a/source/pages/services/estrella-boot-remoto.md b/source/pages/services/estrella-boot-remoto.md new file mode 100644 index 0000000..397e3ee --- /dev/null +++ b/source/pages/services/estrella-boot-remoto.md @@ -0,0 +1,119 @@ +# estrella/Boot remoto + +A [](/pages/machines/base/estrella) opera o sistema de boot remoto provido +pelo C3SL ao Departamento de Informática. O boot remoto é composto de primariamente +dois servidores: + +* Servidor TFTP em `tftp.boot.c3sl.ufpr.br` que permite que o ambiente de +execução pré-boot (PXE) inicie o boot pela rede. +* Servidor NFS em `nfs.boot.c3sl.ufpr.br` que serve a raiz do sistema operacional +em modo somente leitura. + +Estes dois serviços são gerenciados por [](/pages/concepts/ansible) no repositório +[estrella-ansible](https://gitlab.c3sl.ufpr.br/c3root/estrella-ansible). Os dois +servidores servem o mesmo diretório `/exports/` que está em um sistema de arquivos +diferente. + +## O diretório `/exports` + +O diretório `/exports/` é exportado tanto via TFTP quanto via NFS. +Dentro do diretório `/exports/` pode ser encontrado os seguintes subdiretórios: + +* `boot/`: O diretório utilizado pelo PXE para encontrar o binário do GRUB. +* `grub-config/`: Arquivos de configuração do GRUB que são chamados de acordo +com a extensão do DHCP `extensions-path`. +* `image-config/`: Links simbólicos para imagens utilizados pelos arquivos de +configuração do GRUB. +* `images/`: Armazenamento de imagens, incluindo algumas versões anteriores. +* `overlays/`: Configurações especÃficas para máquina. São vários diretórios +cada um com um hostname, e os arquivos dentro do diretório são utilizados +no sistema de arquivos overlay como uma camada a mais. Isso significa que +se um arquivo está presente tanto na imagem quanto no `overlays/`, o arquivo +utilizará a versão que está presente no `overlays/`. + +## Fluxo do boot remoto + +Quando uma máquina boota, o ambiente de execução pré-boot PXE executa e efetua +os seguintes passos: + +1. Faz um broadcast para descobrir os servidores DHCP disponÃveis. +2. Obtém informações dos servidores DHCP disponÃveis. +3. Se for identificado a opção DHCP `next-server`, o PXE faz uma requisição a um +servidor TFTP localizado neste endereço procurando pelo arquivo da opção +DHCP `filename`. +4. O PXE executa o arquivo baixado como um binário. + +O [servidor de DHCP](/pages/services/urquell-dhcp) está configurado para +que a opção de DHCP `filename` seja o caminho `boot/grub/x86_64-efi/core.efi` +para hosts 64 bits e `boot/grub/i386-pc/core.0` para hosts 32 bits. Este binário +que é executado é o GRUB 2. O GRUB procura o arquivo de configuração `boot/grub/grub.cfg` +ainda via servidor TFTP e executa seu conteúdo: + +``` +set config_name=$net_pxe_extensionspath +configfile /grub-config/$config_name +``` + +Ou seja, o arquivo de configuração referente a opção do DHCP `extensions-path` +em `/grub-config` é executado. Por enquanto temos algumas opções de configuração: + +* `terminal`: Imagem padrão. +* `terminal-allinone`: Imagem especÃfica para uso com sistemas All-in-one, +com uma versão do kernel diferente que tem menos problemas no driver de vÃdeo. +* `terminal-log`: Imagem incrementada com integração com o sistema de monitoramento, +para ser utilizada com máquinas de acesso livre como a `macalan`. + +Um arquivo de configuração tem esta cara: + +``` +insmod all_video +set timeout=0 + +menuentry "Terminal" { + linux /image-config/terminal/vmlinuz root=/dev/nfs ro ip=dhcp nfsroot=200.17.202.12:/exports/image-config/terminal,acregmax=3600,acregmin=3600,acdirmin=3600,acdirmax=3600,rsize=1048576,ro fsck.mode=skip + echo 'Loading initram' + initrd /image-config/terminal/initrd.img + echo 'All set...' +} +``` + +Então: + +1. É carregado o módulo de vÃdeo para que seja possÃvel ver o sistema bootando, +importante principalmente para os All-in-ones. +2. Definimos o timeout (tempo para selecionar a opção) para 0, para iniciar +sempre na opção padrão. +3. Definimos a opção de boot padrão. +4. A opção de boot padrão define os parâmetros do kernel do linux da imagem +configurada em `image-config` para que ele boote via NFS através das opções `root=/dev/nfs`, +`ro` (para o kernel usar o modo somente leitura), `ip=dhcp` (para pegar opções de DHCP quando +bootar, sendo essencial o nome da máquina) e `nfsroot` com o IP do servidor NFS, +o caminho utilizando o `image-config/` com algumas definições de otimização: + * `acregmax`, `acregmin`, `acdirmin`, `acdirmax` são definidas para 3600 segundos (60 minutos) para que o cache do VFS seja alto, já que as imagens não mudam. + * `rsize` é definido para 1MiB, o mais alto possÃvel, e é o tamanho do pacote do NFS. + * `ro` faz com que o NFS seja montado somente leitura (embora as configurações do servidor NFS forcem que isso aconteça de qualquer forma). + Além disso, o kernel é configurado para pular quaisquer verificações de disco pela opção `fsck.mode=skip`, pois é completamente desnecessário verificar o sistema de arquivos que é montado reemotado. +4. Por fim, o `initrd.img` é carregado e executado que inicia o processo de boot +do kernel. + +Dentro do boot há uma mágica para que funcione os `overlays/` e exista um sistema +que permita escrita na raiz (que escreve em memória). Essa mágica é feita pelo +script encontrado dentro da imagem em `/etc/initramfs-tools/scripts/init-bottom/overlay`. +Note que há um IP estático neste script. Ao fazer uma alteração nele, lembre-se +que é necessário atualizar a initramfs entrando no sistema via `systemd-nspawn` +e rodando `update-initramfs -u`. + +## Cuidados na imagem do boot remoto + +* Para mexer na imagem é recomendado o uso do `systemd-nspawn`. Ele deve ser +chamado da seguinte maneira: + ``` + $ sudo systemd-nspawn -D /exports/image-config/terminal + ``` +* Caso você cague com o `/etc/resolv.conf` de alguma maneira, arrume da seguinte maneira: + ``` + $ sudo rm resolv.conf + $ sudo ln -s /run/systemd/resolve/stub-resolv.conf resolv.conf + $ ls -l resolv.conf + lrwxrwxrwx 1 root root 31 abr 5 10:45 resolv.conf -> /run/systemd/resolve/stub-resolv.conf + ``` -- GitLab