On Jun 8, 2005, at 4:04 PM, Joshua Slive wrote:
Covalent had a script on their website at one point, but I can't find
it now. Perhaps someone still has a copy?
I'll see if I can get it re-added. In the meantime:
#!/usr/bin/perl
# ====================================================================
# The Covalent Technologies License, Version 1.1
#
# Copyright (c) 2000-2001 Covalent Technologies. All rights
# reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation andor other materials provided with the
# distribution.
#
# 3. The end-user documentation included with the redistribution,
# if any, must include the following acknowledgment:
# "This product includes software developed by
# Covalent Technologies (http://www.covalent.net/)."
# Alternately, this acknowledgment may appear in the software itself,
# if and wherever such third-party acknowledgments normally appear.
#
# 4. The names "Covalent" and "Covalent Technologies" must
# not be used to endorse or promote products derived from this
# software without prior written permission. For written
# permission, please contact Covalent Technologies.
#
# 5. Products derived from this software may not be called "Covalent",
# nor may "Covalent" appear in their name, without prior written
# permission of Covalent Technologies.
#
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL COVALENT TECHNOLOGIES OR
# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
# ====================================================================
#
# This software consists of voluntary contributions made by many
# individuals on behalf of Covalent Technologies. For more
# information on Covalent Technologies, please see
# <http://www.covalent.net/>.
#
#
# FILE: convconf.pl
#
# PURPOSE:
#
# Simple script to make an attempt at converting some of the obvious
# syntatical changes between 1.3 and 2.0's configuration files.
# This script will in most cases put the original line in a comment
# prefixed with (1.3), and will put additional comments for some
# new/changed directives prefixed with (2.0).
#
use strict;
use warnings;
use Getopt::Long;
# The filename extention put on backup files
my $bak = ".bak";
sub print_usage {
print "usage: ".$0." [args...] [files...]\n".
" Pass in a filename to convert from apache 1.3 to 2.0
syntax.\n".
" A backup of the file is created \'filename".$bak."\'
and\n".
" then the given file is processed inline. If no
filename is\n".
" specified, input is taken from stdin, the converted
config\n".
" is produced on stdout, and no backup is made.\n".
" -v = increase verbosity\n".
" -h = print this help screen\n".
" -- = stop parsing command arguments\n";
}
my %deprecated_directives; # only print helpful comments once
my $verbose = 0;
my $help = 0;
my $output;
# if no args were specified, default to STDIN
@ARGV = ('-') unless @ARGV;
my $optsuccess = GetOptions('verbose!' => \$verbose,
'help' => \$help,
'bak' => \$bak);
if (!$optsuccess || $help) {
print_usage();
exit 1;
}
print STDERR "Verbosity at level $verbose.\n" if ($verbose > 0);
while ($ARGV = shift @ARGV) {
if ($ARGV eq "-") {
print STDERR "Opening STDIN for reading, STDOUT for writing.\n"
if ($verbose > 1);
unless (open ARGV, $ARGV) {
print STDERR "Can't open $ARGV: $!\n";
next;
}
print STDERR "Sending default output to STDOUT.\n" if
($verbose > 1);
select STDOUT;
}
elsif (!stat($ARGV)) {
warn "Skipping input file $ARGV: $!\n";
next;
}
elsif (stat("$ARGV$bak")) {
warn "Backup file $ARGV$bak already exists for $ARGV.
Skipping!\n";
next;
}
else {
print STDERR "Renaming $ARGV to $ARGV$bak\n" if ($verbose > 1);
unless (rename $ARGV, "$ARGV$bak") {
print STDERR "Error saving backup file $ARGV$bak: $!\n";
next;
}
print STDERR "Opening $ARGV for output.\n" if ($verbose > 1);
unless (open OUTPUT, ">$ARGV") {
print STDERR "Unable to open original file: $!\n";
next;
}
print STDERR "Opening $ARGV$bak for input.\n" if ($verbose >
1);
unless (open ARGV, $ARGV.$bak) {
print STDERR "Can't open $ARGV: $!\n";
next
}
print STDERR "Sending default output to $ARGV.\n"
if ($verbose > 1);
select OUTPUT;
}
print STDERR "Done with input/output files.\n" if ($verbose > 1);
# The main loop
while (<ARGV>) {
if (/^[ \t]*#/i) {
# Just transcribe any commented lines
print;
}
elsif (/(.*)(ServerType|ClearModuleList|AddModule|
MinSpareServers|MaxSpareServers)(.*)$/i) {
# Take deprecated lines, print an error once, and then
# print all the old lines under comments.
if (!$deprecated_directives{$2}) {
$deprecated_directives{$2} = 1;
print "#\n";
print "# (Covalent 2.0): $2 has been deprecated.\n";
}
print STDERR "Line $.: $2 has been deprecated.\n"
if ($verbose > 0);
print "# (1.3): ".$1.$2.$3."\n";
}
elsif (/(.*)(MinSpareServers|MaxSpareServers|StartServers|
MaxClients|MaxRequestsPerChild)(.*)/i) {
# Remove old settings that are now handled by MPM settings.
# Even if these don't change, it'll make it obvious to the
# admins that there are other MPMs to play with.
if (!$deprecated_directives{"MPM"}) {
$deprecated_directives{"MPM"} = 1;
if ($verbose > 0) {
print STDERR "Line $.: Inserting new MPM directives.
\n";
print STDERR <<END;
Note: [Covalent 2.0]: Apache 2.0 can take advantage of different MPMs
each of which have slightly different runtime directives. See the
comments inserted into the new config file for details.
END
}
print <<END;
#
# (Covalent 2.0): Apache 2.0 can take advantage of different MPMs
# each of which have slightly different runtime directives.
# The following sections contain the default settings for each
MPM.
#
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept
spare
# MaxSpareServers: maximum number of server processes which are kept
spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process
serves
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
# threaded MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of server processes allowed to start
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server
process
# MaxRequestsPerChild: maximum number of requests a server process
serves
<IfModule threaded.c>
StartServers 3
MaxClients 8
MinSpareThreads 5
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of server processes allowed to start
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server
process
# MaxRequestsPerChild: maximum number of requests a server process
serves
<IfModule worker.c>
StartServers 3
MaxClients 8
MinSpareThreads 5
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
# perchild MPM
# NumServers: constant number of server processes
# StartThreads: initial number of worker threads in each server process
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# MaxThreadsPerChild: maximum number of worker threads in each server
process
# MaxRequestsPerChild: maximum number of connections per server process
<IfModule perchild.c>
NumServers 5
StartThreads 5
MinSpareThreads 5
MaxSpareThreads 10
MaxThreadsPerChild 20
MaxRequestsPerChild 0
</IfModule>
# Windows MPM
# ThreadsPerChild: constant number of worker threads in the server
process
# MaxRequestsPerChild: maximum number of requests a server process
serves
<IfModule mpm_winnt.c>
ThreadsPerChild 250
MaxRequestsPerChild 0
</IfModule>
# (Covalent 2.0): End of new MPM configuration directives.
END
}
print "# (1.3): ".$1.$2.$3."\n";
print STDERR "Line $.: $2 has been deprecated.\n" if
($verbose > 0);
}
elsif (/(.*)(ScoreBoardFile)(.*)/i) {
# The scoreboard should only be used in certain situations
print "#\n";
print "# (Covalent 2.0): The $2 directive is only used on "
."operating systems\n"
."# with insufficient or unsupported "
."shared memory mechanisms.\n";
print STDERR "Line $.: Modifying $2 directive.\n" if
($verbose > 0);
print STDERR "Note: [Covalent 2.0]: The $2 directive is only "
."used on operating\n"
." systems with insufficient or unsupported "
."shared memory mechanisms.\n" if ($verbose > 0);
print "<IfModule !mpm_winnt.c>\n";
print "<IfModule !perchild.c>\n";
print $1.$2.$3."\n";
print "</IfModule>\n";
print "</IfModule>\n";
}
elsif (/(.*)(LoadModule)([ \t]+[_a-z]+module[ \t]+)libexec\/(.*)/
i) {
# If modules used to be in "libexec/", now they are in
"modules/"
if (!$deprecated_directives{$2}) {
$deprecated_directives{$2} = 1;
print "#\n";
print "# (Covalent 2.0): $2 has changed syntax. "
."Modules are\n";
print "# now by default placed in the ServerRoot/
modules\n";
print "# directory (instead of the ServerRoot/
libexec\n";
print "# diretcory in 1.3).\n";
print STDERR "Line $.: $2 has changed syntax, "
."attempting to convert.\n" if ($verbose > 0);
}
print $1.$2.$3."modules/".$4."\n";
}
elsif (/(.*)(Port)(.*)/i) {
# The Port directive has been replaced with the Listen
directive.
if (!$deprecated_directives{$2}) {
$deprecated_directives{$2} = 1;
print "#\n";
print "# (Covalent 2.0): $2 has been deprecated.\n";
print "# It has been replaced with the Listen
directive.\n";
print STDERR "Line $.: $2 has been deprecated.\n"
if ($verbose > 0);
}
print $1."Listen".$3."\n";
}
else {
# This is a good line, just copy it over.
print;
}
}
}
---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: [EMAIL PROTECTED]
" from the digest: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]