+#!/bin/sh -vx
+
+#
+# Script creates wireshark RPM and an separate RPM with the wireshare lnet/lustre plugins,
+# installs and test whether the plugins can be selected as filters.
+
+
+#
+# H E L P E R F U N C T I O N S
+#
+
+
+error() {
+ local msg="$1"
+
+ [ -n "$msg" ] && echo -e "\n${0##*/}: $msg" >&1
+
+}
+
+fatal() {
+# cleanup
+ error "$2"
+ exit $1
+}
+
+ # Wipe away the temporary build / install directory + content
+cleanup () {
+
+ echo "Cleanup ${BUILD_DIR}"
+ cd ${BUILD_DIR}
+ if [ $? -ne 0 ] ; then
+ echo "Can't change to ${BUILD_DIR} for clean-up. No clean-up performed."
+ exit 1
+ fi
+ # remove wireshark source directory and tarball and auxiliary directory to tar plugin sources
+ rm -rf wireshark-${WS_VERSION} wireshark-${WS_VERSION}.tar.bz2 ${PLUGIN_RPM_NAME}-${WS_VERSION}/ ${PLUGIN_RPM_NAME}-${WS_VERSION}-root/
+}
+
+
+#
+# M A I N
+#
+
+ # Enable download and compile environment settings
+source ${0%/wsbuild}/wsconfig.sh
+if [ $? -ne 0 ] ; then
+ echo "FAILED"
+ fatal 1 "Can't source download and compile evironmnent defined in ${0%/wsbuild}/wsconfig.sh"
+fi
+
+ # Check whether prereqisited software is installed
+echo "Prerequisite software installations:"
+for pkg in $PREREQUISITE_RPMS
+do
+ echo -e "\tPackage '$pkg'\t installed: \c"
+ rpm -q $pkg > /dev/null 2>&1
+ if [ $? -ne 0 ] ; then
+ echo "NO"
+ fatal 1 "RPM (software) '$pkg' not installed. Can't compile wireshark."
+ fi
+ echo "YES"
+
+done
+
+ # Change CWD to top level build directory
+echo -e "Change to top level builddir: \c"
+cd $BUILD_DIR
+if [ $? -ne 0 ] ; then
+ echo "FAILED"
+ fatal 1 "Can't change to directory '${BUILD_DIR}'. Make sure that directory exist."
+fi
+echo "OK"
+
+
+ # Download wireshark
+if [ ! -x /usr/bin/curl ] ; then
+ fatal 1 "curl not installed. Can't download wireshark."
+fi
+ws_file_name=`basename ${WS_SOURCE_URL}`
+# echo "ws_file_name: $ws_file_name"
+echo -e "Download wireshare source tarball: \c"
+ # Download desired wireshark tarball
+/usr/bin/curl ${WS_SOURCE_URL} --output ${BUILD_DIR}/${ws_file_name}
+if [ $? -ne 0 ] ; then
+ echo "FAILED"
+ fatal 1 "Can't download wireshark version ${WS_VERSION}. Check configuration."
+fi
+echo "OK"
+
+
+
+echo -e "Inflating wireshark tarball: \c"
+${UNTAR} ${ws_file_name}
+if [ $? -ne 0 ] ; then
+ echo "FAILED"
+ fatal 1 "Can't untar file '${ws_file_name}'."
+fi
+echo "OK"
+
+
+ # Build wireshark software
+cd ${BUILD_DIR}/wireshark-${WS_VERSION}
+if [ $? -ne 0 ] ; then
+ fatal 1 "Can't change to directory '${BUILD_DIR}/wireshark-${WS_VERSION}'."
+fi
+
+
+ # Executing configure first to create the make file and
+ # rpm spec file. Procedure is a bit ood, since `make rpm-package'
+ # is running configure again.
+echo -e "Execute wireshark's configure script: \c"
+./configure
+if [ $? -ne 0 ] ; then
+ echo "FAILED"
+ echo "----------- configure output ---------------------"
+ cat Configure-$$.log
+ echo "--------------------------------"
+ fatal 1 "configure script in ${BUILD_DIR}/wireshark-${WS_VERSION} stops with errors"
+fi
+echo "OK"
+
+
+ # Currently code works distribution using RPM for package management only, i.e.:
+ # for RHEL/CentOS, SLES (suse)
+ #
+ # Code to support distributions using debian software packaging
+ # have to be added.
+
+ # SLES SP1, 2 specific handling
+if [ -r /etc/SuSE-release ] ; then
+
+ # Correct RPM spec file to build correctly:
+ # Note: changes are based on wireshark version 1.6.8
+ #
+ # -1- Adjust BuildRoot macro.
+ # Otherwise packaging will fail since SuSe expand BuildRoot to '/tmp/...'
+ # Files can't be found by packaging program
+ #
+ # -2- Correct libdir macro.
+ # Set library prefix to '/usr/lib64'
+ #
+ # -3- Correct file globing used for packaging library files
+ # Globbing pattern set to '%prefix/lib64/*' in %files section
+ # to capture the accordingly to change -2-
+ #
+ sed -e "s#\(BuildRoot:[[:space:]]*\)/[a-zA-Z0-9_]*\(/wireshark-%{PACKAGE_VERSION}-root\)#\1${BUILD_DIR}packaging/rpm/BUILD\2#" \
+ -e 's#\(.* \./configure .*\)#\1 --libdir=/usr/lib64#' \
+ -e 's#^\(%prefix/lib\)/\*#\164/\*#' ./packaging/rpm/SPECS/wireshark.spec > new-$$.spec
+ if [ $? -ne 0 ] ; then
+ fatal 1 "Can't modify wireshark SPEC file to build under SLES"
+ fi
+ # Move modified SPEC into effect
+ mv new-$$.spec ./packaging/rpm/SPECS/wireshark.spec
+ if [ $? -ne 0 ] ; then
+ fatal 1 "Can't copy modified wireshark SPEC file (SLES to ${BUILD_DIR}/packaging/rpm/SPECS/wireshark.spec"
+ fi
+
+fi
+
+
+echo -e "Create wireshark RPM: \c"
+make rpm-package
+if [ $? -ne 0 ] ; then
+ echo "FAILED"
+ echo "----------- make rpm-package output ---------------------"
+ cat make-rpm-$$.log
+ echo "--------------------------------"
+ fatal 1 "make rmp-package failed in ${BUILD_DIR}/wireshark-${WS_VERSION}"
+fi
+# Package successfully built in ${BUILD_DIR}/wireshark-${WS_VERSION}/packaging/rpm/RPMS.
+echo "OK"
+
+
+cd ${BUILD_DIR}
+if [ $? -ne 0 ] ; then
+ fatal 1 "Can't change into directory ${BUILD_DIR}"
+fi
+
+PLUGINS_LIBDIR=''
+ # SLES SP1, 2 installs 64Bit libs and binaries into /usr/lib64
+ #
+if [ -r /etc/SuSE-release ] ; then
+
+ PLUGINS_LIBDIR='/usr/lib64/wireshark/plugins/%ver/*'
+else
+ PLUGINS_LIBDIR='/usr/lib/wireshark/plugins/%ver/*'
+fi
+
+echo -e "Create Lustre/LNet wireshark plugin RPM: \c"
+
+ # Insert the associated version, name and build directory info
+ # to the SPEC template. Use '#'
+ # as delimiters since path info will be substituted
+sed -e "s#XXX-TOP-LEVEL-BUILD-DIR-XXX#${BUILD_DIR}#" \
+ -e "s#XXX-LUSTRE-PLUGIN-VERSION-XXX#${WS_VERSION}#" \
+ -e "s#XXX-LUSTRE-PLUGIN-RPM-NAME-XXX#${PLUGIN_RPM_NAME}#" \
+ -e "s#XXX-LUSTRE-PLUGIN-LIBDIR-XXX#${PLUGINS_LIBDIR}#" \
+ lustre-wireshark-plugins-template.spec > ${PLUGIN_RPM_NAME}.spec
+if [ $? -ne 0 ] ; then
+ echo "FAILED"
+ fatal 1 "Can't create SPEC file for Lustre/LNet wireshark plugins"
+fi
+
+
+ # Create tarball containing source files plugins to be used rpmbuid mechanism
+if [ -d ${PLUGIN_RPM_NAME}-${WS_VERSION} ] ; then
+ rm -rf lustre-wireshark-plugins-1.6.8
+ if [ $? -ne 0 ] ; then
+ fatal 1 "Can't cleanup auxiliary directory to create tarball of Lustre/LNet plugins"
+ fi
+fi
+ # Create auxiliary directory
+mkdir ${PLUGIN_RPM_NAME}-${WS_VERSION}
+if [ $? -ne 0 ] ; then
+ echo "FAILED"
+ fatal 1 "Can't create packaging directory to create source tarball for lustre wireshark plugins"
+fi
+cp README Makefile packet-lnet.c packet-lustre.c ${PLUGIN_RPM_NAME}-${WS_VERSION}
+if [ $? -ne 0 ] ; then
+ echo "FAILED"
+ fatal 1 "Can't copy files for rpm source tar ball into helper directory for Lustre/LNet wireshark plugins"
+fi
+
+$TAR ${PLUGIN_RPM_NAME}-${WS_VERSION}.tar.bz2 ${PLUGIN_RPM_NAME}-${WS_VERSION}/
+if [ $? -ne 0 ] ; then
+ echo "FAILED"
+ fatal 1 "Can't create rpm source tar ball for Lustre/LNet wireshark plugins"
+fi
+
+ # install source tarball into build directory
+cp ${PLUGIN_RPM_NAME}-${WS_VERSION}.tar.bz2 ${BUILD_DIR}/wireshark-${WS_VERSION}/packaging/rpm/SOURCES
+if [ $? -ne 0 ] ; then
+ echo "FAILED"
+ fatal 1 "Can't copy source tar ball for Lustre/LNet wireshark plugins build directory"
+fi
+
+rpmbuild -bb --define "_topdir ${BUILD_DIR}/wireshark-${WS_VERSION}/packaging/rpm" ${PLUGIN_RPM_NAME}.spec
+if [ $? -ne 0 ] ; then
+ echo "FAILED"
+ fatal 1 "Can't create RPM for Lustre/LNet wireshark plugins"
+fi
+
+exit 0