Installation et Configuration de FreeBSD comme poste de travail

Objectifs

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 :-)

Recensement de mes besoins

Support matériel complet de mon PC portable (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:

    • KeepassXC pour une solution multi-plateforme stockage des mots de passe et rôle d'agent de clé SSH;

    • 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;

    • 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é lors de l'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:

    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: Laisserz les valeurs par défaut (kernel-debug et lib32 qui sont obligatoire pour certaine applications comme 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. Partition 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 si vous selectionnez cette interface) 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

    1. 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...)

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

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

Boot

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

Logo Orb du bootloader EFI ne s'affiche pas en bitmap

Fonctionnalité la plus attendue de FreeBSD 13, absolument obligatoire: L'affichage du nom FreeBSD et du logo en bitmap.

Sauf que sur mon Thinkpad T420, 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, dans le cas du Thinkpad T420 c'est du 1366x768, donc:

echo 'efi_max_resolution="1366x768"' >> /boot/loader.conf

Permettre la mise à l'heure automatique

Si vous ne l'avez 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: <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.

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

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

À ajouter à la variable kld_load en fonction de votre matériel.

Par exemple pour mon laptop HP j'ai: acpi_ibm, acpi_video et acpi_dock.

Ne pas alimenter les périphériques sans drivers

Ce qui permet d'économiser de la batterie:

echo "hw.pci.do_power_nodriver=3" >> /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

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

service firewall enable

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

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

La disposition AFNOR (bépo 1.1rc2) est incluse à partir de FreeBSD 14.0, en attendant il suffit de télécharger le fichier kbd sur le dépot git:

fetch https://cgit.freebsd.org/src/plain/share/vt/keymaps/fr.bepo.kbd

cp fr.bepo.kbd /usr/share/vt/keymaps/

sysrc keymap=fr.bepo.kbd

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

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

# 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

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, vous pouvez 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 vous devriez retrouver le nom des disques USB connectés.

Environnement graphique X11

xorg

Ajouter votre 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, vous pouvez 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 votre 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 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

dbus

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/

Polkit (Chapitre désormais inutile?)

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

À partir de FreeBSD 12.1 il est fortement conseillé d'utiliser le mode EVDEV.

Mais il faut dire à celui-ci que vous avez 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 votre type de pointeur.

Puis d'activer le mode evdev:

echo 'kern.evdev.rcpt_mask=6' >> /etc/sysctl.conf

sysctl kern.evdev.rcpt_mask=6

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

Activez 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 <<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)"

XFCE

Un environnement de bureau que j’apprécie par sa légèreté (pour qu'il prenne en compte votre .Xresources il faut le lancer avec xfce4-session et non pas avec startxfce4):

pkg install xfce 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 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 vous rencontrez un problème d'anti-aliasing avec la police Helvetica (j'ai ce problème sous Firefox), cf les conseils trouvé sur le forum FreeBSD:

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

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é, 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"

sysrc webcamd_1_flags="-N vendor-0x046d-HD-Pro-Webcam-C920"

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

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

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

    • service inetd enable

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

Personalisation avancée: Compilation des sources

FreeBSD

Exemple si on souhaite la dernière version de FreeBSD avec la pile TCP BBR et un OS optimisé pour notre processeur:

  1. Téléchargement des sources

  2. Activation de CPUTYPE?=native

  3. Déclaration d'un kernel spécifique

  4. Désactivation des fonctionnalités de débuggage qui sont activé dans la version de dev

  5. Compilation et installation avec les BE (Boot Environment ZFS)

pkg install git

git clone -o freebsd https://git.freebsd.org/src.git -b main /usr/src

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

Les ports

Idem si on souhaite des ports compilés avec les optimisations de votre processeur:

  1. Installation et configuration de poudriere

  2. Personnalisation du make.conf utilisé pour compiler l'ensemble des ports

  3. Initialisation de poudriere par la création de la jail utilisé pour générer les ports et le téléchargement de l'arbre des ports

  4. Création de la liste des ports (pour connaitre la catégorie, exemple: pkg rquery '%o' poudriere-devel)

  5. Lancement de la compilation des ports

  6. Configuration d'un dépôt local et désactivation du dépôt officiel

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

pkg install chrome xfce4 xfce4-goodies