first commit
This commit is contained in:
commit
7584207f76
72 changed files with 12801 additions and 0 deletions
369
docs/ignition-vs-calamares.md
Normal file
369
docs/ignition-vs-calamares.md
Normal file
|
|
@ -0,0 +1,369 @@
|
|||
# Ignition vs Calamares: Comparison for Debian Bootc-Image-Builder
|
||||
|
||||
## Overview
|
||||
|
||||
This document compares Ignition and Calamares as potential approaches for implementing installer support in our Debian bootc-image-builder project. Both offer different advantages and trade-offs for container-first installation.
|
||||
|
||||
## Executive Summary
|
||||
|
||||
| Aspect | Winner | Reasoning |
|
||||
|--------|--------|-----------|
|
||||
| **Container Integration** | Ignition | Native container support, designed for immutable infrastructure |
|
||||
| **Modern Architecture** | Ignition | JSON-based, declarative, cloud-native |
|
||||
| **User Experience** | Calamares | Graphical interface, familiar to users |
|
||||
| **Debian Integration** | Calamares | Already used in Debian, better ecosystem fit |
|
||||
| **Development Complexity** | Calamares | Existing framework, less custom development |
|
||||
| **Flexibility** | Ignition | More modular, easier to extend |
|
||||
|
||||
## Detailed Comparison
|
||||
|
||||
### 1. Architecture and Design Philosophy
|
||||
|
||||
#### Ignition
|
||||
- **Declarative**: Describes desired system state
|
||||
- **Immutable**: Configuration applied once, system remains unchanged
|
||||
- **Container-first**: Designed for modern container workloads
|
||||
- **JSON-based**: Easy to generate programmatically
|
||||
- **Cloud-native**: Optimized for infrastructure automation
|
||||
|
||||
#### Calamares
|
||||
- **Interactive**: User-driven configuration process
|
||||
- **Mutable**: Allows system modifications after installation
|
||||
- **Distribution-agnostic**: Works across different Linux distributions
|
||||
- **C++/Python**: Mixed language implementation
|
||||
- **Desktop-focused**: Originally designed for desktop installations
|
||||
|
||||
### 2. Container Integration
|
||||
|
||||
Based on analysis of Fedora's approaches, both Ignition and Calamares can effectively handle bootc installation:
|
||||
|
||||
#### Ignition (Fedora CoreOS Pattern)
|
||||
```json
|
||||
{
|
||||
"systemd": {
|
||||
"units": [
|
||||
{
|
||||
"name": "bootc-install.service",
|
||||
"enabled": true,
|
||||
"contents": "[Unit]\nDescription=Install bootc container\n[Service]\nType=oneshot\nExecStart=/usr/bin/bootc install to-disk /dev/sda\n[Install]\nWantedBy=multi-user.target"
|
||||
}
|
||||
]
|
||||
},
|
||||
"storage": {
|
||||
"files": [
|
||||
{
|
||||
"path": "/etc/ostree/auth.json",
|
||||
"mode": 420,
|
||||
"contents": {
|
||||
"source": "data:text/plain;base64,ewogICJhdXRocyI6IHsKICAgICJxdWF5LmlvIjogewogICAgICAiYXV0aCI6ICI8eW91ciBzZWNyZXQgaGVyZT4iCiAgICB9CiAgfQp9"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Advantages:**
|
||||
- **Native container support** - no special directives needed
|
||||
- **Systemd integration** - seamless service management
|
||||
- **Registry authentication** - built-in support via JSON config
|
||||
- **Immutable design** - configuration applied once
|
||||
|
||||
#### Calamares (Hybrid Approach)
|
||||
```python
|
||||
# Can implement multiple patterns from Fedora analysis
|
||||
class BootcInstaller:
|
||||
def __init__(self, config):
|
||||
self.approach = config.get("installationApproach", "systemd")
|
||||
# Supports: "kickstart", "ignition", "systemd"
|
||||
|
||||
def run(self):
|
||||
if self.approach == "kickstart":
|
||||
return self.install_via_kickstart() # Fedora COSMIC Atomic pattern
|
||||
elif self.approach == "ignition":
|
||||
return self.install_via_ignition() # Fedora CoreOS pattern
|
||||
else:
|
||||
return self.install_via_systemd() # Direct systemd approach
|
||||
```
|
||||
|
||||
**Advantages:**
|
||||
- **Multiple patterns** - can use kickstart, Ignition, or systemd approaches
|
||||
- **User interface** - graphical configuration for all patterns
|
||||
- **Fedora compatibility** - leverages proven Fedora patterns
|
||||
- **Flexible implementation** - choose best approach per use case
|
||||
|
||||
### 3. User Experience
|
||||
|
||||
#### Ignition
|
||||
- **No GUI** - configuration file only
|
||||
- **Technical users** - requires JSON knowledge
|
||||
- **Automation-friendly** - perfect for infrastructure as code
|
||||
- **Learning curve** - steep for non-technical users
|
||||
|
||||
#### Calamares
|
||||
- **Graphical interface** - familiar installation experience
|
||||
- **User-friendly** - guided configuration process
|
||||
- **Progress indicators** - visual feedback
|
||||
- **Error handling** - user-friendly error messages
|
||||
|
||||
### 4. Development Complexity
|
||||
|
||||
Based on Fedora pattern analysis, the complexity assessment has changed:
|
||||
|
||||
#### Ignition
|
||||
**Implementation Requirements:**
|
||||
1. **JSON generation** - create Ignition configs from user input
|
||||
2. **Container integration** - systemd services for bootc installation
|
||||
3. **Registry handling** - authentication and configuration
|
||||
4. **Validation** - JSON schema validation
|
||||
5. **Testing** - container installation workflows
|
||||
|
||||
**Estimated Effort:** High (3-6 months)
|
||||
- Custom JSON generation logic
|
||||
- Container installation integration
|
||||
- Registry authentication handling
|
||||
- Comprehensive testing
|
||||
- **Limited Debian ecosystem support**
|
||||
|
||||
#### Calamares (Updated Assessment)
|
||||
**Implementation Requirements:**
|
||||
1. **Hybrid module** - Support kickstart, Ignition, and systemd patterns
|
||||
2. **UI components** - configuration screens for all approaches
|
||||
3. **Pattern integration** - leverage proven Fedora patterns
|
||||
4. **Framework integration** - with existing Calamares ecosystem
|
||||
5. **Testing** - comprehensive pattern testing
|
||||
|
||||
**Estimated Effort:** Medium (2-4 months) - **Reduced due to Fedora patterns**
|
||||
- **Leverage Fedora patterns** - proven `ostreecontainer` and Ignition approaches
|
||||
- **Existing framework** - Calamares module system
|
||||
- **Reuse Fedora code** - adapt PyKickstart and Ignition patterns
|
||||
- **Standard testing** - Calamares testing approach
|
||||
- **Better Debian integration** - native ecosystem support
|
||||
|
||||
### 5. Debian Ecosystem Integration
|
||||
|
||||
#### Ignition
|
||||
**Challenges:**
|
||||
- **Not native to Debian** - primarily used in Fedora CoreOS
|
||||
- **Limited adoption** - few Debian-based distributions use it
|
||||
- **Tooling gaps** - limited Debian-specific tooling
|
||||
- **Community support** - smaller Debian community
|
||||
|
||||
**Advantages:**
|
||||
- **Modern approach** - future-proof design
|
||||
- **Cloud integration** - works well with modern infrastructure
|
||||
- **Immutable design** - aligns with container philosophy
|
||||
|
||||
#### Calamares
|
||||
**Advantages:**
|
||||
- **Debian native** - used in Debian and derivatives
|
||||
- **Mature ecosystem** - extensive module library
|
||||
- **Community support** - active Debian community
|
||||
- **Documentation** - well-documented for Debian
|
||||
|
||||
**Challenges:**
|
||||
- **Package-based focus** - originally designed for traditional installations
|
||||
- **Container adaptation** - requires significant customization
|
||||
- **Legacy design** - not originally container-focused
|
||||
|
||||
### 6. Technical Implementation
|
||||
|
||||
Based on Fedora analysis, both approaches can leverage proven patterns:
|
||||
|
||||
#### Ignition Approach (Fedora CoreOS Pattern)
|
||||
```json
|
||||
{
|
||||
"ignition": {
|
||||
"version": "3.4.0"
|
||||
},
|
||||
"storage": {
|
||||
"disks": [disk_config],
|
||||
"filesystems": [fs_config],
|
||||
"files": [
|
||||
{
|
||||
"path": "/etc/ostree/auth.json",
|
||||
"mode": 420,
|
||||
"contents": {
|
||||
"source": "data:text/plain;base64,{{ auth_data }}"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"systemd": {
|
||||
"units": [
|
||||
{
|
||||
"name": "bootc-install.service",
|
||||
"enabled": true,
|
||||
"contents": "[Unit]\nDescription=Install bootc container\n[Service]\nType=oneshot\nExecStart=/usr/bin/bootc install to-disk /dev/sda\n[Install]\nWantedBy=multi-user.target"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Implementation Steps:**
|
||||
1. **Create Ignition generator** - convert user input to JSON
|
||||
2. **Implement container installation** - systemd service approach
|
||||
3. **Handle registry auth** - authentication configuration
|
||||
4. **Add validation** - JSON schema validation
|
||||
5. **Integrate with bootc** - container installation logic
|
||||
|
||||
#### Calamares Approach (Hybrid Pattern)
|
||||
```python
|
||||
# Can implement all three Fedora patterns
|
||||
class HybridBootcInstaller:
|
||||
def __init__(self, config):
|
||||
self.approach = config.get("installationApproach", "systemd")
|
||||
# Supports: "kickstart", "ignition", "systemd"
|
||||
|
||||
def run(self):
|
||||
if self.approach == "kickstart":
|
||||
return self.install_via_kickstart() # Fedora COSMIC Atomic
|
||||
elif self.approach == "ignition":
|
||||
return self.install_via_ignition() # Fedora CoreOS
|
||||
else:
|
||||
return self.install_via_systemd() # Direct approach
|
||||
|
||||
def install_via_kickstart(self):
|
||||
# Generate ostreecontainer directive
|
||||
kickstart = f"""ostreecontainer --url="{self.container_url}" \\
|
||||
--stateroot="{self.stateroot}" \\
|
||||
--remote="{self.remote}" \\
|
||||
--transport="{self.transport}"
|
||||
"""
|
||||
# Execute via anaconda
|
||||
subprocess.run(["anaconda", "--kickstart", "/tmp/bootc.ks"])
|
||||
|
||||
def install_via_ignition(self):
|
||||
# Generate Ignition JSON
|
||||
ignition_config = self.generate_ignition_config()
|
||||
# Execute via ignition
|
||||
subprocess.run(["ignition", "apply", "/tmp/bootc.ign"])
|
||||
```
|
||||
|
||||
**Implementation Steps:**
|
||||
1. **Create hybrid module** - support all Fedora patterns
|
||||
2. **Design UI screens** - configuration for all approaches
|
||||
3. **Implement pattern switching** - kickstart, Ignition, systemd
|
||||
4. **Leverage Fedora code** - adapt PyKickstart and Ignition patterns
|
||||
5. **Integrate with Calamares** - module registration and execution
|
||||
|
||||
### 7. Maintenance and Support
|
||||
|
||||
#### Ignition
|
||||
**Maintenance:**
|
||||
- **Custom implementation** - full control over code
|
||||
- **Upstream dependencies** - Ignition specification changes
|
||||
- **Container integration** - bootc compatibility
|
||||
- **Testing** - comprehensive test suite needed
|
||||
|
||||
**Support:**
|
||||
- **Limited community** - smaller Debian user base
|
||||
- **Documentation** - need to create Debian-specific docs
|
||||
- **Troubleshooting** - custom implementation issues
|
||||
|
||||
#### Calamares
|
||||
**Maintenance:**
|
||||
- **Framework updates** - follow Calamares development
|
||||
- **Module compatibility** - ensure module works with new versions
|
||||
- **Debian integration** - follow Debian packaging changes
|
||||
- **Testing** - standard Calamares testing approach
|
||||
|
||||
**Support:**
|
||||
- **Active community** - large Debian and Calamares community
|
||||
- **Existing documentation** - extensive Calamares docs
|
||||
- **Module ecosystem** - can leverage existing modules
|
||||
|
||||
### 8. Use Case Analysis
|
||||
|
||||
#### Ignition Best For:
|
||||
- **Infrastructure automation** - GitOps, CI/CD pipelines
|
||||
- **Cloud deployments** - AWS, GCP, Azure
|
||||
- **Immutable infrastructure** - container-first systems
|
||||
- **Technical users** - developers, system administrators
|
||||
- **Large-scale deployments** - hundreds of systems
|
||||
|
||||
#### Calamares Best For:
|
||||
- **Desktop installations** - user-friendly setup
|
||||
- **Mixed environments** - traditional and container systems
|
||||
- **End users** - non-technical users
|
||||
- **Small to medium deployments** - individual systems
|
||||
- **Debian ecosystem** - existing Debian users
|
||||
|
||||
### 9. Risk Assessment
|
||||
|
||||
#### Ignition Risks
|
||||
- **High complexity** - significant development effort
|
||||
- **Limited adoption** - smaller user base
|
||||
- **Learning curve** - steep for users
|
||||
- **Maintenance burden** - custom implementation
|
||||
- **Debian integration** - potential compatibility issues
|
||||
|
||||
#### Calamares Risks
|
||||
- **Container adaptation** - requires significant customization
|
||||
- **Legacy design** - not originally container-focused
|
||||
- **Framework dependency** - tied to Calamares development
|
||||
- **Performance** - may be slower than Ignition
|
||||
- **Complexity** - module development can be complex
|
||||
|
||||
### 10. Recommendation
|
||||
|
||||
## **Recommended Approach: Calamares with Hybrid Pattern Support**
|
||||
|
||||
### **Updated Reasoning (Based on Fedora Analysis):**
|
||||
1. **Debian ecosystem fit** - already used in Debian
|
||||
2. **User experience** - graphical interface for end users
|
||||
3. **Development efficiency** - leverage existing framework + Fedora patterns
|
||||
4. **Community support** - active Debian community
|
||||
5. **Flexibility** - can implement kickstart, Ignition, AND systemd approaches
|
||||
6. **Proven patterns** - leverage Fedora's `ostreecontainer` and Ignition implementations
|
||||
7. **Future-proof** - support multiple installation paradigms
|
||||
|
||||
### **Enhanced Implementation Strategy:**
|
||||
1. **Phase 1**: Create hybrid BootcModule supporting all Fedora patterns
|
||||
2. **Phase 2**: Implement kickstart pattern (Fedora COSMIC Atomic approach)
|
||||
3. **Phase 3**: Add Ignition pattern (Fedora CoreOS approach)
|
||||
4. **Phase 4**: Integrate systemd direct approach
|
||||
5. **Phase 5**: UI polish and comprehensive testing
|
||||
|
||||
### **Hybrid Pattern Benefits:**
|
||||
- **Kickstart compatibility** - works with existing Fedora tooling
|
||||
- **Ignition modernity** - JSON-based, cloud-native approach
|
||||
- **Systemd flexibility** - direct container installation
|
||||
- **User choice** - select best approach per use case
|
||||
- **Fedora compatibility** - leverage proven implementations
|
||||
|
||||
### **Key Implementation Insights:**
|
||||
- **Leverage PyKickstart** - adapt Fedora's `ostreecontainer` implementation
|
||||
- **Reuse Ignition patterns** - systemd services and JSON config
|
||||
- **Registry authentication** - use Fedora's `/etc/ostree/auth.json` approach
|
||||
- **Modular design** - easy to add new patterns in future
|
||||
|
||||
## Conclusion
|
||||
|
||||
Based on comprehensive analysis of Fedora's kickstart and Ignition approaches, **Calamares with hybrid pattern support is the optimal choice** for our Debian bootc-image-builder project:
|
||||
|
||||
### **Why Calamares Wins:**
|
||||
1. **Better Debian integration** - native ecosystem support
|
||||
2. **Superior user experience** - graphical interface for all patterns
|
||||
3. **Reduced development complexity** - leverage existing framework + Fedora patterns
|
||||
4. **Active community** - better support and documentation
|
||||
5. **Maximum flexibility** - support kickstart, Ignition, AND systemd approaches
|
||||
6. **Proven patterns** - leverage Fedora's production implementations
|
||||
7. **Future-proof** - easy to add new installation patterns
|
||||
|
||||
### **Key Innovation:**
|
||||
The hybrid approach allows Calamares to **combine the best of all worlds**:
|
||||
- **Kickstart compatibility** - works with existing Fedora tooling
|
||||
- **Ignition modernity** - JSON-based, cloud-native configuration
|
||||
- **Systemd flexibility** - direct container installation
|
||||
- **User choice** - select optimal approach per use case
|
||||
|
||||
### **Implementation Advantage:**
|
||||
By leveraging Fedora's proven patterns (`ostreecontainer` directive, Ignition JSON configs, systemd services), we can:
|
||||
- **Reduce development time** - reuse existing, tested code
|
||||
- **Ensure compatibility** - work with existing Fedora tooling
|
||||
- **Provide flexibility** - support multiple installation paradigms
|
||||
- **Future-proof** - easy to adapt to new patterns
|
||||
|
||||
The key is to implement Calamares with a **hybrid, container-first mindset**, creating a modern installation experience that bridges traditional package-based and container-based installations while leveraging the best patterns from both Fedora approaches.
|
||||
Loading…
Add table
Add a link
Reference in a new issue