Maniatux's Blog

Welcome to the internet

Retour sur Debian GNU/kFreeBSD dans une jail FreeBSD

Rédigé par Xavier -

Dans un précédent article j'ai résumé comment installer Debian GNU/kFreeBSD Wheezy dans une jail FreeBSD 10 et indiqué que j'avais migré le serveur hébergeant mon blog : Maniatux.fr : Debian GNU/kFreeBSD + IPv6 . Voici un petit retour d'expérience sur Debian GNU/kFreeBSD, que j'appellerai kfreebsd parce que c'est plus court.

Tout d'abord il vaut mieux utiliser la branche Jessie, et pas Wheezy car il y a quelques bugs gênants comme OpenSSH qui ne fonctionne pas à moins de devoir faire pas mal de bidouilles sur l'hôte. De plus la branche kfreebsd de Jessie est développée sur un kernel FreeBSD10, alors que pour Wheezy c'est un FreeBSD8, on s'assure donc en théorie une meilleure compatibilité.

Maniatux tournait sur une jail FreeBSD avec nginx et php_fpm compilés à partir des ports. Suite au passage en kfreebsd, avec toujours nginx et php5-fpm à partir d'apt-get, j'ai noté une baisse des performances d'affichage de mes pages, et une hausse du load average sur mon serveur. C'est très faible mais tout de même notable à l'utilisation. La commande top semble indiquer que c'est php5-fpm qui est le plus gourmand de tous, la version fournie par debian n'étant probablement pas la même que dans les ports.

A propos de la commande top, l'indicateur d'utilisation de la ram ne semble plus fiable avec des jails sous kfreebsd. Par exemple si je lance htop dans ma jail kfreebsd, il m'indique que le système utilise 120Mo de ram. Si j'installe htop directement sur l'hôte et l'exécute, il n'indique que ~30Mo. Dans la jail kfreebsd il n'est pas évident d'utiliser df car il faut exécuter une commande permettant d'extraire les informations de /proc/mounts et le résultat n'est pas toujours optimal.

Si on met de côté ces quelques points, mon impression est plutôt positive. Debian (le projet) a fait un super travail en portant son système d'exploitation sur FreeBSD, et cela n'a pas été fait à la va vite. Il y a véritablement un support suivi et cela prouve une fois de plus que Debian est une distribution de référence.

Aperçu de bhyve - Episode 1 vmrun.sh

Rédigé par Xavier -

bhyve est un hyperviseur pour FreeBSD qui utilise les capacités de virtualisation du CPU (VT-x + EPT chez Intel et AMD-V + RVI chez AMD) et fourni des périphériques virtuels VirtIO aux systèmes invités. En un sens c'est une alternative à Linux-KVM pour FreeBSD. Cette solution vient en complément des jails qui se limitent à faire tourner du FreeBSD. bhyve supporte déjà des systèmes invités Linux, FreeBSD et OpenBSD. On ne sait pas encore si Windows sera supporté, mais c'est très probable. bhyve n'émule pas encore de bios ni de carte VGA, ce qui signifie que vous allez devoir travailler en mode texte, exactement comme pour les jails.

Il est intéressant de noter que bhyve est déjà pris en charge par libvirt, ce qui vous permet de gérer et piloter vos VM grâce à cette API, en local ou via une console distante (virt-manager). Je testerai cela probablement dans un prochain article.

Du virtuel dans du virtuel

Je n'ai pas de machine physique libre ayant les pré requis pour bhyve, c'est à dire avec un processeur suffisamment récent pour supporter à la fois VT-x et EPT. J'ai donc utilisé mon ordinateur portable de 2012 équipé d'un i5, sur lequel tourne Windows 7 (pour le travail) et sur lequel j'installe VMware Workstation. Pourquoi VMware ? Parce qu'il fourni une fonctionnalité intéressante : le support de nested VT-x. En gros la machine virtuelle que vous faites tourner peut elle-même faire tourner des machines virtuelles. Donc je vais pouvoir créer dans VMware une machine virtuelle FreeBSD, puis exécuter bhyve dans cette dernière afin de faire tourner d'autres VM dedans.

A noter que VirtualBox ne supporte pas le nested VT-x, ce qui signifie que votre VM FreeBSD ne pourra pas exécuter bhyve car absence d'accès aux instructions VT-X + EPT du CPU hôte.

Allons-y

Le site du projet bhyve fourni un lien vers un fichier texte contenant les instructions. Donc je me contente de les suivre pour le moment.

Charger les modules

Pour charger les modules de manière volatile :

# kldload vmm
# kldload if_tap

Note : Si une erreur s'affiche au chargement du module vmm, il est probable que votre processeur ne soit pas supporté, ou qu'il ne dispose pas des instructions VT-x ou EPT.

Pour charger les modules de manière persistante (au reboot), éditez le fichier /boot/loader.conf

vmm_load="YES"
if_tap_load="YES"

Récupérer le script d’exécution

Le script d’exécution devrait être présent dans /usr/share/examples/bhyve/vmrun.sh mais il est également possible de le récupérer à cette adresse :

# fetch http://people.freebsd.org/~neel/bhyve/vmrun.sh

Ce script va gérer la création de la VM, le montage de l'iso ,d'un périphérique de stockage et d'une interface réseau. Rendons-le exécutable :

# chmod +x vmrun.sh

Guest FreeBSD

Récupérer une ISO de FreeBSD 10 :

fetch http://people.freebsd.org/~neel/bhyve/release.iso.iso

Démarrer la VM :

./vmrun.sh vm1

Le bootloader du FreeBSD invité devrait alors s'afficher.

Après le chargement du kernel, on obtient une magnifie erreur de point de montage root non trouvé :

J'ai trouvé ce fil de discussion qui explique une solution de contournement, mais le problème c'est que je ne peux rien saisir au clavier, les caractères ne sont pas pris. Bug ? Limitation due à l'utilisation de VMware ? Il semblerait plutôt que ce soit un problème de console non adaptée.

Bon, faisons un deuxième essai. La FAQ de Bhyve mentionne l'existence d'images RAW de FreeBSD11-CURRENT conçues exprès pour démarrer dans Bhyve. Commencez par visiter le FTP avec l'adresse suivante : http://ftp.freebsd.org/pub/FreeBSD/snapshots/VM-IMAGES/11.0-CURRENT/amd64/Latest/ afin de repérer le nom de l'image. Ensuite récupérez cette image avec fetch (commande non détaillée car l'URL est trop longue).

Ensuite supprimons le fichier release.iso pour ne pas qu'il soit capturé par vmrun.sh, décompressons notre image RAW, et démarrons le tout :

# rm release.iso
# unxz FreeBSD-11.0-CURRENT-amd64-20140714-r268622.raw.xz
# ./vmrun.sh -d FreeBSD-11.0-CURRENT-amd64-20140714-r268622.raw vm1

Et cette fois ça marche. On arrive au login, il suffit d'entrer "root" sans mot de passe, et on accède à notre système virtuel FreeBSD 11 :

Pas d'accès au réseau pour le moment, mais c'est normal car la carte tap0 crée par le script vmrun.sh n'est reliée à rien (ni bridge ni routage). Il ne semble pas possible pour le moment de "sortir" de la vm ou de l'éteindre avec la commande shutdown. Cette dernière commande ne fera qu'arrêter le système guest, mais bhyve continuera de fonctionner. La solution constite à passer sur un autre tty (ALT+F2) et utiliser la commande suivante :

# bhyvectl --destroy --vm=vm1

Bhyve fonctionne plutôt bien mais est extrêmement basique, beaucoup de choses se font manuellement et l'émulation d'un CDROM ne semble pas vraiment au point puisque FreeBSD10 n'a pas réussi à booter. L'utilisation d'une image FreeBSD-11 toute prête a permis de contourner le problème, le boot s'est déroule bien et le clavier est pris en charge.

J'ai expliqué mon problème de FreeBSD10 qui ne boote pas sur irc (#bhyve), on m'a recommandé d'utiliser vmrc. Cela fera peut-être l'objet d'un prochain article.

Guest Linux

bhyve affirme supporter les guest Linux. Faisons donc un essai avec Debian Wheezy.

# fetch http://cdimage.debian.org/debian-cd/7.6.0/amd64/iso-cd/debian-7.6.0-amd64-netinst.iso

Ensuite démarrons cette VM à l'aide du script vmrun.sh mais en spécifiant cette fois l'emplacement de l'ISO :

# ./vmrun.sh -I debian-7.6.0-amd64-netinst.iso vm2

Le test va être rapide car cela ne marche pas du tout :

En l'absence de BIOS ou UEFI, bhyve n'est pas capable de booter tout seul. La FAQ de bhyve indique la nécessité d'utiliser sysutils/grub2-bhyve. On va s'arrêter là et miser sur vmrc dans un prochain article car il parait que tout ceci est alors automatisé.

Conclusion

Cette première découverte de bhyve est très intéressante. L'idée est bonne, utiliser la virtualisation matérielle VT-x + EPT et VirtIO pour les périphériques, ce qui assure en théorie le maximum de performances. Malheureusement son utilisation n'est vraiment pas évidente, on sent le côté expérimental de la chose. bhyve est un produit encore brut qu'il faudra exploiter avec de meilleurs outils.

Articles disparus

Rédigé par Xavier -

Je me rends compte que beaucoup d'articles notamment ceux sur les jeux ont disparu, même depuis l'interface de gestion du blog. Je vois toujours les fichiers .xml correspondant à ces articles dans /data/articles donc je pense qu'ils ne sont pas perdus. Mon hypothèse est qu'ils n'ont peut-être pas aimé que je réorganise mes catégories...

Je fais au mieux pour récupérer ces articles.

EDIT: et voilà, c'est résolu ! C'est bien le changement de catégorie qui s'est mal passé. Certains articles se sont retrouvés affectés par défaut à un id de catégorie qui n'existe plus. J'ai donc donc reprendre ces articles dissidents et redéfinir leurs catégories. Ce fut long mais ça en valait la peine.

Classé dans : Blog - Mots clés : aucun

pf.conf pour FreeBSD + IPv6 tunnel

Rédigé par Xavier -

Mon serveur tourne sur FreeBSD 10 et les services sont fournis par des jails sous Debian GNU/kFreeBSD. J'ai activé pf, le pare-feu sur l'hôte avec quelques règles de filtrage pour grosso modo tout autoriser en sortie, mais bloquer en entrée ce qui n'est pas désiré. Ces règles n'agissent que sur la partie IPv6 car je me repose sur le NAT de la box et les redirections de port pour filtrer ce qui entre l'IPv4.

Exemple

Dans l'exemple ci-dessous on va considérer les adresses suivantes :

  • Serveur IPv6 Address : 2001:470:c851::1
  • Client IPv6 Address : 2001:470:c851::2
  • www jail : 2001:470:c851::1001 (on va ouvrir les ports 80 et 443)
  • mail jail : 2001:470:c851::1002 (on va ouvrir les ports 25, 143 et 587)

Configuration

Note : Je me suis basé sur cette documentation chez SixXs.

/etc/rc.conf.local

# PF
pf_enable="YES"
pflog_enable="YES"

/etc/pf.conf/

# Macros
sendpoint = "2001:470:c851::1" # Votre Server IPv6 Address
cendpoint = "2001:470:c851::2" # Votre Client IPv6 Address
www = "2001:470:c851::1001" # ip de la jail www
mail = "2001:470:c851::1002" # ip de la jail mail
ext_inf = "gif0" # Mon interface tunnel

# don't filter l0
set skip on l0

# scrub incomming packets
scrub in all

# block in/out on $tun_if
block in log on $ext_inf inet6
block out log on $ext_inf inet6

# allow heartbeat ping
pass in quick on $ext_inf inet6 proto { ipv6-icmp } from $sendpoint to $cendpoin
t keep state

# pass tcp, udp, and icmp6 out on the ipv6 tunnel interface.
pass out quick on $ext_inf inet6 proto { tcp udp ipv6-icmp } keep state

# www jail
pass in quick on $ext_inf inet6 proto tcp from any to $www port { 80 443 }

# mail jail
pass in quick on $ext_inf inet6 proto tcp from any to $mail port { 25 143 587 }

Vérifier

pf dispose d'une commande pour vérifier un fichier de configuration :

# pfctl -vnf /etc/pf.conf

Charger

Lorsque la vérification est OK, on peut charger :

# service pf restart

Test en ligne

Certains sites vous proposent de scanner vos ports en ligne, notamment ce site. Il supporte les navigateurs en mode texte donc vous pouvez faire le scan directement depuis votre serveur ;)

Ressources

Les 10 thèmes Maniatux

Rédigé par Xavier -

Alors que je refaisais mon thème Pluxml, j'ai retrouvé les anciennes versions et me suis amusé à en faire des captures d'écran ainsi que des zip pour ceux qui sont intéressés. Voilà donc ce que cela donne.

Note : Les thèmes ne sont pas forcément propres, il y a beaucoup d'éléments en dur (comme les liens), il faudra donc faire le tri si vous voulez les utiliser.

Maniatux v1

Voilà donc le Maniatux original !

Lien de téléchargement

Maniatux v2

Cette nouvelle mouture est un peu chargée, et le lien vers identi.ca n'a pas fait long feu.

Lien de téléchargement

Maniatux v3

Le même sans les liens et avec le flou en moins parce que ça fait très kikoo mais ça fatigue les yeux à la longue. Les pages statiques ont été mises dans un header en haut de la page.

Lien de téléchargement

Maniatux v4

Changements mineurs (polices, titres).

Lien de téléchargement

Maniatux v5

Cette mouture fut inspirée de "plastik" et Google. Elle est assez réussie à mon goût.

Lien de téléchargement

Maniatux v5.1

Cette variante en rouge correspond à l'époque où je me suis mis à NetBSD puis OpenBSD. Je le trouve également très réussi.

Lien de téléchargement

Maniatux v6

Début d'un travail vers l'allègement visuel. L'effort est concentré sur le contenu, parce que c'est ça qu'on vient lire sur un blog, et de toutes manières quand on utilise un flux RSS on ne voit pas le css de toutes manières.

Lien de téléchargement

Maniatux v6.1

Modifications mineures pour améliorer la lisibilité.

Lien de téléchargement

Maniatux v7

Inspiration Metro avec le désir de rendre le texte toujours plus épuré et lisible.

Lien de téléchargement

Maniatux v8

Nouveau départ puisque ce thème se base sur le thème par défaut de Pluxml avec quelques modifications mineures. S'il peut sembler moins travaillé que les autres c'est en effet le cas. Je suis assez rouillé en CSS et je voulais du responsive design assez facilement afin de rendre le blog plus lisible sur les appareils mobiles !

Lien de téléchargement

Classé dans : Blog - Mots clés : aucun