diff --git a/conf/type/__jail/gencode-remote b/conf/type/__jail/gencode-remote index 038daa14..5e1bdc02 100755 --- a/conf/type/__jail/gencode-remote +++ b/conf/type/__jail/gencode-remote @@ -76,7 +76,7 @@ fi # devfs_ruleset being defined without devfs_enable being true # is pointless. Treat this as an error. -if [ -n "$devfsrules" -a "$devfsenable" = "false" ]; then +if [ -n "$devfsruleset" -a "$devfsenable" = "false" ]; then exec >&2 echo "Can't have --devfs-ruleset defined without --devfs-enable true." exit 1 @@ -109,9 +109,102 @@ startJail() { } deleteJail() { +# If the jail's mountpoints are mounted, unmount them +# Remove the jail's rw mountpoints +# Remove the jail's ro mountpoint +# Remove the jail directory +# If the jail's devfs rules are custom (!="jailrules"), remove them +# Remove jail_$name_* lines from rc.conf +# Remove " $name " from jail_list if it's there } createJail() { +# Create the jail directory +echo <<-EOF + mkdir -p ${jaildir}/${name} + if [ ! -d "${jaildir}/base" ]; then + mkdir "${jaildir}/base" + tar -xzf "${jaildir}/jailbase.tgz" -C "${jaildir}/base" + if [ ! -d "${jaildir}/base/usr/local" ]; then + mkdir -p "${jaildir}/base/usr/local" + fi + if [ ! -d "${jaildir}/base/usr/home" ]; then + mkdir -p "${jaildir}/base/usr/home" + fi + fi + if [ ! -d "${jaildir}/rw" ]; then + mkdir "${jaildir}/rw" + fi + mkdir -p "${jaildir}/rw/${name}/etc" + cp -r ${jaildir}/base/etc/* "${jaildir}/rw/${name}/etc/" + mkdir "${jaildir}/rw/${name}/local" + mkdir "${jaildir}/rw/${name}/db" + if [ -d "${jaildir}/base/var/db" ]; then + cp -r ${jaildir}/base/var/db/* "${jaildir}/rw/${name}/db/" + fi + mkdir "${jaildir}/rw/${name}/home" + if [ -d "${jaildir}/base/usr/home" ]; then + cp -r ${jaildir}/base/usr/home/* "${jaildir}/rw/${name}/home/" + fi + mkdir "${jaildir}/rw/${name}/tmp" +EOF + +# Create the ro+rw mountpoint entries in fstab +echo <<-EOF + echo >/etc/fstab.${name} <<-END + /usr/jail/base /usr/jail/${name} nullfs ro 0 0 + /usr/jail/rw/${name}/etc /usr/jail/${name}/etc nullfs rw 0 0 + /usr/jail/rw/${name}/local /usr/jail/${name}/usr/local nullfs rw 0 0 + /usr/jail/rw/${name}/db /usr/jail/${name}/var/db nullfs rw 0 0 + /usr/jail/rw/${name}/home /usr/jail/${name}/usr/home nullfs rw 0 0 + /usr/jail/rw/${name}/tmp /usr/jail/${name}/var/tmp nullfs rw 0 0 + END +EOF + +# Add the jail_$name_* lines to rc.conf +echo <<-EOF + echo >>/etc/rc.conf <<-END + jail_${name}_rootdir="${jaildir}/${name}" + jail_${name}_hostname="${hostname}" + jail_${name}_ip="${ip}" + jail_${name}_devfs_enable="${devfsenable}" + jail_${name}_mount_enable="YES" + jail_${name}_fstab="/etc/fstab.$name" + END +EOF + +if [ -n "$interface" ]; then + echo <<-EOF + echo >>/etc/rc.conf <<-END + jail_${name}_interface="${interface}" + END +EOF +fi + +if [ "$devfsenable" = "true" ]; then + echo <<-EOF + echo >>/etc/rc.conf <<-END + jail_${name}_devfs_ruleset="$devfsruleset" + END +EOF +fi + +# Add $name to jail_list if $onboot=true +if [ "$onboot" = "true" ]; then + echo <<-EOF + eval $(grep '^jail_list=' /etc/rc.conf) + jail_list="${jail_list} ${name}" + sed -i "s/^jail_list=\".*\"/jail_list=\"${jail_list}\"/" /etc/rc.conf + unset jail_list +EOF +fi + +# Add the normal entries into the jail's rc.conf +echo "echo hostname=\"${hostname}\"" >>"${jaildir}/rw/${name}/etc/rc.conf" +echo 'echo sendmail_enable=\"NONE\"' >>"${jaildir}/rw/${name}/etc/rc.conf" +echo 'echo syslogd_enable=\"YES\"' >>"${jaildir}/rw/${name}/etc/rc.conf" +echo 'echo syslogd_flags=\"-ss\"' >>"${jaildir}/rw/${name}/etc/rc.conf" + } if [ "$present" = "EXISTS" ]; then # The jail currently exists