shorewall_code/tools/build/makeshorewall
2005-07-11 14:27:09 +00:00

473 lines
12 KiB
Bash

#!/bin/sh
#
# Shorewall Release Processing -- (C) 2003,2004,2005 -- Tom Eastep (teastep@shorewall.net)
#
# This program is under GPL [http://www.gnu.org/copyleft/gpl.htm]
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of Version 2 of the GNU General Public License
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA
#
# I install this script in /usr/local/bin/makeshorewall.
#
# Usage:
#
# makeshorewall [ -trhxl ] <version> [ <previous version> ]
#
# -t Build tarball
# -r Build RPM
# -h Build HTML documentation
# -x Build XML documentation
# -l Build LRP
#
# If no options are given, all options are assumed.
#
# If <previous version> is given, a patch file reflecting the differences
# between that version and the current version ( <version> ) is
# generated. The directory ./shorewall-<previous version> must exist and
# contain the version against which the patch is generated.
################################################################################
# C O N F I G U R A T I O N
################################################################################
#
# XSL Stylesheet to use for XML->HTML conversion
#
STYLESHEET=/usr/share/xml/docbook/stylesheet/nwalsh/current/xhtml/docbook.xsl
#
# Directory where the build log will be placed. The log has the name
# shorewall_build_<version>.log
#
LOGDIR=/root
#
# Your RPM build directory
#
RPMDIR=/usr/src/packages
#
# Directory where you want the release to be built
#
DIR=$PWD
################################################################################
# V A R I A B L E S
################################################################################
VERSION=
OLDVERSION=
SHOREWALLDIR=
SOURCEDIR=
LRPPROJ=
LRPDIR=
LRP=
CVSTAG=
#CVSSTABLE=
XMLPROJ=
RPMNAME=
TARBALL=
LOGFILE=
HTMLDIR=
BUILDTARBALL=
BUILDRPM=
BUILDXML=
BUILDHTML=
BUILDLRP=
################################################################################
# F U N C T I O N S
################################################################################
progress_message()
{
echo >> $LOGFILE
echo "$@" | tee -a $LOGFILE
echo >> $LOGFILE
}
report()
{
echo "$@" | tee -a $LOGFILE
}
do_or_die()
{
eval $@ || { progress_message "Step \"$*\" FAILED" ; exit 2; }
}
fatal_error() {
progress_message "$*"
exit 2
}
list_search() # $1 = element to search for , $2-$n = list
{
local e=$1
while [ $# -gt 1 ]; do
shift
[ "x$e" = "x$1" ] && return 0
done
return 1
}
usage()
{
echo "usage: $(basename $0) [ -trhxl] <version> [ <old-version> ]"
exit 2
}
################################################################################
# E X E C U T I O N S T A R T S H E R E
################################################################################
# Added by Paul Gear 2005-07-09, just in case i've screwed up the CVS changes.
set -e
set -u
done=
case $1 in
-*)
;;
*)
BUILDTARBALL=Yes
BUILDRPM=Yes
BUILDHTML=Yes
BUILDXML=Yes
BUILDRPM=Yes
BUILDLRP=Yes
done=Yes
;;
esac
while [ -z "$done" ]; do
[ $# -eq 0 ] && break
option=$1
case $option in
-*)
option=${option#-}
[ -z "$option" ] && break
while [ -n "$option" ]; do
case $option in
t*)
BUILDTARBALL=Yes
option=${option#t}
;;
r*)
BUILDRPM=Yes
option=${option#r}
;;
h*)
BUILDHTML=Yes
option=${option#h}
;;
x*)
BUILDXML=Yes
option=${option#x}
;;
l*)
BUILDLRP=Yes
option=${option#l}
;;
*)
usage
;;
esac
done
shift
;;
*)
done=Yes
;;
esac
done
case $# in
1)
;;
2)
OLDVERSION=$2
;;
*)
usage
;;
esac
VERSION=$1
LOGFILE=$LOGDIR/shorewall_build_${VERSION}.log
touch $LOGFILE
progress_message "Build of Shorewall $VERSION on $(date)"
case $VERSION in
2.0.*)
CVSTAG=SHOREWALL-2_0
XMLPROJ=Shorewall-docs
LRP=shorwall-${VERSION}.lrp
LRPPROJ=Lrp
;;
2.2.*)
CVSTAG=SHOREWALL-2_2
XMLPROJ=Shorewall-docs2
LRP=shorewall-lrp-${VERSION}.tgz
LRPPROJ=Lrp2
;;
2.4.*)
CVSTAG=SHOREWALL-2_4
XMLPROJ=Shorewall-docs2
BUILDLRP=
;;
*ex)
CVSTAG=EXPERIMENTAL
XMLPROJ=Shorewall-docs2
BUILDLRP=
;;
2.5.*)
CVSTAG=HEAD
XMLPROJ=Shorewall-docs2
BUILDLRP=
;;
*)
echo "Unsupported Version: $VERSION"
exit 2
;;
esac
[ -d $DIR ] || { echo "Directory $DIR does not exist or is unaccessible" ; exit 2 ; }
progress_message "Distribution directory is $DIR"
cd $DIR
case $VERSION in
*Beta*|*RC*)
#
# Beta or Release Canditate
#
SHOREWALLDIR=shorewall-${VERSION%-*}
TARBALL=shorewall-${VERSION%-*}.tgz
RPMNAME=shorewall-${VERSION%-*}-0${VERSION#*-}.noarch.rpm
;;
*)
#
# Normal Release
#
SHOREWALLDIR=shorewall-$VERSION
TARBALL=shorewall-$VERSION.tgz
RPMNAME=shorewall-${VERSION}-1.noarch.rpm
;;
esac
HTMLDIR=shorewall-docs-html-$VERSION
LRPDIR=shorewall-lrp-$VERSION
if [ -n "${BUILDTARBALL}${BUILDRPM}" ]; then
report "Shorewall directory is $DIR/$SHOREWALLDIR"
report "CVS tag is $CVSTAG"
[ -n "$BUILDTARBALL" ] && report "TARBALL is $TARBALL"
[ -n "$BUILDRPM" ] && report "RPM is $RPMNAME"
fi
[ -n "$BUILDHTML" ] && report "HTML Directory is $HTMLDIR"
[ -n "$BUILDLRP" ] && report "LRP Directory is $LRPDIR"
if [ -n "${BUILDTARBALL}${BUILDRPM}" ]; then
progress_message "Exporting $CVSTAG from CVS..."
rm -rf $SHOREWALLDIR
do_or_die "cvs -d :pserver:anonymous@cvs.sourceforge.net:/cvsroot/shorewall export -r $CVSTAG -d $SHOREWALLDIR Shorewall >> $LOGFILE 2>&1"
fgrep VERSION=$VERSION $SHOREWALLDIR/install.sh > /dev/null 2>&1 || fatal_error "install.sh has wrong version"
fgrep VERSION=$VERSION $SHOREWALLDIR/uninstall.sh > /dev/null 2>&1 || fatal_error "uninstall.sh has wrong version"
fgrep VERSION=$VERSION $SHOREWALLDIR/fallback.sh > /dev/null 2>&1 || fatal_error "fallback.sh has wrong version"
if [ -n "$BUILDTARBALL" ]; then
progress_message "Creating $DIR/$TARBALL..."
do_or_die "tar -zcvf $TARBALL $SHOREWALLDIR >> $LOGFILE 2>&1"
fi
if [ -n "$BUILDRPM" ]; then
progress_message "Building $RPMNAME..."
do_or_die "rpmbuild -tb $TARBALL >> $LOGFILE 2>&1"
do_or_die cp -a $RPMDIR/RPMS/noarch/$RPMNAME .
fi
fi
if [ -n "${BUILDXML}${BUILDHTML}" ]; then
progress_message "Exporting $XMLPROJ from CVS..."
rm -rf $XMLPROJ
rm -rf shorewall-docs-xml-$VERSION
do_or_die "cvs -d :pserver:anonymous@cvs.sourceforge.net:/cvsroot/shorewall export -D now $XMLPROJ >> $LOGFILE 2>&1"
do_or_die mv $XMLPROJ shorewall-docs-xml-$VERSION
rm -f shorewall-docs-xml-$VERSION/images/*.vsd
rm -f shorewall-docs-xml-$VERSION/images/~*
rm -f shorewall-docs-xml-$VERSION/images/*.JPG
rm -f shorewall-docs-xml-$VERSION/images/publish
rm -f shorewall-docs-xml-$VERSION/images/Thumbs.db
if [ -n "$BUILDXML" ]; then
progress_message "Creating $DIR/shorewall-docs-xml-$VERSION.tgz..."
do_or_die "tar -zcvf shorewall-docs-xml-$VERSION.tgz shorewall-docs-xml-$VERSION >> $LOGFILE 2>&1"
fi
if [ -n "$BUILDHTML" ]; then
progress_message "Building $HTMLDIR ..."
rm -rf $HTMLDIR
do_or_die mkdir $HTMLDIR
do_or_die mkdir $HTMLDIR/images
#
# The original HTML documents were created using MS FrontPage and used
# the .htm suffix. The remainder use the .html suffix.
#
HTMFILES="
6to4.htm
blacklisting_support.htm
configuration_file_basics.htm
CorpNetwork.htm
dhcp.htm
Documentation.htm
errata.htm
fallback.htm
FAQ.htm
GnuCopyright.htm
Install.htm
IPIP.htm
IPSEC.htm
kernel.htm
myfiles.htm
NAT.htm
ports.htm
PPTP.htm
ProxyARP.htm
quotes.htm
samba.htm
shorewall_extension_scripts.htm
shorewall_features.htm
shorewall_mirrors.htm
shorewall_prerequisites.htm
shorewall_quickstart_guide.htm
shorewall_setup_guide_fr.htm
shorewall_setup_guide.htm
Shorewall_sfindex_frame.htm
standalone.htm
starting_and_stopping_shorewall.htm
support.htm
three-interface.htm
traffic_shaping.htm
troubleshoot.htm
two-interface.htm
upgrade_issues.htm
VPN.htm
whitelisting_under_shorewall.htm"
for file in shorewall-docs-xml-$VERSION/*.xml; do
a=$(basename $file)
b=${a%.*}
list_search $b.htm $HTMFILES && b=$b.htm || b=$b.html
f="shorewall-docs-html-$VERSION/$b"
report "Converting $DIR/$file from XML to HTML ($DIR/$f) ..."
do_or_die xsltproc --output $f --stringparam html.stylesheet html.css --stringparam ulink.target _self -param toc.section.depth 3 $STYLESHEET $file
done
progress_message "Copying images to $DIR/$HTMLDIR/images ..."
do_or_die cp -a shorewall-docs-xml-$VERSION/images/*.png $HTMLDIR/images
do_or_die cp -a shorewall-docs-xml-$VERSION/images/*.gif $HTMLDIR/images
do_or_die cp -a shorewall-docs-xml-$VERSION/images/*.jpg $HTMLDIR/images
do_or_die cp -a shorewall-docs-xml-$VERSION/*.css $HTMLDIR
do_or_die ln -s Documentation_Index.html shorewall-docs-html-$VERSION/index.html
progress_message "Creating $DIR/shorewall-docs-html-$VERSION.tgz ..."
do_or_die "tar -zcvf shorewall-docs-html-$VERSION.tgz shorewall-docs-html-$VERSION >> $LOGFILE 2>&1"
fi
fi
[ -n "$BUILDTARBALL" ] && case $VERSION in
*Beta*|*RC*)
#
# The original tarball created above didn't include the -Beta or -RC portion of the
# name in either the tarball name or the directory name. Create it here
#
progress_message "Creating $DIR/shorewall-$VERSION..."
rm -rf shorewall-$VERSION
do_or_die mv $SHOREWALLDIR shorewall-$VERSION
progress_message "Creating $DIR/shorewall-${VERSION}.tgz ..."
do_or_die "tar -zcvf shorewall-${VERSION}.tgz shorewall-$VERSION >> $LOGFILE 2>&1"
;;
esac
if [ -n "$BUILDLRP" ]; then
progress_message "Exporting $LRPPROJ from CVS ..."
rm -rf $LRPDIR
rm -rf $LRPPROJ
do_or_die "cvs -d :pserver:anonymous@cvs.sourceforge.net:/cvsroot/shorewall export -D now $LRPPROJ >> $LOGFILE 2>&1"
do_or_die mv $LRPPROJ $LRPDIR
cd $LRPDIR
[ "$VERSION" = $(cat usr/share/shorewall/version) ] || fatal_error "$LRPPROJ has wrong version"
rm -f var/lib/lrpkg/shorwall.version
do_or_die ln -s ../../../usr/share/shorewall/version var/lib/lrpkg/shorwall.version
[ -d var/lib/shorewall ] || do_or_die mkdir var/lib/shorewall
do_or_die chmod 700 etc etc/init.d etc/shorewall sbin usr usr/share usr/share/shorewall var var/lib var/lib/lrpkg var/lib/shorewall
do_or_die chmod 600 etc/shorewall/*
do_or_die chmod 700 etc/init.d/shorewall
do_or_die chmod 700 sbin/shorewall
do_or_die chmod 600 usr/share/shorewall/*
do_or_die chmod 700 usr/share/shorewall/firewall
do_or_die chmod 600 var/lib/lrpkg/shorwall.help
do_or_die chmod 600 var/lib/lrpkg/shorwall.list
do_or_die chmod 600 var/lib/lrpkg/shorwall.conf
case $VERSION in
2.*)
[ -d etc/shorewall/start.d ] || do_or_die mkdir etc/shorewall/start.d
[ -d etc/shorewall/stop.d ] || do_or_die mkdir etc/shorewall/stop.d
do_or_die chmod 755 etc/shorewall/start.d
do_or_die chmod 755 etc/shorewall/stop.d
;;
esac
progress_message "Creating $DIR/$LRP ..."
do_or_die "tar -zcvf ../$LRP $(cat var/lib/lrpkg/shorwall.list) >> $LOGFILE 2>&1"
cd $DIR
fi
if [ -n "$OLDVERSION" ]; then
progress_message "Creating patch-$VERSION ..."
diff -Nau shorewall-$OLDVERSION shorewall-$VERSION > patch-$VERSION
fi
progress_message "Shorewall $VERSION Build complete - $(date)"