Wednesday, 23 January 2008
|
| Apache::FakeRequest::import Conflict David E. Wheeler 22:03:58 |
| | Under Perl 5.10, Apache::FakeRequest offers up this helpful warning:
trigger% perl -lwe 'use Apache::FakeRequest' Name "Apache::FakeRequest" used only once: possible typo at /usr/local/ lib/perl5/site_perl/5.10.0/darwin-2level/Apache/FakeRequest.pm line 51.
It seems that import() is getting called and it is defined as an instance method. This patch fixes the issue:
--- lib/Apache/FakeRequest.pm 2007-11-11 21:35:46.000000000 -0800 +++ lib/Apache/FakeRequest.pm 2008-01-23 10:59:17.000000000 -0800 1:03:32.000000000 -0800 @@ -23,7 +23,7 @@ filename get_basic_auth_pw get_remote_host get_remote_logname handler hard_timeout header_in header_only header_out - headers_in headers_out hostname import + headers_in headers_out hostname internal_redirect_handler is_initial_req is_main kill_timeout log_error log_reason lookup_file lookup_uri main @@ -68,6 +68,7 @@ parse_args(wantarray, $r->{args}); }
+sub import { shift->elem('import', @_) if ref $_[0] }
{ my @code;
Best,
David
|
| | Add comment |
|
| [Fwd: [rt.cpan.org #32486] ModPerl::MM: no include path for apr.h] Geoffrey Young 21:49:43 |
| |
-------- Original Message -------- Subject: [rt.cpan.org #32486] ModPerl::MM: no include path for apr.h Date: Mon, 21 Jan 2008 14:08:48 -0500 From: Malcolm J Harwood via RT <bug-mod_perl@rt.cpan.org> Reply-To: bug-mod_perl@rt.cpan.org To: undisclosed-recipients:; References: <RT-Ticket-32486@rt.cpan.org>
Mon Jan 21 14:08:46 2008: Request 32486 was acted upon. Transaction: Ticket created by MJH Queue: mod_perl Subject: ModPerl::MM: no include path for apr.h Broken in: 2.0.2 Severity: Important Owner: Nobody Requestors: mjh@cpan.org Status: new Ticket <URL: http://rt.cpan.org/Ticket/Display.html?id=32486 >
Newer versions of the libapr have renamed apr-config to apr-1-config, and put the headers in /usr/include/apr-1/. Not all distributions provide backwards compatibility/alternates symlinks.
The makefile creation code isn't handling this case, so modules that use ModPerl::MM don't see the apr headers without explicitly adding the include path.
|
| | Add comment |
Wednesday, 16 January 2008
|
| [RELEASE CANDIDATE] mod_perl-1.31 RC2 Philippe M. Chiasson 11:55:51 |
| | The mod_perl 1.31 release candidate 2 "Works with Perl 5.10" is ready. It can be downloaded here:
http://www.apache.org/~gozer/mp1/mod_perl-1.31-rc2.tar.gz
MD5: c75546ec99a791fe97fd7af7d1ab65b2 SHA1: e61ba31154fe13432300bde0ba62fcd2abcb4ac1
The summary of what has changed since 1.30 are (from Changes):
Fixed modules/regex.t test 4 on Win32 [Steve Hay]
Avoid possible segfault when PerlFreshRestart is On. [Michael Rendell <michael@cs.mun.ca>]
Prevent segfault when running with perl >= 5.9.3 [Steve Hay]
Fix shared libary extensions on Win32 to be .dll not .so [Nikolay Ananiev <ananiev@thegdb.com>]
Patch to mod_perl.dsp to remove /D _WINSOCK2API_ on Win32 for perl >= 5.8.6 [Steve Hay]
-- Philippe M. Chiasson GPG: F9BFE0C2480E7680 1AE53631CB32A107 88C3A5A5 http://gozer.ectoplasm.org/ m/gozer\@(apache|cpan|ectoplasm)\.org/
|
| | 1 answer | Add comment |
Sunday, 13 January 2008
|
| Re: BUG: MP_CODE_ATTRS() is broken under perl 5.10.0 Fred Moyer 05:07:32 |
| | [moved to dev list]
Philippe M. Chiasson wrote:
Michael Schout wrote: MP_CODE_ATTRS() doesn't work under perl 5.10.0. Does anyone have any ideas on how to fix this? Short answer, not yet. Slightly longer answer follows. The problem is that the different flavors of filter handlers need to be identified, and at that point, all that we got it a CV *. Using the hack you pointed out, we were able to piggyback to some unused portion of the CV*. Unfortunately, in 5.10, that field is now a union between 2 fields, so that no longer holds true. The solution will be to either find a new way to attach this information to a CV (I looked around, and nothing jumped at me), or we'll have to switch to storing this information separate of the CV itself (a cleaner, but potentially annoying solution). I was digging into this today trying to increase my knowledge of perl/mod_perl internals and I think I have grokked what you said here about why it is broken with 5.10.0.
As far as someplace to store this information separately, I'm going to go out on a limb here and look like I don't know what I'm talking about, but here goes, maybe at least I will learn something
1) add 'MpHV * codeattrs' somewhere ifdefined for perl > 5.9.5, to store the code attrs along with package name. maybe server_config is the correct place for this?
2) change MP_CODE_ATTRS macro to accept a package name SV rather than a CV. Use that SV to grab the corresponding value from codeattrs
3) in modperl_mgv.c line 274, 'hander->attrs = (U32)MP_CODE_ATTRS(name);'
4) in Apache2__Filter.h line 91, 'return (U32 *)&MP_CODE_ATTRS(package);'
I think I at least understand what you mean by this being an annoying solution. Storing this information separate of the CV seems like access to a pool object in some form is going to be needed.
|
| | Add comment |
Thursday, 10 January 2008
|
| perl 5.10 warning on the website? Heiko Jansen 17:34:35 |
| | I'm not a regular subscriber to this list but in the last weeks I had an eye on it 'cause I'm hoping for somebody fixing the issues with Perl 5.10 soon Finally this made me wonder if there shouldn't be a hint somewhere on perl.apache.org telling people that it's not yet wise to switch to Perl 5.10 if they also want to run mod_perl2?
heiko
|
| | Add comment |
Tuesday, 8 January 2008
|
| [RELEASE CANDIDATE] Apache-Reload 0.10 RC2 Fred Moyer 22:23:31 |
| | Greetings,
A second release candidate for Apache::Reload is available here:
http://people.apache.org/~phred/Apache-Reload-0.10-RC2.tar.gz
A check for Apache::Test 1.30 was added from RC1. Please try it out if you have a chance and report back success or failure.
Thanks,
Fred
|
| | Add comment |
Monday, 31 December 2007
|
| [PATCH 1/9] cleaning up trailing empty lines, expanding tabs and adding emacs local vars Torsten Foertsch 11:08:56 |
| | On Wed 14 Nov 2007, Philippe M. Chiasson wrote:
# cperl-indent-level: 4 # # indent-tabs-mode: nil # Can I take it as a "not at all" that you have left these comments in the Yes, don't mind at all. This is the first of set of patches that clean trailing empty lines in C files and trailing spaces from lines, expand tabs in C and Perl files and add emacs local variables to C and Perl files.
26.diff deletes existing emacs local vars from modperl_module.c and modperl_interp.c
27.diff deletes trailing spaces and trailing empty lines from C files
28.diff adds emacs local vars to C files
29.diff expands tabs in C files
30.diff expands tabs in *.p[lm] This patch is too big for the 100000 byte limit of the mailing list and will be sent in 2 parts.
31.diff adds emacs local vars to *.p[lm] In perl files this is done in the first line or the line after the shebang line. Thus the __DATA__ section is not touched. This patch is too big for the 100000 byte limit of the mailing list and will be sent in 2 parts.
32.diff does the same to t/.../*.t
33.diff expands tabs in ModPerl-Registry/t/*.t
34.diff adds emacs local vars to ModPerl-Registry/t/*.t
The diffs are from my local svn that was almost in sync with the threading branch except of t/response/TestPerl/ithreads3.pm and t/perl/ithreads3.t that do not exist yet in the threading branch.
Torsten
--------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org For additional commands, e-mail: dev-help@perl.apache.org |
| | 14 answers | Add comment |
|
| Please help adding ModPerl::Interpreter Torsten Foertsch 10:49:30 |
| | Hi,
for testing purposes I need an interface to the modperl_interp_t. That means I'd like to check the current interp's refcnt and num_requests members from perl level.
So I thought of adding a ModPerl::Interpreter XS module. But after reading http://perl.apache.org/docs/2.0/devel/core/explained.html I am only more confused.
Why is it so complicated to add a new XS module? Is it really necessary to edit all these tables and maps? Further, somewhere is said that the source scanning is not yet stable. In fact I have tried it some time ago and got completely different results.
I know how to create such a module outside modperl but it would depend on modperl. But I need it to test modperl itself. Hence I cannot build the module outside modperl because I would not be able to install it without modperl.
So, if someone knows better than me please help. A patch that adds a framework for the new module to modperl so that I could simply fill in my stuff would be best.
An explanation what to would also be most appreciated.
Thanks, Torsten
|
| | 25 answers | Add comment |
Sunday, 30 December 2007
|
| [mp2] mod_perl closes apache's stdin and/or stdout Dmitry Karasik 17:15:21 |
| | Hello,
As a follow-up to my previous bug report to users@, ( http://www.gossamer-threads.com/lists/modperl/modperl/94912 ) I'd like to re-post the same issue to dev@, because I'm unsure what is the status of this bugreport, and basically if it was recognized as one.
Just for the sake if the test wasn't reproduced correctly, I'll rerun:
1) test setup:
add to httpd.conf:
<LocationMatch "^/cgi-bin/m.cgi$"> SetHandler perl-script PerlResponseHandler ModPerl::Registry PerlOptions +ParseHeaders </LocationMatch>
<LocationMatch "^/cgi-bin/a.cgi$"> SetHandler cgi-script </LocationMatch>
both cgis are identical, and are:
#!/usr/bin/perl -w print "Content-type: text/html\n\n", $ENV{MOD_PERL}||'', "\n", <STDIN>, "\n";
test.pl:
open F, "|nc localhost 80"; # this requires netcat because I'm lazy print F <<R; POST /cgi-bin/m.cgi HTTP/1.1 Host: localhost Content-Type: application/x-www-form-urlencoded Content-Length: 13 Keep-Alive: 300
submit=Submit
POST /cgi-bin/a.cgi HTTP/1.1 Host: localhost Content-Type: application/x-www-form-urlencoded Content-Length: 13 Keep-Alive: 0 Connection: close
submit=Submit R
2)
- now, stop apache, run it from console as 'httpd -X' ( or apache2 -X on some linux distros) - run 'perl test.pl'
The bug manifests itself in that the following apache response is printed out (some lines are skipped):
HTTP/1.1 200 OK 1d mod_perl/2.0.3 submit=Submit 0
HTTP/1.1 200 OK Connection: close Content-Type: text/html 2 0
and the second request doesn't contain 'submit=Submit' line.
This can be fixed by applying the following patch:
--- modperl_io.c.orig 2007-09-25 15:36:02.000000000 +0200 +++ modperl_io.c 2007-09-25 15:35:51.000000000 +0200 @@ -129,6 +129,15 @@ Perl_croak(aTHX_ "Failed to dup STDIN: %" SVf, get_sv("!", TRUE)); }
+ /* In mixed environment of mod_perl and cgi scripts, cgi scripts may read content of + * POST requests off STDIN. do_close() calls actual close(0), freeing the descriptor 0 + * for reuse, and creating havoc for anyone reading from file descriptor 0. + * This hack changes the IO type to IoTYPE_STD, because do_close() does not call + * underlying close() on IO handles of these types, but does free the associated + * resources. */ + if ( IoIFP(io) && PerlIO_fileno(IoIFP(io)) == 0) + IoTYPE(io) = IoTYPE_STD; + /* similar to PerlIO::scalar, the PerlIO::Apache layer doesn't * have file descriptors, so STDIN must be closed before it can * be reopened */
So, I'm not sure what other information I can provide, please tell me if there's anything more, because I'd love to see that bug fixed.
-- Sincerely, Dmitry Karasik
|
| | 18 answers | Add comment |
|
| Failing tests - reason? Heiko Jansen 00:51:19 |
| | Hi *.
A few days ago I posted a message to the users list, reporting failing tests with modperl-dev, Apache 2.2.6 and Perl 5.10.0 (cf. http://www.gossamer-threads.com/lists/modperl/modperl/95979 and http://www.gossamer-threads.com/lists/modperl/modperl/95980). Maybe that should have gone to this list in the first place. Anyhow, the posting received no reply which still leaves me behind with two possible explanations: a) Either this is currently "expected behavior" due to issues with Perl 5.10.0. Which - in the tradition of "Doctor, it's hurts if I do this. - Don't do it, then." - means I should switch back to Perl 5.8.8 and update later. b) Or there is something else messed up with my build.
Since I don't know which one it is - could someone please give me a hint?
Thx Heiko
|
| | 3 answer | Add comment |
Friday, 28 December 2007
|
| Test failures with perl 5.10 Roderich Schupp 17:29:41 |
| | HI,
I'm trying to get mod_perl2 (2.0.3) working with perl 5.10.0. I've applied patch 480902 from SVN to get it to compile, but get failures in the test suite. Here's the output with TEST_VERBOSE=1 for t/filter/both_str_con_add.t:
/usr/sbin/apache2 -d /var/tmp/build/libapache2-mod-perl2-2.0.3/t -f /var/tmp/build/libapache2-mod-perl2-2.0.3/t/conf/httpd.conf -D APACHE2 -D PERL_USEITHREADS using Apache/2.2.6 (prefork MPM)
waiting 120 seconds for server to start: .[Fri Dec 28 14:31:57 2007] [warn] Useless use of AllowOverride in line 1381. [Fri Dec 28 14:31:58 2007] [info] 6 Apache2:: modules loaded [Fri Dec 28 14:31:58 2007] [info] 0 APR:: modules loaded [Fri Dec 28 14:31:58 2007] [info] base server + 29 vhosts ready to run tests waiting 120 seconds for server to start: ok (waited 7 secs) server localhost:8529 started server localhost:8530 listening (filter_out_apache) server localhost:8531 listening (perlsections) ... server localhost:8565 listening (TestHooks::push_handlers_anon) t/filter/both_str_con_add...... 1..4 # Running under perl version 5.010000 for linux # Current time local: Fri Dec 28 14:32:05 2007 # Current time GMT: Fri Dec 28 13:32:05 2007 # Using Test.pm version 1.25 # Using Apache/Test.pm version 1.29 ok 1 # expected: mod_perl # received: not ok 2 # Failed test 2 in t/filter/both_str_con_add.t at line 25 Failed 3/4 subtests
Test Summary Report ------------------- t/filter/both_str_con_add.t (Wstat: 13 Tests: 2 Failed: 1) Failed test number(s): 2 Parse errors: Bad plan. You planned 4 tests but ran 2. Files=1, Tests=2, 2 wallclock secs ( 0.02 usr 0.01 sys + 0.77 cusr 0.12 csys = 0.92 CPU) Result: FAIL Failed 1/1 test programs. 1/2 subtests failed.
And t/logs/error_log has:
END in modperl_extra.pl, pid=2924 [Fri Dec 28 14:32:04 2007] [notice] Apache/2.2.6 (Debian) world domination series/2.0 mod_perl/2.0.3 Perl/v5.10.0 configured -- resuming normal operations [Fri Dec 28 14:32:04 2007] [info] Server built: Dec 18 2007 09:46:51 [Fri Dec 28 14:32:04 2007] [debug] prefork.c(1014): AcceptMutex: sysvsem (default: sysvsem) [Fri Dec 28 14:32:07 2007] [error] Can't add connection filter handler 'TestFilter::both_str_con_add::in_filter' since it doesn't have the FilterConnectionHandler attribute set at /var/tmp/build/libapache2-mod-perl2-2.0.3/t/filter/TestFilter/both_str_con_add.pm line 25.\n [Fri Dec 28 14:32:07 2007] [info] Child process pid=2933 is exiting [Fri Dec 28 14:32:07 2007] [info] Child process pid=2933 is exiting - server push [Fri Dec 28 14:32:07 2007] [info] Child process pid=2934 is exiting [Fri Dec 28 14:32:07 2007] [info] Child process pid=2934 is exiting - server push END in modperl_extra.pl, pid=2934
I put in some printfs and see that setting MP_CODE_ATTRS in MPXS_modperl_filter_attributes from the sub' Perl attributes works correctly. However, when MP_CODE_ATTRS is checked in modperl_filter_runtime_add (that's where "Can't add connection filter handler..." above is issued from), handler->attrs has the value 0x8e1e240. This doesn't look like an OR if any MP_FILTER_* flags at all, but rather like the address of some perl structure.
I guess the problem is that
#define MP_CODE_ATTRS(cv) (CvXSUBANY((CV*)cv).any_i32)
but in perl 5.10 we have
#define CvXSUBANY(sv) ((XPVCV*)SvANY(sv))->xcv_start_u.xcv_xsubany #define CvSTART(sv) ((XPVCV*)SvANY(sv))->xcv_start_u.xcv_start
i.e. CvXSUBANY and CvSTART share the same storage location (probably under the assumption that the former is only relevant for XS subs and the latter only for real perl subs).
Cheers, Roderich
|
| | Add comment |
Thursday, 27 December 2007
|
| [Fwd: svn commit: r606831 - in /perl/modperl/trunk/t:
apr/pool_lifetime.t response/TestAPR/poo Fred Moyer 01:34:34 |
| | Gozer, I've refactored everything to use keep alives instead of sameinterp per your example and our discussion at ApacheCon. I haven't tested to see if it sped up running the test suite, but it should in theory since less attempts will be made to locate the correct interpreter.
There is still t/modperl/sameinterp.t and t/response/TestModperl/sameinterp.pm to implement the actual sameinterp mechanism. Should I remove those, or is there some part of it we need that keep_alives doesn't do?
- Fred
---------------------------- Original Message ---------------------------- Subject: svn commit: r606831 - in /perl/modperl/trunk/t: apr/pool_lifetime.t response/TestAPR/pool_lifetime.pm From: phred@apache.org Date: Tue, December 25, 2007 6:50 pm To: modperl-cvs@perl.apache.org --------------------------------------------------------------------------
Author: phred Date: Tue Dec 25 18:50:29 2007 New Revision: 606831
URL: http://svn.apache.org/viewvc?rev=606831&view=rev Log: Refactor to use keep_alives instead of TestCommon::SameInterp. As done originally in revision 594682 at ApacheCon 2007
Modified: perl/modperl/trunk/t/apr/pool_lifetime.t perl/modperl/trunk/t/response/TestAPR/pool_lifetime.pm
Modified: perl/modperl/trunk/t/apr/pool_lifetime.t URL: http://svn.apache.org/viewvc/perl/modperl/trunk/t/apr/pool_lifetime.t?rev=606831&r1=606830&r2=606831&view=diff ============================================================================== --- perl/modperl/trunk/t/apr/pool_lifetime.t (original) +++ perl/modperl/trunk/t/apr/pool_lifetime.t Tue Dec 25 18:50:29 2007 @@ -4,7 +4,7 @@ use Apache::Test; use Apache::TestUtil; use Apache::TestRequest; -use TestCommon::SameInterp; +Apache::TestRequest::user_agent(keep_alive => 1);
plan tests => 2, need 'HTML::HeadParser';
@@ -12,18 +12,14 @@ my $location = '/' . Apache::TestRequest::module2path($module);
t_debug "getting the same interp ID for $location"; -my $same_interp = Apache::TestRequest::same_interp_tie($location); - -my $skip = $same_interp ? 0 : 1;
for (1..2) { my $expected = "Pong"; - my $received = same_interp_req_body($same_interp, \&GET, $location); - $skip++ unless defined $received; - same_interp_skip_not_found( - $skip, + my $received = GET "$location"; + + ok t_cmp( + $received->content, $expected, - $received, - "Pong" + "Pong", ); }
Modified: perl/modperl/trunk/t/response/TestAPR/pool_lifetime.pm URL: http://svn.apache.org/viewvc/perl/modperl/trunk/t/response/TestAPR/pool_lifetime.pm?rev=606831&r1=606830&r2=606831&view=diff ============================================================================== --- perl/modperl/trunk/t/response/TestAPR/pool_lifetime.pm (original) +++ perl/modperl/trunk/t/response/TestAPR/pool_lifetime.pm Tue Dec 25 18:50:29 2007 @@ -23,5 +23,3 @@ }
1; -__END__ -PerlFixupHandler Apache::TestHandler::same_interp_fixup
|
| | 1 answer | Add comment |
Tuesday, 25 December 2007
|
| [patch] Apache::Reload, detect required version of Apache::Test Fred Moyer 22:29:53 |
| | This didn't occur to me until yesterday but we need a:t version 1.30 to run the tests for apache::reload. Here's my thoughts on how to implement it, any other suggestions?
Index: Makefile.PL =================================================================== --- Makefile.PL (revision 606234) +++ Makefile.PL (working copy) @@ -5,6 +5,7 @@ my %prereqs = (); my %mp2 = ( mod_perl2 => 1.99022 ); my %mp1 = ( mod_perl => 0 ); +my $at_min_ver = 1.30;
my $mp_gen; if ($ENV{MOD_PERL_2_BUILD}) { @@ -51,6 +52,12 @@ sub check_for_apache_test { return unless eval { require Apache::Test; + if ($Apache::Test::VERSION < $at_min_ver) { + warn "Apache::Test version is " . $Apache::Test::VERSION . + ", minimum version required is $at_min_ver" . + ", tests will be skipped\n"; + die; + } require Apache::TestMM; require Apache::TestRunPerl; 1; @@ -212,7 +219,15 @@
return $self->Apache::TestMM::test(@_) if $HAS_APACHE_TEST;
- return $self->SUPER::test(@_); + return <<EOF +test:: +\t\@echo +\t\@echo sorry, cannot run tests without a properly +\t\@echo configured Apache-Test environment, mininum +\t\@echo Apache::Test version needes is $at_min_ver +\t\@echo +EOF + }
sub clean {
|
| | Add comment |
Monday, 24 December 2007
|
| SSL Question Joe Apache 22:24:04 |
| | I am looking for a SSL Certificate from one of the browser trusted CA's. Which is the best and the cheapest. I'm looking at InstantSSL.... any stories?
Thanks, J ------------------------------------------------------ Jay States Productivity Media Inc. http://productivitymedia.com
--------------------------------------------------------------------- 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: users-unsubscribe@httpd.apache.org " from the digest: users-digest-unsubscribe@httpd.apache.org For additional commands, e-mail: users-help@httpd.apache.org
|
| | 22 answer | Add comment |
|
| [RELEASE CANDIDATE] Apache-Reload 0.10 RC1 Fred Moyer 06:52:51 |
| | Greetings,
A release candidate for Apache::Reload is now available [1]. Please take a few minutes to download, test, and report back success or failure for the test suite and compatibility with your existing mod_perl applications.
Changes include:
Remove modified modules before reloading them [Javier Ureuen Val]
Matt Sergeant has graciously donated the Apache::Reload code to the ASF, and now both Apache::Reload and Apache2::Reload will be shipped as an external Perl module, Apache2::Reload is currently shipped with the mod_perl core.
[1] - http://people.apache.org/~phred/Apache-Reload-0.10-RC1.tar.gz
Thanks for helping out!
- Fred
|
| | Add comment |
Friday, 21 December 2007
|
| mp1 needs release for 5.10 Geoffrey Young 22:21:47 |
| | hi
according to this
http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-12/msg00278.html
mp1 (from cpan) will require a patch to work with 5.10. the good news is that, despite our collective lack of tuits, steve has already committed the patch, so all we need to do is release.
so, any volunteers to be release manager and push this one out "soonish"?
--Geoff
|
| | 2 answer | Add comment |
|
| use mro; Philippe M. Chiasson 21:26:24 |
| | One neat thing about Perl 5.10 is the mro package (Method Resolution Order).
But the neat feature that caught my eye is pkg_gen()
http://search.cpan.org/~rgarcia/perl-5.10.0/lib/mro.pm#mro::get_pkg_gen($classname)
In mod_perl, we use PL_sub_generation to determine if our method cache (handlers) is still valid. That is unfortunately a single integer that's basically incremented every time a subroutine is redefined anywhere.
So this means that when, say, Apache::Reload kicks in, it will invalidate the handler cache we have for every single module, not just the one we just reloaded.
In 5.10, mro::get_pkg_gen($classname) gives you the same, except at a package granularity. Pretty cool optimization.
When building against 5.10, we could make use of this I'd think.
Just a thought.
-- Philippe M. Chiasson GPG: F9BFE0C2480E7680 1AE53631CB32A107 88C3A5A5 http://gozer.ectoplasm.org/ m/gozer\@(apache|cpan|ectoplasm)\.org/
|
| | Add comment |
Tuesday, 18 December 2007
|
| Server Side Includes Guest 12:06:18 |
| | I need assistance with getting SSI running on my Solaris 8 system with the below configuration. From what I see is that I don't have the right module loaded. Is it possible to download just a module and add it to the config? How and where can I get this from? I am very new to compiling so hopefully I can get some good directions. I will provide summary and more info if needed. Thank you in advance.
bash-2.03# ./httpd -v Server version: IBM_HTTP_Server/1.3.12.6 Apache/1.3.12 (Unix) Server built: Jan 16 2002 14:10:57
./httpd -l Compiled-in modules: http_core.c mod_so.c suexec: disabled; invalid wrapper /opt/IBMHTTPD/bin/suexec
bash-2.03# ./httpd -V Server version: IBM_HTTP_Server/1.3.12.6 Apache/1.3.12 (Unix) Server built: Jan 16 2002 14:10:57 Server's Module Magic Number: 19990320:8 Server compiled with.... -D HAVE_MMAP -D USE_MMAP_SCOREBOARD -D USE_MMAP_FILES -D USE_FCNTL_SERIALIZED_ACCEPT -D HTTPD_ROOT="/opt/IBMHTTPD" -D SUEXEC_BIN="/opt/IBMHTTPD/bin/suexec" -D DEFAULT_PIDLOG="logs/httpd.pid" -D DEFAULT_SCOREBOARD="logs/httpd.scoreboard" -D DEFAULT_LOCKFILE="logs/httpd.lock" -D DEFAULT_XFERLOG="logs/access_log" -D DEFAULT_ERRORLOG="logs/error_log" -D TYPES_CONFIG_FILE="conf/mime.types" -D SERVER_CONFIG_FILE="conf/httpd.conf" -D ACCESS_CONFIG_FILE="conf/access.conf" -D RESOURCE_CONFIG_FILE="conf/srm.conf"
|
| | 8 answers | Add comment |
Saturday, 15 December 2007
|
| [patch] Apache::Reload work from Apachecon Fred Moyer 01:54:11 |
| | Greetings,
I have attached the work completed for Apache::Reload up to this point. A great deal of progress was made at ApacheCon thanks to help from Gozer, Geoff, and others.
There are some files that I will need to 'svn mv' from mp core and then modify, but this diff is the bulk of what I plan to commit.
Comments welcome. One note, because Apache2::Reload is v0.9 in core, and Apache::Reload is v0.8, I have marked this version 0.10 to avoid any issues installing, see Changes for details.
If all goes well I hope to have this released to CPAN by the end of the month.
- Fred
Index: RELEASE =================================================================== --- RELEASE (revision 558376) +++ RELEASE (working copy) @@ -40,8 +40,8 @@
a. edit ./Changes: - find lib -type f -name "*.pm" | \ - xargs perl -pi -e 's,0.08-dev,0.08-rc1,g' - - perl -pi -e 's,0.08-dev,0.08-rc1,g' Changes + xargs perl -pi -e 's,0.10-dev,0.10-rc1,g' + - perl -pi -e 's,0.10-dev,0.10-rc1,g' Changes
- don't commit these (see dev@ archives)
@@ -60,7 +60,7 @@ o dev/perl.apache.org o modperl/perl.apache.org
- Subject: [RELEASE CANDIDATE] Apache-Reload 0.08 RC\d+ + Subject: [RELEASE CANDIDATE] Apache-Reload 0.10 RC\d+
(or maybe longer to give most people a chance to catch up). no need to tag this package @@ -95,7 +95,7 @@ 5. Announce the package
a. post ... to the modperl, announce lists - Subject: [ANNOUNCE] Apache-Reload 0.08 + Subject: [ANNOUNCE] Apache-Reload 0.10 include - MD5 sig (as it comes from CPAN upload announce). - the latest Changes @@ -107,7 +107,7 @@ b. edit ./Changes: - start a new item with incremented version + '-dev'
- =item 0.92-dev + =item 0.11-dev
c. bump up version numbers in this file to make it easier to do the next release. @@ -115,4 +115,4 @@ $ perl -pi -e 's/(\d+)\.(\d+)/join(".", $1, $2+1)/eg' RELEASE
d. commit Changes - % svn ci -m "start 0.92-dev cycle" Changes RELEASE lib/Apache/Reload.pm + % svn ci -m "start 0.11-dev cycle" Changes RELEASE lib/Apache/Reload.pm Index: t/conf/extra.last.conf.in =================================================================== --- t/conf/extra.last.conf.in (revision 0) +++ t/conf/extra.last.conf.in (revision 0) @@ -0,0 +1,22 @@ +<IfModule mod_perl.c> + <IfDefine APACHE2> + PerlModule Apache2::Reload + PerlModule Apache2::TestReload + </IfDefine> + <IfDefine APACHE1> + PerlModule Apache::Reload + PerlModule Apache::TestReload + </IfDefine> + </IfDefine> + <Location /reload> + SetHandler perl-script + <IfDefine APACHE2> + PerlInitHandler Apache2::Reload + PerlResponseHandler Apache2::TestReload + </IfDefine> + <IfDefine APACHE1> + PerlInitHandler Apache::Reload + PerlHandler Apache::TestReload + </IfDefine> + </Location> +</IfModule> Index: t/lib/Apache/TestReload.pm =================================================================== --- t/lib/Apache/TestReload.pm (revision 0) +++ t/lib/Apache/TestReload.pm (revision 0) @@ -0,0 +1,44 @@ +package Apache::TestReload; + +use strict; +use warnings FATAL => 'all'; + +#use ModPerl::Util (); +use Apache::Constants qw common); + +my $package = 'Reload::Test'; + +our $pass = 0; + +sub handler { + my $r = shift; + $pass++; + $r->send_http_header('text/plain'); + if ((defined ($r->args)) && ($r->args eq 'last')) { + #Apache2::Reload->unregister_module($package); + #ModPerl::Util::unload_package($package); + $pass = 0; + $r->print("unregistered OK"); + return OK; + } + + eval "require $package"; + + Reload::Test::run($r); + + return OK; +} + +# This one shouldn't be touched +package Reload::Test::SubPackage; + +sub subpackage { + if ($Apache::TestReload::pass == '2') { + return 'SUBPACKAGE'; + } + else { + return 'subpackage'; + } +} + +1; Index: t/lib/Apache2/TestReload.pm =================================================================== --- t/lib/Apache2/TestReload.pm (revision 0) +++ t/lib/Apache2/TestReload.pm (revision 0) @@ -0,0 +1,45 @@ +package Apache2::TestReload; + +use strict; +use warnings FATAL => 'all'; + +use ModPerl::Util (); +use Apache2::RequestRec (); +use Apache2::Const -compile => qw(OK); +use Apache2::RequestIO (); + +my $package = 'Reload::Test'; + +our $pass = 0; + +sub handler { + my $r = shift; + $pass++; + if ($r->args eq 'last') { + Apache2::Reload->unregister_module($package); + ModPerl::Util::unload_package($package); + $pass = 0; + $r->print("unregistered OK"); + return Apache2::Const::OK; + } + + eval "require $package"; + + Reload::Test::run($r); + + return Apache2::Const::OK; +} + +# This one shouldn't be touched +package Reload::Test::SubPackage; + +sub subpackage { + if ($Apache2::TestReload::pass == '2') { + return 'SUBPACKAGE'; + } + else { + return 'subpackage'; + } +} + +1; Index: t/reload.t =================================================================== --- t/reload.t (revision 0) +++ t/reload.t (revision 0) @@ -0,0 +1,70 @@ +use strict; +use warnings FATAL => 'all'; + +use Apache::Test; +use Apache::TestUtil; +use Apache::TestRequest; +use File::Spec::Functions qw(catfile tmpdir); + +Apache::TestRequest::user_agent(keep_alive => 1); + +plan tests => 3, need 'HTML::HeadParser'; + +my $test_file = catfile qw(Reload Test.pm); + +my $location = '/reload'; + +my @tests = qw(const prototype simple subpackage); + +my $header = join '', <DATA>; + +my $initial = <<'EOF'; +sub simple { 'simple' } +use constant const => 'const'; +sub prototype($) { 'prototype' } +sub promised; +EOF + +my $modified = <<'EOF'; +sub simple { 'SIMPLE' } +use constant const => 'CONST'; +sub prototype($$) { 'PROTOTYPE' } +EOF + +t_write_test_lib($test_file, $header, $initial); + +{ + my $expected = join '', map { "$_ _\n" } sort @tests; + my $received = GET $location; + ok t_cmp($received->content, $expected, 'Initial'); +} + +t_write_test_lib($test_file, $header, $modified); + +{ + my $expected = join '', map { "$_:" . uc($_) . "\n" } sort @tests; + my $received = GET $location; + ok t_cmp($received->content, $expected, 'Reload'); +} + +{ + my $expected = "unregistered OK"; + my $received = GET "$location?last"; + ok t_cmp($received->content, $expected, 'Unregister'); +} + +__DATA__ +package Reload::Test; + +our @methods = qw(const prototype simple subpackage); + +sub subpackage { return Reload::Test::SubPackage::subpackage() } + +sub run { + my $r = shift; + foreach my $m (sort @methods) { + $r->print($m, ':', __PACKAGE__->$m(), "\n"); + } +} + +1; Index: lib/Apache/Reload.pm =================================================================== --- lib/Apache/Reload.pm (revision 558376) +++ lib/Apache/Reload.pm (working copy) @@ -17,7 +17,7 @@
use strict;
-$Apache::Reload::VERSION = '0.08'; +$Apache::Reload::VERSION = '0.10';
use vars qw(%INCS %Stat $TouchTime %UndefFields);
@@ -262,6 +262,10 @@
Matt Sergeant, matt@sergeant.org
+=head1 MAINTAINERS + +the mod_perl developers, dev@perl.apache.org + =head1 SEE ALSO
Apache::StatINC, Stonehenge::Reload Index: lib/Apache2/Reload.pm =================================================================== --- lib/Apache2/Reload.pm (revision 0) +++ lib/Apache2/Reload.pm (revision 0) @@ -0,0 +1,297 @@ +# 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. +# +package Apache2::Reload; + +use strict; +use warnings FATAL => 'all'; + +use mod_perl2; + +our $VERSION = '0.10'; + +use Apache2::Const -compile => qw(OK); + +use Apache2::Connection; +use Apache2::ServerUtil; +use Apache2::RequestUtil; + +use ModPerl::Util (); + +use vars qw(%INCS %Stat $TouchTime); + +%Stat = ($INC{"Apache2/Reload.pm"} => time); + +$TouchTime = time; + +sub import { + my $class = shift; + my ($package, $file) = (caller)[0,1]; + + $class->register_module($package, $file); +} + +sub package_to_module { + my $package = shift; + $package =~ s/::/\//g; + $package .= ".pm"; + return $package; +} + +sub module_to_package { + my $module = shift; + $module =~ s/\//::/g; + $module =~ s/\.pm$//g; + return $module; +} + +sub register_module { + my ($class, $package, $file) = @_; + my $module = package_to_module($package); + + if ($file) { + $INCS{$module} = $file; + } + else { + $file = $INC{$module}; + return unless $file; + $INCS{$module} = $file; + } +} + +sub unregister_module { + my ($class, $package) = @_; + my $module = package_to_module($package); + delete $INCS{$module}; +} + +# the first argument is: +# $c if invoked as 'PerlPreConnectionHandler' +# $r if invoked as 'PerlInitHandler' +sub handler { + my $o = shift; + $o = $o->base_server if ref($o) eq 'Apache2::Connection'; + + my $DEBUG = ref($o) && (lc($o->dir_config("ReloadDebug") || '') eq 'on'); + + my $TouchFile = ref($o) && $o->dir_config("ReloadTouchFile"); + + my $ConstantRedefineWarnings = ref($o) && + (lc($o->dir_config("ReloadConstantRedefineWarnings") || '') eq 'off') + ? 0 : 1; + + my $TouchModules; + + if ($TouchFile) { + warn "Checking mtime of $TouchFile\n" if $DEBUG; + my $touch_mtime = (stat $TouchFile)[9] || return Apache2::Const::OK; + return Apache2::Const::OK unless $touch_mtime > $TouchTime; + $TouchTime = $touch_mtime; + open my $fh, $TouchFile or die "Can't open '$TouchFile': $!"; + $TouchModules = <$fh>; + chomp $TouchModules if $TouchModules; + } + + if (ref($o) && (lc($o->dir_config("ReloadAll") || 'on') eq 'on')) { + *Apache2::Reload::INCS = \%INC; + } + else { + *Apache2::Reload::INCS = \%INCS; + my $ExtraList = + $TouchModules || + (ref($o) && $o->dir_config("ReloadModules")) || + ''; + my @extra = split /\s+/, $ExtraList; + foreach (@extra) { + if (/(.*)::\*$/) { + my $prefix = $1; + $prefix =~ s/::/\//g; + foreach my $match (keys %INC) { + if ($match =~ /^\Q$prefix\E/) { + $Apache2::Reload::INCS{$match} = $INC{$match}; + } + } + } + else { + Apache2::Reload->register_module($_); + } + } + } + + my $ReloadDirs = ref($o) && $o->dir_config("ReloadDirectories"); + my @watch_dirs = split(/\s+/, $ReloadDirs||''); + + my @changed; + foreach my $key (sort { $a cmp $b } keys %Apache2::Reload::INCS) { + my $file = $Apache2::Reload::INCS{$key}; + + next unless defined $file; + next if @watch_dirs && !grep { $file =~ /^$_/ } @watch_dirs; + warn "Apache2::Reload: Checking mtime of $key\n" if $DEBUG; + + my $mtime = (stat $file)[9]; + + unless (defined($mtime) && $mtime) { + for (@INC) { + $mtime = (stat "$_/$file")[9]; + last if defined($mtime) && $mtime; + } + } + + warn("Apache2::Reload: Can't locate $file\n"), next + unless defined $mtime and $mtime; + + unless (defined $Stat{$file}) { + $Stat{$file} = $^T; + } + + if ($mtime > $Stat{$file}) { + push @changed, $key; + } + $Stat{$file} = $mtime; + } + + #First, let's unload all changed modules + foreach my $module (@changed) { + my $package = module_to_package($module); + ModPerl::Util::unload_package($package); + } + + #Then, let's reload them all, so that module dependencies can satisfy + #themselves in the correct order. + foreach my $module (@changed) { + my $package = module_to_package($module); + require $module; + warn("Apache2::Reload: process $$ reloading $package from $module\n") + if $DEBUG; + } + + return Apache2::Const::OK; +} + +1; +__END__ + +=head1 NAME + +Apache2::Reload - Reload changed modules + +=head1 SYNOPSIS + +In httpd.conf: + + PerlInitHandler Apache2::Reload + PerlSetVar ReloadAll Off + +Then your module: + + package My::Apache::Module; + + use Apache2::Reload; + + sub handler { ... } + + 1; + +=head1 DESCRIPTION + +This module is two things. First it is an adaptation of Randal +Schwartz's Stonehenge::Reload module that attempts to be a little +more intuitive and makes the usage easier. Stonehenge::Reload was +written by Randal to make specific modules reload themselves when +they changed. Unlike Apache::StatINC, Stonehenge::Reload only checked +the change time of modules that registered themselves with +Stonehenge::Reload, thus reducing stat() calls. Apache::Reload also +offers the exact same functionality as Apache::StatINC, and is thus +designed to be a drop-in replacement. Apache::Reload only checks modules +that register themselves with Apache::Reload if you explicitly turn off +the StatINC emulation method (see below). Like Apache::StatINC, +Apache::Reload must be installed as an Init Handler. + +=head2 StatINC Replacement + +To use as a StatINC replacement, simply add the following configuration +to your httpd.conf: + + PerlInitHandler Apache::Reload + +=head2 Register Modules Implicitly + +To only reload modules that have registered with Apache::Reload, +add the following to the httpd.conf: + + PerlInitHandler Apache::Reload + PerlSetVar ReloadAll Off + # ReloadAll defaults to On + +Then any modules with the line: + + use Apache2::Reload; + +Will be reloaded when they change. + +=head2 Register Modules Explicitly + +You can also register modules explicitly in your httpd.conf file that +you want to be reloaded on change: + + PerlInitHandler Apache2::Reload + PerlSetVar ReloadAll Off + PerlSetVar ReloadModules "My::Foo My::Bar Foo::Bar::Test" + +Note that these are split on whitespace, but the module list B<must> +be in quotes, otherwise Apache tries to parse the parameter list. + +=head2 Special "Touch" File + +You can also set a file that you can touch() that causes the reloads to be +performed. If you set this, and don't touch() the file, the reloads don't +happen. This can be a great boon in a live environment: + + PerlSetVar ReloadTouchFile /tmp/reload_modules + +Now when you're happy with your changes, simply go to the command line and +type: + + touch /tmp/reload_modules + +And your modules will be magically reloaded on the next request. This option +works in both StatINC emulation mode and the registered modules mode. + +=head1 PSUEDOHASHES + +The short summary of this is: Don't use psuedohashes. Use an array with +constant indexes. Its faster in the general case, its more guaranteed, and +generally, it works. + +The long summary is that I've done some work to get this working with +modules that use psuedo hashes, but its still broken in the case of a +single module that contains multiple packages that all use psuedohashes. + +So don't do that. + +=head1 AUTHOR + +Matt Sergeant, matt@sergeant.org + +=head1 MAINTAINERS + +the mod_perl developers, dev@perl.apache.org + +=head1 SEE ALSO + +Apache::StatINC, Stonehenge::Reload + +=cut Index: MANIFEST =================================================================== --- MANIFEST (revision 558376) +++ MANIFEST (working copy) @@ -3,4 +3,9 @@ README LICENSE lib/Apache/Reload.pm +lib/Apache2/Reload.pm +t/reload.t +t/lib/Apache/TestReload.pm +t/lib/Apache2/TestReload.pm RELEASE +Changes Index: Makefile.PL =================================================================== --- Makefile.PL (revision 558376) +++ Makefile.PL (working copy) @@ -38,9 +38,9 @@ require ModPerl::MM; ModPerl::MM::WriteMakefile( %common_opts, - VERSION_FROM => "lib/Apache/Reload.pm", - NAME => "Apache::Reload", - ABSTRACT_FROM => 'lib/Apache/Reload.pm', + VERSION_FROM => "lib/Apache2/Reload.pm", + NAME => "Apache2::Reload", + ABSTRACT_FROM => 'lib/Apache2/Reload.pm', ); }
Index: Changes =================================================================== --- Changes (revision 558376) +++ Changes (working copy) @@ -6,8 +6,18 @@
=over 1
-=item 0.08-dev +=item 0.10-dev
+Apache::Reload and Apache2::Reload bundled for CPAN release +This release incorporates unreleased changes in 0.08 and 0.09 +[Fred Moyer <fred@redhotpenguin.com>] + +=item 0.09 + +Apache2::Reload was part of mod_perl2 core + +=item 0.08 + Remove modified modules before reloading them [Javier Ureuen Val]
Index: README =================================================================== --- README (revision 558376) +++ README (working copy) @@ -101,6 +101,10 @@ AUTHOR Matt Sergeant, matt@sergeant.org
+MAINTAINERS + +the mod_perl developers, dev@perl.apache.org + SEE ALSO Apache::StatINC, Stonehenge::Reload
|
| | 3 answer | Add comment |
Thursday, 6 December 2007
|
| SUPERUSER RIGHTS Lalit 18:56:57 |
| | Hi,
I want to stop / start / pause/ resume / restart a daemon which is created by us using PHP and APACHE 2.
Well i used posix_kill under PHP but this works on if the owner of the daemon and APACHE is same. how can i make the APACHE to run as root or is there any other way to do so.
Rgds
--------------------------------------------------------------------- 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: users-unsubscribe@httpd.apache.org " from the digest: users-digest-unsubscribe@httpd.apache.org For additional commands, e-mail: users-help@httpd.apache.org
|
| | 2 answer | Add comment |
Saturday, 1 December 2007
|
| $r->headers_out->set('Server' => 'foo'); Fred Moyer 07:03:17 |
| | Greetings,
I'm trying to figure out where in the mod_perl innards I need to look to map the accessor for the Server header.
I've changed core.c in httpd so that set_banner() is deactivated. This results in a Server header of 'mod_perl/2.0.4-dev Perl/v5.8.8', so I think that change is all that is needed to keep apache from overwriting the header.
I don't see anything in xs/maps/apache2_structures.map so I figure that I have to add server in there somehow?
Thanks in advance,
Fred
|
| | 2 answer | Add comment |
Monday, 26 November 2007
|
| [ANNOUNCE] Apache-Test 1.30 Fred Moyer 22:49:41 |
| | Greetings,
Version 1.30 of Apache::Test will be coming to a CPAN mirror near you shortly.
md5: f4e34be218a25048def5a4f797ae7cb9
Summary of changes in version 1.30:
Added t_write_test_lib for temporary testing packages [Fred Moyer <fred@redhotpenguin.com>]
Fix syntax error in generated PHP files t/conf/*.php.in [Philippe M. Chiasson]
Add bwshare.so to the list of modules to not inherit b/c it rate limits requests to less then that of a test suite. PR: 25548 [imacat <imacat@mail.imacat.idv.tw>]
Add EXTRA_CFLAGS to c-module building if defined in the environment [Geoffrey Young]
Enjoy!
- the modperl development team
|
| | Add comment |
|
| [RELEASE CANDIDATE] Apache-Test-1.30 RC1 Fred Moyer 21:08:19 |
| | Greetings,
A release candidate for Apache::Test is now available:
http://people.apache.org/~phred/Apache-Test-1.30-RC1.tar.gz
Please take a moment to download, build, and report test failures or success back to the list. Thanks!
Summary of changes in this version:
Added t_write_test_lib for temporary testing packages [Fred Moyer <fred@redhotpenguin.com>]
Fix syntax error in generated PHP files t/conf/*.php.in [Philippe M. Chiasson]
Add bwshare.so to the list of modules to not inherit b/c it rate limits requests to less then that of a test suite. PR: 25548 [imacat <imacat@mail.imacat.idv.tw>]
Add EXTRA_CFLAGS to c-module building if defined in the environment [Geoffrey Young]
|
| | 10 answers | Add comment |
|