WikiMiNET

La documentation technique et administrative

Outils pour utilisateurs

Outils du site


wiki:services:pxe

Ceci est une ancienne révision du document !


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é:

ChassisTyan 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

Software

Résumé:

OSDebian 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):

  • 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 options supplémentaires nécessaires au fonctionnement du firmware iPXE.

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)

/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

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

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

Télécharger directement les isos disponibles sur le pxe

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

wiki/services/pxe.1490485540.txt.gz · Dernière modification: 2020/06/27 18:15 (modification externe)