Re: Multiple mod_perl 2.0 installations on one Linux machine

2009-01-20 Thread Michael Ludwig

Torsten Foertsch schrieb:

On Mon 19 Jan 2009, Adam Prime wrote:

I thought you could build more than one and load the one you want
at runtime.  Isn't that what Red Hat does?

If redhat's shipping more than one mpm, they've patched httpd.


Probably not httpd. At least Suse has not. Instead they configure and
build a prefork httpd and a worker httpd one by one and then merge the
result.


The same thing can be observed on Debian. There are a couple of MPMs to
select from - and they're (more or less) mutually exclusive.

r...@colinux:~ # apt-cache search -n apache2-mpm-
apache2-mpm-event - Event driven model for Apache HTTPD 2.1
apache2-mpm-itk - multiuser MPM for Apache 2.2
apache2-mpm-perchild - Transitional package - please remove
apache2-mpm-prefork - Traditional model for Apache HTTPD 2.1
apache2-mpm-worker - High speed threaded model for Apache HTTPD 2.1

r...@colinux:~ # apt-cache search -f -n apache2-mpm- | grep -i conflict
Conflicts: apache2-mpm-worker, apache2-mpm-perchild, apache2-common
Conflicts: apache2-mpm-prefork, apache2-mpm-worker,
   apache2-mpm-perchild, apache2-mpm-event, apache2-common
Conflicts: apache2-mpm-worker, apache2-mpm-perchild, apache2-mpm-event,
   apache2-common
Conflicts: apache2-mpm-prefork, apache2-mpm-event, apache2-common


The apache API does not depend on the chosen MPM. So, almost
certainly you can build modules (including mod_perl) with one MPM and
use it with another.

Usually I build mod_perl against a httpd with worker MPM and TEST is
with both worker and prefork. So far I have never found something that
went bad only because of the other MPM.


Thanks for triggering William's and Philip's rectifications :-)

Michael Ludwig


Re: Multiple mod_perl 2.0 installations on one Linux machine

2009-01-20 Thread Michael Ludwig

Philip,

thanks a lot for this thorough and exhaustive answer!

Philip M. Gollucci schrieb:

Michael Ludwig wrote:


So, to summarize: The mod_perl DSO depends on the particular versions of
Perl and Apache.

The modules in the Apache2:: namespace


most definitely dpends on libperl.so, httpd, apr, apr-util, and
mod_perl.so


The modules in the Apache2:: namespace depend on


libapreq2.so and mod_apreq2.so + all the above ones.


Plus, maybe incidentally, on libexpat, as shown in my ldd output:


/usr/local/apache22w/lib/libapr-1.so.0 (0xb7eb8000)
/usr/local/apache22w/lib/libaprutil-1.so.0
/usr/local/apache22w/lib/libexpat.so.0

(which looks like an error in the configure/build logic):

/usr/local/src/libapreq2-2.08/library/.libs/libapreq2.so.3

we [joes] just fixed this though it doesn't affect everyone.  Its will
be in the next release which will be soonish


Thanks.


Now, what happens if I am going to install a new Apache
2.2/prefork with mod_perl in addition to the already existing
Apache 2.2/worker with mod_perl? The new mod_perl modules are
going to clobber the existing one, probably rendering the old
mod_perl useless by supplanting their own versions linked to the
prefork MPM libraries, and I imagine the worker MPM won't be happy
when being asked to interact with these. True?

Correct, you get to play magical paths.

Consider yourself a developer now and the following tree:


Thanks for the following [snipped] as well - I need some more time to
understand it.

Michael Ludwig


Re: Multiple mod_perl 2.0 installations on one Linux machine

2009-01-19 Thread Philip M. Gollucci

William A. Rowe, Jr. wrote:

Built with a threaded MPM and any module should also work on prefork etc.

But not visa-versa!!!


100% correct, the linkage is wrong the other way.


--

Philip M. Gollucci (pgollu...@p6m7g8.com) c: 703.336.9354
Consultant - P6M7G8 Inc.  http://p6m7g8.net
Senior System Admin - RideCharge, Inc.  http://ridecharge.com
1024D/DB9B8C1C B90B FBC3 A3A1 C71A 8E70  3F8C 75B8 8FFB DB9B 8C1C

Work like you don't need the money,
love like you'll never get hurt,
and dance like nobody's watching.


Re: Multiple mod_perl 2.0 installations on one Linux machine

2009-01-19 Thread William A. Rowe, Jr.
Torsten Foertsch wrote:
> On Mon 19 Jan 2009, Adam Prime wrote:
>>> I thought you could build more than one and load the one you want
>>> at runtime.  Isn't that what Red Hat does?
>> If redhat's shipping more than one mpm, they've patched httpd.
> 
> Probably not httpd. At least Suse has not. Instead they configure and 
> build a prefork httpd and a worker httpd one by one and then merge the 
> result. The apache API does not depend on the chosen MPM. So, almost 
> certainly you can build modules (including mod_perl) with one MPM and 
> use it with another.

Built with a threaded MPM and any module should also work on prefork etc.

But not visa-versa!!!




Re: Multiple mod_perl 2.0 installations on one Linux machine

2009-01-19 Thread Torsten Foertsch
On Mon 19 Jan 2009, Adam Prime wrote:
> > I thought you could build more than one and load the one you want
> > at runtime.  Isn't that what Red Hat does?
>
> If redhat's shipping more than one mpm, they've patched httpd.

Probably not httpd. At least Suse has not. Instead they configure and 
build a prefork httpd and a worker httpd one by one and then merge the 
result. The apache API does not depend on the chosen MPM. So, almost 
certainly you can build modules (including mod_perl) with one MPM and 
use it with another.

Usually I build mod_perl against a httpd with worker MPM and TEST is 
with both worker and prefork. So far I have never found something that 
went bad only because of the other MPM.

Torsten

-- 
Need professional mod_perl support?
Just hire me: torsten.foert...@gmx.net


Re: Multiple mod_perl 2.0 installations on one Linux machine

2009-01-19 Thread Tech list
Why not just run multiple httpds?  I do it, but I have multiple IPs  
and that may be a requirement for running different httpds.



On Jan 19, 2009, at 12:45 PM, Adam Prime wrote:


Perrin Harkins wrote:
On Mon, Jan 19, 2009 at 1:37 PM, Adam Prime  
 wrote:

Perrin Harkins wrote:
Hmm, isn't the MPM just a runtime configuration?  Why would you  
need
another httpd install?  It sounds like a separate config file  
would do

it, if that's all you want to change.

MPM is a build time configuration via the --with-mpm= to ./configure

I thought you could build more than one and load the one you want at
runtime.  Isn't that what Red Hat does?


If redhat's shipping more than one mpm, they've patched httpd.  
According to the 2.2 docs, you have to choose exactly one MPM:


--with-mpm=MPM

   Choose the process model for your server. You have to select  
exactly one Multi-Processing Module. Otherwise the default MPM for  
your operating system will be taken. Possible MPMs are beos,  
mpmt_os2, prefork, and worker.


http://httpd.apache.org/docs/2.2/programs/configure.html

Adam




Re: Multiple mod_perl 2.0 installations on one Linux machine

2009-01-19 Thread Adam Prime

Perrin Harkins wrote:

On Mon, Jan 19, 2009 at 1:37 PM, Adam Prime  wrote:

Perrin Harkins wrote:

Hmm, isn't the MPM just a runtime configuration?  Why would you need
another httpd install?  It sounds like a separate config file would do
it, if that's all you want to change.

MPM is a build time configuration via the --with-mpm= to ./configure


I thought you could build more than one and load the one you want at
runtime.  Isn't that what Red Hat does?



If redhat's shipping more than one mpm, they've patched httpd. 
According to the 2.2 docs, you have to choose exactly one MPM:


--with-mpm=MPM

Choose the process model for your server. You have to select 
exactly one Multi-Processing Module. Otherwise the default MPM for your 
operating system will be taken. Possible MPMs are beos, mpmt_os2, 
prefork, and worker.


http://httpd.apache.org/docs/2.2/programs/configure.html

Adam


Re: Multiple mod_perl 2.0 installations on one Linux machine

2009-01-19 Thread Perrin Harkins
On Mon, Jan 19, 2009 at 1:37 PM, Adam Prime  wrote:
> Perrin Harkins wrote:
>>
>> Hmm, isn't the MPM just a runtime configuration?  Why would you need
>> another httpd install?  It sounds like a separate config file would do
>> it, if that's all you want to change.
>
> MPM is a build time configuration via the --with-mpm= to ./configure

I thought you could build more than one and load the one you want at
runtime.  Isn't that what Red Hat does?

- Perrin


Re: Multiple mod_perl 2.0 installations on one Linux machine

2009-01-19 Thread Adam Prime

Perrin Harkins wrote:

Hmm, isn't the MPM just a runtime configuration?  Why would you need
another httpd install?  It sounds like a separate config file would do
it, if that's all you want to change.


MPM is a build time configuration via the --with-mpm= to ./configure

Adam


Re: Multiple mod_perl 2.0 installations on one Linux machine

2009-01-19 Thread Perrin Harkins
On Mon, Jan 19, 2009 at 5:56 AM, Michael Ludwig  wrote:
> Now, what happens if I am going to install a new Apache
> 2.2/prefork with mod_perl in addition to the already existing
> Apache 2.2/worker with mod_perl?

Hmm, isn't the MPM just a runtime configuration?  Why would you need
another httpd install?  It sounds like a separate config file would do
it, if that's all you want to change.

If you want to change other things, like using different version of
httpd, the safest thing is to run two separate perls, one for each
mod_perl setup.

- Perrin


Re: Multiple mod_perl 2.0 installations on one Linux machine

2009-01-19 Thread Philip M. Gollucci

Michael Ludwig wrote:

The mod_perl DSO itself is installed to $ServerRoot/modules. Doing
an ldd on the module doesn't reveal any dependencies on libraries
under $ServerRoot/lib, but I guess that nevertheless, this mod_perl
does very well depend on the particular Apache version it is
configured and built to work with. True?

Very true.



I can only see dependencies on /lib/ld-linux.so.2, libc.so.6, and
linux-gate.so.1. But this certainly doesn't mean that there is no
dependency on the particular version of mod_perl that is installed?
Or does it?
it most definitely dpends on libperl.so, httpd, apr, apr-util, and 
mod_perl.so




Doing the same find/ldd loop for /usr/local/lib/perl/5.8.8/auto/APR,
I can see more dependencies, including dependencies on the
particular Apache installation:

libapreq2.so and mod_apreq2.so + all the above ones.



/usr/local/apache22w/lib/libapr-1.so.0 (0xb7eb8000)
/usr/local/apache22w/lib/libaprutil-1.so.0
/usr/local/apache22w/lib/libexpat.so.0

And even - horrors - this one (which looks like an error in the
configure/build logic):




/usr/local/src/libapreq2-2.08/library/.libs/libapreq2.so.3
we [joes] just fixed this though it doesn't affect everyone.  Its will 
be in the next release which will be soonish



Now, what happens if I am going to install a new Apache
2.2/prefork with mod_perl in addition to the already existing
Apache 2.2/worker with mod_perl? The new mod_perl modules are
going to clobber the existing one, probably rendering the old
mod_perl useless by supplanting their own versions linked to the
prefork MPM libraries, and I imagine the worker MPM won't be happy
when being asked to interact with these. True?

Correct, you get to play magical paths.

Consider yourself a developer now and the following tree:

/sfw
  /perl
5.8.1
5.8.8
  none-stdio-mymalloc
  ithread-perlio-perlmalloc
  /cpans
5.8.8-none-perlio-perlmalloc
  /apr
1.3.3
  threaded
  none
  /apu
1.3.4
  apr-1.3.3-threaded
threaded
none
  apr-1.3.3-none
  /httpd
2.2.11
  prefork
apr-1.3.3-none=apu-1.3.4-none
  worker
  event
  /mod_perl
 2.0.3
 2.0.4
 r732904

5.8.8-none-perlio-mymalloc=httpd-2.2.11-apr-1.3.3-none-apu-1.3.4-none

  /libapreq2
2.0.7
2.0.8

2.0.4=5.8.8-none-perlio-mymalloc=httpd-2.2.11-apr-1.3.3-none-apu-1.3.4


After doing this with a bug of ./configure, Makefile.PL and Configure 
flags you have 2 options


1) use the path to the .so in the install directories
2) install the .so into modules/
   BUT rename it to something like
mod_perl-5.8.8-none-perlio-mymalloc=httpd-2.2.11-apr-1.3.3-none-apu-1.3.4-none.so

Then load the correct one.

The good part is that Apache-Test lets you pass flags to name the 
mod_perl.so you want. When testing stuff or running the perl test suite.


This also applies to libapreq2.so, but not quite yet with the 
Apache-Test cli naming.


Doing the above will allow you to install ALMOST the full permutations 
of what we support. To get the full amount, you have to through GCC into 
the mix for older httpd's.


Be warned, you'll need a good sized disk for this.  Of course, if there 
are combinations you know you'll never care about, then you leave them 
out and your directory names get shorter.


my @perl_io_types = qw(perlio stdio);
my @perl_thread_types = qw(none ithreads);
my @perl_malloc_types = qw(mymalloc perlmalloc);

## only some were actually bundled
## 0.x for 2.0.xx 1.2.x and 1.3.x for 2.2.xx)
## threadedness of apr/apu should match
my @apr_vers = qw(lots);
my @apu_vers = qw(lots);

my @apr_thread_types = qw(threaded none);
my @apu_thread_types = qw(threaded none)
  ## XXX: dbd, gdbm, mysql, pgsql, oracle, freetds, ldap, etc...

## prefork is apr/apu without threads
## prefork_threaded is them with threads
my @httpd2_vers = qw(2.0.48...2.0.63, 2.2.0..2.2.11);
my @httpd2_mpms = qw(prefork prefork_threaded worker event);

my @mod_perl_vers = qw(2.0.4);
  MP_MAINTAINER MP_DEBUG MP_APXS
my @libapreq2_vers = qw(2.0.8)

--

Philip M. Gollucci (pgollu...@p6m7g8.com) c: 703.336.9354
Consultant - P6M7G8 Inc.  http://p6m7g8.net
Senior System Admin - RideCharge, Inc.  http://ridecharge.com
1024D/DB9B8C1C B90B FBC3 A3A1 C71A 8E70  3F8C 75B8 8FFB DB9B 8C1C

Work like you don't need the money,
love like you'll never get hurt,
and dance like nobody's watching.


Multiple mod_perl 2.0 installations on one Linux machine

2009-01-19 Thread Michael Ludwig

What does a mod_perl 2.0 installation on Linux consist of?

* Apache 2.0 or 2.2
* mod_perl 2.0
* libapreq (optional, true, but indispensable for convenience)

The Apache, let's say the worker MPM, is going to be installed
under /usr/local/apache22w. If I now want to install a prefork
MPM next to it, this is no problem at all, it goes to, say,
/usr/local/apache22pf.

But what about the mod_perl 2.0 installation?

The mod_perl DSO itself is installed to $ServerRoot/modules. Doing
an ldd on the module doesn't reveal any dependencies on libraries
under $ServerRoot/lib, but I guess that nevertheless, this mod_perl
does very well depend on the particular Apache version it is
configured and built to work with. True?

There is also the Perl interface to Apache/mod_perl, a bunch
of modules installed under, say, /usr/local/lib/perl/5.8.8 and
/usr/local/lib/perl/5.8.8/auto.

Doing a crude ldd on all those modules:

  find /usr/local/lib/perl/5.8.8/auto/Apache2 -type f -name \*.so \
| while read so; do ldd $so; done | sort | uniq -c

I can only see dependencies on /lib/ld-linux.so.2, libc.so.6, and
linux-gate.so.1. But this certainly doesn't mean that there is no
dependency on the particular version of mod_perl that is installed?
Or does it?

Doing the same find/ldd loop for /usr/local/lib/perl/5.8.8/auto/APR,
I can see more dependencies, including dependencies on the
particular Apache installation:

/usr/local/apache22w/lib/libapr-1.so.0 (0xb7eb8000)
/usr/local/apache22w/lib/libaprutil-1.so.0
/usr/local/apache22w/lib/libexpat.so.0

And even - horrors - this one (which looks like an error in the
configure/build logic):

/usr/local/src/libapreq2-2.08/library/.libs/libapreq2.so.3

Now, what happens if I am going to install a new Apache
2.2/prefork with mod_perl in addition to the already existing
Apache 2.2/worker with mod_perl? The new mod_perl modules are
going to clobber the existing one, probably rendering the old
mod_perl useless by supplanting their own versions linked to the
prefork MPM libraries, and I imagine the worker MPM won't be happy
when being asked to interact with these. True?

Does anyone know what the dependencies are?

And how would I deal with this situation if my above observation
was true and I wanted a worker and a prefork MPM on the same
machine, both with mod_perl?

Michael Ludwig