Ceci est une ancienne révision du document !
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.
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 |
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 |
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):
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 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é.
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)
/etc/default/tftpd-hpa TFTP_USERNAME="tftp" RUN_DAEMON="yes" TFTP_DIRECTORY="/srv/tftp" TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="--secure"
HTTP (lighttpd)
/etc/lighttpd/lighttpd.conf server.modules = ( "mod_access", "mod_alias", "mod_compress", "mod_redirect", # "mod_rewrite", ) server.document-root = "/srv/http" server.upload-dirs = ( "/var/cache/lighttpd/uploads" ) server.errorlog = "/var/log/lighttpd/error.log" server.pid-file = "/var/run/lighttpd.pid" server.username = "www-data" server.groupname = "www-data" server.port = 80 index-file.names = ( "index.php", "index.html", "index.lighttpd.html" ) url.access-deny = ( "~", ".inc" ) static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" ) compress.cache-dir = "/var/cache/lighttpd/compress/" compress.filetype = ( "application/javascript", "text/css", "text/html", "text/plain" ) # default listening port for IPv6 falls back to the IPv4 port include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port include_shell "/usr/share/lighttpd/create-mime.assign.pl" include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
NFS (nfs-kernel-server)
/etc/exportfs /srv/nfs/ubuntu_unity_live_64 192.168.150.0/24(async,no_root_squash,no_subtree_check,ro) /srv/nfs/ubuntu_gnome_live_64 192.168.150.0/24(async,no_root_squash,no_subtree_check,ro) /srv/nfs/arch_live 192.168.150.0/24(async,no_root_squash,no_subtree_check,ro) /srv/nfs/ubuntu_lxde_live_64 192.168.150.0/24(async,no_root_squash,no_subtree_check,ro) /srv/nfs/ubuntu_xfce_live_64 192.168.150.0/24(async,no_root_squash,no_subtree_check,ro) /srv/nfs/clonezilla 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)
SAMBA (samba)
/etc/samba/smb.conf [global] workgroup = PXESERVER server string = Samba Server Version %v log file = /var/log/samba/log.%m max log size = 50 idmap config * : backend = tdb cups options = raw netbios name = pxe map to guest = bad user dns proxy = no public = yes ## For multiple installations the same time - not lock kernel kernel oplocks = no nt acl support = no security = user guest account = nobody [windows_install] comment = Windows Image path = /srv/samba/ read only = no browseable = yes public = yes printable = no guest ok = yes oplocks = no level2 oplocks = no locking = no
- 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
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.png
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.
On continue ici avec la description des différentes facons de booter sur plusieurs OS
Dans le vlan 999 : http://192.168.150.3:81 Derrière le vpn : http://192.168.102.3:81 Si vous voulez rajouter des isos, copier dans le dossier /srv/iso