Suite a une incompatibilite d'OpenDedibox sur les version recente d'OpenBSD, j'ai pris la decision de fermer le site le temps pour moi de mettre en ligne une version pleinement fonctionnelle. Je n'ai pas d'idees sur les delais de mise en oeuvre car j'ai peu de temps a consacrer a ce projet la malheureusement.

En attendant je mets à disposition un tutorial permettant d'installer OpenBSD sur dedibox afin d'etre "production ready".

++ fat

Install d'OpenBSD via yaifo

Ce document présente une méthode pour install OpenBSD sur des serveurs sans accès console. Dedibox est une service français qui propose ce genre de serveurs à de faibles coûts.

Comme ces serveurs n'ont pas d'accès console, que se passe-t'il lorsqu'il y a une panne sur le serveur (fsck qui ne passe pas sans une intervention humaine lors du boot, ...) ? Dedibox fournit pour les système linux un mode rescue qu'est en fait un linux booté via 

BOOTP. Mais ce mode rescue linux n'est pas compatible avec des serveurs sous OpenBSD. 


La solution est d'installer sur un même serveur deux instances d'OpenBSD. L'une, de petite taille, servira de rescue en cas de crash. Nous l'appelleront "rescue". L'autre, qui occupera tout le reste du disque, servira d'OS de production. Nous l'appelleront "production". 


L'idée est d'utiliser yaifo (Yet Another Installer For OpenBSD). Il permet de créer une image d'installation d'OpenBSD embarquant un serveur SSH. Une fois connecté, vous pourrez faire l'installation à la main. 

Prérequis

Création de l'image yaifo

Il faut dans un premier temps configurer yaifo pour notre serveur. Cela se fait en éditant le fichier "config".
Ensuite il faut copier les clés pour le serveur SSH. On peut prendre celle de notre serveur de test. De toute façon leur utilisation n'est que temporaire.
L'utilisation d'un mot de passe n'est pas géré par yaifo. Il faut donc lui donné une clé publique afin que l'on puisse s'y connecter.
Il ne reste plus qu'à compiler yaifo (attention ca peut prendre un peu de temps vu qu'il recompile un kernel pour l'occasion)
Si tout se passe correctement vous devriez avoir un fichier yaifo.fs et yaifo.rd qui ont été généré par la commande make. 

C'est le fichier yaifo.fs qui nous intéresse. On va pouvoir la copier au début de notre disque dur pour qu'au boot suivant il se lance comme si c'était le système installé par défaut.

Mise en place de l'image de yaifo sur notre serveur dédié

Installation d'OpenBSD via yaifo

Ca y est, notre serveur a rebooté et nous pouvons le pinger. Il est temps de s'y connecter en utilisant la clé privée correspondant à la clé publique configurée lors de la création de l'image yaifo.

Tweak du système de rescue

Une fois que le système a redémarré, vous devriez pouvoir le pinger et vous logger en root avec le mot de passe que vous avez spécifier pendant l'install.

Si vous avez mis un mot de passe simple et temporaire il est temps de la changer.

/etc/motd

La première chose à faire est de modifier le /etc/motd pour indiquer que l'on est sur le système de rescue:
# cat > /etc/motd
*********************
*                                  *
*          RESCUE              *
*       OpenBSD 4.6          *
*                                  *
*********************
^D

Disklabel

C'est le moment de configurer l'accès à nos labels du système de production. On reprend la table de label du système de production que nous avons sauvé:

OpenBSD area: 1622565-16777216; size: 15154651; free: 0
#                size           offset  fstype [fsize bsize  cpg]
  a:           246550          1622565  4.2BSD   2048 16384    1 # /
  b:           246550          1869115    swap
  c:         16777216                0  unused
  d:           378096          2115665  4.2BSD   2048 16384    1 # /tmp
  e:           378886          2493761  4.2BSD   2048 16384    1 # /var
  f:          1261884          2872647  4.2BSD   2048 16384    1 # /usr
  g:          1098202          4134531  4.2BSD   2048 16384    1 # /usr/X11R6
  h:          4277014          5232733  4.2BSD   2048 16384    1 # /usr/local
  i:          1622502               63 unknown
  j:          2146778          9509747  4.2BSD   2048 16384    1 # /usr/src
  k:          2146778         11656525  4.2BSD   2048 16384    1 # /usr/obj
  l:          2973913         13803303  4.2BSD   2048 16384    1 # /home

On va editer le disklabel du système de rescue:
# disklabel -E wd0
Label editor (enter '?' for help at any prompt)
> p
OpenBSD area: 63-1622565; size: 1622502; free: 0
#                size           offset  fstype [fsize bsize  cpg]
  a:          1611060               63  4.2BSD   2048 16384    1 # /
  b:            11442          1611123    swap
  c:         16777216                0  unused
  i:         15154651          1622565 unknown

On supprime le label i qui nous est inutile:
> d i

On indique qu'on peut utiliser tout l'espace pour les labels:
> b
Starting sector: [63] 63
Size ('*' for entire disk): [1622502] *

Pour chaque label de production, nous avons un offset et une taille (size). On va donc ajouter un label sur notre système de rescue avec ces infos en commencant par le label d:

On se retrouve avec le disklabel suivant:
> p
OpenBSD area: 63-16777216; size: 16777153; free: 246550
#                size           offset  fstype [fsize bsize  cpg]
  a:          1611060               63  4.2BSD   2048 16384    1 # /
  b:            11442          1611123    swap
  c:         16777216                0  unused
  d:           246550          1622565  4.2BSD   2048 16384    1
  e:           378096          2115665  4.2BSD   2048 16384    1
  f:           378886          2493761  4.2BSD   2048 16384    1
  g:          1261884          2872647  4.2BSD   2048 16384    1
  h:          1098202          4134531  4.2BSD   2048 16384    1
  i:          4277014          5232733  4.2BSD   2048 16384    1
  j:          2146778          9509747  4.2BSD   2048 16384    1
  k:          2146778         11656525  4.2BSD   2048 16384    1
  l:          2973913         13803303  4.2BSD   2048 16384    1

wd0d est le wd0a de notre système de production et ainsi de suite.

On sauve et on quitte:
> w
> q
No label changes.

/etc/fstab

On va configurer le /etc/fstab pour ne pas à avoir à nous souvenir de cette correspondance lors de l'utilisation du rescue. On rajoute les lignes suivantes dans le /etc/fstab:

/dev/wd0d /mnt ffs rw,noauto 0 0
/dev/wd0e /mnt/tmp ffs rw,noauto 0 0
/dev/wd0f /mnt/var ffs rw,noauto 0 0
/dev/wd0g /mnt/usr ffs rw,noauto 0 0
/dev/wd0h /mnt/usr/X11R6 ffs rw,noauto 0 0
/dev/wd0i /mnt/usr/local ffs rw,noauto 0 0
/dev/wd0j /mnt/usr/src ffs rw,noauto 0 0
/dev/wd0k /mnt/usr/obj ffs rw,noauto 0 0
/dev/wd0l /mnt/home ffs rw,noauto 0 0

On a spécifié le flag noauto pour pas qu'ils ne soient montés au boot car si on a besoin du rescue, il a de grandes chances qu'une des partition merde. Idem on ne spécifie aucune vérification lors du boot (0 0 à la fin).

Maintenant on peut monter notre système de production sur notre système de rescue:
# grep mnt /etc/fstab | awk '{print $2}' | while read i; do mount $i; done
# mount
/dev/wd0a on / type ffs (local)

/dev/wd0d on /mnt type ffs (local)
/dev/wd0e on /mnt/tmp type ffs (local)
/dev/wd0f on /mnt/var type ffs (local)
/dev/wd0g on /mnt/usr type ffs (local)
/dev/wd0h on /mnt/usr/X11R6 type ffs (local)
/dev/wd0i on /mnt/usr/local type ffs (local)
/dev/wd0j on /mnt/usr/src type ffs (local)
/dev/wd0k on /mnt/usr/obj type ffs (local)
/dev/wd0l on /mnt/home type ffs (local)


Voilà avec un rescue qui a accès aux partition du système de production :)
On peut même s'y croire dedans via chroot:
# chroot /mnt
# cat /etc/myname
foo
# :)
exit

Maintenant qu'on a un rescue propre et prêt à être utilisé, il nous reste plus qu'à passer sur notre système de production.

Passage d'un système à l'autre.

Pour ce faire, il faut booter sur le rescue que propose votre fournisseur d'accès. Dans l'exemple qui suit nous utiliserons celui dedibox.


Pour passer sur l'OpenBSD de rescue, il faut faire l'opération inverse.
Simple non ? :)