Configurer un client sans disque dur
Auteur : Olivier BOYER - oboyer () ajoute ! org
Mots clés
diskless, NetBSD, OpenBSD, netboot, pxe, pxeboot, tftp, dhcp, nfs, XFree86
Introduction
Ce document présente comment configurer un client NetBSD pourqu'il démarre et fonctionne sans disque dur (client diskless). L'idée finale est d'obtenir un lecteur MP3/DVD/DIVX réseau à partir d'un ancien ordinateur de type Pentium III.
Pourquoi retirer le disque dur ? Tout d'abord pour réduire le bruit de ce lecteur, et aussi pour simplifer son utilisation. La machine démarre en pressant le bouton de l'alimentation, et s'eteint de la même manière.
Présentation de la maquette
- Un serveur central sous OpenBSD 3.9
- Un client sans disque dur sous NetBSD 3.0.1
- L'installation des fichiers du client sur le serveur s'effectue dans le répertoire
/diskless - Le réppertoire
/disklessest exporté par NFS. Pour que ce répertoire (et seulement ce répertoire) soit exporté par NFS, il doit être un point de montage d'une partition dédiée. Sinon, vous devrez exporter le point de montage de la partition contenant le répertoire/diskless. - Configuration du client :
- nom :
player.leaves.org - adresse IP : 192.168.1.89
- interface réseau : em0
- adresse Mac : 00:11:22:33:44:55
- route par défaut : 192.168.1.1
- adresse IP du serveur de noms : 192.168.1.1
- Configuration du serveur :
- nom :
smoking.leaves.org - adresse IP : 192.168.1.1
- interface réseau : xl0
Note
Toutes les commandes présentées ici, sont à exécuter, sauf mention contraire, en tant qu'administrateur de la machine.
Pré-requis
- Le système serveur doit être installé et fonctionnel
- Le BIOS et la carte réseau du client doivent supporter le démarrage via
PXE - Le client sans disque et le serveur de démarrage doivent être sur le même réseau IP
- La partition
/diskless(qui contient l'installation du client) sur le serveur doit être d'au moins un giga octets.
Services à configurer sur le serveur
Voici les services mis en oeuvre :
dhcpd: attribue l'adresse IP aux clients, et, si besoin, l'adresse IP du serveurtftpainsi que le chemin du fichier à télécharger partftp.tftpd: serveur pour le protocole ipv4Trivial File Transfer Protocol. Ce protocole est utilisé pour lors du démarrage d'un client sans disque dur (diskless). Ce serveur est, en général démarré par le super serveurinetd.nfsd: permet l'accès aux données par le réseau comme si elles étaient locales sur le client.
Télécharger les fichiers nécessaires
Procédez comme suit :
# cd /tmp # ncftpget ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-3.0.1/i386/binary/sets/base.tgz # ncftpget ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-3.0.1/i386/binary/sets/etc.tgz # ncftpget ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-3.0.1/i386/binary/sets/man.tgz # ncftpget ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-3.0.1/i386/binary/sets/x*.tgz # ncftpget ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-3.0.1/i386/binary/sets/kern-GENERIC.tgz
Configurer le serveur
Les configurations présentées dans ce paragraphe mettent en place les services nécessaires au support de démarrage d'un client sans disque dur.
Créer le répertoire racine du client
Pour créer le répertoire racine du client sans dique et monter la partition dédiée, exécutez les commandes suivantes :
# mkdir /diskless # mount /dev/<partition_dédiée> /diskless
Modifiez ensuite le fichier /etc/fstab du serveur pourqu'au démarrage de celui-ci la partition /diskless soit automatiquement montée.
/dev/</partition_dédiée> /diskless ffs rw,softdep 1 2
Modifier le fichier /etc/ethers
Le fichier /etc/ethers est utilisé par le service rarpd(8) pour attribuer l'adresse IP d'un client en fonction de son adresse physique ou adresse MAC.
Pour notre client, modifiez le fichier comme suit :
00:11:22:33:44:55 player.leaves.org
Modifier le fichier /etc/hosts ou la base DNS
Le fichier /etc/hosts sert à la résolution de noms en adresse IP.
Pour notre client, modifiez comme suit le fichier :
192.168.1.89 player.leaves.org player
Configurer le serveur dhcpd
Modifier le fichier /etc/dhcpd.interfaces
Ajouter l'interface sur laquelle le serveur dhcp va écouter les requêtes. Dans notre cas, il s'agit de l'interface xl0.
Procédez comme suit :
# echo "xl0" >> /etc/dhcpd.interfaces
Modifier le fichier /etc/dhcpd.conf
Le fichier /etc/dhcpd.conf contient la configuration du serveur DHCP. La configuration doit être semblable à celle ci-dessous :
#/etc/dhcpd.conf
option perform-mask-discovery false;
option ip-forwarding off;
subnet 192.168.1.0 netmask 255.255.255.0 {
# IP informations
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.1;
# DNS informations
option domain-name "leaves.org";
option domain-name-servers 192.168.1.1;
}
group {
# Lease informations
default-lease-time 86400; # 24hours
max-lease-time 172800; # 48hours
host player {
# player's diskless workstation
hardware ethernet 00:11:22:33:44:55;
fixed-address player.leaves.org;
filename "/player/pxeboot_ia32.bin";
option swap-server 192.168.1.1;
option root-path "/diskless/player/root";
}
}
Activer le service TFTP
Pour activer le service tftp, décommentez la ligne suivante du fichier /etc/inetd.conf :
tftp dgram udp wait root /usr/libexec/tftpd tftpd -s /tftpboot
Créez le répertoire /tftpboot comme suit :
# mkdir -p /tftpboot/player # chmod -R 711 /tftpboot/player
Modifier le fichier /etc/exports
Le fichier /etc/exports indique quelles arborescences du serveur NFS doivent être exportées vers quels clients NFS. Pour le client sans disque dur, vous devez créer un fichier semblable à celui ci-dessous :
# Diskless clients /diskless -maproot=root -alldirs player.leaves.org
Une fois le serveur NFS démarré, vous pouvez consulter la liste des systèmes de fichiers exportés via la commande suivante :
# showmount -e
Lancer les services au démarrage du serveur
Ajoutez les lignes suivantes au fichier /etc/rc.conf.local :
# Start inetd super daemon inetd=YES # almost always needed # Start daemons used to boot other hosts over a network. dhcpd_flags="" # for normal use: "" # portmap is used to look up RPC-based svc. nfs_server=YES nfsd_flags="-tun 4" lockd=YES
Démarrer les services
# pkill -HUP inetd # dhcpd xl0 # portmap # rpc.lockd # mountd # nfsd -tun 4
Installer le système du client
L'installation du système du client, ici NetBSD 3.0.1, est faite dans le répertoire /diskless/player/root du serveur.
Créer les répertoires de base
# mkdir -p /diskless/player/root/{usr,swap,dev}
# chmod 700 /diskless/player/root/swap
Installer les sets de base
# cd /diskless/player/root # tar xzpf /tmp/base.tgz # tar xzpf /tmp/etc.tgz # tar xzpf /tmp/man.tgz # tar xzpf /tmp/kern-GENERIC.tgz
Créer le fichier de console
# mknod /diskless/player/root/dev/console c 0 0
Créer le fichier de swap
# dd if=/dev/zero of=/diskless/player/swap bs=1024k count=128 seek=1 # chmod 600 swap # ls -lh /diskless/player/swap -rw------- 1 root wheel 129M Apr 13 20:22 /diskless/player/swap
Copier le programme de boot
Copiez le fichier pxeboot_ia32.bin précédemment extrait du set d'installation base.tgz dans l'arborescence du serveur TFTP :
# cd /diskless/player/root # cp usr/mdec/pxeboot_ia32.bin /tftpboot/player # chmod 644 /tftpboot/player/pxeboot_ia32.bin
Configurer le client
etc/myname
Ce fichier contient le nom de la machine, pour le créer, exécutez la commande suivante :
# echo player.leaves.org > /diskless/player/root/etc/myname
etc/hosts
Créez le fichier /diskless/player/root/etc/hosts du client comme suit :
# /etc/hosts 127.0.0.1 localhost.leaves.org localhost 192.168.1.89 player.leaves.org player 192.168.1.1 smoking.leaves.org smoking
etc/fstab
Editez comme suit le fichier /diskless/player/root/etc/fstab :
192.168.1.1:/diskless/player/root / nfs rw 0 0 192.168.1.1:/diskless/player/swap none swap sw,nfsmntpt=/swap /dev/cd0a /cdrom cd9660 noauto,ro,nodev,nosuid,noexec
Créez le répertoire de montage du cdrom :
# mkdir /diskless/player/root/cdrom
Configuration du réseau
L'adresse IP du client est inscrite en statique, sinon, des erreurs NFS apparaissent durant la phase d'initialisation du système (nfs send error 50 on server).
# cd /diskless/player/root/etc # echo "inet 192.168.1.89 netmask 255.255.255.0 broadcast 192.168.1.255" > hostname.em0
Configurez la route par défaut du client :
# cd /diskless/player/root/etc # echo "192.168.1.1" > mygate
Configurez le fichier de résolution de noms : nsswitch.conf
group: files hosts: files dns passwd: files shells: files
Configurez le fichier de recherchde de serveur de noms : resolv.conf
# cd /diskless/player/root/etc # echo "search leaves.org" > resolv.conf # echo "nameserver 192.168.1.1" >> resolv.conf
Configurer l'heure
Pour configurer le fuseau horraire français, procédez comme suit :
# cd /diskless/player/root/etc # rm localtime # ln -s ../usr/share/zoneinfo/Europe/Paris localtime
Stoper certains services du client
Ajoutez les lignes suivantes au fichier /diskless/player/root/etc/rc.conf :
#/etc/rc.conf sshd=NO inetd=NO sendmail=NO nfs_client=YES lockd=YES lockd_flags="" statd=YES statd_flags="" ccd=NO cgd=NO raidframe=NO savecore=NO update_motd=NO quota=NO syslogd=NO cron=NO #EOF
Configurer le clavier en Français
Exécutez la commande suivante :
# echo "encoding fr" >> /diskless/player/root/etc/wscons.conf
Démarrer le client
Toutes les commandes présentées dans cette section s'effectuent sur le client.
Premier démarrage
Au premier démarrage, le client indique :
/etc/rc.conf is not configured. Multiuser boot aborted. Enter pathname of shell or RETURN fo /bin/sh :
Pour ouvrir une session, appuyez sur la touche <Entrée>.
Créer les fichiers de périphériques
# cd /dev # /bin/sh MAKEDEV all
Changer le codage du clavier
# wsconsctl -k -w encoding=fr encoding -> fr
Vérifier que la swap est bien reconnue
# swapctl -A swapctl: adding 192.168.1.1:/diskless/player/root/swap as swap device at priority 0 # # swapctl -l
Continuer le démarrage en mode multi-utilisateur
Configurez le terminal comme suit :
# export TERM=vt220
Editez le fichier /etc/rc.conf, et modifiez la ligne suivante :
rc_configured=NO
par la valeur :
rc_configured=YES
Sauvez et quittez l'édition.
Une fois revenu au prompt, délogez vous comme suit :
# exit
Le système continue alors son démarrage en mode multi-utilisateur.
A la fin de la séquence de démarrage, le prompt login: apparaît. Saisissez le login root, appuyez sur la touche <Entrée>. Vous êtes maintenant logé en tant qu'utilisateur root sur le client.
Affecter un mot de passe à l'utilisateur root
# passwd New password: Retype new password:
Créer l'utilisateur dédié au multimédia
# useradd -m -c "Player user" -d /home/player -g users player -s /bin/ksh # passwd player Changing local password for player. New password: Retype new password: # exit
Installer X sur le client
Toutes les commandes présentées dans cette section s’effectuent sur le client. Le poste client doit donc être démarré, et vous devez être logé en tant qu’utilisateur root.
Installer les sets graphiques
Vous devez avoir transféré du serveur, vers le client, les sets d'installation des composants graphiques.
Sur le client, exécutez les commandes suivantes :
# cd / # tar xzpf /tmp/xbase.tgz # tar xzpf /tmp/xetc.tgz # tar xzpf /tmp/xfont.tgz # tar xzpf /tmp/xserver.tgz
Configurer le serveur X
Pour configurer le serveur X, exécutez la commande suivante :
# /usr/X11R6/bin/xf86cfg
Le serveur X se lance, et affiche un utilitaire graphique de configuration de XFree86.
Configurer la carte son du client
Toutes les commandes présentées dans cette section s'effectuent sur le client. Le poste client doit donc être démarré, et vous devez être logé en tant qu'utilisateur root.
Introduction
Les périphériques concernant l'audio sous NetBSD sont : /dev/audio, /dev/sound, /dev/audioctl et /dev/mixer. Pour une introduction au support audio, vous pouvez lire la page de manuel audio(4).
Tous les matériels audio supportés sont déjà inclus dans le noyau GENERIC (donc dans celui de notre client), il n'y a donc pas besoin de configuration supplémentaire ou d'installation de drivers. Pour trouver des informations spécifiques au contrôleur de votre carte son, vous devrez déterminer quel contrôleur vous possédez. Si vous avez déjà démarré le client, cherchez l'apparition d'un driver de carte son dans la sortie de la commande dmesg(1), et lisez le manuel du driver pour des informations plus spécifiques.
Voici un extrait d'un contrôleur audio, vu dans le dmesg :
auich0 at pci0 dev 31 function 5 "Intel 82801BA AC97" rev 0x04: irq 10, ICH2 AC97 ac97: codec id 0x41445360 (Analog Devices AD1885) ac97: codec features headphone, Analog Devices Phat Stereo audio0 at auich0
Configuration
Tout d'abord testez que votre carte fonctionne. Exécutez la commande suivante :
# ls -R / > /dev/audio
Si du bruit sort de vos haut-parleurs, c'est gagné, votre carte est reconnue et bien configurée.
Sinon, vérifiez la configuration du mixer. Procédez comme suit :
# mixerctl outputs.master.mute=off # mixerctl outputs.headphones.mute=off
Répétez la même commande que précédement. Le bruit doit être maintenant audible.
Enregistrer la configuration
Pour ne pas avoir à saisir à chaque fois la configuration du mixer, créez comme suit le fichier /etc/mixerctl.conf :
#/etc/mixerctl.conf # see mixerctl(1) outputs.master=200,200 outputs.master.mute=off outputs.headphones=160,160 outputs.headphones.mute=off #EOF
Installer des applications tierces
Le client est maintenant fonctionnel : il démarre et monte ses systèmes de fichiers par le réseau, il accède au serveur DNS, il peut sortir du réseau local, le serveur X et la carte son sonts configurés.
Vous devez maintenant installer les applications nécessaire pour transformer ce client en un “Media Center”.
Toutes les commandes présentées dans cette section s’effectuent sur le client. Le poste client doit donc être démarré, et vous devez être logé en tant qu’utilisateur root.
Définir l'emplacement des packages binaires
# export PKG_PATH="ftp://ftp.netbsd.org/pub/NetBSD/packages/3.0/i386/All"
Installer les applications
# pkg_add oroborus # pkg_add vlc
Configurations optionnelles du client
Toutes les commandes présentées dans cette section s’effectuent sur le client. Le poste client doit donc être démarré, et vous devez être logé en tant qu’utilisateur root.
Ouvrir automatiquement une session X au démarrage
Ce hack n'est pas très “propre”. Il existe des gestionnaires de session X (comme gdm ou kdm) qui permettent d'autologer un utilisateur. Mais ces outils exigent de nombreuses dépendances, et l'idée, ici, est de garder un système assez léger. Pour se passer des gestionnaires de session X, procédez comme suit.
Ajoutez les lignes ci-dessous au fichier /etc/rc.local :
# Start X session as user 'player'
if [ -x /usr/X11R6/bin/startx ]; then
echo -n ' startx'
/usr/bin/su -l player -c "/usr/X11R6/bin/startx" &
fi
echo '.'
#EOF
Désactiver le compte root du client
Exécutez la commande vipw et modifiez l'entrée correspondante à l'utilisateur root :
root:*lock*:0:0:daemon:0:0:Charlie &:/root:/sbin/nologin
Sauvez et quittez.
Puis, modifiez comme suit le fichier /etc/shells :
# echo /sbin/nologin >> /etc/shells