- Add technical report on Debian atomic image creation - Add Fedora tools bootable instructions and implementation report - Add apt-tool blocking implementation documentation - Add environment configuration example - Update .gitignore with better artifact blocking - Update justfile and Containerfile configurations - Improve variants configuration for debian-bootc-base
376 lines
9.7 KiB
Markdown
376 lines
9.7 KiB
Markdown
# APT Tool Blocking Implementation for Debian Atomic Systems
|
|
|
|
## Overview
|
|
|
|
This document outlines how to implement blocking of traditional APT package management tools (apt-get, apt, dpkg) on Debian atomic systems, similar to how ublue-os blocks DNF/YUM on Fedora atomic systems. This ensures users use `apt-ostree` instead of traditional package management tools.
|
|
|
|
## Why Block APT Tools?
|
|
|
|
### System Integrity
|
|
- **Atomic Updates**: Ensures all software changes go through apt-ostree
|
|
- **Rollback Capability**: Maintains ability to rollback entire system states
|
|
- **Package Consistency**: Prevents mixing atomic and traditional package management
|
|
- **Database Integrity**: Avoids package database corruption
|
|
|
|
### User Experience
|
|
- **Clear Guidance**: Provides immediate feedback on correct tool usage
|
|
- **Consistency**: Matches user expectations from other atomic systems (e.g., ublue-os)
|
|
- **Documentation**: Points users to proper atomic management commands
|
|
|
|
## Implementation Strategy
|
|
|
|
### Option 1: Wrapper Scripts (Recommended)
|
|
Replace APT binaries with wrapper scripts that display error messages and exit.
|
|
|
|
### Option 2: Package Patching
|
|
Modify APT packages during the OSTree image build process.
|
|
|
|
### Option 3: Binary Replacement
|
|
Replace APT binaries with custom error-displaying executables.
|
|
|
|
## Recommended Implementation: Wrapper Scripts
|
|
|
|
### 1. Create Wrapper Scripts
|
|
|
|
#### apt-get-wrapper
|
|
```bash
|
|
#!/bin/bash
|
|
# /usr/bin/apt-get-wrapper
|
|
|
|
cat << 'EOF'
|
|
ERROR: Debian Atomic images utilize apt-ostree instead (and is discouraged to use).
|
|
|
|
This system uses atomic updates with apt-ostree. Please use:
|
|
|
|
apt-ostree install <package> # Install packages
|
|
apt-ostree upgrade # Upgrade system
|
|
apt-ostree rollback # Rollback changes
|
|
apt-ostree status # Check system status
|
|
apt-ostree apply-live # Apply changes immediately
|
|
|
|
For more information, see: https://docs.debian-atomic.org/
|
|
EOF
|
|
|
|
exit 1
|
|
```
|
|
|
|
#### apt-wrapper
|
|
```bash
|
|
#!/bin/bash
|
|
# /usr/bin/apt-wrapper
|
|
|
|
cat << 'EOF'
|
|
ERROR: Debian Atomic images utilize apt-ostree instead (and is discouraged to use).
|
|
|
|
This system uses atomic updates with apt-ostree. Please use:
|
|
|
|
apt-ostree install <package> # Install packages
|
|
apt-ostree upgrade # Upgrade system
|
|
apt-ostree rollback # Rollback changes
|
|
apt-ostree status # Check system status
|
|
apt-ostree apply-live # Apply changes immediately
|
|
|
|
For more information, see: https://docs.debian-atomic.org/
|
|
EOF
|
|
|
|
exit 1
|
|
```
|
|
|
|
#### dpkg-wrapper
|
|
```bash
|
|
#!/bin/bash
|
|
# /usr/bin/dpkg-wrapper
|
|
|
|
cat << 'EOF'
|
|
ERROR: Debian Atomic images utilize apt-ostree instead (and is discouraged to use).
|
|
|
|
Direct dpkg usage is not allowed on atomic systems. Please use:
|
|
|
|
apt-ostree install <package> # Install packages
|
|
apt-ostree remove <package> # Remove packages
|
|
apt-ostree upgrade # Upgrade system
|
|
|
|
For more information, see: https://docs.debian-atomic.org/
|
|
EOF
|
|
|
|
exit 1
|
|
```
|
|
|
|
### 2. Installation During OSTree Image Build
|
|
|
|
#### Build Process Integration
|
|
```bash
|
|
#!/bin/bash
|
|
# During OSTree image composition (atomic phase)
|
|
|
|
# Install APT packages normally first
|
|
apt-get install --download-only apt apt-utils dpkg
|
|
|
|
# Extract packages for modification
|
|
dpkg-deb -R apt_*.deb apt-extracted/
|
|
dpkg-deb -R dpkg_*.deb dpkg-extracted/
|
|
|
|
# Backup original binaries
|
|
mv apt-extracted/usr/bin/apt-get apt-extracted/usr/bin/apt-get.real
|
|
mv apt-extracted/usr/bin/apt apt-extracted/usr/bin/apt.real
|
|
mv dpkg-extracted/usr/bin/dpkg dpkg-extracted/usr/bin/dpkg.real
|
|
|
|
# Install wrapper scripts
|
|
install -m 755 apt-get-wrapper apt-extracted/usr/bin/apt-get
|
|
install -m 755 apt-wrapper apt-extracted/usr/bin/apt
|
|
install -m 755 dpkg-wrapper dpkg-extracted/usr/bin/dpkg
|
|
|
|
# Repackage and install
|
|
dpkg-deb -b apt-extracted/ apt-modified.deb
|
|
dpkg-deb -b dpkg-extracted/ dpkg-modified.deb
|
|
dpkg -i apt-modified.deb dpkg-modified.deb
|
|
|
|
# Clean up
|
|
rm -rf apt-extracted/ dpkg-extracted/ apt-modified.deb dpkg-modified.deb
|
|
```
|
|
|
|
#### Alternative: Post-Install Scripts
|
|
```bash
|
|
#!/bin/bash
|
|
# post-install script in package configuration
|
|
|
|
# Block APT tools after installation
|
|
mv /usr/bin/apt-get /usr/bin/apt-get.real
|
|
mv /usr/bin/apt /usr/bin/apt.real
|
|
mv /usr/bin/dpkg /usr/bin/dpkg.real
|
|
|
|
# Install wrapper scripts
|
|
install -m 755 apt-get-wrapper /usr/bin/apt-get
|
|
install -m 755 apt-wrapper /usr/bin/apt
|
|
install -m 755 dpkg-wrapper /usr/bin/dpkg
|
|
```
|
|
|
|
### 3. Preserve Essential Functionality
|
|
|
|
#### Keep Real Binaries Available
|
|
```bash
|
|
# Store real binaries with .real extension
|
|
/usr/bin/apt-get.real # Original apt-get
|
|
/usr/bin/apt.real # Original apt
|
|
/usr/bin/dpkg.real # Original dpkg
|
|
|
|
# apt-ostree can use these internally
|
|
# Users cannot access them directly
|
|
```
|
|
|
|
#### Internal Tool Access
|
|
```bash
|
|
# apt-ostree can use real binaries internally
|
|
# Example: apt-ostree install package
|
|
# 1. Uses apt-get.real for package resolution
|
|
# 2. Uses dpkg.real for package installation
|
|
# 3. Manages OSTree commit creation
|
|
```
|
|
|
|
## Integration with deb-bootc-compose
|
|
|
|
### Configuration File Example
|
|
```yaml
|
|
# deb-bootc-compose configuration
|
|
packages:
|
|
- name: apt
|
|
exclude: false
|
|
post-install: |
|
|
# Block APT tools
|
|
mv /usr/bin/apt-get /usr/bin/apt-get.real
|
|
mv /usr/bin/apt /usr/bin/apt.real
|
|
install -m 755 /tmp/apt-get-wrapper /usr/bin/apt-get
|
|
install -m 755 /tmp/apt-wrapper /usr/bin/apt
|
|
|
|
- name: dpkg
|
|
exclude: false
|
|
post-install: |
|
|
# Block dpkg
|
|
mv /usr/bin/dpkg /usr/bin/dpkg.real
|
|
install -m 755 /tmp/dpkg-wrapper /usr/bin/dpkg
|
|
|
|
files:
|
|
- source: apt-get-wrapper
|
|
destination: /tmp/apt-get-wrapper
|
|
mode: "0755"
|
|
- source: apt-wrapper
|
|
destination: /tmp/apt-wrapper
|
|
mode: "0755"
|
|
- source: dpkg-wrapper
|
|
destination: /tmp/dpkg-wrapper
|
|
mode: "0755"
|
|
```
|
|
|
|
### Build Script Integration
|
|
```bash
|
|
#!/bin/bash
|
|
# deb-bootc-compose build script
|
|
|
|
# Create wrapper scripts
|
|
cat > apt-get-wrapper << 'EOF'
|
|
#!/bin/bash
|
|
cat << 'END'
|
|
ERROR: Debian Atomic images utilize apt-ostree instead...
|
|
END
|
|
exit 1
|
|
EOF
|
|
|
|
cat > apt-wrapper << 'EOF'
|
|
#!/bin/bash
|
|
cat << 'END'
|
|
ERROR: Debian Atomic images utilize apt-ostree instead...
|
|
END
|
|
exit 1
|
|
EOF
|
|
|
|
cat > dpkg-wrapper << 'EOF'
|
|
#!/bin/bash
|
|
cat << 'END'
|
|
ERROR: Debian Atomic images utilize apt-ostree instead...
|
|
END
|
|
exit 1
|
|
EOF
|
|
|
|
# Make executable
|
|
chmod +x apt-get-wrapper apt-wrapper dpkg-wrapper
|
|
|
|
# Build OSTree image with blocking
|
|
deb-bootc-compose build --config atomic-config.yaml
|
|
```
|
|
|
|
## Testing the Implementation
|
|
|
|
### Verify Blocking Works
|
|
```bash
|
|
# Test on atomic system
|
|
$ apt-get update
|
|
ERROR: Debian Atomic images utilize apt-ostree instead...
|
|
|
|
$ apt install package
|
|
ERROR: Debian Atomic images utilize apt-ostree instead...
|
|
|
|
$ dpkg -i package.deb
|
|
ERROR: Debian Atomic images utilize apt-ostree instead...
|
|
```
|
|
|
|
### Verify apt-ostree Still Works
|
|
```bash
|
|
# Test apt-ostree functionality
|
|
$ apt-ostree install package
|
|
$ apt-ostree status
|
|
$ apt-ostree upgrade
|
|
```
|
|
|
|
### Verify Real Binaries Are Preserved
|
|
```bash
|
|
# Check real binaries exist
|
|
$ ls -la /usr/bin/apt*
|
|
/usr/bin/apt -> apt-wrapper
|
|
/usr/bin/apt-get -> apt-get-wrapper
|
|
/usr/bin/apt.real
|
|
/usr/bin/apt-get.real
|
|
|
|
$ ls -la /usr/bin/dpkg*
|
|
/usr/bin/dpkg -> dpkg-wrapper
|
|
/usr/bin/dpkg.real
|
|
```
|
|
|
|
## Security Considerations
|
|
|
|
### Permission Management
|
|
```bash
|
|
# Ensure wrapper scripts are not writable
|
|
chmod 755 /usr/bin/apt-get
|
|
chmod 755 /usr/bin/apt
|
|
chmod 755 /usr/bin/dpkg
|
|
|
|
# Ensure real binaries are protected
|
|
chmod 755 /usr/bin/apt-get.real
|
|
chmod 755 /usr/bin/apt.real
|
|
chmod 755 /usr/bin/dpkg.real
|
|
```
|
|
|
|
### Integrity Verification
|
|
```bash
|
|
# Verify wrapper scripts haven't been modified
|
|
sha256sum /usr/bin/apt-get /usr/bin/apt /usr/bin/dpkg
|
|
|
|
# Check for unauthorized modifications
|
|
find /usr/bin -name "*.real" -exec ls -la {} \;
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
#### Wrapper Scripts Not Working
|
|
```bash
|
|
# Check permissions
|
|
ls -la /usr/bin/apt*
|
|
|
|
# Verify wrapper scripts are executable
|
|
file /usr/bin/apt-get /usr/bin/apt /usr/bin/dpkg
|
|
|
|
# Check for syntax errors
|
|
bash -n /usr/bin/apt-get
|
|
```
|
|
|
|
#### apt-ostree Cannot Access Real Binaries
|
|
```bash
|
|
# Verify real binaries exist
|
|
ls -la /usr/bin/*.real
|
|
|
|
# Check apt-ostree configuration
|
|
# Ensure it's configured to use .real binaries
|
|
```
|
|
|
|
#### Users Can Still Access APT Tools
|
|
```bash
|
|
# Check if wrappers are properly linked
|
|
which apt-get
|
|
readlink -f /usr/bin/apt-get
|
|
|
|
# Verify PATH order
|
|
echo $PATH
|
|
```
|
|
|
|
### Recovery Procedures
|
|
|
|
#### Restore Original Functionality
|
|
```bash
|
|
# Emergency recovery (if needed)
|
|
mv /usr/bin/apt-get.real /usr/bin/apt-get
|
|
mv /usr/bin/apt.real /usr/bin/apt
|
|
mv /usr/bin/dpkg.real /usr/bin/dpkg
|
|
```
|
|
|
|
#### Reinstall Blocking
|
|
```bash
|
|
# Reinstall blocking after recovery
|
|
./install-apt-blocking.sh
|
|
```
|
|
|
|
## Future Enhancements
|
|
|
|
### Advanced Blocking
|
|
- **Selective Blocking**: Allow certain APT operations in specific contexts
|
|
- **User Permissions**: Different blocking levels for different user types
|
|
- **Audit Logging**: Log attempts to use blocked tools
|
|
|
|
### Integration Improvements
|
|
- **Automatic Updates**: Update blocking when apt-ostree is updated
|
|
- **Configuration Management**: Make blocking configurable
|
|
- **Monitoring**: Alert when blocking is bypassed
|
|
|
|
## Conclusion
|
|
|
|
Implementing APT tool blocking is essential for Debian atomic systems to maintain system integrity and provide clear user guidance. The wrapper script approach is recommended for its simplicity, reliability, and ease of maintenance.
|
|
|
|
This blocking should be implemented during the OSTree image build process (atomic phase) rather than in apt-ostree itself, ensuring the atomic system is properly configured from the ground up.
|
|
|
|
## References
|
|
|
|
- [ublue-os DNF/YUM Blocking Implementation](https://github.com/ublue-os/bazzite)
|
|
- [rpm-ostree Documentation](https://coreos.github.io/rpm-ostree/)
|
|
- [OSTree Documentation](https://ostreedev.github.io/ostree/)
|
|
- [Debian Atomic Project](https://github.com/debian-atomic)
|