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;
Veracrypt, car il s'agit de le la seule solution multiplateforme de chiffrement que je connaisse;
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:
FreeBSD Handbook: Le guide de référence
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:
Cela commence par la sélection du type de clavier et le hostname: Ça c'est votre problème
Concernant les distributions à installer: Laisserz les valeurs par défaut (kernel-debug et lib32 qui sont obligatoire pour certaine applications comme virtualbox)
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.
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)
Puis sélectionner le disque et «Entire Disk»: je ne suis pas fan de la coopération avec d'autre systèmes :-)
Partition Editor: Si vous êtes en mode «Guided» contentez-vous de faire «Exit» et «Save»
Attendre environ 2 minutes pour l'installation
Puis viennent quelques questions triviales: mot de passe de l'utilisateur root, configuration du réseau (incluant le Wifi si vous selectionnez cette interface) et la timezone
Concernant les services à démarrer automatiquement: Désactiver sshd (rien à faire sur un desktop) et activez ntpd et powerd
Créer votre utilisateur
À la question «Invite USER into other groups?», répondre, avec un simple espace entre les noms: wheel operator dialer video
«wheel», permet de passer root par la commande su
«operator», obligatoire pour utiliser la commande su et éteindre le PC
«dialer», permet d'utiliser les ports séries (par «cu» et «tip»)
«video», permet d'accéder à la carte graphique
Login class, laissez «default» (on la changera plus tard)
Shell: tcsh
Home directory: Par défaut
Puis choisissez un mot de passe et confirmez la création
De retour sur le «Final Configuration», sélectionner «Exit», puis «Reboot»
Attention au vocabulaire utilisé par FreeBSD:
Un «slice» est une partition MBR, elles portent comme nom: Le nom du disque suivi des lettres s1, s2, s3, etc...
Une «partition» est une sous-partition MBR, elles portent comme nom: Le nom du disque, éventuellement le nom du slice, puis une lettre (a pour l'ensemble, b pour la swap, etc...)
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:
Créer le dossier /tftpboot
Mettre vos fichier à partager dans le dossier /tftpboot
Editer le fichier /etc/inetd.conf et décommenter la ligne tftp
Activer inetd:
service inetd enable
Puis lancer inetd:
service inetd start
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):
cuauX, pour les appels sortants
ttyuX, pour les appels entrants
cu s'utilise avec des options en ligne de commande, par exemple:
cu -l /dev/cuau0 -s 115200
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:
Téléchargement des sources
Activation de CPUTYPE?=native
Déclaration d'un kernel spécifique
Désactivation des fonctionnalités de débuggage qui sont activé dans la version de dev
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:
Installation et configuration de poudriere
Personnalisation du make.conf utilisé pour compiler l'ensemble des ports
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
Création de la liste des ports (pour connaitre la catégorie, exemple: pkg rquery '%o' poudriere-devel)
Lancement de la compilation des ports
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