Packaging Axis2/C for Linux Distributions¶
This document outlines the requirements and roadmap for packaging Axis2/C for official inclusion in Linux distributions like Debian and Ubuntu.
Current Status¶
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.
Filesystem Hierarchy Standard (FHS) Requirements¶
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
Implementation Roadmap¶
Phase 1: Build System Changes (2.0.1)¶
- Add
--enable-fhsconfigure option
When enabled:
- Config files install to ${sysconfdir}/axis2c/
- Data files install to ${datadir}/axis2c/
- Use standard ${libdir} for libraries
- Make 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
Phase 2: Runtime Improvements (2.0.1+)¶
- XDG Base Directory support for user configs
- Check
$XDG_CONFIG_HOME/axis2c/for user-specific config -
Falls back to
~/.config/axis2c/ -
Improved path resolution order
-
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@
Phase 3: Documentation and Migration (2.0.1)¶
- Update all documentation to show both layouts
- Create migration guide for existing deployments
- Update sample configurations for Apache httpd
Files Requiring Changes¶
Build System¶
configure.ac- Add FHS option and path variablesMakefile.amfiles - Use new path variables- Add
axis2c.pc.infor pkg-config
Source Code¶
util/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 logic
Documentation¶
docs/userguide/json-httpd-h2-userguide.mddocs/HTTP2_*.mdfiles- Sample Apache configurations
- README.md
Debian Package Structure (Target)¶
axis2c/
├── 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/
Testing Checklist¶
Before releasing FHS support:
- [ ] Standalone HTTP server works with FHS paths
- [ ] Apache module loads correctly
- [ ] Client applications find config files
- [ ] Log files created in correct location
- [ ] Services can be deployed and discovered
- [ ] Modules can be loaded
- [ ] SSL/TLS certificates found correctly
- [ ] Backward compatibility with AXIS2C_HOME
- [ ] Build and install with
--enable-fhs --prefix=/usr - [ ] Build and install with legacy layout (no --enable-fhs)