Patcher
et mettre à jour
une machine OpenBSD
Pour mettre à
jour une machine OpenBSD il vous faut :
1
Rapatrier les sources
1.1 En
utilisant cvs
1.2 En
utilisant cvsup
2 Mettre à jour
2.1 Recompiler une seule application ex : SSH
2.1.1 Sans utiliser cvsup
2.1.2 En utilisant cvsup
2.2 Recompiler toute la machine depuis /usr/src
2.3 Mettre à jour un package
2.4 Mettre à jour via les ports
3
Passer d'une version d'OpenBSD à une version plus récente
3.1 Exemple : passage de la 3.0 à la 3.1
3.2 Exemple : passage de la 3.1 à la 3.2
1 Les sources OpenBSD
Le
projet OpenBSD est géré sur un serveur CVS. Ce serveur
dispose de deux branches :
La current : On trouve dans cette
branche les derniers développements. Cette branche doit être
réservée aux développeurs.
La stable : Cette
version doit être choisie pour les serveurs en production.
Pour
rapatrier les sources directement de ce serveur cvs, vous disposez de
deux outils : cvs et cvsup.
Une autre possibilité est
d'utiliser les snapshots, en fait les binaires qui sont fabriqués
à partir de la branche current, que vous pouvez obtenir à
partir du ftp (ftp://ftp.openbsd.org/pub/OpenBSD/snapshots/).
Pour
savoir si vous devez patcher votre machine OpenBSD, vous pouvez avoir
sur le site d'OpenBSD dans
l'espace patches la liste des patches de sécurité à
appliquer. Je ne peux que vous conseiller de l'avoir régulièrement
sous les yeux.Un petit script perl, à mettre
dans la crontab ,qui vous alertera dès qu'un patche de sécu est sorti.
CVS est un outil qui permet de mettre
à jour les sources de votre machine, en allant les télécharger
sur des serveurs cvs. En fait cvs est une commande en ligne. Pour en
savoir plus sur cvs vous pouvez consulter la documentation
suivante.
Placez vous dans le répertoire /usr
et
# setenv CVSROOT
anoncvs@anoncvs.ca.openbsd.org:/cvs
ou si vous utilisez le bourne shell export à la place de
setenv.
# cvs -q get -rOPENBSD_3_0 -P src
vous
pouvez aussi directement utiliser la ligne
cvs
-danoncvs@anoncvs.ca.openbsd.org:/cvs get -rOPENBSD_3_0
src/chemin_de_ce_que_vouv_voulez
Si vous souhaitez
l'ensemble de src, mettre simplement src.
Je ne
détaille pas plus cette méthode, mais sachez qu'il est
possible si vous êtes un peu parano d'utiliser ssh. Je vous
renvoie à la doc en anglais sur le site d'OpenBSD.
1.2 Installer et utiliser cvsup
cvsup permet de mettre à
jour les sources sur votre système. En fait il récupère
les mises à jour sur un serveur cvsupd et permet
de ne pas avoir à taper des lignes de commandes à la
cvs.
Le préalable est d'avoir installé les sources
sur votre système (src.tar.gz et srcsys.tar.gz) que l'on
trouve sur le cd ou sur le ftp d'OpenBSD, même si ce n'est pas
obligatoire, cela vous fait gagner pas mal de temps la première fois,
surtout sur des liens basse vitesse.
Si vous essayez d'installer cvsup en passant par les
ports, vous allez avoir un problème avec modula-3 et pm3. Il
vous indique qu'il a besoin de X11 (Si vous avez installé le
serveur X cela ne doit pas poser de problème pour utiliser le
port qui se trouve dans /usr/ports/net/cvsup).
Sinon télécharger
sur le site d'openBSD le package cvsup-16.1f-no_x11-static.tgz, puis
faire pkg_add cvsup-16.1f-no_x11-static.tgz. (ou directement en
faisant pkg_add -v
ftp://ftp.openbsd.org/pub/OpenBSD/3.2/packages/i386/cvsup-16.1f-no_x11-static.tgz)
Un
pkg_info vous confirme que cvsup est bien installé. Vous
pourriez choisir d'utiliser la version de cvsup qui gère
l'affichage graphique (sans le -no_x11), mais vous devez alors avoir
installé, au préalable l'ensemble de Xfree86.
Vous devez créer un
fichier supfile que vous placez dans /etc par exemple. Vous allez
alors indiquer quel serveur utiliser, quels fichiers télécharger
ou placer les mises à jour sur votre serveur, et quelles mises
à jour télécharger.
Ce fichier doit contenir
les lignes suivantes :
*default host=cvsup.ac-creteil.fr
# Le serveur que vous souhaitez
utiliser. (voir ici
la liste des serveur cvsup).
*default prefix=/usr
# Le répertoire ou vous
souhaitez placer vos mises à jour. Par exemple pour mettre à
jour les ports (avec OpenBSD-ports) indiquer simplement /usr.#Vous
n'avez pas besion d'indiquer le sous répertoire ports.
*default base=/usr/local/cvsup
# Le répertoire ou cvsup va
garder la trace des modifications (il faut le créer avant
de lancer la commande).
*default tag=OPENBSD_3_2
#
Si vous souhaitez indiquer un tag. (pour avoir la version stable d'openBSD 3.2). Si vous ne mettez rien
vous allez rapatrier l'ensemble du serveur CVS, donc une partie
encore non stable (curent). A moins d'être un développeur
je ne vous le conseille pas.
*default
release=cvs
*default delete use-rel-suffix
# Indiquez maintenant ce que vous souhaitez mettre à jour
#OpenBSD-all
----------> tout
OpenBSD-src ---------->
Le répertoire /usr/src là ou vous avez installé
les sources d'OpenBSD (src.tar.gz et srcsys.tar.gz)
#OpenBSD-www
--------> Uniquement la doc html
OpenBSD-ports
---------> Mettre à jour vos ports.
#OpenBSD-x11
------------> Mise à jour de Xfree
#OpenBSD-xf4
------------> Mise à jour de Xfree4
Vous pouvez
indiquer une branche différente par exemple entre OpenBSD-src
tag=. et OpenBSD-ports en indiquant la branche de cvs que vous
souhaitez utiliser dérrière OpenBSD-ports.
Si vous avez une interface graphique
lancez simplement cvsup supfile. Vous obtenez alors une interface
graphique. Sinon lancez la commande
cvsup -g -L 2 /etc/cvs-supfile
(-g pour ne pas avoir l'interface graphique). Cette commande est
aussi utile pour automatiser cette opération.
Si vous
souhaitez faire un test avant de mettre à jour afin de voir le
résultat, créez un répertoire /tmp/test par
exemple et lancer la commande
cvsup -g -L 2 supfile /tmp/test (il
faut avoir créé le répertoire avant) Cela vous
permet de faire des tests sans conséquences.
Si rien ne
fonctionne, essayez de détruire le répertoire
/usr/local/cvsup et de le recréer.
Vous avez mis
à jour vos sources sur la machine. Et maintenant que faire. Et
bien il faut mettre à jour la machine ;-)
2 Mettre à jour
Patcher une seule appli me parait d'un intérêt
assez limité. Patcher n'est une opération ni anodine, ni quotidienne; par
conséquent, autant tout patcher d'un coup.
2.1.1
une seule application sans utiliser cvsup : ex :Patcher SSH
Si vous avez installé les
sources sur votre machine (src.tar.gz et srcsys.tar.gz) dans
/usr/src, vous pouvez utiliser directement cvsup pour faire votre
mise à jour. Dans /usr/src/usr.bin vous avez alors un
répertoire ssh. Voir plus bas sur comment faire avec cvsup.
Si
vous ne souhaitez pas installer les sources et utiliser cvsup (ou
cvs) vous pouvez utiliser la méthode suivante :
Télécharger
sur le site d'openBSD la dernière version d'openssh (pour moi
Openssh.3.1-tar.gz) et le patch openbsd30-3.1.patch.
Copier
openssh.3.1-tar.tgz dans /usr/src/ssh par exemple.
Faire un
tar xvfz openssh.3.1-tar.tgz. Aller dans le répertoire obtenu
cd ssh/ puis placez dedans le patch que vous avez téléchargé.
Une chose à toujours faire : lire le contenu de ce fichier. La
démarche à suivre est assez bien documentée.
Faire
patch -p0 < openbsd30-3.1.patch. Puis
make obj -------------->
(éventuellement si il existe déjà il faut le
supprimer, à voir dans /usr/obj)
make cleandir
make
depend ---------> Pour construire les
dépendances
make ------------------> Reconstruit
le programme exécutable
make install.
Puis copier les
fichiers de conf dans /etc : cp ssh_config sshd_config /etc (Je vous
conseille vivement ici de garder une copie de vos fichiers de
configuration avant) ou d'utiliser la commande diff pour connaître
les différences si il y en a.
Vérifiez en
faisant ssh -V que vous avez bien mis à jour ssh (d'ailleurs
le mieux est de le faire avant et après). Si sshd tourne sur
la machine relancez le.
2.1.2 Mettre à jour une seule application en utilisant cvsup
Mettre à jour une seule application (qui appartient aux
paquets de base d'openBSD).
Les paquets qui se trouvent dans
/usr/src appartiennent aux paquets d'openBSD. On y trouve ssh,
sendmail et d'autres.
Reprenons l'exemple de ssh. Allez
dans le répertoire /usr/src/usr.bin/ssh. Puis passez les
commandes suivantes :
rm -rf /usr/obj
make
obj
make cleandir
make depend
make
make
install.
Puis copier les fichiers de conf dans /etc : cp
ssh_config sshd_config /etc (Je vous conseille vivement ici de garder
une copie des fichiers d'origine avant). Si sshd tourne sur la
machine relancez le. Vérifiez avec un ssh -V.
Maintenant
le but est de mettre l'ensemble de votre machine à jour.
2.2 Mettre à jour l'ensemble de votre machine
Attention on parle ici de ce qui est
natif du monde OpenBSD, que l'on trouve donc dans /usr/src. Par
exemple sendmail, mais aussi les shells...etc.
Je traite
plus loin les applications qui se trouvent dans les ports.
Le noyau
Comment et pourquoi le recompiler ?
Quelles sont les options à valider ou invalider ?
Les réponses.
Le système
Voila une version pas trop ancienne (5/1/3) du fichier des ports de la 3.2 : port.tgz et du fichier des sources du système en 3.2 : src.tgz. Les deux sont à décompacter dans /usr.
On ne souhaite pas ici mettre à jour application par
application, mais une mise à jour de l'ensemble de la machine.
Soyez prudent lorsque vous faites cela. Je vous propose de lire la
doc suivante http://openbsd.org/faq/upgrade-minifaq.html
Le
principe est toutefois le même que pour mettre une seule
application à jour ....sauf qu'il faut un peu plus de
temps. J'ai
eu un problème la première fois, sans pouvoir arriver à
la fin de la compilation, car je n'avais pas installé misc30.tgz.
D'abord commençons à faire le ménage :
rm
-rf /usr/obj
On enlève tout ce
qu'il y a dans le répertoire obj, pour aller plus vite on le
détruit.
mkdir /usr/obj
On
le recrée.
cd /usr/src
On se place dedans
make obj
On le reconstruit, on recrée la structure
il n'y a rien dedans.
Le répertoire /usr/obj est utilisé
pour placer les binaires obtenus par un make build.
N'oubliez pas d'en
profiter pour recompiler le
noyau!
Maintenant, on recompile le système .
cd /usr/src
make build
Le
problème qui se pose à vous à la fin de cette
mise à jour touche les fichiers de configuration. On va donc
comparer les anciens fichiers avec les nouveaux. Pour cela on crée
un répertoire mkdir /home/newroot, puis export
DESTDIR=/home/newroot et enfin on lance
cd /usr/src/etc &&
make distribution-etc-root-var
Puis on compare les fichiers obtenus avec les fichiers qui se trouvent dans /etc (Commande diff).
De même pour le répertoire
/dev, qui n'est pas mis à jour automatiquement vous devez
faire (Il y a peu de chances d'avoir des différences sur une
même version 3.0 par exemple).
cd /dev
cp
/usr/src/etc/etc.i386/MAKEDEV ./
On copie
MAKEDEV dans /dev
./MAKEDEV all
On l'exécute. MAKEDEV est utilisé
pour créer les fichiers spéciaux qui sont dans /dev.
2.3 Mettre à jour une application que vous avez installé via les packages
La différence est la suivante entre les ports et les
packages. Un package est une application déjà compilée.
On a donc les binaires, et non pas les sources. Cela vous évite
d'avoir à faire la compile vous même. Les packages se
trouvent sur le ftp d'OpenBSD. Vous les installez avec un
pkg_add nom_du_package.
La
meilleure façon pour faire une mise à jour consiste à
enlever le package (pkg_delete) et à le réinstaller en
utilisant le package que l'on peut trouver sur le ftp d'OpenBSD.
Attention à bien faire une copie de vos fichiers de
configuration avant de faire cette opération.
En fait
il n'existe pas de pkg_update (apt-get update ??) sous OpenBSD. Vous n'avez donc pas trop
de choix que de supprimer et de réinstaller.
La
question est bien sur comment savoir qu'il faut mettre à jour
une application.
- D'abord en connaissant la version que
vous avez installé.
- En surveillant les problèmes
de sécurité qui surviennent aux applications que vous
avez installé. N'est ce pas l'un des rôles le plus
important de l'administrateur systéme.
- En regardant dans
/usr/ports/INDEX les différences de version.
2.4 Mettre à jour une application que vous avez installé via les ports
Lorsque vous installez une
application via les ports, vous compilez vous même
l'application, puis il y a création du paquetage
correspondant.
Donc pour savoir ce que vous avez installé
en utilisant les ports la démarche est la même qu'avec
les paquetages. Faites un pkg_info pour cela.
Puis, vous
devez mettre à jour vos ports via cvsup (voir plus
haut), en fait on fait cela en même temps que pour l'ensemble
des sources.
Puis désinstaller l'ancienne version avec un
pkg_delete (attention à prendre soin de conserver vos fichiers
de configurations), puis relancer la compile un make &&
make install afin que celle-ci soit mise à jour. Pensez à
mettre à jour les packages dépendants.
Puis
vérifier que des mises à jour sont disponibles. En fait
le travail étant un peu plus complexe, il est plus simple de
mettre à jour uniquement les applications dont vous avez
besoin.
Comment alors connaître les packages à
mettre à jour. Et bien il faut se tenir informé des
problèmes de sécurité que posent les
applications que l'on utilisent.
3 Passer
d'une version OpenBSD à une autre
C'est LA difficulté d'OpenBSD. L'équipe ne maintient les versions que sur n et n-1 (un an donc). Vous devez donc réinstaller tout ou appliquer les upgrades (apt-get upgrade ne fonctionne pas ici hélas...).
Avant toute chose est ce que cela vous est nécessaire ?
Qu'est
ce que cela vous apporte en plus que vous ne possédez pas sur
la version actuelle.
En fait cela est assez simple puisqu'il
faut simplement aller chercher la version n à la
place de la n-1 avec cvs ou cvsup, puis recompiler. Encore une
fois attention à vos fichiers de configuration.
Pensez
aussi à aller sur le site
d'OpenBSD voir si il n'y a pas de problèmes ou
de modifications majeures entre les versions.
Par contre
pensez à faire la même chose avec les packages et les
ports, afin de garder autant que possible une version homogène. Enfin, je
ne saurais que vous conseiller de ne pas sauter de version. Passer de n-2 à n-1
puis à n, me parait plus sain que de sauter l'étape n-1.
3.1
Exemple passage de 3.0 à 3.1
Vous disposez d'un OpenBSD 3.0 et vous souhaitez passer à
la version 3.1.
J'ai commencé à faire un rm -rf
/usr/src && rm -rf /usr/ports && rm -rf
/usr/ports. Cela n'est pas nécessaire on peut directement
faire un cvsup sur la stable de 3.1.
lancer cvsup après
avoir changé 3.0 en 3.1 dans le fichier de conf
de cvsup.
Puis cd /usr/src && make obj. J'ai ici
obtenu un message d'erreur regress/etc Could not find
bsd.regress.mk.
Rien de grave faire un cd
/usr/src/share/mk && make && make install, puis
relancer cd /usr/src && make obj.
Puis lancer la
mise à jour de l'ensemble de votre machine en
commençant par le noyau.
Après la recompile du
noyau et un reboot, on vérifie que l'on est en 3.1 : dmesg |
less. J'obtiens OpenBSD 3.1-stable.
Puis recompile de "tout
le reste" avec un cd /usr/src && make build. Bien penser
à vérifer les fichiers de configurations qui ne sont
pas changés par cette opération. Vous devez donc le
faire vous même.
En fait il n'y a pas de différence
avec le fait de recompiler toute la machine dans une même
version. Sauf qu'il vous faut être plus vigilant dans la
lecture de la FAQ sur le sujet d'OpenBSD
http://www.openbsd.org/faq/upgrade-minifaq.html#1.1
Attention
en passant de la version 3.0 à la version 3.1, les fichiers de
configuration de SSH ne se trouvent plus dans /etc, mais dans
/etc/ssh. Vous devez donc penser à les changer de place.
3.2 Passage de 3.1 à 3.2
Le
modus opérandi officiel.
Un script
de ma conception pour faire tout cela automatiquement.
Attention !! Vous lancez
sous l'identité root un script shell qui va aller bricoler plein de
fichiers "sensibles" mot de passe, groupes .... Toute erreur risque de vous détruire
une installation qui fonctionnait. Je suis très mauvais en
scripting, donc relisez, mettez des tests, des pauses.... Tout ce que
vous voulez; et si en plus vous me faites parvenir la version
corrigée, je la remettrais en ligne avec plaisir.
Un petit coup de cvsup en n'oubliant pas que vous avez maintenant une version 3.2 dans le /etc/cvs-supfile. Et on recompile le noyau et la machine. Ca y est,vous êtes tranquille. (Pour 6 mois!)
3.3 Passage de la 3.2 à la 3.3
Encore une fois vous devez consulter le "modus opérandi"
avant toute chose. Si vous cherchez à recompiler le noyau après avoir
rapatrié les sources avec cvsup, vous allez avoir un message d'erreur du type :
cc1: invalid option `-fno-stack-protector'.
En fait, il vous faut utiliser les snapshots ou recompiler gcc avant. Il me
semble que cela est plus rapide en passant par les snapshots, vous les
téléchargez sur le ftp d'OpenBSD, et vous les détarez sur la machine. Puis
vous relancez une recompile du noyau sans rien modifier. Voir pour cela la
recompile
du noyau.
Une autre possibilité consiste à recompiler gcc avant, puis lancer la compile
du noyau.
Pendant la compile des sources, j'ai du créer un group _token, _radius, _lkm en
raison d'un arrêt de la compile sur le message unknown group _token. Dans /usr/src/libexec/login_token
j'ai relancé un make && make install.
© Philippe Chadefaux - philippe schwarz - $Id: OpenBSD-maj.html,v 1.7 2002/06/19 12:38:49 philippe Exp $