Hi openpkg-users,

while trying to build the apache mod_jk connector for apache2 with
openpkg (the tomcat-adapter in openpkg's current-directory only supports
apache 1.3) it seems that i've found some misconfiguration in the
build-process of openpkg's apache2-package when building with
with_core_so=yes. The resulting apache runs fine, and is able to load
DSO from foreign sources, but i found no way to create a DSO for mod_jk
with the apache's apxs-tool. The created apxs seem's to disallow the
creation of shared-objects.

After some try-and-error-modifications in apache2.spec i figured out,
that apache's configure-option --disable-shared is responsible for this.
So i removed that option in case of "with_shared_core=yes", and was able
to build mod_jk with the help of the new apxs. To still avoid the
creation of shared modues by default, i now use
--enable-mods-shared=none, when building with with_shared_core=yes.

Here's the diff to the original apache2.spec:

55c55,60
< %option       with_shared_core          no
---
> %option       with_shared_core          yes
>
> # if we set with_shared_core, we can specify a list of DSO-modules in
> # single quotes or use one of the predefined special values
> # "none", "all" and "most"
> %option       mods_shared               none
105a111,116
>     NOTICE2: This is a derived version of the original apache2 package
>     of openpkg. It modifies the original configuration to enable
>     DSO support for apxs. This is necessary, if you want to build
DSO-modules
>     with this apache's apxs-instance.
>
>
209a221,224
>           --enable-mods-shared=%{mods_shared} \
> %endif
> %if "%{with_shared_core}" == "no"
>            --disable-shared \
218d232
<           --disable-shared \


As you can see, i've added a new build option "mods_shared", that allows
to create some of apaches modules as DSO. But the default remains "none".

I'm not sure, if what i've done is contrary to openpkg's
avoid-shared-objects strategy, but since the resulting httpd doesn't
contain any DSO, as long as you don't change the default-value of
"mod_shared", the resulting httpd still shouldn't use any shared
objects, unless you add some extra DSO in the httpd.conf.


With this apache's apxs, i was able to build the tomcat connector module
mod_jk. For those who need this as well, i add my apache2-mod_jk.spec,
which is based on the tomcat-apache.spec of openpkg's current-directory:

-------START OF SPEC -------------

##
##  apache2-mod_jk.spec -- OpenPKG RPM Package Specification
##  Copyright (c) 2000-2005 OpenPKG Foundation e.V. <http://openpkg.net/>
##  Copyright (c) 2000-2005 Ralf S. Engelschall <http://engelschall.com/>
##
##  Permission to use, copy, modify, and distribute this software for
##  any purpose with or without fee is hereby granted, provided that
##  the above copyright notice and this permission notice appear in all
##  copies.
##
##  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 THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
##  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.
##

#   package information
Name:         apache2-mod_jk
Summary:      Apache Jakarta Tomcat Webserver Adapter
URL:          http://jakarta.apache.org/
Vendor:       Apache Software Foundation
Packager:     OpenPKG
Distribution: OpenPKG
Class:        EVAL
Group:        Web
License:      Apache Software License 1.1
Version:      1.2.14
Release:      20050921

#   package options

#   list of sources
Source0:
http://www.apache.org/dist/jakarta/tomcat-connectors/jk/source/jk-%{version}/jakarta-tomcat-connectors-%{version}.1-src.tar.gz
Source1:      apache2-mod_jk.conf

#   build information
Prefix:       %{l_prefix}
BuildRoot:    %{l_buildroot}
BuildPreReq:  OpenPKG, openpkg >= 20040130, perl, gcc, make
PreReq:       OpenPKG, openpkg >= 20040130
BuildPreReq:  apache2so
PreReq:       apache2so
AutoReq:      no
AutoReqProv:  no

%description
    Apache Jakarta Tomcat webserver adapter mod_jk is a glue code
between the
    Apache HTTP server and Apache Tomcat. This package contains the
    mod_jk connector for Apache 2 only.

%track
    prog tomcat-adapter = {
        version   = %{version}
        url       =
http://www.apache.org/dist/jakarta/tomcat-connectors/jk/source/
        regex     = (jk-\d+\.\d+\.\d+)
        url       =
http://www.apache.org/dist/jakarta/tomcat-connectors/jk/source/__NEWVER__/
        regex     = jakarta-tomcat-connectors-(__VER__)-src\.tar\.gz
    }

%prep
    %setup -q -n jakarta-tomcat-connectors-%{version}.1-src

%build
    ( cd jk/native
      export CC="%{l_cc}"
      export CFLAGS="%{l_cflags -O}"
      export CPPFLAGS="%{l_cppflags}"
      export LDFLAGS="%{l_ldflags}"
      ./configure \
          --prefix=%{l_prefix} \
          --with-apxs=%{l_prefix}/sbin/apxs
      %{l_make} %{l_mflags} LIBTOOL=$PWD/libtool
    ) || exit $?

%install
    rm -rf $RPM_BUILD_ROOT

    #   create installation tree
    %{l_shtool} mkdir -f -p -m 755 \
        $RPM_BUILD_ROOT%{l_prefix}/etc/apache2-mod_jk \
        $RPM_BUILD_ROOT%{l_prefix}/libexec/apache2-mod_jk \
        $RPM_BUILD_ROOT%{l_prefix}/var/apache2-mod_jk

    #   install config
    %{l_shtool} install -c -m 644 %{l_value -s -a} \
        %{SOURCE apache2-mod_jk.conf} \
        $RPM_BUILD_ROOT%{l_prefix}/etc/apache2-mod_jk/

    #   install mod_jk DSO
    %{l_shtool} install -c -m 755 \
        jk/native/apache-2.0/mod_jk.so \
        $RPM_BUILD_ROOT%{l_prefix}/libexec/apache2-mod_jk/mod_jk.so

    #   determine installation files
    %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \
        %{l_files_std} \
        '%config %{l_prefix}/etc/apache2-mod_jk/*'

%files -f files

%clean
    rm -rf $RPM_BUILD_ROOT

------- END OF SPEC -------------

my changes to the original spec-file were:
- change the package-name to apache2-mod_jk
- use just the connector-package from apache, not the whole tomcat-package.
- set the same compiler/linker-environment as in apache2.spec before the
configure-call. without got some error-messages saying something about
"tagged versions". i didn't understand this at all, but some
code-sniffing and try-and-error lead to this solution.
- remove the apache-1.3-specific build-code
- remove the not needed dependencies
- change the dependency from apache to apache2so, which is the name i
gave my modified apache2-package. in case of my changes would become
part of the openpkg-apache2-package, it would be necessary to ensure
that the apache2 was build with "with_shared_core=yes".

I was also able to build an apache2 with static linked mod_jk --
unfortunately not as an openpkg-rpm. For this, it was necessary to:
1. build apache2
2. build mod_jk and modifiy apache2-source-tree
3. rebuild apache2
Since I didn't see a way, how to do this in a package external to the
core apache2-package, i preferred the solution with the DSO. On the
other hand, if mod_jk would be an build-option of apache2-package this
would allow allow a smoother integration of the mod_jk-configuration.
but this was to complicated for my basic understanding of rpm.spec-files.


I have to admit, that I don't understand deeply, what i did here (i'm
still an openpkg novice, and not a specialist in unix-build-prcesses at
all), and most of it is the result of try-and-error. But maybe it helps
some other openpkg-guru to build a correct package for apache2 with
mod_jk-support.
Since i don't know how to configure and use the %track-section in the
spec file, you should give it a close look, in case you want to use it.


Hope that helps others, who, like me, try to use apache2/java/tomcat in
an openpkg environment.

andi

______________________________________________________________________
The OpenPKG Project                                    www.openpkg.org
User Communication List                      openpkg-users@openpkg.org

Reply via email to