jails:zfs

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
jails:zfs [2020/11/01 14:42] – [En savoir plus] davidjails:zfs [2024/01/17 20:17] (Version actuelle) – [Mail] zorro
Ligne 1: Ligne 1:
- 
 <jumbotron> <jumbotron>
 ====== Créer et administrer vos jails par ZFS ====== ====== Créer et administrer vos jails par ZFS ======
Ligne 18: Ligne 17:
 exec.system_user = "root"; exec.system_user = "root";
 exec.jail_user = "root"; exec.jail_user = "root";
-exec.start += "/bin/sh /etc/rc";+exec.start = "/bin/sh /etc/rc";
 exec.stop = "/bin/sh /etc/rc.shutdown"; exec.stop = "/bin/sh /etc/rc.shutdown";
 exec.consolelog = "/var/log/jail_${name}_console.log"; exec.consolelog = "/var/log/jail_${name}_console.log";
 path = "/jails/${name}"; path = "/jails/${name}";
  
- +R13 
-R12 + host.hostname = r13;            # Hostname
- host.hostname = r12;            # Hostname+
  ip4 = inherit;# IP address of the jail  ip4 = inherit;# IP address of the jail
  ip6 = inherit;# IP address of the jail  ip6 = inherit;# IP address of the jail
- path = "/jails/12.1-RELEASE";+ path = "/jails/13.2-RELEASE";
 } }
 </file> </file>
  
-Notez que le ''path'', s'il n'est pas précisé explicitement, prendra automatiquement le nom de la jail.+Notez que le ''path'', s'il n'est pas précisé explicitement, prendra automatiquement le nom de la //jail//.
  
 Vous aurez probablement besoin d'une interface réseau pour faire communiquer les services des //jails// entre eux. Vous aurez probablement besoin d'une interface réseau pour faire communiquer les services des //jails// entre eux.
  
 <code bash> <code bash>
-root@popeye:# ifconfig create lo1 +ifconfig lo1 create 
-root@popeye:# sysrc cloned_interfaces+=lo1+sysrc cloned_interfaces+=lo1
 </code> </code>
  
-De même, pour assurer un démarrage à chaque reboot, activer le service jail: +De même, pour assurer un démarrage à chaque //reboot//, activer le service //jail//:
 <code bash> <code bash>
-root@popeye:# sysrc jail_enable="YES"+sysrc jail_enable="YES"
 </code> </code>
  
 Et précisez les //jails// à démarrer dans la variable ''jail_list'', ou ignorez cette variable pour toute les démarrer. Et précisez les //jails// à démarrer dans la variable ''jail_list'', ou ignorez cette variable pour toute les démarrer.
 +==== Consoles ====
  
 +Le paramètre ''exec.consolelog'' va permettre d’enregistrer les messages de console des //jails// dans un fichier journal, pensez à programmer newsyslog(8) pour des nettoyages réguliers:
 +
 +<file whitespace /etc/newsyslog.conf.d/jails.conf>
 +/var/log/jail_d13_console.log                   600  7     1000 *     JCG       /var/run/jail_d13.pid
 +/var/log/jail_git_console.log                   600  7     1000 *     JCG       /var/run/jail_git.pid
 +/var/log/jail_matrix_console.log                600  7     1000 *     JCG       /var/run/jail_matrix.pid
 +/var/log/jail_pg_console.log                    600  7     1000 *     JCG       /var/run/jail_pg.pid
 +/var/log/jail_php_console.log                   600  7     1000 *     JCG       /var/run/jail_php.pid
 +</file>
 ===== Stockage ===== ===== Stockage =====
  
Ligne 54: Ligne 61:
  
 <code bash> <code bash>
-root@popeye:# zfs create -o mountpoint=/jails zroot/JAILS +zfs create -o mountpoint=/jails zroot/JAILS 
-root@popeye:# zfs create zroot/JAILS/12.1-RELEASE+zfs create zroot/JAILS/13.2-RELEASE
 </code> </code>
  
 <note tuyau> <note tuyau>
-Comme vous allez multiplier les datasets reposant sur une même base, vous pouvez activer la ''deduplication'' afin d’économiser de l'espace disque, si vous avez assez de mémoire vive.+Comme vous allez multiplier les //datasets// reposant sur une même base, vous pouvez activer la ''deduplication'' afin d’économiser de l'espace disque, si vous avez assez de mémoire vive.
 </note> </note>
  
 <code bash> <code bash>
-root@popeye:# zfs set dedup=on zroot/JAILS+zfs set dedup=on zroot/JAILS
 </code> </code>
  
Ligne 70: Ligne 77:
 Récupérer une //release// et installons une première //jail//, qui va servir de point de départ à toutes les autres. Récupérer une //release// et installons une première //jail//, qui va servir de point de départ à toutes les autres.
 <code bash> <code bash>
-root@popeye:# cd /jails +cd /jails 
-root@popeye:# fetch http://ftp.freebsd.org/pub/FreeBSD/releases/amd64/12.1-RELEASE/base.txz +fetch http://ftp.freebsd.org/pub/FreeBSD/releases/amd64/13.2-RELEASE/base.txz 
-root@popeye:# tar -C 12.1-RELEASE -xf base.txz +tar -C 13.2-RELEASE -xf base.txz 
-root@popeye:# cp /etc/resolv.conf 12.1-RELEASE/etc/resolv.conf +cp /etc/resolv.conf 13.2-RELEASE/etc/resolv.conf 
-root@popeye:# cp /usr/local/etc/pkg/repos/*.conf 12.1-RELEASE/etc/pkg +cp /usr/local/etc/pkg/repos/*.conf 13.2-RELEASE/etc/pkg 
-root@popeye:# touch 12.1-RELEASE/etc/rc.conf+touch 13.2-RELEASE/etc/rc.conf
 </code> </code>
  
Ligne 82: Ligne 89:
 Et réglez votre rc.conf(5) ainsi: Et réglez votre rc.conf(5) ainsi:
  
-<file ini 12.1-RELEASE/etc/rc.conf>+<file ini 13.2-RELEASE/etc/rc.conf>
 cron_flags="$cron_flags -J 15" cron_flags="$cron_flags -J 15"
  
Ligne 95: Ligne 102:
 </file> </file>
  
-Plus quelques réglages dédiées:+L’entrée pour cron(8) sert à décaler son activation par rapport à l'hôte (//jitter//), pour éviter que les scripts periodic(8) ne se lancent tous en même temps.Mettez des valeurs différentes pour chaque //jail//. Sur certaines jails, vous pouvez même le désactiver:
  
-<file bash 12.1-RELEASE/etc/rc.conf.local>+<file ini 13.2-RELEASE/etc/rc.conf> 
 +cron_enable="NO" 
 +</file> 
 + 
 + 
 +Enfin, donnez lui un nom: 
 +<file ini 13.2-RELEASE/etc/rc.conf.local>
 hostname=nepasutiliser hostname=nepasutiliser
 </file> </file>
Ligne 104: Ligne 117:
 Si votre //jail// doit pouvoir envoyer des mails, le plus rapide est d'activer le ''sendmail'' de la base sur ce seul service: Si votre //jail// doit pouvoir envoyer des mails, le plus rapide est d'activer le ''sendmail'' de la base sur ce seul service:
 <file ini rc.conf> <file ini rc.conf>
 +sendmail_enable="NO"
 sendmail_submit_enable="YES" sendmail_submit_enable="YES"
 </file> </file>
Ligne 112: Ligne 126:
 </file> </file>
  
-<callout type="warning" icon="true"> +Si vous désactivez complètement //sendmail//, les mails seront envoyés via l'hôtesi sur ce dernier est réglé pour écouter sur toutes les interfaces et non seulement ''localhost''. 
-Attention, si vous avez autorisé cron(8)assurez vous de désactiver les scripts periodic(8) dans ''/etc/crontab''+<file ini rc.conf> 
-Sinonvous allez remplir la base mail de ''root''+sendmail_enable="YES" 
-</callout>+sendmail_submit_enable="NO" 
 +</file>
  
 +Attention, si vous avez autorisé cron(8), periodic(8) sera actif et vous allez remplir la base mail de ''root''.
 +Assurez vous soit de désactiver les scripts periodic(8) dans ''/etc/crontab'', soit d'envoyer les rapports dans un fichier:
 +
 +<file ini periodic.conf>
 +daily_output=/var/log/daily.log
 +weekly_output=/var/log/weekly.log
 +monthly_output=/var/log/monthly.log 
 +daily_show_success=NO
 +daily_show_info=NO
 +</file>
 +
 +ou ajoutez une adresse mail générique pour cron dans ''/etc/rc.conf'':
 +<file ini periodic.conf>
 +cron_flags="$cron_flags -m patron@ailleurs.net"
 +</file>
 ==== Démarrer ==== ==== Démarrer ====
 Vous pouvez démarrer:  Vous pouvez démarrer: 
  
 <code bash> <code bash>
-root@popeye:# jail -c R12 +root@popeye:# jail -c R13 
-R12: created+R13: created
 </code> </code>
  
  
-====== Multiplier =====+===== Multiplier =====
  
 A partir de ce point, vous avez préparé une base saine que vous allez pouvoir reproduire facilement. A partir de ce point, vous avez préparé une base saine que vous allez pouvoir reproduire facilement.
Ligne 134: Ligne 163:
  
 <code bash> <code bash>
-root@popeye:# zfs snap zroot/JAILS/12.1-RELEASE@test+zfs snap zroot/JAILS/13.2-RELEASE@test
 </code> </code>
  
 Attention, ce cliché est dédié à la //jail// ''test'', ne prévoyez pas de l'utiliser pour autre chose, puisque qu'en cas de promotion du futur clone, il disparaîtra. Attention, ce cliché est dédié à la //jail// ''test'', ne prévoyez pas de l'utiliser pour autre chose, puisque qu'en cas de promotion du futur clone, il disparaîtra.
- +Créons une nouvelle //jail//, simplement en [[https://www.freebsd.org/doc/handbook/zfs-zfs.html|clonant ce cliché]]:
-Créons une nouvelle jail, simplement en [[https://www.freebsd.org/doc/handbook/zfs-zfs.html|clonant ce cliché]]:+
  
 <code bash> <code bash>
-root@popeye:# zfs clone zroot/JAILS/12.1-RELEASE@test zroot/JAILS/TEST+zfs clone zroot/JAILS/13.2-RELEASE@test zroot/JAILS/TEST
 </code> </code>
  
-En fait, vous avez créer un dataset à partir d'un cliché.+En fait, vous avez créer un //dataset// à partir d'un cliché.
 C'est aussi simple, vous avez une ''jail'' toute prête sur ''zroot/JAILS/TEST''. C'est aussi simple, vous avez une ''jail'' toute prête sur ''zroot/JAILS/TEST''.
  
 Réglons là: Réglons là:
- 
 <file ini TEST/etc/rc.conf.local> <file ini TEST/etc/rc.conf.local>
 hostname=TEST hostname=TEST
Ligne 170: Ligne 197:
  
 <code bash> <code bash>
-root@popeye:# jail -c TEST2+jail -c TEST2
 TEST: created TEST: created
 TEST2: created TEST2: created
Ligne 178: Ligne 205:
 De même, les jail(8) vont démarrer dans l'ordre donné par le sysrc(8) ''jail_list''. De même, les jail(8) vont démarrer dans l'ordre donné par le sysrc(8) ''jail_list''.
 </callout> </callout>
-====== Déployer =====+===== Déployer =====
  
 Il suffit de promouvoir le clone, le rendre indépendant du cliché dont il est issu: Il suffit de promouvoir le clone, le rendre indépendant du cliché dont il est issu:
  
 <code bash> <code bash>
-root@popeye:# zfs promote zroot/JAILS/TEST+zfs promote zroot/JAILS/TEST
 </code> </code>
  
 Et voilà. Et voilà.
 +===== Montages =====
  
 +Vous pouvez spécifier les points de montages à créer au démarrage de la jail.
 +Il suffit de créer un ''fstab'' sour le nom ''fstab.<jail name>'' et de le préciser dans ''jail.conf''
 +
 +<file javascript /etc/jails.conf>
 +toto {
 +        mount.fstab="/etc/fstab.toto"
 +}
 +</file>
 +
 +C'est utile pour monter du tmpfs(5) ou du nullfs(5):
 +<file whitespace /etc/fstab.toto>
 +tmpfs /jails/toto/tmp tmpfs rw 0
 +</file>
  
-====== Réseau ======+===== Réseau =====
  
 Si vous avez attribué une interface réseau avec IP locale sur vos jails,  Si vous avez attribué une interface réseau avec IP locale sur vos jails, 
Ligne 197: Ligne 237:
 Par exemple, pour pf(4): Par exemple, pour pf(4):
  
-<file ini /etc/pf.conf>+<file pf /etc/pf.conf>
 jailnet="192.168.0.0/24" jailnet="192.168.0.0/24"
- 
 # ... # ...
- 
 nat on $ext_if from $jailnet to any -> ($ext_if) nat on $ext_if from $jailnet to any -> ($ext_if)
 </file> </file>
- 
-Pensez à vérifier les valeurs de resolv.conf(5). Si vous avez suivi la procédure, ce devrait être une copie de celle de l'hôte. 
  
 <note important> <note important>
-Attention avant d'autoriser l'accès à l'extérieur depuis une jail. La plupart du temps, hormis lors de l'installation ou la mise à jour de paquets. Vous n'en avez pas besoin.+Attention avant d'autoriser l'accès à l'extérieur depuis une //jail//. La plupart du temps, hormis lors de l'installation ou la mise à jour de paquets. Vous n'en avez pas besoin.
 </note> </note>
  
 +===== DNS =====
 +
 +Pensez à vérifier les valeurs de resolv.conf(5). Si vous avez suivi la procédure, ce devrait être une copie de celle de l'hôte, à moins d'utiliser un serveur DNS local comme unbound(8).\\
 +Pour donner accès à ce service à vos /jails/, assurez que ce dernier écoute sur des adresses autres que ''localhost''.\\
 +Par exemple, associez une adresse dédiée à ''unbound'' sur votre interface réseau:
 +
 +<file perl rc.conf>
 +cloned_interfaces="lo1"
 +ifconfig_lo1="inet 192.168.0.1 netmask 255.255.255.0"
 +ifconfig_lo1_ipv6="inet6 fd00::1 prefixlen 64"
 +</file>
 +
 +voire ajouter d'autres alias:
 +<file perl rc.conf>
 +ifconfig_lo1_alias0="inet 192.168.10.1 netmask 255.255.255.0"
 +ifconfig_lo1_ipv6_alias0="inet6 fe00::1 prefixlen 64"
 +</file>
 +
 +ou, à la volée:
 +<code bash>
 +ifconfig lo1 inet 192.168.0.1 netmask 255.255.255.0 alias
 +ifconfig lo1 inet6 fd00::1 prefixlen 64 alias
 +</code>
 +
 +Ensuite configurez unbound(8) pour écouter sur cette addresse:
 +<file yaml unbound.conf>
 +interface: 192.168.0.1
 +interface: fd00::1
 +access-control: 192.168.0.1/24 allow
 +access-control: fd00::1/24 allow
 +</file>
 +
 +ou pour tout l'interface dédiée aux //jails//:
 +<file yaml unbound.conf>
 +interface: lo1
 +</file>
 +
 +configurez alors les ''resolv.conf'' de vos //jails// pour utiliser ces adresses.
 ===== Services IP ===== ===== Services IP =====
  
Ligne 221: Ligne 295:
 jail_net="192.168.0.1/24" jail_net="192.168.0.1/24"
 # ... # ...
-nat on $ext_if from $jail_net to any -> ($ext_if) +nat on $ext_if inet from $jail_net to any -> $ext_if:0 
-nat on $ext_if inet6 from $jail_git to any -> ($ext_if)+nat on $ext_if inet6 from $jail_git to any -> $ext_if:0
 rdr pass on $ext_if proto tcp from any to ($ext_if) port 9418 -> 192.168.0.13 port 9418 rdr pass on $ext_if proto tcp from any to ($ext_if) port 9418 -> 192.168.0.13 port 9418
 rdr pass on $ext_if inet6 proto tcp from any to ($ext_if) port 9418 -> $jail_git port 9418 rdr pass on $ext_if inet6 proto tcp from any to ($ext_if) port 9418 -> $jail_git port 9418
 </file> </file>
  
 +<callout type="info" icon="true">
 +En //IPV6//, on demande explicitement ('':0'') la première adresse fournie par l'interface pour éviter que //pf// ne route les paquets vers un des liens locaux.
  
 +En cas de doute, préciser l'adresse:
 +''nat on $ext_if inet6 from $jail_git to any -> 2a01::''
 +</callout>
  
  
  
-====== Mettre à jour ======+ 
 +===== Mettre à jour =====
  
 Il suffit de demander à freebsd-update(8). Il suffit de demander à freebsd-update(8).
  
-===== configuration =====+==== configuration ====
  
 freebsd-update(8) suit par défaut la configuration le fichier ''/etc/freebsd-update.conf''. freebsd-update(8) suit par défaut la configuration le fichier ''/etc/freebsd-update.conf''.
Ligne 279: Ligne 359:
  
  
-===== Lancer =====+==== Lancer ====
  
 Utilisez le fichier de configuration et donnez à freebsd-update(8) les bonnes informations: Utilisez le fichier de configuration et donnez à freebsd-update(8) les bonnes informations:
Ligne 287: Ligne 367:
  
 <code bash> <code bash>
-root@popeye:# freebsd-update -f /usr/local/etc/jail-update.conf --currently-running 12.1-RELEASE -b /jails/majail fetch install +freebsd-update -f /usr/local/etc/jail-update.conf --currently-running 13.2-RELEASE -b /jails/majail fetch install 
 </code> </code>
  
 Notez que vous pouvez automatiser le processus en demandant directement à la //jail// quelle version elle fait tourner: Notez que vous pouvez automatiser le processus en demandant directement à la //jail// quelle version elle fait tourner:
 <code bash> <code bash>
-root@popeye:# jexec jailname freebsd-version -u +jexec jailname freebsd-version -u 
-12.1-RELEASE-p4+13.2-RELEASE
 </code> </code>
  
 Utilisez automatiquement cette valeur dans un script par: Utilisez automatiquement cette valeur dans un script par:
 <code bash> <code bash>
-root@popeye:# freebsd-update -f /usr/local/etc/jail-update.conf --currently-running `jexec jailname freebsd-version -u` -b /jails/majail fetch install +freebsd-update -f /usr/local/etc/jail-update.conf --currently-running `jexec jailname freebsd-version -u` -b /jails/majail fetch install 
 </code> </code>
 +
 +En cas de mise à niveau, vers une version majeure plus récente, procédure est un peu plus longue.
 +<code bash>
 +jail -r jailname
 +freebsd-update -f /usr/local/etc/jail-update.conf --currently-running `jexec jailname freebsd-version -u` -b /jails/majail fetch -r 13.0-RELEASE upgrade
 +freebsd-update -f /usr/local/etc/jail-update.conf -b /jails/majail fetch install 
 +jail -c jailname
 +freebsd-update -f /usr/local/etc/jail-update.conf -b /jails/majail fetch install 
 +pkg -j jailname bootstrap -f
 +pkg -j jailname upgrade
 +jail -rc jailname
 +</code>
 +===== Ports ======
 +
 +Utilisez des [[ports:poudriere|poudrieres]] pour installer des logiciels dans vos jails et afiner ainsi la configuration et le comportement d'une jail.\\
 +Par exemple, supprimer tout ce qui ressemble à une documentation, un affichage graphique ou une imprimante:
 +<file make /usr/local/etc/poudriere.d/jail-make>
 +OPTIONS_UNSET=DOC DOCS NLS X11 EXAMPLES EXAMPLE XCB WAYLAND DEBUG TEST TESTS OPENGL DTRACE INFO BE_STANDARD
 +OPTIONS_UNSET+=CUPS MANPAGES
 +DEFAULT_VERSIONS+= imagemagick=6-nox11
 +#DEFAULT_VERSIONS+= imagemagick=7-nox11
 +</file>
  
 ===== En savoir plus ===== ===== En savoir plus =====
  • jails/zfs.1604241748.txt.gz
  • Dernière modification : 2020/11/01 14:42
  • de david