summaryrefslogtreecommitdiffstats
path: root/rubbos/app/tomcat-connectors-1.2.32-src/tools
diff options
context:
space:
mode:
authorhongbotian <hongbo.tianhongbo@huawei.com>2015-11-30 02:41:33 -0500
committerhongbotian <hongbo.tianhongbo@huawei.com>2015-11-30 02:43:36 -0500
commit9401f816dd0d9d550fe98a8507224bde51c4b847 (patch)
tree94f2d7a7893a787bafdca8b5ef063ea316938874 /rubbos/app/tomcat-connectors-1.2.32-src/tools
parente8ec7aa8e38a93f5b034ac74cebce5de23710317 (diff)
upload tomcat
JIRA: BOTTLENECK-7 Change-Id: I875d474869efd76ca203c30b60ebc0c3ee606d0e Signed-off-by: hongbotian <hongbo.tianhongbo@huawei.com>
Diffstat (limited to 'rubbos/app/tomcat-connectors-1.2.32-src/tools')
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/.htaccess19
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/HEADER.html20
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/README.html68
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/HEADER.html12
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/README.html60
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/symbols/HEADER.html11
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/symbols/README.html25
-rwxr-xr-xrubbos/app/tomcat-connectors-1.2.32-src/tools/jkbindist.sh153
-rwxr-xr-xrubbos/app/tomcat-connectors-1.2.32-src/tools/jkrelease.sh327
-rwxr-xr-xrubbos/app/tomcat-connectors-1.2.32-src/tools/lineends.pl165
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/tools/reports/README.txt33
-rwxr-xr-xrubbos/app/tomcat-connectors-1.2.32-src/tools/reports/tomcat_reports.pl431
-rwxr-xr-xrubbos/app/tomcat-connectors-1.2.32-src/tools/reports/tomcat_trend.pl408
-rwxr-xr-xrubbos/app/tomcat-connectors-1.2.32-src/tools/signfile.sh64
14 files changed, 1796 insertions, 0 deletions
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/.htaccess b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/.htaccess
new file mode 100644
index 00000000..61a2d610
--- /dev/null
+++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/.htaccess
@@ -0,0 +1,19 @@
+# Directives controlling the display of server-generated directory listings.
+IndexOptions DescriptionWidth=34
+AddDescription "OpenPGP ASCII armored signature" .asc
+AddDescription "MD5 checksum file" .md5
+AddDescription "SHA1 checksum file" .sha1
+AddDescription "SHA256 checksum file" .sha256
+AddDescription "ZIP compressed archive" .zip
+AddDescription "GZIP compressed document" .gz
+AddDescription "Unix tar archive" .tar
+AddDescription "GZIP compressed tar archive" .tgz
+AddDescription "plain text document" .txt
+AddDescription "Unified diff patch" .diff
+AddDescription "shared object file" .so
+AddDescription "dynamically linked library" .dll
+AddIcon /icons/generic.sec.gif .asc .key
+AddIcon /icons/patch.gif .diff
+AddIcon /icons/screw2.gif .md5
+AddIcon /icons/screw2.gif .sha1
+AddIcon /icons/screw2.gif .sha256
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/HEADER.html b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/HEADER.html
new file mode 100644
index 00000000..f8e90e6f
--- /dev/null
+++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/HEADER.html
@@ -0,0 +1,20 @@
+<h1>Index of /dist/tomcat/tomcat-connectors/jk</h1>
+
+<h2>Apache Tomcat Connectors <u>Source Code</u> Distributions</h2>
+
+<p>This download page includes <strong>only the sources</strong> to compile
+ and build Apache Tomcat Connectors yourself with the proper tools. Download
+ the precompiled distribution for your platform from
+ <a href="binaries/">binaries/</a>.
+</p>
+
+<h2>Important Notices</h2>
+
+<ul>
+<li><a href="#mirrors">Download from your nearest mirror site!</a></li>
+<li><a href="#binaries">Binary Releases</a></li>
+<li><a href="#releases">Current Releases</a></li>
+<li><a href="#archive">Older Releases</a></li>
+<li><a href="#sig">PGP Signatures</a></li>
+</ul>
+
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/README.html b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/README.html
new file mode 100644
index 00000000..7f9ae7fb
--- /dev/null
+++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/README.html
@@ -0,0 +1,68 @@
+<h2><a name="mirrors">Download from your
+ <a href="http://www.apache.org/dyn/closer.cgi/tomcat/tomcat-connectors/">
+nearest mirror site!</a></a></h2>
+
+<p>Do not download from www.apache.org. Please use a mirror site
+ to help us save apache.org bandwidth.
+ <a href="http://www.apache.org/dyn/closer.cgi/tomcat/tomcat-connectors/jk/">
+ Go here to find your nearest mirror.</a>
+</p>
+
+<h2><a name="binaries">Binary Releases</a></h2>
+<p>Are available in the <a href="binaries/">binaries/</a> directory.
+ Every binary distribution contains an install script. See README
+ for details.
+</p>
+
+<h2><a name="releases">Current Releases</a></h2>
+<p>For details on current releases, please see the
+ <a href="http://tomcat.apache.org/download-connectors.cgi">Apache Tomcat
+ Connectors Download Page</a>.
+</p>
+<p>Note; the -src.zip versions of Apache Tomcat Connectors are nearly identical to the
+ .tar.gz versions. However, they offer the source files in DOS/Windows
+ CR/LF text format, and include the Winows build files.
+ These -src.zip files <strong>do NOT contain binaries!</strong>
+ See the <a href="binaries/windows/">binaries/windows/</a>
+ directory for the Windows binary distributions.
+</p>
+
+<h2><a name="archive">Older Releases</a></h2>
+<p>Only current, recommended releases are available on www.apache.org
+ and the mirror sites. Older releases can be obtained from the
+ <a href="http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/">archive site</a>.
+</p>
+
+<h2><a name="sig">PGP Signatures</a></h2>
+<p>All of the release distribution packages have been digitally signed
+ (using PGP or GPG) by the Apache Tomcat Group members that constructed them.
+ There will be an accompanying <SAMP><EM>distribution</EM>.asc</SAMP> file
+ in the same directory as the distribution. The PGP keys can be found
+ at the MIT key repository and within this project's
+ <a href="http://www.apache.org/dist/tomcat/tomcat-connectors/KEYS">KEYS file</a>.
+</p>
+
+<p>Always use the signature files to verify the authenticity
+ of the distribution, <i>e.g.</i>,</p>
+
+<pre>
+% pgpk -a KEYS
+% pgpv tomcat-connectors-1.2.32-src.tar.gz.asc
+<i>or</i>,
+% pgp -ka KEYS
+% pgp tomcat-connectors-1.2.32-src.tar.gz.asc
+<i>or</i>,
+% gpg --import KEYS
+% gpg --verify tomcat-connectors-1.2.32-src.tar.gz.asc
+</pre>
+
+<p>We offer MD5 and SHA1 hashes as an alternative to validate the integrity
+ of the downloaded files. A unix program called <code>md5</code> or
+ <code>md5sum</code> is included in many unix distributions. It is
+ also available as part of <a
+ href="http://www.gnu.org/software/textutils/textutils.html">GNU
+ Textutils</a>. Windows users can get binary md5 programs from <a
+ href="http://www.fourmilab.ch/md5/">here</a>, <a
+ href="http://www.pc-tools.net/win32/freeware/console/">here</a>, or
+ <a href="http://www.slavasoft.com/fsum/">here</a>.
+</p>
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/HEADER.html b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/HEADER.html
new file mode 100644
index 00000000..7da51e1c
--- /dev/null
+++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/HEADER.html
@@ -0,0 +1,12 @@
+<h1>Index of /dist/tomcat/tomcat-connectors/jk/binaries/windows</h1>
+
+<h2>Important Notices</h2>
+<ul>
+<li><a href="#warnings">Windows Users, Read These First...</a></li>
+<li><a href="#released">Obtain the Current Stable Release</a><br/></li>
+<li><a href="#source">Debugging and Source Code</a></li>
+</ul>
+
+<h2>Download from your
+<a href="http://www.apache.org/dyn/closer.cgi/tomcat/tomcat-connectors/jk/binaries/windows/">
+nearest mirror site!</a></h2>
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/README.html b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/README.html
new file mode 100644
index 00000000..a13ce392
--- /dev/null
+++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/README.html
@@ -0,0 +1,60 @@
+<h2><a name="mirrors">Download from your
+ <a href="http://www.apache.org/dyn/closer.cgi/tomcat/tomcat-connectors/jk/binaries/windows/">nearest mirror site!</a></a></h2>
+
+<p><strong>Please</strong> do not download from www.apache.org. Use a mirror
+ site to help us save apache.org bandwidth and to speed up your download.
+ <a href="http://www.apache.org/dyn/closer.cgi/tomcat/tomcat-connectors/jk/binaries/windows/">
+ Click here</a> to find your nearest mirror.</p>
+
+<h2><a name="warnings">Windows Users, Read These First...</a></h2>
+
+<h3><strong>Warning:</strong> TCP/IP networking must be installed</h3>
+
+<p>TCP/IP must be correctly installed, configured and running in
+ order to install and use Apache Tomcat Connectors on Windows.</p>
+
+<h3>If you are installing on Windows XP prior to Service Pack 3</h3>
+
+<p>Install the Windows XP Service Pack 3. Refer to
+ <a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;317949">
+ KB article 317949</a> if you need the gory details exactly why you must
+ not run the original Windows XP or SP1.
+</p>
+
+<h3><strong>Warning</strong> about the Quality of Service driver</h3>
+
+<p>We suggest disabling the "Quality of Service" (or QoS) network driver from
+ Microsoft if you primarily use the machine as an Web Server, as connector
+ does not support the QoS extensions to the WinSock API.</p>
+
+<h3><strong>Warning</strong> about Firewall and similar software</h3>
+
+<p>Most Firewall programs, Web Spam filters and other TCP/IP driver-based
+ products (including spyware!) do not correctly implement the entire WinSock
+ API. The shortcuts taken by the developers of such products could cause
+ connector to fail.
+</p>
+
+<h2><a name="released">The current stable release is 1.2.32</a></h2>
+
+<p>See the Apache Tomcat Connectors
+<a href="http://tomcat.apache.org/connectors-doc/miscellaneous/changelog.html">changelog</a>
+for the complete list of features and bugs fixed in this release.</p>
+
+<h2><a name="source">Debugging and Source Code</a></h2>
+
+<p>You can find a corresponding -symbols.zip archive of the
+ debugging databases in the <a href="symbols/#symbols">symbols/</a>
+ directory, these are typically not needed. This -symbols.zip
+ archive can be unpacked into the web server installation directory, providing
+ all of the .pdb diagnostic files allowing most Windows debugging tools
+ (and the Dr. Watson utility) to produce useful crash analysis.</p>
+
+<p>You will find the source code package in the
+ <a href="../../../jk/">/dist/tomcat-connectors/jk/</a> source tree. The -src.zip file
+ contains <strong>only</strong> source and build files, and contains
+ <strong>no</strong> binary executable files.</p>
+
+<p>This binary release was created with Microsoft Windows DDK 7.1,
+ using a more recent Platform SDK.
+</p>
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/symbols/HEADER.html b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/symbols/HEADER.html
new file mode 100644
index 00000000..1f1166de
--- /dev/null
+++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/symbols/HEADER.html
@@ -0,0 +1,11 @@
+<h1>Index of /dist/tomcat/tomcat-connectors/jk/binaries/windows/symbols</h1>
+
+<h2>Important Notices</h2>
+<ul>
+<li><a href="../#warnings">Windows Users, Read These First...</a></li>
+<li><a href="#symbols">Binary Diagnostic Symbol Downloads</a></li>
+</ul>
+
+<h2>Download from your
+<a href="http://www.apache.org/dyn/closer.cgi/tomcat/tomcat-connectors/jk/binaries/windows/symbols/">
+nearest mirror site!</a></h2>
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/symbols/README.html b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/symbols/README.html
new file mode 100644
index 00000000..f149a646
--- /dev/null
+++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/dist/binaries/windows/symbols/README.html
@@ -0,0 +1,25 @@
+<h2><a name="mirrors">Download from your
+<a href="http://www.apache.org/dyn/closer.cgi/tomcat/tomcat-connectors/jk/binaries/windows/symbols/">
+nearest mirror site!</a></a></h2>
+
+<h2><a name="symbols">Binary Diagnostic Symbol Downloads</a></h2>
+
+<p>We now distribute a -symbols.zip file containing the precise
+ debugging symbols corresponding to each released binary distribution.
+ For the typical user, there is no need to download these archives.
+</p>
+
+<p>These -symbols.zip packages contain the .pdb diagnostic symbol files (which
+ correpsond to the distributed binary release) and can be used by nearly all
+ modern Windows debugging tools, including the freely available WinDbg utility.
+ They are most useful for the core developers to review crash dumps generated
+ by Dr. Watson if Apache experiences a General Protection Fault. They also
+ provide additional backtrace details in Dr. Watson crash log files, if they
+ are installed into the Apache directory which is experiencing General
+ Protection Fault or other crash issues.
+</p>
+
+<p>If you don't understand a word of this, and a developer did not personally
+ ask you to install them to help troubleshoot a problem, please trust that
+ you do not need these files to install or run Apache Tomcat Connectors.
+</p>
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/jkbindist.sh b/rubbos/app/tomcat-connectors-1.2.32-src/tools/jkbindist.sh
new file mode 100755
index 00000000..881fb67b
--- /dev/null
+++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/jkbindist.sh
@@ -0,0 +1,153 @@
+#!/bin/ksh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# Make sure to set your path so that we can find
+# the following binaries:
+# cd, mkdir, cp, rm, find, zip
+
+prefix="tomcat-connectors"
+tools="`pwd`"
+sign=""
+
+#################### NO CHANGE BELOW THIS LINE ##############
+
+#################### FUNCTIONS ##############
+
+usage() {
+ echo "Usage:: $0 -v VERSION -w WEBSERVER -o OS -a ARCH <module file>"
+ echo " -v: version to package"
+ echo " -w: package for web server"
+ echo " -o: Operating System"
+ echo " -a: Architecture"
+ echo " -p: GNU PG passphrrase used for signing"
+ echo " -k: ID of GNU PG key to use for signing"
+}
+
+while getopts :v:w:o:a:p:k: c
+do
+ case $c in
+ v) version=$OPTARG;;
+ w) websrv=$OPTARG;;
+ k) sign="--default-key=$OPTARG $sign";;
+ p) sign="--passphrase=$OPTARG $sign";;
+ o) opsys=$OPTARG;;
+ a) arch=$OPTARG;;
+ \:) usage
+ exit 2;;
+ \?) usage
+ exit 2;;
+ esac
+done
+shift `expr $OPTIND - 1`
+
+if [ -z "$version" -o -z "$websrv" ]
+then
+ usage
+ exit 2
+fi
+if [ -z "$opsys" ]
+then
+ opsys="`uname -s | tr [A-Z] [a-z]`"
+ case "$opsys" in
+ cygwin*)
+ opsys=windows
+ ;;
+ esac
+fi
+if [ -z "$arch" ]
+then
+ arch="`uname -m`"
+fi
+
+if [ ! -f "$1" ]
+then
+ usage
+ exit 2
+fi
+
+case "$websrv" in
+ httpd*)
+ webdesc="Apache HTTP Server"
+ ;;
+ iis*)
+ webdesc="Microsoft IIS Web Server"
+ ;;
+ netscape*|nsapi*)
+ webdesc="Oracle iPlanet Web Server"
+ ;;
+ *)
+ echo "Unknown web server: $webserv"
+ echo " Supported are: httpd, iis, nsapi"
+ ;;
+esac
+
+dist=${prefix}-${version}-${opsys}-${arch}-${websrv}
+dtop=${tools}/..
+copy="KEYS LICENSE NOTICE"
+
+rm -f ${copy} 2>/dev/null
+rm -f ${dist} 2>/dev/null
+rm -f ${dist}.* 2>/dev/null
+cat << EOF > README
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+
+Apache Tomcat Connectors - $version
+
+Here your'll find module binaries for $webdesc.
+Check the online documentation at http://tomcat.apache.org/connectors-doc/
+for installation instructions.
+
+The Apache Tomcat Project
+http://tomcat.apache.org
+EOF
+
+umask 022
+for i in ${copy}
+do
+ if [ -f ${dtop}/$i ]
+ then
+ cp ${dtop}/$i .
+ else
+ cp ${dtop}/native/$i .
+ fi
+done
+
+# Pack
+zip -9 -j ${dist}.zip $1 README ${copy}
+
+# Sign
+archive=${dist}.zip
+. ${tools}/signfile.sh ${sign} $archive
+
+# Cleanup
+rm -f README ${copy} 2>/dev/null
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/jkrelease.sh b/rubbos/app/tomcat-connectors-1.2.32-src/tools/jkrelease.sh
new file mode 100755
index 00000000..d92b1c46
--- /dev/null
+++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/jkrelease.sh
@@ -0,0 +1,327 @@
+#!/bin/ksh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# Make sure to set your path so that we can find
+# the following binaries:
+# cd, mkdir, cp, rm, find
+# svn
+# ant
+# libtoolize, aclocal, autoheader, automake, autoconf
+# tar, zip, gzip
+# gpg
+# And any one of: w3m, elinks, links (links2)
+
+SVNROOT="http://svn.apache.org/repos/asf"
+SVNPROJ="tomcat/jk"
+JK_CVST="tomcat-connectors"
+JK_OWNER="root"
+JK_GROUP="bin"
+JK_TOOLS="`pwd`"
+
+COPY_TOP="KEYS"
+COPY_JK="BUILD.txt native jkstatus support tools xdocs"
+COPY_NATIVE="LICENSE NOTICE"
+COPY_BUILD="docs"
+COPY_CONF="httpd-jk.conf uriworkermap.properties workers.properties workers.properties.minimal"
+SIGN_OPTS=""
+
+#################### NO CHANGE BELOW THIS LINE ##############
+
+#################### FUNCTIONS ##############
+
+usage() {
+ echo "Usage:: $0 -v VERSION [-f] [-r revision] [-t tag | -b BRANCH | -T | -d DIR]"
+ echo " -v: version to package"
+ echo " -f: force, do not validate tag against version"
+ echo " -t: tag to use if different from version"
+ echo " -r: revision to package"
+ echo " -b: package from branch BRANCH"
+ echo " -T: package from trunk"
+ echo " -d: package from local directory"
+ echo " -p: GNU PG passphrrase used for signing"
+ echo " -k: ID of GNU PG key to use for signing"
+}
+
+copy_files() {
+ src=$1
+ target=$2
+ list="$3"
+
+ mkdir -p $target
+ for item in $list
+ do
+ echo "Copying $item from $src ..."
+ cp -pr $src/$item $target/
+ done
+}
+
+#################### MAIN ##############
+
+conflict=0
+while getopts :v:t:r:b:d:p:k:Tf c
+do
+ case $c in
+ v) version=$OPTARG;;
+ t) tag=$OPTARG
+ conflict=$(($conflict+1));;
+ r) revision=$OPTARG;;
+ k) SIGN_OPTS="--default-key=$OPTARG $SIGN_OPTS";;
+ p) SIGN_OPTS="--passphrase=$OPTARG $SIGN_OPTS";;
+ b) branch=$OPTARG
+ conflict=$(($conflict+1));;
+ T) trunk=trunk
+ conflict=$(($conflict+1));;
+ d) local_dir=$OPTARG
+ conflict=$(($conflict+1));;
+ f) force='y';;
+ \:) usage
+ exit 2;;
+ \?) usage
+ exit 2;;
+ esac
+done
+shift `expr $OPTIND - 1`
+
+if [ $conflict -gt 1 ]
+then
+ usage
+ echo "Only one of the options '-t', '-b', '-T' and '-d' is allowed."
+ exit 2
+fi
+
+if [ -n "$local_dir" ]
+then
+ echo "Caution: Packaging from directory!"
+ echo "Make sure the directory is committed."
+ answer="x"
+ while [ "$answer" != "y" -a "$answer" != "n" ]
+ do
+ echo "Do you want to proceed? [y/n]"
+ read answer
+ done
+ if [ "$answer" != "y" ]
+ then
+ echo "Aborting."
+ exit 4
+ fi
+fi
+
+if [ -z "$version" ]
+then
+ usage
+ exit 2
+fi
+if [ -n "$revision" ]
+then
+ revision="-r $revision"
+fi
+if [ -n "$trunk" ]
+then
+ JK_SVN_URL="${SVNROOT}/${SVNPROJ}/trunk"
+ svn_url_info="`svn help info | grep URL`"
+ if [ -n "$svn_url_info" ]
+ then
+ JK_SVN_INFO="${JK_SVN_URL}"
+ else
+ JK_SVN_INFO=.
+ fi
+ JK_REV=`svn info $revision $JK_SVN_INFO | awk '$1 == "Revision:" {print $2}'`
+ if [ -z "$JK_REV" ]
+ then
+ echo "No Revision found at '$JK_SVN_URL'"
+ exit 3
+ fi
+ JK_SUFFIX=-${JK_REV}
+ JK_DIST=${JK_CVST}-${version}-dev${JK_SUFFIX}-src
+elif [ -n "$branch" ]
+then
+ JK_BRANCH=`echo $branch | sed -e 's#/#__#g'`
+ JK_SVN_URL="${SVNROOT}/${SVNPROJ}/branches/$branch"
+ JK_REV=`svn info $revision ${JK_SVN_URL} | awk '$1 == "Revision:" {print $2}'`
+ if [ -z "$JK_REV" ]
+ then
+ echo "No Revision found at '$JK_SVN_URL'"
+ exit 3
+ fi
+ JK_SUFFIX=-${JK_BRANCH}-${JK_REV}
+ JK_DIST=${JK_CVST}-${version}-dev${JK_SUFFIX}-src
+elif [ -n "$local_dir" ]
+then
+ JK_SVN_URL="$local_dir"
+ JK_REV=`svn info $revision ${JK_SVN_URL} | awk '$1 == "Revision:" {print $2}'`
+ if [ -z "$JK_REV" ]
+ then
+ echo "No Revision found at '$JK_SVN_URL'"
+ exit 3
+ fi
+ JK_SUFFIX=-local-`date +%Y%m%d%H%M%S`-${JK_REV}
+ JK_DIST=${JK_CVST}-${version}-dev${JK_SUFFIX}-src
+else
+ JK_VER=$version
+ JK_TAG=`echo $version | sed -e 's#^#JK_#' -e 's#\.#_#g'`
+ if [ -n $tag ]
+ then
+ if [ -z $force ]
+ then
+ echo $tag | grep "^$JK_TAG" > /dev/null 2>&1
+ if [ $? -gt 0 ]
+ then
+ echo "Tag '$tag' doesn't belong to version '$version'."
+ echo "Force using '-f' if you are sure."
+ exit 5
+ fi
+ fi
+ JK_TAG=$tag
+ fi
+ JK_SVN_URL="${SVNROOT}/${SVNPROJ}/tags/${JK_TAG}"
+ JK_REV=`svn info $revision ${JK_SVN_URL} | awk '$1 == "Revision:" {print $2}'`
+ JK_SUFFIX=" ($JK_REV)"
+ JK_DIST=${JK_CVST}-${JK_VER}-src
+fi
+
+echo "Using subversion URL: $JK_SVN_URL"
+echo "Rolling into file $JK_DIST.*"
+sleep 2
+
+umask 022
+
+rm -rf ${JK_DIST}
+rm -rf ${JK_DIST}.tmp
+
+mkdir -p ${JK_DIST}.tmp
+svn export $revision "${JK_SVN_URL}" ${JK_DIST}.tmp/jk
+if [ $? -ne 0 ]; then
+ echo "svn export failed"
+ exit 1
+fi
+
+for item in ${COPY_TOP}
+do
+ svn export $revision "${JK_SVN_URL}/${item}" ${JK_DIST}.tmp/${item}
+done
+
+# Build documentation.
+cd ${JK_DIST}.tmp/jk/xdocs
+ant
+cd ../../..
+
+# Update version information
+file=${JK_DIST}.tmp/jk/native/common/jk_version.h
+cp -p $file $file.orig
+sed -e 's/^#define JK_REVISION .*/#define JK_REVISION "'"$JK_SUFFIX"'"/' \
+ $file.orig > $file
+rm $file.orig
+
+# Copying things into the source distribution
+copy_files ${JK_DIST}.tmp $JK_DIST "$COPY_TOP"
+copy_files ${JK_DIST}.tmp/jk $JK_DIST "$COPY_JK"
+copy_files ${JK_DIST}.tmp/jk/native $JK_DIST "$COPY_NATIVE"
+copy_files ${JK_DIST}.tmp/jk/build $JK_DIST "$COPY_BUILD"
+copy_files ${JK_DIST}.tmp/jk/conf $JK_DIST/conf "$COPY_CONF"
+
+# Remove extra directories and files
+targetdir=${JK_DIST}
+rm -rf ${targetdir}/xdocs/jk2
+rm -rf ${targetdir}/native/CHANGES.txt
+rm -rf ${targetdir}/native/build.xml
+rm -rf ${targetdir}/native/NOTICE
+rm -rf ${targetdir}/native/LICENSE
+find ${JK_DIST} -name .cvsignore -exec rm -rf \{\} \;
+find ${JK_DIST} -name CVS -exec rm -rf \{\} \;
+find ${JK_DIST} -name .svn -exec rm -rf \{\} \;
+
+cd ${JK_DIST}/native
+
+# Check for links, elinks or w3m
+W3MOPTS="-dump -cols 80 -t 4 -S -O iso-8859-1 -T text/html"
+ELNKOPTS="-dump -dump-width 80 -dump-charset iso-8859-1 -no-numbering -no-home"
+LNKOPTS="-dump -width 80 -codepage iso-8859-1 -no-g -html-numbered-links 0"
+failed=true
+for tool in `echo "w3m elinks links"`
+do
+ found=false
+ for dir in `echo ${PATH} | sed 's!^:!.:!;s!:$!:.!;s!::!:.:!g;s!:! !g'`
+ do
+ if [ -x ${dir}/${tool} ]
+ then
+ found=true
+ break
+ fi
+ done
+
+ # Try to run it
+ if ${found}
+ then
+ case ${tool} in
+ w3m)
+ TOOL="w3m $W3MOPTS"
+ ;;
+ links)
+ TOOL="links $LNKOPTS"
+ ;;
+ elinks)
+ TOOL="elinks $ELNKOPTS"
+ ;;
+ esac
+ rm -f CHANGES
+ echo "Creating the CHANGES file using '$TOOL' ..."
+ ${TOOL} ../docs/miscellaneous/printer/changelog.html > CHANGES 2>/dev/null
+ if [ -f CHANGES -a -s CHANGES ]
+ then
+ failed=false
+ break
+ fi
+ fi
+done
+if [ ${failed} = "true" ]
+then
+ echo "Can't convert html to text (CHANGES)"
+ exit 1
+fi
+
+# Export text docs
+echo "Creating the NEWS file using '$TOOL' ..."
+rm -f NEWS
+touch NEWS
+for news in `ls -r ../xdocs/news/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].xml`
+do
+ print=`echo $news | sed -e 's#xdocs/news#docs/news/printer#' -e 's#\.xml#.html#'`
+ echo "Adding $print to NEWS file ..."
+ ${TOOL} $print >>NEWS
+done
+if [ ! -s NEWS ]
+then
+ echo "Can't convert html to text (NEWS)"
+ exit 1
+fi
+
+# Generate configure et. al.
+./buildconf.sh
+cd ../../
+
+# Pack
+tar cfz ${JK_DIST}.tar.gz --owner="${JK_OWNER}" --group="${JK_GROUP}" ${JK_DIST} || exit 1
+perl ${JK_DIST}/tools/lineends.pl --cr ${JK_DIST}
+zip -9 -r ${JK_DIST}.zip ${JK_DIST}
+
+# Create detached signature and verify it
+archive=${JK_DIST}.tar.gz
+. ${JK_TOOLS}/signfile.sh ${SIGN_OPTS} $archive
+archive=${JK_DIST}.zip
+. ${JK_TOOLS}/signfile.sh ${SIGN_OPTS} $archive
+
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/lineends.pl b/rubbos/app/tomcat-connectors-1.2.32-src/tools/lineends.pl
new file mode 100755
index 00000000..8a8b6666
--- /dev/null
+++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/lineends.pl
@@ -0,0 +1,165 @@
+#!/usr/bin/perl
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# Heuristically converts line endings to the current OS's preferred format
+#
+# All existing line endings must be identical (e.g. lf's only, or even
+# the accedental cr.cr.lf sequence.) If some lines end lf, and others as
+# cr.lf, the file is presumed binary. If the cr character appears anywhere
+# except prefixed to an lf, the file is presumed binary. If there is no
+# change in the resulting file size, or the file is binary, the conversion
+# is discarded.
+#
+# Todo: Handle NULL stdin characters gracefully.
+#
+
+use IO::File;
+use File::Find;
+
+# The ignore list is '-' seperated, with this leading hyphen and
+# trailing hyphens in ever concatinated list below.
+$ignore = "-";
+
+# Image formats
+$ignore .= "gif-jpg-jpeg-png-ico-bmp-";
+
+# Archive formats
+$ignore .= "tar-gz-z-zip-jar-war-bz2-tgz-";
+
+# Many document formats
+$ignore .= "eps-psd-pdf-ai-";
+
+# Some encodings
+$ignore .= "ucs2-ucs4-";
+
+# Some binary objects
+$ignore .= "class-so-dll-exe-obj-a-o-lo-slo-sl-dylib-";
+
+# Some build env files
+$ignore .= "mcp-xdc-ncb-opt-pdb-ilk-sbr-";
+
+$preservedate = 1;
+
+$forceending = 0;
+
+$givenpaths = 0;
+
+$notnative = 0;
+
+while (defined @ARGV[0]) {
+ if (@ARGV[0] eq '--touch') {
+ $preservedate = 0;
+ }
+ elsif (@ARGV[0] eq '--nocr') {
+ $notnative = -1;
+ }
+ elsif (@ARGV[0] eq '--cr') {
+ $notnative = 1;
+ }
+ elsif (@ARGV[0] eq '--force') {
+ $forceending = 1;
+ }
+ elsif (@ARGV[0] eq '--FORCE') {
+ $forceending = 2;
+ }
+ elsif (@ARGV[0] =~ m/^-/) {
+ die "What is " . @ARGV[0] . " supposed to mean?\n\n"
+ . "Syntax:\t$0 [option()s] [path(s)]\n\n" . <<'OUTCH'
+Where: paths specifies the top level directory to convert (default of '.')
+ options are;
+
+ --cr keep/add one ^M
+ --nocr remove ^M's
+ --touch the datestamp (default: keeps date/attribs)
+ --force mismatched corrections (unbalanced ^M's)
+ --FORCE all files regardless of file name!
+
+OUTCH
+ }
+ else {
+ find(\&totxt, @ARGV[0]);
+ print "scanned " . @ARGV[0] . "\n";
+ $givenpaths = 1;
+ }
+ shift @ARGV;
+}
+
+if (!$givenpaths) {
+ find(\&totxt, '.');
+ print "did .\n";
+}
+
+sub totxt {
+ $oname = $_;
+ $tname = '.#' . $_;
+ if (!-f) {
+ return;
+ }
+ @exts = split /\./;
+ if ($forceending < 2) {
+ while ($#exts && ($ext = pop(@exts))) {
+ if ($ignore =~ m|-$ext-|i) {
+ return;
+ }
+ }
+ }
+ @ostat = stat($oname);
+ $srcfl = new IO::File $oname, "r" or die;
+ $dstfl = new IO::File $tname, "w" or die;
+ binmode $srcfl;
+ if ($notnative) {
+ binmode $dstfl;
+ }
+ undef $t;
+ while (<$srcfl>) {
+ if (s/(\r*)\n$/\n/) {
+ $n = length $1;
+ if (!defined $t) {
+ $t = $n;
+ }
+ if (!$forceending && (($n != $t) || m/\r/)) {
+ print "mismatch in " .$oname. ":" .$n. " expected " .$t. "\n";
+ undef $t;
+ last;
+ }
+ elsif ($notnative > 0) {
+ s/\n$/\r\n/;
+ }
+ }
+ print $dstfl $_;
+ }
+ if (defined $t && (tell $srcfl == tell $dstfl)) {
+ undef $t;
+ }
+ undef $srcfl;
+ undef $dstfl;
+ if (defined $t) {
+ unlink $oname or die;
+ rename $tname, $oname or die;
+ @anames = ($oname);
+ if ($preservedate) {
+ utime $ostat[9], $ostat[9], @anames;
+ }
+ chmod $ostat[2] & 07777, @anames;
+ chown $ostat[5], $ostat[6], @anames;
+ print "Converted file " . $oname . " to text in " . $File::Find::dir . "\n";
+ }
+ else {
+ unlink $tname or die;
+ }
+}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/reports/README.txt b/rubbos/app/tomcat-connectors-1.2.32-src/tools/reports/README.txt
new file mode 100644
index 00000000..898a9df5
--- /dev/null
+++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/reports/README.txt
@@ -0,0 +1,33 @@
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+This directory contains perl scripts which can be used to generate
+statistics for tomcat requests and errors logged by mod_jk.
+
+See the comments in the scripts for more details.
+
+A great deal of statistical data is generated but at this time
+only long term trend graphs are being created and no reports.
+This is only a start. Many more graphs and reports could be
+generated from the data. Please consider contributing back any
+new reports or graphs you create. Thanks.
+
+Requires the following perl modules and libraries:
+
+GD 1.8.x graphics library http://www.boutell.com/gd/.
+GD 1.4.x perl module.
+GD Graph perl module.
+GD TextUtil perl module.
+StatisticsDescriptive perl module.
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/reports/tomcat_reports.pl b/rubbos/app/tomcat-connectors-1.2.32-src/tools/reports/tomcat_reports.pl
new file mode 100755
index 00000000..4995c251
--- /dev/null
+++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/reports/tomcat_reports.pl
@@ -0,0 +1,431 @@
+#!/usr/local/bin/perl
+
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# $Id: tomcat_reports.pl 466585 2006-10-21 22:16:34Z markt $
+
+# Author: Glenn Nielsen
+
+# Script for generating reports and graphs using statistical data generated
+# by the tomcat_trend.pl script.
+#
+# The following graphs are created:
+#
+# tomcat_request.png
+# Long term trend graph of total number of tomcat requests handled
+#
+# tomcat_median.png
+# Long term overall trend graph of tomcat request latency median
+#
+# tomcat_deviation.png
+# Long term overall trend graph of tomcat request mean and standard deviation
+#
+# tomcat_error.png
+# Long term trend graph of requests rejected by tomcat. Shows requests rejected
+# when tomcat has no request processors available. Can be an indicator that tomcat
+# is overloaded or having other scaling problems.
+#
+# tomcat_client.png
+# Long term trend graph of requests forward to tomcat which were aborted by the remote
+# client (browser). You will normally see some aborted requests. High numbers of these
+# can be an indicator that tomcat is overloaded or there are requests which have very high
+# latency.
+#
+# tomcat_reports.pl <directory where statistics are archived> <directory to place graphs/reports in>
+
+use GD;
+use GD::Graph;
+use GD::Graph::Data;
+use GD::Graph::lines;
+use GD::Graph::linespoints;
+use Statistics::Descriptive;
+use Time::Local;
+
+# Constants
+
+%MON = ('JAN' => 0, 'Jan' => 0,
+ 'FEB' => 1, 'Feb' => 1,
+ 'MAR' => 2, 'Mar' => 2,
+ 'APR' => 3, 'Apr' => 3,
+ 'MAY' => 4, 'May' => 4,
+ 'JUN' => 5, 'Jun' => 5,
+ 'JUL' => 6, 'Jul' => 6,
+ 'AUG' => 7, 'Aug' => 7,
+ 'SEP' => 8, 'Sep' => 8,
+ 'OCT' => 9, 'Oct' => 9,
+ 'NOV' => 10, 'Nov' => 10,
+ 'DEC' => 11, 'Dec' => 11,);
+
+@Months = ("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
+
+# Check the args
+
+$archivedir = $ARGV[0];
+$reportdir = $ARGV[1];
+
+die "Usage: $0 archivedir reportdir"
+ unless( length($archivedir) && ($reportdir) );
+
+die "Archive Directory $archivedir doesn't exist"
+ unless( -d $archivedir);
+
+die "Report Directory $reportdir doesn't exist"
+ unless( -d $reportdir);
+
+# Read in data from file
+die "Archive Directory $archivedir has no global.data file"
+ unless( -e "$archivedir/global.data" );
+
+@Data = `tail -365 $archivedir/global.data`;
+$numdays = $#Data;
+$daycounter = $numdays;
+
+foreach( @Data ) {
+ $line = $_;
+ chomp($line);
+ ($date,$count,$median,$mean,$stddev,$min,$max,$client_gone,$tomcat_full) = split /\s+/,$line;
+ # print "$daycounter $date $count $median $mean $stdev $min $max $client_gone $tomcat_full\n";
+ $start_time = $date unless $start_time>0;
+ $end_time = $date;
+ push @days,int($daycounter/7);
+ push @count,$count;
+ push @median,$median;
+ push @mean,$mean;
+ push @stddev,$mean+$stddev;
+ push @min,$min;
+ push @max,$max;
+ push @client_gone,$client_gone;
+ push @tomcat_full,$tomcat_full;
+ $daycounter--;
+}
+
+($day,$mon,$year) = (localtime($start_time))[3..5];
+$year += 1900;
+$startdate = "$Months[$mon] $day, $year";
+($day,$mon,$year) = (localtime($end_time))[3..5];
+$year += 1900;
+$enddate = "$Months[$mon] $day, $year";
+
+# Output request trend graph
+$outfile = "$reportdir/tomcat_request.png";
+unlink $outfile;
+
+$stats = Statistics::Descriptive::Sparse->new();
+$stats->add_data(@count);
+$max = $stats->max();
+$min = $stats->min();
+
+&RequestGraph();
+
+# Output median latency trend graph
+$outfile = "$reportdir/tomcat_median.png";
+unlink $outfile;
+
+$stats = Statistics::Descriptive::Sparse->new();
+$stats->add_data(@median);
+$max = $stats->max();
+$min = $stats->min();
+
+&MedianGraph();
+
+# Output latency deviation trend graph
+$outfile = "$reportdir/tomcat_deviation.png";
+unlink $outfile;
+
+$stats = Statistics::Descriptive::Sparse->new();
+$stats->add_data(@stddev);
+$stats->add_data(@mean);
+$max = $stats->max();
+$min = $stats->min();
+
+&DeviationGraph();
+
+# Output request error trend graph
+$outfile = "$reportdir/tomcat_error.png";
+unlink $outfile;
+
+$stats = Statistics::Descriptive::Sparse->new();
+$stats->add_data(@tomcat_full);
+$max = $stats->max();
+$min = $stats->min();
+
+&ErrorGraph();
+
+# Output request error trend graph
+$outfile = "$reportdir/tomcat_client.png";
+unlink $outfile;
+
+$stats = Statistics::Descriptive::Sparse->new();
+$stats->add_data(@client_gone);
+$max = $stats->max();
+$min = $stats->min();
+
+&ClientGraph();
+
+exit;
+
+sub RequestGraph {
+
+ $graph = GD::Graph::lines->new(800,600);
+ @data = (\@days,\@count);
+
+ $div = 100;
+ $div = 500 if $max >= 2000;
+ $div = 1000 if $max >= 5000;
+ $div = 5000 if $max >= 20000;
+ $div = 10000 if $max >= 50000;
+ $div = 50000 if $max >= 200000;
+ $div = 100000 if $max >= 500000;
+ $div = 500000 if $max >= 2000000;
+ $div = 1000000 if $max >= 5000000;
+ $ymax = (int($max/$div) + 1)*$div;
+ $ymin = int($min/$div)*$div;
+ $ytick = ($ymax - $ymin)/$div;
+
+ $graph->set(
+ y_label => 'Requests',
+ title => "Tomcat Requests by Day from $startdate to $enddate",
+ y_min_value => $ymin,
+ y_max_value => $ymax,
+ y_tick_number => $ytick,
+ y_number_format => \&val_format,
+ x_label => 'Weeks Ago',
+ x_label_skip => 7,
+ x_tick_offset => $numdays%7,
+ dclrs => [ qw(green) ],
+ legend_placement => 'BC'
+ ) or warn $graph->error;
+
+ $graph->set_legend( 'Requests' );
+ $graph->set_title_font(GD::gdGiantFont);
+ $graph->set_x_axis_font(GD::gdSmallFont);
+ $graph->set_y_axis_font(GD::gdSmallFont);
+ $graph->set_legend_font(GD::gdSmallFont);
+ $gd = $graph->plot(\@data);
+ die "Graph Plot Failed: " . $graph->error unless defined $gd;
+
+ open IMG, ">$outfile" or die $!;
+ print IMG $gd->png or die $gd->error;
+ close IMG;
+}
+
+sub MedianGraph {
+
+ $graph = GD::Graph::lines->new(800,600);
+ @data = (\@days,\@median);
+
+ $div = .05;
+ $div = .1 if $max >= .5;
+ $div = .5 if $max >= 2;
+ $div = 1 if $max >= 5;
+ $div = 5 if $max >= 20;
+ $div = 10 if $max >= 50;
+ $div = 50 if $max >= 200;
+ $div = 100 if $max >= 500;
+ $ymax = (int($max/$div) + 1)*$div;
+ $ytick = $ymax/$div;
+
+ $graph->set(
+ y_label => 'Latency (Seconds)',
+ title => "Tomcat Request Median Latency by Day from $startdate to $enddate",
+ y_min_value => 0,
+ y_max_value => $ymax,
+ y_tick_number => $ytick,
+ y_number_format => \&val_format,
+ x_label => 'Weeks Ago',
+ x_label_skip => 7,
+ x_tick_offset => $numdays%7,
+ dclrs => [ qw(green) ],
+ legend_placement => 'BC'
+ ) or warn $graph->error;
+
+ $graph->set_legend( 'Median' );
+ $graph->set_title_font(GD::gdGiantFont);
+ $graph->set_x_axis_font(GD::gdSmallFont);
+ $graph->set_y_axis_font(GD::gdSmallFont);
+ $graph->set_legend_font(GD::gdSmallFont);
+ $gd = $graph->plot(\@data);
+ die "Graph Plot Failed: " . $graph->error unless defined $gd;
+
+ open IMG, ">$outfile" or die $!;
+ print IMG $gd->png or die $gd->error;
+ close IMG;
+}
+
+sub DeviationGraph {
+
+ $graph = GD::Graph::lines->new(800,600);
+ @data = (\@days,\@mean,\@stddev);
+
+ $div = .1;
+ $div = .5 if $max >= 2;
+ $div = 1 if $max >= 5;
+ $div = 5 if $max >= 20;
+ $div = 10 if $max >= 50;
+ $div = 50 if $max >= 200;
+ $div = 100 if $max >= 500;
+ $ymax = (int($max/$div) + 1)*$div;
+ $ytick = $ymax/$div;
+
+ $graph->set(
+ y_label => 'Latency (Seconds)',
+ title => "Tomcat Request Latency Mean and Deviation by Day from $startdate to $enddate",
+ y_max_value => $ymax,
+ y_tick_number => $ytick,
+ x_label => 'Weeks Ago',
+ x_label_skip => 7,
+ x_tick_offset => $numdays%7,
+ dclrs => [ qw(green yellow) ],
+ legend_placement => 'BC'
+ ) or warn $graph->error;
+
+ $graph->set_legend( 'Mean', 'Mean plus Standard Deviation' );
+ $graph->set_title_font(GD::gdGiantFont);
+ $graph->set_x_axis_font(GD::gdSmallFont);
+ $graph->set_y_axis_font(GD::gdSmallFont);
+ $graph->set_legend_font(GD::gdSmallFont);
+ $gd = $graph->plot(\@data);
+ die "Graph Plot Failed: " . $graph->error unless defined $gd;
+
+ open IMG, ">$outfile" or die $!;
+ print IMG $gd->png or die $gd->error;
+ close IMG;
+}
+
+sub ErrorGraph {
+
+ $graph = GD::Graph::lines->new(800,600);
+ @data = (\@days,\@tomcat_full);
+
+ $div = 5;
+ $div = 10 if $max >=100;
+ $div = 50 if $max >= 200;
+ $div = 100 if $max >= 1000;
+ $div = 500 if $max >= 2000;
+ $div = 1000 if $max >= 5000;
+ $div = 5000 if $max >= 20000;
+ $div = 10000 if $max >= 50000;
+ $div = 50000 if $max >= 200000;
+ $div = 100000 if $max >= 500000;
+ $div = 500000 if $max >= 2000000;
+ $div = 1000000 if $max >= 5000000;
+ $ymax = (int($max/$div) + 1)*$div;
+ $ymin = int($min/$div)*$div;
+ $ytick = ($ymax - $ymin)/$div;
+
+ $graph->set(
+ y_label => 'Requests',
+ title => "Tomcat Rejected Request by Day from $startdate to $enddate",
+ y_min_value => $ymin,
+ y_max_value => $ymax,
+ y_tick_number => $ytick,
+ y_number_format => \&val_format,
+ x_label => 'Weeks Ago',
+ x_label_skip => 7,
+ x_tick_offset => $numdays%7,
+ dclrs => [ qw(green) ],
+ legend_placement => 'BC'
+ ) or warn $graph->error;
+
+ $graph->set_legend( 'Tomcat Rejected Requests' );
+ $graph->set_title_font(GD::gdGiantFont);
+ $graph->set_x_axis_font(GD::gdSmallFont);
+ $graph->set_y_axis_font(GD::gdSmallFont);
+ $graph->set_legend_font(GD::gdSmallFont);
+ $gd = $graph->plot(\@data);
+ die "Graph Plot Failed: " . $graph->error unless defined $gd;
+
+ open IMG, ">$outfile" or die $!;
+ print IMG $gd->png or die $gd->error;
+ close IMG;
+}
+
+sub ClientGraph {
+
+ $graph = GD::Graph::lines->new(800,600);
+ @data = (\@days,\@client_gone);
+
+ $div = 5;
+ $div = 10 if $max >=100;
+ $div = 50 if $max >= 200;
+ $div = 100 if $max >= 1000;
+ $div = 500 if $max >= 2000;
+ $div = 1000 if $max >= 5000;
+ $div = 5000 if $max >= 20000;
+ $div = 10000 if $max >= 50000;
+ $div = 50000 if $max >= 200000;
+ $div = 100000 if $max >= 500000;
+ $div = 500000 if $max >= 2000000;
+ $div = 1000000 if $max >= 5000000;
+ $ymax = (int($max/$div) + 1)*$div;
+ $ymin = int($min/$div)*$div;
+ $ytick = ($ymax - $ymin)/$div;
+
+ $graph->set(
+ y_label => 'Requests',
+ title => "Tomcat Client Aborted Requests by Day from $startdate to $enddate",
+ y_min_value => $ymin,
+ y_max_value => $ymax,
+ y_tick_number => $ytick,
+ y_number_format => \&val_format,
+ x_label => 'Weeks Ago',
+ x_label_skip => 7,
+ x_tick_offset => $numdays%7,
+ dclrs => [ qw(green) ],
+ legend_placement => 'BC'
+ ) or warn $graph->error;
+
+ $graph->set_legend( 'Tomcat Client Aborted Requests' );
+ $graph->set_title_font(GD::gdGiantFont);
+ $graph->set_x_axis_font(GD::gdSmallFont);
+ $graph->set_y_axis_font(GD::gdSmallFont);
+ $graph->set_legend_font(GD::gdSmallFont);
+ $gd = $graph->plot(\@data);
+ die "Graph Plot Failed: " . $graph->error unless defined $gd;
+
+ open IMG, ">$outfile" or die $!;
+ print IMG $gd->png or die $gd->error;
+ close IMG;
+}
+
+sub val_format {
+ my $value = shift;
+ my $ret;
+
+ $ret = $value;
+ if( $ret =~ /\./ ) {
+ $ret =~ s/\.(\d\d\d).*/\.$1/;
+ } else {
+ $ret =~ s/(\d+)(\d\d\d)$/$1,$2/;
+ $ret =~ s/(\d+)(\d\d\d),(\d\d\d)$/$1,$2,$3/;
+ }
+ return $ret;
+}
+
+sub size_format {
+ my $value = shift;
+ my $ret;
+
+ if( $max >= 5000 ) {
+ $value = int(($value/1024)+.5);
+ }
+ $ret = $value;
+ $ret =~ s/(\d+)(\d\d\d)$/$1,$2/;
+ $ret =~ s/(\d+)(\d\d\d),(\d\d\d)$/$1,$2,$3/;
+ return $ret;
+}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/reports/tomcat_trend.pl b/rubbos/app/tomcat-connectors-1.2.32-src/tools/reports/tomcat_trend.pl
new file mode 100755
index 00000000..ee933a2a
--- /dev/null
+++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/reports/tomcat_trend.pl
@@ -0,0 +1,408 @@
+#!/usr/local/bin/perl
+
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# $Id: tomcat_trend.pl 466585 2006-10-21 22:16:34Z markt $
+
+# Author: Glenn Nielsen
+
+# Script for analyzing mod_jk.log data when logging tomcat request data using
+# the JkRequestLogFormat Apache mod_jk configuration.
+#
+# Generates statistics for request latency and errors. Archives the generated
+# data to files for later use in long term trend graphs and reports.
+#
+# tomcat_trend.pl <directory containing mod_jk.log> <directory for archiving statistics>
+
+use FileHandle;
+use Statistics::Descriptive;
+use Time::Local;
+
+# Constants
+
+%MON = ('JAN' => 0, 'Jan' => 0,
+ 'FEB' => 1, 'Feb' => 1,
+ 'MAR' => 2, 'Mar' => 2,
+ 'APR' => 3, 'Apr' => 3,
+ 'MAY' => 4, 'May' => 4,
+ 'JUN' => 5, 'Jun' => 5,
+ 'JUL' => 6, 'Jul' => 6,
+ 'AUG' => 7, 'Aug' => 7,
+ 'SEP' => 8, 'Sep' => 8,
+ 'OCT' => 9, 'Oct' => 9,
+ 'NOV' => 10, 'Nov' => 10,
+ 'DEC' => 11, 'Dec' => 11,);
+
+@Months = ("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
+
+# Check the args
+
+$logdir= $ARGV[0];
+$archivedir = $ARGV[1];
+
+die "Usage: $0 logdir archivedir"
+ unless( length($logdir) && length($archivedir) );
+
+die "Log Directory $logdir doesn't exist"
+ unless( -d $logdir);
+
+die "Archive Directory $archivedir doesn't exist"
+ unless( -d $archivedir);
+
+# Get start date from global.data if it exists
+
+if( -e "$archivedir/global.data" ) {
+ # Get the start date from the last entry in global.data
+ @tail = `tail -1 $archivedir/global.data`;
+ $startdate = (split /\s+/,$tail[0])[0];
+ ($day, $mon, $year) = (localtime($startdate))[3..5];
+ if ($day == 31) {
+ $day=1;
+ $month++;
+ if ($month > 11) {
+ $month=0;
+ $year++;
+ }
+ }
+ $startdate = timelocal(0,0,0,$day+1,$mon,$year);
+
+}
+
+($day, $mon, $year) = (localtime(time))[3..5];
+$curdate = timelocal(0,0,0,$day,$mon,$year);
+print "Today: " . scalar(localtime($curdate)) . "\n";
+
+# Get the log files names and date they start
+@logs = `ls -1 $logdir/mod_jk.log*`;
+foreach( @logs ) {
+ $logfile = $_;
+ chomp($logfile);
+ next if ( $logfile =~ /\.(bz2|gz|zip)$/ );
+ @head = `head -1 $logfile`;
+ ($mon, $day, $time, $year) = (split /\s+/,$head[0])[1..4];
+ ($hour, $min, $sec) = split /:/,$time;
+ $year =~ s/\]$//;
+ $logtime = timelocal($sec,$min,$hour,$day,$MON{$mon},$year-1900);
+ $modjklog{$logtime} = $logfile;
+}
+
+# Set the startdate if this is the first time processing the logs
+# If we have a startdate, remove log files we con't need to process
+foreach $logtime ( sort {$a <=> $b} keys %modjklog ) {
+ # If logs haven't been processed before, set startdate to time of
+ # first log entry
+ if( $startdate !~ /^\d+$/ ) {
+ $startdate = $logtime;
+ ($day, $mon, $year) = (localtime($startdate))[3..5];
+ $startdate = timelocal(0,0,0,$day,$mon,$year);
+ last;
+ }
+ if( $logtime > $startdate ) {
+ last;
+ }
+ # Save the previous log file since start date may start here
+ $prevlogfile = $modjklog{$logtime};
+ $prevlogtime = $logtime;
+ # Remove log files we don't need to process
+ delete $modjklog{$logtime};
+}
+
+# Add back in the previous log file where we need to start processing
+if( defined $prevlogtime ) {
+ $modjklog{$prevlogtime} = $prevlogfile;
+}
+
+print "StartDate: " . scalar(localtime($startdate)) . "\n";
+$processdate = $startdate;
+
+foreach $key ( sort {$a <=> $b} keys %modjklog ) {
+ $logtime = $processdate;
+ $logfile = $modjklog{$key};
+ print "Processing log: $logfile\n";
+ last if( $key >= $curdate );
+ $fh = new FileHandle "<$logfile";
+ die "Open of logfile $logfile failed: $!"
+ unless defined $fh;
+ while( $line = $fh->getline) {
+ chomp($line);
+ ($mon, $day, $time, $year) = (split /\s+/,$line)[1..4];
+ ($hour, $min, $sec) = split /:/,$time;
+ $year =~ s/\]$//;
+ if( $day !~ /^\d+/ || $hour !~ /^\d+/ || $min!~ /^\d+/ || $sec !~ /^\d+/ ) {
+ print "Unknown log entry: $origline\n" unless $origline =~ /\.c /;
+ next;
+ }
+ $logtime = timelocal($sec,$min,$hour,$day,$MON{$mon},$year-1900);
+
+ if( $logtime > $processdate ) {
+ $origline = $line;
+ # Strip off the leading date and time
+ $line =~ s/^\[.*\] //;
+
+ # See if this is a new 5 minute period
+ $interval = int($logtime/300);
+ if( $interval != $previnterval ) {
+ if( defined $previnterval ) {
+ &IntervalStats(\%Global,\%Interval,$previnterval*300);
+ }
+ undef %Interval;
+ undef @IntervalLatency;
+ undef %IntervalWorkers;
+ $Interval{tomcat_full} = 0;
+ $Interval{client_gone} = 0;
+ $Interval{latency} = \@IntervalLatency;
+ $Interval{workers} = \%IntervalWorkers;
+ $previnterval = $interval;
+ }
+
+ # See if this is a new day
+ if( $day != $prevday ) {
+ if( defined $prevday ) {
+ &DailyStats($processdate,\%Global);
+ }
+ undef %Global;
+ undef %GlobalWorkers;
+ undef @GlobalLatency;
+ $Global{tomcat_full} = 0;
+ $Global{client_gone} = 0;
+ $Global{interval} = "";
+ $Global{latency} = \@GlobalLatency;
+ $Global{workers} = \%GlobalWorkers;
+ $Global{errors} = "";
+ $prevday = $day;
+ $processdate = $logtime;
+ }
+
+ # Stop processing if logtime is today
+ last if( $logtime >= $curdate );
+
+ if( $line =~ /\d\)\]{0,1}: / ) {
+ # Handle a mod_jk error
+ if( $line =~ /(jk_tcp_socket_recvfull failed|ERROR: Receiving from tomcat failed)/ ) {
+ $Global{tomcat_full}++;
+ $Interval{tomcat_full}++;
+ } elsif( $line =~ /(ajp_process_callback - write failed|ERROR sending data to client. Connection aborted or network problems|Client connection aborted or network problems)/ ) {
+ $Global{client_gone}++;
+ $Interval{client_gone}++;
+ }
+ next;
+ } else {
+ # Handle a mod_jk request log entry
+ $line =~ s/^\[.*\] //;
+ $line =~ s/\"(GET|POST|OPTIONS|HEAD)[^\"]*\" //;
+ $line =~ s/[\?\;].*\"//;
+ $line =~ s/\"//g;
+ ($work, $host, $page, $status, $latency) = split /\s+/,$line;
+ $page =~ s/\/\//\//g;
+ $page =~ s/\.\//\//g;
+ if( length($work) <= 0 || length($host) <= 0 ||
+ length($page) <= 0 || $status !~ /^\d+$/ || $latency !~ /^\d+\.\d+$/ ) {
+ print "Unknown log entry: $origline\n" unless $origline =~ /\.c /;
+ next;
+ }
+
+ # Throw out abnormally long requests and log them as an error
+ if( $latency >= 1800 ) {
+ $Global{errors} .= "Error: $page has an HTTP status of $status and an ";
+ $Global{errors} .= "abnormally long request latency of $latency seconds\n";
+ next;
+ }
+
+ # Save the data by day for Global, Worker, and Host
+ push @{$Global{latency}},$latency;
+ $workers = $Global{workers};
+ if( !defined $$workers{$work} ) {
+ undef @{"$work"};
+ undef %{"$work"};
+ undef %{"$work-hosts"};
+ ${"$work"}{latency} = \@{"$work"};
+ ${"$work"}{hosts} = \%{"$work-hosts"};
+ ${"$work"}{interval} = "";
+ $$workers{$work} = \%{"$work"};
+ }
+ $worker = $$workers{$work};
+ push @{$$worker{latency}},$latency;
+
+ if( !defined $$worker{hosts}{$host} ) {
+ undef @{"$work-$host"};
+ undef %{"$work-$host"};
+ undef %{"$work-$host-pages"};
+ ${"$work-$host"}{latency} = \@{"$work-$host"};
+ ${"$work-$host"}{pages} = \%{"$work-$host-pages"};
+ ${"$work-$host"}{interval} = "";
+ $$worker{hosts}{$host} = \%{"$work-$host"};
+ }
+ $hoster = $$worker{hosts}{$host};
+ push @{$$hoster{latency}},$latency;
+
+ if( !defined $$hoster{pages}{$page} ) {
+ undef @{"$work-$host-$page"};
+ $$hoster{pages}{$page} = \@{"$work-$host-$page"};
+ }
+ push @{$$hoster{pages}{$page}},$latency;
+
+ # Save the data by 5 minute interval for Global, Worker, and Host
+ push @{$Interval{latency}},$latency;
+ $workers = $Interval{workers};
+ if( !defined $$workers{"$work"} ) {
+ undef @{"int-$work"};
+ undef %{"int-$work"};
+ undef %{"int-$work-hosts"};
+ ${"int-$work"}{latency} = \@{"int-$work"};
+ ${"int-$work"}{hosts} = \%{"int-$work-hosts"};
+ $$workers{$work} = \%{"int-$work"};
+ }
+ $worker = $$workers{$work};
+ push @{$$worker{latency}},$latency;
+
+ if( !defined $$worker{hosts}{$host} ) {
+ undef @{"int-$work-$host"};
+ undef %{"int-$work-$host"};
+ ${"int-$work-$host"}{latency} = \@{"int-$work-$host"};
+ $$worker{hosts}{$host} = \%{"int-$work-$host"};
+ }
+ $hoster = $$worker{hosts}{$host};
+ push @{$$hoster{latency}},$latency;
+ }
+ }
+ }
+ undef $fh;
+}
+
+# If the last log file ends before switch to the current day,
+# output the last days data
+if( $logtime < $curdate ) {
+ &IntervalStats(\%Global,\%Interval,$previnterval*300);
+ &DailyStats($processdate,\%Global);
+}
+
+exit;
+
+sub IntervalStats($$$) {
+ my $global = $_[0];
+ my $data = $_[1];
+ my $interval = $_[2];
+
+ ($count,$median,$mean,$stddev,$min,$max) = &CalcStats($$data{latency});
+ $$global{interval} .= "$interval $count $median $mean $stddev $min $max $$data{client_gone} $$data{tomcat_full}\n";
+
+ foreach $work ( keys %{$$data{workers}} ) {
+ $worker = $$data{workers}{$work};
+ $gworker = $$global{workers}{$work};
+ ($count,$median,$mean,$stddev,$min,$max) = &CalcStats($$worker{latency});
+ $$gworker{interval} .= "$interval $count $median $mean $stddev $min $max\n";
+ foreach $host ( keys %{$$worker{hosts}} ) {
+ $hoster = $$worker{hosts}{$host};
+ $ghoster = $$gworker{hosts}{$host};
+ ($count,$median,$mean,$stddev,$min,$max) = &CalcStats($$hoster{latency});
+ $$ghoster{interval} .= "$interval $count $median $mean $stddev $min $max\n";
+ }
+ }
+}
+
+sub DailyStats($$) {
+ my $date = $_[0];
+ my $data = $_[1];
+
+ &SaveStats($data,$date,"","global");
+ &SaveFile($$data{interval},$date,"","daily");
+ foreach $work ( keys %{$$data{workers}} ) {
+ $worker = $$data{workers}{$work};
+ &SaveStats($worker,$date,$work,"global");
+ &SaveFile($$worker{interval},$date,$work,"daily");
+ foreach $host ( keys %{$$worker{hosts}} ) {
+ $hoster = $$worker{hosts}{$host};
+ &SaveStats($hoster,$date,"$work/$host","global");
+ &SaveFile($$hoster{interval},$date,"$work/$host","daily");
+ $pagedata = "";
+ foreach $page ( sort keys %{$$hoster{pages}} ) {
+ $pager = $$hoster{pages}{$page};
+ ($count,$median,$mean,$stddev,$min,$max) = &CalcStats($pager);
+ $pagedata .= "$page $count $median $mean $stddev $min $max\n";
+ }
+ $pagedata .= $$data{errors};
+ &SaveFile($pagedata,$date,"$work/$host","request");
+ }
+ }
+}
+
+sub CalcStats($) {
+ my $data = $_[0];
+
+ $stats = Statistics::Descriptive::Full->new();
+ $stats->add_data(@{$data});
+ $median = $stats->median();
+ $mean = $stats->mean();
+ $stddev = $stats->standard_deviation();
+ $max = $stats->max();
+ $min = $stats->min();
+ $count = $stats->count();
+ return ($count,$median,$mean,$stddev,$min,$max);
+}
+
+sub SaveStats($$$$) {
+ my $data = $_[0];
+ my $date = $_[1];
+ my $dir = $_[2];
+ my $file = $_[3];
+
+ if( length($dir) > 0 ) {
+ $dir = "$archivedir/$dir";
+ } else {
+ $dir = $archivedir;
+ }
+ mkdir "$dir",0755;
+
+ $outfile = "$dir/${file}.data";
+
+ ($count,$median,$mean,$stddev,$min,$max) = &CalcStats($$data{latency});
+
+ open DATA, ">>$outfile" or die $!;
+ print DATA "$date $count $median $mean $stddev $min $max";
+ print DATA " $$data{client_gone} $$data{tomcat_full}" if defined $$data{tomcat_full};
+ print DATA "\n";
+ close DATA;
+}
+
+sub SaveFile($$$$) {
+ my $data = $_[0];
+ my $date = $_[1];
+ my $dir = $_[2];
+ my $file = $_[3];
+ my ($day, $mon, $year);
+
+ ($day, $mon, $year) = (localtime($date))[3..5];
+ $year += 1900;
+ $mon++;
+ $mon = "0$mon" if $mon < 10;
+ $day = "0$day" if $day < 10;
+ $file = "$year-$mon-$day-$file";
+
+ if( length($dir) > 0 ) {
+ $dir = "$archivedir/$dir";
+ } else {
+ $dir = $archivedir;
+ }
+ mkdir "$dir",0755;
+
+ $outfile = "$dir/${file}.data";
+
+ open DATA, ">>$outfile" or die $!;
+ print DATA $data;
+ close DATA;
+}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/tools/signfile.sh b/rubbos/app/tomcat-connectors-1.2.32-src/tools/signfile.sh
new file mode 100755
index 00000000..25d2c8a3
--- /dev/null
+++ b/rubbos/app/tomcat-connectors-1.2.32-src/tools/signfile.sh
@@ -0,0 +1,64 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+gpgopts="-ba"
+for o
+do
+ case "$o" in
+ *=*) a=`echo "$o" | sed 's/^[-_a-zA-Z0-9]*=//'`
+ ;;
+ *) a=''
+ ;;
+ esac
+ case "$o" in
+ --default-key=* )
+ gpgopts="$gpgopts --default-key $a"
+ shift
+ ;;
+ --passphrase=* )
+ gpgopts="$gpgopts --passphrase $a"
+ shift
+ ;;
+ * )
+ break
+ ;;
+ esac
+done
+
+# Try to locate a MD5 binary
+md5_bin="`which md5sum 2>/dev/null || type md5sum 2>&1`"
+if [ -x "$md5_bin" ]; then
+ MD5SUM="$md5_bin --binary "
+else
+ MD5SUM="echo 00000000000000000000000000000000 "
+fi
+# Try to locate a SHA1 binary
+sha1_bin="`which sha1sum 2>/dev/null || type sha1sum 2>&1`"
+if [ -x "$sha1_bin" ]; then
+ SHA1SUM="$sha1_bin --binary "
+else
+ SHA1SUM="echo 0000000000000000000000000000000000000000 "
+fi
+
+for o
+do
+ echo "Signing $o"
+ gpg $gpgopts $o
+ $MD5SUM $o > $o.md5
+ $SHA1SUM $o > $o.sha1
+done
+