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.
L'environnement issu de ce tutoriel, comprendra:
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:
wheel operator dialer video
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 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 <<EOF # Add color to CLI setenv CLICOLOR true setenv COLORTERM true # Disable system beep set nobeep EOF
Désactiver le buzzer:
cat >> /etc/sysctl.conf <<EOF # Désactive le buzzer en mode vt(4) kern.vt.enable_bell=0 EOF
Diminuer le timeout du menu du boot loader
Le menu du boot loader possède un timeout de 10 secondes, ce qui est un peu long.
Voici comment le réduire à 2 secondes:
sysrc -f /boot/loader.conf autoboot_delay=2
Ou pour complétement le désactiver:
sysrc -f /boot/loader.conf autoboot_delay=-1
Fonctionnalité la plus attendue de FreeBSD 13, absolument obligatoire: L'affichage du nom FreeBSD et du logo en bitmap.
Sauf que parfois le mot FreeBSD est bien en bitmap mais le logo Orb s'affiche uniquement en ASCII.
Pour corriger le problème, forcer la résolution de l'écran EFI à la résolution native de la machine, par exemple 1366×768, donc:
echo 'efi_max_resolution="1366x768"' >> /boot/loader.conf
Si on ne l'av pas séléctionné pendant l'installation, 2 méthodes:
service ntpd enable sysrc ntpd_sync_on_start=yes
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: <network> at device 0.0 (no driver attached) pci0: <multimedia, HDA> at device 27.0 (no driver attached) pci0: <serial bus, SMBus> at device 31.3 (no driver attached) pci9: <base peripheral, SD host controller> at device 0.1 (no driver attached) pci9: <mass storage> 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.
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: <Generic SD HCI> 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"
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: <Intel 82801H High Definition Audio Controller> 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
Pour utiliser les enceintes/casques bluetooth, c'est par le package virtual_oss (pkg install virtual_oss
) qu'il faut passer.
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
(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: <System Management Bus> on ichsmb0
Puis ajouter ce module à la liste de module à charger automatiquement:
sysrc kld_list+=smbus
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
Par défaut le mode Privacy Extension d'IPv6 n'est pas activé:
sysrc ipv6_privacy=YES
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
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.
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: <Xiaomi Mi-4c> at usbus0 urndis0 on uhub2 urndis0: <RNDIS Communications Control> on usbus0 ue0: <USB Ethernet> 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.
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”.
Configuration du système en français
En root, rajouter dans /etc/login.conf :
cat >>/etc/login.conf <<EOF french|French Users Accounts:\ :charset=UTF-8:\ :lang=fr_FR.UTF-8:\ :tc=default: EOF
Et exécuter la commande suivante :
# cap_mkdb /etc/login.conf
Puis éditer le fichier de mot de passe par la commande vipw. , Et rechercher le login :
# vipw olivier:$1$00edYNK2$heBNRz65txD0j7bGtB40r.:1001:1001::0:0:Olivier Cochard-Labbe:/home/olivier:/bin/tcsh
Il faut ajouter «french» entre les ::, ce qui va donner :
olivier:$1$00edYNK2$heBNRz65txD0j7bGtB40r.:1001:1001:french:0:0:Olivier Cochard-Labbe:/home/olivier:/bin/tcsh
Puis, pour que les futurs utilisateurs utilisent cette langue par défaut, on ajoute dans /etc/adduser.conf :
defaultclass = french
Pour l'installation du clavier Bépo en mode console, les instructions pour FreeBSD sur le wiki du site clavier-bépo: ne sont plus valable depuis la migration de syscons vers VT (il faut transformer le fichier kbd):
fetch http://dev.bsdrp.net/mirrors/fr.bepo.kbd cp fr.bepo.kbd /usr/share/vt/keymaps/ echo 'keymap="fr.bepo.kbd"' >> /etc/rc.conf
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 <username> pw group mod dialer -m <username>
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 <<EOF [localrules=5] add path 'da*' mode 0660 group operator add path 'cd*' mode 0660 group operator add path 'uscanner*' mode 0660 group operator add path 'xpt*' mode 660 group operator add path 'pass*' mode 660 group operator add path 'md*' mode 0660 group operator add path 'msdosfs/*' mode 0660 group operator add path 'ext2fs/*' mode 0660 group operator add path 'ntfs/*' mode 0660 group operator add path 'usb/*' mode 0660 group operator EOF
Déclarer les nouvelles règles :
sysrc devfs_system_ruleset=localrules
Activer les nouvelles règles:
service devfs restart
Et vérifier leur applications:
devfs rule show
On commence par optimiser le scheduler pour un usage desktop:
sysrc -f /etc/sysctl.conf kern.sched.preempt_thresh=224
Pour activer la réponse «yes» aux questions de fsck au démarrage:
sysrc fsck_y_enable=YES
Par défaut, l'heure d'accès aux fichiers est noté, ce qui peux consommer du temps (et ca ne sert pas à grand-chose).
Éditer le fichier /etc/fstab est ajouter l'option noatime:
#Device Mountpoint FSType Options Dump Pass /dev/gpt/ROOT / ufs rw,noatime 1 1
Par défaut, FreeBSD reserve 8% du disque pour ses opérations système (défragmentation), si cela est trop pour vous, vous pouvez modifier cette valeur avec «tunefs -m X».
Pour les fichiers core générés par les applications, ajouter au fichier /etc/csh.login:
limit coredumpsize 0
Pour les fichiers core générés par le noyau, ajouter dans le /etc/sysctl.conf :
kern.coredump=0
Cela ce fait simplement par la commande suivante:
freebsd-update fetch install
Il faut utiliser le noyaux GENERIC pour que cet outil mette aussi les binaires du noyau à jour.
DragonFly Mail-Agent (inclus à partir de FreeBSD 11) permet de remplacer sendmail lorque le besoin est uniquement de pouvoir envoyer des emails.
sysrc sendmail_enable=NONE service sendmail onestop cat >/etc/mail/mailer.conf <<EOF # Execute dma instead of sendmail sendmail /usr/libexec/dma mailq /usr/libexec/dma newaliases /usr/libexec/dma rmail /usr/libexec/dma EOF cat >>/etc/periodic.conf <<EOF #disable some sendmail specific daily maintenance routines daily_clean_hoststat_enable="NO" daily_status_mail_rejects_enable="NO" daily_status_include_submit_mailq="NO" daily_submit_queuerun="NO" EOF
Reste la configuration de DMA, ici un exemple pour un compte gmail:
cat >/etc/dma/dma.conf <<EOF SMARTHOST smtp.gmail.com PORT 587 SECURETRANSFER STARTTLS AUTHPATH /etc/dma/auth.conf MASQUERADE votre-login@gmail.com EOF echo 'votre-login|smtp.gmail.com:votre-mot-de-passe' > /etc/dma/auth.conf
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.
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
Un des premiers packages à installer est celui des root CA:
pkg inst ca_root_nss
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
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
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.
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)
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 <<EOF Section "Device" Identifier "Intel Graphics" Driver "intel" Option "AccelMethod" "sna" EndSection EOF
Sous X11, l'utilitaire «vainfo» devrais indiquer une liste de profil vidéo (H264, etc…) pris en charge matériellement.
Pour un drivers nvidia, il y a plusieurs drivers en fonction de la génération de la carte graphique (nvidia-driver-173, nvidia-driver-304, nvidia-driver-340, nvidia-driver).
Dans le cas ou l'on dispose d'un ancien ION 1:
pkg install nvidia-driver-304 echo 'nvidia_load="YES"' >> /boot/loader.conf mkdir -p /usr/local/etc/X11/xorg.conf.d/ cat > /usr/local/etc/X11/xorg.conf.d/20-video.conf <<EOF Section "Device" Identifier "NVIDIA Card" VendorName "NVIDIA Corporation" Driver "nvidia" EndSection EOF
Activation de ce service
service dbus enable service dbus start
Par défaut, FreeBSD ne monte ni procfs ni fdesc. Mais certaines applications en on besoin. On édite le fichier /etc/fstab et lui ajouter ces 2 lignes:
proc /proc procfs rw,late 0 0 fdesc /dev/fd fdescfs rw,late 0 0
L'option “late” évite les problèmes avec ZFS. Puis les monter:
mount /proc mount /dev/fd/
Concernant les logiciels utilisant Polkit (xfce par exemple), voici comment permettre à l'utilisateur d'éteindre et de mettre en veille la machine pour les utilisateurs du groupe “operator”
cat > /usr/local/etc/polkit-1/rules.d/51.shutdown.rules <<EOF polkit.addRule(function (action, subject) { if ((action.id == "org.freedesktop.consolekit.system.restart" || action.id == "org.freedesktop.consolekit.system.stop") && subject.isInGroup("operator")) { return polkit.Result.YES; } }); EOF cat > /usr/local/etc/polkit-1/rules.d/52.resume.rules <<EOF polkit.addRule(function (action, subject) { if (action.id == "org.freedesktop.consolekit.system.suspend" && subject.isInGroup("operator")) { return polkit.Result.YES; } }); EOF chown -R polkitd /usr/local/etc/polkit-1/
Puis ensuite, corriger un problème de permission manquantes concernant les actions .
On doit voir les erreurs suivantes dans le /var/log/messages:
Jul 18 00:21:28 x220 dbus[20382]: [system] Rejected send message, 2 matched rules; type="method_call", sender=":1.19" (uid=1001 pid=63293 comm="") interface="org.freedesktop.ConsoleKit.Manager" member="CanSuspend" error name="(unset)" requested_reply="0" destination=":1.1" (uid=0 pid=44489 comm="") Jul 18 00:21:28 x220 dbus[20382]: [system] Rejected send message, 2 matched rules; type="method_call", sender=":1.19" (uid=1001 pid=63293 comm="") interface="org.freedesktop.ConsoleKit.Manager" member="CanHibernate" error name="(unset)" requested_reply="0" destination=":1.1" (uid=0 pid=44489 comm="")
Pour corriger ce problème (et dévérouiller les actions «Mise en veille» et «Mise en veille prolongée») depuis XFCE, il faut éditer le fichier /usr/local/etc/dbus-1/system.d/ConsoleKit.conf, et ajouter ces 6 lignes (en gras) entre les lignes existantes:
<deny send_destination="org.freedesktop.ConsoleKit" send_interface="org.freedesktop.DBus.Properties" /> <allow send_destination="org.freedesktop.ConsoleKit" send_interface="org.freedesktop.ConsoleKit.Manager" send_member="CanSuspend"/> <allow send_destination="org.freedesktop.ConsoleKit" send_interface="org.freedesktop.ConsoleKit.Manager" send_member="CanHibernate"/> <allow send_destination="org.freedesktop.ConsoleKit" send_interface="org.freedesktop.ConsoleKit.Manager" send_member="Restart"/>
À 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
pkg install xfce4 xfce4-goodies
Ceux qui n'utiliseront ni gnome ni KDE peuvent utiliser slim comme gestionnaire de session.
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
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
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 <<EOF Section "InputClass" Identifier "keyboard Layout" Driver "libinput" MatchIsKeyboard "on" Option "XkbLayout" "fr" EndSection EOF
Pour du bepo, il suffit de préciser la variante à la clé XkbLayout:
Option "XkbLayout" "fr(bepo)"
Un environnement de bureau léger (pour qu'il prenne en compte .Xresources il faut le lancer avec xfce4-session et non pas avec startxfce4):
pkg install xfce xfce4-mixer xfce4-volumed xscreensaver
Puis on installe de jolies polices de caractères:
pkg install dejavu urwfonts bitstream-vera webfonts terminus-font ubuntu-font consolamono-ttf inconsolata-ttf
On vérifie ensuite quelles sont bien prises en compte dans xorg par la commande:
fc-list
Si on rencontre un problème d'anti-aliasing avec la police Helvetica:
cat > /usr/local/etc/fonts/local.conf <<EOF <?xml version='1.0'?> <!DOCTYPE fontconfig SYSTEM 'fonts.dtd'> <fontconfig> <dir>~/.fonts</dir> <!-- do not use the embedded bitmap instead of the outline <https://www.freebsd.org/cgi/man.cgi?query=fonts-conf&sektion=5&manpath=FreeBSD+and+Ports> <https://bbs.archlinux.org/viewtopic.php?id=161609> post 2 (2013) <https://redd.it/7kqr5l> (2017) --> <match target="font"> <edit name="embeddedbitmap" mode="assign"> <bool>false</bool> </edit> </match> <!-- prefer outline e.g. TrueType instead of bitmap fonts <https://bbs.archlinux.org/viewtopic.php?id=161609> post 2 (2013) <https://redd.it/4tb2dt> (2016) --> <match target="font"> <edit name="prefer_outline"> <bool>true</bool> </edit> </match> <!-- reject bitmap fonts, except Ohsnapu - prefer PostScript, TrueType et cetera <https://forums.freebsd.org/threads/howto-nice-fonts.2021/> (2009) <https://redd.it/4tb2dt> (2016) --> <selectfont> <acceptfont> <pattern> <patelt name="family"> <string>Ohsnapu</string> </patelt> </pattern> </acceptfont> <rejectfont> <pattern> <patelt name="scalable"> <bool>false</bool> </patelt> </pattern> </rejectfont> </selectfont> </fontconfig> EOF
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"
On l'installe en français par ces deux commandes:
pkg install firefox firefox-i18n
On l'installe par cette commande:
pkg install chromium
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 <<EOF vo=vaapi hwdec=vaapi fs=yes EOF
Comme pour les autres:
pkg install fr-libreoffice
Il estera à installer l'extension «dictionnaire français» et l'extension de «correction grammaticale».
Passons au support de l'impression par l'installation cups et à l'ajout de votre utilisateur dans le groupe cups:
pkg install cups cups-filters
pw groupmod cups -m $USERNAME
Puis, pour une imprimante locale (USB) éditer le fichier /etc/devfs.rules et ajoutez:
[localrules=10] add path 'unlpt*' mode 0660 group cups add path 'ulpt*' mode 0660 group cups add path 'lpt*' mode 0660 group cups add path 'usb/X.Y.Z' mode 0660 group cups
En remplaçant X.Y.Z par l'identifiant USB correspondant à l'imprimante (cherchez le “ugenX.Y” dans votre dmesg).
Et activer cupsd et ces règles devfs:
sysrc devfs_system_ruleset=localrules service cupsd enable
Il est possible d'installer des drivers supplémentaires pour cups. Comme je possède par exemple une imprimante Samsung ML-2955ND, j'installe en plus print/splix.
Puis on active le tout:
service devfs restart service cupsd restart
Ne reste plus qu'a ajouter l'imprimante en passant par l'interface d'administration de cups http://localhost:631
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
La configuration d'un serveur TFTP est très simple:
service inetd enable
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 inpcbconnectsetup() du fichier /usr/src/sys/netinet/in_pcb.c :
if (sin->sin_port == 0)
return (EADDRNOTAVAIL);
Et recompiler le noyau…
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):
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
.
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
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
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.
La couche de gestion des disques est geom, l'outil pour afficher le taux d'utilisation est gstat.
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 ---------------------------------------------------------------------------------------------------------------
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 <nom du service> permet d'identifier le programme
2) pkg wich <path du programme> permet d'identifier le paquet
3) pkg info -D <nom du paquet> permet de fournir des infos sur le paquet
Si on souhaite la dernière version de FreeBSD avec la pile TCP BBR1) et un OS optimisé pour le processeur:
pkg install git git clone -o freebsd https://git.freebsd.org/src.git -b main /usr/src` `
CPUTYPE?=native
et Déclaration d'un kernel spécifiquecat > /etc/make.conf <<EOF CPUTYPE?=native KERNCONF=BBR WITH_META_MODE=yes WITH_DIRDEPS_BUILD=yes WITH_DIRDEPS_CACHE=yes WITHOUT_LIB32=yes WITHOUT_LLVM_ASSERTIONS=yes WITH_MALLOC_PRODUCTION=yes MALLOC_PRODUCTION=yes DEVELOPER=yes EOF
cat >/usr/src/sys/amd64/conf/BBR <<EOF include GENERIC-NODEBUG ident BBR options TCPHPTS options RATELIMIT makeoptions WITH_EXTRA_TCP_STACKS=1 options KDB_UNATTENDED EOF
cd /usr/src make -j 32 buildworld buildkernel tools/build/beinstall.sh
shutdown -r now echo "net.inet.tcp.functions_default=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
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:
pkg install poudriere-devel cat >> /usr/local/etc/poudriere.conf <<EOF ZPOOL=zroot FREEBSD_HOST=https://download.FreeBSD.org ALLOW_MAKE_JOBS=yes EOF
mkdir -p /usr/ports/distfiles poudriere jail -c -j builder -m src=/usr/src poudriere ports -c -U https://git.freebsd.org/ports.git -m git -B main
echo 'CPUTYPE?=native' >> /usr/local/etc/poudriere.d/make.conf
cat > /root/packages.list <<EOF sysutils/tmux devel/git ports-mgmt/poudriere-devel editors/vim-console lang/python x11/xorg-apps x11-wm/xfce4 x11/xfce4-goodies graphics/gimp multimedia/vlc graphics/drm-current-kmod www/chromium editors/libreoffice french/libreoffice security/sudo sysutils/vm-bhyve x11/slim multimedia/webcamd sysutils/ipmitool x11/nvidia-xconfig x11/nvidia-settings x11-drivers/xf86-video-nv x11/nvidia-driver x11-drivers/xf86-video-vesa x11-drivers/xf86-video-scfb x11-fonts/dejavu x11-fonts/bitstream-vera x11-fonts/webfonts x11-fonts/terminus-font x11-fonts/ubuntu-font x11-fonts/consolamono-ttf x11-fonts/inconsolata-ttf x11-fonts/urwfonts EOF
poudriere bulk -j builder -f /root/packages.list
mkdir -p /usr/local/etc/pkg/repos/ cat > /usr/local/etc/pkg/repos/local.conf <<EOF local: { url: "file:////usr/local/poudriere/data/packages/builder-default/", signature_type: "none", assume_always_yes: true, enabled: yes } EOF sed -i '' 's/yes/no/' /etc/pkg/FreeBSD.conf