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