8.1 KiB
8.1 KiB
Development Setup Guide
Project Status
✅ Current Achievements
apt-ostree has achieved significant milestones and is ready for development and testing:
- 100% rpm-ostree CLI Compatibility: All 21 core commands implemented with identical interfaces
- Real APT/OSTree Integration: Working package download, extraction, and commit creation
- OSTree Environment Detection: Comprehensive detection system with multiple validation methods
- Systemd Service Integration: Daemon and service management with D-Bus communication
- Atomic Operations: All changes are atomic with proper rollback support
- Error Handling: Robust error handling and user-friendly error messages
🔄 Current Focus Areas
- Systemd Services: Implementing additional service files (bootstatus, automatic updates)
- Testing Infrastructure: Building comprehensive test suite
- Performance Optimization: Optimizing package operations and filesystem assembly
- Documentation: Enhancing user and developer documentation
📋 Upcoming Features
- Container Support: Container and image support
- CI/CD Pipeline: Automated testing and release automation
- Advanced Features: Multi-arch support, security enhancements, performance optimizations
Prerequisites
System Requirements
- OS: Debian/Ubuntu-based system
- Rust: 1.70+ (edition 2021)
- Memory: 4GB+ RAM recommended
- Disk: 10GB+ free space
Required Dependencies
# Install system dependencies
sudo apt update
sudo apt install -y \
build-essential \
pkg-config \
libapt-pkg-dev \
libostree-dev \
libdbus-1-dev \
bubblewrap \
systemd \
git \
curl
# Install Rust toolchain
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
rustup default stable
Optional Development Tools
# Install development tools
sudo apt install -y \
cargo-watch \
cargo-audit \
cargo-tarpaulin \
clang-format \
valgrind
# Install Rust development tools
cargo install cargo-watch
cargo install cargo-audit
cargo install cargo-tarpaulin
Project Setup
Clone Repository
git clone <repository-url>
cd apt-ostree
Build Project
# Build all targets
cargo build
# Build specific binary
cargo build --bin apt-ostree
cargo build --bin apt-ostreed
# Build with optimizations
cargo build --release
Run Tests
# Run all tests
cargo test
# Run specific test
cargo test test_name
# Run tests with output
cargo test -- --nocapture
# Run tests with logging
RUST_LOG=debug cargo test
Development Workflow
Code Quality
# Format code
cargo fmt
# Lint code
cargo clippy
# Check for security vulnerabilities
cargo audit
# Run code coverage
cargo tarpaulin
Development with Watch
# Watch for changes and rebuild
cargo watch -x build
# Watch for changes and run tests
cargo watch -x test
# Watch for changes and run specific binary
cargo watch -x 'run --bin apt-ostree -- status'
Debugging
Enable Debug Logging
# Set log level
export RUST_LOG=debug
# Run with debug logging
RUST_LOG=debug cargo run --bin apt-ostree -- status
Debug with GDB
# Build with debug symbols
cargo build
# Run with GDB
gdb target/debug/apt-ostree
Debug with LLDB
# Run with LLDB
lldb target/debug/apt-ostree
Testing
Unit Tests
# Run unit tests
cargo test
# Run specific module tests
cargo test apt
cargo test ostree
cargo test system
Integration Tests
# Run integration tests
cargo test --test integration
# Run with specific test data
RUST_TEST_DATA_DIR=/path/to/test/data cargo test
OSTree Detection Tests
# Run OSTree detection test script
./scripts/testing/test-ostree-detection.sh
Manual Testing
# Test CLI commands
cargo run --bin apt-ostree -- --help
cargo run --bin apt-ostree -- status
cargo run --bin apt-ostree -- daemon-ping
# Test daemon
cargo run --bin apt-ostreed
Daemon Development
Build and Install Daemon
# Build daemon
cargo build --bin apt-ostreed
# Install daemon
sudo cp target/debug/apt-ostreed /usr/bin/
sudo cp src/daemon/apt-ostreed.service /etc/systemd/system/
sudo cp src/daemon/org.aptostree.dev.conf /etc/dbus-1/system.d/
# Reload and start
sudo systemctl daemon-reload
sudo systemctl enable apt-ostreed
sudo systemctl start apt-ostreed
Test Daemon
# Check daemon status
sudo systemctl status apt-ostreed
# View daemon logs
sudo journalctl -u apt-ostreed -f
# Test D-Bus communication
cargo run --bin apt-ostree -- daemon-ping
cargo run --bin apt-ostree -- daemon-status
Debug Daemon
# Run daemon in foreground with debug logging
RUST_LOG=debug cargo run --bin apt-ostreed
# Test D-Bus interface
d-feet # GUI D-Bus browser
gdbus introspect --system --dest org.aptostree.dev --object-path /org/aptostree/dev
Code Structure
Key Files
src/
├── main.rs # CLI application entry point
├── lib.rs # Library interface
├── apt.rs # APT package management
├── ostree.rs # OSTree operations
├── system.rs # System integration
├── package_manager.rs # High-level package operations
├── ostree_detection.rs # Environment detection
├── permissions.rs # Permission handling
├── error.rs # Error types
└── bin/
├── apt-ostreed.rs # D-Bus daemon
└── test_runner.rs # Test runner
Adding New Commands
- Add command to
Commandsenum insrc/main.rs - Add command options struct
- Implement command logic in
src/system.rs - Add tests in
src/tests.rs - Update documentation
Adding New Modules
- Create new module file in
src/ - Add module to
src/lib.rs - Add module to
src/main.rsif needed - Add tests
- Update documentation
Troubleshooting
Common Issues
Build Errors
# Clean and rebuild
cargo clean
cargo build
# Update dependencies
cargo update
cargo build
Permission Errors
# Check file permissions
ls -la /usr/bin/apt-ostreed
ls -la /etc/systemd/system/apt-ostreed.service
# Fix permissions
sudo chmod 755 /usr/bin/apt-ostreed
sudo chmod 644 /etc/systemd/system/apt-ostreed.service
D-Bus Errors
# Check D-Bus policy
sudo cat /etc/dbus-1/system.d/org.aptostree.dev.conf
# Restart D-Bus
sudo systemctl restart dbus
# Restart daemon
sudo systemctl restart apt-ostreed
OSTree Errors
# Check OSTree installation
ostree --version
# Check OSTree repository
ostree log debian/stable/x86_64
# Initialize OSTree repository if needed
ostree init --repo=/path/to/repo
Debug Information
# Get system information
uname -a
lsb_release -a
rustc --version
cargo --version
# Check installed packages
dpkg -l | grep -E "(apt|ostree|dbus)"
# Check systemd services
systemctl list-units --type=service | grep apt-ostree
Performance Profiling
Memory Profiling
# Install memory profiler
cargo install memory-profiler
# Profile memory usage
cargo run --bin apt-ostree -- install package1 package2
CPU Profiling
# Install CPU profiler
cargo install flamegraph
# Generate flamegraph
cargo flamegraph --bin apt-ostree -- install package1 package2
Benchmarking
# Run benchmarks
cargo bench
# Run specific benchmark
cargo bench package_installation
Contributing
Code Style
- Follow Rust coding conventions
- Use
cargo fmtfor formatting - Run
cargo clippyfor linting - Add tests for new features
- Update documentation
Git Workflow
# Create feature branch
git checkout -b feature/new-feature
# Make changes
# ... edit files ...
# Add and commit changes
git add .
git commit -m "Add new feature"
# Push branch
git push origin feature/new-feature
# Create pull request
# ... create PR on GitHub ...
Testing Before Submission
# Run all tests
cargo test
# Run linting
cargo clippy
# Check formatting
cargo fmt --check
# Run security audit
cargo audit
# Build all targets
cargo build --all-targets