Outils pour utilisateurs

Outils du site


config:openbsd:bootableflashdrive

Clé USB bootable OpenBSD

Je vais indiquer ici comment créer une clé USB bootable avec OpenBSD.

Intérêt ?

Quel est l'intérêt de la chose ? Et bien il est multiple :

  • Avoir un UNIX sous la main, c'est le bien
  • Avoir un système de secours sur clé USB, c'est le pied
  • Booter sur un système super-sécurisé, ça le fé !
  • C'est fun
  • C'est la frime

Les différents usages :

  • obtenir un dmesg super détaillé pour identifier du matériel
  • récupérer un système endommagé
  • Avoir un anti-virus non compromis
  • installer OpenBSD sur une nouvelle machine (oui, en plus d'être bootable, l'installation est possible !)
  • faire de la maintenance

Bref, ça le fait bien.

Installation

C'est l'enfance de l'art : booter sur un CD OpenBSD (i386 pour une plus grande compatibilité, mais ça marche pareil avec un amd64…), une clé USB déjà préparée, une disquette, en réseau… et lancez l'installation ! :-P

Repérez bien le device qui correspond à votre clé USB (sd0 ou sd1 probablement) et installez le système dessus.

Le plus simple ? Une seule partition 'a', pas de swap, créer un utilisateur autre que root, n'installez pas compXX.tgz, ni gameXX.tgz (pour gagner quelques Mo…).

Et surtout, utilisez les DUID pour identifier les disques au montage !

Exemple

<mavie>
J'ai reçu une clé USB Duracell de 4Go avec le programme de fidélité Orange Davantage Internet. Cool. Je m'en va installer le bousin là-dessus.
Bon, le formatage prend des plombes, l'installation complète met deux heures pour aboutir, le système est super lent.
Clé de merde.
Je recommence avec une cle USB de 1Go plus vieille. Cool, ça marche 92 fois mieux…
Moralité : si vous trouvez ça lent, utilisez un autre périphérique !
</mavie>

Bref, je fais l'installation sur une clé de 1Go, avec une seule partition et un utilisateur live (mot de passe live : on ne cherche pas à faire compliqué), j'installe tous les sets sauf comp51.tgz et game51.tgz.

Détails

Une fois l'installation terminée, ne rebootez pas !!!

Vous avez fini l'installation et avez un shell à disposition. Votre partition est montée sur /mnt : profitez-en !

Systèmes de fichiers

Histoire d'avoir un système rapide malgré un périphérique lent, je vais monter des répertoires en RAM.

Les répertoires nécessitant un accès en écritures sont : /tmp, /var/run, /var/tmp, /dev.
Les systèmes de fichiers en RAM sous OpenBSD peuvent être initialisés par une copie d'un périphérique ou d'un répertoire, ce qui est bien cool. Nous allons en tirer profit pour les répertoires pré-cités :

# cd /mnt
# mkdir -P proxy/dev
# cp dev/MAKEDEV proxy/dev
# cd proxy/dev
# sh ./MAKEDEV all
# cd ..
# cp -Rp /mnt/var .
# cp -Rp /mnt/home .
# cp -RP /mnt/tmp .
# vi /mnt/etc/fstab

Et voici le fichier fstab incriminé :

fstab
# Le / est identifié par DUID, ce sera /dev/sd1a probablement au final...
# Les Soft Updates allègent les écritures sur le disque.
# L'option 'noatime' peut aussi être envisagée.
03328efc2aa11b61.a / ffs rw,softdep 1 1

swap /dev mfs rw,-s=2M,-i=1,-P=/proxy/dev/ 0 0
swap /var/log mfs rw,-s=20M,-P=/proxy/var/log/ 0 0
swap /var/run mfs rw,-s=5M,-P=/proxy/var/run/ 0 0
swap /var/tmp mfs rw,-s=5M 0 0
swap /tmp mfs rw,-s=30M 0 0
swap /home mfs rw,-s=100M,-P=/proxy/home/ 0 0

Explications :
Toutes les lignes commençant par swap sont “spéciales”.

Par exemple : /dev sera monté en mémoire (mfs = Memory File System), d'une taille de 2Mo, en copiant /proxy/dev/ à l'initialisation. Ici, je précise aussi qu'il faut beaucoup d'inodes (option '-i') : il y a 1198 devices et normalement, il n'y a “que” 128 inodes sur 2Mo.
man mount_mfs est votre ami !

Un rapide calcul nous montrera qu'il faut au moins 162Mo de RAM sur le système pour pouvoir monter tous les RAM-fs.
J'avoue n'avoir pas eu le vice de tester sur une machine virtuelle avec 64Mo de RAM par exemple…

Dernier point : la première ligne de votre fichier sera différente de la mienne, c'est normal, il s'agit d'un identifiant unique (man disklabel) !

Services

Soyons clairs, sur un système de secours/d'installation, il n'y a pas besoin d'avoir de services configurés.
Voici donc le contenu du fichier rc.conf.local (qui sera créé pour l'occasion) :

/etc/rc.conf.local
# Local rc configuration
inetd_flags=NO
sendmail_flags=NO
apmd_flags="-a -C"

Le daemon apmd peut être utile sur un portable…

Avant de redémarrer

Encore deux petites modifications avant de rebooter.

D'abord, il est préférable que l'ordinateur s'arrête directement plutôt que d'appuyer sur le bouton (partisans du moindre effort, vous êtes les bienvenus !) donc modifiez rc.shutdown :

/etc/rc.shutdown
powerdown=YES

Enfin, nous allons configurer le firewall maintenant, histoire de…

Seules les connexions SSH entrantes sont autorisées (on ne sait jamais…), et toutes celles sortantes bien sûr…

/etc/pf.conf
set skip on lo

# filter rules and anchor for ftp-proxy(8)
#anchor "ftp-proxy/*"
#pass in quick inet proto tcp to port ftp divert-to 127.0.0.1 port 8021

# anchor for relayd(8)
#anchor "relayd/*"

pass out	# to establish keep-state
block in

# rules for spamd(8)
#table <spamd-white> persist
#table <nospamd> persist file "/etc/mail/nospamd"
#pass in on egress proto tcp from any to any port smtp \
#    rdr-to 127.0.0.1 port spamd
#pass in on egress proto tcp from <nospamd> to any port smtp
#pass in log on egress proto tcp from <spamd-white> to any port smtp
#pass out log on egress proto tcp to any port smtp


#block in quick from urpf-failed to any	# use with care

pass in log proto tcp from any to any port ssh modulate state

# By default, do not permit remote connections to X11
block in on ! lo0 proto tcp to port 6000:6010

Allez, hop ! On redémarre :

# cd
# sync
# umount /mnt
# reboot

Premier boot

N'oubliez pas de sélectionner votre clé USB comme périphérique de démarrage et zou, Welcome to OpenBSD.

Logiquement, tout devrait bien se passer et le système devrait démarrer.

Logguez-vous en root et c'est parti.

Faciliter l'utilisation

Comme sur la plupart des système, il y a quelques modifications à effectuer, histoire de vous simplifier la vie.

Commencez par donner un peu plus de droits à l'utilisateur du système “live USB” (il s'agit de live dans mon exemple) :

# visudo

Modifiez le fichier comme suit (ajouter un alias de commandes et décommenter le groupe wheel) :

/etc/sudoers
# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
# Failure to use 'visudo' may result in syntax or file permission errors
# that prevent sudo from running.
#
# See the sudoers man page for the details on how to write a sudoers file.
#

# Host alias specification

# User alias specification

# Cmnd alias specification
Cmnd_Alias HALT = /sbin/halt, /sbin/reboot

# Defaults specification
Defaults env_keep +="DESTDIR DISTDIR EDITOR FETCH_CMD FLAVOR FTPMODE GROUP MAKE"
Defaults env_keep +="MAKECONF MULTI_PACKAGES NOMAN OKAY_FILES OWNER PKG_CACHE"
Defaults env_keep +="PKG_DBDIR PKG_DESTDIR PKG_PATH PKG_TMPDIR PORTSDIR"
Defaults env_keep +="RELEASEDIR SHARED_ONLY SSH_AUTH_SOCK SUBPACKAGE VISUAL"
Defaults env_keep +="WRKOBJDIR"

# Uncomment to disable the lecture the first time you run sudo
#Defaults !lecture

# Uncomment to preserve the environment for users in group wheel
#Defaults:%wheel !env_reset

# Runas alias specification

# User privilege specification
root	ALL=(ALL) SETENV: ALL

# Uncomment to allow people in group wheel to run all commands
# and set environment variables.
%wheel	ALL=(ALL) SETENV: ALL, NOPASSWD: HALT

# Same thing without a password
# %wheel	ALL=(ALL) NOPASSWD: SETENV: ALL

# Samples
# %users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users  localhost=/sbin/shutdown -h now

Ensuite, modifiez le fichier .profile du root :

# cat >> ~/.profile <<_EOF_
kernversion=`sysctl -n kern.osrelease`
machinetype=`sysctl -n hw.machine`
PKG_PATH="./:http://ftp.fr.openbsd.org/pub/OpenBSD/$kernversion/packages/$machinetype/"
PS1="\$PWD \\$> "

export PS1 PKG_PATH
_EOF_
# 

Vous pouvez ensuite vous déconnecter/reconnecter pour bénéficier d'un zouli prompt et surtout pour pouvoir installer les packages.

Décommenter la ligne suivante dans /etc/sysctl.conf,

machdep.lidsuspend=1		# laptop lid closes cause a suspend

histoire d'avoir un comportement “sain” sur un portable…

Enfin, installation de packages utiles (ou pas, à vous de juger et de choisir – notez le nouveau prompt au passage…) :

/root #> pkg_add aumix clamav dillo hping iperf mupdf qiv rox-filer xbattbar xosd

Comme vous pouvez le voir, il y a des programmes “de luxe” : un mixer audio, un visualiseur d'images ou un moniteur de batterie ne sont pas obligatoires…

Le cas ClamAV

Dans mon cas, avec une clé de 1Go, j'ai environ 20Mo de libre et clamav (enfin freshclam) est dans l'incapacité de télécharger sa base de données par manque de place.

Du coup, j'ai sioux-é. Encore…

/root #> cp -Rp /var/db /proxy/var/
/root #> echo "swap /var/db/clamav mfs rw,-s=50M,-P=/proxy/var/db/clamav/ 0 0" >> /etc/fstab
/root #> mount /var/db/clamav

Après ça, freshclam est content, tout va bien.

Deux inconvénients :

  • il faut re-télécharger les signatures de virus à chaque fois que l'on veut utiliser clamscan
  • il faut une machine avec 50Mo de RAM en plus, soit 212Mo…

Bien entendu, il ne faut pas oublier d'éditer /etc/freshclam.conf (en activant la compression…) pour configurer le bazar.

Personnalisation

Histoire d'avoir un système prêt à l'emploi et accueillant, il reste encore 2-3 trucs à faire.

Editer /etc/gettytab et remplacez la première ligne par :

default:\
	:np:im=\r\n%s/%m (%h) (%t)\r\n\r\nUse live/live to connect.\r\n\r\n:sp#1200:

Remplacez live/live par votre utilisateur/mot_de_passe, comme ça vous aurez un indice pour la connexion.

Ecrivez ensuite un chouette message à afficher lors de chaque connexion :

/etc/motd
OpenBSD 5.1 (GENERIC.MP) #188: Sun Feb 12 09:55:11 MST 2012

Welcome to OpenBSD Live.

You can either run OpenBSD from this flash drive or install it.

In order to install on i386, reboot and type 'boot bsd.rd' at the 'boot> ' prompt.
The install sets and firmwares are located in /install.

To install on amd64, reboot and type 'boot bsd64.rd' at the 'boot> ' prompt.
Please note that amd64 install sets are not available on this flash drive
(-> install from network!).

Use startx to start graphical session.

All changes to the "live" account will be lost on reboot...

Bon, là, vous voyez déjà d'autres informations. Faisons donc en sorte qu'elles soient justes :

/root #> mkdir -P /install/firmware
/root #> cd /install
/install #>

Copiez ici tous les fichiers d'installation (depuis un CD, le réseau, etc) : *51.tgz, bsd* et INSTALL51.arch
Copiez aussi le noyau d'installation amd64 et renommez-le en /bsd64.rd
Copiez les firmware (depuis http://firmware.openbsd.org/firmware/ – ne prenez que les plus récents) dans /install/firmware.
L'ensemble (sets et firmwares) occupe environ 260Mo.

Logguez-vous ensuite avec votre utilisateur “normal” et faites quelques modifications.

Voici ce que moi j'ai fait :

/home/live/.cwmrc
# cwm configuration file
sticky yes
 
color activeborder magenta4
color inactiveborder thistle4
color groupborder yellow
color ungroupborder green
color menubg gray
 
gap 0 0 3 0
snapdist 10
 
fontname "sans-serif:pixelsize=12:bold"
 
command "CWM doc" "xterm -rv +sb -T CWM -e man cwm"
command "----------------" ""
command Terminal "xterm -rv +sb"
command "----------------" ""
command Dillo	dillo
command Lynx "xterm +sb -T Lynx -e lynx"
command "----------------" ""
command "File Manager" rox
command "----------------" ""
command "Music player" beep-media-player
command "Volume" aumix
command "----------------" ""
command "Quit CWM" "quit"
command Halt "sudo /sbin/halt -p"
 
bind 4-Return "xterm -rv +sb"
bind 4-i dillo
bind 4-e rox
bind CM-Return "xterm -rv +sb"
 
autogroup 1 "xterm,XTerm"
autogroup 4 "dillo,Dillo"
/home/live/.xinitrc
#!/bin/sh
 
# Test battery presence and launch battery monitor if present.
sysctl hw.sensors.acpibat0 2>&1 >/dev/null && (xbattbar -a -I yellow left &)
 
# With the default X setup, there is no tap to click. Try to fix this.
synclient "TapButton1=1" &
 
# Set background. Solid color and image if qiv is found.
xsetroot -solid magenta4 &
which qiv 2>&1 >/dev/null && (qiv -z ~/.bckgrnd.png &)
 
# Display help message after 15 seconds.
(sleep 15 && osd_cat -A right -d 60 -l 20 -s 1 -f "-*-fixed-*-*-*-*-15-*-*-*-*-*-*-15" ~/.summary) &
 
# Launch window manager and log error messages.
exec cwm 2>~/.xsession-error
 
# EoF
/home/live/.summary
Welcome to the OpenBSD Live X Session!

A few tools are available to you.
They are available from the CWM Menu.
You can bring up the menu with the right mouse button.

To surf the web, use either Dillo or Lynx.
You can choose between vi or mg (emacs-like) to edit files.

If you have some issues with firmware, you can install
them from /install/firmware.

By all mean, read the CWM man page in order to grab a few
concepts and learn basic keyboard shortcuts (CMS-Q and
CM-Backspace are your friends if you want to leave
graphical session...).

Enjoy!

Lancez X (startx), jouez un peu avec Dillo (pour avoir des paramètres par défaut acceptables), Rox (configurez les associations de fichiers) et trouvez une belle image que vous sauvegarderez en /home/live/.bckgrnd.png (comme celle-ci par exemple…).

Modifiez vos fichiers d'init comme vous l'entendez (.profile, .cshrc, etc).

Enfin :

$ sudo -i
/root #> cp -Rp /home/live/ /proxy/home/

Et oui : n'oubliez pas que /home est un RAM-fs, donc tout sera perdu au prochain démarrage si vous ne faite pas cette copie !

Un dernier reboot pour la route…

Conclusion

Après cela, vous aurez un système “Live USB” OpenBSD.

Logiquement, il sera pleinement utilisable : vous pouvez là, maintenant, tout de suite, avoir un pare-feu ou un routeur depuis votre clé USB. Tous les outils d'OpenBSD sont disponibles.

Vous pouvez également vous en servir pour installer des systèmes i386 ou amd64 :
au démarrage, tapez 'boot bsd.rd' au prompt 'boot> ' (ou 'boot bsd64.rd').

Il est bien entendu possible d'installer une version plus récente que celle présente sur la clé USB : si votre “Live USB” est en version 5.1, rien ne vous empêche d'avoir les paquets d'installation et le 'bsd.rd' de la version 5.2…

Pour cette installation particulière (Live USB), n'oubliez pas que les “vrais” fichiers sont dans /proxy, et pas à leur emplacement habituel (pour /home, /dev et /var).

Comme indiqué, je n'avais qu'une clé de 1Go sous la main, mais si vous disposez de plus d'espace, n'hésitez pas à installer pleins de packages (netsurf, firefox, vim-(no-x11/gtk2), ruby, pkg_mgr, bmp, etc) et/ou à copier les sets d'installation de la version amd64

Dernière précision

Le plus “pénible” pour vous sera de configurer le réseau à chaque fois que vous vous servirez de votre clé.

Des astuces : créez autant de fichier /etc/hostname.if que vous en aurez besoin.

/root #> cat /etc/hostname.em0
dhcp NONE NONE NONE
/root #> cd /etc
/etc #> for i in fxp0 re0 xl0 rl0 bge0 bnx0; do cp hostname.em0 hostname.$i; done
/etc #>

OpenBSD n'utilisera que celui dont il aura besoin.

Sinon, apprenez bien comment fonctionne la commande ifconfig, surtout pour le wifi.

Un exemple :

/root #> ifconfig urtwn0 nwid Mon_ESSID wpa wpakey ma_passphrase
/root #> dhclient urtwn0

Vous pouvez aussi mettre ces commandes dans /etc/hostname.urtwn0, mais les identifiants de votre réseau Wifi seront divulgués aux personnes à qui vous allez prêter cette clé USB…

config/openbsd/bootableflashdrive.txt · Dernière modification: 2015/09/08 13:48 par cyriac