Major milestone: Complete apt-ostree bootc compatibility and OCI integration

-  Real package installation (replaced mock installation)
-  Real OSTree commit creation from installed packages
-  OCI image creation from both commits and rootfs
-  Full bootc compatibility with proper labels
-  Comprehensive test suite (test-bootc-apt-ostree.sh)
-  Container tool validation (skopeo, podman)
-  Updated compatibility reports for Ubuntu Questing
-  Fixed OCI schema version and field naming issues
-  Temporary directory lifecycle fixes
-  Serde rename attributes for OCI JSON compliance

Ready for Aurora-style workflow deployment!
This commit is contained in:
robojerk 2025-07-20 21:06:44 +00:00
parent 0ba99d6195
commit d295f9bb4d
171 changed files with 15230 additions and 26739 deletions

917
.notes/cli/apt-ostree.md Normal file
View file

@ -0,0 +1,917 @@
# apt-ostree CLI Analysis
## Executive Summary
apt-ostree provides a 100% compatible command-line interface with rpm-ostree, serving as the primary user interface for the Debian/Ubuntu hybrid image/package system. The CLI maintains identical user experience while adapting the underlying functionality to the APT/DEB ecosystem.
## CLI Architecture
### Command Structure
apt-ostree follows the exact same hierarchical command structure as rpm-ostree:
```
apt-ostree [GLOBAL_OPTIONS] COMMAND [COMMAND_OPTIONS] [ARGUMENTS]
```
### Global Options
- `--version`: Show version information
- `--help`: Show help information
- `--verbose`: Enable verbose output
- `--quiet`: Suppress output
- `--json`: Output in JSON format
- `--sysroot=PATH`: Specify system root path
### 100% Compatibility
All commands, options, and output formats are identical to rpm-ostree, ensuring:
- **Identical User Experience**: Same commands and options
- **Familiar Interface**: No learning curve for rpm-ostree users
- **Consistent Behavior**: Same behavior across systems
- **Easy Migration**: Seamless migration from rpm-ostree
## Core Commands (21/21 - 100% Complete)
### 1. Status Command
**Purpose**: Display system status and deployment information
**Usage**:
```bash
apt-ostree status [OPTIONS]
```
**Options**:
- `--json`: Output in JSON format
- `--booted`: Show only booted deployment
- `--pending`: Show only pending deployment
**Output Format**:
```
State: idle
Deployments:
* ostree://debian:debian/amd64/ostree
Version: 12.20231201.0 (2023-12-01 12:34:56)
BaseCommit: abc123def456...
GPGSignature: Valid signature by 1234567890ABCDEF
LayeredPackages: vim git
ostree://debian:debian/amd64/ostree
Version: 12.20231115.0 (2023-11-15 10:20:30)
BaseCommit: def456ghi789...
GPGSignature: Valid signature by 1234567890ABCDEF
LayeredPackages: vim
```
**Implementation**:
- Queries OSTree sysroot for deployment information
- Displays current and available deployments
- Shows layered packages and version information
- Indicates booted and pending deployments
- Uses APT database for package information
### 2. Upgrade Command
**Purpose**: Upgrade system to latest version
**Usage**:
```bash
apt-ostree upgrade [OPTIONS]
```
**Options**:
- `--check`: Check for updates without upgrading
- `--download-only`: Download updates without installing
- `--reboot`: Automatically reboot after upgrade
- `--allow-downgrade`: Allow downgrading packages
- `--unchanged-exit-77`: Exit with 77 if no changes
**Execution Flow**:
1. Check for available updates via APT
2. Download new packages via APT
3. Create new deployment
4. Install updates
5. Update boot configuration
6. Optionally reboot
**Implementation**:
- Uses libapt-pkg to check for updates
- Downloads packages via APT
- Creates new OSTree commit with updates
- Manages deployment switching
- Handles rollback on failure
### 3. Rollback Command
**Purpose**: Rollback to previous deployment
**Usage**:
```bash
apt-ostree rollback [OPTIONS]
```
**Options**:
- `--reboot`: Automatically reboot after rollback
- `--not-as-default`: Don't set as default boot option
**Execution Flow**:
1. Identify previous deployment
2. Switch to previous deployment
3. Update boot configuration
4. Optionally reboot
**Implementation**:
- Queries OSTree for available deployments
- Switches to previous deployment
- Updates GRUB/systemd-boot configuration
- Manages boot order
### 4. Deploy Command
**Purpose**: Deploy specific version or commit
**Usage**:
```bash
apt-ostree deploy [OPTIONS] [REF]
```
**Options**:
- `--reboot`: Automatically reboot after deployment
- `--not-as-default`: Don't set as default boot option
- `--os=OSNAME`: Specify operating system name
**Examples**:
```bash
# Deploy specific version
apt-ostree deploy debian:debian/amd64/ostree/12.20231201.0
# Deploy specific commit
apt-ostree deploy abc123def456...
# Deploy with reboot
apt-ostree deploy --reboot debian:debian/amd64/ostree/12.20231201.0
```
**Implementation**:
- Validates deployment reference
- Downloads deployment if needed
- Switches to specified deployment
- Updates boot configuration
### 5. Install Command
**Purpose**: Install packages as layers
**Usage**:
```bash
apt-ostree install [OPTIONS] PACKAGES...
```
**Options**:
- `--reboot`: Automatically reboot after installation
- `--allow-inactive`: Allow installing on inactive deployment
- `--idempotent`: Don't error if packages already installed
**Examples**:
```bash
# Install single package
apt-ostree install vim
# Install multiple packages
apt-ostree install vim git build-essential
# Install with reboot
apt-ostree install --reboot firefox
```
**Execution Flow**:
1. Resolve package dependencies via APT
2. Download packages via APT
3. Create new deployment with packages
4. Install packages in new deployment
5. Update boot configuration
6. Optionally reboot
**Implementation**:
- Uses libapt-pkg for dependency resolution
- Downloads packages via APT
- Creates new OSTree commit with packages
- Manages package layering
- Handles conflicts and rollback
### 6. Uninstall Command
**Purpose**: Remove layered packages
**Usage**:
```bash
apt-ostree uninstall [OPTIONS] PACKAGES...
```
**Options**:
- `--reboot`: Automatically reboot after uninstallation
- `--idempotent`: Don't error if packages not installed
**Examples**:
```bash
# Remove single package
apt-ostree uninstall vim
# Remove multiple packages
apt-ostree uninstall vim git
# Remove with reboot
apt-ostree uninstall --reboot firefox
```
**Execution Flow**:
1. Check if packages are installed
2. Create new deployment without packages
3. Remove packages from new deployment
4. Update boot configuration
5. Optionally reboot
**Implementation**:
- Validates package installation status
- Creates new deployment without packages
- Manages package removal
- Handles dependencies and conflicts
### 7. Override Command
**Purpose**: Manage package overrides
**Usage**:
```bash
apt-ostree override [SUBCOMMAND] [OPTIONS] [ARGUMENTS]
```
**Subcommands**:
- `replace`: Replace package with different version
- `remove`: Remove package from base
- `reset`: Reset package to base version
- `list`: List current overrides
**Examples**:
```bash
# Replace package
apt-ostree override replace kernel /path/to/custom-kernel.deb
# Remove package from base
apt-ostree override remove package-name
# Reset package
apt-ostree override reset package-name
# List overrides
apt-ostree override list
```
**Implementation**:
- Manages package override state
- Handles package replacement
- Tracks override history
- Manages base package modifications
### 8. Rebase Command
**Purpose**: Switch to different base image
**Usage**:
```bash
apt-ostree rebase [OPTIONS] [REF]
```
**Options**:
- `--reboot`: Automatically reboot after rebase
- `--os=OSNAME`: Specify operating system name
**Examples**:
```bash
# Rebase to different version
apt-ostree rebase debian:debian/amd64/ostree/13
# Rebase to different OS
apt-ostree rebase --os=debian debian:debian/amd64/ostree/13
```
**Execution Flow**:
1. Download new base image
2. Merge user packages to new base
3. Create new deployment
4. Update boot configuration
5. Optionally reboot
**Implementation**:
- Downloads new base image
- Preserves user packages
- Creates new deployment
- Manages package compatibility
### 9. Compose Command
**Purpose**: Build custom images
**Usage**:
```bash
apt-ostree compose [SUBCOMMAND] [OPTIONS] [ARGUMENTS]
```
**Subcommands**:
- `tree`: Build tree from configuration
- `build-image`: Build container image
- `extensions`: Manage extensions
**Examples**:
```bash
# Build tree
apt-ostree compose tree config.yaml
# Build container image
apt-ostree compose build-image --format=docker output.tar
# Manage extensions
apt-ostree compose extensions list
```
**Implementation**:
- Parses configuration files
- Builds custom images
- Manages extensions
- Generates container images
### 10. DB Command
**Purpose**: Query package database
**Usage**:
```bash
apt-ostree db [SUBCOMMAND] [OPTIONS] [ARGUMENTS]
```
**Subcommands**:
- `diff`: Show differences between deployments
- `list`: List packages in deployment
- `version`: Show package versions
**Examples**:
```bash
# Show differences
apt-ostree db diff deployment1 deployment2
# List packages
apt-ostree db list
# Show versions
apt-ostree db version package-name
```
**Implementation**:
- Queries APT package database
- Compares deployments
- Lists package information
- Shows version details
### 11. Search Command
**Purpose**: Search for packages
**Usage**:
```bash
apt-ostree search [OPTIONS] QUERY
```
**Options**:
- `--json`: Output in JSON format
- `--limit=N`: Limit number of results
**Examples**:
```bash
# Search by name
apt-ostree search firefox
# Search by description
apt-ostree search "web browser"
```
**Implementation**:
- Uses libapt-pkg for package search
- Searches package metadata
- Returns relevant results
- Supports various search criteria
### 12. Kargs Command
**Purpose**: Manage kernel arguments
**Usage**:
```bash
apt-ostree kargs [OPTIONS] [ARGUMENTS]
```
**Options**:
- `--reboot`: Automatically reboot after changes
- `--append`: Append kernel arguments
- `--delete`: Delete kernel arguments
- `--replace`: Replace kernel arguments
**Examples**:
```bash
# Show current kernel arguments
apt-ostree kargs
# Append kernel argument
apt-ostree kargs --append="quiet"
# Delete kernel argument
apt-ostree kargs --delete="quiet"
# Replace kernel arguments
apt-ostree kargs --replace="quiet splash"
```
**Implementation**:
- Manages kernel argument state
- Updates boot configuration
- Handles argument modification
- Preserves argument history
### 13. Initramfs Command
**Purpose**: Manage initramfs
**Usage**:
```bash
apt-ostree initramfs [SUBCOMMAND] [OPTIONS] [ARGUMENTS]
```
**Subcommands**:
- `enable`: Enable initramfs
- `disable`: Disable initramfs
- `etc`: Manage initramfs files
**Examples**:
```bash
# Enable initramfs
apt-ostree initramfs enable
# Disable initramfs
apt-ostree initramfs disable
# Manage files
apt-ostree initramfs etc --track=/etc/fstab
```
**Implementation**:
- Manages initramfs state
- Handles initramfs generation
- Tracks initramfs files
- Updates boot configuration
### 14. Usroverlay Command
**Purpose**: Create transient overlayfs to /usr
**Usage**:
```bash
apt-ostree usroverlay [OPTIONS] [COMMAND]
```
**Options**:
- `--init`: Initialize overlay
- `--cleanup`: Clean up overlay
**Examples**:
```bash
# Initialize overlay
apt-ostree usroverlay --init
# Run command in overlay
apt-ostree usroverlay --init -- apt install package
# Clean up overlay
apt-ostree usroverlay --cleanup
```
**Implementation**:
- Creates overlayfs mount
- Manages overlay state
- Handles command execution
- Cleans up overlay
### 15. Apply-Live Command
**Purpose**: Apply changes to running system
**Usage**:
```bash
apt-ostree apply-live [OPTIONS]
```
**Options**:
- `--reload`: Reload configuration
- `--replace`: Replace running system
**Examples**:
```bash
# Apply live changes
apt-ostree apply-live
# Apply with reload
apt-ostree apply-live --reload
```
**Implementation**:
- Applies changes to running system
- Manages live updates
- Handles configuration reload
- Manages system state
### 16. Cancel Command
**Purpose**: Cancel pending transaction
**Usage**:
```bash
apt-ostree cancel [OPTIONS]
```
**Options**:
- `--force`: Force cancellation
**Examples**:
```bash
# Cancel transaction
apt-ostree cancel
# Force cancellation
apt-ostree cancel --force
```
**Implementation**:
- Cancels pending transactions
- Cleans up transaction state
- Handles force cancellation
- Manages rollback
### 17. Cleanup Command
**Purpose**: Clean up old deployments
**Usage**:
```bash
apt-ostree cleanup [OPTIONS]
```
**Options**:
- `--base`: Clean up base images
- `--repomd`: Clean up repository metadata
- `--rollback`: Clean up rollback deployments
**Examples**:
```bash
# Clean up old deployments
apt-ostree cleanup
# Clean up base images
apt-ostree cleanup --base
# Clean up rollback deployments
apt-ostree cleanup --rollback
```
**Implementation**:
- Identifies old deployments
- Removes unused deployments
- Cleans up base images
- Manages disk space
### 18. Reload Command
**Purpose**: Reload configuration
**Usage**:
```bash
apt-ostree reload [OPTIONS]
```
**Options**:
- `--os=OSNAME`: Specify operating system name
**Examples**:
```bash
# Reload configuration
apt-ostree reload
# Reload specific OS
apt-ostree reload --os=debian
```
**Implementation**:
- Reloads system configuration
- Updates repository metadata
- Refreshes package information
- Manages configuration state
### 19. Reset Command
**Purpose**: Reset system state
**Usage**:
```bash
apt-ostree reset [OPTIONS]
```
**Options**:
- `--os=OSNAME`: Specify operating system name
- `--hard`: Hard reset (remove all changes)
**Examples**:
```bash
# Reset system
apt-ostree reset
# Hard reset
apt-ostree reset --hard
```
**Implementation**:
- Resets system state
- Removes user changes
- Restores base state
- Manages state reset
### 20. Refresh-MD Command
**Purpose**: Refresh repository metadata
**Usage**:
```bash
apt-ostree refresh-md [OPTIONS]
```
**Options**:
- `--os=OSNAME`: Specify operating system name
**Examples**:
```bash
# Refresh metadata
apt-ostree refresh-md
# Refresh specific OS
apt-ostree refresh-md --os=debian
```
**Implementation**:
- Downloads repository metadata
- Updates package information
- Refreshes repository state
- Manages metadata cache
### 21. Initramfs-Etc Command
**Purpose**: Manage initramfs files
**Usage**:
```bash
apt-ostree initramfs-etc [OPTIONS] [ARGUMENTS]
```
**Options**:
- `--track`: Track file in initramfs
- `--untrack`: Untrack file from initramfs
**Examples**:
```bash
# Track file
apt-ostree initramfs-etc --track=/etc/fstab
# Untrack file
apt-ostree initramfs-etc --untrack=/etc/fstab
```
**Implementation**:
- Manages initramfs file tracking
- Handles file inclusion/exclusion
- Updates initramfs configuration
- Manages file state
## Command Architecture
### Daemon-Based Execution
All commands follow the same daemon-based architecture:
1. **CLI Parsing**: Parse command-line arguments
2. **Daemon Communication**: Request operation via D-Bus
3. **Fallback Handling**: Use direct system calls if daemon fails
4. **Progress Reporting**: Show operation progress
5. **Result Display**: Display operation results
### Implementation Pattern
```rust
// Command execution pattern
pub fn execute_command(args: &[String]) -> Result<(), Error> {
// 1. Parse arguments
let parsed_args = parse_arguments(args)?;
// 2. Try daemon communication
match connect_to_daemon() {
Ok(connection) => {
// Use daemon for operation
execute_via_daemon(connection, parsed_args)?;
}
Err(_) => {
// Fallback to direct calls
execute_direct_calls(parsed_args)?;
}
}
Ok(())
}
```
## Advanced Features
### JSON Output
Many commands support JSON output for programmatic use:
```bash
# JSON status output
apt-ostree status --json
# JSON search output
apt-ostree search --json firefox
```
### Verbose Output
Enable detailed output for debugging:
```bash
# Verbose upgrade
apt-ostree upgrade --verbose
# Verbose install
apt-ostree install --verbose vim
```
### OSTree Environment Detection
apt-ostree automatically detects if it's running in an OSTree environment:
```bash
# Automatic detection
apt-ostree status
# Error if not in OSTree environment
Error: apt-ostree requires an OSTree environment to operate.
This system does not appear to be running on an OSTree deployment.
To use apt-ostree:
1. Ensure you are running on an OSTree-based system
2. Verify that /ostree directory exists
3. Verify that /run/ostree-booted file exists
4. Ensure you have a valid booted deployment
```
## Error Handling
### Common Error Scenarios
1. **Network Errors**: Package download failures
2. **Dependency Conflicts**: Package dependency issues
3. **Disk Space**: Insufficient storage space
4. **Permission Errors**: Insufficient privileges
5. **OSTree Errors**: Filesystem operation failures
6. **Non-OSTree Environment**: System not running on OSTree
### Error Recovery
- **Automatic Rollback**: Failed operations automatically rollback
- **Manual Recovery**: Manual recovery procedures available
- **Error Reporting**: Detailed error messages and guidance
- **Logging**: Comprehensive logging for debugging
### OSTree Environment Errors
When not running in an OSTree environment, apt-ostree provides clear guidance:
```
Error: apt-ostree requires an OSTree environment to operate.
This system does not appear to be running on an OSTree deployment.
To use apt-ostree:
1. Ensure you are running on an OSTree-based system
2. Verify that /ostree directory exists
3. Verify that /run/ostree-booted file exists
4. Ensure you have a valid booted deployment
```
## Integration with Other Tools
### GUI Integration
- **GNOME Software**: Integration with GNOME Software Center (planned)
- **KDE Discover**: Integration with KDE Discover (planned)
- **Flatpak**: Integration with Flatpak applications (planned)
### System Integration
- **systemd**: Integration with systemd services
- **D-Bus**: D-Bus interface for other applications
- **PolicyKit**: Authentication and authorization
### APT Integration
- **libapt-pkg**: Direct integration with APT package management
- **APT Cache**: Integration with APT package cache
- **APT Sources**: Integration with APT repository sources
## Performance Considerations
### Optimization Strategies
1. **Parallel Downloads**: Concurrent package downloads via APT
2. **Caching**: Package and metadata caching via APT
3. **Delta Updates**: Incremental update support
4. **Compression**: Efficient data compression
### Resource Usage
- **Memory**: Efficient memory usage for large operations
- **Disk**: Optimized disk usage through OSTree deduplication
- **Network**: Bandwidth optimization for downloads via APT
- **CPU**: Parallel processing for package operations
## Security Features
### Package Verification
- **GPG Signatures**: Package signature verification via APT
- **Checksums**: Package integrity checks
- **Secure Downloads**: HTTPS for package downloads
### Access Control
- **PolicyKit**: Privileged operation authentication
- **User Permissions**: User-specific permissions
- **System Policies**: System-wide security policies
### Bubblewrap Sandboxing
- **Script Execution**: Package scripts executed in sandboxed environment
- **Namespace Isolation**: Process, mount, network namespaces
- **Security Controls**: Privilege restrictions
- **Atomic Context**: Script execution in atomic context
## APT-Specific Features
### APT Database Integration
- **Package Information**: Direct access to APT package database
- **Dependency Resolution**: Native APT dependency resolution
- **Repository Management**: Integration with APT repository system
- **Package Metadata**: Access to APT package metadata
### DEB Package Handling
- **Package Extraction**: Direct DEB package extraction
- **Control File Parsing**: APT control file parsing
- **Script Execution**: DEB package script execution
- **Metadata Extraction**: Package metadata extraction
### Multi-Arch Support
- **Architecture Detection**: Automatic package architecture detection
- **Multi-Arch Types**: Support for same, foreign, allowed
- **Conflict Prevention**: Intelligent handling of architecture-specific paths
- **Dependency Resolution**: Architecture-aware dependency resolution
## Future Enhancements
### Planned Features
1. **Container Integration**: Direct container support
2. **Cloud Integration**: Cloud deployment support
3. **Advanced Search**: Enhanced search capabilities
4. **Performance Monitoring**: Built-in performance monitoring
### CLI Improvements
1. **Interactive Mode**: Interactive command mode
2. **Command Completion**: Enhanced command completion
3. **Progress Indicators**: Better progress reporting
4. **Configuration Management**: Enhanced configuration options
### APT Enhancements
1. **Advanced Dependency Resolution**: Enhanced dependency handling
2. **Package Conflict Resolution**: Improved conflict resolution
3. **Repository Management**: Enhanced repository management
4. **Package Verification**: Enhanced package verification