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
-
Un système local avec la même version qu'OpenBSD (4.6) dans notre cas. Personnellement je travaille énormément avec VmWare pour avoir des OS disponible facilement.
-
Les sources src.tar.gz et sys.tar.gz
-
ftp ftp://ftp.fr.openbsd.org/pub/OpenBSD/4.6/src.tar.gz
-
ftp ftp://ftp.fr.openbsd.org/pub/OpenBSD/4.6/sys.tar.gz
-
Les sources extraites dans le répertoire /usr/src
-
tar -xzvf src.tar.gz -C /usr/src
-
tar -xzvf sys.tar.gz -C /usr/src
-
Les sources de yaifo qu'on récupère par cvs
-
cvs -d :pserver:anoncvs@yaifo.cvs.sourceforge.net:/cvsroot/yaifo co -P yaifo
-
Vos informations de box (adresse IP, netmask, route par défaut et DNS)
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".
-
TYPE=remote
-
SNAPSHOT=no
-
DEVICE=
-
DEVICE2=
-
IP2=
-
NETMASK2=
-
DHCP=off
-
DNS=88.191.254.60
-
SEARCH=88.191.254.60 88.191.254.70
-
IP=88.191.XX.YY
-
NETMASK=255.255.255.0
-
GATEWAY=88.191.XX.1
-
SPECIAL=0
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.
-
cp /etc/ssh/ssh_host_*_key* /path/to/yaifo
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.
-
Si ce n'est pas fait, vous pouvez vous créé une clé en local (ssh-keygen -t rsa)
-
Il faut ensuite copier la clé publique dans le répertoire de yaifo
-
cat ~/.ssh/id_rsa.pub > /path/to/authorized_keys
Il ne reste plus qu'Ã compiler yaifo (attention ca peut prendre un peu de temps vu qu'il recompile un kernel pour l'occasion)
-
make cleanall
-
make obj
-
make
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.
-
ssh root@88.191.XX.YY:
-
The authenticity of host '88.191.XX.YY (88.191.XX.YY)' can't be established.
RSA key fingerprint is 3b:14:2a:43:a9:41:74:cd:9d:e1:81:46:9b:46:0a:70.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '88.191.XX.YY' (RSA) to the list of known hosts.
Welcome to YAIFO: The network-based installer for OpenBSD.
Welcome to the OpenBSD/i386 4.6 installation program.
(I)nstall, (U)pgrade or (S)hell?
-
On lance l'install par I
-
Choose your keyboard layout ('?' or 'L' for list) [default] fr
-
System hostname? (short form, e.g. 'foo') foo
-
Password for root account? (will not echo) ********
-
Password for root account? (again) ********
-
Start sshd(8) by default? [yes] ↵
-
Start ntpd(8) by default? [no] ↵
-
Do you expect to run the X Window System? [yes] no
-
Change the default console to com0? [no] ↵
-
Setup a user? (enter a lower-case loginname, or 'no') [no] ↵
-
Which one is the root disk? (or 'done') [wd0] wd0
-
Do you want to zero out the first bytes of the disk? [no] no
-
Use (W)hole disk, use the (O)penBSD area, or (E)dit the MBR? [OpenBSD] E
-
On commence pour retirer toutes les partitions. Pour toutes les partitions qui n'ont pas un ID Ã 00, il faut faire:
-
fdisk: 1> e #id
-
Partition id ('0' to disable) [0 - FF]: [A6] (? for help) 0
-
Ensuite on va créer deux partition:
-
1 en tête de disque pour le rescue
-
fdisk: 1> e 0
-
Partition id ('0' to disable) [0 - FF]: [0] (? for help) 10
-
Do you wish to edit in CHS mode? [n] ↵
-
offset: [0] 63 (On commence toujours la première partition à 63 secteurs, car les 63 premiers sont réservés pour le MBR)
-
size: [0] 1622502 (On prend qqc comme 700M, 1622502 * 512 = 792Mo)
-
1 juste après pour la production
-
fdisk:*1> e 1
-
Partition id ('0' to disable) [0 - FF]: [A6] (? for help) A6
-
Do you wish to edit in CHS mode? [n] ↵
-
offset: [2097215] 1622565 (pour l'offset, on fait la somme de l'offset et de la taille de la partition précédente, 63 + 1622502 = 1622565)
-
size: [14680001] * (pour indiquer qu'on va prendre tout l'espace)
-
Il ne reste plus qu'Ã marquer la partition 1 (production) comme active
-
On se retrouve avec la table de partition suivante:
-
fdisk:*1> p
Disk: wd0 geometry: 1044/255/63 [16777216 Sectors]
Offset: 0 Signature: 0xAA55
Starting Ending LBA Info:
#: id C H S - C H S [ start: size ]
-------------------------------------------------------------------------------
0: 10 0 1 1 - 100 254 63 [ 63: 1622502 ] OPUS
1: A6 101 0 1 - 1044 85 1 [ 1622565: 15154651 ] OpenBSD
2: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused
3: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused
-
On peut sauvegarder et quitter fdisk
-
fdisk:*1> w
-
Writing MBR at offset 0.
-
fdisk:*1> q
-
Use (A)uto layout, (E)dit auto layout, or create (C)ustom layout? [a] e
-
> p
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
-
L'install nous a créé les labels au mieux. On peut le modifier. Dans le cadre ce ce tuto on s'en contentera. Il faut néanmoins supprimer le label i qui est accès à notre partition de rescue. Elle n'est pas utile sur le système de production.
-
On conserve dans un coin cette table de labels de l'OS de production, elle nous permettra de retrouver nos petits depuis le serveur de production!
-
On sauve et on quitte:
-
Il va formater les partitions définies.
-
Maintenant nous allons pouvoir installer les sets que nous désirons:
-
Location of sets? (disk ftp http or 'done') [ftp] ↵
-
HTTP/FTP proxy URL? (e.g. 'http://proxy:8080', or 'none') [none] ↵
-
Server? (hostname, list#, 'done' or '?') [ftp.fr.openbsd.org] ↵
-
Server directory? [pub/OpenBSD/4.6/i386] ↵
-
Login? [anonymous] ↵
-
Dans le cadre d'un serveur, les packages x* ne sont pas utiles. On les vire donc:
-
Select sets by entering a set name, a file name pattern or 'all'. De-select
sets by prepending a '-' to the set name, file name pattern or 'all'. Selected
sets are labelled '[X]'.
[X] bsd [ ] bsd.mp [X] etc46.tgz [X] comp46.tgz [X] game46.tgz [X] xetc46.tgz [X] xfont46.tgz
[X] bsd.rd [X] base46.tgz [X] misc46.tgz [X] man46.tgz [X] xbase46.tgz [X] xshare46.tgz [X] xserv46.tgz
Set name(s)? (or 'abort' or 'done') [done] -x*
[X] bsd [ ] bsd.mp [X] etc46.tgz [X] comp46.tgz [X] game46.tgz [ ] xetc46.tgz [ ] xfont46.tgz
[X] bsd.rd [X] base46.tgz [X] misc46.tgz [X] man46.tgz [ ] xbase46.tgz [ ] xshare46.tgz [ ] xserv46.tgz
Set name(s)? (or 'abort' or 'done') [done] done
-
L'installation des packages demandé se fait assez rapidement.
-
Location of sets? (disk ftp http or 'done') [done] done
-
What timezone are you in? ('?' for list) [Europe/Paris] Europe/Paris
-
Do you want to copy the SSH Host Keys from the Yaifo image? [yes] no (on ne veut pas utilise les clés de serveur utilisé par yaifo, de nouvelles seront générées au premier boot)
-
Making all device nodes...done.
CONGRATULATIONS! Your OpenBSD install has been successfully completed!
To boot the new system, enter 'reboot' at the command prompt.
When you login to your new system the first time, please read your mail
using the 'mail' command.
-
L'OS de production est maintenant installé. On relance l'install pour faire du système de rescue:
-
# install
-
Choose your keyboard layout ('?' or 'L' for list) [default] fr
-
System hostname? (short form, e.g. 'foo') [foo] rescue
-
Password for root account? (will not echo) ********
-
Password for root account? (again) ********
-
Start sshd(8) by default? [yes] ↵
-
Start ntpd(8) by default? [no] ↵
-
Do you expect to run the X Window System? [yes] no
-
Change the default console to com0? [no] ↵
-
Setup a user? (enter a lower-case loginname, or 'no') [no] ↵
-
Which one is the root disk? (or 'done') [wd0] wd0
-
Do you want to zero out the first bytes of the disk? [no] no
-
Use (W)hole disk, use the (O)penBSD area, or (E)dit the MBR? [OpenBSD] e
You will now create a single MBR partition to contain your OpenBSD data. This
partition must have an id of 'A6'; must *NOT* overlap other partitions; and
must be marked as the only active partition. Inside the fdisk command, the
'manual' command describes all the fdisk commands in detail.
Disk: wd0 geometry: 1044/255/63 [16777216 Sectors]
Offset: 0 Signature: 0xAA55
Starting Ending LBA Info:
#: id C H S - C H S [ start: size ]
-------------------------------------------------------------------------------
0: 10 0 1 1 - 100 254 63 [ 63: 1622502 ] OPUS
*1: A6 101 0 1 - 1044 85 1 [ 1622565: 15154651 ] OpenBSD
2: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused
3: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused
Enter 'help' for information
-
On va intervertir les ID des partition et marquer la partition 0 comme active:
-
fdisk: 1> e 0
-
Partition id ('0' to disable) [0 - FF]: [10] (? for help) A6
-
Do you wish to edit in CHS mode? [n] ↵
-
offset: [63] ↵
-
size: [1622502] ↵
-
fdisk: 1> e 1
-
Partition id ('0' to disable) [0 - FF]: [A6] (? for help) 10
-
Do you wish to edit in CHS mode? [n] ↵
-
offset: [1622565] ↵
-
size: [15154651] ↵
-
fdisk:*1> f 0
-
On affiche la nouvelle table de partition:
-
fdisk:*1> p
Disk: wd0 geometry: 1044/255/63 [16777216 Sectors]
Offset: 0 Signature: 0xAA55
Starting Ending LBA Info:
#: id C H S - C H S [ start: size ]
-------------------------------------------------------------------------------
*0: A6 0 1 1 - 100 254 63 [ 63: 1622502 ] OpenBSD
1: 10 101 0 1 - 1044 85 1 [ 1622565: 15154651 ] OPUS
2: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused
3: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused
-
on sauve et on quitte:
-
L'installer nous propose les labels suivants:
-
The auto-allocated layout for wd0 is:
# size offset fstype [fsize bsize cpg]
a: 786.7M 63 4.2BSD 2048 16384 1 # /
b: 5.6M 1611123 swap
c: 8192.0M 0 unused
i: 7399.7M 1622565 unknown
-
Le système nos propose une partition / de 786Mo ce qui est suffisant et très peu de swap et ca nous va bien. Le label i correspond à la partition de production. On la laisse en l'état actuellement. On accepte donc cette configuration.
-
Use (A)uto layout, (E)dit auto layout, or create (C)ustom layout? [a] a
-
On suit désormai la même procédure que pour le système de production. Pour le choix des sets, il faut se limiter au strict minimum:
-
bsd, base46, etc46, misc46 et man46 (on peur se permettre de mettre le man qui est toujours très utile)
-
Les deux systèmes ont été installés. Si l'on reboot en l'état le serveur va démarrer sur le serveur de rescue. C'est très bien, on va commencer par le tweaker un peu.
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:
-
Partition de production / (wd0a, offset=1622565, size=246550)
-
> a d
offset: [1622565] 1622565
size: [15154651] 246550
FS type: [4.2BSD]
-
Partition de production /tmp (wd0d, offset=2115665, size=378096)
-
> a e
offset: [1622565] 2115665
size: [15154651] 378096
FS type: [4.2BSD]
-
Partition de production /var (wd0e, offset=2493761, size=378886)
-
> a f
offset: [1622565] 2493761
size: [15154651] 378886
FS type: [4.2BSD]
-
Partition de production /usr (wd0f, offset=2872647, size=1261884)
-
> a g
offset: [1622565] 2872647
size: [15154651] 1261884
FS type: [4.2BSD]
-
Partition de production /usr/X11R6 (wd0g, offset=4134531, size=1098202)
-
> a h
offset: [1622565] 4134531
size: [15154651] 1098202
FS type: [4.2BSD]
-
Partition de production /usr/local (wd0h, offset=5232733, size=4277014)
-
> a i
offset: [1622565] 5232733
size: [15154651] 4277014
FS type: [4.2BSD]
-
Partition de production /usr/src (wd0j, offset=9509747, size=2146778)
-
> a j
offset: [1622565] 9509747
size: [15154651] 2146778
FS type: [4.2BSD]
-
Partition de production /usr/obj (wd0k, offset=11656525, size=2146778)
-
> a k
offset: [1622565] 11656525
size: [15154651] 2146778
FS type: [4.2BSD]
-
Partition de production /home (wd0l, offset=13803303, size=2973913)
-
> a l
offset: [1622565] 13803303
size: [15154651] 2973913
FS type: [4.2BSD]
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.
-
Passez votre serveur en rescue via la console dedibox.
-
Loggez vous avec le login/pass fourni lors du passage en rescue
-
passez root avec sudo (le mot de passe sera demandé):
-
fdisk /dev/sda
-
Commande (m pour l'aide): p
Disque /dev/sda: 160.0 Go, 160041885696 octets
255 heads, 63 sectors/track, 19457 cylinders
Units = cylindres of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000
Périphérique Amorce Début Fin Blocs Id Système
/dev/sda1 * 1 101 811251 a6 OpenBSD
/dev/sda2 102 19457 155477070 10 OPUS
-
On passe le partition 1 en OPUS
-
Commande (m pour l'aide): t
Numéro de partition (1-4): 1
Code Hex (taper L pour lister les codes): 10
Type de partition système modifié de a6 a 10 (OpenBSD)
-
On passe la partition 2 en OpenBSD
-
Commande (m pour l'aide): t
Numéro de partition (1-4): 2
Code Hex (taper L pour lister les codes): A6
Type de partition système modifié de 10 a a6 (OpenBSD)
-
On enlève le flag actif sur la partition 1
-
Commande (m pour l'aide): a
Numéro de partition (1-4): 1
-
On active le flag actif sur la partition 2
-
Commande (m pour l'aide): a
Numéro de partition (1-4): 1
-
On sauvegarde et on quit
-
Commande (m pour l'aide): w
La table de partitions a été altérée
Appel de ioctl() pour relire la table de partitions.
Synchronisation des disques.
-
Il ne nous reste plus qu'à repasser le serveur en mode normal et vous aurez votre système de prod actif!
Pour passer sur l'OpenBSD de rescue, il faut faire l'opération inverse.
Simple non ? :)