Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
freebsd:jailctl [2007/04/15 19:24]
ic old revision restored
freebsd:jailctl [2010/01/12 13:29] (current)
Line 1: Line 1:
 +====== FreeBSD/​jailctl ======
  
 +===== 1. Qu'​est-ce qu'on mange =====
 +
 +jailctl est un outil écrit en shell permettant de créer/​lancer/​arrêter/​mettre à jour/​sauvegarder/​restaurer/​détruire des jails.\\
 +Par jail, on entend ici un "​serveur virtuel"​ et non simplement une méthode consistant à isoler un service.
 +
 +===== 2. Shopping =====
 +
 +<​code>​
 +pkg_add -vr jailctl
 +</​code>​
 +ou
 +<​code>​
 +cd /​usr/​ports/​sysutils/​jailctl ; make install clean
 +</​code>​
 +
 +===== 3. Et la sauce ? =====
 +
 +Il faut un fichier de conf : /​usr/​local/​etc/​jails.conf\\
 +Il faut aussi : un répertoire où seront posées les jails (/data dans cet exemple), un runme.sh fourni avec jailctl qui habite par défaut dans /​usr/​local/​jails/​addons/,​ un fichier dellist4.txt qui contient une liste de fichiers à supprimer dans les jails car inutiles (par exemple des commandes comme mount), un fichier dellist5.txt qui contient la suite des fichiers à supprimer dans le cas où jailctl s'​exécute sur une 5.x ou une 6.x (jailctl est en effet compatible avec toutes les versions de 4.x à 6.x) et enfin un répertoire etc/ avec les fichiers de conf à installer dans les nouvelles jails (par défaut, login.conf et make.conf). Tout cela habite dans /​usr/​local/​jails/​addons/​ qu'il faudra dans notre exemple déplacer dans /​data/​addons/​.
 +
 +==== Modifs dans login.conf ====
 +
 +Il est conseillé de modifier la ligne suivante :
 +<​code>​
 +        :​setenv=PS1=[\\u@\\h] \\w\\\\$ ,​MAIL=/​var/​mail/​$,​BLOCKSIZE=K,​FTP_PASSIVE_MODE=YES,​ \
 +        PACKAGEROOT=ftp\c//​ftp.no.freebsd.org,​CLICOLOR=1,​EDITOR=/​usr/​local/​bin/​nano:​\
 +</​code>​
 +pour taper dans un miroir plus proche :
 +<​code>​
 +        :​setenv=PS1=[\\u@\\h] \\w\\\\$ ,​MAIL=/​var/​mail/​$,​BLOCKSIZE=K,​FTP_PASSIVE_MODE=YES,​ \
 +        PACKAGEROOT=ftp\c//​ftp.fr.freebsd.org,​CLICOLOR=1,​EDITOR=/​usr/​local/​bin/​nano:​\
 +</​code>​
 +
 +On personnalisera aussi si besoin l'​éditeur par défaut et autres joyeusetés.
 +
 +==== jails.conf ====
 +
 +Voici maintenant le gros de la conf. Le fichier étant super bien documenté en interne, voici juste les éléments obligatoires pour pouvoir démarrer rapidement.\\
 +\\
 +Interface sur laquelle sont à ajouter les IP des jails :
 +<​code>​
 +IF="​em0"​
 +</​code>​
 +
 +Où qu'​elles habitent les jails :
 +<​code>​
 +JAIL_HOME="/​data/"​
 +</​code>​
 +
 +Où qu'​elles habitent les sauvegardes des jails (par défaut au même endroit) :
 +<​code>​
 +BACKUPDIR=$JAIL_HOME
 +</​code>​
 +
 +Les trucs à pas sauvegarder :
 +<​code>​
 +BACKUP_EXCLUDE="​--exclude ./​usr/​ports/​* --exclude ./tmp/* --exclude ./var/tmp/* --exclude ./​usr/​src/​*"​
 +</​code>​
 +
 +Les jails elles mêmes :
 +<​code>​
 +JAILS=""​
 +JAILS="​$JAILS chii.domaine.com:​192.168.1.43"​
 +JAILS="​$JAILS motosuwa.domaine.com:​192.168.1.44"​
 +JAILS="​$JAILS sumomo.domaine.com:​192.168.1.46"​
 +JAILS="​$JAILS yuzuki.domaine.com:​192.168.1.47:/​usr/​local/​jails"​
 +JAILS="​$JAILS yoshiyuki.domaine.com:​192.168.1.48:/​data2/​yoshi/"​
 +JAILS="​$JAILS example.domaine.com:​192.168.1.49"​
 +</​code>​
 +
 +Notons ici une petite particularité disponible depuis peu dans jailctl. On peut customiser le répertoire où sera stockée une jail particuilère.\\
 +En effet, jusque là, elles ont toujours été stockées dans $JAIL_HOME/​nom.de.domaine.com. Maintenant, on peut soit préciser un autre répertoire général (si on ne met pas de / à la fin, par exemple ici yuzuki sera dans /​usr/​local/​jails/​yuzuki.domaine.com/​) ou un répertoire complet pour une jail donnée (si on met un / à la fin, yoshiyuki sera donc dans /​data2/​yoshi/​).\\
 +\\
 +Un rc.conf sera posé dans la jail, contenant :
 +<​code>​
 +RC_CONF='​sendmail_enable="​NO"​ sshd_enable="​YES"​ portmap_enable="​NO"​ \
 +network_interfaces=""​ tcp_keepalive="​NO"​ inetd_enable="​NO"'​
 +</​code>​
 +
 +Enfin, il faut donner un DNS pour le resolv.conf de la jail :
 +<​code>​
 +NAMESERVER="​195.95.225.104"​
 +</​code>​
 +
 +Il est indispensable que ce DNS soit joignable pendant le "​create"​ de la jail, en effet des packages seront installés par runme.sh à la fin de la création.\\
 +\\
 +Enfin, si on le souhaite, on peut préciser des scripts qui seront exécutés avant/​après certaines commandes jailctl (les scripts recevront en argument $1 le nom de la jail et en $2 son jail ID à condition d'​être au moins sur une 5.x) :
 +<​code>​
 +BEFORESTATUS_HOOKS="/​usr/​bin/​true"​
 +AFTERSTATUS_HOOKS="/​usr/​bin/​true"​
 +BEFORESTART_HOOKS="/​usr/​bin/​true"​
 +AFTERSTART_HOOKS="/​usr/​bin/​true"​
 +BEFORESTOP_HOOKS="/​usr/​bin/​true"​
 +AFTERSTOP_HOOKS="/​usr/​bin/​true"​
 +</​code>​
 +
 +===== 4. Apéro =====
 +
 +ATTENTION : Il est FORTEMENT déconseillé de créer des jails avec un environnement différent de celui de la machine hôte, par exemple un hôte en -STABLE et des jails en -RELEASE, ou réciproquement. Dans l'​absolu,​ avec jailctl, cela signifie qu'il ne faut pas faire de cvsup entre la compilation de l'​hôte et l'​installation des jails.
 +
 +===== 5. Recette =====
 +
 +Prenez le temps de lire jails.conf ainsi que runme.sh avant de faire quoi que ce soit afin de les personnaliser.
 +
 +===== 6. Dégustation =====
 +
 +==== Etat des jails ====
 +
 +<​code>​
 +# jailctl status
 +Jail status (*=running, !=not configured):​
 +*chii.domaine.com (192.168.1.43)
 +*motosuwa.domaine.com (192.168.1.44)
 +*sumomo.domaine.com (192.168.1.46)
 +*yuzuki.domaine.com (192.168.1.47)
 + ​yoshiyuki.domaine.com (192.168.1.48)
 +*example.domaine.com (192.168.1.49)
 +</​code>​
 +
 +Dans cet exemple, toutes les jails sont installées et yoshiyuki n'est pas lancée. Une jail non encore créée serait marquée d'un point d'​exclamation.
 +
 +==== Création d'une jail ====
 +
 +<​code>​
 +# jailctl create example.domaine.com
 +Creating jail example.domaine.com...
 +>>>​ Making hierarchy
 +>>>​ Installing everything
 +Setting root password in jail
 +Changing local password for root
 +New Password:
 +Retype New Password:
 +chsh: user information updated
 +use.perl: not found
 +ifconfig em0 inet 192.168.1.49 netmask 0xffffffff alias
 +jail /​data/​example.domaine.com example.domaine.com 192.168.1.49 /bin/sh /runme.sh
 +ifconfig em0 inet 192.168.1.49 netmask 0xffffffff -alias
 +</​code>​
 +
 +Le use.perl est encore là pour des raisons de compatibilité. Cela ne constitue pas une erreur.
 +La seule information à fournir pour l'​installation est le mot de passe root de la jail, si jailctl n'est pas exécuté en mode batch.
 +
 +==== Lancement d'une jail ====
 +
 +<​code>​
 +# jailctl start example.domaine.com
 +Starting jail example.domaine.com...
 +stty: stdin isn't a terminal
 +yellow-sub# ln: /dev/log: Operation not permitted
 +</​code>​
 +
 +Les erreurs sont normales est simplement dues à des particularités de jail.
 +
 +==== Arrêt d'une jail ====
 +
 +<​code>​
 +# jailctl stop example.domaine.com
 +Stopping jail example.domaine.com...
 +Sending TERM signal to jail processes...
 +Stopping cron.
 +Shutting down daemon processes:.
 +Shutting down local daemons:.
 +Terminated
 +.
 +</​code>​
 +
 +==== Sauvegarde d'une jail (non lancée) ====
 +
 +<​code>​
 +# jailctl backup example.domaine.com
 +Doing cold backup of jail example.domaine.com...
 +</​code>​
 +
 +Un beau tar.gz apparaît dans le répertoire où se situent les jails.
 +
 +==== Restauration d'une jail (forcément non lancée) ====
 +
 +<​code>​
 +# jailctl restore example.domaine.com
 +No valid jail specified!
 +
 +Usage:
 +jailctl <​command>​ <​jail>​ [<​path>​]
 +<​command>​ = start|stop|status|create|delete|upgrade|backup|restore
 +<​jail>​ = hostname|all
 +<​path>​ = Backup destination / restore source
 +</​code>​
 +
 +Mais que se passe-t-il ?
 +
 +Pour restaurer une jail, il ne faut pas qu'​elle existe.
 +
 +==== Effacement d'une jail ====
 +
 +<​code>​
 +# jailctl delete example.domaine.com
 +Deleting jail example.domaine.com...
 +</​code>​
 +
 +==== Restauration d'une jail, 2ème ====
 +
 +<​code>​
 +# jailctl restore example.domaine.com
 +Restoring jail example.domaine.com from backup
 +</​code>​
 +
 +==== Sauvegarde d'une jail (lancée) ====
 +
 +Il s'agit là du menu maxi best of.
 +
 +<​code>​
 +# jailctl backup example.domaine.com
 +Doing warm backup of jail example.domaine.com...
 +tar: ./​./​var/​run/​log:​ tar format cannot archive socket: Inappropriate file type or format
 +tar: ./​./​var/​run/​logpriv:​ tar format cannot archive socket: Inappropriate file type or format
 +</​code>​
 +
 +Les erreurs sont normales.
 +
 +==== Mise à jour ====
 +
 +J'​avoue ne pas avoir essayé cette partie pour le moment, à suivre donc.
 +
 + --- //​[[speka1@mac.com|ic]] 2007/04/15 20:57//
freebsd/jailctl.txt · Last modified: 2010/01/12 13:29 (external edit)