# Installation et Configuration de FreeBSD comme poste de travail
{{INLINETOC}}
Ce document inclus l'ensemble des étapes réalisées pour obtenir FreeBSD 13 installé pour une utilisation optimisée «poste de travail» (Xfce, LibreOffice, multimédia, etc..) sur un PC portable.
Il est beaucoup plus simple d'utiliser une version déjà prête pour une utilisation «poste de travail» en utilisant **GhostBSD**, **helloSystem**, **nomadBSD**, ou **MidnightBSD**, mais je préfère avoir un «vrai» FreeBSD, entièrement recompilé et installé à la main.
## Environnement
L'environnement issu de ce tutoriel, comprendra:
- un support matériel complet: Video, LAN, Wifi, Bluetooth et une gestion de l'énergie minimale.
- un desktop avec les logiciels suivants:
- **KeepassXC** pour une solution multi-plateforme stockage des mots de passe et rôle d'agent de clé SSH;
- **bhyve**: hyperviseur;
- **LibreOffice**;
- **Veracrypt**: une solution multiplateforme de chiffrement;
- **Wireshark**;
- **Chromium** et/ou **Firefox**;
- **cu** ou **tip**: émulateur de terminal VT100 sur port série.
## Installation
Récupération du fichier ISO/IMG
Sur le serveur FTP officiel:
```
ftp://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/
```
Concernant l'image disque USB (memstick.img): La transférer à coup de "dd bs=64k", ou pour les Windowsiens d'Image writer.
FreeBSD Installer
L'installateur est en mode texte, mais très simple: Il suffit de sélectionner «Install» sur le premier écran, puis de suivre les conseils:
- Sélectionner le type de clavier et le hostname
- Concernant les distributions à installer: Laisser les valeurs par défaut (kernel-debug et lib32 qui sont obligatoire pour certaine applications comme virtualbox)
- Partitionnement: Si on dispose de 4Go de RAM ou moins, choisir le mode "Auto (UFS)", sinon "Auto (ZFS)" pour se simplifier la vie, mais on peut aussi manuellement:
- Créer une première partition swap de la taille de votre RAM (histoire d'avoir assez de place pour récupérer un éventuel crash dump). Labellisée "swap" par exemple.
- Puis créer une seconde partition avec tout le reste pour la partition root /. Labellisé "rootfs" par exemple.
- Si la machine supporte l'assistance matérielle pour le chiffrement (AESNI), l'activation du chiffrement est une bonne idée (a noter que lors du boot le clavier sera en QWERTY)
- Puis sélectionner le disque et «Entire Disk»:
- Partition Editor: Si on est en mode «Guided» il suffit de faire «Exit» et «Save»
- Attendre environ 2 minutes pour l'installation
- Puis viennent quelques questions triviales: mot de passe de l'utilisateur root, configuration du réseau (incluant le Wifi si on sélectionne cette interface) et la timezone
- Concernant les services à démarrer automatiquement: Désactiver sshd (rien à faire sur un desktop) et activer ntpd et powerd
- Créer l'utilisateur:
- À la question **«Invite USER into other groups?»**, répondre, avec un simple espace entre les noms: `wheel operator dialer video`
- **«wheel»**, permet de passer root par la commande su
- **«operator»**, obligatoire pour utiliser la commande su et éteindre le PC
- **«dialer»**, permet d'utiliser les ports séries (par «cu» et «tip»)
- **«video»**, permet d'accéder à la carte graphique
- **Login class**, laisser «default» (on la changera plus tard)
- **Shell**: tcsh
- **Home directory**: Par défaut
- Puis choisir un mot de passe et confirmer la création
- De retour sur le «Final Configuration», sélectionner «Exit», puis «Reboot»
Attention au vocabulaire utilisé par FreeBSD:\\ * Un «slice» est une partition MBR, elles portent comme nom: Le nom du disque suivi des lettres s1, s2, s3, etc...\\ * Une «partition» est une sous-partition MBR, elles portent comme nom: Le nom du disque, éventuellement le nom du slice, puis une lettre (a pour l'ensemble, b pour la swap, etc...)
## Le Shell
Le shell bash n'est pas inclus par défaut dans FreeBSD: C'est tcsh que l'on va utiliser.
Il est déconseillé d'utiliser un shell installé depuis les ports (bash par exemple) pour l'utilisateur root, car il risque de ne plus fonctionner en cas de problème (bibliothèque manquante par exemple ou pas d'accès à /usr/local).
Si on veututiliser un autre shell pour le compte root: modifirz plutôt le shell du compte toor (ce compte administrateur sert à ça).
Par défaut le tcsh ne propose pas de couleur et fait biper le PC il faut donc le configurer en éditant le fichier `/etc/csh.cshrc` communs à tous les utilisateurs:
```
cat >> /etc/csh.cshrc <> /etc/sysctl.conf <> /boot/loader.conf
```
## Permettre la mise à l'heure automatique
Si on ne l'av pas séléctionné pendant l'installation, 2 méthodes:
* **NTP**, pour les serveurs qui ne redémarrent pas souvent (daemon en tache de fond)
```
service ntpd enable
sysrc ntpd_sync_on_start=yes
```
* **NTPdate**, pour les postes de travail/laptop, synchronise l'heure au démarrage uniquement
```
service ntpddate enable
sysrc ntpdate_enable=yes
```
Les Drivers (uniquement pour FreeBSD 11 ou plus vieux)
Depuis FreeBSD 12.0 qui utilise devmatch(8) pour charger le maximum de drivers par défaut, les versions plus ancienne de FreeBSD ne le font pas: On doit lui indiquer de charger les drivers spécifiques à votre matériel.
Pour obtenir la liste des drivers non chargés, on peut par exemple utiliser la commande suivante:
```
[root@laptop]~#dmesg | grep "no driver attached"
pci12: at device 0.0 (no driver attached)
pci0: at device 27.0 (no driver attached)
pci0: at device 31.3 (no driver attached)
pci9: at device 0.1 (no driver attached)
pci9: at device 0.2 (no driver attached)
```
Ici on note une puce audio (multimedia, HDA), une carte réseau, le wifi dans mon cas (network), un chipset SMBus (serial bus, SMBus) et un lecteur de carte SD.
### Lecteur de carte SD
Commencer par charger manuellement les drivers pour tester qu'ils correspondent bien:
```
kldload mmc
kldload mmcsd
kldload sdhci
```
Puis vérifier:
```
[root@laptop]~#dmesg | grep sdhci
sdhci0: mem 0xe5220000-0xe52201ff irq 18 at device 0.1 on pci9
sdhci0: 1 slot(s) allocated
```
On ajoute le nom de ces modules à la liste des modules à charger automatiquement (variable kld_list) du fichier /etc/rc.conf.
Si on n'a pas encore déclaré cette variable dans votre /etc/rc.conf, il est possible d'utiliser directement cette ligne:
```
sysrc kld_list+="mmc mmcsd sdhci"
```
### Audio
Les drivers audio les plus courants sont activés par défaut depuis la 9.0, mais si ce n'est pas le cas, charger un «méta» drivers qui va charger tous les drivers audio, puis regarder celui qui est accepté:
```
[root@laptop]~#kldload snd_driver
[root@laptop]~#cat /dev/sndstat
FreeBSD Audio Driver (newpcm: 64bit 2007061600/amd64)
Installed devices:
pcm0: at memory 0xf6dfc000 irq 21 kld snd_hda [20080420_0052] [MPSAFE] (1p:1v/1r:1v channels duplex default)
```
Dans ce cas présent, c'est le drivers snd_hda qui correspond. Ce driver est déjà inclus par défaut dans le noyau générique depuis la 9.0, mais pour une version plus ancienne on devra déclarer son chargement:
```
[root@laptop]~#sysrc kld_list+=snd_hda
```
### Bluetooth
Pour utiliser les enceintes/casques bluetooth, c'est par le package **virtual\_oss** (`pkg install virtual_oss`) qu'il faut passer.
### AESNI (accélération matériel du chiffrage)
Ce module est inclus dans le noyau de FreeBSD 13, mais pour les version plus ancienne il faut le charger manuellement.
Le module AESNI permet d'utiliser les capacité d’accélération de chiffrement des processeurs modernes mais il n'est pas chargé automatiquement (sauf si vous avez choisi de chiffrer votre disque à l'installation).
Il est possible de charger ce drivers tardivement (en l'ajoutant dans le kld_list du /etc/rc.conf) mais il est préférable de le charger le plus vite possible (dans le /boot/loader.conf) pour s'assurer le module crypto soit initialisé avec cette fonctionnalité.
```
[root@laptop]~#echo 'aesni_load="YES"' >> /boot/loader.conf
```
### SMBus
(ce truc-là ne sert pas à grand-chose)
Charger et vérifier la bonne prise en compte du driver:
```
[root@laptop]~#kldload ichsmb
[root@laptop]~#dmesg | grep smbus
smbus0: on ichsmb0
```
Puis ajouter ce module à la liste de module à charger automatiquement:
```
sysrc kld_list+=smbus
```
## Configuration avancée du réseau
### Wifi
Normallement déja réalisé pendant la phase d'installation, mais si ce n'est pas le cas la méthode la plus facile pour la configuration du wifi est d'utiliser la fonction netconfig de bsdinstall:
```
bsdinstall netconfig
```
### Activation du Privacy Extension d'IPv6
Par défaut le mode Privacy Extension d'IPv6 n'est pas activé:
```
sysrc ipv6_privacy=YES
```
### DHCP en background pendant le démarrage
Par défaut le client DHCP met en pause le démarrage jusqu'à recevoir (ou déclancher un timeout) une addresse. Pour éviter on le passe en background:
```
sysrc background_dhclient=YES
```
### Failover entre carte réseau filaire et wifi
Cette configuration permet de basculer ultra rapidement entre le réseau filaire (prioritaire) et wifi.
Tester en premier la configuration WPA avant de mettre en place cet exemple (qui utilise une carte wifi Intel iwn0 et une carte Ethernet Intel em0).
On commence par noter l'adresse MAC de la carte Wifi et on configure la carte Ethernet avec cette même adresse MAC (ce qui permet de présenter la même adresse quelque soit l'interface utilisée):
```
setenv MACWIFI `ifconfig wlan0 | awk '/ether/ { print $2 }'`
sysrc wlans_iwn0=wlan0
sysrc ifconfig_em0="ether $MACWIFI up "
sysrc ifconfig_wlan0="WPA powersave"
sysrc create_args_wlan0="country FR regdomain ETSI"
sysrc cloned_interfaces=lagg0
sysrc ifconfig_lagg0="up laggproto failover laggport em0 laggport wlan0 DHCP"
sysrc ifconfig_lagg0_ipv6="inet6 accept_rtadv"
```
Un simple «service netif restart» n'est peut-être pas suffisant si votre interface wlan0 était déjà configurée: un redémarrage risque d'être nécessaire.
### USB Tethering
Rien de plus simple car il n'y a pratiquement rien à faire (avec un téléphone Android) à par connecter le smartphone, activer le partage de connexion Internet par USB et demander une IP par DHCP.
Une interface réseau urndis(4) USB Remote NDIS Ethernet device nommée ue0 va être utilisée pour cet acces.
```
ugen0.2: at usbus0
urndis0 on uhub2
urndis0: on usbus0
ue0: on urndis0
ue0: Ethernet address: 3e:a6:64:12:9c:ef
root@idepad:~ # dhclient ue0
DHCPDISCOVER on ue0 to 255.255.255.255 port 67 interval 4
DHCPOFFER from 192.168.42.129
DHCPREQUEST on ue0 to 255.255.255.255 port 67
DHCPACK from 192.168.42.129
bound to 192.168.42.21 -- renewal in 1800 seconds.
```
### Firewall
La configuration du firewall en mode "workstation" est assez simple:
```
service firewall enable
sysrc firewall_type=workstation
service ipfw start
```
Dans le cas ou on souhaite héberger quelques services réseau sur la machine, il est possible de les déclarer simplement:
```
sysrc firewall_myservices="22/tcp 80/tcp 443/tcp"
sysrc firewall_allowservices=any
```
Pour éviter d'afficher la liste des règles chargées:
```
sysrc firewall_quiet=yes
```
Et pour logger les paquets rejetés dans /var/log/security:
```
sysrc firewall_logdeny=yes
```
Et pour activer le tout:
```
service ipfw start
```
Les différentes règles et leur stats s'affichent par un "ipfw show".
## Localisation
Configuration du système en français
En root, rajouter dans /etc/login.conf :
```
cat >>/etc/login.conf <> /etc/rc.conf
```
## Permettre à l'utilisateur d'utiliser les périphériques USB, graveur CD/DVD
Commencer par permettre aux utilisateurs de monter des périphériques:
```
echo vfs.usermount=1 >> /etc/sysctl.conf
sysctl vfs.usermount=1
```
Et si on n'a pas mis l'utilisateur dans le groupe «operator» et «dialer» (accès aux ports séries) il faut le faire maintenant:
```
pw group mod operator -m
pw group mod dialer -m
```
Maintenant, il faut donner les droits en écriture pour les périphériques USB au groupe operator en créant le fichier /etc/devfs.rules:
```
cat >>/etc/devfs.rules </etc/mail/mailer.conf <>/etc/periodic.conf </etc/dma/dma.conf < /etc/dma/auth.conf
```
## Installation des logiciels externes (packages)
### Remplacement du dépôt quarterly par latest
Une distribution -RELEASE utilise un dépôt de package mis à jour tous les 3 mois uniquement.
Pour ne pas attendre 3 mois, on peut configurer l'usage du dépôt latest (mis à jour tous les 2 jours environs) comme ceci:
```
sed -i "" -e 's/quaterly/latest' /etc/pkg/FreeBSD.conf
```
Puis il suffit de lancer la commande "pkg" pour qu'il s'auto-installe.
### Utilisation de pkg
Une fois pkg installé, commencer par mettre à jour la liste des paquets présents sur le dépôt officiel:
```
pkg update
```
Et pour installer des nouveaux, il suffira de faire:
```
pkg install truc bidule machin chouette
```
Et pour les mettre à jour:
```
pkg upgrade
```
### Installer les root CA (FreeBSD 12 ou plus vieux)
Un des premiers packages à installer est celui des root CA:
```
pkg inst ca_root_nss
```
### Mise à jour des microcodes CPU
Corrige les grosses failles CPU en attendant la MaJ de votre BIOS/EFI:
```
pkg install devcpu-data
service microcode_update enable
service microcode_update start
```
### Remplacer powerd par powerd++
Une version plus évoluée (gère mieux les multi-core) de powerd existe sous le nom de powerd++:
```
pkg inst powerdxx
service powerd disable
service powerd onestop
service powerdxx enable
service powerdxx start
```
### Montage automatique des disques amovibles
Pour la détection d'insertion d'un disque, son analyse et le montage de celui-ci on va utiliser automount et si l'on souhaite ajouter le support d'autre file systèmes: les packages fuse-[ntfs].
```
pkg install automount fusefs-ntfs fusefs-simple-mtpfs
```
Commencer par le chargement de fuse et créer un fichier de configuration (a éditer pour faire correspondre à votre environnement):
```
sysrc kld_list+=fusefs
sysrc kld_list+=ext2fs
kldload fusefs
kldload ext2fs
cp /usr/local/etc/automount.conf.sample /usr/local/etc/automount.conf
```
Puis on relance le service devd pour qu'il charge la configuration d'automount:
```
service devd restart
```
Désormais, dans le dossier /media on doit retrouver le nom des disques USB connectés.
# Environnement graphique X11
## xorg
Ajouter l'utilisateur au groupe "video" pour lui permettre d'accéder au DRI:
```
pw groupmod video -m $USERNAME
```
Puis installer xorg et le xscreensaver:
```
pkg install xorg xscreensaver
Drivers vidéo KRM-DMS (Intel i915, AMD GPU, Radeon)
```
À partir de FreeBSD 11.2 uniquement, on peut installer le meta-package drm-kmod qui va selectionner la meilleure version des drivers (legacy, stable, next, devel):
```
pkg install drm-kmod
```
Et demander leur chargement automatique, ici un exemple pour un module i915:
```
sysrc kld_list+="/boot/modules/i915kms.ko"
kldload /boot/modules/i915kms.ko
```
Après un reboot, vérifier que le module du package (/boot/modules) et non de la base (/boot/kernel) est bien pris en compte:
```
olivier@x220:~ % kldstat -v | grep i915
6 1 0xffffffff8293d000 120ca8 i915kms.ko (/boot/modules/i915kms.ko)
```
### Drivers vidéo X11 pour Intel (les anciennes)
Si la machine possède une vieille puce Intel, installer quand même les bibliothèques d’accélération vidéo:
```
pkg install libva-intel-driver
```
Ensuite tester que ça fonctionne: Et surtout tester aussi le suspend/resume.
Pour les utilisateurs de carte Intel Sandybridge (ou mieux), l'activation du mode SNA peut-être bénéfique (vérifier en mesurant la différence avec gtkperf par exemple).
Pour activer ce mode, un exemple de configuration (mais qui fait rebooter ma machine quand elle passe en suspend):
```
cat > /usr/local/etc/X11/xorg.conf.d/20-video.conf <> /boot/loader.conf
mkdir -p /usr/local/etc/X11/xorg.conf.d/
cat > /usr/local/etc/X11/xorg.conf.d/20-video.conf < /usr/local/etc/polkit-1/rules.d/51.shutdown.rules < /usr/local/etc/polkit-1/rules.d/52.resume.rules <
```
### Pavé Synaptics, Trackpoint (Lenovo) ou Elantec
À partir de FreeBSD 12.1 il est fortement conseillé d'utiliser le mode EVDEV.
Mais il faut dire à celui-ci que l'on dispose de ce type d'équipement (synaptics ou elantec):
```
echo 'hw.psm.synaptics_support="1"' >> /boot/loader.conf
```
Pour un trackpoint ou un elantec il faut remplacer le mot "synaptics" par le type de pointeur.
Puis d'activer le mode evdev:
```
echo 'kern.evdev.rcpt_mask=6' >> /etc/sysctl.conf
sysctl kern.evdev.rcpt_mask=6
```
## XFCE4
```
pkg install xfce4 xfce4-goodies
```
## SLIM
Ceux qui n'utiliseront ni gnome ni KDE peuvent utiliser slim comme gestionnaire de session.
### Installation
Voici comment le faire fonctionner correctement:
```
pkg inst slim
```
Puis créer un fichier .xinitrc de ce style pour un lancement de xfce4 par exemple:
```
echo "exec startxfce4" >.xinitrc
```
Activer son lancement automatique:
```
service slim enable
```
### Thème FreeBSD
Voici comment y installer un joli thème FreeBSD:
```
pkg install slim-themes
```
Et éditer le fichier /usr/local/etc/slim.conf pour remplacer la ligne:
```
current_theme default
```
Par
```
current_theme fbsd
```
### Disposition du clavier sous slim
Pour préciser le type de clavier sous slim, qui démarre avant votre environnement graphique (xfce, lxde, gnome, etc.) il n'y a pas d'autre choix que définir des fichiers de configuration dans /usr/local/etc/X11/xorg.conf.d/ que l'on remplit par le contenu suivant:
```
cat > /usr/local/etc/X11/xorg.conf.d/10-keyboard.conf < /usr/local/etc/fonts/local.conf <
~/.fonts
false
true
Ohsnapu
false
EOF
```
## Les applications
### Webcam
L'installation du support de webcam demande plusieurs étapes.
Commencer par installer les logiciels nécessaires:
```
pkg install webcamd v4l_compat libv4l
```
Puis activer webcamd:
```
service webcamd enable
```
Ajouter le module cuse à la liste kld_load:
```
sysrc kld_list+="cuse"
kldload cuse
```
Une fois terminé, ajouter l'utilisateur au groupe webcamd:
```
pw groupmod webcamd -m votre-utilisateur
```
Afficher la liste des périphériques utilisable:
```
webcamd -l
```
Et teste la webcam, ici un exemple avec une webcam d'un PC portable Lenovo:
```
~ # webcamd -N Azurrewave-Lenovo-EasyCamera
Attached to ugen1.4[0]
Creating /dev/video0
```
Démarrer le daemon:
```
service webcamd start
```
Pour tester la webcam, pwcview est très simple.
Si webcamd n'est pas capable de selectionner automatiquement la bonne webcam, il faut déclarer un flag en récupérant le nom de la webcam (flag -N de la sortie "webcamd -l):
```
sysrc webcamd_0_flags="-N Azurrewave-Lenovo-EasyCamera"
sysrc webcamd_1_flags="-N vendor-0x046d-HD-Pro-Webcam-C920"
```
### Firefox
On l'installe en français par ces deux commandes:
```
pkg install firefox firefox-i18n
```
### Chromium
On l'installe par cette commande:
```
pkg install chromium
```
### mpv
Lecteur vidéo avec excellent support d'accélération matériel VA-API (carte intel), que l'on install, avec la librairie VDPAU/VA-APIet configure comme ceci:
```
pkg install mpv libvdpau-va-gl
mkdir ~/.config/mpv
cat > ~/.config/mpv/mpv.conf <Si on a activé le firewall cups ne trouvera pas automatiquement l'imprimante réseau.\\ \\ Un petit tour pour récupérer le dernier PPD correspondant à l'imprimante sur openprinting.org sera surement obligatoire.
Gérer la présence d'un proxy HTTP/HTTPS\\ Pour l'utilisateur sous gnome: `Système -> Préférence -> Serveur Mandataire`\\ \\ Pour une session sous l'utilisateur root (qui ne prend pas en compte le paramétrage de gnome), entrer ces deux commandes (la deuxième ne sert que pour l'authentification d'un proxy):\\ `setenv HTTP_PROXY "10.0.0.10:8080"`\\ `setenv HTTP_PROXY_AUTH "basic:*:login:password"`\\ `setenv http_proxy 'http://login:password@10.0.0.10:8080/`\\ \\ Pour utiliser le proxy pour la compilation des ports:\\ `echo "FETCH_ARGS=-pRr" >> /etc/make.conf`\\ `echo "FETCH_ENV=http_proxy='http://login:password@10.0.0.10:8080/'" >> /etc/make.conf`\\ \\ Pour utiliser subversion, editer le fichier ~/.subversion/servers et y ajouter les lignes suivantes:\\ `http-proxy-host = proxy-hostname`\\ `http-proxy-port = proxy-port`\\ `http-proxy-username = username`\\ `http-proxy-password = password`\\ \\ Pour faire des sessions SSH, installer l'utilitaire /usr/ports/net/corkscrew.\\ \\ Pour utiliser les outils qui ne gère pas les proxy nativement (csup par exemple) il faut utiliser des tunnels SSH ou /usr/ports/net/prtunnel puis lancer le tunnel:\\ 1) Regarder dans le /etc/standard-supfile à l'entrée default host= pour connaitre le nom du serveur cvsup utilisé\\ 2) `prtunnel -t http -H proxy.de.entreprise -P 3128 -D 5999 cvsup2.FreeBSD.org 5999`\\ 3)Editer le /etc/standard-supfile (ou celui que vous utilisez) et modifier l'entrée default host par:`default host=127.0.0.1`\\ 4)lancer le csup /etc/standard-supfile\\ 5)Puis tuer le tunnel: killall -9 prtunnel
### Serveur TFTP
La configuration d'un serveur TFTP est très simple:
- Créer le dossier /tftpboot
- Mettre les fichiers à partager dans le dossier /tftpboot
- Editer le fichier /etc/inetd.conf et décommenter la ligne tftp
- Activer inetd: `service inetd enable`
- Puis lancer inetd: `service inetd start`
Le noyau de FreeBSD refuse les requêtes des clients TFTP utilisant le port source 0\\ \\ Et comme aucun RFC n'interdit au client TFTP d'utiliser le port 0 comme source, il existe des équipements qui le font et ne fonctionneront donc pas avec un serveur TFTPD sous FreeBSD.\\ \\ C'est le cas par exemple des clients TFTP du boot-loader des firewalls Juniper Netscreen ISG-1000 et ISG-2000 qui vont générer ce type de message dans votre /var/log/messages:\\ `tftpd[4894]: DATA block 1, attempt 0 failed (Error 49: Can't assign requested address)`\\ \\ Si on veut modifier ce comportement, il faut commenter les 2 lignes suivantes de la fonction in_pcbconnect_setup() du fichier /usr/src/sys/netinet/in\_pcb.c :\\ `if (sin->sin_port == 0)`\\ `return (EADDRNOTAVAIL);`\\ \\ Et recompiler le noyau...
### Émulateur de terminal série (équivalent de l'hyperterminal ou teraterm)
Il existe 2 outils inclus dans **FreeBSD** pour cela: cu et tip
Par contre, attention car il existe deux représentations des ports séries (man uart):
* **cuauX**, pour les appels sortants
* **ttyuX**, pour les appels entrants
**cu** s'utilise avec des options en ligne de commande, par exemple:
```
cu -l /dev/cuau0 -s 115200
```
**tip** lui utilise le fichier de configuration `/etc/remote`.
# Personalisation avancée
## Collecte d'information
### Inventaire matériel
La liste des équipements PCI détectés s'affiche par la commande:
```
pciconf -lv
```
Celle des équipements USB par:
```
usbconfig
```
Liste des équipements détectés par HAL:
```
lshal
```
### Charge système par des graphiques: systat
Aperçu de la charge système par la commande:
```
systat -vm
```
Mais cette commande permet aussi de connaitre la charge réseau actuelle avec la commande:
```
systat -ip
```
### Charge système en mode compact: vmstat
Pratique pour connaitre ou le goulot d'étranglement:
```
[olivier@laptop]~>vmstat
procs memory page disk faults cpu
r b w avm fre flt re pi po fr sr ad4 in sy cs us sy id
1 0 0 4831M 209M 14907 1 1 0 14725 34 0 663 13745 3511 23 7 70
```
Et pour un rafraichissement toute les 2 secondes:
```
vmstat -w 2
```
Et pour connaitre qui consomme les interruptions matérielles (la colonne rate est importante):
```
> vmstat -i
interrupt total rate
irq1: atkbd0 6483 3
irq9: acpi0 3236 1
irq12: psm0 347988 167
irq14: ata0 16431 7
irq16: cbb0 uhci2+ 13624982 6556
irq20: uhci0 14 0
irq22: ehci0 2 0
cpu0: timer 4154687 1999
irq256: em0 53736 25
irq257: hdac0 5797 2
cpu1: timer 4153683 1998
irq258: vgapci0 235585 113
Total 22602624 10877
```
Sur cet exemple, on note une tempête d'interruption au niveau du ccb (cardbus), mais c'est en fait un bug lié à la carte graphique.
### Charge des disques: gstat
La couche de gestion des disques est geom, l'outil pour afficher le taux d'utilisation est gstat.
### Consommation électrique
Sur processeur Intel, le package "intel-pcm" dispose de l'outil pcm.x qui affiche la consommation électrique du CPU en temps réel:
```
Core (SKT) | EXEC | IPC | FREQ | AFREQ | L3MISS | L2MISS | L3HIT | L2HIT | L3MPI | L2MPI | TEMP
0 0 0.00 0.26 0.00 0.32 15 K 42 K 0.65 0.02 0.01 0.02 55
1 0 0.00 0.71 0.00 0.32 7329 12 K 0.40 0.10 0.00 0.01 55
2 0 0.00 0.30 0.00 0.32 13 K 38 K 0.63 0.04 0.01 0.02 55
3 0 0.00 0.48 0.00 0.32 7683 15 K 0.50 0.03 0.01 0.01 55
---------------------------------------------------------------------------------------------------------------
SKT 0 0.00 0.36 0.00 0.32 44 K 108 K 0.59 0.04 0.01 0.02 54
---------------------------------------------------------------------------------------------------------------
TOTAL * 0.00 0.36 0.00 0.32 44 K 108 K 0.59 0.04 0.01 0.02 N/A
Instructions retired: 7083 K ; Active cycles: 19 M ; Time (TSC): 2651 Mticks ; C0 (active,non-halted) core residency: 0.59 %
C1 core residency: 0.81 %; C3 core residency: 0.00 %; C6 core residency: 98.61 %; C7 core residency: 0.00 %;
C2 package residency: 48.12 %; C3 package residency: 0.00 %; C6 package residency: 49.64 %; C7 package residency: 0.00 %;
PHYSICAL CORE IPC : 0.71 => corresponds to 17.83 % utilization for cores in active state
Instructions per nominal CPU cycle: 0.00 => corresponds to 0.03 % core utilization over time interval
---------------------------------------------------------------------------------------------------------------
| READ | WRITE | IO | CPU energy |
---------------------------------------------------------------------------------------------------------------
SKT 0 0.29 0.00 0.29 3.76
---------------------------------------------------------------------------------------------------------------
```
## Usage de ntfs-3g dans le fstab
Voici un exemple de ligne du fstab pour le montage d'un disque NTFS une fois installé fuse ntfs-3g:
```
/dev/ntfs/System /media/windows ntfs rw,mountprog=/usr/local/bin/ntfs-3g,late 0 0
```
**umount failed: Device busy**: Lorqu'il est impossible de démonter des volumes, alors qu'on ne les utilise plus:\\ \\ `[root@laptop]~#umount /usr/obj/nanobsd.full/_.mnt/`\\ `umount: unmount of /usr/obj/nanobsd.full/_.mnt failed: Device busy`\\ \\ Il faut identifire le process qui empêche de démonter ce dossier, pour éventuellement le tuer:\\ `[root@laptop]~#fstat /usr/obj/nanobsd.full/_.mnt/`\\ `USER CMD PID FD MOUNT INUM MODE SZ|DV R/W NAME`\\ `olivier gam_server 4264 36 /usr/obj/nanobsd.full/_.mnt 2 drwxr-xr-x 512 r /usr/obj/nanobsd.full/_.mnt/`\\ \\ Identifier le processus qui tient le dossier:\\ 1) **locate ** permet d'identifier le programme\\ 2) **pkg wich ** permet d'identifier le paquet\\ 3) **pkg info -D ** permet de fournir des infos sur le paquet
## Compilation des sources
### FreeBSD avec la pile TCP BBR
Si on souhaite la dernière version de FreeBSD avec la pile TCP BBR((L'algorithme TCP BBR permet de considérablement augmenter le débit et réduire la latence des connexions sur les réseaux)) et un OS optimisé pour le processeur:
* Téléchargement des sources
```
pkg install git
git clone -o freebsd https://git.freebsd.org/src.git -b main /usr/src` `
```
* Activation de `CPUTYPE?=native` et Déclaration d'un kernel spécifique
```
cat > /etc/make.conf </usr/src/sys/amd64/conf/BBR <> /etc/sysctl.conf
sysrc kld_list+="filemon tcp_rack tcp_bbr"
kldload tcp_bbr && sysctl net.inet.tcp.functions_default=bbr
```
Désormais pour régulièrement mettre à jour FreeBSD:
```
cd /usr/src
git pull && make -j 32 buildworld buildkernel && tools/build/beinstall.sh
shutdown -r now
```
### Compilation batch des ports
Lorsqu'on veut des ports compilés avec les optimisations du processeur, l'outil **poudriere** est utilisé pour construire des packages à partir de l'arborescence des ports:
* Installation et configuration de poudriere
```
pkg install poudriere-devel
cat >> /usr/local/etc/poudriere.conf <> /usr/local/etc/poudriere.d/make.conf
```
* Création de la liste des ports (pour connaitre la catégorie, exemple: `pkg rquery '%o' poudriere-devel)
```
cat > /root/packages.list < /usr/local/etc/pkg/repos/local.conf <