jail_upgrade.sh 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. FAILURE() {
  10. echo ${*}
  11. exit 1
  12. }
  13. usage() {
  14. echo 'Usage: ...'
  15. echo -e '-c\tconfiguration file'
  16. echo -e '\t\tdefault to /usr/local/etc/jail-update.conf'
  17. echo -e '-j\tjail list'
  18. echo -e '\t\tdefault to all running jails'
  19. echo -e '-u\tthis message'
  20. echo '-------------------------------------------------'
  21. }
  22. parse() {
  23. RED='\033[0;31m'
  24. NC='\033[0m' # No Color
  25. while getopts "cur:j:" option
  26. do
  27. case ${option} in
  28. c)
  29. CONF=${OPTARG}
  30. ;;
  31. r) TOREV=${OPTARG}
  32. ;;
  33. j) J=${OPTARG}
  34. ;;
  35. *)
  36. usage
  37. exit 0
  38. ;;
  39. esac
  40. done
  41. }
  42. export PAGER=/bin/cat
  43. # default parameters
  44. CONF=/usr/local/etc/jail-update.conf
  45. # get currently running names (or jids) list
  46. parse ${*}
  47. [ -z "${J}" ] && echo 'no jail to check.exiting.' && exit 0
  48. [ ! -r "${CONF}" ] && echo 'no configuration file for updating.exiting.' && exit 1
  49. echo ''
  50. echo 'Ready to update jail(s) <'${J}'> to '${TOREV}', according to the <'${CONF}'> configuration.'
  51. echo ''
  52. # jail path
  53. JPATH=`jls -j ${J} path 2>/dev/null`
  54. if [ -n "${JPATH}" ]; then
  55. echo '[ :: ' $J ' ::]'
  56. # freebsd version this jail is running
  57. JVERSION=`jexec ${J} freebsd-version -u`
  58. if [ -n "${JVERSION}" ]; then
  59. echo 'Updating <'${J}'> from version <'${JVERSION}'>, path <'${JPATH}'>.'
  60. jail -r ${J} || echo skipping
  61. freebsd-update -f ${CONF} --currently-running ${JVERSION} -b ${JPATH} -r ${TOREV} upgrade || FAILURE upgrade failed
  62. freebsd-update -f ${CONF} -b ${JPATH} install || FAILURE install
  63. jail -c ${J}
  64. freebsd-update -f ${CONF} -b ${JPATH} install || FAILURE install
  65. jail -r ${J}
  66. jail -c ${J}
  67. pkg -j ${J} bootstrap -f
  68. pkg -j ${J} update
  69. pkg -j ${J} upgrade -f
  70. else
  71. echo 'Unable to get jail <'${J}'> path.Skipping'
  72. fi
  73. else
  74. echo 'Jail <'${J}'> unavailable.Skipping.'
  75. fi