I/ DEMARRAGE. boot ---- - chargement des modules noyau / "device hints" - /boot/loader.conf module : périphérique ou fonctionnalité (système de fichier, ...). loader : programme stand-alone en 4th : possibilité de spécifier un noyau, des modules, des 'hints'. (scriptable) - exécution du noyau. => initialisation, scan du matériel, création du processus 1 puis recouvrement avec /sbin/init - mais ? Puisque le loader doit accéder au disque, au clavier comment fait-il puisque le système n'est pas encore fonctionnel ? => bibliothèque 'stand-alone' pour ces périphériques, hors noyau. Initialisation. --------------- Bien qu'au lancement d'init le système est fonctionnel (ie on a un Unix qui s'exécute avec la racine montée en ro), il reste des opérations à effectuer pour avoir un système opérationnel et utile : - montage des systèmes de fichiers. - initialisation réseau - démarrage des démons. init(8) a deux rôles : lancer le script /etc/rc et initialiser les ttys. (différence system V : pas de 'run level') démarrage en single-user => aucune action, exécution d'un shell avec '/' monté en ro. démarrage normal => exécution du script /etc/rc (si pb => retour en single-user) scripts de démarrage. rc(8) continue le démarrage, le paramètrage se faisant dans /etc/rc.conf - /etc/defaults/rc.conf Historiquement (FreeBSD < 5, OpenBSD), /etc/rc faisait tout le travail avec les spécificités locales dans /etc/rc.local => manque de souplesse : introduction du shémas 'rc-ng' (pompé sur NetBSD). Rc-ng : décomposition en scripts par fonctionnalité : /etc/rc.d/*, rc ne faisant plus qu'appeler ces scripts. L'ordonnancement est calculé par rcorder(8). Chaque script est appelé avec un paramètre start au démarrage et stop au shutdown, suivi éventuellement d'autres paramètres. Ensuite le script effectue les actions kivontbien en fonctions des paramètres. ex : ---- ordonnancement : rcorder /etc/rc.d/* démarrage d'un démon : /etc/rc.d/usbd start usbd already running? (pid=827). # /etc/rc.d/usbd stop Stopping usbd. # /etc/rc.d/usbd start et si ? /etc/rc.conf : usbd_enabled="NO" /etc/rc.d/usbd start (aucune action), stop : aucune action. autre exemple : paramétrage d'une carte éthernet: /etc/rc.d/netif Démarrage des applications tiers -------------------------------- idem /etc/rc.d mais situés dans /usr/local/etc/rc.d (voir même /usr/X11R6/etc...) (ici questions ?) Montages -------- Systèmes de fichiers. --------------------- Les systèmes de fichiers servent à stocker des fichiers (ben ouais). FreeBSD reconnait plusieurs systèmes de fichiers (UFS, FAT, ext2, NTFS, NFS, smbfs, ...). L'arborescence des systèmes de fichiers est unique (Unix), sous la racine. Le fs utilisé est l'UFS2 (Unix file system) qui est un dérivé de l'UFS (FreeBSD<5) et du FFS (Fast Files System) de BSD. UFS supporte en outre : les 'soft-updates' (option), et les 'snapshots'. Le principe des soft-updates est d'ordonner les modifications du système de fichiers dans le but que l'état du fs soit toujours cohérent (en cas de crash / panne de courant / reset). Un instantané (snapshot) consiste à faire un cliché du fs à un instant 't'. Il est possible ensuite de monter ce snapshot pour ré-accéder au fichiers contenus dedans dans l'état où ils étaient à l'instant 't'. La prise d'un snapshot est très rapide (quelques secondes pour plusieurs Go), le noyau maintien les différences entre un instantané et le fs associé. Fs virtuels : ------------- Les fs virtuels ne permettent pas d'accéder à des fichiers réels, mais à des informations présentées sous formes de fichiers. devfs : ------- Ce fs contient les noeuds de périphériques, traditionnellement placés sous /dev. Avant FreeBSD < 5, /dev n'était pas virtuel. Maintenant les noeuds sont ajoutés ou supprimé dynamiquement par le noyau en fonction des périphériques présents. La représentation peut-être changée à l'aide de règles (/etc/devfs.rules) : possibilité de changer le propriétaire / groupe d'un noeud, changer les permissions, créer des liens symboliques, cacher un noeud. procfs : -------- Comme sous Linux, ce fs permet l'accès aux informations des processus, contrairement à Linux (?) il n'est pas vraiment nécessaire sous FreeBSD et n'est pas monté par défaut. linprocfs : Equivalent au /proc Linux, pour l'émulation Linux. ----------- Le montage. ----------- Le montage des fs est effectué très tot à l'initialisation (c'est critique). Le montage est effectué en deux phases : montage des fs locaux, puis des fs distants (NFS) parce qu'il faut attendre l'initialisation du réseau. Au démarrage, les systèmes de fichiers spécifiés en 'auto' dans /etc/fstab sont vérifiés puis montés. Si le fs n'est pas marqué clean, fsck est exécuté sur le système de fichier. => problème grave : arrêt et demande d'intervention humaine. => erreur récupérable : montage du fs et vérification en arrière plan (seulement en UFS). Mount est décomposé en plusieurs commandes en fonction du type de fs. mount_ est assez intelligent pour charger le module noyau qui va bien à la demande. Il est possible pour un utilisateur de monter un fs sous un répertoire qu'il possède (propriétaire) sans être root. (dépend d'une variables sysctl). RESEAU. ------- interfaces ---------- La commande ifconfig(8) permet de configurer les interfaces réseaux. Une interface réseau peut-être une carte ethernet/wifi, un tunnel (tun), un pont (bridge)... En général la configuration des interfaces est spécifiée dans /etc/rc.conf et les scripts se chargent du paramétrage. ex: ifconfig_fxp0="inet 192.168.0.4 netmask 255.255.255.0" # interface fxp0 ifconfig_fxp0="DHCP" # configuration par dhcp (dhclient) ifconfig_iwi0="DHCP WPA" # interface iwi0 : configuration par dhcp et wpa_supplicant Routes. ------- Commande route(8) pour manipuler les routes, netstat(1) -r pour les visualiser. Résolution de nom ----------------- La résolution de nom s'effectue comme ailleur par /etc/resolv.conf, /etc/service (resolution des noms de service) et /etc/hosts. /etc/nsswitch.conf permet de configurer les 'sources' pour les résolutions de noms, mais aussi pour d'autres données (utilisateur, groupe). Filtres de paquets (pare feu) / Nat / ALTQ ------------------------------------------ FreeBSD supporte trois pare-feux différents : Ip Firewall (ipfw). Ip Filter (ipf) Packet Filter (pf) Pour ipfw et ipf, chacun à son module de NAT : ipfw => natd; ipf => ipnat le NAT est incorporé dans pf. ALTQ permet de gérer des queues de paquets (priorités), dummynet également mais seulement avec ipfw. (se reporter à la doc pour la configuration) DEMONS DE BASES. ---------------- Cron : le démon crond se charge des taches périodiques. /etc/crontab : taches 'système' (lancement d'at, scripts periodic) crontab -e pour éditer la table d'un utilisateur particulier Syslog : Le démon syslogd effectue la journalisation /etc/syslog.conf : paramétrage Newsyslog : rotation des journaux. /etc/newsyslog.conf. note: Newsyslog n'est pas un démon, il est appelé par cron. MTA : par défaut sendmail /etc/mail/mailer.conf fichier 'enrobant'. devd : démon de lecture d'évenements sur des périphériques. devd permet de réagir à des changements d'états sur des périphériques : - insertion / suppression d'un périphérique - changement d'état sur une interface ethernet (up / down). - notification de l'acpi (température / alimentation) /etc/devd.conf : paramétrage. exemple : souris usb. usbd : supervision des attachements / détachements sur le bus USB. /etc/usbd.conf exemple : souris usb (ben ouais). moused : gestion des souris. Ce demon gère les souris, il peut gérer plusieurs souris et ne présente au système qu'un seul périphérique (/dev/sysmouse - à utiliser tel quel dans xorg.conf par ex). /etc/rc.conf powerd : utilitaire de controle de l'alimentation / ajustement des performances (acpi). Ce démon ajuste les performances du processeur en fonction de l'état de l'alimentation. /etc/rc.conf DIVERS: ------- - utilisateurs et groupes (login.conf ici ?) - sysctl - niveaux de sécurité. - hiérarchie du système de fichiers ( man hier ) ------------------------------------------------------------------------------------ "La licence BEER-WARE" (Révision 42) : Patrick Lamaizière