Skip to content


Créer un serveur PXE/TFTP sous Debian

Introduction

Faire un serveur PXE a pour but de simplifier certaines installations et le matériels utilisés pour celles-ci.

Prérequis

Nous allons installer : dhcp3-server (si vous n'avez pas de serveur DHCP permettant de paramétrer le fichier de démarrage : freebox), tftp-hpa, et pxe.

# apt-get install dhcp3-server tftp-hpa pxe

Configuration du serveur DHCP

L'installation de dhcp3-server installe par dépendance isc-dhcp-server, pxe installe par dépendance syslinux syslinux-common.

Le fichier de configuration du DHCP est : /etc/dhcp/dhcpd.conf.

La carte avec laquelle écoutera le DHCP sera eth0 : 192.168.1.7/24 fournie par la réservation de la freebox qui fournie par ailleurs les adresses de 192.168.1.10 à 50. Nous allons donc configurer notre DHCP afin qu'il fournisse les adresses de 192.168.1.125 à 192.168.1.145.

Le routeur sera la freebox : 192.168.1.254, les DNS seront la freebox et google : 192.168.1.254 et 8.8.8.8

 

nano /etc/dhcp/dhcpd.conf
 
authoritative;
ddns-update-style interim;
ignore client-updates;
 
# PXE
subnet 192.168.1.0 netmask 255.255.255.0 {
    authoritative;
    allow unknown-clients;
    # range dynamic-bootp 192.168.1.120 192.168.1.145;
    range dynamic-bootp 192.168.1.120 192.168.1.145;
    option domain-name-servers 8.8.8.8, 192.168.1.254;
    option routers 192.168.1.254;
    option subnet-mask 255.255.255.0;
    option broadcast-address 192.168.1.255;
    default-lease-time 43200;
    max-lease-time 86400;
    server-name "PXE";
    next-server 192.168.1.7;
    filename "pxe/pxelinux.0";
    }

Un exemple plus complexe est visible ici : http://doc.mandriva.com/fr/mes5/Enterprise-Server-Manual-FR.html/CS-install-pxe.html

Configuration du TFTP

Le fichier à éditer est /etc/default/tftpd-hpa

# nano /etc/default/tftp-hpa
# /etc/default/tftpd-hpa
 
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/media/data/tftpboot/"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure --create --listen --verbose"

Configuration de PXE

Le fichier à éditer est : /etc/pxe.conf

# nano /etc/pxe.conf

Ce qui donne chez moi

# mtftp info
mtftp_address=224.1.5.1
mtftp_client_port=1758
mtftp_server_port=1759
 
# the port to listen on
listen_port=4011
 
# enable multicast?
use_multicast=1
 
# enable broadcast?
use_broadcast=0
 
# user prompt
prompt=Press F8 to view menu ...
prompt_timeout=10
 
# what services to provide, priority in ordering
# CSA = Client System Architecture
# service=<CSA>,<min layer>,<max layer>,<basename>,<menu entry>
service=X86PC,0,0,local,Local boot
service=X86PC,0,0,pxelinux,PXELinux
 
# tftpd base dir
tftpdbase=/media/data/tftpboot/
 
# domain name
#domain=dom-sln.local

Création de l’environnement

Nous allons télécharger l'image de boot réseau de Debian Squeeze pour les AMD (like) 64 bits.

wget http://ftp.debian.org/debian/dists/squeeze/main/installer-amd64/current/images/netboot/netboot.tar.gz -O /tmp/netboot-debian-squeeze-amd64.tar.gz

Attention le support squeeze est fini !

Puis mettre en place l’environnement.

mkdir -p /tmp/netboot-debian-squeeze-amd64/
 
mkdir -p /media/data/tftpboot/pxe/
mkdir -p /media/data/tftpboot/pxe/boot-screens/
mkdir -p /media/data/tftpboot/pxe/pxelinux.cfg/
mkdir -p /media/data/tftpboot/pxe/debian-squeeze/amd64/
 
cp /tmp/netboot-debian-squeeze-amd64/debian-installer/amd64/pxelinux.0 /media/data/tftpboot/pxe/
cp /tmp/netboot-debian-squeeze-amd64/debian-installer/amd64/boot-screens/splash.png /media/data/tftpboot/pxe/boot-screens/
cp /tmp/netboot-debian-squeeze-amd64/debian-installer/amd64/boot-screens/vesamenu.c32 /media/data/tftpboot/pxe/boot-screens/
cp /tmp/netboot-debian-squeeze-amd64/debian-installer/amd64/initrd.gz /media/data/tftpboot/pxe/debian-squeeze/amd64/
cp /tmp/netboot-debian-squeeze-amd64/debian-installer/amd64/linux /media/data/tftpboot/pxe/debian-squeeze/amd64/

On crée ensuite le fichier /media/data/tftpboot/pxe/pxelinux.cfg/default

Je me suis très largement inspiré de :  http://www.gentilkiwi.com/divers-s27-t-embellissement-de-l-interface-de-demarrage.htm

Voici donc mon fichier : default

#DEFAULT local
DEFAULT /boot-screens/vesamenu.c32
TIMEOUT 600
MENU TITLE SLN PXE
MENU MARGIN 0
 
menu color screen    *    #90ffffff #00000000 *
menu color border    *    #ff6bff6b #00000000 *
menu color title    *    #ffffffff #00000000 *
menu color unsel    *    #90ffffff #00000000 *
menu color hotkey    *    #ff6bff6b #00000000 *
menu color sel        *    #e0ffffff #200cd22d *
menu color hotsel    *    #e06bff6b #200cd22d *
menu color scrollbar    *    #200cd22d #00000000 *
menu color tabmsg    *    #60ffffff #00000000 *
menu color cmdmark    *    #c000ffff #00000000 *
menu color cmdline    *    #c0ffffff #00000000 *
menu color pwdborder    *    #ff6bff6b #200cd22d *
menu color pwdheader    *    #ffffffff #200cd22d *
menu color pwdentry    *    #90ffffff #200cd22d *
menu color timeout_msg    *    #80ffffff #00000000 *
menu color timeout    *    #c0ffffff #00000000 *
 
MENU BACKGROUND /pxelinux.cfg/logo2.png
 
label local
    MENU LABEL Demarrage disque dur
    MENU DEFAULT
    LOCALBOOT 0
MENU SEPARATOR
 
label ###OS CLIENT###
 
label Ubuntu 11.04-amd64
    kernel images/ubuntu-11.04-amd64/linux
    append vga=788 initrd=images/ubuntu-11.04-amd64/initrd.gz preseed/url=http://192.168.1.7/iso/preseed-amd64.cfg console-setup/ask_detect=false console-setup/layoutcode=fr locale=fr_FR console-keymaps-at/keymap=fr preseed/local=fr_FR --
quiet
 
label Ubuntu 12.10-amd64
    kernel images/ubuntu-12.10-amd64/linux
    append vga=788 initrd=images/ubuntu-12.10-amd64/initrd.gz preseed/url=http://192.168.1.7/iso/preseed-12.10-amd64.cfg console-setup/ask_detect=false console-setup/layoutcode=fr locale=fr_FR console-keymaps-at/keymap=fr
preseed/local=fr_FR --
quiet
 
MENU SEPARATOR
 
label ###OS SERVEUR###
label Centos6.0-64
  kernel  images/centos6.0-64/vmlinuz
  append initrd=images/centos6.0-64/initrd.img  ks=http://192.168.1.7/iso/centos.ks
quiet
MENU SEPARATOR
 
label ###TOOLS###
 
label Ubuntu 11.04-x86-live
    kernel  images/ubuntu-11.04-live/vmlinuz
    append  root=/dev/nfs boot=casper netboot=nfs nfsroot=192.168.1.7:/home/iso/ubuntu-11.04-live  initrd=images/ubuntu-11.04-live/initrd.lz quiet splash --
quiet
 
label Memtest
    KERNEL images/memtest
quiet
 
label Clonezilla
  kernel images/clonezilla/vmlinuz
  append initrd=images/clonezilla/initrd.img boot=live union=aufs netboot=nfs nfsroot=192.168.1.7:/home/iso/clonezilla live-config
quiet
 
label SuperGrub2
    KERNEL images/memdisk
    initrd images/supergrub/super_grub_disk_hybrid-1.98s1.iso
quiet
 
label GParted Live
     kernel images/gparted/vmlinuz
     append initrd=images/gparted/initrd.img boot=live config union=aufs noswap noprompt vga=788 fetch=http://192.168.1.7/iso/gparted/filesystem.squashfs
quiet
 
label DellDiagnostic
    kernel images/memdisk
    initrd images/dell/diags.img
quiet   
 
MENU SEPARATOR
 
label ###TEST###
 
label Mageia-2_test
  kernel images/mageia-2/vmlinuz
  append initrd=images/mageia-2/all.rdz  vga=791
quiet
 
label DellDiagnostic
        kernel images/memdisk
        initrd images/dell/om.iso
quiet
 
label Hiren boot CD
    kernel images/HBCD/menu.c32
    append initrd=images/HBCD/boot.gz
 
label DellDiagnosticV7
        kernel images/memdisk
        initrd images/dell/DELL-Diag-v7.0.iso
 
label Ubuntu 12.10-amd64 test
    kernel images/ubuntu-12.10-amd64/linux
    append vga=788 initrd=images/ubuntu-12.10-amd64/initrd.gz preseed/url=http://192.168.1.7/iso/preseed-12.10-amd64.cfg-test console-setup/ask_detect=false console-setup/layoutcode=fr locale=fr_FR console-keymaps-at/keymap=fr preseed/local=fr_FR --
quiet
 
label install Debian amd64
 kernel images/debian-squeeze/amd64/linux
 append vga=normal initrd=images/debian-squeeze/amd64/initrd.gz preseed/url=http://192.168.1.7/iso/preseed-debian-amd64.cfg console-setup/ask_detect=false console-setup/layoutcode=fr locale=fr_FR console-keymaps-at/keymap=fr preseed/local=fr_FR --
quiet

 

Voici mon logo2.png :

logo2

Le PreBoot ressemblant à :

preboot

 

Téléchargement des images de démarrage

Pour Debian cela à été fait !

Pour Ubuntu sur des AMD 64 bits :

  • Quantal : http://archive.ubuntu.com/ubuntu/dists/quantal/main/installer-amd64/current/images/hd-media/
  • Natty : http://archive.ubuntu.com/ubuntu/dists/natty/main/installer-amd64/current/images/hd-media/

Pour CentOS 6.4 64 bits :

  • CentOS 6.4 : http://isoredirect.centos.org/centos/6.4/os/x86_64/images/pxeboot/
  • etc...

Téléchargez les fichier : initrd et vmlinuz ou vmlinux ou linux...

Arborescence

root@debian:/media/data/tftpboot# tree
.
└── pxe
    ├── boot-screens
    │   ├── splash.png
    │   └── vesamenu.c32
    ├── drakwizard_pxe
    ├── help.txt
    ├── images
    │   ├── centos6.0-64
    │   │   ├── initrd.img
    │   │   └── vmlinuz
    │   ├── clonezilla
    │   │   ├── initrd.img
    │   │   └── vmlinuz
    │   ├── debian-squeeze
    │   │   └── amd64
    │   │       ├── initrd.gz
    │   │       └── linux
    │   ├── dell
    │   │   ├── DELL-Diag-v7.0.iso
    │   │   └── diags.img
    │   ├── gparted
    │   │   ├── initrd.img
    │   │   └── vmlinuz
    │   ├── HBCD
    │   │   ├── [BOOT]
    │   │   │   └── Bootable_NoEmulation.img
    │   │   └── HBCD.iso
    │   ├── mageia-2
    │   │   ├── all.rdz
    │   │   └── vmlinuz
    │   ├── memdisk
    │   ├── memtest
    │   ├── supergrub
    │   │   ├── memdisk
    │   │   └── super_grub_disk_hybrid-1.98s1.iso
    │   ├── ubuntu-11.04-amd64
    │   │   ├── initrd.gz
    │   │   └── linux
    │   ├── ubuntu-11.04-live
    │   │   ├── initrd.lz
    │   │   └── vmlinuz
    │   ├── ubuntu-11.04-x86
    │   │   ├── initrd.gz
    │   │   └── linux
    │   ├── ubuntu-12.04-amd64
    │   │   ├── initrd.gz
    │   │   └── linux
    │   ├── ubuntu-12.10-amd64
    │   │   ├── initrd.gz
    │   │   └── linux
    │   └── ubuntu-last-amd64
    │       ├── initrd.gz
    │       └── linux
    ├── linux.0
    ├── memdisk
    ├── menu.c32
    ├── messages
    ├── PMSIpilot
    │   ├── centos.ks
    │   ├── preseed-12.04-amd64.cfg
    │   ├── preseed-12.10-amd64.cfg
    │   ├── preseed-12.10-amd64.cfg-test
    │   ├── preseed-amd64.cfg
    │   ├── preseed.cfg
    │   ├── preseed-debian-amd64.cfg
    │   ├── preseed-last-amd64.cfg
    │   └── script-install
    │       ├── files
    │       │   ├── key.pub
    │       │   ├── LikewiseOpen-6.0.0.8388-linux-amd64-deb.sh
    │       │   ├── LikewiseOpen-6.0.0.8388-linux-i386-deb.sh
    │       │   ├── mozilla.tar.gz
    │       │   ├── pam_mount.conf.xml
    │       │   ├── profile.d
    │       │   │   ├── proxy.sh
    │       │   │   ├── update_manager.sh
    │       │   │   └── vino.sh
    │       │   ├── system-auth
    │       │   ├── thunderbird.tar.gz
    │       │   └── xdg
    │       │       └── pmsi_share.desktop
    │       ├── finish-install.php
    │       ├── install-computer.txt
    │       ├── start-12.04.sh
    │       ├── start-12.10.sh
    │       ├── start-12.10.sh-test
    │       ├── start-mageia.sh
    │       └── start.sh
    ├── pxelinux.0
    ├── pxelinux.cfg
    │   ├── default
    │   ├── default.0
    │   ├── default.07-09-2011
    │   ├── default.ok
    │   ├── logo2.png
    │   ├── logo.jpg
    │   ├── logo.png
    │   └── profiles
    │       ├── boot
    │       │   ├── default
    │       │   └── local
    │       └── install
    └── vesamenu.c32

Scripts d'auto installation

Il existe plusieurs types de scripts.... Pour Debian/Ubuntu (preceed), pour CentOS/RedHat/Fedora (kickstart), Pour Mandriva/Mageia (script perl), etc...

Voici un exemple de fichier d'auto installation pour Ubunt/Debian :

# Préconfigurer la locale seule définit la langue, le pays et la locale.
#d-i debian-installer/locale string fr_FR
 
# Les valeurs peuvent être préconfigurées individuellement.
d-i debian-installer/language string fr
d-i debian-installer/country string FR
d-i debian-installer/locale string fr_FR.UTF-8
# On peut aussi demander la création d'autres locales.
#d-i localechooser/supported-locales en_US.UTF-8, nl_NL.UTF-8
 
# Keyboard selection.
# Disable automatic (interactive) keymap detection.
d-i console-setup/ask_detect boolean false
#d-i console-setup/modelcode string pc105
d-i console-setup/layoutcode string fr
# To select a variant of the selected layout (if you leave this out, the
# basic form of the layout will be used):
#d-i console-setup/variantcode string dvorak
 
#Proxy
 
d-i mirror/country string manual
#d-i mirror/http/hostname string 192.168.1.7
#d-i mirror/http/directory string /iso/ubuntu-11.04/
#d-i mirror/http/proxy string
#d-i mirror/http/proxy string http://10.0.0.35:3128
 
# créer  compte root
d-i passwd/root-login boolean true
# On peut aussi ne pas créer de compte d'utilisateur.
d-i passwd/make-user boolean false
 
#Le mot de passe de root en clair...
#d-i passwd/root-password password *******
#d-i passwd/root-password-again password *********
d-i passwd/root-password-crypted password $1$mczysd.I$baKKVWQ6F8A4428.gUgxb.
 
# Cette commande permet de régler l'horloge matérielle sur UTC :
d-i clock-setup/utc boolean true
 
# Vous pouvez mettre toute valeur acceptée pour $TZ.
# Voyez ce que contient /usr/share/zoneinfo/ pour les valeurs possibles.
d-i time/zone string Europe/Paris
 
# La ligne suivante autorise l'utilisation de NTP pour régler l'horloge pendant l'installation :
d-i clock-setup/ntp boolean true
 
tasksel tasksel/first multiselect ubuntu-desktop
d-i pkgsel/update-policy select unattended-upgrades
 
# Valeurs autorisées : none, safe-upgrade, full-upgrade
d-i pkgsel/upgrade select none
 
d-i grub-installer/only_debian boolean true
 
#d-i preseed/late_command string cd /target/root && wget http://192.168.1.7/iso/script-install/ubuntu.tar.gz && tar xvzf ubuntu.tar.gz && rm ubuntu.tar.gz
d-i preseed/late_command string cd /target/root && wget http://192.168.1.7/iso/script-install/start.sh && chmod +x start.sh

Un autre pour CentOS :

# Kickstart file automatically generated by anaconda.
# Modified for lolo installation on CentOS 6.x
# Destoyed by lolo but works well ! 🙂
 
#version=DEVEL
install
#cdrom
url --url=http://mirror.in2p3.fr/linux/CentOS/6.4/os/x86_64/
 
lang fr_FR.UTF-8
keyboard fr-latin9
timezone Europe/Paris
 
network --onboot yes --device eth0 --mtu=1500 --bootproto dhcp --hostname station
network --onboot yes --device em1 --mtu=1500 --bootproto dhcp --hostname station
 
rootpw  --iscrypted XLd7qu85Sl8Og
user --homedir=/home/pmsiadmin --name=pmsiadmin --password=ohGL2LJvCygXM --iscrypted --shell=/bin/bash
user --homedir=/home/pmsiuser --name=pmsiuser --password=/7CVfYVKVDVYE --iscrypted --shell=/bin/bash
 
text
 
firewall --service=http --service=ssh
 
authconfig --useshadow  --passalgo=sha512
 
bootloader --location=mbr --driveorder=sda --append="quiet biosdevname=0"
 
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
clearpart --all
 
#part / --fstype=ext4 --size=5120
#part swap --size=2048
#part /home --fstype=ext4 --size=10240
#part /var --fstype=ext4 --size=1 --grow
 
services --enabled=sshd,httpd,mysqld,memcached --disable=kdump,postfix
 
#repo --name="CentOS"  --baseurl=http://mirror.in2p3.fr/linux/CentOS/6.2/os/i386/ --cost=100
 
%packages
@Base
@Core
@load-balancer
 
    httpd
    httpd-devel
 
    memcached
 
    mysql-bench
    mysql-test
    mysql
 
    openssh-server
 
    php
    php-ldap
    php-mysql
    php-cli
    php-xml
    php-mbstring
    php-pcntl
    php-xsl
    php-pdo_mysql
    php-zip
    php-iconv
    php-pdo_mysql
    php-pdo
    php-devel
    php-pear
    php-posix
    php-gd
 
    vim-enhanced
    at
    bc
    pm-utils
    procmail
    hdparm
    lsof
    acpid
    anacron
    info
    man-pages
    sharutils
    strace
    sudo
    tree
    xdg-user-dirs-gtk
    wget
    screen
    zip
    unzip
    samba-client
    mc
    rsync
    ntp
    gcc
    make
    sysstat
 
    zlib-devel
 
    ntp
    ntpdate
 
    htop
    iozone
    phpmyadmin
 
%end

Démarrage sur le réseau

Un CentOS

preboot1 preboot2 preboot4 preboot6 preboot8 preboot9

Voilà........

....

Print Friendly

Posted in Debian, Important, Linux, Technique, Toutes. Tagged with , , , , .

2 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. tatuxp said

    Bonjour et merci pour ce tutorial.
    J'aurais cependant une question. Comment fait-on pour une prise en charge de l'UEFi car pxe.linux.0 ne fonctionne pas toujours.
    Cdt

  2. valette said

    bonjour,
    j'ai une erreur 404 not found quand je fais la partie wget dans "création de l'environnement", comment dois je faire pour la regler,
    sinon, je trouve que le tuto est tres claire et bien expliqué
    cordialement,
    sébastien

Some HTML is OK

(required)

(required, but never shared)

or, reply to this post via trackback.

Time limit is exhausted. Please reload CAPTCHA.


/* */
Creative Commons License
Cette création par Laurent Besson est mise à disposition selon les termes de la licence Creative Commons Paternité-Partage des Conditions Initiales à l'Identique 2.0 France.