Install Debian 100% réseau

Le but de cet article est d’expliquer comment faire une vraie installation via le réseau de Debian, sans même utiliser une clé USB. Ceci est possible en faisant booter son PC sur sa carte réseau (à condition que celle-ci supporte ce genre de chose)PXE.

Cette méthode est aussi applicable pour d’autres distributions, à condition de trouver les bonnes infos/images (je ferai peut-être un article complémentaire pour les distributions Ubuntu, Red Hat/CentOS/Fedora, …).

La base: serveur dhcp+tftp

Une fois qu’on a configuré le BIOS de la machine pour booter sur la carte réseau, il faut disposer d’un serveur DHCP et d’un serveur TFTP.

Personnellement, le serveur dhcp/tftp est le dnsmasq de mon routeur OpenWRT, voilà comment ça se configure:

/etc/config/dhcp:

config 'dnsmasq'
    ...
    option 'enable_tftp' '1'
    option 'tftp_root' '/opt/tftproot'
...
config 'boot'
        option 'filename' 'pxelinux.0'
        option 'servername' 'mypxeboot'
        option 'serveraddress' 'IP.du.rout.eur'

On active le tout avec un petit /etc/init.d/dnsmasq restart.

Avec des choses plus classiques (serveur dhcp + tftpd):

/etc/dhcp/dhcpd.conf:

default-lease-time 604800;
max-lease-time 604800;
ddns-update-style none;
authoritative;
get-lease-hostnames true;

shared-network MyNET {
        subnet 192.168.1.0 netmask 255.255.255.0 {
                option broadcast-address      192.168.1.255;
                option routers                192.168.1.254;
                option domain-name-servers    192.168.1.254;
                option ntp-servers            192.168.1.254;

                group {
                        use-host-decl-names on;
                        server-identifier 192.168.1.254;
                        next-server 192.168.1.254;

                        # si on veut que n'importe quelle machine puisse booter sur la conf par défaut, décommenter la ligne suivante:
                        #filename "pxelinux.0";

                       host foo {
                               hardware ethernet xx:xx:xx:xx:xx:xx;
                               fixed-address 192.168.1.1;
                               filename "pxelinux.0";
                       }
                }
        }
}

Avec in.tftpd (par éxemple), on s’arrange pour qu’il démarre avec au moins ces options:

-R 4096:32767 -l -s /opt/tftproot

Arborescence sur de /opt/tftproot:

  • boot.msg : ce qui sera affiché une fois qu’on aura démarré sur la carte réseau;
  • pxelinux.0 : le noyau du système très minimal qui permettra ensuite de démarrer un installeur ou un live cd ;
  • pxelinux.cfg/default : la configuration du noyau PXE

Ajouter ce qu’il faut pour l’installeur Debian:

À la racine de /opt/tftproot, on récupère l’archive netboot.tar.gz pour l’architecture amd64, que l’on décompresse avant de la supprimer. On peut aussi supprimer les liens symboliques pxelinux.0 et pxelinux.cfg.

On fait la même chose avec la version i386 de l’archive.

On créé le dossier pxelinux.cfg et le fichier pxelinux.cfg/default (vide pour le moment).

On récupère un fichier pxelinux.0 au même endroit que les archives (ce fichier ne dépend pas du choix amd64/i386).

On peut créer un fichier boot.msg avec un petit bout de texte au choix (il évoluera plus tard).

Et on peut commencer à remplir le fichier default:

prompt 1
timeout 60
display boot.msg

Là, si on boot, normalement, la machine affichera le contenu de boot.msg et ne fera rien de plus 🙂

On peut compléter le fichier default comme suit afin de permettre de démarrer sur un de nos deux installeurs:

prompt 1
timeout 60
display boot.msg
default rescue64

label expert64
    kernel debian-installer/amd64/linux
    append priority=low vga=788 initrd=debian-installer/amd64/initrd.gz -- quiet

label expert32
    kernel debian-installer/i386/linux
    append priority=low vga=788 initrd=debian-installer/i386/initrd.gz -- quiet

label rescue64
    kernel debian-installer/amd64/linux
    append priority=low rescue/enable=true vga=788 initrd=debian-installer/amd64/initrd.gz -- quiet

label rescue32
    kernel debian-installer/i386/linux
    append priority=low rescue/enable=true vga=788 initrd=debian-installer/i386/initrd.gz -- quiet

Et on peut modifier le fichier boot.msg comme ça:

 ( -      Debian GNU/Linux network installer
 //\      arch = amd64/i386 - stable/testing/unstable
 v_/_

Press <Enter> to begin with auto install

Available boot options (* = default):
  expert64 - Debian Installer (expert), x86_64, stable
* rescue64 - Debian Installer (rescue), x86_64, stable
  expert32 - Debian Installer (expert), i386, stable
  rescue32 - Debian Installer (rescue), i386, stable

Là, si on boot, normalement on a le contenu du message qui s’affiche, et si on ne fait rien pendant 1 minute, on démarre la version “amd64” de l’installeur Debian en mode rescue.

Annexe: arborescence finale dans /opt/tftproot:

debian-installer/
    amd64/
        initrd.gz
        linux
    i386/
        initrd.gz
        linux
pxelinux.cfg/
    default
boot.msg
pxelinux.0

Dans les dossiers am64 et i386, on trouve aussi un fichier pxelinux.0 (dont on ne sert pas), un dossier pxelinux.cfg et un dossier boot-screens qui contiennent la configuration par défaut de Debian (c’est à dire de quoi reproduire le même menu de démarrage que les DVD ou autres média d’installation).

Si l’on préfère les utiliser, on peut tenter la chose suivante: dans le dossier pxelinux.cfg, faire un lien symbolique de l’adresse mac d’une machine vers ../debian-installer/arch/pxelinux.cfg/defaut. Pour une machine qui utilisera l’installeur i386 (cpu compatible Intel x86, 32bits) avec une adresse mac 08:00:27:10:20:29, on fera donc:

ln -s ../debian-installer/i386/pxelinux.cfg/default 080027102029

Teaser du prochain article:

Je prévois aussi un article pour une netinst Debian sans les mains 😉