take a snapshot before upgrading
[fbsd-stable-mgmt.git] / jail_update.sh
1 #!/bin/sh
2
3 # Update freebsd base of all running jails
4
5 # one has first to create the suitable configuration file 
6 # by default /usr/local/etc/jail-update.conf
7 # or pass it as the first argument
8
9 #
10
11 usage() {
12         echo 'Usage: ...'
13         echo -e '-c\tconfiguration file'
14         echo -e '\t\tdefault to /usr/local/etc/jail-update.conf'
15         echo -e '-j\tjail list'
16         echo -e '\t\tdefault to all running jails'
17         echo -e '-u\tthis message'
18         echo '-------------------------------------------------'
19 }
20
21 parse() {
22         RED='\033[0;31m'
23         NC='\033[0m' # No Color
24         while getopts "cuj:" option 
25         do
26                 case ${option} in
27                         c)
28                                 CONF=${OPTARG}
29                                 ;;
30                         j)
31                                 JLIST=${OPTARG}
32                                 ;;
33                         *)
34                                 usage
35                                 exit 0
36                                 ;;
37                 esac
38         done
39 }
40
41 # default parameters
42 CONF=/usr/local/etc/jail-update.conf
43 # get currently running names (or jids) list
44 JLIST=`jls name 2>/dev/null`
45
46 parse ${*}
47
48 [ -z "${JLIST}" ] && echo 'no jail to check.exiting.' && exit 0
49 [ ! -r "${CONF}" ] && echo 'no configuration file for updating.exiting.' && exit 1
50
51 echo ''
52 echo 'Ready to update jail(s) <'${JLIST}'>, according to the <'${CONF}'> configuration.'
53 echo ''
54
55 for J in ${JLIST};
56 do
57         # jail path
58         JPATH=`jls -j ${J} path 2>/dev/null` 
59         if [ -n "${JPATH}" ]; then
60                 echo '[ :: ' $J ' ::]'
61                 # freebsd version this jail is running
62                 JVERSION=`jexec ${J} freebsd-version -u`
63                 if [ -n "${JVERSION}" ]; then
64                         echo 'Updating <'${J}'> from version <'${JVERSION}'>, path <'${JPATH}'>.'
65                         freebsd-update -f  ${CONF} --currently-running ${JVERSION}  -b ${JPATH} fetch install 
66
67                 else
68                         echo 'Unable to get jail <'${J}'> path.Skipping'
69
70                 fi
71
72         else
73                 echo 'Jail <'${J}'> unavailable.Skipping.'
74
75         fi
76 done
77