Sexy FreeBSD HOWTO ================== iMil , 03/2004 Dernière mise à jour: 10/2006 Motivation ---------- L'installation d'un systeme FreeBSD ne releve pas de l'exploit, cependant l'utilisateur novice est rapidement tenté d'adopter une approche désordonnée juste après son système de base installé. Cette approche est particulièrement inapropriée aux Unix de type BSD, généralement construits sur un modèle au contraire très ordonné et procédural. Le document ci-present a pour but de passer en revue les quelques procedures simples à adopter immediatement apres l'installation. Astuce à l'attention de l'utilisateur pressé, vous pouvez compacter ce document à sa plus simple expression, à savoir uniquement les commandes à taper, sans les explications grace a la commande : # grep ^action: sexy-FreeBSD.txt A noter que cette methode vous privera d'explications susceptibles d'accelérer les performances de votre système. NE PAS FAIRE ! ------------ NE PAS ÉDITER /etc/passwd DIRECTEMENT Utilisez vipw si vous devez intervenir dans le fichier passwd, ce dernier est synchronisé a une db, une edition directe rendrait cette db inconsistante. Pour changer votre shell par defaut, utilisez plutot chsh de cette façon : chsh -s /usr/local/bin/bash user CVSup, ou comment tenir les sources de votre systeme à jour ----------------------------------------------------------- Pour les ports sous Freebsd 6.x: Il est plus simple d'utiliser portsnap pour recuperer et garder a jour les ports: un simple: action: mkdir /usr/ports # si il n'existe pas deja action: portsnap fetch Si il s'agit d'une installation initiale: action: portsnap extract Mise a jour: action: portsnap update Pour les sources et les ports: L'outil généralement utilisé pour garder son système FreeBSD à jour s'appelle cvsup, il se connecte à un serveur cvsup à préciser dans un fichier de configuration, et effectue un differentiel entre les fichiers recents situés sur le serveur et ceux présents à certains endroits de votre arborescence. Pour des informations détaillées sur CVSup, rendez-vous au chapitre CVSup du Hanbook FreeBSD http://www.freebsd.org/doc/fr_FR.ISO8859-1/books/handbook/cvsup.html La première chose à faire, c'est d'installer cvsup. Si votre FreeBSD est déjà connecté a l'Internet, faites sous root : sous tcsh (le shell par defaut) action: setenv PACKAGESITE "ftp://ftp.fr.freebsd.org/pub/FreeBSD/ports/i386/packages-current/Latest/" sous bash action: PACKAGESITE="ftp://ftp.fr.freebsd.org/pub/FreeBSD/ports/i386/packages-current/Latest/"; export PACKAGESITE puis action: pkg_add -vr cvsup-without-gui La 1ere ligne place la variable d'environnement PACKAGESITE qui determine le host et le chemin complet de votre miroir de ports binaires FreeBSD le plus proche. La seconde ligne télécharge et installe la version binaire de cvsup sans interface graphique, cela pour eviter les problèmes de dépendance sur X11. CVSup est maintenant installé. On pourra trouver les fichiers de configuration dans /usr/share/examples/cvsup. Depuis FreeBSD 6.1, csup est installé dans le système de base (dans /usr/bin). Il fait strictement la même chose que cvsup, mais est écrit en C. Il utilise donc aussi les fichiers de configuration de cvsup. Copiez les fichiers /usr/share/examples/cvsup/stable-supfile et ports-supfile par exemple dans /usr/local/etc. Le fichier stable-supfile determine : * Quels fichiers voulez-vous télécharger? * Quelles versions de ces fichiers voulez-vous? * D'où voulez-vous les télécharger? * Où voulez-vous les mettre sur votre machine? * Où voulez-vous mettre les fichiers d'état de votre machine? Le stable-supfile met à jour les fichiers relatifs au système lui même, i.e. les sources du userland ainsi que celles du noyau. Remplacez CHANGE_THIS.FreeBSD.org par cvsup.fr.FreeBSD.org (par exemple) action: sed -i '' s/CHANGE_THIS/cvsup.fr/ /usr/local/etc/stable-supfile A la ligne *default release=cvs tag=RELENG_4 Specifiez quelle branche de FreeBSD vous souhaitez mettre a jour, par exemple *default release=cvs tag=RELENG_4_9 # pour mettre a jour un FreeBSD 4.9 Si vous n'êtes pas sur de ce qu'il faut mettre ici, executez ceci : action: sed -i '' -E s/tag=RELENG[0-9_]+/tag=`sysctl kern.osrelease|sed -E s/.+\ \([0-9\.]+\)-.+/RELENG_\\\1/|sed s/\\\./_/g`/ /usr/local/etc/stable-supfile Cette ignoble ligne de commande placera la RELENG correspondant à votre système fraichement installé. Lancez maintenant CVSup comme suit : attention cvsup se trouve par defaut dans /usr/local/bin qu'il faudra donc rajouter a votre path action: cvsup -L 2 -g /usr/local/etc/stable-supfile Cette opération peut prendre un certain temps. Nous allons procéder de la même façon pour ports-supfile. Ce fichier met à jour les fichiers relatifs aux ports. Les ports FreeBSD sont une collection de reperoires definissant les methodes 'installation des logiciels portés sous FreeBSD. Il est GRANDEMENT RECOMMANDÉ de toujours passer par les ports pour installer un logiciel. Nous verrons comment réaliser ceci plus loin dans cette documentation. Pour des informations complètes sur le système de ports FreeBSD, rendez-vous à l'adresse suivante : http://www.freebsd.org/doc/fr_FR.ISO8859-1/books/handbook/ports-using.html Remplacez CHANGE_THIS.FreeBSD.org par cvsup.fr.FreeBSD.org (par exemple) action: sed -i '' s/CHANGE_THIS/cvsup.fr/ /usr/local/etc/ports-supfile Puis lancez CVSup comme suit : action: cvsup -L 2 -g /usr/local/etc/ports-supfile La collection des ports est maintenant à jour. Pour proceder à l'automatisation de cette tache, executez : action: CRON=/tmp/cron; crontab -l > $CRON && echo "30 04 * * * /usr/local/bin/cvsup -g /usr/local/etc/stable-supfile" >> $CRON && echo "30 05 * * * /usr/local/bin/cvsup -g /usr/local/etc/ports-supfile" >> $CRON && crontab $CRON Cette suite d'instructions place en cron l'execution de cvsup sur stable-supfile et ports-supfile tous les matins à respectivement 4h30 et 5h30. Les sources de votre système FreeBSD sont maintenant "up-to-date". Facultatif, rajouter ceci a /etc/make.conf: SUP_UPDATE= yes SUPFILE= /usr/local/etc/cvsup/standard-supfile PORTSSUPFILE= /usr/local/etc/cvsup/ports-supfile SUP= /usr/bin/csup Cela permet de mettre a jour les ports/src en allant dans /usr/ports et /usr/src respectivement et en tapant: make update make.conf, les preferences de make pour l'ensemble du systeme ------------------------------------------------------------- Le fichier /etc/make.conf agit sur l'ensemble des compilations et installations liées aux composantes de FreeBSD, les sources du userland, le noyau, mais aussi les ports. Par exemple : CPUTYPE?=i686 CFLAGS= -O -pipe CXXFLAGS+= -fmemoize-lookups -fsave-memoized mais aussi SENDMAIL_MC=/etc/mail/myconfig.mc ou encore NO_X=true # avec cette option, aucun ports ne dependra de X11 Bon nombre de directives du make.conf se trouvent dans /usr/share/examples/etc/make.conf Voici l'exemple du make.conf du serveur principal FreeBSD.org fourni par Sebastien Gioria : MAKE_KERBEROS5= yes USA_RESIDENT= YES KERNCONF= FREEFALL CPUTYPE= p3 NO_LPR= true NO_I4B= true NOUUCP= true SENDMAIL_CF= freefall.cf NO_MODULES= grr NOPROFILE= true COMPAT4X= YES MASTER_SITE_BACKUP= ftp://ftp-master.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ MASTER_SITE_OVERRIDE?= ${MASTER_SITE_BACKUP} MASTER_SITE_LOCAL= ftp://ftp-master.FreeBSD.org/pub/FreeBSD/ports/local-distfiles/%SUBDIR%/ BOOT_PXELDR_PROBE_KEYBOARD= true AMANDA_SERVER=backup.freebsd.org AMANDA_GNUTAR_LISTDIR=/var/amanda/gnutar-lists WANT_FREEFALL_CFG=YES JADETEX=yes portupgrade, la gestion évoluée de ports FreeBSD ------------------------------------------------ Maintenant que vos ports sont à jour, rendez vous ici : action: cd /usr/ports/sysutils/portupgrade et tapez action: make install clean C'est de cette façon qu'on installe "normalement" un port sous FreeBSD. Le seul probleme de cette methode c'est qu'elle peut potentiellement rapidement peupler votre database de ports avec de multiples versions du meme logiciel. C'est là qu'intervient portupgrade, ce formidable logiciel permet en effet de gérer les dépendances des ports et upgrade proprement d'une version à l'autre. portupgrade étant installé, tapez : action: portsdb -Uu afin de mettre à jour la database INDEX des ports, cette operation peut prendre un certain temps. Pour installer un port, par exemple sudo, tapez indifferemment action: portupgrade -N sudo ou bien action: portinstall sudo Pour upgrader ce port, tapez action: portupgrade sudo Pour mettre a jour les logiciels dépendant du port en question tapez : action: portupgrade -r sudo Pour mettre a jour les logiciels dont dépend le port en question tapez : action: portupgrade -R sudo [addon par sinese] Veillez a regulierement lire le fichier /usr/ports/UPDATING, ce dernier contient des informations parfois indispensable au bon deroulement d'un upgrade de port. [addon par Paul Gaborit] Pour lister les ports a mettre a jour, utilisez la commande : action: portversion -l '<' make search ----------- Afin de savoir si un logiciel a été porté, faites : action: cd /usr/ports action: make search name=logiciel Afin de faire une recherche par mot clé dans les ports, faites : action: cd /usr/ports action: make search key=recherche Il est evidemment possible d'effectuer ces recherches dans des sous répertoires des ports, par exemple : action: cd /usr/ports/mail action: make search key=spam Mise à jour du système ---------------------- Vous aurez probablement envie de mettre à jour votre noyau et pourquoi pas son userland en suivant à la lettre les inscructions situées ici : http://www.freebsd.org/doc/fr_FR.ISO8859-1/books/handbook/makeworld.html Pour personnaliser votre noyau, rendez vous dans /usr/src/sys/i386/conf et copiez GENERIC en MONNOYAU par exemple. Avant de vous lancer dans l'opération d'upgrade du systeme n'oubliez pas de bien lire les recommandations du fichier /usr/src/UPDATING. N'oubliez pas que la procédure se fait dans l'ordre suivant : # make buildworld # make buildkernel KERNCONF=MONNOYAU # make installkernel KERNCONF=MONNOYAU # reboot > boot -s (pour demarrer en mode single user) --- [precision apportée par Gérald Niel] ATTENTION, en mode single user votre clavier fonctionne en QWERTY [update par Paul Gaborit] Pour booter avec un clavier AZERTY / Francais, ajoutez a votre fichier de configuration du noyau : options ATKBD_DFLT_KEYMAP makeoptions ATKBD_DFLT_KEYMAP=fr.iso.acc puis recompilez et installez comme l'explique ce chapitre voir les conseils clavier de SClo plus bas --- # mergemaster -p # mount -u -a (pour passer / en read/write) # make installworld # mergemaster # reboot Maintenance et configuration post-install ----------------------------------------- Gaetan Miont nous rappelle à juste titre que /stand/sysinstall permet à tout moment d'intervenir sur la configuration de base de notre système FreeBSD, par exemple pour changer son keymap ou encore installer des packages binaires depuis le CDROM d'installation ou bien des serveurs distants. La console sur le port serie ---------------------------- Par defaut, votre noyau FreeBSD est capable d'afficher sur le port serie grace a cette ligne du fichier de configuration du noyau : device sio0 at isa? port IO_COM1 flags 0x10 irq 4 Pour que les messages de boot du noyau s'affichent sur la console serie, tapez : action: echo "-h" > /boot.config Ceci activera la sortie serie. ou encore action: echo "-P" > /boot.config Ceci activera la sortie serie uniquement si aucun clavier n'est branché à la machine. Pour accéder au getty depuis le port serie, faites : action: sed -i '' -E s/ttyd0\(.+\)dialup.+off/ttyd0\\1vt100\ on/ /etc/ttys puis action: kill -HUP 1 Vous devriez être capable, avec minicom, screen, cu, kermit ou n'importe quel autre outil de comunication serie, de visualiser la mire login: en vous connectant via un cable NULL-modem sur le port serie. ATTENTION, il est n'est pas rare qu'il faille remplacer ttyd0 par cuaa0 dans ttys pour que la communication serie fonctionne. Personne à ce jour n'a su me donner une réponse cohérente sur le sujet, si vous avez une quelconque explication je suis à l'ecoute :) sysctl, afficher ou placer des variables du systeme --------------------------------------------------- Nombre d'informations relatives au systeme, et plus particulièrement au noyau, peuvent etre lues ou ecrites via l'outil "sysctl". Tapez par exemple : action: sysctl hw pour obtenir toutes les informations relatives au hardware ou encore : action: sysctl hw.clockrate pour afficher la frequence de votre processeur Vous pouvez visionner l'ensemble des valeurs en tapant action: sysctl -a|more Pour modifier une valeur, vous utiliserez le switch -w, par exemple pour activer le forwarding ip, tapez : action: sysctl -w net.inet.ip.forwarding=1 Attention, le forwarding IP sera preferablement activé au demarrage dans le fichier /etc/rc.conf via la directive gateway_enable="YES" Pour les valeurs non-paramétrables dans /etc/rc.conf, utilisez le fichier /etc/sysctl.conf pour placer des variables sysctl au démarrage. Par exemple : $ cat /etc/sysctl.conf net.inet.tcp.sendspace=32768 net.inet.tcp.recvspace=32768 net.inet.tcp.drop_synfin=1 net.inet.tcp.restrict_rst=1 Clavier [contribution de SClo] ------- Pour ceux qui ont un clavier Azerty USB (et non pas PS/2) ce sont les options suivantes qu'il faut mettre dans le noyau pour avoir un clavier Azerty en mode single (par contre, aucun effet pour chacune des configs lorsque le système est dans le loader ; dans le cas où on veut booter un autre kernel par exemple) options UKBD_DFLT_KEYMAP makeoptions UKBD_DFLT_KEYMAP=fr.iso.acc Pour faire reconnaitre un clavier a votre FreeBSD alors qu'il n'a pas boote avec (probleme classique avec les serveurs) : - FreeBSD-4.x il faut recompiler le kernel en modifiant le flags du device kbd en supprimant le 0x1 # atkbdc0 controls both the keyboard and the PS/2 mouse device atkbdc0 at isa? port IO_KBD ### device atkbd0 at atkbdc? irq 1 flags 0x1 device atkbd0 at atkbdc? irq 1 - FreeBSD-5.x il faut ajouter la ligne suivante dans /boot/loader.conf (et rebooter) hint.atkbd.0.flags="" De cette façon, au boot il y aura toujours un device kbd0 (visible dans le dmesg.boot) y compris si le bios n'a pas vu de clavier ! Pour ceux qui utilisent _en même temps_ une console série, il faut aussi indiquer au kernel de s'exprimer sur les 2 consoles en mettant le flag '-D' dans le fichier /boot.config (d'habitude je ne met que '-P') En cas de soucis clavier, il est possible de jouer avec kbdcontrol (via ssh) kbdcontrol -K, pour détacher la console kbdcontrol -k kbd0 < /dev/console, pour la rattacher -------------------------------------------------------------------------------- Note: je ne garantis aucunement que les commandes présentes dans ce document sont 100% fiables et je décline toute responsabilité quand à la perte eventuelle de données qu'elles pourraient engendrer. Note: N'hésitez pas à me proposer des diffs sur cette doc, j'ajouterai volontiers vos contributions. Merci à viny, eagle42, jtbjid, Reefab, gab, prae, Ralph, SClo, _mat... iMil