Parfois on a besoin de tester des choses sous linux, parfois on a besoin d'utiliser des applications linux-only, où pour tout un tas d'autre raison on a besoin de faire tourner un linux.
Pour ça c'est vrai que l'on peut virtualiser dans un virtualbox ou un qemu, c'est bien mais c'est quand même coûteux en terme de ressources pour le host.
Sous FreeBSD nous disposons du linuxulator c'est la couche d'emulation permettant de faire tourner des application Linux sous FreeBSD.
Ni une ni deux je me dis qu'il est possible de faire de petite choses sympathique avec ça : une jail linux-only.
Il faut d'abord préparer le terrain :
# mkdir /home/jails/debian
# mkdir /home/jails/debian/dev
# mkdir /home/jails/debian/proc
# mkdir /home/jails/debian/sys
# kldload linux
# kldload linprocfs
# kldload linsysfs
# kldload lindev
# mount -t devfs none /home/jails/debian/dev
# mount -t linuxprocfs none /home/jails/debian/proc
# mount -t linuxsysfs none /home/jails/debian/sys
nous allons donc utiliser /home/jails/debian comme racine de la debian que nous allons installer nous chargeons tous les pilotes nécessaire (noter que lindev est apparu en FreeBSD 9 et a été MFCed en 8-STABLE il n'est absoluement pas obligatoire)
On pourrait faire l'installation avec debootstrap, mais comme je suis un faignant j'ai préférer utiliser un template openvz tout fait :
# fetch http://download.openvz.org/template/precreated/debian-5.0-x86.tar.gz
Puis le depacker dans ma jail :
# tar xvfp debian-5.0-x86.tar.gz -C debian --exclude dev* --exclude proc* --exclude sys*
Pour démarrer correctement la jail il faut qu'au minimum un service tourne dans la jail (je n'ai pas réussit a faire une jail linux-only persistente). Par défaut le script de démarrage des jail essaye de lance /etc/rc que nous allons créer et de lancer /etc/rc.shutdown pour s'arrêter.
# echo "/etc/init.d/cron start" > /home/jails/debian/etc/rc
# chmod 755 /home/jails/debian/etc/rc
# echo "/etc/init.d/cron stop" > /home/jails/debian/etc/rc.shutdown
# chmod 755 /home/jails/debian/etc/rc.shutdown
dans /etc/rc.conf on règle le lancement de la jail
jail_debian_rootdir=/home/jails/gentoo
jail_debian_hostname="gentoo"
jail_debian_ip="192.168.1.3"
jail_debian_interface="nfe0"
jail_debian_devfs_enable="YES"
jail_debian_devfs_ruleset="devfsrules_jail"
jail_debian_flags="-n gentoo"
on démarre la jail :
# /etc/rc.d/jail start debian
et magie :
#jls
JID IP Address Hostname Path
15 192.168.1.3 debian /home/jails/debian
#jexec debian uname -a
Linux debian 2.6.16 FreeBSD 8.0-STABLE #3: Sun Jan 10 20:39:38 CET 2010 i686 GNU/Linux
#jexec debian cat /etc/debian_version
5.0.4
Vous voila avec une belle debian dans emprisonnée dans un freebsd
Attention, tout ne fonctionne pas parfaitement : sysklogd ne marche pas a cause des accès /dev par exemple, mais c'est 99% fonctionnel quand même.