URL: https://linuxfr.org/news/a-la-decouverte-de-freebsd Title: À la découverte de FreeBSD. Authors: Kwiknclean tankey, Joris Dedieu, palm123, zurvan, Benoît Sibaud, theojouedubanjo, olivierweb, David Marec, Lawless, David Demelier, Adrien Dorsaz, Pierre Jarillon, bobble bubble et Ysabeau Date: 2020-02-26T17:56:07+01:00 License: CC By-SA Tags: freebsd Score: 5 _Une petite dépêche collaborative et complétement subjective, pour présenter de façon concrète les aspects les plus « importants » de cet OS et ainsi susciter des vocations à l’essayer et l’adopter._ FreeBSD est un système d’exploitation type Unix fonctionnant sur des architectures Intel, PowerPC, ARM et encore pour un temps SPARC. 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/) [Le man page 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 [Video]](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 template d’installation chez les « cloud providers » les plus courant à l’installation. Il offre une excellente alternative à 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, Mail.ru mais également la majorité des constructeurs de baies de stockage (NetApp, EMC), les équipements Juniper ou Stormshield, La PS4, la Nintendo switch, les serveurs de cache 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, Apple en son temps), de projets universitaires ou encore de contributeurs bénévoles. Les contributions ne se font pas seulement en lignes de codes mais sont également pécuniaires, les 3 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 cet OS, il y a cette sensation que les choses ne seront pas « cassées » demain par un changement dans le fonctionnement du système. Possibilité de mettre en place ses services configurés aux petits oignons, création d’une politique de sauvegardes, quelques mises à jour de temps en temps et au revoir à dans 10 ans. - Les performances réseau à la pointe. - La consommation des ressources [Sobriété] - Dtrace / Flamegraph - Le cloisonnement par jails. - Le mode de management 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 firewall), vos jails, votre liste de paquets, vos data et vous avez un environnement bulletproof. Les points subjectivement négatifs : ======================== - La comptabilité 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 management 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 fonction du système de fichier utilisé, pas du tout indispensables au demeurant. - Pas sûr que ça soit spécialement un OS pour les joueurs non plus. - La syntaxe de l’outil de rotation des journaux newsyslog un peu plus alambiquée que sous 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 divers 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 2 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 disques sur les configurations mono disques 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 de 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 en effet 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 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 firewall se définit autours 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 de variabiliser vos ports en déclarant dans votre fichier de conf - Un système de table : très pratique vous pouvez charger dynamiquement des tableaux d’IP et les comparer par rapport à différentes règles, ajouter supprimer une IP dans cette table selon condition, brute-force, etc. - Redirection avant règles de filtrage. - Filtrage / 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éseaux adoreront. Petite remarque côté réseau : sous FreeBSD la commande `netstat -avecpleindoptions` existe mais une alternative se présente et que je trouve plus simple à retenir `sockstat -l4` 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, hostname, 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 la marque 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 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 type Ansible ou en utilisant un script. Exemples : 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 hostname # 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 le redémarrer `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é à l’intérieur d’un sous-réseau propre à l’hôte qui héberge. Proposant en plus diverses options avancées de cloisonnement CPU/RAM et même de quotas disques 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’opposer de limiter énormément de chose allant du ping (désactivé par défaut) à un montage de disque / 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 sh, 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, rapport au système de fichiers que vous utilisez (UFS ou ZFS) votre wrapper devra prendre en compte l’adhérence à ce dernier pour une prise en charge des fonctionnalités ZFS. [iocage](https://github.com/iocage/iocage) semble devenir le standard de fait avec ZFS (car porté et choisit par FreeNAS). Cependant ce dernier n’est pas exempt de quelques bugs mineurs (lui n’est pas un script sh…), il bénéficie toutefois grâce à FreeNAS de beaucoup de cas d’usages et à un github 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 : « Off 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 supporte tous les FS et gérant tout ce que FreeBSD a à proposer en termes de virtualisation. Il est évidemment possible de réaliser de la virtualisation type KVM avec [Bhyve](https://bhyve.org/), je dois avouer que je n’ai jamais eu à me servir de cet outil jusque-là. 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 l’OS 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 _rolling release_ sur les versions de prod 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 (Les versions ont forcément bougé durant la rédaction : il faut retenir vous aurez les dernières versions stables, les mainteneurs sont très réactifs.)_ FreeBSD est un OS qui offre une sensation de cohérence dans la gestion des paquets. De ce fait, une fois installé, la configuration de votre middleware (Apache, PHP, Nginx, MariaDB…) se retrouvera à chaque fois dans le même répertoire `/usr/local/etc` Le cas ZFS. ========== Le passage récent de [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 bugs 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 ce merge est clair il vise à plus de cohérence globale dans le projet 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, gère très bien les périphériques modernes comme les SSD, il reste un système de fichier 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 snapshots 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 Linux mais les choix réalisés le sont dans une optique de long terme. Mais en complément les packages tiers de tout les logiciels proposés sont particulièrement à jour. En usage serveur, il sera un allié de choix vous offrant stabilité technologique et pour vous permettre 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, sauf que 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 d’upgrade ;) Si ce genre de basculement technologique toutes les deux versions vous irritent alors FreeBSD est définitivement fait pour vous. La « complexité » d’implémentation arrive 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 que la gestion réseau, pas intrinsèquement aux outils. FreeBSD propose évidemment des fonctions avancées de clustering comme le [CARP](https://www.freebsd.org/doc/handbook/carp.html) (mécanisme d’IP virtuelle partagées 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 ils conseillent de voir du côté des alternatives comme FuryBSD, NomadBSD, GhostBSD ou MidnightBSD) Live : * [Nomad BSD](https://nomadbsd.org/) 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)