# apt-ostree

A Debian/Ubuntu equivalent of `rpm-ostree` for atomic, immutable deployments.

## 🎯 **Project Goal**
Make apt-ostree a **1:1 equivalent** of rpm-ostree for Debian systems, with identical CLI interface and functionality adapted for the Debian/Ubuntu ecosystem.

## 📋 **Requirements**
- Debian Trixie (13) or Forky (14), or Ubuntu 25.04+ (Noble Numbat) or newer
- OSTree 2025.2+
- APT 3.0+
- Systemd 255+
- Polkit 123+

## 🚀 Quick Start

### Prerequisites

- Debian Trixie (13) or Forky (14), or Ubuntu Noble (24.04) or newer
- OSTree tools installed
- Rust development environment

### Installation

#### Option 1: Install from Debian Package

```bash
# Install dependencies
sudo apt update
sudo apt install ostree libostree-1-1 systemd

# Install apt-ostree package
sudo dpkg -i apt-ostree_0.1.0-2_amd64.deb
```

#### Option 2: Build from Source

```bash
# Clone the repository
git clone https://github.com/robojerk/apt-ostree.git
cd apt-ostree

# Install build dependencies
sudo apt install build-essential cargo rustc pkg-config \
    libostree-dev libglib2.0-dev libcurl4-gnutls-dev \
    libssl-dev libsystemd-dev libmount-dev libselinux1-dev \
    libapt-pkg-dev debhelper dh-cargo

# Build for Debian Trixie/Forky
./build-debian-trixie.sh

# Install the built package
sudo dpkg -i ../apt-ostree_0.1.0-2_amd64.deb
```

## 🔧 Building for Different Distributions

### Debian Trixie/Forky (Debian 13/14)

```bash
# Use the specialized build script
./build-debian-trixie.sh
```

This script:
- Verifies system compatibility
- Checks for libapt-pkg7.0 support
- Builds with correct dependencies
- Tests package installation

### Ubuntu Noble (24.04)

```bash
# Use the standard Debian build process
./debian/build.sh
```

## 📦 Package Compatibility

| Distribution | Version | libapt-pkg | Status | Notes |
|--------------|---------|------------|---------|-------|
| Debian Trixie | 13 | 7.0 | ✅ Supported | Tested and working |
| Debian Forky | 14 | 7.0 | ✅ Supported | Tested and working |


## 🎯 Usage Examples

```bash
# Check system status
apt-ostree status

# Install packages atomically
apt-ostree install firefox libreoffice

# Update system
apt-ostree upgrade

# Rollback to previous deployment
apt-ostree rollback

# View deployment history
apt-ostree log

# Create new deployment from container
apt-ostree deploy ghcr.io/your-org/debian-ostree:latest
```

## 🏗️ Architecture

`apt-ostree` works by:

1. **Creating OSTree deployments** from APT package selections
2. **Managing atomic updates** through OSTree commits
3. **Providing rollback capability** to previous deployments
4. **Integrating with systemd** for boot management

## 🔍 Troubleshooting

### Library Compatibility Issues

If you encounter `libapt-pkg.so.6.0: cannot open shared object file`:

```bash
# Check your libapt-pkg version
pkg-config --modversion libapt-pkg

# For Debian Trixie/Forky, you need version 3.0.0+
# For Ubuntu Noble, version 2.0.0+ is sufficient
```

### Build Failures

```bash
# Clean and rebuild
cargo clean
./build-debian-trixie.sh
```

## 🤝 Contributing

1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Test on target distributions
5. Submit a pull request

## 📄 License

This project is licensed under the GPL-3.0-or-later License - see the [LICENSE](LICENSE) file for details.

## 🙏 Acknowledgments

- Inspired by `rpm-ostree` from the Fedora project
- Built on the excellent `rust-apt` crate
- OSTree integration powered by the OSTree project 