Como posso perguntar a um servidor definido o que inicializar

3

Quais opções estão disponíveis para realizar o seguinte cenário de inicialização?

Na inicialização (antes da inicialização) entre em contato com um servidor da Web definido e pergunte o que deve ser inicializado (resposta normal: inicializar a partir do disco rígido local; resposta alternativa: imagem de inicialização XYZ)

O objetivo é conseguir reinstalar os clientes sem a necessidade de uma interação do usuário nos clientes. A maneira lógica de fazer isso seria a inicialização do PXE, mas como não controlamos o ambiente, o PXE de inicialização normal é inseguro, pois abriria um vetor de ataque.

O que eu encontrei e tentei até agora é o seguinte: Iniciar o Grub2 a partir do disco rígido local e do carregamento em cadeia do iPXE. O iPXE, então, entra em contato com o servidor da Web definido pelo http e recebe um script do iPXE de volta. Mas a partir daí ainda não encontrei uma maneira de inicializar a partir da unidade local (exceto para iniciar o Grub novamente e terminar em um loop infinito). O SO que eu gostaria de inicializar é na partição 2 do mesmo disco rígido do qual o Grub / iPXE é iniciado.

  1. Existe uma maneira alternativa de realizar o que tentamos realizar?
  2. Existe uma maneira de dizer ao Grub para selecionar uma opção diferente na segunda partida (voltando do iPXE) ou para dizer ao iPXE para inicializar a partir da partição 2?

Nota: A partição 2 contém um Boatloader do Windows e pode ser inicializada a partir do menu do Grub.

    
por Pascal Mages 15.02.2016 / 16:01

3 respostas

0

Eu encontrei uma maneira de realizar o que estávamos procurando. Obrigado por ir @jc__ pela dica com o grubenv e também pelo @Anthon.

Então aqui está a minha solução: Coloque um binário do kernel do iPXE (.lkrn) com o script personalizado para contatar o servidor de controle de inicialização em / boot

Em seguida, configure o Grub

1- para usar variável de grubenv

GRUB_DEFAULT=saved

2- Faça o Chain carregar o iPXE no / boot a partir do Grub e inclua o seguinte comando antes de inicializar o iPXE

set saved_entry='<menuentry to boot from local drive>'
save_env saved_entry

3- Prefira o menu do Grub que carrega o sistema operacional da unidade local com

set saved_entry='<menuentry iPXE>'
save_env saved_entry

4- Se nada precisar ser feito, o servidor de controle de inicialização instrui o iPXE a inicializar a partir da unidade local com

sanboot --no-describe --drive 0x80

5- O Grub é carregado novamente e inicializa na unidade local, configurando a próxima inicialização para ser o iPXE novamente.

O tempo de inicialização no Windows 10, incluindo a solicitação do servidor de controle de inicialização, é de aproximadamente 25 segundos. Então, na verdade, bem rápido. :)

    
por 18.02.2016 / 16:45
0

Eu usei a seguinte técnica de atualização de um sistema remoto, que pode ajudá-lo também. Nesse sistema eu só poderia iniciar um reset, não olhar para a tela (boot). O sistema inicializou no grub (no Ubuntu 12.04) e tinha uma partição extra e uma partição de dados. O truque é inserir em /etc/default/grub :

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=false

Que você sempre inicializa na entrada 0 (Ubuntu 12.04), a menos que:

  • alguém no console seleciona outra coisa
  • você executa grub-reboot X enquanto está conectado no Ubuntu e reinicializa

Do Ubuntu eu iria baixar e extrair um arquivo tar para a partição extra (ou fazer pequenas mudanças manualmente), então execute update-grub para atualizar o menu grub (que varreu a partição extra recém-criada e criou entradas de menu para sua OS), use grub-reboot e reboot .

Se a máquina não voltasse (ou seja, não poderia ssh após um período de tolerância), eu poderia reinicializar a máquina e ela reinicializaria no Ubuntu pronta para análise do que deu errado e do próximo ciclo.

Com o programa apropriado executado na inicialização, você pode verificar qual é a próxima "imagem" a ser baixada, ver se já tem isso (se não baixar) e instalar. Então reinicie como acima.

Com uma distribuição baseada em systemd enxuta, o processo de reinicialização deve ser relativamente rápido, e o download / instalação de um sistema operacional / distribuição alternativo ocuparia a maior parte do tempo.

    
por 15.02.2016 / 19:19
0

Existem pelo menos duas maneiras de fazer isso:

  1. Dê uma olhada no link , um desses comandos pode funcionar para você:

    chain ${server}/grub4dos.exe --config-file="find --set-root /BOOTMGR;chainloader /BOOTMGR"
    chain ${server}/grub4dos.exe --config-file="root (hd0,1);chainloader +1"
    
  2. No momento, estou usando o seguinte conforme construí isso antes de encontrar essa página no GRUB4DOS no site do iPXE. Crie uma imagem ISO contendo ISOLINUX e esta configuração:

    NOESCAPE 1
    PROMPT 0
    ALLOWOPTIONS 0
    
    DEFAULT chain-hd0-2
    LABEL chain-hd0-2
    SAY Chaining hd0 2...
    COM32 chain.c32
    APPEND hd0 2
    

    E inicialize usando (você tem que usar 0x81 aqui porque usa 0x80 por padrão, o que substitui o disco local):

    sanboot --drive 0x81 ${server}/chain-hd0-2.iso
    
por 08.05.2016 / 18:37