Installation du diablotin
Par Jean-Seb le jeudi 20 décembre 2012, 19:18 - FreeBSD - Lien permanent
Vous ne rêvez pas, je monte un serveur en FreeBSD.
Le desktop attendra encore un peu, le temps que Lennart ait transformé tout
l'écosystème Linux en une gigantesque Red Hat.
Je ne compte pas pondre un billet indigeste, et je vais dans un premier
temps me contenter d'une approche prudente de notre candidat
fourchu.
Où trouver des informations
L'indispensable
Ce billet n'est qu'un court résumé de l'excellent FreeBSD Handbook , disponible gratuitement sur le site de FreeBSD.
Il est assez épais (plus de 1000 pages), mais du coup assez complet. Sa lecture est plus que recommandée, mon objectif ici étant principalement de résumer les particularités de BSD par rapport à Linux.
Je vous conseille de le lire en anglais, vous aurez la version la plus à jour.
Lisez le avant de poser une question sur IRC ou sur les forums. Je sais qu'on dit ça pour toutes les docs, mais là, vous allez sentir la différence si vous ne le faites pas.
Pour une lecture hors-ligne ou dans d'autres langues.
Le dispensable
Si vous voulez un vrai livre en papier, «FreeBSD 7.0, le guide complet» de Michael W. Lucas (Pearson) est un bon moyen de débuter.
Il s'agit de la traduction de «Absolute FreeBSD, 2nd edition».
Le livre est sommairement traduit, mais il se lit malgré tout facilement, et contient une bonne base pour démarrer facilement.
La partie technique n'est pas très pointue et ne remplacera pas le handbook. Par contre, après lecture, vous comprendrez mieux l' «esprit» un peu particulier de la communauté BSD.
Attention, ce livre couvre la version 7 de FreeBSD. Il y a eu pas mal de changements depuis, notamment dans la gestion des packages.
Tester avec le live-cd (pour les méfiants)
Vous hésitez encore ? Comme je vous comprends.
Vous pouvez tester avec un shell à partir du CD. Le choix est proposé après la séquence de boot (test ou installation).
Si vous désirez modifier la configuration par défaut, vous aurez besoin de
quelques manipulations. En effet, /etc n'est pas monté en ram et
reste sur le CD.
Ramdisk pour /etc
Par défaut, /etc est en lecture seule. Cela empêche toute
modification des fichiers de config, notamment le démarrage du dæmon
sshd. (les clés de la session ne peuvent pas être écrites, et
sshd ne démarrera donc pas).
Ceci permet de modifier les fichiers dans /etc en remontant ce répertoire en ram.
mkdir /tmp/ramdisk mdmfs -s 256M md10 /tmp/ramdisk cp -a /etc/* /tmp/ramdisk umount /dev/md10 mount /dev/md10 /etc
La commande mdmfs sert à configurer et monter un système de
fichier en RAM. Par défaut ce système de fichiers est formaté en UFS (le
formatage standard FreeBSD).
mdmfs utilise le driver md (man 4 md)
On peut tester immédiatement le bon fonctionnement en démarrant le dæmon
sshd: /etc/rc.d/sshd onestart
Activer l'interface réseau
Maintenant que nous avons lancé sshd, il est temps d'activer
l'interface réseau.
/etc/rc.d/netif start
Ce qui active sur ma machine les interfaces: lo0 et em0.
dhclient em0 : pour obtenir une IP sur mon interface
ethernet.
Installons d'abord (nous réfléchirons ensuite)
Insertion du CD
J'ai utilisé l'image d'installation FreeBSD 9.0. Pour la récupérer, je vous fais confiance, si vous lisez ce blog, vous êtes de grandes personnes.
Pas grand chose à dire sur l'installation en elle même. Belle interface ncurses, qui me rappelle ma vieille Slackware, snif. Cela dit, c'est toujours mieux que la nouvelle «interface» d'installation de Arch. Sans vouloir être blessant.
Partitionnement
J'ai utilisé le partitionnement automatique, qui m'a paru très bien. À part vouloir partager le disque entre plusieurs OS, vous ne devriez pas avoir besoin de faire un partitionnement manuel.
À noter que le partitionnement automatique utilise GPT à la place de MBR.
Vous ne devrez donc surtout pas pas utiliser fdisk pour gérer
votre disque, mais bien gpart.
Voici le schéma de partitionnement, choisi automatiquement par l'installateur:
ada0 232GB GPT ada0p1 64Kb (freebsd-boot) ada0p2 228Gb (freebsd-ufs) / ada0p3 4Gb (freebsd-swap) none
Vous allez lire ici et là de longues dissertations sur un partitionnement très pointu, avec une partitions pour /usr, une pour /var, une pour /tmp (voire même celle-ci montée en ram), une cuillère pour /papa … ASSEZ ! Mettez tout sur la même partition, et montez éventuellement d'autres disques à partir de votre root.
Cela dit, vous faites comme vous voulez, mais ce n'est pas la peine de se compliquer inutilement la vie, les difficultés viendront bien assez vite. De toutes façons, à part ventiler les données volumineuses sur plusieurs disques (à l'époque où le tera-octet coûte 50€ ?), cela n'a aucun intérêt. Quand un disque claque, ce n'est pas avoir créé plein de partitions dessus qui servira à quoi que ce soit. Monter un RAID me parait plus judicieux (couplé bien entendu à des sauvegardes régulières et dans les rêgles de lard GRUIIIIIK!)
Et maintenant, quelques mots à propos du partitionnement sauce FreeBSD.
Nom des disques
- da = disque dur
scsi - ad = disque dur
atapiousata(contrairement à Linux où le SATA est nommé comme du SCSI). - ada = disque dur
sata(avec le nouveau driver).
Système de fichier
Sur FreeBSD 9, le système de fichiers par défaut est ufs2.
newfs sert à créer des systèmes de fichier.
Vocabulaire spécifique aux partitions en MBR
slice = c'est une partition au sens habituel (MS-Windows, Linux).
partition = c'est un segment dans la slice BSD.
Exemples:
- ada0s1 : premier disque dur, première partition primaire. Pas de numéro de partition, c'est donc un formatage MS-Windows ou Linux (si MS-Windows, surement le C:)
- ada0s5 : premier disque dur, première partition logique dans la partition étendue. Pas de numéro de partition, donc c'est un formatage MS-Windows ou Linux.
- ada0s1a : premier disque dur, première partition primaire,
premier segment dans cette partition (
s1
est le slice,a
est le numéro de partition au sens BSD).
Vocabulaire spécifique aux partitions en GPT
En partitionnement GPT, tout est beaucoup plus simple: la limitation MBR à quatre partitions primaires n'existe plus.
Nous avons droit à 128 slices par disque, ce qui devrait suffire à tout le monde.
À table
Ensuite, vous sélectionnez les groupes de paquets que vous désirez installer, et c'est parti. Comme il n'y a plus rien à faire avant un certain temps, vous pouvez vaquer à vos occupations.
(un peu plus tard)
Et voilà, c'est installé. Plus qu'à choisir un mot de passe pour root, configurer son/ses interface(s) réseau, et reboot.
Particularités à connaître (ou: «fini Linux, fiston»)
Déplacement dans le buffer d'une console.
Le déplacement dans un buffer n'utilise pas shift+PageUp/Down
, comme
sous Linux.
À la place, utilisez Arrêt Défil , qui activera le défilement de l'affichage.
Les touches du curseur, ou PageUp / PageDown assureront le déplacement dans le buffer.
Arrêt Défil à nouveau pour revenir dans le mode normal.
Ordre des paramètres.
Sous BSD, l'ordre des paramètres est important. Ils suivent directement la commande.
ls / -lha fonctionnait sous Linux, mais pas sous BSD.
ls -lha / fonctionnera partout (oh non, nous allons devoir réécrire tous nos scripts!)
Notez que find garde son comportement : les paramètres se
trouveront toujours à la fin, et ne suivront pas la commande.
Clavier en français sous la console
Il faut utiliser les capabilities.
Éditer le fichier /etc/login.conf et ajouter:
french|French Users Accounts:\
:charset=UTF-8:\
:lang=fr_FR.UTF-8:\
:tc=default:
Ce fichier doit être hashé pour être reconnu par le système. On procède ainsi (en root):
cap_mkdb /etc/login.conf
Une fois la «capabilitie» ajoutée, il faut la préciser dans le fichier password.
Pour éditer ce fichier, il faut utiliser la commande vipw
Ajoutez le nom de la «capabilitie» après les informations de groupe
jseb:$rTfM1337a$42Lee7WtF666B0fH.:1001:1001:french:0:0:User &:/home/jseb:/bin/tcsh
Et pour ne plus avoir à le faire pour les autres utilisateurs, on peut parait-il ajouter dans /etc/adduser.conf.
defaultclass = french
Ceci n'a pas fonctionné sur mon système et les nouveaux utilisateurs doivent
toujours être ajoutés dans le groupe «french» avec vipw. Peut-être un paramètre
à préciser à adduser, une lecture sommaire de la page man dédiée
ne m'en a pas appris plus. Ayant très peu d'utilisateurs sur mes machines,
j'avoue ne pas avoir cherché plus loin.
Si vous ne l'avez pas déjà fait à l'installation, précisez dans
rc.conf la disposition du clavier:
keymap="fr.iso.acc.kbd"
Et pour avoir changer la disposition clavier de façon ponctuelle:
kbdcontrol -l fr.iso.acc
Particularités de tcsh
Avoir less comme pager
Par défaut, les pages man sont lues avec more.
more sous FreeBSD permet d'avancer, de reculer, mais quitte à
la fin. Ahah! Démasqué! C'est un less en mode compatibilité avec
more.
Il suffit donc de changer la variable d'environnement PAGER.
Oubliez export , le shell par défaut est tcsh.
set ne vous aidera pas beaucoup non plus.
La bonne méthode est setenv PAGER less
Un prompt qui ressemble à quelque chose
set prompt="%n@%/%# "
De la couleur avec ls
Rajouter dans ~/.cshrc
setenv CLICOLOR yes setenv LSCOLORS "GeHxcxdxgxegedabagacad"
man csh pour les codes couleurs de LSCOLORS. Pour colorier par
extension, il vous faudra la version GNU de ls.
Avoir une touche DELETE qui supprime
Rajouter dans ~/.cshrc
bindkey "\e[3~" delete-char
Changer de shell
Vous êtes allergique à tcsh/csh, et vous voulez revenir à cette vieille daube de bash.
Pourquoi ne pas faire une tentative avec zsh ? Quoi qu'il en soit, voici de quoi changer de coquille.
Attention au changement de shell pour le compte root ! (ceci ne concerne que les afficionados des partitions multiples).
Si le shell de remplacement se trouve dans /usr, il y a un risque. En cas de problème, si /usr ne se trouve pas sur la partition racine, root ne pourra pas se logger!
Cela étant, vous avez deux méthodes pour changer de shell
(dans tous les cas, vous devriez autoriser votre shell dans le fichier /etc/shells )
- Lancer chsh . Ex:
chsh -s /usr/local/bin/bash root
ou
- L'invoquer depuis le fichier .cshrc . csh est le shell par défaut, il se lancera et invoquera ensuite le shell désiré.
Connaître son système
Vous avez toute une panoplie de commandes pour avoir des renseignements sur votre système.
uname -a: version et release de votre FreeBSD.- voir également
/var/run/dmesg.boot
- voir également
dmesg: messages du noyau (donc matériel detecté au boot et drivers chargés).
env/setenv: vos variables d'environnement pour le shell.
kenv: afficher les paramètres du kernel en cours d'exécution.
systat: vous permet de collecter des informations sur la charge système, les processus, les interfaces réseaux. C'est très puissant (man systat).
Mise à jour du système
Après une installation depuis un media un peu ancien (version 9.0 pour ma part), il peut être souhaitable (voire nécessaire) de procéder immédiatement à un upgrade du système.
Les upgrades système ne font pas appel aux commandes de gestion des paquets, et sont donc à part.
Il faut utiliser freebsd-update
Cette commande permet de faire une mise à jour binaire (pas de sources nécessaires).
Il est également possible de faire une mise à jour à partir des sources,
mais cela semble moins évident (voir make world dans le handbook,
mais cette méthode semble largement dépréciée).
À noter que si vous n'êtes pas dans votre bac à sable, il est plus prudent de faire une sauvegarde entière du système avant de vous lancer dans ce genre de mise à jour.
freebsd-update fetch install
Cette commande fait les mises à jour pour la release installée (9.0 pour moi).
Elle récupère (fetch) les mises à jour et les installe dans la foulée. Vous pourriez bien sûr le faire en deux étapes (fetch, puis install).
freebsd-update upgrade -r 9.1-RC1 freebsd-update install shutdown -r now freebsd-update install #cette fois, pour userland shutdown -r now #c'est pas vrai, faut encore rebooter ?!
Cette série de commande change de release. Attention, à l'heure où j'écris cela, la 9.1 est encore expérimentale, comme en témoignent les lettres «RC» (release candidate).
À part ça, il semble qu'il faille rebooter deux fois.
freebsd-update IDS
Cette commande récupère un fichier de checksums sur un serveur officiel (c'est souhaitable), et vérifie que les fichiers du système correspondent. Très cool pour vérifier que vous n'êtes pas rooté.
Bien entendu, dans la configuration de base, les fichiers que vous avez modifié vont générer une alerte.
Troubeulchoutine
root et password
Vous voulez changer le password de root, utilisez la commande
passwd
N'utilisez pas chpass
pour éditer le mot de passe!
Le champs Password attend un hash, et non pas un mot de passe en
clair! Vous ne pourriez plus vous relogger en root.
mot de passe root perdu
Booter en single user (menu 4 du boot pour FreeBSD 7.1)
Remounter la partition racine en RW : mount -u /
Mounter tous les systèmes de fichiers: mount -a
Lancer la commande passwd root et entrez votre nouveau mot de passe.
Rebootez.
Alors, ils mangent des enfants chez #freebsd ?
Si vous avez bien lu la doc, vous serez bien accueilli, et vous obtiendrez une réponse à vos légitimes questions de Linuxien.
La prochaine fois, je vous parle de la gestion des paquets. Croyez-moi, cela vaut bien un billet à part.
Commentaires
Si mes souvenirs sont bon, ce qui arrive parfois, la raison pour avoir toutes ces partitions par défaut c'est les perfs : le disque étant plus rapide à l'extérieur, ils mettent d'abord les partoches qui doivent être accédées rapidement (qui se retrouveront à la périphérie du disque je crois).
Sinon j'attend avec impatience tes prochains billets "Utiliser des modules kernel Linux sous FreeBSD", "Installation des outils GNU par défaut sous BSD", "Accéder aux partitions UFS depuis Linux", "Comment créer un chroot Linux sous BSD", "Les 10 erreurs à ne jamais commettre lorsqu'on installe des paquets" et finalement "Comment j'ai réinstallé Linux sur mon serveur"
Tu rigoleras moins le jour où ta belle Debian ne bootera plus pour cause de «systemd».
Là, je publierai ton billet «comment j'ai bloaté mon init avec une dépendance à dbus dans udev, et que syslog-ng a tourné binaire avant de planter suite à un 0day dans mysql». >:)
Cela dit, Linux reste imbattable pour le poste client. Côté serveur par contre, FreeBSD a un côté étrangement reposant.
<qutote>Il est également possible de faire une mise à jour à partir des sources, mais cela semble moins évident (voir make world dans le handbook, mais cette méthode semble largement dépréciée).</quote>
En fait, si la méthode 'make world' est bel et bien dépréciée, c'est parce qu'il vaut mieux séparer cette tâche en plusieurs étapes. Pour cela, il suffit de lire le Makefile dans /usr/src
Perso, ça marche depuis quasiment dix ans :D