From 808964088ffe3a8982a44ae02af8d701531a3154 Mon Sep 17 00:00:00 2001 From: Benedikt Böhm Date: Thu, 6 Aug 2009 09:47:26 +0200 Subject: implement command line arguments for verbose, nomail and config file --- LICENSE | 2 +- README.rst | 18 +++++++- bin/porticron | 137 ++++++++++++++++++++++++++++++++++++++++------------------ 3 files changed, 114 insertions(+), 43 deletions(-) diff --git a/LICENSE b/LICENSE index 766f87b..9fad5a0 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2008 Benedikt Böhm +Copyright (c) 2008-2009 Benedikt Böhm All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/README.rst b/README.rst index c8233ec..4a94fc2 100644 --- a/README.rst +++ b/README.rst @@ -3,7 +3,7 @@ porticron ========= :Author: `Benedikt Böhm `_ -:Version: 0.4 +:Version: 0.5 :Web: http://bb.xnull.de/projects/porticron/ :Source: http://git.xnull.de/gitweb/?p=porticron.git (also on `github `_) :Download: http://bb.xnull.de/projects/porticron/dist/ @@ -21,6 +21,22 @@ porticron is available via portage: emerge porticron +Usage +===== + +Since version 0.5 porticron supports various command line arguments to change +operating modes: +:: + + Usage: porticron [-hvVn] [-c ] + + -h print this help text + -v enable verbose output + -V print version number + -n do not send upgrade mails + -c use configuration in + + Configuration ============= diff --git a/bin/porticron b/bin/porticron index 3761e30..3e85e6c 100755 --- a/bin/porticron +++ b/bin/porticron @@ -1,10 +1,64 @@ #!/bin/bash # vim: set fileencoding=utf-8 ts=4 sw=4 noexpandtab -# load config +PORTICRON_VERSION="0.5" + +version() { + echo "porticron ${PORTICRON_VERSION}" + echo "Copyright (c) 2008-2009 Benedikt Böhm " + exit 0 +} + +usage() { + echo "Usage: porticron [-hvn] [-c ]" + echo + echo " -h print this help text" + echo " -v enable verbose output" + echo " -V print version number" + echo " -n do not send upgrade mails" + echo " -c use configuration in " + echo + exit 0 +} + +log() { + [[ ${VERBOSE} -eq 1 ]] && echo "$@" >&2 +} + +send_mail() { + if [[ ${NOMAIL} -eq 1 ]]; then + cat + else + ${SENDMAIL:-/usr/sbin/sendmail} -t + fi +} + + +# parse command line +while getopts "hvVnc:" opt; do + case $opt in + h) usage;; + v) VERBOSE=1;; + V) version;; + n) NOMAIL=1;; + c) PORTICRON_CONF=${OPTARG};; + ?) exit 1;; + esac +done + + +# defaults +: ${VERBOSE:=0} +: ${NOMAIL:=0} : ${PORTICRON_CONF:=/etc/porticron.conf} +log "using PORTICRON_CONF=${PORTICRON_CONF}, NOMAIL=${NOMAIL}, VERBOSE=${VERBOSE}" + -if [[ -r ${PORTICRON_CONF} ]]; then +# load config +if [[ ! -r ${PORTICRON_CONF} ]]; then + echo "could not open configuration file ${PORTICRON_CONF}" + exit 1 +else source ${PORTICRON_CONF} fi @@ -18,12 +72,49 @@ PORTDIR=$(portageq portdir) # sync if desired +log "running SYNC_CMD: ${SYNC_CMD:-/usr/bin/emerge --sync}" ${SYNC_CMD:-/usr/bin/emerge --sync} &>/dev/null +log "running SYNC_OVERLAY_CMD: ${SYNC_OVERLAYS_CMD:-/bin/true}" ${SYNC_OVERLAYS_CMD:-/bin/true} &>/dev/null +# GLSA check +log "running GLSA_AFFECTED: /usr/bin/glsa-check --test --verbose affected" +GLSA_AFFECTED=$(/usr/bin/glsa-check --test --verbose affected 2>/dev/null) +log "running GLSA_UPGRADES: /usr/bin/glsa-check --pretend affected" +GLSA_UPGRADES=$(/usr/bin/glsa-check --pretend affected | grep '^ ') + +if [[ -n ${GLSA_AFFECTED} ]]; then + GLSA_MSG=" +${SCRIPT_NAME} has detected that this system is affected by the following GLSAs: + +$(echo "${GLSA_AFFECTED}" | sed 's/^20/ 20/') + +======================================================================== + +The following updates should be performed for these GLSAs: + +${GLSA_UPGRADES} +" + + cat </dev/null) fi @@ -39,6 +130,7 @@ fi # build list of upgrades : ${UPGRADE_OPTS:=--deep --update} +log "running UPGRADE_CMD: /usr/bin/emerge ${UPGRADE_OPTS} --quiet --pretend world" UPGRADE=$(/usr/bin/emerge ${UPGRADE_OPTS} --quiet --pretend world 2>/dev/null) if [[ -n ${UPGRADE} ]]; then @@ -67,10 +159,11 @@ fi # send mail if [[ -z ${UPGRADE_MSG} && -z ${DIFF_MSG} ]]; then + log "no upgrades found, exiting." exit 0 fi -cat </dev/null) -GLSA_UPGRADES=$(/usr/bin/glsa-check --pretend affected | grep '^ ') - -if [[ -n ${GLSA_AFFECTED} ]]; then - GLSA_MSG=" -${SCRIPT_NAME} has detected that this system is affected by the following GLSAs: - -$(echo "${GLSA_AFFECTED}" | sed 's/^20/ 20/') - -======================================================================== - -The following updates should be performed for these GLSAs: - -${GLSA_UPGRADES} -" -fi - - -# send mail -if [[ -z ${GLSA_MSG} ]]; then - exit 0 -fi - -cat <