Sim, é muito possível. O tipo de sistema que você pode inicializar dependerá de como esse sistema funciona.
Normalmente, você descobrirá que muito sistemas simples (como DOS ou Win98) e sistemas complexos (como distros modernos do Linux) são facilmente inicializáveis pela rede.
A maneira de conseguir isso nos dois tipos de sistemas é muito diferente.
Vamos ver as duas formas com mais detalhes. Eu estou supondo que você já tem um PXE inicialização servidor configuração ; Se você não fizer, vá em frente e faça isso, é bem fácil.
Eu também estou assumindo uma configuração de dnsmasq
em um servidor Linux com o tftproot em /var/lib/tftpboot
, mas você deve ser capaz de adaptar as instruções para qualquer outra configuração.
Para sistemas simples
Para sistemas simples, você simplesmente carrega a imagem (ISO) na RAM e induz o sistema a acreditar que é uma unidade real. Isso é feito com uma pequena ajuda do BIOS e de um módulo de software chamado memdisk .
O sistema que você deseja carregar na rede é freedos:
# /var/lib/tftpboot/pxelinux.cfg/default
UI vesamenu.c32
PROMPT 0
TIMEOUT 0
MENU DEFAULT freedos
LABEL freedos
MENU LABEL FreeDOS
KERNEL /syslinux/memdisk
INITRD /freedos.iso iso
Isso é muito bonito. As primeiras linhas são o boilerplate do menu;
os bits importantes são as últimas quatro linhas: carrega o memdisk com o ISO fornecido.
Para sistemas complexos
Sistemas modernos com recursos sofisticados, como um bom gerenciamento de memória e a detecção adequada de hardware, praticamente ignoram qualquer coisa que a BIOS tenha a dizer.
Isto torna a abordagem memdisk
usada acima praticamente inútil, porque se você carregasse o ISO dessa forma, uma vez que o kernel fosse lido do ISO e carregado na memória (isso é feito pelo bootloader no ISO; prestar atenção ao BIOS), os dados ISO teriam desaparecido.
O que você faz então? Bem, você não carrega o ISO da rede, mas diz ao sistema que ele pode acessar os arquivos necessários a partir daí.
Para sistemas Linux, extraia o conteúdo ISO em algum lugar do tftproot e carregue o kernel e o initrd diretamente, e então deixe que eles encontrem o sistema de arquivos raiz e monte-o.
Veja um exemplo usando o incrível CD de resgate do sistema . Eu realmente extraí todo o ISO na raiz do servidor TFTP, porque ele se encaixa bem na minha estrutura de diretório, então os kernels estão em /syslinux
.
# /var/lib/tftpboot/pxelinux.cfg/default
UI vesamenu.c32
PROMPT 0
TIMEOUT 0
MENU DEFAULT sysrescd64
LABEL sysrescd64
MENU LABEL 1) SysResCD 4.2.0 (x64)
KERNEL /syslinux/rescue64
APPEND setkmap=us nomodeset netboot=nbd://pxe:sysrcd.dat
INITRD /syslinux/initram.igz
O bit mais importante aqui é a linha APPEND
. Veja o netboot=
no final? É assim que o sistema operacional sabe onde está seu sistema de arquivos raiz. A sintaxe é <protocol>://<server>:<path>
.
Eu convenientemente defini um nome DNS pxe
para o meu servidor.
Se você não tem isso, você usaria um endereço IP para o servidor.
Além disso, o sysresccd é um dos mais fáceis porque ele usa uma imagem do squashfs para seu sistema de arquivos raiz, que pode ser facilmente baixado e carregado na RAM com qualquer método. Aqui eu uso nbd; você também pode usar tftp, nfs e http .
Para outras distros, como o Ubuntu, acho que você só pode use nfs.
Para sistemas Windows, é um pouco mais complexo para ser . O esboço é:
- Instale o Windows 7 em uma pasta compartilhada no servidor
- Tenha um ambiente completo do Windows PE no servidor na sua raiz TFTP
- Solicite que a máquina cliente carregue o WinPE pela rede
e pressione F12 para obter um prompt de comando
- Mapear a pasta compartilhada com o Windows 7 instalado em uma letra de unidade
- Iniciar a instalação a partir da pasta mapeada
Eu nunca tentei isso e parece que não funciona para algumas pessoas. Para as versões do NT mais antigas que o Vista, acho que nem é possível. Para Windows pré-NT (95, 98, ME, etc) você pode usar a abordagem de memdisk, mas inicializar estes é ruim para sua saúde :-p