# Getting Started with apt-ostree ## Introduction apt-ostree is a Debian/Ubuntu equivalent of rpm-ostree that provides atomic, immutable system updates with APT package management. This guide will help you get started with apt-ostree. ## Prerequisites ### System Requirements - **Operating System**: Debian/Ubuntu-based system with OSTree support - **Architecture**: x86_64 (other architectures may work but are not fully tested) - **Memory**: 2GB RAM minimum, 4GB+ recommended - **Disk Space**: 10GB+ free space for OSTree repository ### Required Software - OSTree (version 2023.1 or later) - APT package manager - systemd - D-Bus ## Installation ### Install apt-ostree #### From Source ```bash # Clone the repository git clone cd apt-ostree # Build the project cargo build --release # Install binaries sudo cp target/release/apt-ostree /usr/bin/ sudo cp target/release/apt-ostreed /usr/bin/ ``` #### Install System Components ```bash # Install service files sudo cp src/daemon/apt-ostreed.service /etc/systemd/system/ sudo cp src/daemon/apt-ostree-bootstatus.service /etc/systemd/system/ # Install D-Bus policy sudo cp src/daemon/org.aptostree.dev.conf /etc/dbus-1/system.d/ # Enable and start services sudo systemctl daemon-reload sudo systemctl enable apt-ostreed sudo systemctl start apt-ostreed ``` ### Verify Installation ```bash # Check if apt-ostree is installed apt-ostree --version # Check daemon status sudo systemctl status apt-ostreed # Test daemon communication apt-ostree daemon-ping ``` ## Basic Usage ### Check System Status ```bash # Show current system status apt-ostree status # Show status in JSON format apt-ostree status --json # Show verbose status apt-ostree status --verbose ``` ### Initialize System ```bash # Initialize apt-ostree system sudo apt-ostree init # Initialize with specific branch sudo apt-ostree init --branch debian/stable/x86_64 ``` ### Install Packages ```bash # Install a single package sudo apt-ostree install curl # Install multiple packages sudo apt-ostree install curl vim git # Install with dry-run (preview changes) sudo apt-ostree install --dry-run curl # Install with automatic confirmation sudo apt-ostree install --yes curl ``` ### Upgrade System ```bash # Upgrade system packages sudo apt-ostree upgrade # Upgrade with preview sudo apt-ostree upgrade --preview # Upgrade with check mode sudo apt-ostree upgrade --check # Upgrade with automatic reboot sudo apt-ostree upgrade --reboot ``` ### Rollback Changes ```bash # Rollback to previous deployment sudo apt-ostree rollback # Rollback with dry-run sudo apt-ostree rollback --dry-run # Rollback with reboot sudo apt-ostree rollback --reboot ``` ### Search and Information ```bash # Search for packages apt-ostree search "web server" # Search with JSON output apt-ostree search --json "web server" # Show package information apt-ostree info nginx # List installed packages apt-ostree list ``` ## Advanced Usage ### Package Management #### Install Packages with Options ```bash # Install packages with specific options sudo apt-ostree install --allow-downgrade package1 package2 # Install packages with dry-run sudo apt-ostree install --dry-run --verbose package1 package2 ``` #### Remove Packages ```bash # Remove packages sudo apt-ostree remove package1 package2 # Remove with dry-run sudo apt-ostree remove --dry-run package1 ``` #### Override Packages ```bash # Replace package in base sudo apt-ostree override replace package1=version1 # Remove package from base sudo apt-ostree override remove package1 # List current overrides apt-ostree override list # Reset all overrides sudo apt-ostree override reset ``` ### System Management #### Deploy Different Branches ```bash # Deploy to different branch sudo apt-ostree deploy debian/testing/x86_64 # Deploy with reboot sudo apt-ostree deploy --reboot debian/testing/x86_64 ``` #### Rebase to Different Tree ```bash # Rebase to different tree sudo apt-ostree rebase debian/testing/x86_64 # Rebase with reboot sudo apt-ostree rebase --reboot debian/testing/x86_64 ``` #### Cleanup Old Deployments ```bash # Cleanup old deployments sudo apt-ostree cleanup # Cleanup keeping specific number sudo apt-ostree cleanup --keep 3 ``` ### Kernel and Boot Management #### Manage Kernel Arguments ```bash # Show current kernel arguments sudo apt-ostree kargs # Add kernel argument sudo apt-ostree kargs --append=console=ttyS0 # Remove kernel argument sudo apt-ostree kargs --delete=console=ttyS0 # Replace kernel argument sudo apt-ostree kargs --replace=console=ttyS0,115200 ``` #### Manage Initramfs ```bash # Regenerate initramfs sudo apt-ostree initramfs --regenerate # Manage initramfs files sudo apt-ostree initramfs-etc --track /etc/crypttab sudo apt-ostree initramfs-etc --untrack /etc/crypttab ``` ### Database Operations #### Query Package Database ```bash # Show package changes between commits apt-ostree db diff commit1 commit2 # List packages in commit apt-ostree db list commit1 # Show database version apt-ostree db version ``` #### Refresh Metadata ```bash # Refresh repository metadata sudo apt-ostree refresh-md # Reload configuration sudo apt-ostree reload ``` ## Configuration ### Environment Variables ```bash # Set log level export RUST_LOG=debug # Set OSTree repository path export OSTREE_REPO_PATH=/path/to/repo # Set APT cache directory export APT_CACHE_DIR=/path/to/cache ``` ### Configuration Files ```bash # Main configuration file /etc/apt-ostree/config.toml # Daemon configuration /etc/apt-ostree/daemon.toml # Repository configuration /etc/apt-ostree/repos.d/ ``` ## Troubleshooting ### Common Issues #### Permission Errors ```bash # Check if running as root sudo apt-ostree status # Check file permissions ls -la /var/lib/apt-ostree/ ``` #### Daemon Issues ```bash # Check daemon status sudo systemctl status apt-ostreed # Restart daemon sudo systemctl restart apt-ostreed # View daemon logs sudo journalctl -u apt-ostreed -f ``` #### OSTree Issues ```bash # Check OSTree status ostree status # Check OSTree repository ostree log debian/stable/x86_64 # Repair OSTree repository ostree fsck ``` #### Package Issues ```bash # Update package lists sudo apt update # Check package availability apt-ostree search package-name # Check package dependencies apt-ostree info package-name ``` ### Debug Information ```bash # Enable debug logging RUST_LOG=debug apt-ostree status # Show verbose output apt-ostree status --verbose # Show system information apt-ostree status --json | jq '.system' ``` ### Recovery Procedures #### Rollback Failed Update ```bash # Rollback to previous deployment sudo apt-ostree rollback # Rollback with reboot sudo apt-ostree rollback --reboot ``` #### Reset System State ```bash # Reset all user modifications sudo apt-ostree reset # Reset with reboot sudo apt-ostree reset --reboot ``` #### Emergency Recovery ```bash # Boot into emergency mode # Edit bootloader to boot previous deployment # Or use OSTree directly ostree admin rollback ``` ## Best Practices ### System Updates 1. **Always preview changes**: Use `--preview` or `--dry-run` before applying changes 2. **Keep multiple deployments**: Use `cleanup --keep 3` to maintain rollback options 3. **Test in staging**: Test updates in a staging environment before production 4. **Monitor system**: Check system status regularly with `apt-ostree status` ### Package Management 1. **Use atomic operations**: Install multiple packages in single transaction 2. **Verify packages**: Check package information before installation 3. **Manage dependencies**: Let apt-ostree handle dependency resolution 4. **Use overrides sparingly**: Only override packages when necessary ### Security 1. **Keep system updated**: Regular security updates 2. **Monitor logs**: Check system logs for issues 3. **Use sandboxing**: Scripts run in sandboxed environment 4. **Verify signatures**: Package signatures are verified automatically ### Performance 1. **Optimize storage**: Regular cleanup of old deployments 2. **Use caching**: APT cache is maintained for performance 3. **Monitor resources**: Check disk and memory usage 4. **Batch operations**: Combine multiple operations when possible ## Examples ### Basic System Setup ```bash # Initialize system sudo apt-ostree init # Install essential packages sudo apt-ostree install curl vim git # Check status apt-ostree status ``` ### Development Environment ```bash # Install development tools sudo apt-ostree install build-essential git vim # Install specific version sudo apt-ostree override replace gcc=4:9.3.0-1ubuntu2 # Check overrides apt-ostree override list ``` ### Server Setup ```bash # Install web server sudo apt-ostree install nginx # Configure kernel arguments sudo apt-ostree kargs --append=console=ttyS0,115200 # Regenerate initramfs sudo apt-ostree initramfs --regenerate # Reboot to apply changes sudo apt-ostree upgrade --reboot ``` ### System Maintenance ```bash # Check system status apt-ostree status # Update system sudo apt-ostree upgrade --preview # Apply updates sudo apt-ostree upgrade # Cleanup old deployments sudo apt-ostree cleanup --keep 3 ``` ## Next Steps ### Learn More - Read the [Architecture Documentation](architecture/overview.md) - Explore [Advanced Usage](advanced-usage.md) - Check [Troubleshooting Guide](troubleshooting.md) ### Get Help - Check system logs: `sudo journalctl -u apt-ostreed` - Enable debug logging: `RUST_LOG=debug apt-ostree status` - Review documentation in `/usr/share/doc/apt-ostree/` ### Contribute - Report bugs and issues - Contribute code and documentation - Help with testing and validation