jail_update.sh 1.6 KB

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