FreeBSD 11.2

La deuxième mise à jour FreeBSD 11 est disponible depuis le 27 juin 2018.

C’est une mise à jour dite mineure, qui suit le principe POLA (Principle Of Least Astonishment).
Celle-ci ne devrait donc pas trop vous exposer à de nombreux changements.
Pour rappel, la publication d’une version de FreeBSD est un instantané de la branche Stable.

Cette version comprend les correctifs et mises à jour introduits depuis la version 11.1. Certaines fonctionnalités issues de la version 12 viennent aussi enrichir le système, tout comme des apports de systèmes tiers, ceux de la famille des BSD, Linux ou autres Unix, tel Illumos.

Sommaire

Sous les projecteurs

25ans

Le 19 Juin, FreeBSD avait 25 ans !

  • la suite de compilation Clang passe directement de la version 4 à la version 6; ce qui change les standards C et C++ utilisés par défaut, qui deviennent respectivement C11 et C++14 ;
  • mise en place des contre-mesures spectre et meltdown, notamment via l’intégration des retpoline par Clang ;
  • Désactivation du mode lazy au profit du mode eager lors des changements de contexte FPU.

Installation

Avant toute chose, je vous invite à consulter les Errata.

Des images sont disponibles sous divers formats pour les architectures suivantes :

  • amd64
  • i386
  • powerpc
  • powerpc64
  • sparc64
  • arm GUMSTIX
  • armv6 BANANAPI, BEAGLEBONE, CUBIEBOARD 1&1, CUBOX-HUMMINGBOARD, RPI-B, RPI2, PANDABOARD, WANDBOARD
  • aarch64

Sur l’architecture amd64, l’installeur bsdinstall(8) amorce par défaut sur de l’UEFI désormais. Les images ISO pour x86 et amd64 ont repris le schéma de partitionnement MBR plutôt que GPT.

Attention, sur l’architecture ARM64, un bug interdit le démarrage sur ZFS. De plus, pour éviter de démarrer avec une horloge décalée, cette architecture ne possédant pas d’horloge temps réel, ajoutez ntpd_sync_on_start="YES" dans rc.conf(5).

Les images pour clefs USB n’utilisent plus le schéma de partitionnement GPT pour amorcer, elles reprennent l’ancien format MBR pour éviter les problèmes sur les machines non-UEFI.

Attention ! une manipulation de dernière minute est requise pour les systèmes i386 qui amorcent sur du ZFS ; lors du menu de démarrage , précisez avant de lancer le système :

set kern.kstack_pages=4
boot

Ajoutez kern.kstack_pages=4 dans votre loader.conf ensuite.

Mise à jour

Pour mettre à jour depuis une version antérieure, suivez la procédure habituelle :

# freebsd-update upgrade -r 11.2-RELEASE
# freebsd-update install
# shutdown -r now
# freebsd-update install

Si vous mettez à jour en compilant depuis les sources, n’hésitez pas à forcer la suppression lors du nettoyage des fichiers obsolètes :

make BATCH_DELETE_OLD_FILES=yes delete-old-libs

Sinon, attendez-vous à une longue série de questions, due à la mise à jour du compilateur et de ses entêtes et bibliothèques.

Machines virtuelles

Les images sont disponibles pour Qemu, VMware et Virtual box.

En ce qui concerne QEMU il vous faut appliquer un patch sur les architectures arm64 et aarch64.
Pour démarrer la vm, lancez :

% qemu-system-aarch64 -m 4096M -cpu cortex-a57 -M virt  \
    -bios QEMU_EFI.fd -serial telnet::4444,server -nographic \
    -drive if=none,file=%VMDISK%,id=hd0 \
    -device virtio-blk-device,drive=hd0 \
    -device virtio-net-device,netdev=net0 \
    -netdev user,id=net0

Et assurez vous de remplacer «%VMDISK%» par votre machine.

Logiciels

Mettez ensuite à jour vos logiciels. Je vous conseille de le faire depuis une poudrière, la mise à jour de CLang pourrait révéler des problèmes.

Hébergeurs

Amazon propose des instances EC2 AMI dans de nombreuses régions. Ces instances synchronisent leurs horloges par le biais des services NTP internes à Amazon : Amazon Time Sync Service.

  • Vagrant:
% vagrant init freebsd/FreeBSD-11.2-RELEASE
% vagrant up

Plusieurs problèmes de dernière minute ont été signalés lors de l’utilisation de Vagrant/Virtual Box : consultez les Errata.

Correctifs

Sécurité

  • OpenSSH: CVE-2016-6515 ;
  • WPA: CVE-2017-13077 à 13082, CVE-2017-13086 à 13088 ;
  • ptrace: fuite de données via PT_LWPINFO ;
  • kldstat: fuite de données ;
  • Openssl: CVE-2017-3735, CVE-2017-3736 ;
  • ipsec: CVE-2018-6916,CVE-2018-6918 ;
  • ntp: CVE-2018-7182, CVE-2018-7170, CVE-2018-7184, CVE-2018-7185, CVE-2018-7183 ;
  • vt: CVE-2018-6917 ;
  • debug reg: CVE-2018-8897 .

Meltdown

Pour le contrer, FreeBSD intègre la séparation de pages mémoire entre le noyau et les processus (PTI), qui doit être activée via une clef système :

# sysctl vm.pmap.pti
vm.pmap.pti: 1

à ajouter à votre /boot/loader.conf.
Il est activé par défaut sur les architectures non-AMD et celles qui n’ont pas de RDCL.

Spectre

Il convient avant tout de mettre à jour son firwmware :

Utilisez le port sysutils/devcpu-data pour télécharger les mises à jour, puis lancez :

#!/bin/sh
for x in /dev/cpuctl* ;
do
  cpucontrol -u -v ${x}
done

Ou lancez la procédure à chaque démarrage, à l’aide de la variable microcode_update_enable dans rc.conf, après avoir ajouté cpuctl dans votre kld_list.

A noter que cpucontrol propose une nouvelle option, -e, qui va réévaluer les fonctionnalités fournies par le ou les processeur(s). N’utilisez cette option que lorsque tous les cpus ont été mis à jour.

Il existe deux mécanismes pour contrer spectre.
Le premier est de prendre en charge IBRS (Indirect Branch Restricted Speculation)

sysctl hw.ibrs_disable=0 # pour le désactiver
sysctl hw.ibrs_active    # pour le vérifier
1

Le second consiste à s’assurer que votre système comme vos logiciels sont construits par un compilateur qui prend en charge le retpoline.

Lazy FP state restore

Lors des changements de contexte du FPU, le mode eager est intégré et activé par défaut sur les architectures AMD64 et x86, opposé au mode lazy. Le gain en performance de ce dernier est moins pertinent sous les compilateurs modernes. Il s’agit de la sauvegarde, ou pas, des registres FPU et d’éviter de s’exposer aux attaques de type Lazy FP state restore.

Vous pouvez retrouver le mode lazy en activant la clef hw.lazy_fpu_switch dans votre loader.conf(5).

En vrac

  • Panic sur appel AIO dans un noyau VNET ;
  • crash sur appel de pf_purge_thread avec PF ;
  • micmac dans certaines régions avec tzsetup ;
  • dépassement de tampon dans file (utilisez libmagic de toute façon ) ;
  • mem : accès mémoire noyau en mode utilisateur .

Nouveautés

Amorce

loader(8) contrôle les fonctionnalités ZFS supportées avant d’amorcer sur un pool. De plus, son interpréteur a été amélioré pour reconnaître correctement les simples et doubles guillemets.

La longueur d’une passphrase GELI est cachée par défaut lors du démarrage. Consultez le manuel de GELI pour retrouver l’ancien comportement.

Configuration

La prise en charge d’un watchdog matériel ne dépend plus de l’option noyau SW_WATCHDOG.
Il est désormais possible de l’activer dynamiquement via le démon wathdog(8). Le comportement de ce dernier avec le commutateur --softtimeout reste le même.

la variable p1003_1b.aio_listio_max a été rendue réglable et réduite à :

  • un alias sur vfs.aio.max_aio_queue_per_proc sur lequel pointe désormais les appels lio_listio
  • vfs.aio.aio_listio_max seul, sert désormais pour les appels aio_supend(2)

Vous pouvez importer le diff(1) venu d’OpenBSD à la place de gnu-diff, par la variable WITHOUT_GNU_DIFF de src.conf(5).

L’outil de vérification lint(1) n’est plus construit par défaut, ajoutez WITH_LINT dans votre src.conf(5) pour le retrouver.

sysctl(8) prend en charge les tableaux de valeurs pour une clef, i.e. kern.cp_time, :

sysctl clef=value1,value2,etc.

La commande usermod de pw(8) réinitialise la liste de groupe secondaires avec un commutateur -G vide (''). Désormais, on peut aussi utiliser les caractères @ et ! dans les entrée GECOS de /etc/passwd. Seul : y est interdit désormais.

getconf(1) apporte le nouveau commutateur -a pour afficher toutes les variables système ou chemins POSIX, par défaut sur stdout(4) ou vers le fichier donné en paramètre.

cpucontrol (8) comprend l’option -n qui désactive la recherche dans les répertoires par défaut lors de l’utilisation de l’option -d.

Intégration de l’outil efibootmgr(8) pour bricoler une amorce en EFI.

libxo

Libxo(3), la bibliothèque qui permet de promouvoir la sortie d’un logiciel dans un format déterminé, est désormais livrée en version 0.9.

Désormais, sesutil(8) prend en charge cette option.

Noyau

Prise en charge de plusieurs signaux d’horloge temps réel :

  • Ajout de la clef de réglage debug.clocktime pour débugger.
  • optimisations pour gérer la concurrence entre horloges.
  • Ajout de l’appel taskqueue_enqueue_timeout_sbt()
  • Ajout de l’appel clock_schedule() pour permettre aux pilotes d’horloge temps de gérer plus finement leurs appels à clock_settime().

Intégration d’un patch pour gérer la gamme APL (Apollo Lake) de chez Intel, à retrouver sous la clef machdep.idle_apl31.

La nouvelle clef debug.acpi.suspend_bounce va aider à comprendre l’enfer des mise en veille.
Le système procède à la mise en veille jusqu’à l’appel de AcpiEnterSleepState().
Alors, plutôt que d’entrer en mise en veille, la carte va appeler resumectx() pour simuler le réveil.
On attend vos retours. 🙂

Linuxator

L’alternative musl à la glibc est disponible.
Implémentation de /dev/fd et /proc/self/fd via fdescfs (5).

D’une manière générale, beaucoup de travail a été effectué pour retrouver un fonctionnement normal suite aux patchs Meltdown et Spectre.

Le monde

Le comportement de l’outil ln(1) est corrigé lors de l’appel avec le commutateur -f pour délier en premier lieu un répertoire avant de créer le lien symbolique

newsyslog(8) prend en charge les messages compatibles avec la RFC5424 lors de la rotation des journaux.

La commande crontab(1) comprend une nouvelle option -f, qui supprimera un fichier crontab(5) sans confirmation si on active l’option -r hors d’un terminal.

rsh(8), tiens il est encore là, évite de propager un EOF vers le système distant si l’option -N est utilisé.

L’outil indent(1) respecte la variable d’environnement SIMPLE_BACKUP_SUFFIX pour fixer l’extension des sauvegardes.

swapoff(8), appelé avec les options -aL, ne désactive le swap que pour les périphériques déclarés late dans votre fstab.

Analyser, surveiller, contrôler

la commande top(1) comprend l’option -U qui permet de filtrer un utilisateur. Appuyez sur 'u' pour en changer en cours d’affichage.

bsdgrep(1) a été mis à jour pour corriger plusieurs défauts de détection de motif. Il comprend de plus l’option -r et devient, de fait, un alias pour rgrep.

ps(1) affiche de nouvelles informations :

  • affichage des priorités de classe temps réel (‘<‘) et attente (‘N’) dans la colonne état ;
  • un process sous capsicum(8) sera indiqué avec l’option -C .
  • une clef jail pour afficher le nom plutôt que l’identifiant d’une jail.

stockage, fichiers

makefs(8) suit le comportement de newfs(8) en réglant la taille des blocs et fragments à 32K et 4K, respectivement.

L’outil diskinfo(8) présente désormais de nouvelles informations :

  • le modèle et le numéro de série avec l’option -s ,
  • l’adresse au sein du contrôleur avec l’option -p ,
  • la vitesse de rotation si le disque prend en charge TRIM/UNMAP .

Les deux premières options sont exclusives.

mount(8) pourra monter un système en lecture uniquement après une tentative de montage sur un système protégé en écriture. Ce comportement doit être activé par l’option autoro.
Son pendant umount(8) permet de forcer le démontage d’un système NFS par le commutateur -N.

fsck_ffs(8) évitera de signaler un système de fichier comme étant modifier seulement si le tampon d’un superblock a été modifié. En outre, cet outil sort en erreur si le système de fichier n’est pas réparé.

mdmfs(8), le remplaçant de mount_mfs(8) prend en charge tmpfs(5).

du(1)] et [df(1)] utilisent un affichage long (*1000) de leurs données si l’option --si est utilisée.

nvmecontrol(1) donne la valeur complète (sur 128bits) de la donnée SMART et non plus seulement un code hexadécimal.
Il intègre, en outre, les options suivantes pour les disques Western Digital® HGST :

  • cap-diag, get-crash-dump, drive-log, purge et purge-monitor.

Le gestionnaire de default ZFS prend en charge tout type de contrôleur GEOM, ce qui inclut :

Réseau

Le pare-feu pftcl(8) interprète la commande route-to de manière à gérer correctement les interfaces avec IP multiples.

Les redirections ICMPv6 ont été corrigées dans icmp6(4).

Correction du pilote ng_iface qui pouvait provoquer un crash.

Le pare-feu ipfw(4) détecte correctement les paquets de niveau 2 et 3 suite à une correction dans dummnet(4).

le client dhcp autorise la réécriture de interface-mtu via une commande supersede dans dhclient.conf(5). Ce dernier améliore aussi sa compatibilité avec la RFC2131 en affectant 0 dans l’adresse source des entêtes IP, lors de l’envoi d’un DHCPREQUEST, pour obtenir une adresse déjà affectée.

ifconfig(8) comprend l’option random qui, combinée avec ether, va générer une adresse MAC aléatoire.

Pilotes, matériel

Le pilote pour DRM en mode noyau (Kernel Mode Setting), venu de la branche HEAD (12) est disponible. Cela rendra le port des pilotes Linux pour GPU plus aisé, l’interface étant commune. Les firmwares GPU sont disponibles depuis le port gpu-firmware-kmod.

En vrac :

  • Reconnaissance des adapteurs USB TAIO (TUMPA).
  • smartpqi(4), apporte la prise en charge des contrôleurs SCSI PQI de Microsemi. Il remplace le pilote aacraid.

    • uniquement sur AMD64.

Pour le reste, il s’agit de périphériques réseau :

  • ng_pppoe(4), le protocole PPPOE permet désormais d’ajouter une étiquette Host-Uniq tags dans les requêtes de connexion,
  • cxgbe(4),Chelsio, dont la mise à jour du microcode vers la version 1.16.63.0 permet la prise en charge des modèles T4, T5 et T6 ,
  • mlx5io(4), Mellanox, amène une interface pour piloter les adapteurs Connect-X 4 et Connect-X 5 ,
  • ocs_fc(4), Broadcom/Emulex, apporte la prise en charge des Emulex 16/8G FC GEN 5 HBAs LPe15004 et LPe160XX, et Emulex 32/16G FC GEN 6 HBAs LPe3100X et LPe3200X

    • Uniquement sur x86/Amd64
    • mode target et initiator et FC-Tape
  • ixl(4), Intel XL710 40Gb, mise à jour vers la version 1.9.9-k ;
  • em(4), activation du wake on lan pour les gamme Ice Lake et Cannon Lake .

Virtualisation

bhyve(4) intègre la console virtio. Ceci vous permettra de créer une connexion bidirectionnelle entre les systèmes hôte et invité. Ainsi, vous pourrez créer un bus entre les deux, au-dessus de sockets unix, à la manière de DBus. FreeNAS s’en sert par exemple pour surveiller un invité.

  • Ajoutez un flux virtio dans vos Vmms comme suit :
-s <slotnum>,virtio-console,port1=/path/to/port1.sock,anotherport=...

L’hôte va créer une socket unix() pour chaque port déclaré, vous pouvez en mettre jusqu’à 16. Par contre, il vous faudra les détruire à la main.

kldload virtio_console

Vous avez accès à vos ports via une interface série ttyV.

Xen

Correction d’un bug sur pmap qui affecte les instances Xen et EC2. Dans ce cas de figure, un invité avait accès à des zones mémoire libérées et provoquait un crash.

Logiciel mis à jour

Au placard

Les outils et pilotes listés dans ce chapitre sont déclarés obsolètes, c’est à dire qu’un message d’avertissement sera diffusé dans vos consoles si vous les utilisez. Ils seront supprimés dans la version 12.

  • cm(4), le pilote ArcNet sur bus ISA. Je fais partie des (rares ?) personnes à avoir travaillé sur ce réseau, ceci dit.
  • fda(4), le pilote FDDI sur EISA.
  • Carte réseau :

Les classes GEOM,

  • geom_aes, geom_bsd, geom_mbr, geom_sunlabel

sont remplacées par la classe geom_part (depuis FreeBSD 7, en fait).

Ports

Un changement important a été apporté aux ports. L’œuvre de Baptiste Daroussin, les ports ont maintenant un système de flavors.

À ne pas confondre avec les options de compilation des paquets, ce système va permettre de construire différents paquets depuis un seul et unique port. Cela est très pratique pour les applications qui proposent différentes interfaces graphiques. On notera, par exemple, le cas de vim qui propose une version console, Gtk ou X11.

L’intérêt supplémentaire est de pouvoir dépendre d’un port avec une certaine configuration. Ainsi, un port A qui dépend d’un port B avec Gtk obligatoire pourra le spécifier. Cette technique était jusqu’à présent gérée avec des ports “slave”.

Un autre cas d’utilisation est la fourniture des paquets python en version 3.x et 2.x depuis le même port. Cela a aussi été fait pour PHP.

À venir

La prochaine version majeure de FreeBSD, soit la version 12, devrait être disponible en fin d’année. Dès lors, la branche 10 entrera en fin de vie.

L’EuroBSDcon se déroulera du 20 au 23 septembre à Bucarest.

La troisième édition d’Absolute FreeBSD est disponible sous format numérique et en pré-commande pour les éditions papier.

Depuis 2005, FreeBSD participe au Google Summer of Code.
En lien, la liste de projets suggérés par et pour FreeBSD cette année.

Intel

Intel prête une oreille attentive à la communauté FreeBSD, notamment par le biais de Ben Widawsky, développeur et architecte sur la pile graphique Intel pour Linux, qui a décidé de se consacrer à FreeBSD. Il se propose de remonter toute proposition — d’une manière générale — aux équipes concernées. Il a déjà une liste bien remplie. Elle rejoint la liste officielle.

Avec l’intégration du pilote DRM en kms dans FreeBSD et la libération du code de son pilote Media (iHD) et du SDK associé fin 2017, on peut espérer l’arrivée d’une pile Media pour les GPU Intel.

D’un autre côté, la dernière version de vtune a été portée sous FreeBSD. C’est le seul élément de System Studio 2018 disponible pour l’instant.

Commentaires :
voir le flux atom
ouvrir dans le navigateur

(Source: LinuxFr.org : les dépêches)
Logo