Compare commits

...

7 Commits

2 changed files with 64 additions and 6 deletions

View File

@ -41,8 +41,8 @@ ezjail_basesystem="base"
case `uname -p` in amd64) ezjail_dirlist="${ezjail_dirlist} usr/lib32"; ezjail_basesystem="${ezjail_basesystem} lib32";; esac
# Synopsis messages
ezjail_usage_ezjailadmin="${ezjail_admin} v3.4.2\nUsage: ${ezjail_admin} [archive|config|console|create|delete|freeze|install|list|restore|snapshot|troubleshoot|update] {params}"
ezjail_usage_install="Usage: ${ezjail_admin} install [-mMpPsS] [-h host] [-r release]"
ezjail_usage_ezjailadmin="${ezjail_admin} v3.4.2\nUsage: ${ezjail_admin} [archive|config|console|create|delete|freeze|install|list|restore|snapshot|troubleshoot|update|baseclean] {params}"
ezjail_usage_install="Usage: ${ezjail_admin} install [-mMpPsSK] [-h host] [-r release]"
ezjail_usage_create="Usage: ${ezjail_admin} create [-xbi] [-f flavour] [-r jailroot] [-s size] [-c bde|eli|zfs] [-C args] [-a archive] [-z parentzfs] jailname jailip"
ezjail_usage_delete="Usage: ${ezjail_admin} delete [-wf] jailname"
ezjail_usage_update="Usage: ${ezjail_admin} update [-s sourcetree|sourceosversion] [-p] (-b|-i|-u|-U|-P)"
@ -53,6 +53,7 @@ ezjail_usage_restore="Usage: ${ezjail_admin} restore [-f] [-d archivedir] (archi
ezjail_usage_freeze="Usage: ${ezjail_admin} freeze jailname newflavour"
ezjail_usage_troubleshoot="Usage: ${ezjail_admin} troubleshoot [jailname...]"
ezjail_usage_list="Usage: ${ezjail_admin} list"
ezjail_usage_baseclean="Usage: ${ezjail_admin} baseclean [-y]"
################################
# End of variable initialization
@ -285,10 +286,14 @@ ezjail_splitworld() {
# This mkdir is important, since cpio will create intermediate
# directories with permission 0700 which is bad
mkdir -p "${ezjail_jailbase}/usr"
# Remove any leftover ezjail install logs
rm -f ${ezjail_jailbase}/.ezjail.installlog
for dir in ${ezjail_dirlist}; do
find ${dir} | cpio -d -p -v "${ezjail_jailbase}" || exerr "Error: Installation of ${dir} failed."
find ${dir} >> ${ezjail_jailbase}/.ezjail.installlog
find ${dir} | cpio -d -p -v ${ezjail_keep_basejail} "${ezjail_jailbase}" || exerr "Error: Installation of ${dir} failed."
chflags -R noschg ${dir}; rm -r ${dir}; ln -s /basejail/${dir} ${dir}
done
[ "${ezjail_uglyperlhack}" = "YES" ] && echo usr/bin/perl >> ${ezjail_jailbase}/.ezjail.installlog
mkdir basejail
# Try to remove the old template jail
@ -1067,7 +1072,7 @@ install)
# Clean variables, prevent pollution
unset ezjail_release ezjail_installmanpages ezjail_installports ezjail_installsources ezjail_dir ezjail_ftpserverqueried ezjail_proto ezjail_disturi
shift; while getopts :mMpPsSh:r: arg; do case ${arg} in
shift; while getopts :mMpPsSh:Kr: arg; do case ${arg} in
m) ezjail_installmanpages=" manpages";;
M) ezjail_installmanpages=" manpages"; unset ezjail_basesystem;;
s) ezjail_installsources=" src";;
@ -1075,6 +1080,7 @@ install)
p) ezjail_installports="YES";;
P) ezjail_installports="YES"; unset ezjail_basesystem;;
h) ezjail_ftphost=${OPTARG};;
K) ezjail_keep_basejail="-u";;
r) ezjail_release=${OPTARG};;
?) exerr ${ezjail_usage_install};;
esac; done; shift $(( ${OPTIND} - 1 ))
@ -1206,13 +1212,48 @@ install)
# Update to current patch level, split basejail and newjail
if [ "${ezjail_basesystem}" ]; then
env PAGER=/bin/cat freebsd-update -b "${DESTDIR}" fetch install
env PAGER=/bin/cat freebsd-update -b "${DESTDIR}" --currently-running "${ezjail_release}" fetch install
ezjail_splitworld
fi
# Fill ports, if requested
[ "${ezjail_installports}" ] && ezjail_updateports
;;
######################## ezjail-admin BASECLEAN ########################
baseclean)
unset ezjail_yeswecan
shift; while getopts y arg; do case ${arg} in
y) ezjail_yeswecan="YES";;
?) exerr ${ezjail_usage_baseclean};;
esac; done; shift $(( $OPTIND - 1 ))
[ "${ezjail_yeswecan}" != "YES" ] && echo "baseclean dry run, nothing will be deleted. Use -y option to delete files."
[ ! -f "${ezjail_jailbase}/.ezjail.installlog" ] && echo "No .ezjail.installlog found in basejail, please run ezjail-admin install first." && exit 1
[ "${ezjail_use_zfs}" = "YES" ] && ensure_jailzfs
ezjail_makeabsolute ezjail_jailbase
for _parent in `ls -1d ${ezjail_jailbase}/*/* |grep -v ${ezjail_jailbase}/usr/ports`; do
# find all files in base jail that are not listed in the install log and delete them
for _file in `find ${_parent} -type l -or -type f | sed s:^${ezjail_jailbase}/:: `; do
if [ `grep --mmap -c -m 1 -F -x ${_file} ${ezjail_jailbase}/.ezjail.installlog` -lt 1 ]; then
[ "${ezjail_yeswecan}" != "YES" ] && echo "File: ${ezjail_jailbase}/${_file} will be deleted"
[ "${ezjail_yeswecan}" = "YES" ] && rm "${ezjail_jailbase}/${_file}" && echo "File: ${ezjail_jailbase}/${_file} deleted"
fi
done
# find all directories in base jail that are not listed in the install log and delete them when empty
for _dir in `find ${_parent} -type d | sort -r | sed -E s:^${ezjail_jailbase}/:: `; do
if [ `grep -c -m 1 -F -x ${_dir} ${ezjail_jailbase}/.ezjail.installlog` -lt 1 ]; then
[ "${ezjail_yeswecan}" != "YES" -a "${_dir}" != "${ezjail_jailbase}" ] && echo "Dir: ${ezjail_jailbase}/${_dir} will be deleted"
[ "${ezjail_yeswecan}" = "YES" -a "${_dir}" != "${ezjail_jailbase}" ] && rmdir ${ezjail_jailbase}/${_dir} && echo "Dir: ${ezjail_jailbase}/${_dir} deleted"
fi
done
done
;;
######################## ezjail-admin SHORTCUT ########################
*start|*stop|*startcrypto|*stopcrypto)

View File

@ -6,7 +6,7 @@
.Nd Administrate ezjail environment
.Sh SYNOPSIS
.Nm Cm install
.Op Fl mMpPsS
.Op Fl mMpPsSK
.Op Fl h Ar host
.Op Fl r Ar release
.Nm
@ -61,6 +61,9 @@
.Op Fl s Ar sourcetree | sourceosversion
.Op Fl p
.Fl b | Fl i | Fl P | Fl u | Fl U
.Nm
.Cm baseclean
.Op Fl y
.Sh DESCRIPTION
The
.Nm
@ -123,6 +126,9 @@ for details or
.Xr portsnap 8 .
.It Fl P
Fetch and extract a ports tree, without (re)installing the base jail.
.It Fl K
Reinstall the base jail and the new jail template. Can be used together with -r
to upgrade both to a newer (or older) FreeBSD version.
.It Fl h Ar host
Set the remote host to fetch FreeBSD distribution sets from. If absent the
default host
@ -626,6 +632,17 @@ sub command to install the basejail from binary packages.
.Pp
If the basejail is managed in its own ZFS filesystem, a snapshot of that
filesystem is taken first.
.Ss Nm Cm baseclean
Cleans ezjail's basejail from any unneeded files that might still be present
after an upgrade via
.Cm ezjail-admin install
.Fl K
.Pp
Defaults in a dry run which
will not delete anything, but shows all files that would be deleted.
.Pp
.Fl y
Really delete that files.
.Sh FILES
.Pa EZJAIL_PREFIX/bin/ezjail-admin
.br