OBSD4* : wiki

Installation d'OpenBSD sur une partition chiffrée depuis un LiveUSB Debian

Sources

Pourquoi ?

  • Pourquoi pas ? C'est possible et au passage j'ai beaucoup appris ! 8-)
  • Sinon cette méthode permet de sauvegarder OpenBSD -current (grâce au logiciel « dd » et un système LiveUSB Debian) sur une autre partition du même disque. Et le cas échéant, nous pouvons récupérer rapidement un système fonctionnel. Finalement, il s'agit d'une méthode de récupération alternative à celle officiellement supportée par le projet OpenBSD (altroot).
  • Parce que pendant que l'installation d'OpenBSD se déroule, nous pouvons utiliser le navigateur du système Debian Live pour aller (par exemple) sur le forum du site obsd4a.net_forum ! :-D

Prérequis

  • Avoir une clef USB sur laquelle a été copiée l’image iso d’un système Debian GNU/Linux 8 en mode Live (amd64) et personnalisé grâce à livebuild contenant notamment qemu.
  • Avoir copié l’image iso d’un snapshot (amd64) d’OpenBSD sur la deuxième partition de la clef.
  • Avoir une machine bien supportée par les systèmes alternatifs libres et open source et qui sait démarrer sur un port USB. Exemple : Lenovo ThinkPad X200s.

Schéma de partitionnement (de type MBR) d'un disque de 100 Go :

partition n°1 (primaire) : partition "linux" environ 85 Go (type : 83 + ext2 ou ext3)
partition n°2 (primaire) : OpenBSD environ 15 Go (type : a6 + ffs)

Étape n°1 : Le système Live USB

Nous lançons le système Live depuis la clef USB insérée dans un port USB.

Lors de l'installation, nous créerons le schéma de partitionnement suivant (grâce au logiciel « fdisk » du projet OpenBSD) :

  • La partition n°1 (qui contiendra les données et notamment les images disque d'OpenBSD) sera accessible grâce au fichier à « /dev/sd0i » → Type : Linux (83)
  • La partition n°2 chiffrée (contiendra les slices du système OpenBSD) sera associée au fichier « /dev/sd1 » → Type : a6 + amorçable

Étape n°2 : Installation chiffrée d'OpenBSD sur une partition

Nous allons installer OpenBSD depuis le système Live via « qemu ».

Remarque : Ce qui est présenté ci-dessous fonctionnerait directement depuis l'installateur OpenBSD mais ce serait moins fun ! LOL

Nous ouvrons un console virtuelle « Xterm ».

Après un

(debianlive)$ sudo su -

nous voilà le super-utilisateur « root » du système Live !

Nous montons la deuxième partition de la clef USB sur laquelle a été copiée l'image iso du snapshot d'OpenBSD.

(debianlive)# mount /dev/sdb2 /mnt/

Nous lançons l’installation classique d’OpenBSD via « qemu ».

(debianlive)# qemu-system-x86_64 -k fr -m 512 -hda /dev/sda -cdrom /mnt/install60.iso -boot d -localtime

NB : Ici, vu de qemu, nous constatons que le disque est lié au fichier de périphérique wd0.

Le début de l'installation à l'aide de l'installateur

Welcome to the OpenBSD/amd64 X.X installation program.
(I)nstall, (U)pgrade, (A)utoinstall or (S)hell? 

choisir « (I)nstall » en écrivant « I » puis valider.

Ensuite choisir « fr » pour avoir le clavier en français et enfin quitter temporairement l'installation en validant « ! » après « System hostname? (short form, e.g. 'foo') ».

« Sortie » temporaire de l'installateur : création du schéma de partitionnement depuis l'installateur d'OpenBSD

Source : https://www.openbsd.org/faq/faq4.html#site

La commande

# disklabel wd0

retourne

# /dev/rwd0c:
type: ESDI
disk: ESDI/IDE disk
label: QEMU HARDDISK   
duid: 0000000000000000
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder: 16065
cylinders: 12161
total sectors: 195371568
boundstart: 153094144
boundend: 195371568
drivedata: 0 

16 partitions:
#                size           offset  fstype [fsize bsize   cpg]
  c:        195371568                0  unused                    

Nous allons mettre le « bazar » sur le disque en créant des données « aléatoires ». (Attention : Selon la taille du disque et de la puissance de votre CPU, cette manipulation peut prendre du temps !)

# dd if=/dev/random of=/dev/rwd0c bs=1m

Nous allons ré-initialiser le disque.

# fdisk -iy wd0

Puis, nous allons utiliser fdisk pour créer les deux partitions primaires.

# fdisk -e wd0
Enter 'help' for information
fdisk: 1>

Nous détruisons la partition n°4 créer de façon automatique lors de la ré-initialisation du disque.

# fdisk -e wd0
Enter 'help' for information
fdisk: 1> e 3
 Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 *3:00      0   1   2 -    519 127  63 [          64:     4193216 ] OpenBSD
Partition id ('0' to disable)  [01 - FF]: [A6] (? for help) 0
Partition 3 is disabled.
fdisk:*1>p g
Disk: wd0       geometry: 520/128/63 [4194303 Sectors]
Offset: 0       Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 0: 00      0   0   0 -      0   0   0 [           0:          0G ] unused
 1: 00      0   0   0 -      0   0   0 [           0:          0G ] unused
 2: 00      0   0   0 -      0   0   0 [           0:          0G ] unused
 3: 00      0   0   0 -      0   0   0 [           0:          0G ] unused

Nous allons créer la partition primaire n°1 (de 85 Go) qui accueillera les données (et notamment les images disque de notre futur système OpenBSD -current) :

fdisk:*1> e 0
 Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 0: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
Partition id ('0' to disable)  [01 - FF]: [0] (? for help) 83
Do you wish to edit in CHS mode? [n]
Partition offset [0 - 4194304]: [0] 64
Partition size [1 - 4194240]: [1] 85G
fdisk:*1>

Regardons de plus près :

fdisk:*1>p g
Disk: wd0       geometry: 520/128/63 [4194303 Sectors]
Offset: 0       Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 0: 83      0   1   2 -    260   9   9 [          64:         85G ] Linux files*
 1: 00      0   0   0 -      0   0   0 [           0:          0G ] unused
 2: 00      0   0   0 -      0   0   0 [           0:          0G ] unused
 3: 00      0   0   0 -      0   0   0 [           0:          0G ] unused
fdisk:*1>p 
Disk: wd0       geometry: 520/128/63 [4194303 Sectors]
Offset: 0       Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 0: 83      0   1   2 -    260   9   9 [          64:     2097152 ] Linux files*
 1: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
 2: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
 3: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
fdisk:*1>

Remarques :

  • Les valeurs ci-dessus (geometry/Sectors) ont été créées lors de tests sur une machine virtuelle avec le logiciel libre VirtualBox d'Oracle sur un disque virtuel d'une capacité de 2 Go (et non de 100 Go comme sur notre machine physique). Par conséquent, les valeurs ne se correspondent pas mais les manipulations sont les mêmes !
  • Nous retenons le nombre 2097152 qui est la taille en cylindres de la partition n°1.

Nous allons créer la partition n°2 sur le reste du disque (environ 15 Go) qui accueillera le système OpenBSD.

fdisk:1*>e 1
Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 1: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
Partition id ('0' to disable)  [01 - FF]: [0] (? for help) a6
Do you wish to edit in CHS mode? [n]
Partition offset [0 - 4194304]: [0] 2097216
Partition size [1 - 4194240]: [1] *
fdisk:1*>

Remarques :

  • 2097216=64+2097152
  • Le symbole « * » signifie « prendre le reste du disque ».

Regardons de plus près :

fdisk:*1>p g
Disk: wd0       geometry: 520/128/63 [4194303 Sectors]
Offset: 0       Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 0: 83      0   1   2 -    260   9   9 [          64:          85G ] Linux files*
 1: A6    260   9  10 -    520  16  16 [     2097216:          15G ] OpenBSD
 2: 00      0   0   0 -      0   0   0 [           0:           0G ] unused
 3: 00      0   0   0 -      0   0   0 [           0:           0G ] unused
fdisk:*1>p 
Disk: wd0       geometry: 520/128/63 [4194303 Sectors]
Offset: 0       Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
 0: 83      0   1   2 -    260   9   9 [          64:     2097152 ] Linux files*
 1: A6    260   9  10 -    520  16  16 [     2097216:     2097088 ] OpenBSD
 2: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
 3: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
fdisk:*1>

Ci-dessous, nous allons écrire la nouvelle table de partition (commande « u ») puis nous rendons la partition n°2 amorçable (commande « f 1 » car la numérotation des partitions démarre de « 0 » avec « fdisk ») et enfin nous quittons « fdisk » en sauvegardant nos modifications dans le MBR.

fdisk:*1> u
Machine code updated.
fdisk:*1> f 1
Partition 1 marked active.
fdisk:*1> q
Writing MBR at offset 0.

Une nouvelle petite vérification :

# disklabel wd0
# /dev/rwd0c:
type: ESDI
disk: ESDI/IDE disk
label: QEMU HARDDISK   
duid: 0000000000000000
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder: 16065
cylinders: 12161
total sectors: 195371568
boundstart: 153094144
boundend: 195371568
drivedata: 0 

16 partitions:
#                size           offset  fstype [fsize bsize   cpg]
  c:        195371568                0  unused                    
  i:        153092096             2048  ext2fs

Création de la partition « virtuelle » chiffrée

Ensuite, nous allons créer la partition « disklabel » chiffrée qui va accueillir OpenBSD.

# disklabel -E wd0
Label editor (enter '?' for help at any prompt)
> a a
offset: [64]
size: [39825135] 
FS type: [4.2BSD] RAID
> q
Write new label?: [y]

Après une petite vérification

# disklabel wd0
# /dev/rwd0c:
type: ESDI
disk: ESDI/IDE disk
label: QEMU HARDDISK   
duid: 9ba67620fc42347a
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder: 16065
cylinders: 12161
total sectors: 195371568
boundstart: 153094144
boundend: 195371568
drivedata: 0 

16 partitions:
#                size           offset  fstype [fsize bsize   cpg]
  a:         42277424        153094144    RAID                    
  c:        195371568                0  unused                    
  i:        153092096             2048  ext2fs

nous créons le disque « virtuel » (sd0) chiffré « au dessus » de la partition physique (wd0a) (une sorte d'« abstraction » logicielle) :

# bioctl -c C -l wd0a softraid0
New passphrase:
Re-type passphrase:
sd1 at scsibus2 targ 1 lun 0: <OPENBSD, SR CRYPTO, 005> SCSI2 0/direct fixed
sd1: 19445MB, 512 bytes/sector, 39824607 sectors
softraid0: CRYPTO volume attached as sd0

Remarques :

  • Depuis qemu, le disque « virtuel » chiffré est associé au fichier /dev/rsd0c (sd0).
  • Attention, la clef de chiffrement (« passphrase ») choisie doit tenir compte du fait que nous utilisons un clavier azerty. Or, au démarrage d'OpenBSD, au moment précis où cette clef sera demandée, le clavier sera qwerty.

La commande

# disklabel sd0

retourne

# /dev/rsd0c:
type: SCSI
disk: SCSI disk
label: SR CRYPTO
duid: 0000000000000000
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder: 16065
cylinders: 2631
total sectors: 42276896
boundstart: 64
boundend: 42267015
drivedata: 0 

16 partitions:
#                size           offset  fstype [fsize bsize   cpg]
  c:         42276896                0  unused                    

et la commande

# disklabel -E sd0

retourne

Label editor (enter '?' for help at any prompt)
> p g
OpenBSD area: 64-42267015; size: 15.2G; free: 15.2G
#                size           offset  fstype [fsize bsize   cpg]
  c:            15.2G                0  unused                    
> q
No label changes.

Voici les étapes suivantes : (source : http://www.openbsd.org/faq/faq14.html#softraidFDE)

Nous créons les fichiers de périphériques liés au nouveau « disque ».

# cd /dev && sh MAKEDEV sd0

puis nous écrivons des zéros sur le premier secteur d'amorçage du nouveau « disque ».

# dd if=/dev/zero of=/dev/rsd0c bs=1m count=1

Remarque : Hors de qemu, le disque physique sera sd0 et le disque chiffré sera sd1. A priori, je pense que le noyau openbsd crée les fichiers de périphériques liés à sd2 lors du premier démarrage sur la machine physique.

Nous allons reprendre l'installation classique.

# exit

Formatage de la partition n°1 (avec le système de fichiers ext2/3)

Nous pouvons miantenant formater la partition n°1 ainsi :

# newfs_ext2fs /dev/wd0i

C'est tout ! ;-) Par contre, le système de fichier est ext2. (A priori, le logiciel « newfs » ne sait pas formater en ext3.)

Remarque : Après avoir installé OpenBSD sur sa partition chiffrée, nous pourrions tout aussi bien formater en ext3 cette première partition du système Debian Live. Comment ?

Ainsi :

(debianlive)# mkfs -t ext3 /dev/sda1

La seule question que nous devons nous poser est la suivante : Avons-nous réellement besoin d'un système de fichiers journalisé pour sauvegarder nos données (comme les images disque du système OpenBSD) ?

Retour dans l'installateur

Nous revenons sur

System hostname? (short form, e.g. 'foo') 

La suite de l'installation est classique. Il faut juste faire attention à l'étape suivante

Available disks are: wd0 sd0.
Which disk is the root disk? ('?' for details) [wd0] sd0

où nous choisissons « sd0 » puis

Use (W)hole disk MBR, whole disk (G)PT or (E)dit? [whole]

où nous validons le choix par défaut « whole ».

Puis nous poursuivons avec l’installation classique. (Choisir le choix par défaut : « (A)uto layout »… ou pas ! 8-))

À la fin, nous arrêtons le système avec la commande « halt -p -q ». Un redémarrage du système nous est alors proposé. Nous validons. Puis nous fermons « sauvagement » la console virtuelle dans laquelle a été lancée la commande « qemu ».

« Clonage » du système OpenBSD

Pour effectuer une image disque du système OpenBSD, nous allons procéder comme suit :

(1) Nous lançons le système Debian Live.

(2) Nous devenons le super-utilisateur « root » du système Debian Live.

$ sudo su -
#

(3) Nous montons le système de fichiers lié à la partition n°1.

# mount /dev/sda1 /mnt/ && cd /mnt/

(4) Nous utilisons le logiciel dd pour construire une image disque du système OpenBSD puis nous demandons le redémarrage automatique lorsque cette image a été effectuée.

# dd if=/dev/sda2 of=openbsd-current_sda2-20161022.img && cd && umount /mnt && reboot