【FreeBSD】Jail環境の作成を自動化してみた
元々手作業(http://kunst1080.hatenablog.com/entry/2013/10/21/235038)で ezjail-admin とかファイルコピーやら書き換えやらやっていたのですが、やってらんねー的な感じだったのでシェルスクリプト化してみました。自分用なので汎用性はあまり無いのですが。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/local/bin/bash | |
# [前提] | |
# ①flavour/default に、以下のファイルをセットアップ済みであること | |
# - /etc/rc.conf | |
# - /etc/resolv.conf | |
# - /etc/make.conf | |
# - /etc/ssh/sshd_config | |
# - /var/ports/packages/ | |
# | |
# ②また、ホスト側で仮想IPアドレスの設定が完了していること。 | |
# (/etc/rc.cong でのネットワークデバイスのエイリアスを設定済みなど) | |
# | |
# ※メモ | |
# Jail環境の削除は:ezjail-admin delete [-w] <jail_name> | |
# | |
USAGE(){ | |
cat <<++EOS>&2 | |
USAGE:`basename $0` jail_name ip_address [ -y root_password default_user default_user_password ] | |
++EOS | |
} | |
PREFIX=/usr/jails | |
if [ "_$2" = "_" ] ; then | |
USAGE | |
exit 9 | |
fi | |
jail_name=$1 | |
ip_address=$2 | |
if [ "_$3" = "_-y" ] ; then | |
if [ "_$6" = "_" ] ; then | |
USAGE | |
exit 9 | |
fi | |
is_silent=$3 | |
root_password=$4 | |
default_user=$5 | |
default_user_password=$6 | |
else | |
is_silent="" | |
echo -n "Jail環境のrootユーザのパスワードを入力して下さい: " | |
read root_password | |
echo | |
echo -n "デフォルトのユーザ名を入力して下さい: " | |
read default_user | |
echo | |
echo -n "デフォルトユーザのパスワードを入力して下さい: " | |
read default_user_password | |
echo | |
fi | |
cat <<++EOS | |
以下の内容で Jail 環境を構築します | |
jail_name :${jail_name} | |
ip_address :${ip_address} | |
root_password :${root_password} | |
default_user :${default_user} | |
default_user_password:${default_user_password} | |
++EOS | |
if [ "${is_silent}" != "-y" ] ; then | |
echo -n 'よろしいですか ? [y/n]: ' | |
read YN | |
if [ "$YN" != "y" -a "$YN" != "yes" ]; then | |
exit 9 | |
fi | |
fi | |
echo | |
echo "########### SETUP START ###########" | |
set -v | |
# create jail | |
ezjail-admin create ${jail_name} ${ip_address} | |
# edit fstab | |
cat <<++EOD>>/etc/fstab.${jail_name//./_} | |
/usr/ports ${PREFIX}/${jail_name}/basejail/usr/ports nullfs ro 0 0 | |
/usr/src ${PREFIX}/${jail_name}/basejail/usr/src nullfs ro 0 0 | |
++EOD | |
# edit settings from flavour | |
cat ${PREFIX}/${jail_name}/etc/ssh/sshd_config \ | |
| sed "s/\${ip_address}/${ip_address}/g" \ | |
| sed "s/\${default_user}/${default_user}/g" \ | |
> ${PREFIX}/${jail_name}/etc/ssh/sshd_config.tmp | |
mv -f ${PREFIX}/${jail_name}/etc/ssh/sshd_config.tmp ${PREFIX}/${jail_name}/etc/ssh/sshd_config | |
# start jail | |
service ezjail start ${jail_name} | |
# get jail ID | |
jls | |
jid=`jls | awk -v arg="$1" '$3==arg {print $1}'` | |
echo ${jid} | |
# user settings | |
jexec ${jid} sh -c "echo ${root_password} | pw usermod -n root -h 0" | |
jexec ${jid} sh -c "echo ${default_user_password} | pw useradd -n ${default_user} -G wheel -m -h 0" | |
set +v | |
echo "########### SETUP END ###########" |
※見どころは、jexecを使ってJail環境へコマンドを投入してるところとか。
使い方の例はこんな感じ。
|
|
ちなみに「-y」以降をまとめて省略すると、管理者パスワード以降を対話的に入力するようになります。