======= PXE =======
=== C'est quoi ? ===
Le PXE (Pre-boot eXecution Environment) est un moyen faire booter un PC via une carte réseau au même titre que le boot via CD-ROM, clé USB ou Disque Dur.
Concrètement lors du boot d'un PC, le BIOS / l'UEFI va aller chercher sur le MBR / la partition EFI un bootloader (GRUB,SYSLINUX et LILO sont des bootloaders courant pour Linux, NTLDR pour Windows, ...) sur le CD-ROM, la clé USB ou le Disque Dur. Lors d'un boot par PXE c'est le même principe, sauf que le bootloader (ici PXELinux, basé sur SYSLINUX) est récupéré depuis un serveur.
=== Pourquoi ? ===
== Comparaison des débits théoriques ==
|CD-ROM x1 | 18,75 kbit/s|
|CD-ROM x4 | 75 kbit/s|
|CD-ROM x52 | 97.5 Mbit/s|
|**Ethernet 100M **| **100 Mbit/s**|
|USB 2.0 | 480 Mbit/s|
|**Ethernet 1000M** | **1 Gbit/s**|
|USB 3.0 | 5 Gbit/s|
|USB 3.1 | 10 Gbit/s|
==Les avantages du boot par PXE ==
* On ne trouve pas de l'USB 3.0 sur tous les PC/Serveurs, l'Ethernet Gigabit est plus rependu que l'USB 3.0
* Certains vieux PC/Serveurs ne veulent tout simplement pas booter sur de l'USB
* Pas de clé USB à préparer (Évite l'utilisation de dd, les plus maladroits d'entre-nous seront contents)
* Le PXE MiNET est déjà configuré avec les distributions souvent utilisées à MiNET (pas besoin de re-télécharger des isos)
* Euh ? Graver des CD-ROM ? Qui fait encore ça ?
* Il suffit de déraquer le serveur pour avoir toutes les distributions possibles pour l'isntall party (traditionnelement 1 par an)
=== Configuration du serveur ===
== Hardware ==
Résumé:
|Chassis|Tyan Tank GT20|
|CPU| 4x Intel(R) Xeon(R) CPU 5110 @ 1.60GHz|
|RAM| 2Gb |
|Réseau| 3x Gigabit Ethernet|
|Stockage| 2x 160Gb Sata + 2x 500Gb Sata|
{{ :wiki:services:tyantank.png |}}
== Software ==
Résumé:
|OS|Debian Stable|
|Stockage| RAID 1 Système et RAID 1 Stockage|
|Services| DHCP, TFTP, HTTP, NFS, SMB|
|Réseau| eth0 dans le VLAN d'admin de prod (102), eth1 dans le VLAN dédié au PXE (999)|
Le VLAN 999 ressemble à ça (clic to enlarge your p...icture):
{{ :wiki:services:999.png |}}
* DHCP (isc-dhcp-server)
On utilise isc-dhcp server. Il fournit une IP entre 192.168.150.20 et 192.168.150.250. Ce qui laisse quelques ip pour mettre des serveurs en statiques. En plus de fournir une ip, les dns et la gateway, il fournit le bootloader en fonction de l'architecture.
Le dhcp fournit également quelques
[[http://ipxe.org/howto/dhcpd| options supplémentaires nécessaires au fonctionnement du firmware iPXE.]] On les a mis un peu au feeling parce que c'est pas très bien documenté.
[[https://tools.ietf.org/html/|Coucou la rfc]]
Type Architecture Name
---- -----------------
0 Intel x86PC
1 NEC/PC98
2 EFI Itanium
3 DEC Alpha
4 Arc x86
5 Intel Lean Client
6 EFI IA32
7 EFI BC
8 EFI Xscale
9 EFI x86-64
Dans /etc/dhcp/dhcpd.conf :
if option architecture-type = 00:00 {
filename "bios/lpxelinux.0";
}
elsif option architecture-type = 00:09 {
filename "efi64/syslinux.efi"; }
elsif option architecture-type = 00:07 {
filename "efi64/syslinux.efi";
}
else {
filename "bios/pxelinux.0";
}
* TFTP (tftpd-hpa)
Le bootloader est téléchargé en tftp, tout le reste se fait en http.
/etc/default/tftpd-hpa
* HTTP (lighttpd)
On utilise lighttpd parce que c'est léger.
* NFS (nfs-kernel-server)
On utilise un système de fichier NFS pour les live et debian-minet via le fichier [[https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Deployment_Guide/s1-nfs-server-config-exports.html|/etc/exportfs]] qui contrôle les systèmes de fichiers pouvant être exporté et avec quels droit. Exemple :
/srv/nfs/ubuntu_unity_live_64 192.168.150.0/24(async,no_root_squash,no_subtree_check,ro)
/srv/nfs/debian-minet 192.168.150.0/24(async,no_root_squash,no_subtree_check,rw)
Les live ubuntu sont monté en read-only (ro), l'utilisateur root n'a pas les droits root et est mapé sur l'userid nfsnobody (root_squash), on n'empêche pas l'accès à tout le système de fichier(no_subtree). L'option (async) permet au serveur NFS de violer le protocole NFS et de répondre aux requêtes avant que les changements effectués par la requête aient été appliqués sur l'unité de stockage. Cette option améliore les performances mais a un coût au niveau de l'intégrité des données (données corrompues ou perdues) en cas de redémarrage non-propre (par exemple en cas de crash système).
Debian minet est monté en read-write.
* SAMBA (samba)
La conf se fait dans /etc/samba/smb.conf et a été trouvée [[http://www.tecmint.com/configure-pxe-server-to-install-windows-on-centos/|là ]]
=== Comment ca marche ? ===
- Euh comment se connecter au réseau alors que le PC n'est pas encore démarré ?
- C'est la ROM PXE qui se trouve dans le BIOS/UEFI qui va lancer une requête DHCP
{{ :wiki:services:pxe.png |}}
Chaque Firmware (BIOS, UEFI etc.) possede un ROM PXE
Quand la machine boot en PXE, la ROM PEXE fait une requete DHCP, recoit une IP, le netmask, les DNS(à configurer) et un fichier syslinus surlequel booter en TFTP.
syslinux ?
The Syslinux Project covers lightweight bootloaders for MS-DOS FAT filesystems (SYSLINUX), network booting (PXELINUX), bootable "El Torito" CD-ROMs (ISOLINUX), and Linux ext2/ext3/ext4 or btrfs filesystems (EXTLINUX). The project also includes MEMDISK, a tool to boot legacy operating systems (such as DOS) from nontraditional media; it is usually used in conjunction with PXELINUX and ISOLINUX.
Le bootloader utilisé ici est lpxelinux.0 car il permet de booter par http contrairement à pxelinux.0 qui permet de booter seulement par tftp (qui est vieux, en UDP et lent).
Le fichier pxelinux.cfg/default est alors chargé, le menu du PXE est affiché
Menu syslinux en BIOS :
{{:wiki:services:menu.png?400|}}
Menu iPXE en UEFI
{{:wiki:services:ipxemenu.png?400|}}
Ce menu Permet alors de booter un noyau avec les options que l'on souhaite. Le noyau et le fichier initrd associé sont téléchargés via http et chargés en RAM, le PC boot alors dessus.
[[:wiki:services:pxe:images | On continue ici avec la description des différentes facons de booter sur plusieurs OS ]]
==== Télécharger directement les isos disponibles sur le pxe ====
Dans le vlan 999 : [[http://192.168.150.3:81|http://192.168.150.3:81]]
Derrière le vpn : [[http://192.168.102.197:81|http://192.168.102.3:81]]
Si vous voulez rajouter des isos, copier dans le dossier /srv/iso