CentOSなJailを起動するためのスクリプト
Running CentOS 5.5 in a Jailで紹介されたJailを起動するためのスクリプトを書いてみた。lagg(4)をrc.confではなく別のスクリプトで構成する都合上、/etc/rc.confでJailを起動できないという自分の都合だけが理由です。(w
それとCentOSのlockファイルの残骸が残っているとJailが上がらない問題、linprocfsをマウントする必要がある問題等もまとめて解決させるという、手抜き運用を前提にしてます。
細かいところ見返すと、Jail名が似ているものがある (「centos」と「centos_new」など) と不都合があったり、IPv4アドレスのパタンマッチに手抜きがある (母艦が192.168.0.10、Jailが192.168.0.1の場合などで誤動作) など問題もあるので、参考にする場合は注意してください。…参考にする人がいるか判りませんが。
#!/bin/sh JAIL_NAME=${1} JAIL_IF=${2} JAIL_IPv4ADDR=${3} JAIL_ROOT=/usr/jails/${JAIL_NAME} CT=`/usr/sbin/jls | /usr/bin/grep -F "${JAIL_ROOT}" | /usr/bin/wc -l` if [ ${CT} != 0 ]; then echo "jail ${JAIL_NAME} already exists" exit 1 fi /sbin/ifconfig ${JAIL_IF} up RET=$? if [ ${RET} != 0 ]; then echo "cannot activate interface ${JAIL_IF}" exit 1 fi CT=`/sbin/ifconfig ${JAIL_IF} | /usr/bin/grep -F "inet " | /usr/bin/wc -l` if [ ${CT} \< 1 ]; then echo "interface ${JAIL_IF} has no IPv4 address" exit 1 fi CT=`/sbin/ifconfig ${JAIL_IF} | /usr/bin/grep -F "inet " | /usr/bin/grep -F "${JAIL_IPv4ADDR}" | /usr/bin/wc -l` if [ ${CT} \< 1 ]; then /sbin/ifconfig ${JAIL_IF} inet alias ${JAIL_IPv4ADDR}/32 RET=$? if [ ${RET} = 0 ]; then echo "interface ${JAIL_IF} is assigned alias IPv4 address ${JAIL_IPv4ADDR}" else echo "cannot assign alias IPv4address ${JAIL_IPv4ADDR} to interface ${JAIL_IF}" exit 1 fi else echo "interface ${JAIL_IF} already has IPv4 address ${JAIL_IPv4ADDR}" fi CT=`/sbin/mount | /usr/bin/grep -F "${JAIL_ROOT}/proc" | /usr/bin/wc -l` if [ ${CT} \< 1 ]; then /sbin/mount -t linprocfs linproc ${JAIL_ROOT}/proc if [ $? != 0 ]; then echo "cannot mount linprocfs" exit 1 fi else echo "linprocfs is already mounted" fi CT=`/usr/bin/find ${JAIL_ROOT}/var/lock/subsys -type f -depth 1 -print | /usr/bin/wc -l` if [ 0 \< ${CT} ]; then for i in `/usr/bin/find ${JAIL_ROOT}/var/lock/subsys -type f -depth 1 -print`; do /bin/rm "${i}" RET=$? if [ ${RET} != 0 ]; then echo "cannot remove ${i}" exit 1 fi done fi echo "start jail" /usr/local/etc/rc.d/ezjail onestart ${JAIL_NAME} RET=$? if [ ${RET} != 0 ]; then echo "cannot start jail" exit 1 fi echo "jail started" CT=`/usr/sbin/jls | /usr/bin/grep -F "${JAIL_ROOT}" | /usr/bin/wc -l` if [ ${CT} != 1 ]; then echo "jail ${JAIL_NAME} does not exist" exit 1 fi