blob: fc94a37de81d07331e78803903fe8f44d5b7d25e [file] [view]
# 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](https://issues.apache.org/jira/browse/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**
```bash
./configure --enable-fhs --prefix=/usr
```
When enabled:
- Config files install to `${sysconfdir}/axis2c/`
- Data files install to `${datadir}/axis2c/`
- Use standard `${libdir}` for libraries
2. **Make default paths configurable at build time**
Update `configure.ac`:
```m4
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])
```
3. **Update platform headers**
In `util/include/platforms/unix/axutil_unix.h`:
```c
#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**
- Check `$XDG_CONFIG_HOME/axis2c/` for user-specific config
- Falls back to `~/.config/axis2c/`
2. **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)
```
3. **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
- [Filesystem Hierarchy Standard 3.0](https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html)
- [Debian Policy Manual - File System Structure](https://www.debian.org/doc/debian-policy/ch-opersys.html)
- [XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html)
- [AXIS2C-1340: FHS Compliance Issue](https://issues.apache.org/jira/browse/AXIS2C-1340)