Sì, è molto possibile. Il tipo di sistema che puoi avviare dipenderà da come funziona il sistema stesso.
Di solito, troverai che sistemi molto semplici (come DOS o Win98) e sistemi molto complessi (come le moderne distribuzioni Linux) sono facilmente avviabili sulla rete.
Il modo per ottenere ciò sui due tipi di sistemi è molto diverso.
Vediamo in entrambi i modi in modo più dettagliato. Suppongo che tu abbia già una configurazione del server di avvio PXE ; se non lo fai, vai avanti e fallo, è abbastanza facile.
Sto anche ipotizzando una dnsmasq
configurazione su un server Linux con il tftproot in /var/lib/tftpboot
, ma dovresti essere in grado di adattare le istruzioni a qualsiasi altra configurazione.
Per sistemi semplici
Per i sistemi semplici, devi semplicemente caricare l'immagine (ISO) nella RAM e indurre il sistema a credere che sia un'unità reale. Questo viene fatto con un piccolo aiuto dal BIOS e un modulo software chiamato memdisk .
Il sistema che desideri caricare sulla rete è 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
È praticamente tutto. Le prime righe sono menu boilerplate; i bit importanti sono le ultime quattro righe: carica memdisk con la ISO data.
Per sistemi complessi
I sistemi moderni con elementi fantasiosi come una buona gestione della memoria e il corretto rilevamento dell'hardware praticamente ignorano tutto ciò che il BIOS ha da dire.
Questo rende memdisk
praticamente inutile l' approccio usato sopra, perché se hai caricato l'ISO in quel modo, una volta che il kernel è stato letto dall'ISO e caricato in memoria (questo viene fatto dal bootloader nell'ISO; i bootloader prestano attenzione al BIOS) , i dati ISO sarebbero spariti.
Cosa fai allora? Bene, in realtà non carichi l'ISO dalla rete, ma invece dici al sistema che può accedere ai file richiesti da lì.
Per i sistemi Linux, estrarre i contenuti ISO da qualche parte nel programma tftproot e caricare direttamente il kernel e initrd, quindi lasciarlo a loro per trovare il filesystem di root e montarlo.
Ecco un esempio usando l'incredibile System Rescue CD . In realtà ho estratto l'intero ISO sulla radice del server TFTP, perché si adatta perfettamente alla mia struttura di directory, quindi i kernel sono in/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
La parte più importante qui è la APPEND
linea. Vedi ilnetboot=
alla fine? Ecco come il sistema operativo sa dove si trova il suo filesystem di root. La sintassi è <protocol>://<server>:<path>
.
Avevo impostato comodamente un nome DNS pxe
per il mio server. Se non lo hai, utilizzeresti un indirizzo IP per il server.
Inoltre, sysresccd è uno dei più semplici perché utilizza un'immagine di squashfs per il suo filesystem di root, che può essere facilmente scaricato e caricato nella RAM con qualsiasi metodo. Qui uso nbd; Puoi anche usare tftp, nfs e http .
Per altre distro, come Ubuntu, penso tu possa usare solo nfs.
Per i sistemi Windows è un po 'più complesso da fare . Lo schema è:
- Avere un'installazione di Windows 7 in una cartella condivisa sul server
- Avere un ambiente Windows PE completo sul server nella radice TFTP
- Chiedi al computer client di caricare WinPE sulla rete e premi F12per ottenere un prompt dei comandi
- Mappare la cartella condivisa con l'installazione di Windows 7 su una lettera di unità
- Avviare l'installazione dalla cartella mappata
Non l'ho mai provato e sembra che non funzioni per alcune persone. Per le versioni NT precedenti a Vista penso che non sia nemmeno possibile. Per Windows pre-NT (95, 98, ME, ecc.) Puoi usare l'approccio memdisk, ma l'avvio di questi è dannoso per la tua salute :-p