URL: https://linuxfr.org/news/a-la-decouverte-de-freebsd Title: À la découverte de FreeBSD Authors: Kwiknclean bubar🦥, Joris Dedieu, palm123, Benoît Sibaud, zurvan, theojouedubanjo, olivierweb, Davy Defaud, David Marec, Lawless, David Demelier, Adrien Dorsaz, Pierre Jarillon, Ysabeau 🧶 et bobble bubble Date: 2020年02月26日T17:56:07+01:00 License: CC By-SA Tags: freebsd, bsd, xfce, debian, slackware, ghostbsd et midnightbsd Score: 62 _Une petite dépêche collaborative et complétement subjective, pour présenter de façon concrète les aspects les plus « importants » de ce système d’exploitation et ainsi susciter des vocations à l’essayer et l’adopter._ FreeBSD est un système d’exploitation de type UNIX fonctionnant sur des architectures Intel, PowerPC, ARM et encore pour un temps SPARC64. Il comprend tout ce qu’il faut pour compiler, installer, configurer et démarrer un système sachant faire du réseau, ainsi que l’infrastructure pour installer des logiciels tiers.> « _We came for the licence, we stay for the efficiency_ » [[Netflix](https://youtu.be/veQwkG0WdN8?t=1163)] ---- [Site de FreeBSD](https://www.freebsd.org/) [Le bugzilla](https://bugs.freebsd.org/bugzilla/) [Les pages de manuel de toutes les commandes FreeBSD](https://www.freebsd.org/cgi/man.cgi?manpath=FreeBSD+12.1-RELEASE+and+Ports) [Netflix and FreeBSD Using Open Source to Deliver Streaming Video [vidéo]](https://www.youtube.com/watch?v=vcyQBup-Gto) ---- Pour qui ? ========== FreeBSD n’est pas seulement un système d’exploitation exotique pour les curieux, les sysadmins, les fans de Slackware, les allergiques à systemd, pour ceux qui ont envie de retrouver ce côté « roots » de leurs premières années sous Linux ou de laisser pousser leurs poils. C’est un système d’exploitation inspiré d’Unix, sobre, d’une grande stabilité dans le temps et disposant d’une licence uniforme et permissive. Pour quels usages ? =================== FreeBSD est historiquement destiné aux serveurs, et même s’il est simple d’installer un environnement de bureau, il existe également des variantes proposant une distribution complète axée sur l’utilisation en tant que bureau. Traditionnellement, les grands usages sont le stockage et le réseau, mais aussi dans l’embarqué. FreeBSD s’installe sur du matériel dédié ou dans des machines virtuelles sur à peu près tous les hyperviseurs du marché (il fonctionne aussi sous VMWare mais les VMWare Tools ne seront pas vu comme « _green_ » par vSphere), également disponible en modèle d’installation chez les fournisseurs de « _cloud_ » les plus courants. Il offre une excellente alternative à GNU/Linux lorsqu’on a besoin d’une licence plus libre ou simplement de mitiger les risques avec une certaine diversité. Mais qui contribue au projet et se sert de FreeBSD ? ==================================================== Une part importante du code provient [d’autres projets libres](https://svnweb.freebsd.org/base/head/contrib/). Des dizaines de milliers de personnes à travers le monde se servent de FreeBSD quotidiennement pour héberger des services ou même comme système d’exploitation de bureau. Parmi les grands utilisateurs, on citera Netflix, Yandex et Mail.ru, mais également la majorité des constructeurs de baies de stockage (NetApp et EMC), les équipements Juniper ou Stormshield, la PS4 de Sony, la Nintendo Switch, les serveurs de cache de Netflix ([ces derniers ont apporté d’énormes contributions sur la pile réseau](https://www.phoronix.com/scan.php?page=news_item&px=Netflix-NUMA-FreeBSD-Optimized))... Une [fondation](https://www.freebsdfoundation.org/) s’occupe de financer la vie du projet et un certain nombre de développements. Le reste du code provient soit de contributions issues d’entreprises (Intel, Dell EMC, NetApp, DARPA, Netflix, Gandi, IxSystems et Apple en son temps), de projets universitaires ou encore de contributeurs bénévoles. Les contributions ne se font pas seulement en lignes de code mais sont également pécuniaires, les trois plus gros sponsors de 2020 sont [ARM, NGINX et Netflix](https://www.freebsdfoundation.org/donors/). Comment contribuer ? ==================== [Contribuer à la documentation](https://www.freebsd.org/doc/en_US.ISO8859-1/articles/contributing/index.html) est par exemple un bon point d’entrée dans un projet, soit en effectuant des traductions soit en affinant la version dans la langue de votre choix. Une aide détaillée, [ici en anglais](https://www.freebsd.org/doc/en_US.ISO8859-1/books/fdp-primer/book.html), est fournie afin de produire la qualité requise pour la documentation FreeBSD. Vous pouvez également [devenir le mainteneur](https://forums.freebsd.org/threads/adopt-an-orphaned-port-project.36243/) d’un paquet de votre choix. Les points subjectivement positifs ================================== - la licence BSD très libérale ; - la documentation, l’un des gros points forts du projet ; - la communauté compétente et disponible :-) ; - la simplicité d’administration, sous FreeBSD tout est bien rangé aux mêmes endroits et finalement tout est très simple à administrer ; - l’hyper-stabilité (en usage serveur) ; - ce côté « la prod avant le _hype_ » : il s’agit, je pense, du point qui m’attire le plus dans ce système d’exploitation ; il y a cette sensation que les choses ne seront pas « cassées » demain par un changement dans le fonctionnement du système, la possibilité de mettre en place ses services configurés aux petits oignons, la création d’une politique de sauvegardes, quelques mises à jour de temps en temps et au revoir, à dans dix ans ; - les performances réseau à la pointe ; - la consommation des ressources [sobriété] ; - Dtrace / Flamegraph ; - le cloisonnement par _jails_ ; - le mode de gestion du projet en « cathédrale » (?!) ; - la cohérence globale du système ; - les sauvegardes super simples : `rc.conf`, `pf.conf` (si vous utilisez PF comme pare‐feu), vos _jails_, votre liste de paquets, vos données et vous avez un environnement à l’épreuve des balles. Les points subjectivement négatifs ================================== - la compatibilité du matériel moderne (plus sur les postes personnels) ; - les outils de visioconférence modernes pas vraiment pris en charge (genre Zoom) ; - hum, il est où ~~Docker~~ / Podman ? - le mode de gestion du projet en « cathédrale » ; - tout de même moins avancé que GNU/Linux en usage bureautique, KDE est réservé à ceux qui veulent utiliser la liste de discussion, très active d’ailleurs ; cela dit, pour qui veut un environnement de bureau léger, Xfce par exemple, reste extrêmement stable et totalement utilisable ; pour les plus sobres d’entre vous, la plupart des gestionnaires de fenêtres « pavants » existent également ; - beaucoup de « _wrappers_ » _jail_ en fonction du système de fichiers utilisé, pas du tout indispensables au demeurant ; - pas sûr que ça soit spécialement un système d’exploitation pour les joueurs non plus ; - la syntaxe de l’outil de rotation des journaux _newsyslog_ un peu plus alambiquée que sous GNU/Linux, quand même. L’installation ============== Vous avez déjà installé une Debian ? Vous saurez donc installer FreeBSD. Plus sérieusement, dès les premières étapes à l’installation, le système annonce la couleur. L’assistant d’installation (BSDinstall) fait dans le strict minimum et, fait surprenant, vous ne démarrez pas avec le shell Bash par défaut. Mais avec `/bin/sh`, `/bin/csh` ou `/bin/tcsh`. Cela dit, vous pouvez bien évidemment installer `bash`, `zsh` ou le shell de votre choix avec `pkg`. À la fin de l’installation, FreeBSD vous proposera diverses options de « durcissement ». Si vous n’avez pas de contraintes particulières, activez‐les toutes ! FreeBSD vous propose, nativement et par défaut, le choix entre deux systèmes de fichiers : ZFS ou UFS. À titre personnel, hormis pour un usage pur NAS, je n’utilise pas ZFS qui, je trouve, ralentit considérablement les accès au disque sur les configurations avec un seul disque même sur SSD. De plus, même si de nombreux efforts ont été réalisés avec les versions, la consommation mémoire reste nettement supérieure à celle d’UFS. Une fois l’installation terminée, je vous invite à regarder le retour de la commande `free` ou l’usage disque d’un `df -h` qui vous prouveront par leur consommation de ressources ridicule que vous partez sur une bonne base. Les pare‐feux ============= FreeBSD possède trois pare‐feux. Certains pensent que c’est trop, mais FreeBSD n’aime pas casser la compatibilité et beaucoup de personnes les utilisent encore. Il existe : - le vénérable pf(4) d’OpenBSD ; - le plus minimaliste IPFW ; - et le plus ancien IPFILTER. Par exemple avec _pf_ (Packet Filter étant le seul que je connais, j’aurais du mal à vous parler des autres), une fois encore sous FreeBSD la configuration du pare‐feu se définit autour d’un fichier (ici `/etc/pf.conf`). Packet Filter mériterait à lui seul un article complet, cependant voici ce que l’on peut retenir **sa syntaxe est très claire** : - variables : cela vous permet d’affecter des variables à vos ports déclarées dans votre fichier de configuration ; - un système de table : très pratique, vous pouvez charger dynamiquement des tableaux d’adresses IP et les comparer par rapport à différentes règles, ajouter supprimer une adresse IP dans cette table selon des conditions (attaque en force brute, etc.) ; - redirection avant règles de filtrage ; - filtrage et traduction d’adresse réseau (NAT) ; - sait gérer de l’IPv4 et de l’IPv6 dans la même configuration. PF propose une adhérence forte avec _tcpdump_ qui vous permettra de véritablement jouer l’œil de Moscou sur votre machine. Il est en effet possible de déclarer une interface virtuelle ne pouvant être lue que par _tcpdump_ vous permettant d’analyser tout ce qui entre ou sort de votre machine (ou qui tente de), les administrateurs réseau adoreront. Petite remarque côté réseau : sous FreeBSD, la commande `netstat -avecpleindoptions` existe mais une alternative se présente, `sockstat -l4`, et je la trouve plus simple à retenir pour avoir quelque chose de lisible. Une autre commande dans la lignée des outils en [..]top existe, il s’agit de `pftop`, qui vous donne en temps réel l’activité de votre pare‐feu. /etc/rc.conf et la gestion des services ======================================= Fichier « angulaire » du système d’exploitation, ce dernier vous permet de configurer la quasi‐totalité de votre système. Réseau, nom d’hôte, service au démarrage... Exemple de contenu d’un fichier `rc.conf` : hostname="MyBSD" keymap="fr.acc.kbd" # Config réseau re0 est ici l’eth0 de Linux (en fait le nom diverge selon le modèle de votre contrôleur réseau) ifconfig_re0="inet 192.168.0.50 netmask 255.255.255.0" defaultrouter="192.168.0.100" sshd_enable="YES" ntpdate_enable="YES" # Mode Gateway enable si l’on veut avoir un sous-réseau de jails par exemple et NATer gateway_enable="YES" # Création d’une interface virtuelle pour les jails cloned_interfaces="lo1" # Notez la façon dont sont déclarées les adresses IP virtuelles, ces IP seront attribuées aux jails # Ces dernières bénéficieront de plus de la protection du pare-feu. ipv4_addrs_lo1="172.16.0.1-8/24" pf_enable="YES" iocage_enable="YES" L’un des gros avantages de la configuration par un fichier unique est qu’il suffit de sauvegarder ce fichier pour sauvegarder votre configuration. Il vous suffira donc de déplacer ce fichier vers une installation toute neuve pour retrouver votre machine (c’est quand même loin d’être suffisant il faut quand même s’assurer que l’interface réseau est la même, installer les paquets, etc.). Ce fichier, peut également être fragmenté dans ```/etc/rc.conf.d/```, ce qui facilite l’automatisation des configurations et leur portabilité en fonction des besoins, par l’atomisation de celles‐ci. La commande sysrc ----------------- Il y a deux façons d’éditer ce fichier, soit _vim_ (ou votre éditeur de fichier favori) soit en utilisant la commande `sysrc`. Cette dernière se révélera plus pratique dans le cas d’usage, par exemple, d’un outil de déploiement automatique de type Ansible ou en utilisant un script. Pour avoir une synthèse du contenu du fichier `rc.conf` : sysrc -a clear_tmp_enable: YES cloned_interfaces: lo1 defaultrouter: 192.168.0.100 dumpdev: NO gateway_enable: YES hostname: frontal ifconfig_re0: inet 192.168.0.50 netmask 255.255.255.0 iocage_enable: YES Je souhaite changer mon nom d’hôte : # sysrc hostname=MonBSD hostname: MyBSD -> MonBSD La commande `service`, quant à elle, vous permet de gérer l’état d’un service. Avoir la liste des services qui tournent sur votre machine se fait par exemple avec la commande `service -e` : /etc/rc.d/hostid /etc/rc.d/cleanvar /etc/rc.d/devd /etc/rc.d/pf [...] /etc/rc.d/ntpdate /etc/rc.d/nfsclient Et pour redémarrer un service (ici `sshd`) : `service sshd restart` Les jails et leurs différents wrappers ====================================== Les jails sont en quelque sorte du `chroot` sous stéroïde, puisqu’il s’agit d’un espace de système de fichiers cloisonné bénéficiant d’une adresse IP, virtuelle, ou « NATée » à l’intérieur d’un sous‐réseau propre à l’hôte qui héberge. Proposant en plus diverses options avancées de cloisonnement processeur et mémoire, et même de quotas d’espace disque avec ZFS. À l’intérieur d’une _jail_, il est possible de réinstaller un système complet en allant jusqu’à faire tourner des _jails_ à l’intérieur d’une _jail_ et également des pare‐feux. Ou, à l’opposé, de limiter énormément de choses allant du _ping_ (désactivé par défaut) à un montage de disque ou un partage NFS externe. Il existe beaucoup de _wrappers_ pour les _jails_ ([Qjail](https://www.freebsd.org/cgi/man.cgi?query=qjail), [eZjail](https://www.freebsd.org/doc/handbook/jails-ezjail.html), iocage...) et pour la plupart très simples, s’agissant de scripts shell, peu de code et très faciles à maintenir. Cela dit, pour qui veut réellement comprendre le mécanisme des _jails_ en profondeur, il est tout à fait possible d’utiliser les _jails_ sans aucun _wrapper_. Il y a globalement deux écoles selon le système de fichiers que vous utilisez (UFS ou ZFS). Votre _wrapper_ devra prendre en compte l’adhérence à ZFS pour une prise en charge des fonctionnalités de ce dernier. [iocage](https://github.com/iocage/iocage) semble devenir le standard de fait avec ZFS (car porté et choisi par FreeNAS). Cependant, ce dernier n’est pas exempt de quelques bogues mineurs (lui n’est pas un script sh...), il bénéficie toutefois grâce à FreeNAS de beaucoup de cas d’usage et son projet sur GitHub est très actif. Pour qui veut du parfaitement stable, le combo UFS + qjail fait des merveilles : rapide, fiable, sauvegarde et restauration de façon ultra véloce sur un SSD. Qjail est d’ailleurs un _wrapper_ tellement fiable qu’il n’a plus reçu de mise à jour depuis 2017... Courriel envoyé au développeur pour avoir confirmation : « _Of course it’s maintained, but there is no bug!_ » _Keep It Simple!_ Il existe également le projet [CBSD](https://www.bsdstore.ru/en/about.html) : un gestionnaire qui prend en charge tous les systèmes de fichiers et gérant tout ce que FreeBSD a à proposer en termes de virtualisation. Il est évidemment possible de réaliser de la virtualisation de type KVM avec [Bhyve](https://bhyve.org/), je dois avouer que je n’ai jamais eu à me servir de cet outil jusqu’ici. Le système de paquets `pkg` =========================== [https://www.freshports.org/](https://www.freshports.org/) Premier point intéressant, _pkg_ ne gère que les paquets, en aucun cas il ne s’occupe de mettre à jour le système. [C’est aussi quelque chose qui risque de changer, car il y a beaucoup de discussions à ce sujet pour que _base_ puisse être un paquet]. Actuellement, c’est une autre mécanique qui s’occupe de cela `freebsd-update`. Par conséquent, `pkg update` ne mettra à jour que vos logiciels tiers et pas le système d’exploitation, contrairement par exemple à une Debian où `apt` met à jour à la fois le système et les logiciels. _pkg_, apparu sous FreeBSD 9.1, est désormais le logiciel de gestion de paquets officiel de FreeBSD. Les dépôts officiels proposent désormais près de 30 000 paquets compilés pour FreeBSD. Les paquets sont très à jour, il n’y a pas de système de « gel » par branche de version, vous êtes en simili publication en continu (_rolling release_) sur les versions de production de chaque logiciel. Il faut cependant que le logiciel soit empaqueté par le mainteneur. Vous y trouverez par exemple à ce jour et peu importe la version de FreeBSD que vous utilisez : - php7[1-4] ; - nginx-1.18.1 ; - gitea-1.10.4 ; - mariadb-10-[1-4]; - bash-5.0.16 ; - openssl-1.1.1d ; - python37-3.7.6 ; - zsh-5.7.1 ; - vim-console-8.1.2372. _N. B. — Les versions auront forcément bougé durant la rédaction, il faut retenir que vous aurez les dernières versions stables, les mainteneurs sont très réactifs._ FreeBSD est un système d’exploitation qui offre une sensation de cohérence dans la gestion des paquets. De ce fait, une fois installé, la configuration de vos services (Apache, PHP, Nginx, MariaDB...) se retrouvera à chaque fois dans le même répertoire `/usr/local/etc`. Le cas ZFS ========== Le passage récent d’[OpenZFS vers le format ZoL](https://lists.freebsd.org/pipermail/freebsd-current/2018-December/072422.html) a [déchaîné les passions dans la communauté](https://forums.freebsd.org/threads/freebsd-moving-to-zfs-on-linux.68803/). Certains membres ont eu peur de voir apparaître des bogues précédemment corrigés sur OpenZFS, d’autres la crainte de n’être plus que des suiveurs devant se coller au standard imposé par la communauté Linux. Toutefois, cette fusion est claire : elle vise à plus de cohérence globale dans le projet et une meilleure interopérabilité. De plus, les développeurs sont formels : « [aucune régression ne saura être acceptée](https://forums.FreeBSD.org/threads/freebsd-moving-to-zfs-on-linux.68803/post-410830) ». UFS n’est pas en reste : stable, performant, issu d’un développement très long, il gère très bien les périphériques modernes comme les SSD et reste un système de fichiers de choix pour qui veut un système véloce et fiable. Il me semble que dorénavant UFS propose également un [système de quota](https://www.freebsd.org/doc/handbook/quotas.html) et [des instantanés façon LVM](https://www.freebsd.org/doc/handbook/snapshots.html). Votre seule sécurité reste de toute façon la même depuis les débuts de l’informatique : les sauvegardes. Ce qu’il faut retenir ===================== FreeBSD est un système d’exploitation simple d’utilisation et d’administration. La politique de développement se veut peut‐être plus lente que dans une distribution GNU/Linux, mais les choix réalisés le sont dans une optique de long terme. Mais en complément les paquets tiers de tous les logiciels proposés sont particulièrement à jour. En usage serveur, il sera un allié de choix vous offrant une stabilité technologique et vous permettant de mettre à disposition des services de façon fiable pour de longues années. Par exemple, j’aime à troller mon entreprise qui développe un outil empaquetant une Red Hat 7 embarquant des conteneurs Docker. En effet, la migration vers Red Hat 8 est loin d’être simple, puisqu’il faut complètement réempaqueter l’intégralité des applicatifs avec Podman (décidément, Docker que l’on nous vendait comme l’outil prodige il y a quelques années n’aura pas été adopté par toutes les distributions très longtemps par défaut). Sous FreeBSD, il aurait fallu migrer ses _jails_ et/ou passer une commande de mise à jour. ;) Si ce genre de basculement technologique toutes les deux versions vous irrite, alors FreeBSD est définitivement fait pour vous. La « complexité » d’implémentation arrivera cependant lorsque vous souhaiterez mettre en place une architecture basée sur différentes _jails_ + votre pare‐feu visant à cloisonner différents services. Toutefois, cette relative complexité est liée aux problématiques d’architecture ainsi qu’à la gestion du réseau, pas intrinsèquement aux outils. FreeBSD propose évidemment des fonctions avancées de grappe de serveurs comme le [CARP](https://www.freebsd.org/doc/handbook/carp.html) (mécanisme d’adresse IP virtuelle partagée par plusieurs machines). # Les distributions clef en main Pour le bureau : * [FuryBSD](https://www.furybsd.org/) ; * [GhostBSD](https://www.ghostbsd.org/) ; * [MidnightBSD](https://www.midnightbsd.org/) ; * [TrueOS](https://www.trueos.org/) (anciennement PC-BSD, le développement a été tout récemment arrêté et il est conseillé de voir du côté des alternatives comme FuryBSD, NomadBSD, GhostBSD ou MidnightBSD). Autonome (_live_) : * [Nomad BSD](https://nomadbsd.org/). Pour le stockage : * [FreeNAS/TrueNAS](https://www.freenas.org/), le rapprochement des deux modèles est [en cours](https://www.ixsystems.com/blog/freenas-truenas-unification/). Routeur : * [BSD Router Project](https://bsdrp.net/) ; * [PFSense](https://www.pfsense.org/) ; * [OPNSense](https://opnsense.org/). Embarqué, minimaliste : * [PicoBSD](https://www.freebsd.org/cgi/man.cgi?query=picobsd).

AltStyle によって変換されたページ (->オリジナル) /