|
|
@@ -0,0 +1,87 @@
|
|
|
+#!/bin/sh
|
|
|
+
|
|
|
+# Update freebsd base of all running jails
|
|
|
+#
|
|
|
+# one has first to create the suitable configuration file
|
|
|
+# by default /usr/local/etc/jail-update.conf
|
|
|
+# or pass it as the first argument
|
|
|
+#
|
|
|
+#
|
|
|
+
|
|
|
+FAILURE() {
|
|
|
+ echo ${*}
|
|
|
+ exit 1
|
|
|
+}
|
|
|
+
|
|
|
+usage() {
|
|
|
+ echo 'Usage: ...'
|
|
|
+ echo -e '-c\tconfiguration file'
|
|
|
+ echo -e '\t\tdefault to /usr/local/etc/jail-update.conf'
|
|
|
+ echo -e '-j\tjail list'
|
|
|
+ echo -e '\t\tdefault to all running jails'
|
|
|
+ echo -e '-u\tthis message'
|
|
|
+ echo '-------------------------------------------------'
|
|
|
+}
|
|
|
+
|
|
|
+parse() {
|
|
|
+ RED='\033[0;31m'
|
|
|
+ NC='\033[0m' # No Color
|
|
|
+ while getopts "cur:j:" option
|
|
|
+ do
|
|
|
+ case ${option} in
|
|
|
+ c)
|
|
|
+ CONF=${OPTARG}
|
|
|
+ ;;
|
|
|
+ r) TOREV=${OPTARG}
|
|
|
+ ;;
|
|
|
+ j) J=${OPTARG}
|
|
|
+ ;;
|
|
|
+ *)
|
|
|
+ usage
|
|
|
+ exit 0
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
+ done
|
|
|
+}
|
|
|
+
|
|
|
+export PAGER=/bin/cat
|
|
|
+# default parameters
|
|
|
+CONF=/usr/local/etc/jail-update.conf
|
|
|
+# get currently running names (or jids) list
|
|
|
+parse ${*}
|
|
|
+
|
|
|
+[ -z "${J}" ] && echo 'no jail to check.exiting.' && exit 0
|
|
|
+[ ! -r "${CONF}" ] && echo 'no configuration file for updating.exiting.' && exit 1
|
|
|
+
|
|
|
+echo ''
|
|
|
+echo 'Ready to update jail(s) <'${J}'> to '${TOREV}', according to the <'${CONF}'> configuration.'
|
|
|
+echo ''
|
|
|
+
|
|
|
+# jail path
|
|
|
+JPATH=`jls -j ${J} path 2>/dev/null`
|
|
|
+if [ -n "${JPATH}" ]; then
|
|
|
+ echo '[ :: ' $J ' ::]'
|
|
|
+ # freebsd version this jail is running
|
|
|
+ JVERSION=`jexec ${J} freebsd-version -u`
|
|
|
+ if [ -n "${JVERSION}" ]; then
|
|
|
+ echo 'Updating <'${J}'> from version <'${JVERSION}'>, path <'${JPATH}'>.'
|
|
|
+ jail -r ${J} || echo skipping
|
|
|
+ freebsd-update -f ${CONF} --currently-running ${JVERSION} -b ${JPATH} -r ${TOREV} upgrade || FAILURE upgrade failed
|
|
|
+ freebsd-update -f ${CONF} -b ${JPATH} install || FAILURE install
|
|
|
+ jail -c ${J}
|
|
|
+ freebsd-update -f ${CONF} -b ${JPATH} install || FAILURE install
|
|
|
+ jail -r ${J}
|
|
|
+ jail -c ${J}
|
|
|
+ pkg -j ${J} bootstrap -f
|
|
|
+ pkg -j ${J} update
|
|
|
+ pkg -j ${J} upgrade -f
|
|
|
+ else
|
|
|
+ echo 'Unable to get jail <'${J}'> path.Skipping'
|
|
|
+
|
|
|
+ fi
|
|
|
+
|
|
|
+else
|
|
|
+ echo 'Jail <'${J}'> unavailable.Skipping.'
|
|
|
+
|
|
|
+fi
|
|
|
+
|