introduce the baseclean subcommand. It uses the new install log to compare to the files present in the basejail and deletes them. By default it does a dry run and deletes nothing, adding the -y parameter will delete files really.
This commit is contained in:
parent
bc503ac023
commit
bcf5edaa20
57
ezjail-admin
57
ezjail-admin
@ -41,7 +41,7 @@ ezjail_basesystem="base"
|
|||||||
case `uname -p` in amd64) ezjail_dirlist="${ezjail_dirlist} usr/lib32"; ezjail_basesystem="${ezjail_basesystem} lib32";; esac
|
case `uname -p` in amd64) ezjail_dirlist="${ezjail_dirlist} usr/lib32"; ezjail_basesystem="${ezjail_basesystem} lib32";; esac
|
||||||
|
|
||||||
# Synopsis messages
|
# 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_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_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_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_delete="Usage: ${ezjail_admin} delete [-wf] jailname"
|
||||||
@ -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_freeze="Usage: ${ezjail_admin} freeze jailname newflavour"
|
||||||
ezjail_usage_troubleshoot="Usage: ${ezjail_admin} troubleshoot [jailname...]"
|
ezjail_usage_troubleshoot="Usage: ${ezjail_admin} troubleshoot [jailname...]"
|
||||||
ezjail_usage_list="Usage: ${ezjail_admin} list"
|
ezjail_usage_list="Usage: ${ezjail_admin} list"
|
||||||
|
ezjail_usage_baseclean="Usage: ${ezjail_admin} baseclean [-y]"
|
||||||
|
|
||||||
################################
|
################################
|
||||||
# End of variable initialization
|
# End of variable initialization
|
||||||
@ -1217,6 +1218,60 @@ install)
|
|||||||
# Fill ports, if requested
|
# Fill ports, if requested
|
||||||
[ "${ezjail_installports}" ] && ezjail_updateports
|
[ "${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."
|
||||||
|
|
||||||
|
[ "${ezjail_use_zfs}" = "YES" ] && ensure_jailzfs
|
||||||
|
ezjail_makeabsolute ezjail_jailtemp
|
||||||
|
rm -rf "${ezjail_jailtemp}"
|
||||||
|
|
||||||
|
# Create and try to access temp dir
|
||||||
|
mkdir -p "${ezjail_jailtemp}" || exerr "Error: Could not create temporary base jail directory ${ezjail_jailtemp}."
|
||||||
|
|
||||||
|
# create any directories in install log
|
||||||
|
for line in `cat ${ezjail_jailbase}/.ezjail.installlog | sort`; do
|
||||||
|
[ ! -d "${ezjail_jailtemp}/${line%/*}" ] && mkdir -p "${ezjail_jailtemp}/${line%/*}"
|
||||||
|
done
|
||||||
|
|
||||||
|
# we ignore any usr/ports and the ezjail install log itself
|
||||||
|
mkdir -p "${ezjail_jailtemp}/usr/ports"
|
||||||
|
touch "${ezjail_jailtemp}/.ezjail.installlog"
|
||||||
|
|
||||||
|
# touch any files listed in install log
|
||||||
|
for line in `cat ${ezjail_jailbase}/.ezjail.installlog | sort`; do
|
||||||
|
[ ! -e "${ezjail_jailtemp}/${line}" ] && touch "${ezjail_jailtemp}/${line}"
|
||||||
|
done
|
||||||
|
|
||||||
|
# User has enabled uglyperlhack in ezjail.conf, make sure symlink doesn't get deleted
|
||||||
|
[ "${ezjail_uglyperlhack}" = "YES" ] && touch "${ezjail_jailtemp}/usr/bin/perl"
|
||||||
|
|
||||||
|
# find all files in base jail that are not listed in the install log and delete them
|
||||||
|
for _file in `find ${ezjail_jailbase} -type l -or -type f ! -regex ".*usr/ports.*" | sed s:^${ezjail_jailbase}/:: `; do
|
||||||
|
if [ ! -f "${ezjail_jailtemp}/${_file}" ]; 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 ${ezjail_jailbase} -type d ! -regex ".*usr/ports.*" | sort -r | sed -E s:^${ezjail_jailbase}:: `; do
|
||||||
|
if [ ! -e "${ezjail_jailtemp}/${_dir}" ]; then
|
||||||
|
[ "${ezjail_yeswecan}" != "YES" ] && echo "Dir: ${ezjail_jailbase}/${_dir} will be deleted"
|
||||||
|
[ "${ezjail_yeswecan}" = "YES" ] && rmdir ${ezjail_jailbase}/${_dir} && echo "Dir: ${ezjail_jailbase}/${_dir} deleted"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# remove our temporary directory
|
||||||
|
rm -rf "${ezjail_jailtemp}"
|
||||||
;;
|
;;
|
||||||
######################## ezjail-admin SHORTCUT ########################
|
######################## ezjail-admin SHORTCUT ########################
|
||||||
*start|*stop|*startcrypto|*stopcrypto)
|
*start|*stop|*startcrypto|*stopcrypto)
|
||||||
|
@ -61,6 +61,9 @@
|
|||||||
.Op Fl s Ar sourcetree | sourceosversion
|
.Op Fl s Ar sourcetree | sourceosversion
|
||||||
.Op Fl p
|
.Op Fl p
|
||||||
.Fl b | Fl i | Fl P | Fl u | Fl U
|
.Fl b | Fl i | Fl P | Fl u | Fl U
|
||||||
|
.Nm
|
||||||
|
.Cm baseclean
|
||||||
|
.Op Fl y
|
||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
The
|
The
|
||||||
.Nm
|
.Nm
|
||||||
@ -629,6 +632,17 @@ sub command to install the basejail from binary packages.
|
|||||||
.Pp
|
.Pp
|
||||||
If the basejail is managed in its own ZFS filesystem, a snapshot of that
|
If the basejail is managed in its own ZFS filesystem, a snapshot of that
|
||||||
filesystem is taken first.
|
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
|
.Sh FILES
|
||||||
.Pa EZJAIL_PREFIX/bin/ezjail-admin
|
.Pa EZJAIL_PREFIX/bin/ezjail-admin
|
||||||
.br
|
.br
|
||||||
|
Loading…
x
Reference in New Issue
Block a user