Skip to content

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)

  1. Add --enable-fhs configure option
    ./configure --enable-fhs --prefix=/usr
    

When enabled: - Config files install to ${sysconfdir}/axis2c/ - Data files install to ${datadir}/axis2c/ - Use standard ${libdir} for libraries

  1. 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])

  1. 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+)

  1. XDG Base Directory support for user configs
  2. Check $XDG_CONFIG_HOME/axis2c/ for user-specific config
  3. Falls back to ~/.config/axis2c/

  4. 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)
    

  5. 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)

  1. Update all documentation to show both layouts
  2. Create migration guide for existing deployments
  3. Update sample configurations for Apache httpd

Files Requiring Changes

Build System

  • configure.ac - Add FHS option and path variables
  • Makefile.am files - Use new path variables
  • Add axis2c.pc.in for pkg-config

Source Code

  • util/include/platforms/unix/axutil_unix.h
  • util/include/platforms/windows/axutil_windows.h
  • util/src/log.c - Path resolution logic
  • src/core/deployment/dep_engine.c - Config file lookup
  • src/core/deployment/conf_init.c - Repository path logic

Documentation

  • docs/userguide/json-httpd-h2-userguide.md
  • docs/HTTP2_*.md files
  • 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)

References