ConfigurandoServidorBootRemoto - UFSC/moodle-provas-livecd-provas GitHub Wiki

Configurando um Servidor de Boot Remoto PXE

Instalação de pacotes no servidor (Ubuntu)

Esta página trata da instalação e configuração de um servidor de boot remoto via PXE, a configuração é genérica, podendo ser utilizada em outros cenários, não apenas para o boot remoto do CD de Provas do Moodle.

OBS: Você precisará configurar alguns parâmetros no servidor DHCP da sua rede, esta página aborda apenas a configuração específica do servidor DHCP da ISC, sem abordar sua instalação, veja na seção Configuração do Servidor DHCP.

Servidor TFTP

sudo apt-get install tftpd-hpa isc-dhcp-server

Servidor NFS

sudo apt-get install nfs-kernel-server

Configuração

Criar os diretórios que serão utilizados:

mkdir -p /var/lib/tftpboot/export/provas3_32
mkdir -p /var/lib/tftpboot/export/provas3_64
mkdir -p /var/lib/tftpboot/pxelinux.cfg

Diretório /var/lib/tftpboot/

Este diretório será a base do sistema de boot remoto, ele conterá os filesystems exportados pelo servidor NFS, as configurações do menu de inicialização e os arquivos binários dos loaders PXE (provenientes do _Syslinux).

Diretório /var/lib/tftpboot/export/

Diretório que contêm os pontos de montagens das ISOs (ou o filesystem raíz de algum sistema). Este diretório é referenciado nos arquivos de configuração.

Diretório /var/lib/tftpboot/pxelinux.cfg/

Este diretório deve ser criado caso não exista, ele conterá os arquivos de configuração do loader pxelinux, veja mais abaixo na seção de configuração do menu de inicialização.

/etc/default/tftpd-hpa

Configurar o caminho do diretório e o range de portas se necessário (para liberar no firewall).

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
# TFTP_ADDRESS="[::]:69"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure --port-range 49152:65534 -vv"

/etc/default/nfs-kernel-server

Configurar o número de servers to start up (parâmetro RPCNFSDCOUNT), os parâmetros RPCMOUNTDOPTS e RPCSVCGSSDOPTS.

# Number of servers to start up
RPCNFSDCOUNT=16

# Runtime priority of server (see nice(1))
RPCNFSDPRIORITY=0

# Options for rpc.mountd.
# If you have a port-based firewall, you might want to set up
# a fixed port here using the --port option. For more information, 
# see rpc.mountd(8) or http://wiki.debian.org/SecuringNFS
# To disable NFSv4 on the server, specify '--no-nfs-version 4' here
RPCMOUNTDOPTS="--manage-gids -p 32767"

# Do you want to start the svcgssd daemon? It is only required for Kerberos
# exports. Valid alternatives are "yes" and "no"; the default is "no".
NEED_SVCGSSD=""

# Options for rpc.svcgssd.
RPCSVCGSSDOPTS="--syslog"

/etc/fstab

Por conveniência as ISOs podem ser montadas no fstab, por exemplo:

/home/moodle/isos/provas-3.2-20150827_i386.iso /var/lib/tftpboot/export/provas3_32 udf,iso9660 user,ro,loop 0 0

/etc/exports

Cada ponto de montagem presente em /var/lib/tftpboot/export deve ser exportado neste arquivo de configuração do servidor NFS, por exemplo:

/var/lib/tftpboot/export/provas3_32	150.162.0.0/16(ro,sync,no_wdelay,insecure_locks,insecure,no_root_squash,no_subtree_check)

OBS: 150.162.0.0/16 é o endereço da rede que terá acesso ao servidor NFS, configure de acordo com a sua rede.

Menu de Inicialização

O menu de inicialização é baseado no Syslinux, assim como o menu de inicialização do CD, portanto a configuração visual dele é igual, porém são necessários alguns parâmetros adicionais para cada sistema que estará disponível no menu.

A configuração principal do menu de inicialização deve ser salva no arquivo /var/lib/tftpboot/pxelinux.cfg/default, pois é esse o arquivo que o loader pxelinux irá procurar no momento da inicialização, este arquivo funciona da mesma forma que o isolinux.cfg do LiveCD.

A configuração para o caso do boot remoto difere da configuração para o LiveCD nos parâmetros que são passados para o KERNEL, veja um exemplo abaixo:

LABEL provas3_32
   MENU LABEL Moodle Provas (32-bit)
   KERNEL export/provas3_32/casper/vmlinuz
   APPEND boot=casper netboot=nfs initrd=export/provas3_32/casper/initrd.xz nfsroot=150.162.123.123:/var/lib/tftpboot/export/provas3_32

Observe o seguinte:

  • A linha KERNEL aponta para o kernel do sistema que foi exportado via NFS, o nome desse arquivo pode ser diferente.
  • O parâmetro initrd na linha APPEND aponta para o filesystem inicial que é carregado pelo kernel, o nome desse arquivo pode ser diferente.
  • Os parâmetros boot=casper e netboot=nfs são constantes.
  • O parâmetro nfsroot deve ser configurado com o endereço IP do seu servidor NFS e o caminho do ponto de montagem que foi exportado por ele.

Loaders com suporte BIOS e UEFI

Para adicionar os loaders ao sistema de boot remoto, utilize o script presente no repositório (a partir do PROVAS_32_TESTING), em extra/boot-remoto/prepare_loaders.sh, ele deve ser executado dentro do diretório /var/lib/tftpboot/, serão criados três diretórios: bios, efi32 e efi64, cada um com todos arquivos necessários (dependências). Para saber mais sobre as dependências, veja este link: http://www.syslinux.org/wiki/index.php/Library_modules

Observe que dentro de cada um dos diretórios criados, há um link simbólico para ../pxelinux.cfg/ e outro para ../export/ , eles são necessários pois o loader utilizará sua própria localização como raíz, para localizar os demais arquivos.

  • O diretório bios contêm os arquivos para computadores com BIOS ou UEFI no modo Legacy.
  • O diretório efi32 contêm os arquivos para computadores com UEFI de 32-bit (são bem raros).
  • O diretório efi64 contêm os arquivos para computadores com UEFI de 64-bit. O kernel obrigatoriamente deverá ser de 64-bit também.

Nenhum desses loaders para UEFI suporta Secure Boot, pois eles não foram assinados digitalmente por uma entidade reconhecida, portanto a opção de Secure Boot deve estar desabilitada no computador.

Configuração do Servidor DHCP

Para que os computadores da rede possam encontrar o servidor de boot remoto, é necessário informar a eles onde está este servidor, uma das formas de fazer isso é configurando o servidor DHCP para fornecer esses dados, adicionando os seguintes parâmetros (configuração válida para o DHCPD da ISC):

option arch code 93 = unsigned integer 16;

if option arch = 00:00 {
    filename "bios/pxelinux.0";
} elsif option arch = 00:09 {
    filename "efi64/syslinux.efi";
} elsif option arch = 00:07 {
    filename "efi64/syslinux.efi";
} elsif option arch = 00:06 {
    filename "efi32/syslinux.efi";
} else {
    filename "bios/pxelinux.0";
}

Mais detalhes em http://www.syslinux.org/wiki/index.php/PXELINUX#UEFI

Configurações Específicas para a Utilização com um Servidor DHCP não Autoritativo

Em uma rede que já possui um servidor DHCP ativo e não é possível alterar sua configuração para suportar o boot via PXE, pode-se configurar um servidor DHCP no próprio computador de boot remoto, para que este sirva IP apenas aos clientes PXE, ou seja, apenas para os computadores que iniciarem através da opção de boot pela rede.

Aqui são listadas apenas as configurações adicionais, todo o processo de configuração do servidor PXE, descrito acima, deve ser executado antes, exceto a parte de configuração do servidor DHCP.

/etc/dhcp/dhcpd.conf - Configuração do servidor DHCP

Aqui configuramos o servidor DHCP para responder apenas as requisições de clientes PXE.

default-lease-time 600;
max-lease-time 7200;
log-facility local7;

allow booting;
allow bootp;

class "pxeclients" {
    match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";
    next-server 192.168.42.254;
    
    option arch code 93 = unsigned integer 16;
    
    if option arch = 00:00 {
        filename "bios/pxelinux.0";
    } elsif option arch = 00:09 {
        filename "efi64/syslinux.efi";
    } elsif option arch = 00:07 {
        filename "efi64/syslinux.efi";
    } elsif option arch = 00:06 {
        filename "efi32/syslinux.efi";
    } else {
        filename "bios/pxelinux.0";
    }
}
}

shared-network LOCAL-NET {
    subnet 0.0.0.0 netmask 0.0.0.0 {}
    subnet 192.168.42.0 netmask 255.255.255.0 {
        pool {
            allow members of "pxeclients";
            range 192.168.42.1 192.168.42.240;
        }
    }
}

/etc/network/interfaces

Também é necessário configurar um alias na interface de rede, com o endereço IP que será utilizado no servidor DHCP não autoritativo.

Observe que também é definido um script que será executado quando a interface de rede for inicializada, durante o boot deste computador, a função do script é descrita abaixo.

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
post-up /root/tftpconfig.sh

auto eth0:0
iface eth0:0 inet static
address 192.168.42.254
netmask 255.255.255.0

/root/tftpconfig.sh

Este script é executado quando a interface de rede do computador é inicializada, durante o boot do computador, ele atualiza a configuração do servidor de boot PXE com o endereço IP que o DHCP da rede local forneceu ao computador, mais especificamente, ele atualiza o endereço do servidor NFS, que será acessado pelos computadores clientes no arquivo /var/lib/tftpboot/pxelinux.cfg/default.

O script deve ter permissão de execução (chmod +x /root/tftpconfig.sh).

#!/bin/bash

IP=$(ifconfig eth0 | awk -F"[: ]+" '/inet addr:/ {print $4}')
sed "s/%IP%/$IP/g" /var/lib/tftpboot/pxelinux.cfg/default.template > /var/lib/tftpboot/pxelinux.cfg/default

/var/lib/tftpboot/pxelinux.cfg/default

O arquivo /var/lib/tftpboot/pxelinux.cfg/default deve ser renomeado para default.template, e o campo nfsroot=192.168.1.1 deve ser alterado para nfsroot=%IP%, pois este campo será atualizado dinamicamente pelo script /root/tftpconfig.sh, utilizando o IP que a interface de rede obteve do servidor DHCP da rede local, ficando assim, por exemplo:

DEFAULT vesamenu.c32                                                                                         
TIMEOUT 20                                                                                                   

menu title     Servico de carga remota SETIC/UFSC
menu color screen   37;40      #80ffffff #00000000 std
menu color border   30;44      #40000000 #00000000 std
menu color title    1;36;44    #c0FFCC00 #00000000 std
menu color unsel    37;44      #FF000000 #00000000 none
menu color hotkey   1;37;44    #ffffffff #00000000 std
menu color sel      7;37;40    #e0FFFFFF #FF001130 all
menu color hotsel   1;7;37;40  #e0400000 #20ff8000 all
menu color disabled 1;30;44    #FF0f4679 #00000000 none
menu color scrollbar    30;44      #FF000000 #00000000 std
menu color tabmsg   31;40      #90ffff00 #00000000 std
menu color cmdmark  1;36;40    #c000ffff #00000000 std
menu color cmdline  37;40      #c0ffffff #00000000 std
menu color pwdborder    30;47      #80ffffff #20ffffff std
menu color pwdheader    31;47      #80ff8080 #20ffffff std
menu color pwdentry 30;47      #80ffffff #20ffffff std
menu color timeout_msg  37;40      #80ffffff #00000000 std
menu color timeout  1;37;40    #c0ffffff #00000000 std
menu color help     37;40      #c0ffffff #00000000 std
menu color msg07    37;40      #90ffffff #00000000 std

menu width 80
menu margin 5
menu passwordmargin 3
menu rows 15
menu tabmsgrow 18
menu cmdlinerow 18
menu endrow 24
menu passwordrow 11
menu timeoutrow 20

menu separator

Label provas
  menu label ===== Moodle Provas =====
  menu disabled

LABEL provas3_32
   MENU LABEL Moodle Provas (32-bit)
   KERNEL export/provas3_32/casper/vmlinuz
   APPEND boot=casper netboot=nfs initrd=export/provas3_32/casper/initrd.xz nfsroot=%IP%:/var/lib/tftpboot/export/provas3_32

Outras Informações

Estrutura do Servidor de Boot Remoto da UFSC

Diagrama_Rede_UFSC

ISO para Boot Remoto Polos

Diagrama_Rede_Polo