# Debian bootc-image-builder Development Plan

## Project Overview

Create a Debian equivalent of the Fedora bootc-image-builder that can build bootable disk images from Debian bootc containers. The tool will adapt the existing architecture to work with the APT/DEB package management system while maintaining compatibility with the same output formats and functionality.

## Goals

1. **Primary Goal**: Create a functional Debian bootc-image-builder for Debian 13 (Trixie)
2. **Secondary Goal**: Implement flexible configuration system to avoid hardcoded values
3. **Tertiary Goal**: Maintain compatibility with existing bootc ecosystem
4. **Focus**: Initially target only Debian 13 (Trixie) for development and testing

## Architecture Adaptation

### Core Components to Adapt

1. **Package Management System**
   - Replace DNF/RPM with APT/DEB
   - Adapt package resolution logic
   - Update repository handling

2. **Distribution Definitions**
   - Create Debian-specific package lists for Trixie
   - Adapt YAML structure for Debian packages
   - Focus on Debian 13 (Trixie) initially

3. **Container Base Images**
   - Replace Fedora base with Debian Trixie
   - Update package installation commands (dnf -> apt)
   - Adapt container build process
   - Use debian-forge packages (bootc, apt-ostree, osbuild)

4. **Configuration System**
   - Implement flexible registry configuration
   - Create version mapping system
   - Add container naming templates

## Implementation Phases

### Phase 1: Foundation Setup
**Duration**: 1-2 weeks
**Priority**: High

1. **Project Structure Setup**
   - Create `bib/cmd/debian-bootc-image-builder/` directory
   - Set up Go module with Debian-specific dependencies
   - Create basic project structure

2. **Configuration System Implementation**
   - Implement `.config/registry.yaml` configuration system
   - Create configuration loading and validation
   - Add support for multiple registry environments

3. **Basic CLI Framework**
   - Adapt main.go for Debian-specific naming
   - Update help text and documentation
   - Implement basic command structure

### Phase 2: Package Management Integration
**Duration**: 2-3 weeks
**Priority**: High

1. **APT Integration**
   - Replace DNF solver with APT-based solution
   - Implement package dependency resolution
   - Create APT repository handling

2. **Package Cache Management**
   - Adapt `/rpmmd` volume to `/aptcache` or similar
   - Implement APT package caching
   - Handle package metadata storage

3. **Repository Configuration**
   - Support Debian repositories (main, contrib, non-free)
   - Add support for custom repositories
   - Implement repository priority handling

### Phase 3: Distribution Definitions
**Duration**: 1-2 weeks
**Priority**: High

1. **Debian Package Lists**
   - Create `debian-stable.yaml` (Trixie)
   - Create `debian-testing.yaml` (Forky)
   - Create `debian-unstable.yaml` (Sid)
   - Define package sets for different image types

2. **Package Definition Structure**
   - Adapt YAML structure for Debian packages
   - Support different package categories
   - Handle package version specifications

### Phase 4: Image Building Logic
**Duration**: 2-3 weeks
**Priority**: High

1. **Manifest Generation**
   - Adapt image.go for Debian-specific logic
   - Update partition table handling
   - Implement Debian-specific boot configuration

2. **Filesystem Support**
   - Support ext4, xfs, btrfs filesystems
   - Implement Debian-specific filesystem options
   - Handle boot partition configuration

3. **Kernel and Boot Configuration**
   - Adapt kernel options for Debian
   - Implement GRUB configuration
   - Handle UEFI/BIOS boot modes

### Phase 5: Container Build System
**Duration**: 1-2 weeks
**Priority**: Medium

1. **Containerfile Adaptation**
   - Replace Fedora base with Debian
   - Update package installation commands
   - Adapt build process for Debian

2. **Runtime Dependencies**
   - Identify required Debian packages
   - Update package installation lists
   - Test container build process

### Phase 6: Testing and Validation
**Duration**: 2-3 weeks
**Priority**: High

1. **Unit Testing**
   - Adapt existing Go tests
   - Create Debian-specific test cases
   - Test package resolution logic

2. **Integration Testing**
   - Test with real Debian bootc containers
   - Validate output image formats
   - Test different Debian versions

3. **End-to-End Testing**
   - Build and boot test images
   - Validate system functionality
   - Performance testing

### Phase 7: Documentation and Polish
**Duration**: 1-2 weeks
**Priority**: Medium

1. **Documentation**
   - Update README for Debian
   - Create usage examples
   - Document configuration options

2. **Error Handling**
   - Improve error messages
   - Add helpful troubleshooting info
   - Validate input parameters

## Debian-Forge Package Integration

The project will use packages from the debian-forge repository:

### Key Packages
1. **bootc**: Bootable container runtime (equivalent to Fedora's bootc)
2. **apt-ostree**: APT-based ostree implementation (equivalent to rpm-ostree)
3. **osbuild**: Image building tool (same name as Fedora version)

### Package Sources
- **Repository**: https://packages.debian-forge.org
- **Components**: main
- **Priority**: 400 (lower than main Debian repos)
- **Architecture**: Available for amd64, arm64, and other architectures

### Integration Strategy
- Use debian-forge as primary source for bootc-related packages
- Fall back to main Debian repositories for standard packages
- Handle package dependencies and conflicts appropriately

## Technical Challenges and Solutions

### Challenge 1: Package Management Differences
**Problem**: DNF and APT have different APIs and behaviors
**Solution**: 
- Create APT wrapper similar to dnfjson.Solver
- Implement package resolution using APT libraries
- Handle package metadata differently
- Integrate debian-forge repository for bootc packages

### Challenge 2: Repository Management
**Problem**: Debian repositories have different structure than Fedora
**Solution**:
- Implement Debian repository handling
- Support multiple repository types
- Handle repository priorities and pinning

### Challenge 3: Distribution Versioning
**Problem**: Debian uses codenames (stable, testing, unstable) vs numeric versions
**Solution**:
- Implement codename to version mapping
- Focus on Debian 13 (Trixie) initially
- Support both codename and numeric version inputs
- Handle version transitions (e.g., stable updates)

### Challenge 4: Boot Configuration
**Problem**: Debian may have different boot requirements
**Solution**:
- Research Debian boot requirements
- Adapt kernel options and boot configuration
- Test with different hardware configurations

## Configuration System Design

### Registry Configuration (`.config/registry.yaml`)
```yaml
registries:
  development:
    base_url: "git.raines.xyz"
    namespace: "debian"
    auth_required: true
    
  production:
    base_url: "docker.io"
    namespace: "debian"
    auth_required: false

active_registry: "development"

containers:
  bootc_base: "{registry}/{namespace}/debian-bootc:{version}"
  bootc_builder: "{registry}/{namespace}/bootc-image-builder:{tag}"
  
versions:
  debian:
    stable: "trixie"
    testing: "forky" 
    unstable: "sid"
```

### Benefits of Flexible Configuration
1. **Rapid Development**: Easy to switch between development and production
2. **Version Management**: Centralized version mapping
3. **Registry Flexibility**: Support multiple container registries
4. **Environment Adaptation**: Easy deployment in different environments

## File Structure Plan

```
bib/
├── cmd/
│   └── debian-bootc-image-builder/     # Main Debian application
│       ├── main.go                     # Adapted main.go
│       ├── image.go                    # Debian-specific image logic
│       ├── apt.go                      # APT integration
│       ├── config.go                   # Configuration management
│       └── [other adapted files]
├── data/
│   └── defs/
│       ├── debian-stable.yaml          # Trixie packages
│       ├── debian-testing.yaml         # Forky packages
│       └── debian-unstable.yaml        # Sid packages
├── internal/
│   ├── distrodef/                      # Adapted distro definitions
│   ├── imagetypes/                     # Image type management
│   └── config/                         # Configuration system
└── .config/
    └── registry.yaml                   # Registry configuration
```

## Success Criteria

1. **Functional Requirements**
   - Build bootable images from Debian bootc containers
   - Support all output formats (qcow2, ami, vmdk, etc.)
   - Handle multiple Debian versions
   - Provide flexible configuration

2. **Quality Requirements**
   - Comprehensive test coverage
   - Clear documentation
   - Good error handling
   - Performance comparable to Fedora version

3. **Compatibility Requirements**
   - Compatible with existing bootc ecosystem
   - Support same CLI interface
   - Maintain configuration file compatibility

## Risk Mitigation

1. **Technical Risks**
   - **Risk**: APT integration complexity
   - **Mitigation**: Start with simple APT wrapper, iterate

2. **Compatibility Risks**
   - **Risk**: Breaking changes in Debian
   - **Mitigation**: Test with multiple Debian versions

3. **Performance Risks**
   - **Risk**: Slower than Fedora version
   - **Mitigation**: Profile and optimize critical paths

## Timeline Summary

- **Phase 1-2**: Foundation and Package Management (3-5 weeks)
- **Phase 3-4**: Distribution and Image Building (3-5 weeks)
- **Phase 5-6**: Container and Testing (3-5 weeks)
- **Phase 7**: Documentation and Polish (1-2 weeks)

**Total Estimated Duration**: 10-17 weeks

## Next Steps

1. Set up development environment
2. Create basic project structure
3. Implement configuration system
4. Begin APT integration work
5. Create initial Debian package definitions

This plan provides a structured approach to creating a Debian bootc-image-builder while maintaining the flexibility and functionality of the original Fedora version.
