255 lines
7.4 KiB
Markdown
255 lines
7.4 KiB
Markdown
# deb-bootc-compose
|
|
|
|
**Debian's equivalent to Fedora's Pungi compose system**
|
|
|
|
`deb-bootc-compose` is a Debian-native composition tool that orchestrates the creation of Debian bootc images from packages. It coordinates the entire compose process, similar to how Pungi coordinates Fedora's release process.
|
|
|
|
## What It Does
|
|
|
|
`deb-bootc-compose` serves as the **main orchestrator** for Debian's bootc ecosystem:
|
|
|
|
- **Package Coordination**: Ensures all release artifacts use identical package versions across variants
|
|
- **Multi-Artifact Generation**: Creates container images, disk images, and other bootc artifacts
|
|
- **Build Orchestration**: Coordinates with `deb-orchestrator` (Koji equivalent) and `deb-mock` (Mock equivalent)
|
|
- **OSTree Integration**: Orchestrates bootc image creation through apt-ostree
|
|
- **Variant Management**: Handles different Debian variants (minimal, server, desktop, etc.)
|
|
|
|
## Architecture
|
|
|
|
The tool follows a **phase-based architecture** inspired by Pungi:
|
|
|
|
```
|
|
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
|
│ deb-bootc- │ │ deb-orchestrator│ │ deb-mock │
|
|
│ compose │ │ (Koji equiv) │ │ (Mock equiv) │
|
|
│ Orchestrator │ │ Build System │ │Build Environment│
|
|
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
|
│ │ │
|
|
│ Coordinates │ Manages │ Creates
|
|
│ entire process │ package building │ isolated
|
|
│ │ at scale │ environments
|
|
```
|
|
|
|
### Core Phases
|
|
|
|
1. **init**: Initialize compose environment
|
|
2. **gather**: Download and organize packages
|
|
3. **build**: Build packages if needed
|
|
4. **ostree**: Create OSTree commits
|
|
5. **output**: Generate output artifacts
|
|
6. **cleanup**: Clean up temporary files
|
|
|
|
## Quick Start
|
|
|
|
### Prerequisites
|
|
|
|
- Go 1.21 or later
|
|
- Debian-based system (for development)
|
|
- Basic understanding of Debian packaging
|
|
|
|
### Installation
|
|
|
|
```bash
|
|
# Clone the repository
|
|
git clone https://github.com/debian/deb-bootc-compose.git
|
|
cd deb-bootc-compose
|
|
|
|
# Install dependencies
|
|
make deps
|
|
|
|
# Build the binary
|
|
make build
|
|
|
|
# Run with help
|
|
./build/deb-bootc-compose --help
|
|
```
|
|
|
|
### Basic Usage
|
|
|
|
```bash
|
|
# Run a compose with a treefile
|
|
./build/deb-bootc-compose \
|
|
--treefile examples/debian-bootc-minimal.json \
|
|
--output ./compose-output \
|
|
--config configs/compose.yaml
|
|
```
|
|
|
|
## Configuration
|
|
|
|
### Compose Configuration
|
|
|
|
The main configuration file (`compose.yaml`) controls:
|
|
|
|
- **Compose settings**: Release, variants, architectures
|
|
- **Build system**: sbuild, debootstrap integration
|
|
- **OSTree settings**: Repository mode, signing
|
|
- **Output formats**: Container, disk image, chunked OCI
|
|
- **Integration**: deb-orchestrator connection settings
|
|
|
|
### Treefiles
|
|
|
|
Treefiles (JSON manifests) define what gets built:
|
|
|
|
- **Package lists**: Required, optional, recommended packages
|
|
- **Variants**: Different flavors (minimal, server, desktop)
|
|
- **Architectures**: Target CPU architectures
|
|
- **Repositories**: Package sources
|
|
- **Build settings**: Build system configuration
|
|
|
|
Example treefile structure:
|
|
```json
|
|
{
|
|
"name": "debian-bootc-minimal",
|
|
"version": "13",
|
|
"release": "bookworm",
|
|
"packages": {
|
|
"required": ["linux-image-amd64", "systemd", "ostree", "bootc"]
|
|
},
|
|
"architecture": ["amd64", "arm64"],
|
|
"variants": [
|
|
{
|
|
"name": "minimal",
|
|
"description": "Minimal base system"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## Development
|
|
|
|
### Project Structure
|
|
|
|
```
|
|
deb-bootc-compose/
|
|
├── cmd/ # Command-line interfaces
|
|
│ ├── compose/ # Main compose command
|
|
│ └── cli/ # CLI utilities
|
|
├── internal/ # Internal packages
|
|
│ ├── compose/ # Core compose engine
|
|
│ ├── config/ # Configuration management
|
|
│ ├── ostree/ # OSTree integration
|
|
│ └── build/ # Build system interface
|
|
├── pkg/ # Public packages
|
|
├── configs/ # Configuration files
|
|
├── examples/ # Example treefiles
|
|
└── docs/ # Documentation
|
|
```
|
|
|
|
### Building
|
|
|
|
```bash
|
|
# Build everything
|
|
make all
|
|
|
|
# Build specific components
|
|
make build # Main binary
|
|
make cli # CLI tool
|
|
|
|
# Development helpers
|
|
make test # Run tests
|
|
make fmt # Format code
|
|
make lint # Lint code
|
|
make clean # Clean build artifacts
|
|
```
|
|
|
|
### Testing
|
|
|
|
```bash
|
|
# Run all tests
|
|
make test
|
|
|
|
# Run tests with coverage
|
|
make test-coverage
|
|
|
|
# Run with sample treefile
|
|
make run-sample
|
|
```
|
|
|
|
## Integration
|
|
|
|
### With deb-orchestrator
|
|
|
|
`deb-bootc-compose` integrates with `deb-orchestrator` for:
|
|
|
|
- **Package management**: Downloading packages from build system
|
|
- **Build coordination**: Ensuring package availability before compose
|
|
- **Metadata integration**: Using build metadata for versioning
|
|
|
|
### With deb-mock
|
|
|
|
`deb-bootc-compose` can use `deb-mock` for:
|
|
|
|
- **Build environment creation**: Isolated chroot environments
|
|
- **Package installation**: Installing build dependencies
|
|
- **Environment isolation**: Reproducible builds
|
|
|
|
## Status
|
|
|
|
**Current Status**: Phase 1 - Foundation Development
|
|
|
|
- ✅ **Core engine**: Basic compose engine implemented
|
|
- ✅ **Treefile parser**: JSON-based configuration system
|
|
- ✅ **Phase management**: Simple phase execution system
|
|
- ✅ **Configuration**: YAML-based configuration system
|
|
- 🔄 **OSTree integration**: Placeholder implementation
|
|
- 🔄 **Build system**: Placeholder implementation
|
|
- ❌ **Integration**: Not yet integrated with other tools
|
|
|
|
## Roadmap
|
|
|
|
See the main project [TODO.md](../TODO.md) for the complete development roadmap.
|
|
|
|
### Phase 1 (Months 1-6): Foundation
|
|
- Core compose engine working
|
|
- Basic treefile parsing and validation
|
|
- OSTree integration functional
|
|
- Container output working
|
|
|
|
### Phase 2 (Months 7-10): Integration
|
|
- Deep integration with deb-orchestrator and deb-mock
|
|
- Advanced features and optimization
|
|
- Production readiness features
|
|
|
|
### Phase 3 (Months 11-14): Production
|
|
- Security audit and hardening
|
|
- Performance optimization
|
|
- Community integration
|
|
|
|
### Phase 4 (Months 15-18): Ecosystem
|
|
- Debian Atomic and Particle-OS variants
|
|
- Advanced use cases
|
|
- Community adoption
|
|
|
|
## Contributing
|
|
|
|
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
|
|
|
|
### Development Setup
|
|
|
|
```bash
|
|
# Set up development environment
|
|
make dev-setup
|
|
|
|
# Install development tools
|
|
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
|
|
```
|
|
|
|
## License
|
|
|
|
This project is licensed under the same terms as Debian (GPL-2+).
|
|
|
|
## Related Projects
|
|
|
|
- **deb-orchestrator**: Debian's equivalent to Fedora's Koji build system
|
|
- **deb-mock**: Debian's equivalent to Fedora's Mock build environment manager
|
|
- **deb-bootc-compose**: This project - the main orchestrator
|
|
|
|
## Support
|
|
|
|
- **Issues**: [GitHub Issues](https://github.com/debian/deb-bootc-compose/issues)
|
|
- **Discussions**: [GitHub Discussions](https://github.com/debian/deb-bootc-compose/discussions)
|
|
- **Documentation**: [Project Wiki](https://github.com/debian/deb-bootc-compose/wiki)
|
|
|
|
---
|
|
|
|
**Part of Debian's complete bootc ecosystem** - building Debian's answer to Fedora's Pungi-Koji-Mock ecosystem.
|