Démarrage diskless de FreeBSD

Mise à jour pour démarrer la carte Force 745

Portion commune avec l'installation automatique depuis PXE

Configuration du serveur de boot

Attention à bien conserver le répertoire /usr/exports/tftpboot : tout est lié entre la configuration DHCP, la configuration inetd et l'export NFS

Serveur DNS

# demarrage du serveur DNS
# dans /etc/rc.conf
named_enable="YES"
# (fichier de configuration /etc/namedb/named.conf)

# declaration dans le DNS
# dans /etc/namedb/172.16.1.rev
155     IN      PTR     force745.test-vic.
# dans /etc/namedb/test-vic.hosts
force745   IN A    172.16.1.155

Serveur DHCP

# declaration de la machine dans le DHCP :
# installation sur le serveur de boot du serveur dhcp
cd /usr/ports/net/isc-dhcp3 ; make install && make clean

# configuration du serveur DHCP
# dans /usr/local/etc/dhcpd.conf
# extrait :
# cas particulier pour un port Ethernet Gigabit de la carte 745 livree
host force745 {
	hardware ethernet 00:c0:8b:06:fb:f6;
	fixed-address force745.test-vic;
	option host-name "force745.test-vic";
}

# demarrage du serveur DHCP
cd /usr/local/etc/rc.d/
mv isc-dhcpd.sh.sample isc-dhcpd.sh
/usr/local/etc/rc.d/isc-dhcpd.sh start

Serveur TFTP

# le serveur TFTP est demarre par inetd
# dans /etc/inetd.conf
tftp    dgram   udp     wait    root    /usr/libexec/tftpd      tftpd -s /usr/exports/tftpboot
# dans /etc/rc.conf sur le serveur :
inetd_enable="YES"

# remplissage du repertoire /usr/exports/tftpboot
# le seul besoin est le loader en version PXE
# 1e choix : recuperation du boot loader du serveur
cp /boot/pxeboot /usr/exports/tftpboot
# 2e choix : recuperation du nouveau boot loader
cp /usr/exports/tftpboot/boot/pxeboot /usr/exports/tftpboot/

Serveur NFS

Droits d'acces :
# autoriser les acces en lecture et ecriture avec les droits root
# dans /etc/exports
# sur le serveur de boot diskless
/usr -alldirs -maproot=0
# deux repertoires sont utilises :
# /usr/exports/tftpboot (racine / pour la machine diskless, montée en read-only)
# /usr/exports/usr (arborescence /usr pour la machine diskless, montée en read-write)

Installation des logiciels dans l'arborescence (version "temoin")

# sur la machine "serveur de boot"
setenv DESTDIR /usr/exports/tftpboot/
# aller a la racine du media d'install de current
# (media d'installation fournis par le projet FreeBSD)
pushd /usr/ports/distfiles/current/
ls
ERRATA.HTM      INSTALL.TXT     boot            compat3x        info
ERRATA.PDF      README.HTM      boot.catalog    compat4x        manpages
ERRATA.TXT      README.PDF      catpages        crypto          packages
HARDWARE.HTM    README.TXT      cdrom.inf       dict            ports
HARDWARE.PDF    RELNOTES.HTM    compat1x        doc             proflibs
HARDWARE.TXT    RELNOTES.PDF    compat20        docbook.css     src
INSTALL.HTM     RELNOTES.TXT    compat21        floppies
INSTALL.PDF     base            compat22        games
# installation des logiciels de base de FreeBSD
cd base/
sh install.sh
# installation des logiciels de crypto
cd ../crypto/
sh install.sh
# (ne pas installer les sources des logiciels de crypto)

# verification de l'installation de FreeBSD :
cd /usr/exports/tftpboot/
ls
COPYRIGHT       dev             mnt             root            usr
bin             etc             proc            sbin            var
boot            lib             pxeboot         sys
conf            libexec         rescue          tmp

# transfert du repertoire usr
mv usr ../usr
# creation d'un point de montage pour le futur /usr
mkdir usr

# Apres la configuration, demarrer le serveur NFS
# dans /etc/rc.conf sur le serveur :
rpcbind_enable="YES"
mountd_enable="YES"
nfs_server_enable="YES"

Eléments de configuration spécifiques

Répertoire /etc (configuration de la machine)

# parametres de configuration de la machine diskless
# (voir la man page de diskless)
# preparation du repertoire "root"
# a partir des media d'install
cd /usr/exports/tftpboot/
mkdir -p conf/base
# creation du template de base
tar -cvf - etc/ | ( cd conf/base ; tar xf - )

# portion generique dans default (valeurs pour toutes les stations)
mkdir -p conf/default/etc/
cat > conf/default/etc/rc.conf
keymap="fr.iso.acc"
sshd_enable="YES"
ntpdate_enable="YES"
ntpdate_flags="-b time1.msy.sagem.fr"
^D

# comptes utilisateurs :
# /etc/passwd est bien vide ! (uniquement compte root avec passwd vide)

# parametres specifiques a la station
# donc par forcage dans /conf/172.16.1.155/etc/rc.conf.local
mkdir -p conf/172.16.1.155/etc
cat > conf/172.16.1.155/etc/rc.conf.local
hostname="force745.test-vic"
^D

Partage de l'arborescence /usr

Création d'une partition /var

Swap à travers NFS

Carte utilisée

Procédure validée sur la carte Force 735 en prêt

Le serveur de boot est la carte Concurrent.

Un câble connecte directement la carte Concurrent et la carte Force. Le réseau IP correspondant a pour préfixe 192.168.254.0/24

Reste à faire

Comment installer "proprement" des packages ? (sur une installation "normale" de FreeBSD, les packages sont répertori&eactue;s dans /var/db/pkg, qui n'existe pas dans une installation diskless)

Etendre la procédure à un démarrage de Linux

# probleme console (ou passent les messages systeme ?)

# problemes pour recuperer le nom de machine par DHCP (rien dans kenv)
# rien de prevu pour retrouver le station hostname dans
# /usr/src/sys/boot/i386/libi386/pxe.h
# peut-etre est-ce que PXE "mange" l'information ?

# donc par forcage dans /conf/172.16.1.155/etc/rc.conf.local
hostname="force745.test-vic"

Exemple de logiciel de test "de type B2"

Objectifs

Exécution d'un logiciel "applicatif" de test sur la machine diskless

# test pour verifier la memoire : make buildworld a partir
# de partitions en RAMDISK

# dans boot/loader.conf
kern.vm.kmem.size="500000000"

# dans conf/172.16.1.155/etc/rc.local

#!/bin/sh

/bin/mkdir -p /usr/ports/distfiles
mount_nfs unx-1923:/usr/ports/distfiles /usr/ports/distfiles

# creation d'un rep pour les objets de fribi
/sbin/mdmfs -M -o async -s 800m md /usr/obj

# creation d'un rep pour les sources de fribi
/sbin/mdmfs -M -o async -s 500m md /usr/src

# copie des sources crypto de ..../current/crypto vers ..../current/src
(cd /usr/ports/distfiles/current/src ; sh ./install.sh all)

#(cd /usr/src ; make buildworld)

# panic pour cause de manque de place memoire
# (le kernel construit ses "md" en utilisant son espace d'adressage KVA,
# limité par défaut à 1Go)
# modif en augmentant KVA_PAGES dans le fichier de config du kernel
# (mais autre plantage ailleurs)

# difficulté pour mettre en place une console série

# suite des opérations : (17/12/2003 17h20)
# en installant /usr/src en RAM disk et en ne compilant que "buildworld",
# la boucle s'exécute dans les 2Go de RAM de la carte
# en cours, boucle infinie de :
make buildworld && /bin/date "+%s%n" >> /usr/home/make.log

Graphe de durées de compilation pour le "make buildworld" (en seconde)

#!/bin/sh

# script de traitement des heures de fin de compilation

# initialisation de la date de fin de compil precedente
# (premiere ligne non vide du fichier de log)
date_prec=`sort -u make.log | grep [0-9] | head -1`

# pour toutes les autres lignes
for date in `sort -u make.log | grep [0-9]` ; do
        # echo date_prec $date_prec
        # echo date $date
        # comme les dates sont triees, la diff donne
        # la duree de chaque compilation
        diff=$(($date-$date_prec))
        echo $diff
        # on passe a la compil suivante
        date_prec=$date
# tri du resultat, en supprimant la 1e difference qui est nulle
done | grep -v "^0$"

$Id: boot_PXE.html,v 1.7 2004/01/26 13:34:32 herbelot Exp $