This document outlines the requirements and roadmap for packaging Axis2/C for official inclusion in Linux distributions like Debian and Ubuntu.
JIRA: AXIS2C-1340 Target: 2.0.1 release
Axis2/C currently uses a self-contained installation layout with a custom prefix (/usr/local/axis2c by default). While this works well for standalone deployments, it does not comply with the Filesystem Hierarchy Standard (FHS) required by Debian, Ubuntu, and other Linux distributions.
For official Debian/Ubuntu package inclusion, software must follow the FHS:
| Content Type | FHS Location | Current Axis2/C |
|---|---|---|
| Binaries | /usr/bin | ${prefix}/bin |
| Libraries | /usr/lib/<multiarch> | ${prefix}/lib |
| Config files | /etc/axis2c/ | ${prefix}/axis2.xml |
| Shared data | /usr/share/axis2c/ | ${prefix}/ |
| Services | /usr/share/axis2c/services/ | ${prefix}/services/ |
| Modules | /usr/share/axis2c/modules/ | ${prefix}/modules/ |
| Log files | /var/log/axis2c/ | ${prefix}/logs/ |
| Runtime data | /var/lib/axis2c/ | N/A |
Reference: https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html
Add --enable-fhs configure option
./configure --enable-fhs --prefix=/usr
When enabled:
${sysconfdir}/axis2c/${datadir}/axis2c/${libdir} for librariesMake default paths configurable at build time
Update configure.ac:
AC_ARG_ENABLE([fhs], [AS_HELP_STRING([--enable-fhs], [Use FHS-compliant paths])], [enable_fhs=$enableval], [enable_fhs=no]) if test "x$enable_fhs" = "xyes"; then AC_DEFINE([AXIS2_FHS_LAYOUT], [1], [Use FHS directory layout]) axis2_confdir='${sysconfdir}/axis2c' axis2_datadir='${datadir}/axis2c' else axis2_confdir='${prefix}' axis2_datadir='${prefix}' fi AC_SUBST([axis2_confdir]) AC_SUBST([axis2_datadir])
Update platform headers
In util/include/platforms/unix/axutil_unix.h:
#ifdef AXIS2_FHS_LAYOUT #define AXIS2_PLATFORM_LOG_PATH "/var/log/axis2c/axis2.log" #define AXIS2_CONFIGURATION_RESOURCE "/etc/axis2c/axis2.xml" #else #define AXIS2_PLATFORM_LOG_PATH "/usr/local/axis2/log/axutil_log" #define AXIS2_CONFIGURATION_RESOURCE "/usr/local/axis2/axis2.xml" #endif
XDG Base Directory support for user configs
$XDG_CONFIG_HOME/axis2c/ for user-specific config~/.config/axis2c/Improved path resolution order
1. Command-line argument (-r repo_path) 2. AXIS2C_HOME environment variable 3. XDG_CONFIG_HOME/axis2c/ (user config) 4. /etc/axis2c/ (system config, FHS mode) 5. Compiled-in default (legacy mode)
pkg-config support
Create axis2c.pc.in:
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
Name: Axis2/C
Description: Apache Axis2/C Web Services Engine
Version: @VERSION@
Libs: -L${libdir} -laxis2_engine -laxis2_axiom -laxutil
Cflags: -I${includedir}/axis2-@VERSION@
configure.ac - Add FHS option and path variablesMakefile.am files - Use new path variablesaxis2c.pc.in for pkg-configutil/include/platforms/unix/axutil_unix.hutil/include/platforms/windows/axutil_windows.hutil/src/log.c - Path resolution logicsrc/core/deployment/dep_engine.c - Config file lookupsrc/core/deployment/conf_init.c - Repository path logicdocs/userguide/json-httpd-h2-userguide.mddocs/HTTP2_*.md filesaxis2c/
├── DEBIAN/
│ ├── control
│ ├── conffiles # Lists /etc/axis2c/* as config files
│ └── postinst # Creates /var/log/axis2c, sets permissions
├── etc/
│ └── axis2c/
│ └── axis2.xml
├── usr/
│ ├── bin/
│ │ └── axis2_http_server
│ ├── include/
│ │ └── axis2-2.0/
│ ├── lib/
│ │ └── x86_64-linux-gnu/
│ │ ├── libaxis2_engine.so.2.0.0
│ │ ├── libaxis2_axiom.so.2.0.0
│ │ └── ...
│ └── share/
│ ├── axis2c/
│ │ ├── services/
│ │ └── modules/
│ └── doc/
│ └── axis2c/
└── var/
└── log/
└── axis2c/
Before releasing FHS support:
--enable-fhs --prefix=/usr