ezjail
ezjail
インストール
ports
cd /usr/ports/sysutils/ezjail make install clean
patch
--- ezjail-admin.orig Sat Feb 11 02:06:27 2006
+++ /usr/local/bin/ezjail-admin Sun Feb 26 11:49:33 2006
@@ -212,15 +212,17 @@
######################## ezjail-admin UPDATE ########################
setup|update)
shift
- args=`getopt ipPs: $*` || exerr "Usage: `basename -- $0` update [-s sourcetree] [-i] [-pP]"
+ args=`getopt ipPc:s: $*` || exerr "Usage: `basename -- $0` update [-s sourcetree] [-i] [-pP] [-c make.conf]"
updatejail_installaction="world"
+ updatejail_makeconf="/etc/make.conf"
updatejail_provideports=
set -- ${args}
for arg do
case ${arg} in
-i) updatejail_installaction="installworld"; shift;;
+ -c) updatejail_makeconf="$2"; shift 2;;
-s) ezjail_sourcetree="$2"; shift 2;;
-p) updatejail_provideports="YES"; shift;;
-P) updatejail_provideports="YES"; updatejail_installaction="none"; shift;;
@@ -244,10 +246,10 @@
# make our world
cd ${ezjail_sourcetree}
- make ${updatejail_installaction} DESTDIR=${ezjail_jailfull} || exerr "make ${updatejail_installaction} failed."
+ make __MAKE_CONF=${updatejail_makeconf} ${updatejail_installaction} DESTDIR=${ezjail_jailfull} || exerr "make ${updatejail_installaction} failed."
# setup world
- make distribution DESTDIR=${ezjail_jailfull} || exerr "make distribution failed."
+ make distribution __MAKE_CONF=${updatejail_makeconf} ${updatejail_installaction} DESTDIR=${ezjail_jailfull} || exerr "make ${updatejail_installaction} failed."DESTDIR=${ezjail_jailfull} || exerr "make distribution failed."
# Fill basejail from installed world
cd ${ezjail_jailfull}
buildworld
/etc/make.conf.jailでjailに不要なビルドオプションを指定しておく
NO_ACPI=yes NO_ATM=yes NO_AUTHPF=yes NO_BLUETOOTH=yes NO_BOOT=yes NO_FORTRAN=yes NO_GAMES=yes NO_GDB=yes NO_GPIB=yes NO_I4B=yes NO_INET6=yes NO_INFO=yes NO_IPFILTER=yes NO_LIBC_R=yes NO_LIBPTHREAD=yes NO_LIBTHR=yes NO_LPR=yes NO_KERBEROS=yes NO_MODULES=yes NO_NETCAT=yes NO_NIS=yes NO_OPENSSH=yes NO_OPENSSL=yes NO_PF=yes NO_PROFILE=yes NO_RCMDS=yes NO_USB=yes NO_BIND=yes NO_BIND_DNSSEC=yes NO_BIND_ETC=yes NO_BIND_LIBS_LWRES=yes NO_BIND_MTREE=yes NO_BIND_NAMED=yes NO_BIND_UTILS=yes
あらかじめ
cd /usr/src make __MAKE_CONF=/etc/make.conf.jail buildworld
しておく。
ezjail.conf
cd /usr/local/etc cp ezjail.conf.sample ezjail.conf
でコピーする。ezjail_jaildirなどは任意に設定する。(個人的に/usrと/usr/localを分けているので、ezjail_jaildir=/usr/local/jailsに設定している)
portsツリーの更新用AnonymousCVSの設定をする
/usr/local/etc/ezjail.confのezjail_portscvsrootをjpに設定する。
ezjail_portscvsroot=":pserver:anoncvs@anoncvs.jp.FreeBSD.org:/home/ncvs"
anoncvsにログインしておく
setenv CVSROOT :pserver:anoncvs@anoncvs.jp.FreeBSD.org:/home/ncvs cvs login (パスワードとしてanoncvsを入力)
/root/.cvspassに以下のような内容が出来る。(最初からこのファイルを作成するのでもいいかな)
/1 :pserver:anoncvs@anoncvs.jp.freebsd.org:2401/home/ncvs Ay=0=h<Z
ezjailの導入
ezjail-admin update -i
する。basejailにinstallworldされる。
jailに不要なファイルの削除
N. NielsenのリストFiles to Remove from Jailsのリストを使用する。(/usr/jails/はezjail.confで設定したディレクトリに変えること)
fetch http://memberwebs.com/nielsen/freebsd/jails/docs/jail_remove_5.x.txt sed "s#^/#/usr/jails/newjail/#" < jail_remove_5.x.txt | xargs rm -rfv sed "s#^/#/usr/jails/basejail/#" < jail_remove_5.x.txt | xargs rm -rfv
default flavourの設定
flavour/default/etc/periodic.conf
daily_status_disks_enable="NO" daily_status_network_enable="NO" daily_status_security_noamd="YES" daily_status_security_chkmounts_enable="NO" daily_status_security_ipfdenied_enable="NO" daily_status_security_ipfwdenied_enable="NO" daily_status_security_ipfwlimit_enable="NO" daily_status_security_ip6fwdenied_enable="NO" daily_status_security_ip6fwlimit_enable="NO"
flavour/default/etc/rc.conf
network_interfaces="" rpcbind_enable="NO" sendmail_enable="NO" sendmail_submit_enable="YES" sendmail_outbound_enable="NO" sendmail_msp_queue_enable="YES" sshd_enable="NO" sshd_flags="-4" syslogd_flags="-ss" tcp_keepalive="NO" tcp_extensions="NO" cron_flags="-J 15"
/etc/fstab /etc/wall_cmos_clock /etc/localtime
cd /usr/jails touch flavours/default/etc/fstab touch flavours/default/etc/wall_cmos_clock cp -p /usr/share/zoneinfo/Asia/Tokyo flavours/default/etc/localtime
/etc/resolv.conf
cd /usr/jails grep nameserver /etc/resolv.conf > flavours/default/etc/resolv.conf
basejailの整備
/sbin/initのエラーを回避するためにtrueにハードリンクする
cd /usr/jails/basejail ln usr/bin/true sbin/init
flavourの設定をするシェルスクリプト
#!/bin/sh
[ -f ${ezjail_etc}/ezjail.conf ] && . ${ezjail_etc}/ezjail.conf
ezjail_jaildir=${ezjail_jaildir:-"/usr/jails"}
ezjail_jailtemplate=${ezjail_jailtemplate:-"${ezjail_jaildir}/newjail"}
ezjail_jailbase=${ezjail_jailbase:-"${ezjail_jaildir}/basejail"}
ezjail_jailfull=${ezjail_jailfull:-"${ezjail_jaildir}/fulljail"}
ezjail_flavours=${ezjail_flavours:-"${ezjail_jaildir}/flavours"}
# remove files
[ ! -e jail_remove_5.x.txt ] && fetch http://memberwebs.com/nielsen/freebsd/jails/docs/jail_remove_5.x.txt
sed -e "s#^/#${ezjail_jailtemplate}/#" < jail_remove_5.x.txt | xargs rm -rfv
sed -e 's#^/#${ezjail_jailbase}/#' < jail_remove_5.x.txt | xargs rm -rfv
# ln /usr/bin/true /sbin/init
[ ! -e ${ezjail_jailbase}/sbin/init -a -e ${ezjail_jailbase}/usr/bin/true ] && ln ${ezjail_jailbase}/usr/bin/true ${ezjail_jailbase}/sbin/init
# /etc/resolv.conf
[ ! -e ${ezjail_flavours}/default/etc/resolv.conf ] && grep nameserver /etc/resolv.conf > ${ezjail_flavours}/default/etc/resolv.conf
# touch /etc/fstab
[ ! -e ${ezjail_flavours}/default/etc/fstab ] && touch ${ezjail_flavours}/default/etc/fstab
# touch /etc/wall_cmos_clock
[ ! -e ${ezjail_flavours}/default/etc/wall_cmos_clock ] && touch ${ezjail_flavours}/default/etc/wall_cmos_clock
# /etc/localtime
cp -p /usr/share/zoneinfo/Asia/Tokyo ${ezjail_flavours}/default/etc/localtime
jailの作成
ezjail-admin create -f default hoge.example.jp 192.168.0.2
起動
/etc/rc.confにezjail_enable="YES"を追加して
/usr/local/etc/rc.d/ezjail.sh start
portsツリーの導入
まっさらからportsツリーを入れる場合
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/ports/ports-current/ports.tar.gz tar -zxvf ports.tar.gz -C /usr/jails/basejail/usr
portsnapを使う場合
portsnap fetch portsnap extract -p /usr/jails/basejail/usr/ports
ezjail-adminでAnonCVSを使う
ezjail-admin update -P
最終更新時間:2006年02月26日 17時29分58秒