FreeBSD (3/3) Ports & optims
On s’attaque maintenant à ce qui fait la spécificité des systèmes *BSD, à savoir l’installation à partir des sources et les « Jails ».
Merci à Olivier <https://olivier.cochard.me/bidouill...> et aux hors séries n°29 & n°30 de Linux Mag (2007) qui m’ont servi de base pour cette doc…
Compilation des sources FreeBSD
Que l’on souhaite la dernière version de FreeBSD avec la pile TCP BBR et juste un OS optimisé pour son processeur :
- Télécharger les sources :
# pkg install git
# git clone -o freebsd https://git.freebsd.org/src.git -b releng/13.1 /usr/src - Activation de
CPUTYPE?=native
:# cat > /etc/make.conf <<EOF
CPUTYPE?=native
KERNCONF=MYKERNEL
WITH_META_MODE=yes
WITH_DIRDEPS_BUILD=yes
WITH_DIRDEPS_CACHE=yes
WITHOUT_LLVM_ASSERTIONS=yes
WITH_MALLOC_PRODUCTION=yes
MALLOC_PRODUCTION=yes
DEVELOPER=yes
#WITHOUT_LIB32=yes
#MODULES_OVERRIDE=linux acpi sound/sound sound/driver/dr1 ntfs
EOF - Déclaration d’un kernel spécifique :
# cat >/usr/src/sys/i386/conf/MYKERNEL <<EOF
include GENERIC
ident MYKERNEL
options TCPHPTS
options RATELIMIT
makeoptions WITH_EXTRA_TCP_STACKS=1
options KDB_UNATTENDED
EOF - Compilation et installation :
# cd /usr/src
# make -j2 buildworld buildkernel KERNCONF=MYKERNELBon après plus de 12h de compilation (sur mon vieux Dual-core) on peut installer le nouveau noyau !
# make installkernel KERNCONF=MYKERNEL
La suite n’est pas faisable directement, il nous faut redémarrer et passer en mode mono-utilisateur (option 2 dans le menu de boot, attention le clavier est en qwerty) :
# shutdown -r now
# fsck -p
# mount -u /
# mount -a -t ufs
# swapon -a
# adjkerntz -i
# mergemaster -p
# cd /usr/src/
# make installworld KERNCONF=MYKERNEL
# mergemaster
# rebootOn vérifie que le nouveau noyau est bien pris en compte :
uname -v
FreeBSD 13.1-RELEASE-p7 releng/13.1-n250182-00935d2e533c MYKERNEL
- Activation de la pile TCP BBR :
# 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
- P.S. si vous avez besoin de (re)compiler un module / driver il n’est pas nécessaire de recompiler l’ensemble :
# cd /usr/src/sys/modules/<module>/
# make
# make load
Les ports
Idem si on souhaite des ports compilés avec les optimisations de votre processeur :
- La première chose à faire est de récupérer / mettre à jour le catalogue des logiciels portés, pour cela la méthode classique / recommandée est d’utiliser Portsnap :
# portsnap fetch
# portsnap extract
# portsnap update - Ensuite l’installation d’un logiciel porté se fait sous root,
ex. pour Enlightenment :
# cd /usr/ports/x11-wm/enlightenment
# make
# make install
# make clean - Pour la mise-à-jour des logiciels portés, d’abord lister les logiciels portés périmés :
# pkg version -v
# pkg infoPuis à l’aide de Portupgrade :
# cd /usr/ports/ports-mgmt/portupgrade
# make install clean
# portupgrade -ai # pour tout mettre à jour (3j de compil tout de même !)
# portupgrade -R firefox # pour màj qu'une seule application avec ses dépendances
# portupgrade -PP gnome2 # pour éviter l’usage des logiciels portés et utiliser les versions pré-compiléesP.S. penser à faire régulièrement le nettoyage dans les sources :
# portsclean -C
# portsclean -D
P.I. y-a aussi d’autres outils comme Portmanager ou encore Portmaster (conçu pour n’utiliser que les outils du système de "base" et ne dépendant d’aucun autre logiciel porté, il utilise les informations contenues dans /var/db/pkg/
) pour vous faciliter la vie :
# cd /usr/ports/ports-mgmt/portmaster
# make install clean
# portmaster -L # pour lister les logiciels installés et les mises à jour
# portmaster -a # pour mettre à jour l’ensemble des logiciels portés
# portmaster -af # en cas de problème, met à jour ou recompile tous les logiciels installés
# portmaster -P firefox # pour màj qu'une seule application en privilégiant les versions pre-compilées
# portmaster -PP gnome2 # pour n’utiliser que les versions pré-compilées
# portmaster x11/terminology # pour installer un nouveau logiciel porté
À suivre aussi l’outil Poudriere…
Compatibilité Linux
FreeBSD offre une compatibilité binaire avec Linux, permettant d’installer / exécuter des applications Linux, sans avoir à les modifier.
- On commence par activer la compatibilité binaire avec Linux :
# sysrc linux_enable=YES
# service linux startCeci changera les modules noyau nécessaires et montera les systèmes de fichiers attendus sous
/compat/linux
; Suffisant pour faire fonctionner les binaires Linux statiques. - Mais pour les binaires liés dynamiquement if faut que les bibliothèques dynamiques Linux soient installées. Pour cela on va installer la version pré-compilée de Cent OS 7 :
# pkg install linux_base-c7
- Reste plus qu’à installer nos logiciels :
# pkg install linux-opera
Une autre solution consiste à utiliser sysutils/debootstrap dans un « Jails ». Cela a pour avantage de disposer d’une distribution complète Debian ou Ubuntu.
Jails
Les environnements Jails (prisons) sont une amélioration et un remplacement des environnements chrootés. Ils permettent d’isoler des applications ou des piles entières avec leurs propres processus, systèmes de fichiers et utilisateurs, tout en utilisant le même noyau du système d’exploitation hôte. C’est semblable aux containers Dockers avec 13 ans d’avance !
- On commence par installer Ubuntu Bionic (18.04) (dernière à supporter les 32bits) :
# pkg install debootstrap
# debootstrap bionic /compat/ubuntuP.I. vous aurez des alertes durant la phase de configuration, généralement des warnings, mais tant que ça se termine par “Base system installed successfully” c’est okey ;)
- Déclarer les systèmes de fichier Linux dans
/etc/fstab
:devfs /compat/ubuntu/dev devfs rw,late 0 0
tmpfs /compat/ubuntu/dev/shm tmpfs rw,late,size=1g,mode=1777 0 0
fdescfs /compat/ubuntu/dev/fd fdescfs rw,late,linrdlnk 0 0
linprocfs /compat/ubuntu/proc linprocfs rw,late 0 0
linsysfs /compat/ubuntu/sys linsysfs rw,late 0 0Pour partager le répertoire
/home
et être capable de lancer des applications X11, rajouter :/tmp /compat/ubuntu/tmp nullfs rw,late 0 0
/home /compat/ubuntu/home nullfs rw,late 0 0Et les monter :
mount -al
- Et c’est tout ! Maintenant on peut
chroot /compat/ubuntu /bin/bash
et exécuterapt
(ou tout autre commande) comme sur un Linux Ubuntu classique ;)# apt-get update
# apt-get install aptitude
# aptitude search …
# aptitude install …
- Si vous rencontrez des erreurs rsyslogd, enlevez-le :
apt remove rsyslog
- Il est peut être aussi nécessaire d’ajouter des dépôts dans
/compat/ubuntu/etc/apt/sources.list
:deb http://archive.ubuntu.com/ubuntu bionic main universe restricted multiverse
deb http://security.ubuntu.com/ubuntu/ bionic-security universe multiverse restricted main
deb http://archive.ubuntu.com/ubuntu bionic-backports universe multiverse restricted main
deb http://archive.ubuntu.com/ubuntu bionic-updates universe multiverse restricted main - Démarrer sshd (
service ssh start
) afin d’y accéder avec un « vrai » login. - Le reste est de la conf des utilisateurs / groupes (avec les mêmes UIDs/GIDs que sur le système hôte), …