- Use bash shell and POSIX-compliant sourcing - Add debhelper-compat, dh-cargo, rustc, cargo packages - Install system Rust before rustup for dpkg compatibility |
||
|---|---|---|
| .forgejo/workflows | ||
| debian | ||
| .gitignore | ||
| bootc-libostree-compatibility.patch | ||
| build.sh | ||
| install.sh | ||
| libostree-dev_noble_backport.sh | ||
| README.md | ||
Bootc Debian Package Builder
A complete solution for building and distributing bootc .deb packages for Debian/Ubuntu systems with libostree 2025.2-1 compatibility. This repository provides automated CI/CD workflows that build bootc packages and upload them to a Forgejo package repository.
🎯 What This Repository Contains
- Patch: Fixes compatibility with libostree 2025.2-1 on Ubuntu Noble
- Debian Packaging: Complete debian/ directory structure
- Build Script: Automatically clones bootc source and builds .deb
- Install Script: Installs the built package with dependency handling
- CI/CD: Automated build pipeline with package upload to Forgejo
- Package Repository Integration: Automatic upload to Forgejo package registry
Note: The libostree 2025.2-1 packages are available as Debian packages in the Forgejo repository: libostree-dev
🚀 Quick Start
Prerequisites
- Basic build tools:
git,cargo,rustc,pkg-config - Ubuntu Noble (24.04 LTS) system
- libostree 2025.2-1 packages from Forgejo repository
Complete Workflow
# Clone this repository
git clone <your-repo-url> bootc-deb
cd bootc-deb
# Step 1: Install libostree 2025.2-1 packages from Forgejo
curl -fsSL https://git.raines.xyz/api/packages/robojerk/debian/repository.key | sudo gpg --dearmor -o /usr/share/keyrings/forgejo-robojerk.gpg
echo "deb [signed-by=/usr/share/keyrings/forgejo-robojerk.gpg] https://git.raines.xyz/api/packages/robojerk/debian noble main" | sudo tee /etc/apt/sources.list.d/forgejo-robojerk.list
sudo apt update
sudo apt install -y libostree-dev=2025.2-1~noble1 libostree-1-1=2025.2-1~noble1
# Step 2: Build the bootc .deb package
./build.sh
# Step 3: Install the package
sudo ./install.sh
Alternative: Test Installation
# Test that libostree packages can be installed
./test-libostree-install.sh
📁 Repository Structure
bootc-deb/
├── bootc-libostree-compatibility.patch # The compatibility fix
├── build.sh # Build script (clones + builds)
├── install.sh # Installation script
├── test-libostree-install.sh # Test libostree package installation
├── test-debian-upload.sh # Test package upload functionality
├── libostree-dev_noble_backport.sh # Legacy backport script (see separate repo)
├── README.md # This file
├── .forgejo/ # CI/CD workflows
│ ├── workflows/
│ │ ├── build-packages.yml # Full build pipeline with package upload
│ │ ├── test-build.yml # Test workflow
│ │ └── update-readme.yml # README update workflow
└── debian/ # Debian packaging files
├── control # Package metadata
├── rules # Build rules
├── changelog # Version history
└── copyright # License info
🔧 How It Works
The Complete Process
- Installs libostree 2025.2-1 from Forgejo package repository
- Clones bootc source from GitHub (v1.5.1)
- Applies our patch to fix libostree compatibility
- Installs build dependencies automatically
- Builds the .deb package using dpkg-buildpackage
- Uploads packages to Forgejo package registry
- Creates release assets for manual download
The Patch
Fixes this issue in crates/lib/src/cli.rs:
// Before (causes build failure):
ostree::SePolicy::set_null_log();
// After (compatible):
// TODO: Re-enable when ostree Rust bindings support set_null_log()
// ostree::SePolicy::set_null_log();
🌍 Usage on Any PC
This repository is designed to work on any Ubuntu Noble system:
# On any PC in the world:
git clone <your-repo-url> bootc-deb
cd bootc-deb
# Install from Forgejo package repository
curl -fsSL https://git.raines.xyz/api/packages/robojerk/debian/repository.key | sudo gpg --dearmor -o /usr/share/keyrings/forgejo-robojerk.gpg
echo "deb [signed-by=/usr/share/keyrings/forgejo-robojerk.gpg] https://git.raines.xyz/api/packages/robojerk/debian noble main" | sudo tee /etc/apt/sources.list.d/forgejo-robojerk.list
sudo apt update
sudo apt install -y bootc
The complete workflow will:
- ✅ Install libostree 2025.2-1 from Forgejo repository
- ✅ Install bootc from Forgejo repository
- ✅ All dependencies handled automatically
📦 Package Information
- Package Name: bootc
- Version: 1.5.1-1~noble1
- Target: Ubuntu Noble (24.04 LTS)
- Dependencies: libostree-1-1 (>= 2025.2), systemd, podman|docker.io, skopeo
🔗 Integration with apt-ostree
This packaging is specifically designed for Aurora-style workflow:
- OCI Image Compatibility: Works with apt-ostree generated images
- Container Tool Integration: Compatible with podman, skopeo
- System Integration: Proper Ubuntu Noble integration
- Version Compatibility: Requires libostree 2025.2-1 (available in Forgejo repository)
Package Repository Integration
Both libostree and bootc packages are available from the Forgejo package repository:
- Repository: libostree-dev
- Package Registry: Forgejo Packages
- Automated builds with CI/CD integration
- Complete dependency chain from libostree to bootc
- Easy installation via standard apt commands
🛠️ Manual Steps (if needed)
If you prefer to build manually:
# 1. Install libostree 2025.2-1 backport (if needed)
# See: https://git.raines.xyz/robojerk/libostree-dev
# 2. Clone bootc source
git clone --depth 1 --branch v1.5.1 https://github.com/containers/bootc.git bootc-1.5.1
cd bootc-1.5.1
# 3. Apply patch
patch -p1 < ../bootc-libostree-compatibility.patch
# 4. Copy packaging files
cp -r ../debian .
# 5. Build package
dpkg-buildpackage -us -uc -b
🔄 Maintenance
Updating Versions
- Update version in
debian/changelog - Update version in
build.sh - Update version in
.forgejo/workflows/build-packages.yml - Test build process
Updating the Patch
- Modify
bootc-libostree-compatibility.patch - Test with
./build.sh - Update documentation if needed
CI/CD Automation
This repository includes Forgejo Actions workflows for automated package building and distribution:
.forgejo/workflows/build-packages.yml: Full build pipeline with package upload to Forgejo.forgejo/workflows/test-build.yml: Lightweight testing for development and PRs.forgejo/workflows/update-readme.yml: README update workflow
Automated Build Process
- Triggers: Push to main/master, pull requests, and releases
- Dependencies: Installs libostree 2025.2-1 from Forgejo repository
- Build: Builds bootc with libostree compatibility patch
- Upload: Automatically uploads packages to Forgejo package registry
- Release Assets: Creates downloadable artifacts for manual installation
Package Repository Integration
- Automatic Upload: Packages are uploaded to Forgejo after successful builds
- Repository Association: Packages are automatically associated with the repository
- Dependency Resolution: Users can install directly via apt with proper dependencies
- Version Management: Each build creates a new package version
Manual Workflow Triggers
You can manually trigger builds in the Forgejo Actions tab:
- Test Build: Quick validation of bootc build process
- Full Build: Complete bootc package build with upload
🎉 Success!
After installation, you'll have:
- ✅ bootc command available system-wide
- ✅ Full functionality with your apt-ostree OCI images
- ✅ Aurora-style workflow ready to use
📋 Troubleshooting
Build Issues
- Missing libostree 2025.2-1: Install from Forgejo repository using the commands in Quick Start
- Build dependencies: The workflow installs them automatically
- Git clone issues: Check internet connection
- Package upload failures: Verify FORGEJO_TOKEN secret is set correctly
Runtime Issues
- Missing runtime dependencies: Run
sudo apt-get install -f - AppArmor denials: Monitor with
sudo aa-logprof - Package installation issues: Ensure Forgejo repository is properly configured
Testing
Use the provided test scripts to verify functionality:
# Test libostree package installation
./test-libostree-install.sh
# Test package upload functionality
./test-debian-upload.sh
Perfect for distributing bootc as .deb packages on any Ubuntu Noble system with automated CI/CD! 🎉