Lancer une l'installation d'OpenBSD via pxeboot sur une Soekris Net4801 + conseils

pxeboot et lancement de l'installation d'une soekris

Brancher une Soekris sur le LAN ou le serveur DHCP/TFTP est accessible (sur la soekris Net4801 seul le port “sis0/eth0” permet d'utiliser le pxeboot, il s'agit du premier port ethernet à côté du port Série).

Récuperer les fichiers pxeboot et bsd.rd (disponible par exemple sur ftp.openbsd.org/pub/OpenBSD/snapshots/i386/) et rendez les accessibles via le serveur TFTP.

Créer aussi à la racine de votre serveur TFTP, dans notre exemple /tftboot, un fichier etc/boot.conf pour automatiquement basculer l'affichage vers le port console et lancer l'installation.

$cat /tftboot/etc/boot.conf
set tty com0
stty com0 19200
boot bsd.rd 

note: il est aussi possible de passer manuellement ces arguments au prompt boot>.

Démarrer les services DHCP et TFTP necessaires au pxeboot.

Sur Debian, installer de preference le paquet tftpd-hpa ( qui vient lui meme en partie d'OpenBSD )

Brancher la Soekris et via le port console au demarrage presser ctrl+p pour entrer dans le mode “monitor”, puis tapper boot F0

note: a cet instant vous pouvez recuperer l'adresse MAC de l'interface eth0/sis0 a la ligne “CLIENT MAC ADDR: 00 00 XX YY ZZ XX” qui peut etre utile pour configurer votre serveur DHCP.

En avant pour une installation standard d'OpenBSD i386

Conseils pour le partionnement, les packages, le montage en MFS

L'idee principale est de faire tenir OpenBSD sur 512MB ou + (rien d'exeptionnel) et d'eviter d'ecrire sur le media CompaqFlash. pour ce second point nous disposons de 2 outils:

mfs, qui permet d'emuler un disque en memoire, et donc que l'on peut utiliser pour gérer les partitions qui doivent autoriser l'ecriture.

le “flag” noatime de mount(8) qui diminue enormement les ecritures sur le media en ne mettant pas jour les informations d'acces (access time).

Je prefere utiliser mfs pour /tmp et /var, l'ensemble des logs pourront etre redirigés vers un serveur Syslog distant. On peut peaufiner le travail pour le passage du /var en mfs par exemple en ne mettant que /var/tmp, /var/db, /var/run, /var/www/logs, /var/logs en mfs. Mais pour l'avoir testé je prefere avoir un gros mfs de 32M à gérer plutôt qu'une multitude de petites partitions. Il ne faut cependant pas oublier que la mémoire disponible sur la Soekris doit être assez grande pour contenir toutes les partitions mfs et pouvoir executer tout ce qu'elle sera charger de faire.

exemple de partitionnement:

$ df -kh
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/wd0a     68.7M   46.6M   18.7M    71%    /
/dev/wd0d     29.5M    5.6M   22.4M    20%    /mfs
/dev/wd0e      381M    181M    181M    50%    /usr
mfs:11926     30.0M    3.0K   28.5M     0%    /tmp
mfs:351       30.0M    5.1M   23.4M    18%    /var</code> 
  • pas de /home, on fera attention.
  • un /mfs de 30M pour recevoir le contenu du /var original
  • pas de SWAP
  • un gros /usr pour mettre pleins d'applis
  • deux gros mfs. Pour info les mfs seront mis en place apres l'installation.
  • On conserve 64MB de RAM pour faire fonctionner la Soekris.


exemple de choix de packages

  • bsd (indispensable)
  • base40.tgz (indispensable)
  • etc40.tgz (indispensable)
  • man40.tgz (pratique mais on peut toujours utiliser le man en ligne)
  • bsd.rd (pour s'en sortir ou tres pratique si on monte en “Read Only” tout /)
  • xbase40.tgz (pour fontconfig necessaire pour installer pfstat par exemple)


mise en place des partitions mfs

Apres avoir installé les packages necessaires (comme net-snmp, pftop, pfstat, screen…) apres avoir configuré la crontab, apres avoir configuré les services chrootés comme bind ou un reverse proxy Apache, on peut travailler à mettre en place le /var en mfs en copiant son contenu dans la partition reservé à cet usage. Attention à partir de maintenant toute modification de /var devra se faire depuis /mfs/var.

$ sudo sh -c "find /var | cpio -dumpv /mfs/" 

On peut alors configurer les mfs et en profiter pour mettre en place quelques flags speciaux:

$sudo vi /etc/fstab

/dev/wd0a / ffs ro,noatime 1 1
/dev/wd0d /mfs ffs rw,nodev,nosuid,noatime 1 2
/dev/wd0e /usr ffs ro,nodev,noatime 1 2
swap /tmp mfs rw,nodev,nosuid,-s=64000 0 0
swap /var mfs rw,-P=/mfs/var,nodev,nosuid,-s=64000,noauto 0 0 
  • les noatime sur les partitions CF
  • le read-only(ro) sur les partitions /usr et / (attention c'est très chiant à administrer).
  • les mfs: /var et /tmp
  • le noauto n'est pas une erreur avec une version antérieure à la 4.0, var il evite que /var ne soit monte 2 fois (+ d'info ici).

la superbe option “-P” a ete ajoutee a la commande mount(8) dans OpenBSD 3.6: “-P file”

   If file is a directory, populate the created mfs file system with
   the contents of the directory.  If file is a block device, popu-
   late the created mfs file system with the contents of the FFS
   file system contained on the device.

en gros pas besoin de se casser trop la tete pour creer sa partition mfs, vous n'avez qu'a choisir le repertoire que vous voulez cloner, mount s'occupe de tout…

Annexe: mise en place rapide d'un serveur DHCP sous OpenBSD

  • Configurer le serveur DHCP pour permettre le pxeboot de la soekris
$cat /home/alf/dhcpd.conf

subnet 192.168.10.0 netmask 255.255.255.0 {
}

host soekris {
 hardware ethernet 00:00:XX:YY:ZZ:XX;
 fixed-address 192.168.10.1;
 option subnet-mask 255.255.255.0;
 filename "pxeboot";
}

note: 00:00:XX:YY:ZZ:XX correspond ici à l'adresse MAC de l'interface sis0 de la soekris.

  • Configurer l'interface d'ecoute du serveur DHCP (fxp0 dans on exemple)
$sudo ifconfig fxp0 192.168.10.99 netmask 255.255.255.0
  • Creer le fichier de lease de DHCPd
$sudo touch /var/db/dhcpd.leases
  • Lancer le serveur DHCP
$sudo dhcpd -c /home/alf/dhcpd.conf fxp0

Annexe: mise en place rapide d'un serveur TFTP sous OpenBSD

  • editer le fichier /etc/inetd.conf et decommenter la ligne concernant tftpd:
#tftp dgram udp wait root /usr/libexec/tftpd tftpd -s /tftpboot
  • relancer le demon inetd
$sudo pkill -HUP inetd

Annexe: se connecter sur le port console de la soekris depuis un OpenBSD

  • Armé d'un cable null-modem utiliser la commande cu
$sudo cu -l cua00 -s 19200

(-l cuaU0 s'il s'agit d'un adaptateur USB→serie)

Annexe: combien de lutins par seconde dans la gueule du geode 266 Mhz ?

Curiosité oblige, je me suis demandé combien de bande passante mon pauvre petit geode 266 Mhz (NET 4801) peut gérer avant de rendre l'âme et/ou d'être obliger de jouer du scalpel dans la config kernel (ou autre sysctl si possible).

Ben étonnamment, plus que je ne croyais (et avais lu ici et là dans les ML soekris : du genre 30 Mbps) : j'arrive à tirer du 60 Mbps à grand coup de netperf TCP_STREAM. Honorable pour un si petit nougat.

En fait, à grand coup de netperf d'un côté à l'autre de ma pauvre soekris configurée en bridge transparent avec PF activé ne servant qu'à scrub-er les lutins ('set optimization aggressive' et 'scrub in all' en entrée), j'atteinds les sommets suivants : de l'ordre de 60 Mbps (test netperf TCP_STREAM). Mes confs :

* /etc/hostname.sis1

up

* /etc/hostname.sis2

up

* /etc/bridgename.bridge0

add sis1 add sis2 up

* /etc/pf.conf

# OpenBSD /etc/pf.conf for a soekris transparent filtering bridge
# for netperf testing purpose

adm_if="sis0"
br1_if="sis1"
br2_if="sis2"
bri_if="bridge0"

set optimization aggressive
set skip on l0
scrub in all

# for now, no filtering (just for netperf testing purpose)
pass in quick on $br1_if all
pass out quick on $br1_if all
pass in quick on $br2_if all
pass out quick on $br2_if all
pass in quick on $adm_if all
pass out quick on $adm_if all
 
# - The End

* et biensur les 'pf=YES' (/etc/rc.conf.local) et autre 'net.inet.ip.forwarding=1' (/etc/sysctl.conf), suivi d'un petit reboot des familles (bon moment pour ne pas oublier d'y mettre les câbles…).

Il est interressant de noter que le 'scrub in all' fait passer le débit de 51,… Mbps (mode bridge sans activation de PF) à 60 Mbps… comme quoi, parfait cette petite normalisation : à recommander à toute ménagère de moins de 50 ans !

Ce qui fait plafonner grâve la box, c'est le taux d'interruptions qui monte en flèches. Les mbufs par défaut (kernel GENERIC de plateforme i386) sont loin d'être épuisés. Pour les interruptions, le géode s'affolle à gérer les demandes d'interruptions des ifaces (sis) présentes sur la carte, sans savoir faire de l'interruption sharing (rien vu dans le BIOS de la carte mère Soekris 4801) ni même optimiser (le polling à la FreeBSD, c'est pas encore pour aujourd'hui chez puffy). Du coup, pas faute kernel, rien à optimiser… c'est le nougat qui nous limite (fait rare n'est-il pas ?)…

Donc voila amis lutin : si tu soekrises ton réseau, penses à rester humble sur la bande passante que tu vas lui faire bouffer :)

PS : Comme la prochaine NET 5501 dispose d'un processeur plus puissant, j'ose espérer qu'on pourra lui passer plus de lutins sans broncher… Dès que j'aurais une 5501 sous les mains, je retenterai le test biensur :)

openbsd/install_soekris.txt · Last modified: 2010/01/12 13:29 (external edit)