HEADS UP: renaming jails has been introduced. Lots of checking will probably be required, this version is considered unstable. Also two minr style glitches have been fixed.

This commit is contained in:
erdgeist 2006-11-15 18:51:22 +00:00
parent 0075b0454d
commit 9725ed4a85

View File

@ -38,7 +38,7 @@ ezjail_usage_install="Usage: ${ezjail_admin} install [-mps] [-h host] [-r releas
ezjail_usage_create="Usage: ${ezjail_admin} create [-xbi] [-f flavour] [-r jailroot] [-s size] [-c bde|eli] [-C args] jailname jailip" ezjail_usage_create="Usage: ${ezjail_admin} create [-xbi] [-f flavour] [-r jailroot] [-s size] [-c bde|eli] [-C args] jailname jailip"
ezjail_usage_delete="Usage: ${ezjail_admin} delete [-w] jailname" ezjail_usage_delete="Usage: ${ezjail_admin} delete [-w] jailname"
ezjail_usage_update="Usage: ${ezjail_admin} update [-s sourcetree] [-i] [-pP]" ezjail_usage_update="Usage: ${ezjail_admin} update [-s sourcetree] [-i] [-pP]"
ezjail_usage_config="Usage: ${ezjail_admin} config [-r run|norun] [-i attach|detach] jailname" ezjail_usage_config="Usage: ${ezjail_admin} config [-r run|norun] [-n newname] [-i attach|detach] jailname"
ezjail_usage_list="Usage: ${ezjail_admin} list" ezjail_usage_list="Usage: ${ezjail_admin} list"
################################ ################################
@ -239,7 +239,7 @@ create)
# jail names may lead to identical configs, eg. foo.bar.com == foo-bar.com # jail names may lead to identical configs, eg. foo.bar.com == foo-bar.com
# so check, whether we might be running into problems # so check, whether we might be running into problems
[ -e ${ezjail_config} ] && exerr "Error: an ezjail config already exists at ${ezjail_config}. Please rename the ezjail." [ -e ${ezjail_config} -o -e ${ezjail_config}.norun ] && exerr "Error: an ezjail config already exists at ${ezjail_config}. Please rename the ezjail."
# if jail root specified on command line is not absolute, make it absolute # if jail root specified on command line is not absolute, make it absolute
# inside our jail directory # inside our jail directory
@ -343,7 +343,7 @@ create)
# if the automount feature is not disabled, this fstab entry for new jail # if the automount feature is not disabled, this fstab entry for new jail
# will be obeyed # will be obeyed
echo -n > /etc/fstab.${ezjail_safename} echo -n > /etc/fstab.${ezjail_safename}
[ "${ezjail_imagetype}" ] && \ [ -n "${ezjail_imagetype}" ] && \
echo ${ezjail_rootdir}.device ${ezjail_rootdir} ufs rw 0 0 >> /etc/fstab.${ezjail_safename} echo ${ezjail_rootdir}.device ${ezjail_rootdir} ufs rw 0 0 >> /etc/fstab.${ezjail_safename}
echo ${ezjail_jailbase} ${ezjail_rootdir}/basejail nullfs ro 0 0 >> /etc/fstab.${ezjail_safename} echo ${ezjail_jailbase} ${ezjail_rootdir}/basejail nullfs ro 0 0 >> /etc/fstab.${ezjail_safename}
@ -596,9 +596,10 @@ config)
# Clean variables, prevent polution # Clean variables, prevent polution
unset ezjail_setrunnable ezjail_imageaction unset ezjail_setrunnable ezjail_imageaction
shift; while getopts :r:i: arg; do case ${arg} in shift; while getopts :r:i:n: arg; do case ${arg} in
i) ezjail_imageaction=${OPTARG};; i) ezjail_imageaction=${OPTARG};;
r) ezjail_setrunnable=${OPTARG};; r) ezjail_setrunnable=${OPTARG};;
n) ezjail_new_name=${OPTARG};;
?) exerr ${ezjail_usage_config};; ?) exerr ${ezjail_usage_config};;
esac; done; shift $(( ${OPTIND} - 1 )) esac; done; shift $(( ${OPTIND} - 1 ))
@ -611,7 +612,107 @@ config)
[ -n "${ezjail_config}" ] || exerr "Error: Nothing known about jail ${ezjail_name}." [ -n "${ezjail_config}" ] || exerr "Error: Nothing known about jail ${ezjail_name}."
# Nothing to be configured? # Nothing to be configured?
[ -z "${ezjail_setrunnable}" -a -z "${ezjail_imageaction}" ] && echo "Warning: No config option specified." [ -z "${ezjail_setrunnable}" -a -z "${ezjail_new_name}" -a -z "${ezjail_imageaction}" ] && echo "Warning: No config option specified."
# Do we want a new name for our jail?
if [ -n "${ezjail_new_name}" ]; then
# if jail is still running, refuse to go any further
[ -n "${ezjail_id}" ] && exerr "Error: Jail appears to be still running, stop it first."
# Cannot rename an attached jail
[ -n "${ezjail_attached}" ] && exerr "Error: Jail image file ${ezjail_image} is attached as ${ezjail_device}. '${ezjail_admin} config -i detach' it first."
# The new values for the jail
ezjail_new_hostname=`echo -n ${ezjail_new_name} | tr '/~' '__'`
ezjail_new_safename=`echo -n "${ezjail_new_name}" | tr -c '[:alnum:]' _`
ezjail_new_rootdir=`basename -- ${ezjail_rootdir}`/${ezjail_new_hostname}
ezjail_new_config=${ezjail_jailcfgs}/${ezjail_new_safename}
[ "${ezjail_config}" = "${ezjail_config%.norun}" ] || ezjail_new_config=${ezjail_jailcfgs}/${ezjail_new_safename}.norun
ezjail_new_softlink=${ezjail_jaildir}/`basename -- ${ezjail_new_rootdir}`
# those are just copied
eval ezjail_new_ip=\"\$jail_${ezjail_safename}_ip\"
eval ezjail_new_exec=\"\$jail_${ezjail_safename}_exec\"
eval ezjail_new_mount_enable=\"\$jail_${ezjail_safename}_mount_enable\"
eval ezjail_new_devfs_enable=\"\$jail_${ezjail_safename}_devfs_enable\"
eval ezjail_new_devfs_ruleset=\"\$jail_${ezjail_safename}_devfs_ruleset\"
eval ezjail_new_procfs_enable=\"\$jail_${ezjail_safename}_devfs_enable\"
eval ezjail_new_fdescfs_enable=\"\$jail_${ezjail_safename}_fdescfs_enable\"
eval ezjail_new_attachparams=\"\$jail_${ezjail_safename}_attachparams\"
eval ezjail_new_attachblocking=\"\$jail_${ezjail_safename}_attachblocking\"
eval ezjail_new_forceblocking=\"\$jail_${ezjail_safename}_forceblocking\"
eval ezjail_new_imagetype=\"\$jail_${ezjail_safename}_imagetype\"
# This scenario really will only lead to real troubles in the 'fulljail'
# case, but I should still explain this to the user and not claim that
# "an ezjail would already exist"
case ${ezjail_new_hostname} in basejail|newjail|fulljail|flavours|ezjailtemp) exerr "Error: ezjail needs the ${ezjail_new_hostname} directory for its own administrative purposes. Please rename the ezjail.";; esac
# jail names may lead to identical configs, eg. foo.bar.com == foo-bar.com
# so check, whether we might be running into problems
[ -e ${ezjail_new_config} -o -e ${ezjail_new_config}.norun ] && exerr "Error: an ezjail config already exists at ${ezjail_new_config}. Please rename the ezjail."
# need to rename the image?
if [ -n "${ezjail_image}" ]
# Do we have an auto generated image name?
if [ "${ezjail_rootdir}.img" = "${ezjail_image}" ]
ezjail_newimage=${ezjail_newrootdir}.img}
mv ${ezjail_image} ${ezjail_new_image}
else
ezjail_new_image=${ezjail_image}
echo "Warning: Image file for jail ${ezjail_name} remains ${ezjail_image}, as it was not auto generated"
fi
else
unset ezjail_new_image
fi
# adjust softlink
if [ -L "${ezjail_softlink}" ]; then
rm ${ezjail_softlink}
ln -s ${ezjail_new_rootdir} ${ezjail_new_softlink}
fi
# rename rootdir
mv ${ezjail_rootdir} ${ezjail_new_rootdir}
# rename fstab
echo -n > /etc/fstab.${ezjail_new_safename}
[ -n "${ezjail_new_imagetype}" ] && \
echo ${ezjail_new_rootdir}.device ${ezjail_new_rootdir} ufs rw 0 0 >> /etc/fstab.${ezjail_new_safename}
echo ${ezjail_jailbase} ${ezjail_new_rootdir}/basejail nullfs ro 0 0 >> /etc/fstab.${ezjail_new_safename}
rm /etc/fstab.${ezjail_safename}
# rename config file, preserve comments
(
grep -e ^\# ${ezjail_config}
echo
echo export jail_${ezjail_new_safename}_hostname=\"${ezjail_new_hostname}\"
echo export jail_${ezjail_new_safename}_ip=\"${ezjail_new_ip}\"
echo export jail_${ezjail_new_safename}_rootdir=\"${ezjail_new_rootdir}\"
echo export jail_${ezjail_new_safename}_exec=\"${ezjail_new_exec}\"
echo export jail_${ezjail_new_safename}_mount_enable=\"${ezjail_new_mount_enable}\"
echo export jail_${ezjail_new_safename}_devfs_enable=\"${ezjail_new_devfs_enable}\"
echo export jail_${ezjail_new_safename}_devfs_ruleset=\"${ezjail_new_devfs_ruleset\"
echo export jail_${ezjail_new_safename}_procfs_enable=\"${ezjail_new_procfs_enable}\"
echo export jail_${ezjail_new_safename}_fdescfs_enable=\"${ezjail_new_fdescfs_enable}\"
echo export jail_${ezjail_new_safename}_image=\"${ezjail_new_image}\"
echo export jail_${ezjail_new_safename}_imagetype=\"${ezjail_new_imagetype}\"
echo export jail_${ezjail_new_safename}_attachparams=\"${ezjail_new_attachparams}\"
echo export jail_${ezjail_new_safename}_attachblocking=\"${ezjail_new_attachblocking}\"
echo export jail_${ezjail_new_safename}_forceblocking=\"${ezjail_new_forceblocking}\"
) > ${ezjail_new_config}
# remove old config
rm ${ezjail_config}
# usually that doesnt go smoothly, but the user wanted it
# that way ;)
echo Jail has been renamed. You might want to check ${ezjail_new_config} and /etc/fstab.${ezjail_new_safename} to ensure everything has gone smoothly.
echo Also check settings in your Jail's /etc/ directory (especially /etc/rc.conf).
# reread config
fetchjailinfo ${ezjail_new_safename}
fi
case ${ezjail_setrunnable} in case ${ezjail_setrunnable} in
run) [ "${ezjail_config}" = "${ezjail_config%.norun}" ] || mv ${ezjail_config} ${ezjail_config%.norun};; run) [ "${ezjail_config}" = "${ezjail_config%.norun}" ] || mv ${ezjail_config} ${ezjail_config%.norun};;