Browse Source

jail upgrade scripting

david Marec 9 months ago
parent
commit
30986db864
2 changed files with 165 additions and 0 deletions
  1. 78 0
      jail_update.sh
  2. 87 0
      jail_upgrade.sh

+ 78 - 0
jail_update.sh

@@ -0,0 +1,78 @@
+#!/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
+# 
+#
+
+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 "cuj:" option 
+	do
+		case ${option} in
+			c)
+				CONF=${OPTARG}
+				;;
+			j)
+				JLIST=${OPTARG}
+				;;
+			*)
+				usage
+				exit 0
+				;;
+		esac
+	done
+}
+
+# default parameters
+CONF=/usr/local/etc/jail-update.conf
+# get currently running names (or jids) list
+JLIST=`jls name 2>/dev/null`
+
+parse ${*}
+
+[ -z "${JLIST}" ] && 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) <'${JLIST}'>, according to the <'${CONF}'> configuration.'
+echo ''
+
+export PAGER=/bin/cat
+for J in ${JLIST};
+do
+	# 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}'>.'
+			freebsd-update -f  ${CONF} --currently-running ${JVERSION}  -b ${JPATH} fetch install 
+
+		else
+			echo 'Unable to get jail <'${J}'> path.Skipping'
+
+		fi
+
+	else
+		echo 'Jail <'${J}'> unavailable.Skipping.'
+
+	fi
+done
+

+ 87 - 0
jail_upgrade.sh

@@ -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
+