-
Notifications
You must be signed in to change notification settings - Fork 111
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* 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. 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
Showing
27 changed files
with
3,575 additions
and
94 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
Oops, something went wrong.