--- /usr/local/bin/package 2015-01-12 12:21:08.000000000 +0100 +++ /usr/local/bin/package 2015-01-12 12:21:16.000000000 +0100 @@ -31,10 +31,45 @@ egrep '(pkg: WARNING: locally installed py([0-9]+)?-setuptools([0-9]+)?-((\*)|([0-9]+(\.((\*)|([0-9]+(\.((\*)|([0-9]+)))?)))?)) conflicts)' ${UPGRADE_LOG} | awk 'END{print NR}' } -service_been_upgraded() - { - egrep '(Reinstalling (.*)\.\.\.|Upgrading (.*) from (.*) to (.*)\.\.\.)' ${UPGRADE_LOG} | grep ${SERVICE} | awk 'END{print NR}' - } +find_service_dependencies() { + + SERVICE_DEPENDENCIES=$(pkg info -q -d $(pkg info | egrep -m 1 "${SERVICE}" | awk '{print $1}') | awk '{sub(/(\-)((\*)|([0-9]+(\.((\*)|([0-9]+(\.((\*)|([0-9]+)))?(\.((\*)|([0-9]+)))?(\.((\*)|([0-9]+)))?(\.((\*)|([0-9]+)))?)))?(\_[0-9]+)?(\,[0-9]+)?))/,""); print $1}' | tr '\n' '|' | sed 's/\|$//') + if [ $(echo "${SERVICE_DEPENDENCIES}" | wc -w) -ne 0 ]; then + SERVICE="${SERVICE}|${SERVICE_DEPENDENCIES}" + fi + +} + +check_service_upgraded() { + + SAVED_SERVICE="${SERVICE}" + + if [ ${SERVICE} = "samba" ]; then + case "$(pkg info | egrep -m 1 -o "samba[0-9][0-9]")" in + "samba36") + SERVICE="samba36" + ;; + "samba41") + SERVICE="samba41" + ;; + esac + elif [ ${SERVICE} = "smartd" ]; then + SERVICE="smartmontools" + elif [ ${SERVICE} = "mysql" ]; then + SERVICE="mariadb([0-9][0-9])?-server" + fi + + find_service_dependencies + + SERVICE_INCLUDING_DENDENCIES_UPGRADED=$(egrep '(Installing (.*)\.\.\. |Reinstalling (.*)\.\.\. |Upgrading (.*) from (.*) to (.*)\.\.\.) ' ${UPGRADE_LOG} | egrep "${SERVICE}" | awk 'END{print NR}') + + if [ "${SERVICE_INCLUDING_DENDENCIES_UPGRADED}" -gt "0" ]; then + SERVICE_BEEN_UPGRADED="yes" + fi + + SERVICE="${SAVED_SERVICE}" + +} case "$1" in @@ -56,11 +91,14 @@ PKG_UPGRADE="pkg upgrade -y" - if [ ! -z $2 ]; then - if [ $2 = "-f" ]; then - PKG_UPGRADE="${PKG_UPGRADE} -f" - fi - fi + while [ "$#" -gt "0" ]; do + case "$1" in + "-f") + PKG_UPGRADE="${PKG_UPGRADE} -f" + ;; + esac + shift + done ${PKG_UPGRADE} >> ${UPGRADE_LOG} 2>&1 if [ "$?" -ne "0" ]; then @@ -82,7 +120,9 @@ fi for SERVICE in ${SERVICES}; do - if [ "$(service_been_upgraded)" -gt "0" ]; then + check_service_upgraded + if [ "${SERVICE_BEEN_UPGRADED}" = "yes" ]; then + SERVICE_BEEN_UPGRADED="" service ${SERVICE} restart >> ${UPGRADE_LOG} 2>&1 echo "The service \"${SERVICE}\" has been restarted to load in an upgraded version." >> ${UPGRADE_LOG} fi