Skip to content

Commit

Permalink
* packaging/sun-pkg: sun package subdirectories
Browse files Browse the repository at this point in the history
*  packaging/sun-pkg/buildpkg: sun package building script
*  packaging/common/mock_utils.sh: mocked utilities used by pre/post
   scripts
*  packaging/common/post_inst_functions.sh,
   packaging/common/post_rm_functions.sh,
   packaging/common/pre_inst_functions.sh,
   packaging/common/common_functions.sh: shared shell functions for
   pre/post scripts.
*  packaging/common/substitute.pl: update to handle sun packages and
   shell functions
*  packaging/common/test_sh_libs.sh: unit tests for shell functions
*  packaging/common/shunit2: unit test framework
*  packaging/Makefile.am: add sun package to dist tarball.
*  note: S3 device is not enabled; solaris compilation has me stumped.


git-svn-id: https://amanda.svn.sourceforge.net/svnroot/amanda/amanda/trunk@4341 a8d146d6-cc15-0410-8900-af154a0219e0
  • Loading branch information
Dan Locks committed Sep 29, 2011
1 parent c20fabd commit 27c1692
Show file tree
Hide file tree
Showing 27 changed files with 3,575 additions and 94 deletions.
17 changes: 17 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,20 @@
2011-09-29 Dan Locks <[email protected]>
* packaging/sun-pkg: sun package subdirectories
* packaging/sun-pkg/buildpkg: sun package building script
* packaging/common/mock_utils.sh: mocked utilities used by pre/post
scripts
* packaging/common/post_inst_functions.sh,
packaging/common/post_rm_functions.sh,
packaging/common/pre_inst_functions.sh,
packaging/common/common_functions.sh: shared shell functions for
pre/post scripts.
* packaging/common/substitute.pl: update to handle sun packages and
shell functions
* packaging/common/test_sh_libs.sh: unit tests for shell functions
* packaging/common/shunit2: unit test framework
* packaging/Makefile.am: add sun package to dist tarball.
* note: S3 device is not enabled; solaris compilation has me stumped.

2011-09-21 Jean-Louis Martineau <[email protected]>
Patch by Sam Stuck
* man/xml-source/amanda-changers.7.xml: Typo.
Expand Down
3 changes: 2 additions & 1 deletion packaging/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ EXTRA_DIST = \
common \
deb \
rpm \
sun-pkg \
Makefile.am \
README
README

dist-hook:
rm -rf `find ${distdir} -name .svn`
262 changes: 262 additions & 0 deletions packaging/common/common_functions.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,262 @@
#!/bin/sh
# Common Functions

# Required variables:
# LOGFILE
# SYSCONFDIR
# os

logger() {
# A non-annoying way to log stuff
# ${@} is all the parameters, also known as the message. Quoting the input
# preserves whitespace.
msg="`date +'%b %e %Y %T'`: ${@}"
echo "${msg}" >> ${LOGFILE}
}

log_output_of() {
# A non-annoying way to log output of commands
# ${@} is all the parameters supplied to the function. just execute it,
# and capture the output in a variable. then log that.
output=`"${@}" 2>&1`
ret=$?
if [ -n "${output}" ] ; then
logger "${1}: ${output}"
fi
return ${ret}
}

check_superserver() {
# Check for the superserver $1 for the config $2
case $1 in
xinetd) check_xinetd $2; return $?;;
inetd) check_inetd $2; return $?;;
launchd) check_launchd $2; return $?;;
smf) check_smf $2; return $?;;
esac
}

check_xinetd() {
# Checks for an xinetd install and a config name passed as the first
# parameter.
# Returns:
# 0 if the file exists,
# 1 if it does not,
# 2 if xinetd.d/ does not exist or is a file

if [ -d ${SYSCONFDIR}/xinetd.d ] ; then
if [ -f ${SYSCONFDIR}/xinetd.d/${1} ] ; then
logger "Found existing xinetd config: ${1}"
return 0
else
return 1
fi
else
# No xinetd installation.
return 2
fi
}

check_inetd() {
case $os in
SunOS) inetd_conf=${BASEDIR}/${SYSCONFDIR}/inet/inetd.conf ;;
*) inetd_conf=${SYSCONFDIR}/inetd.conf ;;
esac
if [ -e ${inetd_conf} ] ; then
if grep "${1}" ${inetd_conf} > /dev/null ; then
logger "Found existing inetd config: ${1}"
return 0
else
return 1
fi
else
# No inetd installation.
return 2
fi
}

check_launchd() {
# TODO: refactor OS X scripts.
:
}

check_smf() {
# Only for solaris! This check only notices if an amanda service is active,
# it does not notice server vs client entries.
log_output_of svcs -H "*amanda*" || { \
logger "No amanda service found."; return 1; }
}

check_superserver_running() {
# Check for the given superserver, $1, in the output of ps -ef, or on
# mac/bsd ps ax.
# Return codes:
# 0: $1 is running
# 1: $1 is not running
# 2: $1 is not valid for this system
case $1 in
# Linux or Solaris. This works despite sol10 using SMF.
inetd) ps_flags='-e';;
xinetd) ps_flags='-e';;
# Mac OS X
launchd) ps_flags='aux';;
*) echo "Bad superserver."; return 2 ;;
esac
if [ "$1" = "launchd" ] && [ `uname` != 'Darwin' ]; then
echo "Only darwin uses launchd"
return 2
fi
if [ "$1" = "xinetd" ] && [ "$os" = 'SunOS' ] && \
[ `uname -r` = "5.10" ]; then
echo "Solaris 10 does not use xinetd."
return 2
fi
# Search for $1,
PROC=`ps ${ps_flags} | grep -v 'grep'| grep "${1}"`
if [ x"${PROC}" != x ]; then
return 0
else
return 1
fi
}

backup_xinetd() {
log_output_of mv ${SYSCONFDIR}/xinetd.d/${1} ${AMANDAHOMEDIR}/example/xinetd.${1}.orig || \
{ logger "WARNING: Could not back up existing xinetd configuration '${1}'";
return 1; }
logger "Old xinetd config for '${1}' backed up to '${AMANDAHOMEDIR}/example/xinetd.${1}.orig'"
}

backup_inetd() {
case $os in
SunOS) inetd_conf=${BASEDIR}/${SYSCONFDIR}/inet/inetd.conf ;;
*) inetd_conf=${SYSCONFDIR}/inetd.conf ;;
esac
# Backs up any amanda configuration it finds
log_output_of sed -n "/^amanda .* amandad/w ${AMANDAHOMEDIR}/example/inetd.orig" ${inetd_conf} || \
{ logger "WARNING: could not write ${AMANDAHOMEDIR}/example/inetd.orig";
return 1; }
log_output_of sed "/^amanda .* amandad/d" ${inetd_conf} > \
${inetd_conf}.tmp || \
{ logger "WARNING: could not write ${inetd_conf}.tmp";
return 1; }
log_output_of mv ${inetd_conf}.tmp ${inetd_conf} || \
{ logger "WARNING: could not overwrite ${inetd_conf}, old config not removed.";
return 1; }
logger "Old inetd config for amanda backed up to ${AMANDAHOMEDIR}/example/inetd.orig"
}

backup_smf() {
# Solaris only. I *think* this should be consistent across all smf installs
svccfg -s *amanda* > ${BASEDIR}/${AMANDAHOMEDIR}/example/amanda_smf.xml.orig || {\
logger "Warning: export of existing amanda service failed.";
return 1; }

log_output_of inetadm -d *amanda* || { \
# Not critical, we don't need to return if this fails.
logger "Warning: disabling existing amanda service failed."; }

log_output_of svccfg delete -f *amanda* || { \
logger "Error: removing the old amanda service failed.";
return 1; }
}

install_xinetd() {
log_output_of install -m 0644 ${AMANDAHOMEDIR}/example/xinetd.${1} ${SYSCONFDIR}/xinetd.d/${1} || \
{ logger "WARNING: Could not install xinetd configuration '${1}'" ; return 1; }
logger "Installed xinetd config for ${1}."
}

install_inetd() {
case $os in
SunOS) inetd_conf=${BASEDIR}/${SYSCONFDIR}/inet/inetd.conf ;;
*) inetd_conf=${SYSCONFDIR}/inetd.conf ;;
esac
# This one is hard to log because we're just appending.
logger "Appending ${AMANDAHOMEDIR}/example/inetd.conf.${1} to ${inetd_conf}"
cat ${AMANDAHOMEDIR}/example/inetd.conf.${1} >> ${inetd_conf}
}

install_smf() {
# First parameter should be the name of the service to install
# (amandaserver, or amandaclient).
ver=`uname -r`
case $ver in
5.10)
# Use inetadm and svcadm.
log_output_of ${BASEDIR}/usr/sbin/inetconv -f -i ${AMANDAHOMEDIR}/example/inetd.conf.${1} || { \
logger "Warning: Failed to create Amanda SMF manifest. Check the system log.";
return 1; }
log_output_of ${BASEDIR}/usr/sbin/inetadm -e svc:/network/amanda/tcp || { \
logger "Warning: Failed to enable Amanda service. See system log for more information.";
return 1; }
log_output_of ${BASEDIR}/usr/sbin/svcadm restart network/amanda/tcp || { \
logger "Warning: Failed to restart Amanda service. See system log for details.";
return 1; }
;;

5.8|5.9)
logger "Solaris 8 and 9 use inetd, not SMF tools."
return 1
;;

*)
# I don't know what to do...
logger "ERROR: Unsupported and untested version of Solaris: $ver"
return 1
;;
esac
}

reload_xinetd() {
# Default action is to try reload.
if [ "x$1" = "x" ]; then
action="reload"
elif [ "$1" = "reload" -o "$1" = "restart" ]; then
action="$1"
else
logger "WARNING: bad argument to reload_xinetd: $1"
return 1
fi
if [ "$action" = "reload" ] ; then
logger "Reloading xinetd configuration..."
log_output_of ${SYSCONFDIR}/init.d/xinetd $action # Don't exit!
if [ $? -ne 0 ] ; then
logger "xinetd reload failed. Attempting restart..."
log_output_of ${SYSCONFDIR}/init.d/xinetd restart || \
{ logger "WARNING: restart failed." ; return 1; }
fi
else
# Must be restart...
logger "Restarting xinetd."
log_output_of ${SYSCONFDIR}/init.d/xinetd $1 || \
{ logger "WARNING: ${1} failed." ; return 1; }
fi
}

reload_inetd() {
# Default action is to try reload.
if [ "x$1" = "x" ]; then
action="reload"
elif [ "$1" = "reload" -o "$1" = "restart" ]; then
action="$1"
else
logger "WARNING: bad argument to reload_inetd: $1"
return 1
fi
if [ "$1" = "reload" ] ; then
logger "Reloading inetd configuration..."
log_output_of ${SYSCONFDIR}/init.d/inetd $1 # Don't exit!
if [ $? -ne 0 ] ; then
logger "inetd reload failed. Attempting restart..."
log_output_of ${SYSCONFDIR}/init.d/inetd restart || \
{ logger "WARNING: restart failed." ; return 1; }
fi
else
# Must be restart...
logger "Restarting inetd."
log_output_of ${SYSCONFDIR}/init.d/inetd $1 || \
{ logger "WARNING: ${1} failed." ; return 1; }
fi
}
# End Common functions
Loading

0 comments on commit 27c1692

Please sign in to comment.