/ scripts / periodic / 400.status-pkg.in
400.status-pkg.in
  1  #!/bin/sh -
  2  #
  3  # $FreeBSD$
  4  #
  5  
  6  if [ -r /etc/defaults/periodic.conf ]; then
  7      . /etc/defaults/periodic.conf
  8      source_periodic_confs
  9  fi
 10  pkgcmd=%prefix%/sbin/pkg
 11  
 12  status_pkg() {
 13      local pkgargs
 14      local rc
 15      local srcflag
 16  
 17      pkgargs="$1"
 18  
 19      # weekly_status_pkg_source: I (index), P (ports), R (remote).
 20      : ${weekly_status_pkg_source=R}
 21      case "${weekly_status_pkg_source}" in
 22  	[Ii]*)	srcflag="-I" ;;
 23  	[Pp]*)	srcflag="-P" ;;
 24  	*)	srcflag="-R" ;;
 25      esac
 26  
 27      rc=$(${pkgcmd} ${pkgargs} version -Cv ${srcflag} ${pkg_version_index} |
 28  	sed -n -e '/up-to-date/d' \
 29  	    -e 's/^\([^[:space:]]*\)[[:space:]]*[<>=!?][[:space:]]*\(.*\)$/\1 \2/p' |
 30  	tee /dev/stderr |
 31  	wc -l)
 32  
 33      return $rc
 34  }
 35  
 36  # Use $pkg_chroots to provide a default list of chroots, and
 37  # $pkg_jails to provide a default list of jails (or '*' for all jails)
 38  # for all pkg periodic scripts, or set $weekly_pkg_status_chroots and
 39  # $weekly_pkg_status_jails for this script only.
 40  
 41  status_pkg_all() {
 42      local rc
 43      local jails
 44  
 45      : ${weekly_status_pkg_chroots=$pkg_chroots}
 46      : ${weekly_status_pkg_jails=$pkg_jails}
 47  
 48      # We always show pkg status for the base system but only print a
 49      # banner line if we're also showing status for any chroots or
 50      # jails.
 51  
 52      if [ -n "${weekly_status_pkg_chroots}" -o \
 53  	 -n "${weekly_status_pkg_jails}" ];
 54      then
 55  	echo "Host system:"
 56      fi
 57  
 58      status_pkg ''
 59      [ $? -gt 1 ] && rc=1
 60  
 61      for c in $weekly_status_pkg_chroots ; do
 62  	echo
 63  	echo "chroot: $c"
 64  	status_pkg "-c $c"
 65  	[ $? -gt 1 ] && rc=1
 66      done
 67  
 68      case $weekly_status_pkg_jails in
 69  	\*)
 70  	    jails=$(jls -q -h name | sed -e 1d)
 71  	    ;;
 72  	'')
 73  	    jails=
 74  	    ;;
 75  	*)
 76  	    jails=$weekly_status_pkg_jails
 77  	    ;;
 78      esac
 79  
 80      for j in $jails ; do
 81  	echo
 82  	echo "jail: $j"
 83  	status_pkg "-j $j"
 84  	[ $? -gt 1 ] && rc=1
 85      done
 86  
 87      return $rc
 88  }
 89  
 90  case "$weekly_status_pkg_enable" in
 91  	[Yy][Ee][Ss])
 92  
 93  	echo
 94  	echo 'Checking for out of date packages:'
 95  
 96  	if ! ${pkgcmd} -N >/dev/null 2>&1 ; then
 97  	    echo 'status-pkg is enabled but pkg is not used'
 98  	    rc=2
 99  	else
100  	    status_pkg_all
101  	    rc=$?
102  	fi
103  	;;
104  	*)
105  	rc=0
106  	;;
107  esac
108  
109  exit $rc