Bidouillage‎ > ‎

Installation et Configuration de FreeBSD comme poste de travail


Table des matières

  1. 1 Objectifs
    1. 1.1 Recensement de mes besoins
    2. 1.2 Sources d'information
  2. 2 Installation
    1. 2.1 Récupération du fichier ISO/IMG
    2. 2.2 FreeBSD Installer
  3. 3 Configuration du système de base
    1. 3.1 Comment sont organisés les fichiers ?
    2. 3.2 Le Shell
    3. 3.3 Diminuer le timeout du menu du boot loader
    4. 3.4 Permettre la mise à l'heure automatique
    5. 3.5 Désactiver le buzzer
    6. 3.6 Les Drivers
      1. 3.6.1 Chargement du drivers du lecteur de carte SD
      2. 3.6.2 Audio
      3. 3.6.3 Bluetooth
      4. 3.6.4 SMBus
      5. 3.6.5 ACPI spécifiques constructeurs
      6. 3.6.6 Ne pas alimenter les périphériques sans drivers
    7. 3.7 Configuration avancée du réseau
      1. 3.7.1 Wifi
      2. 3.7.2 Activation du Privacy Extension d'IPv6
      3. 3.7.3 Failover entre carte réseau filaire et wifi
      4. 3.7.4 USB Tethering
      5. 3.7.5 Firewall
    8. 3.8 Localisation
      1. 3.8.1 Configuration du système en français
      2. 3.8.2 Configuration du clavier Bépo
    9. 3.9 Permettre à l'utilisateur d'utiliser les périphériques USB, graveur CD/DVD
    10. 3.10 Optimisations
      1. 3.10.1 Mise à jour des microcodes CPU
      2. 3.10.2 Configurer le scheduler pour un usage «desktop»
      3. 3.10.3 Réparation fsck automatique et background fsck (sauf si installation ZFS)
      4. 3.10.4 Désactivation de l'access time sur votre partition /
      5. 3.10.5 Pourcentage réservé du disque
      6. 3.10.6 Éviter la création de fichier .core
    11. 3.11 Installation des Mises à jour de FreeBSD
    12. 3.12 Utiliser DMA à la place de sendmail
  4. 4 Installation des logiciels
    1. 4.1 Utilisation de pkg
    2. 4.2 Installer les root CA
    3. 4.3 Remplacer powerd par powerd++
    4. 4.4 Montage automatique des disques amovibles
  5. 5 Environnement graphique X11
    1. 5.1 xorg
    2. 5.2 Drivers vidéo X11 pour Intel
    3. 5.3 Drivers vidéo X11 pour nvidia
    4. 5.4 Disposition du clavier
    5. 5.5 dbus et HAL
    6. 5.6 Polkit
    7. 5.7 Pavé Synaptics, Trackpoint (Lenovo) ou Elantec
    8. 5.8 SLIM
      1. 5.8.1 Installation
      2. 5.8.2 Thème FreeBSD
    9. 5.9 XFCE4
    10. 5.10 Police de caractères
  6. 6 Les applications
    1. 6.1 Webcam
    2. 6.2 Firefox
    3. 6.3 Chromium
    4. 6.4 mpv
    5. 6.5 LibreOffice
    6. 6.6 CUPS
  7. 7 Trucs & astuces
    1. 7.1 Configurations particulières
      1. 7.1.1 Gérer la présence d'un proxy HTTP/HTTPS
      2. 7.1.2 Serveur TFTP
      3. 7.1.3 Émulateur de terminal série (équivalent de l'hyperterminal ou teraterm)
    2. 7.2 Collecte d'information
      1. 7.2.1 Inventaire matériel
      2. 7.2.2 Charge système par des graphiques: systat
      3. 7.2.3 Charge système en mode compact: vmstat
      4. 7.2.4 Charge des disques: gstat
      5. 7.2.5 Consomation électrique
    3. 7.3 Usage de ntfs-3g dans le fstab
    4. 7.4 Résolution de problème
      1. 7.4.1 umount failed: Device busy

Objectifs

Ce document inclus l'ensemble des étapes réalisées pour obtenir FreeBSD 11 installé pour une utilisation optimisée «poste de travail» (Gnome, 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 TrueOS, mais je préfère avoir un «vrai» FreeBSD, entièrement recompilé et installé à la main :-) 
Pour ceux qui souhaitent découvrir FreeBSD sans rien toucher à leur système, il existe aussi VirtualBSD sous forme d'image VMware player.

Recensement de mes besoins

Utilisateur de Linux Ubuntu, je souhaiterais faire exactement la même chose sous FreeBSD, c'est-à-dire avoir le support matériel complet de mon PC portable (Lenovo ideapad S300, Lenovo Thinkpad X220): Video, LAN, Wifi, Bluetooth et une gestion de l'énergie minimale.
De plus, comme c'est sur le PC portable du bureau que je vais l'installer, il va me falloir obligatoirement les logiciels suivants:
  • Keepass pour le stockage des mots de passe et role d'agent de clé SSH avec le plugin KeeAgent;
  • Un hyperviseur: bhyve, permettant de lancer un MS Windows pour MS Office et Visio;
  • LibreOffice;
  • Veracrypt, car il s'agit de le la seule solution multiplateforme de chiffrement que je connaisse;
  • GNS3, superbe environnement graphique pour monter des maquettes d'émulation Cisco/Juniper/BSD Router Project (Note: de l'autopub se cache dans cette ligne);
  • Aircrack-ng (avec airerplay de fonctionnel pour de l'injection de paquet);
  • Wireshark;
  • Chromium et/ou Firefox;
  • Un émulateur de terminal VT100 sur port série (intégré: «cu» ou «tip»)

Sources d'information

Voici les principales sources d'informations utilisées:

Installation

Si vous souhaitez chiffrer vos partitions sans ZFS, suivre ce guide d'installation: Installation de FreeBSD (9.1) sur partition chiffrée.
Le chiffrement avec ZFS est nativement supporté par l'installer.

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:
  1. Cela commence par la sélection du type de clavier et le hostname: Ça c'est votre problème
  2. Concernant les distributions à installer: Décocher le port-tree s'il est coché, et garder les lib32 ! (obligatoire pour virtualbox)
  3. Partitionnement: Si vous avez 4Go de RAM ou moins, choisir le mode "Auto (UFS)", sinon "Auto (ZFS)" pour vous simplifier la vie, mais si vous souhaitez le faire 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). Labellisez-là "swap" par exemple.
    • Puis créer une seconde partition avec tout le reste pour la partition root / (pour un poste de travail, ne faites pas ça sur un serveur!). Labellisez-là "rootfs" par exemple.
  4. Si votre machine supporte l'assistance matérielle pour le chiffrement (AESNI) et que vous l'installez sur un laptop, l'activation du chiffrement est une bonne idée (a noter que lors du boot le clavier sera en QWERTY)
  5. Puis sélectionner le disque et «Entire Disk»:  je ne suis pas fan de la coopération avec d'autre systèmes :-)
  6. Partiton Editor: Si vous êtes en mode «Guided» contentez-vous de faire «Exit» et «Save»
  7. Attendre environ 2 minutes pour l'installation
  8. Puis viennent quelques questions triviales: mot de passe de l'utilisateur root, configuration du réseau (incluant le Wifi) et la timezone
  9. Concernant les services à démarrer automatiquement: Désactiver sshd (rien à faire sur un desktop) et activez ntpd et powerd
  10. Créer votre utilisateur
    1. À 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
    2. Login class, laissez «default» (on la changera plus tard)
    3. Shell: tcsh
    4. Home directory: Par défaut
    5. Puis choisissez un mot de passe et confirmez la création
  11. 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...)
Les allergiques à l'installateur en mode texte peuvent installer TrueOS et sélectionner «FreeBSD» lors de l'installation.

Configuration du système de base

Comment sont organisés les fichiers ?

Première question, et première démonstration de force de FreeBSD, la réponse est incluse par la man page de hier:
man hier

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 votre 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 vous souhaitez utiliser un autre shell pour le compte root: modifiez 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 on va 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
# Disable system beep
set nobeep
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

Permettre la mise à l'heure automatique

sysrc ntpd_enable=yes
sysrc ntpd_sync_on_start=yes


Désactiver le buzzer

cat >> /etc/sysctl.conf <<EOF
# Désactive le buzzer en mode vt(4)
kern.vt.enable_bell=0
# Désactive le buzzer en vieux mode syscons(4)
hw.syscons.bell=0
EOF

Les Drivers

FreeBSD ne charge pas par défaut tous les drivers possibles, 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 remarque: 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.

Chargement du drivers du 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 vous n'avez 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 les vôtres ne le sont pas, 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 par la vieille méthode suivante:
[root@laptop]~#sysrc kld_list+=snd_hda
Ou, depuis la 9.0, en ajoutant son nom dans la variable kld_list du fichier /etc/rc.conf.

Bluetooth

Pour utiliser les enceintes/casques bluetooth, c'est par le package virtual_oss (pkg install virtual_oss) qu'il faut passer.

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: <System Management Bus> on ichsmb0

Puis ajouter ce module à la liste de module à charger automatiquement:

sysrc kld_list+=smbus

ACPI spécifiques constructeurs

Très utile sur les PC portables, il y a les modules ACPI spécifiques aux constructeurs.

Voici la liste des modules dispos sous FreeBSD 11:

 Nom du module
 Description
 acpi_asus.ko Asus Laptop Extras
 acpi_dock.koLaptop Docking Station device driver
 acpi_fujitsu.koFujitsu Laptop Extras
 acpi_hp.koACPI extras driver for HP laptops
 acpi_ibm.koACPI extras driver for IBM laptops (ou Lenovo)
 acpi_panasonic.koACPI hotkey driver for Panasonic laptops
 acpi_sony.koACPI notebook controller driver for Sony laptops
 acpi_toshiba.koToshiba HCI interface
 acpi_video.koACPI Video Extensions driver
 acpi_wmi.koACPI to WMI mapping driver (auto-chargé par les autres si nécessaire)

À ajouter à la variable kld_load en fonction de votre matériel.
Par exemple pour mon laptop HP j'ai: acpi_hp et acpi_video.

Ne pas alimenter les périphériques sans drivers

Ce qui permet d'économiser de la batterie:
echo "hw.pci.do_power_nodriver=1" >> /etc/sysctl.conf

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

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 votre 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 Ethernet et on configure la carte wifi avec cette même adresse MAC (ce qui permet de présenter la même adresse quelque soit l'interface utilisée):

setenv MACETH `ifconfig em0 | grep hwaddr | cut -d ' ' -f 2`
sysrc wlans_iwn0=wlan0
sysrc ifconfig_em0=up
sysrc ifconfig_wlan0=WPA
sysrc create_args_wlan0="wlanaddr $MACETH 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: <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.

Firewall

La configuration du firewall en mode "workstation" est assez simple:
sysrc firewall_enable=yes
sysrc firewall_type=workstation
service ipfw start
Dans le cas ou vous souhaiteriez héberger quelques services réseau sur votre machine, il est possible de les déclarer simplement:
sysrc firewall_myservices="22,80,443"
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

Source: FreeBSD Handbook, Using Localization

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 votre 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

Configuration du clavier Bépo

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

Permettre à l'utilisateur d'utiliser les périphériques USB, graveur CD/DVD

Commencer par permettre aux utilisateurs de monter des périphériques:

sysrc -f /etc/sysctl.conf vfs.usermount=1

sysctl vfs.usermount=1

Et si vous n'avez pas mis votre 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

Optimisations

Mise à jour des microcodes CPU

C'est plutôt utile sur les serveurs en général:

pkg install devcpu-data

sysrc microcode_update_enable=YES

service microcode_update start

Configurer le scheduler pour un usage «desktop»

On commence par optimiser le scheduler pour un usage desktop:

sysrc -f /etc/sysctl.conf kern.sched.preempt_thresh=224

Réparation fsck automatique et background fsck (sauf si installation ZFS)

Pour activer la réponse «yes» aux questions de fsck au démarrage:

sysrc fsck_y_enable=YES

Désactivation de l'access time sur votre partition /

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

Pourcentage réservé du disque

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».

Éviter la création de fichier .core

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

Installation des Mises à jour de FreeBSD

Cela ce fait simplement par la commande suivante:

freebsd-update fetch install

Vous devez utiliser le noyaux GENERIC pour que cet outil mette aussi les binaires du noyau à jour.

Utiliser DMA à la place de sendmail

DragonFly Mail-Agent (inclus à partir de FreeBSD-11) permet de remplacer sendmail si votre besoin est uniquement que votre serveur/desktop envoie des emails.

sysrc sendmail_enable=NONE

service sendmail onestop

cat >/etc/mail/mailer.conf <<EOF
#DMA mail configuration
sendmail    /usr/libexec/dma
send-mail   /usr/libexec/dma
mailq       /usr/libexec/dma
newaliases  /usr/bin/true
hoststat    /usr/bin/true
purgestat   /usr/bin/true
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


Installation des logiciels

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

Un des premiers packages à installer est celui des root CA:

    pkg inst ca_root_nss

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

sysrc powerd_enable=NO

service powerd stop

sysrc powerdxx_enable=YES

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|exfat|ext4].

pkg install automount fusefs-ntfs fusefs-exfat fusefs-ext4

Commencer par l'activation de fuse, autofs et automount et déclarer l'usage de /media dans /etc/auto_master:

sysrc fusefs_enable=YES
sysrc autofs_enable=YES
sysrc automount_enable=YES
sysrc automountd_enable=YES
sysrt autounmountd_enable=YES
sed -i "" -e "s/#\/media/\/media/" /etc/auto_master

Ensuite il faut ajouter l'execution d'automount suite à un event devd (la configuration existe déja mais est placée dans une section commentée):
cat >>/etc/devd.conf <<EOF
# Discard autofs caches, useful for the -media special map.
notify 100 {
        match "system" "GEOM";
        match "subsystem" "DEV";
        action "/usr/sbin/automount -c";
};
EOF


Puis le lancer le service fusefs:

service fusefs start
service automount start
service automountd start
service autoumountd start

Puis on relance le service devd pour qu'il charge la configuration d'automount:
service devd restart
Désormais, dans le dossier /media vous devriez retrouver le nom des disques USB connectés.

Environnement graphique X11

xorg

Commençons par installer xorg et le xscreensaver:

pkg install xorg xscreensaver

Drivers vidéo X11 pour Intel

Puis les drivers Intel (si votre machine possède une carte Intel) et les bibliothèques d’accélération vidéo (si vous disposez d'une carte style i965 par exemple):

pkg install xorg xf86-video-intel libva-intel-driver

Ensuite ajouter votre utilisateur au groupe "video" pour lui permettre d'accéder au DRI:

pw groupmod video -m $USERNAME

Ensuite vous testez que ça fonctionne: Et surtout vous testez aussi le suspend/resume.

Pour les utilisateurs de carte Intel Sandybridge (ou mieux), l'activation du mode SNA peut-être bénéfique (vérifiez-le 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.

Drivers vidéo X11 pour nvidia

Pour un drivers nvidia, il y a plusieurs drivers en fonction de la génération de votre 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

Disposition du clavier

Pour préciser le type de clavier, 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 Defauls"
        Driver "keyboard"
        MatchIsKeyboard "on"
        Option "XkbLayout" "fr"
EndSection

EOF

Pour du bepo, il suffit de préciser la variante à la clé XkbLayout:

Option "XkbLayout" "fr(bepo)"

dbus et HAL

L'usage de HAL est devenu obsolète car les outils devraient de plus en plus utiliser devd(8).

Xorg est compilé avec le support de HAL (qui ne sert qu'à permettre le montage automatique des clés USB sous les environnements gnome/KDE), on configure le lancement automatique de ceux-ci:

sysrc dbus_enable=YES

sysrc hald_enable=YES

Et on les lance:

service dbus start

service hald start

Par défaut, FreeBSD ne monte ni procfs ni fdesc. Mais certaines applications (comme HAL) 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/

Polkit

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, on va corriger un problème de permission manquantes concernant les actions .
Vous devriez remarquer 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"/>

Pavé Synaptics, Trackpoint (Lenovo) ou Elantec

Pour faire simple, on va laisser le daemon moused présenter l'interface sysmouse à Xorg.
Mais il faut dire à celui-ci que vous avez ce type de souris:
echo 'hw.psm.synaptics_support="1"' >> /boot/loader.conf
sysrc moused_enable=YES
service moused start

Pour un trackpoint ou un elantec il faut remplacer le mot "synaptics" par votre type de pointeur.

Sous Xorg, la commande "xset mouse 5 1" permet d'améliorer l'accélération, il suffit d'ajouter cette ligne à votre ~/.xinitrc
Et si cela ne suffit pas, il faut passer par la méthode "autostart" de votre environnement.
Sinon l'idée de modifier votre .xsession pour lui ajouter la ligne:
sh .xinitrc
Par exemple pour LXDE il faut créer fichier ~/.config/lxsession/LXDE/autostart et lui mettre la ligne suivante:
@xset m 5 1

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:

cat >.xinitrc <<EOF

DEFAULT_SESSION=startlxde

#Slim ne prend pas en compte les locales de la console, il faut les reforcer ici:

export LANG="fr_FR.UTF-8"

export MM_CHARSET="UTF-8"
case $1 in
lxde)
    exec startlxde
    ;;
xfce4)
    exec startxfce4
    ;;
icewm)
    icewmbg &
    icewmtray &
    exec icewm
    ;;
wmaker)
    exec wmaker
    ;;
blackbox)
    exec blackbox
    ;;
*)
    exec $DEFAULT_SESSION
    ;;
esac
EOF

Activez son lancement automatique:

sysrc slim_enable=YES

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

XFCE4

Un environnement de bureau que j’apprécie par sa légèreté:

pkg install xfce4 xfce4-mixer xfce4-volumed xscreensaver

Police de caractères

Puis on installe de jolies polices de caractères:

pkg install dejavu urwfonts bitstream-vera webfonts

On vérifie ensuite quelles sont bien prises en compte dans xorg par la commande:
fc-list

Si vous rencontrez un problème d'anti-aliasing avec la police Helvetica (j'ai ce problème sous Firefox), cf les conseils du handbook concernant cette police pour le corriger:

cat > /usr/local/etc/fonts/local.conf <<EOF
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
         <match target="pattern" name="family">
             <test qual="any" name="family">
                 <string>Helvetica</string>
             </test>
             <edit name="family" mode="assign">
                 <string>sans-serif</string>
             </edit>
         </match>      
</fontconfig>
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:
sysrc webcamd_enable=YES

Ajouter le module cuse à la liste kld_load:
sysrc kld_list+="cuse"
kldload cuse

Une fois terminé, ajoutez votre utilisateur au groupe webcamd:
pw groupmod webcamd -m votre-utilisateur

Afficher la liste des périphériques utilisable:
webcamd -l

Et testez votre 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 votre 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"

Firefox

On l'install en français par ces deux commandes:

pkg install firefox firefox-i18n

Chromium

On l'install 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 et configure comme ceci:

pkg install mpv

mkdir ~/.config/mpv

cat > ~/.config/mpv.conf <<EOF

vo=vaapi

hwdec=vaapi

fs=yes

EOF

LibreOffice

Comme pour les autres:

pkg install fr-libreoffice

Il vous restera à installer l'extension «dictionnaire français» et l'extension de «correction grammaticale».

CUPS

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) éditez 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 à votre imprimante (cherchez le "ugenX.Y" dans votre dmesg).
Et activer cupsd et ces règles devfs:
sysrc devfs_system_ruleset=localrules
sysrc cupsd_enable=YES"
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 votre imprimante en passant par l'interface d'administration de cups http://localhost:631
Si vous avez activé le firewall cups ne trouvera pas automatiquement votre imprimante réseau.
Un petit tour pour récupérer le dernier PPD correspondant à votre imprimante sur openprinting.org vous sera surement obligatoire.

Trucs & astuces

Configurations particulières

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:

  1. Créer le dossier /tftpboot
  2. Mettre vos fichier à partager dans le dossier /tftpboot
  3. Editer le fichier /etc/inetd.conf et décommenter la ligne tftp
  4. Activer inetd:
    • sysrc inetd_enable=YES
  5. Puis lancer inetd:
    • service inetd start

Attention, 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 vous voulez 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 votre 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 de vos ports séries (man uart):

  1. cuauX, pour les appels sortants
  2. ttyuX, pour les appels entrants

cu s'utilise avec des options en ligne de commande, par exemple:

cu -l /dev/cuau0 -s 115200

J'ai un problème à résoudre: le comportement de la touche DEL à corriger.

tip lui utilise le fichier de configuration /etc/remote.

Vous trouverez plus d'information dans l'article: FreeBSD Basic - Accessing a Cisco Router.

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 remarque 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.

Consomation é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

Résolution de problème

umount failed: Device busy

Je rencontre assez souvent le problème suivant: Impossible de démonter certains volumes, alors que je ne les utilise plus:

[root@laptop]~#umount /usr/obj/nanobsd.full/_.mnt/
umount: unmount of /usr/obj/nanobsd.full/_.mnt failed: Device busy

Regarder quel est le process qui nous empêche de démonter ce dossier:

[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/

Il s'agit de gam_server, mais qu'est ce que c'est que ce truc ???

[root@laptop]~#locate gam_server
/usr/local/libexec/gam_server
/usr/ports/devel/gamin/files/patch-server_gam_server.c
[root@laptop]~#pkg wich /usr/local/libexec/gam_server
/usr/local/libexec/gam_server was installed by package gamin-0.1.10_3
[root@laptop]~#pkg info -D gamin
Information for gamin-0.1.10_3:

Description:
Gamin is a file and directory monitoring system defined to be a subset of the
FAM (File Alteration Monitor) system. This is a service provided by a library
which allows to detect when a file or a directory has been modified.

Whereas the FreeBSD port of FAM polls files every few seconds, this port
includes a kqueue(2) backend for immediate notification of most alterations.

WWW: http://www.gnome.org/~veillard/gamin/index.html

Il s'agit d'un process qui surveille les fichiers et dossiers.... Peux être qu'il ne sert à rien ?

On demande la liste des packages dépendant de ce truc:

pkg info -r gamin-0.1.10_3

Bon, vu la taille de la réponse ca à l'air utile...  Avant d'utiliser une méthode de bourrin (tuer le process), on va vérifier qu'il n'y a pas de notes particulière concernant ce programe:

[root@d630]~#pkg info -D gamin-0.1.10_3
Information for gamin-0.1.10_3:

Install notice:
===============================================================================

Gamin will only provide realtime notification of changes for at most n files,
where n is the minimum value between (kern.maxfiles * 0.7) and
(kern.maxfilesperproc - 200). Beyond that limit, files will be polled.

If you often open several large folders with Nautilus, you might want to
increase the kern.maxfiles tunable (you do not need to set
kern.maxfilesperproc, since it is computed at boot time from kern.maxfiles).

For a typical desktop, add the following line to /boot/loader.conf, then
reboot the system:

    kern.maxfiles="25000"

The behavior of gamin can be controlled via the various gaminrc files.
See http://www.gnome.org/~veillard/gamin/config.html on how to create
these files.  In particular, if you find gam_server is taking up too much
CPU time polling for changes, something like the following may help
in one of the gaminrc files:

# reduce polling frequency to once per 10 seconds
# for UFS file systems in order to lower CPU load
fsset ufs poll 10

===============================================================================


Ok, les informations donnée sur l'URL sont très interressante, je vais donc essayer de configurer finement le gamin pour qu'il arrête de m'embêter:

mkdir /usr/local/etc/gamin

echo "fsset ufs poll 10" > /usr/local/etc/gamin/gaminrc

killall -9 gam_server

Comments