Oui, c'est tout à fait possible. Le type de système que vous pouvez démarrer dépendra du fonctionnement dudit système.
Habituellement, vous constaterez que des systèmes très simples (comme DOS ou Win98) et des systèmes très complexes (comme les distributions Linux modernes) sont facilement amorçables sur le réseau.
La façon d'accomplir cela sur les deux types de systèmes est très différente.
Voyons les deux façons plus en détail. Je suppose que vous avez déjà une configuration de serveur de démarrage PXE ; si vous ne le faites pas, allez-y et faites-le, c'est assez facile.
Je suppose également une dnsmasq
configuration sur un serveur Linux avec tftproot /var/lib/tftpboot
, mais vous devriez pouvoir adapter les instructions à toute autre configuration.
Pour les systèmes simples
Pour les systèmes simples, il vous suffit de charger l'image (ISO) dans la RAM et de faire croire au système qu'il s'agit d'une unité réelle. Cela se fait avec un peu d'aide du BIOS et d'un module logiciel appelé memdisk .
Le système que vous souhaitez charger sur le réseau est libre:
# /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
C'est à peu près ça. Les premières lignes sont des menus passe-partout; les bits importants sont les quatre dernières lignes: charger le memdisk avec l'ISO donné.
Pour les systèmes complexes
Les systèmes modernes avec des éléments sophistiqués comme une bonne gestion de la mémoire et une détection matérielle appropriée ignorent à peu près tout ce que le BIOS a à dire.
Cela rend l' memdisk
approche utilisée ci-dessus à peu près inutile, car si vous chargez l'ISO de cette façon, une fois que le noyau a été lu à partir de l'ISO et chargé en mémoire (cela est fait par le chargeur de démarrage dans l'ISO; les chargeurs de démarrage font attention au BIOS) , les données ISO auraient disparu.
Que faites-vous alors? Eh bien, vous ne chargez pas réellement l'ISO à partir du réseau, mais dites plutôt au système qu'il peut accéder aux fichiers requis à partir de là.
Pour les systèmes Linux, extrayez le contenu ISO quelque part dans le tftproot et chargez directement le noyau et initrd, puis laissez-leur le soin de trouver le système de fichiers racine et de le monter.
Voici un exemple d'utilisation de l'incroyable CD System Rescue . J'ai en fait extrait l'ISO entier à la racine du serveur TFTP, car il s'intègre parfaitement dans ma structure de répertoires, donc les noyaux sont dedans /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
Le bit le plus important ici est la APPEND
ligne. Vous voyez netboot=
à la fin? C'est ainsi que le système d'exploitation sait où se trouve son système de fichiers racine. La syntaxe est <protocol>://<server>:<path>
.
J'avais commodément défini un nom DNS pxe
pour mon serveur. Si vous ne l'avez pas, vous utiliserez une adresse IP pour le serveur.
En outre, sysresccd est l'un des plus faciles car il utilise une image squashfs pour son système de fichiers racine, qui peut être facilement téléchargée et chargée en RAM avec n'importe quelle méthode. Ici, j'utilise nbd; vous pouvez également utiliser tftp, nfs et http .
Pour d'autres distributions, comme Ubuntu, je pense que vous ne pouvez utiliser que nfs.
Pour les systèmes Windows, c'est un peu plus complexe à faire . Le plan est:
- Avoir une installation de Windows 7 sur un dossier partagé sur le serveur
- Avoir un environnement Windows PE complet sur le serveur dans votre racine TFTP
- Demandez à la machine client de charger le WinPE sur le réseau et appuyez sur F12pour obtenir une invite de commande
- Mappez le dossier partagé avec l'installation de Windows 7 sur une lettre de lecteur
- Démarrer l'installation à partir du dossier mappé
Je n'ai jamais essayé cela, et il semble que cela ne fonctionne pas pour certaines personnes. Pour les versions NT plus anciennes que Vista, je pense que ce n'est même pas possible. Pour Windows pré-NT (95, 98, ME, etc.), vous pouvez utiliser l'approche memdisk, mais leur démarrage est mauvais pour votre santé :-p