Installer FreeBSD sur une clé usb avec une racine en lecture seule

Auteur : Olivier BOYER - oboyer () ajoute ! org

Mots clés

clé usb, usb stick, lecture seule, read-only, FreeBSD

Introduction

Ce document présente comment installer un système FreeBSD 6.2 Release sur une clé USB. Une clé USB est un périphérique de stockage basé sur une mémoire flash. Or, les mémoires flash ont une capacité limitée d'écritures. Un problème se pose donc, car un système d'exploitation écrit très régulièrement sur son stockage principal.

L'installation décrite ici s'effectue sur un système de fichiers racine (slash) en lecture seule (read-only). Ainsi, aucune écriture ne sera effectuée sur la clé USB par le système en cours de fonctionnement. Les seules écritures seront faites à l'installation, ou à la mise à jour du système.

Présentation de la maquette

  • Un ordinateur compatible PC, architecture i386, dotée d'un port USB (version 2 recommandée).
  • Une clé USB (au moins 1Go).

Note

Toutes les commandes présentées ici, sont à exécuter, sauf mention contraire, en tant qu'administrateur de la machine.

Pré-requis

  • Un BIOS de carte mère sur la machine capable de démarrer sur un périphérique USB.
  • Une clé USB (au moins 1Go).
  • Un cdrom d'installation de FreeBSD.
  • Une certaine connaissance de l'installation d'un système FreeBSD.

Installation du système FreeBSD sur une clé USB

Introduction

Contrairement à NetBSD ou OpenBSD, la distribution de FreeBSD ne fournit pas un ensemble de sets d'installation (archives tag.gz). Pour sélectionner les composants de base, il faut dérouler la procédure d'installation de manière “classique”. Il n'y a donc pas de préparation spécifique à réaliser sur la clé USB. Tout sera fait automatiquement par sysinstall(8).

Le disque dur interne de la machine est retiré. Le seul support d'écriture non volatil est la clé USB branchée. Ce périphérique est vu par le système FreeBSD comme le premier disque dur SCSI, soit /dev/da0.

Installation du système

L'installation du système se réalise de la même manière que sur un disque dur SCSI. Cette section se concentre donc uniquement sur les éléments importants. Pour une procédure détaillée de l'installation d'un système FreeBSD, se reporter au chapitre 2 Débuter l'installation de l'excellent Manuel FreeBSD (FreeBSD Handbook pour les intimes).

Menu : Country Selection

Choisissez la langue Française. Ainsi, le clavier est configuré en AZERTY. C'est pratique pour la suite de l'installation.

Menu : sysinstall Main Menu

Choisissez une installation Standard.

Menu : Fdisk

Dans cette maquette, le système occupe la totalité du disque dur (plus exactement, de la clé USB). Comme le système est en lecture seule, il n'y a pas à se préoccuper d'allouer de l'espace pour des systèmes de fichiers qui “grossissent”, tels que /tmp, /var, ou encore /home.

Sélectionnez l'option Use Entire Disk (utiliser l'intégralité du disque) avec la touche A. Toutes les slices existantes sont supprimées, et remplacées par une slice unused et une autre freebsd. Cette dernière occupe presque tout l'espace disponible sur la clé. C'est là que sera installé le système.

Enfin, appuyez sur la touche Q pour enregistrer la configuration, et quitter ce menu.

Menu : Boot Manager

Le seul système présent sur la clé USB est FreeBSD. Il n'est donc pas nécessaire d'utiliser un gestionnaire de démarrage. Sélectionnez Standard.

Menu : Disklabel Editor

Vous devez maintenant créer des partitions à l'intérieur de la slice que vous venez de créer. Dans cette maquette, seule la partition racine (slash) est nécessaire. La swap n'est pas recommandée sur une clé USB (le nombre d'écritures est limité sur les mémoire flash, relisez l'introduction de ce document).

Créez donc une seule partition (avec la touche C), dont le point de montage est / (avec la touche M), et sélectionnez l'option Toggle SoftUpdates (avec la touche S).

Enfin, appuyez sur la touche Q pour enregistrer la configuration, et quitter ce menu.

Menu : Choose Distributions

Choisissez l'option d'installation Custom, puis sélectionnez les composants suivants :

  • base
  • kernels (GENERIC)
  • man
  • X.org
    • Basic
      • lib
      • bin
      • man
    • Server
      • srv
    • Fonts
      • fmsc
      • f74
      • f100
      • ft1
      • ftt
Remarques :
  • La sélection des composants du système graphique X.org est optionnelle, tout dépend de l'utilisation que vous souhaitez faire de votre système.
  • La sélection des pages de manuels man est optionnelle, mais il est souvent préférable d'avoir les pages de man(1) sous la main.

Fin de l'installation

Suivez les instructions qui apparaissent dans les différents menus jusqu'à la fin de la procédure. A partir de maintenant, tous les paramètres pourront être changés à posteriori.

Configurer le système avec une racine en lecture seule

Le système FreeBSD est maintenant installé sur la clé USB. Vous avez fait votre premier redémarrage, vérifié que le matériel est bien détecté, que la connexion au réseau local est fonctionnelle. Bref, vous pouvez maintenant transformer votre système en un système avec une “racine en lecture seule”.

Comme vous allez le constater, les manipulations à effectuer sont simples, et rapides. Tout est prévu d'origine dans le système. Les sections suivantes indiquent les paramètres minimums qui doivent être présents dans les fichiers de configuration du système pour que le système fonctionne avec une racine en lecture seule.

/etc/rc.conf

Le fichier /etc/rc.conf contient la configuration de système. C'est là que la configuration du système en lecture seule s'effectue.

La configuration suivante,

  • force le montage de la partition racine en lecture seule [option root_rw_mount],
  • n'utilise pas le système de fichiers en mémoire pour /tmp [option tmpmfs],
  • utilise le système de fichiers en mémoire pour /var [option var_mfs],
  • fixe une taille de 32Mo pour /var en mémoire [option varsize],
  • crée, en mémoire, la structure de /var nécessaire au système [option populate_var],
  • ne met pas à jour le fichier /etc/motd [option update_motd],
  • utilise en clavier AZERTY [option keymap].
#/etc/rc.conf
# Please make all changes to this file, not to /etc/defaults/rc.conf.
# This file now contains just the overrides from /etc/defaults/rc.conf.

root_rw_mount="NO"      # Set to NO to inhibit remounting root read-write.
entropy_file="NO"       # Set to NO to disable caching entropy through reboots.

tmpmfs="NO"             # Set to YES to always create an mfs /tmp, NO to never
clear_tmp_enable="YES"  # Clear /tmp at startup.
clear_tmp_X="YES"       # Clear and recreate X11-related directories in /tmp

varmfs="YES"            # Set to YES to always create an mfs /var, NO to never
varsize="32m"           # Size of mfs /var if created
varmfs_flags="-S -M"    # Extra mount options for the mfs /var
populate_var="YES"      # Set to YES to always (re)populate /var, NO to never
cleanvar_enable="YES"   # Clean the /var directory

keymap="fr.iso.acc"     # keymap in /usr/share/syscons/keymaps/* (or NO)
usbd_enable="YES"       # Run the usbd daemon.
update_motd="NO"        # Update version info in /etc/motd (or NO)

#EOF
Notes
  • Les options les plus importantes de ce fichier sont root_rw_mount, varmfs et populate_var. Avec ces 3 options, au prochain démarrage, la machine sera avec un système racine en lecture seule.
  • Suivant utilisation, augmentez la taille de /var via le paramètre varsize.
  • L'option tmpmfs est désactivée car nous utilisons le répertoire /var/tmp à la place du répertoire /tmp. Mais vous pouvez utiliser une partition mémoire séparée pour /tmp si vous préférez.

/tmp

Le répertoire /tmp doit être accessible en écriture. De nombreux processus écrivent des informations temporaires à l'intérieur. Pour utiliser /tmp en écriture sur un système en lecture seule, il existe deux possibilités :

  • Construire /tmp en mfs (Memory File System). Le système de fichier est créé, de manière transparente, à chaque démarrage de la machine, en mémoire vive. Ces systèmes de fichiers en mémoire sont très pratique, mais consomment de la mémoire vive.
  • Créer un lien symbolique de /tmp, vers /var/tmp, qui lui, sera en écriture.

La deuxième option est retenue dans ce document.

Pour créer le lien symbolique de /tmp vers /var/tmp, procédez comme suit :

# cd /
# rmdir /tmp
# ln -s ./var/tmp tmp

/etc/fstab

Pour indiquez que le partition racine est en lecture seule, modifiez comme suit le fichier /etc/fstab :

#/etc/fstab
# Device      Mountpoint   FStype   Options      Dump  Pass#
/dev/da0s1a   /            ufs      ro,noatime   1     1

#EOF

Configurations optionnelles

Les modifications de configuration présentes dans ci-dessus suffisent à rendre le système en lecture seule. Les configurations suivantes servent à améliorer l'utilisation du système FreeBSD, mais ne sont pas spécifiques à un système en lecture seule.

/etc/sysctl.conf

Les deux options suivantes permettent :

  • d'arrêter le son de cloche à chaque erreur de frappe dans un terminal,
  • force la pile IP à utiliser des ISN variables (renforce la sécurité sur le réseau).

Modifiez comme suit le fichier /etc/sysctl.conf :

#/etc/sysctl.conf
hw.syscons.bell=0
net.inet.ip.random_id=1

/boot/loader.conf

Les modifications suivantes s'appliquent lors du démarrage du système. Elles permettent de :

  • raccourcir à une seconde le temps d'attente avant le démarrage effectif,
  • ne pas présenter le menu de démarrage,
  • reconnaître un clavier branché alors qu'il n'était pas présent lors du boot.

Modifiez comme suit le fichier /boot/loader.conf :

#/boot/loader.conf
autoboot_delay="1"      # Delay in seconds before autobooting,
beastie_disable="YES"   # Turn the beastie boot menu on and off
hint.atkbd.0.flags=""

/etc/X11/xorg.conf

Pour configurer le serveur X, démarrez le client, logez-vous en tant qu'utilisateur root, puis exécutez les commandes suivantes :

  • Créer un squelette de configuration du serveur X :
# Xorg -configure
  • Tester la configuration
# X -config /root/xorg.conf.new
  • Si besoin, modifiez la configuration, puis installez le fichier de configuration à un emplacement commun où Xorg(1) pourra le trouver :
# cp /root/xorg/conf.new /etc/X11/xorg.conf

Fin de configuration

Redémarrer le système pour appliquer les modifications.

Vérifications

Après le démarrage du système avec une racine en lecture seule, exécutez la commande suivante pour vérifier que le système est correctement configuré :

# mount 
/dev/da0s1a on / (ufs, local, noatime, read-only)
devfs on /dev (devfs, local)
/dev/md0 on /var (ufs, local)

Vous constatez que :

  • la racine du système (/) est montée en lecture seule (read-only).
  • la partition /var est un système de fichier en mémoire (/dev/md0).

Votre système est maintenant configuré en opérationnel.

Entretien du système

Modifier un fichier

Si vous devez modifier la configuration d'un fichier présent à la racine du système, exécutez les trois étapes suivantes :

Monter la racine en lecture/écriture

# mount -uw /

Modifier le(s) fichier(s) souhaité(s)

Remonter la racine du système en lecture seule

# sync; sync; sync
# mount -ur /

Les journaux d'activités

Les journaux d'activité sont consignés dans le répertoire /var/log. Comme /var est sur un système de fichiers en mémoire vive, les logs sont automatiquement effacés à l'arrêt de la machine. Pensez à les sauvegarder régulièrement, ou à configurer syslogd(8) pour qu'il enregistre son activité sur une machine distante.

Ajouter un package

L'ajouter d'un package au système est à peu près équivalent à modifier un fichier à la racine du système. La différence intervient au niveau de la base de données des packages installés. Cette dernière est située dans le répertoire /var/db/pkg. Or, /var est reconstruit à chaque démarrage du système, et la liste des packages n'est pas copiée en mémoire.

Donc, sur un système à racine en lecture seule, si vous consultez la liste des packages installés, voici la réponse du système :

# pkg_info
pkg_info: no packages installed

En effet, le répertoire est vide :

# ls -la /var/db/pkg 
total 4
drwxr-xr-x  2 root  wheel  512 Oct 19 18:35 .
drwxr-xr-x  8 root  wheel  512 Oct 19 16:35 ..

Donc, pour ajouter un package, il faut :

Démonter le répertoire /var en mémoire

# mount -uw /
# umount -f /var

Installer le(s) package(s) voulu(s)

# pkg_add -r <nom_du_package>

Remonter la racine en lecture seule

# sync; sync; sync
# mount -ur /

Remonter /var en mémoire

Vous pouvez remonter /var en mémoire de deux manières :

  • En redémarrant le système :
# reboot
  • En exécutant les scripts de démarrage :
# /etc/rc.d/var
# /etc/rc.d/ldconfig restart

Liens

 
doc/freebsd/usbstick.txt · Dernière modification: 2009/12/23 22:36 (édition externe)     Haut de page