particle-os/README.md
robojerk cecdca9586 Major documentation and infrastructure updates
- Added comprehensive bootc.md with Particle OS-specific guidance
- Added filesystem.md explaining immutable architecture
- Added scope.md with critical implementation requirements
- Updated roadmap.md with current progress tracking
- Updated todo.md with current status and next steps
- Updated README.md with disk utility requirements
- Updated Containerfile with kernel and locale fixes
- Updated .gitignore for comprehensive coverage
- Fixed critical disk utility and PATH issues
- Resolved UTF-8 encoding problems
- Added proper OSTree labels and kernel setup

Phase 1 foundation is solid - disk utility requirements addressed.
Current focus: Resolving kernel detection issue to complete Phase 1.
2025-08-07 00:57:29 -07:00

165 lines
No EOL
4.9 KiB
Markdown

# Debian Atomic Desktop Project
A project to create a Debian-based atomic desktop system using `bootc` and `OSTree`, inspired by `ublue-os`.
## Project Structure
This project is organized into phases:
### Phase 1: `01-debian-atomic/` ✅ Complete
- **Goal**: Create a minimal, bootable Debian Trixie atomic image
- **Status**: ✅ Complete
- **Contents**:
- `Containerfile` - Defines the base atomic image
- `justfile` - Build automation
- `README.md` - Phase 1 documentation
### Phase 2: `02-installer/` 🔄 In Progress
- **Goal**: Create a bootable ISO with Calamares installer using live-build
- **Status**: 🔄 In Progress (Contents file issues being resolved)
- **Contents**:
- `justfile` - Live-build automation
- `calamares/` - Installer configuration
- `config/` - Live-build configuration
- `scripts/` - Helper scripts
### Phase 2 Alternative: `02-installer-bootc/` 🔄 In Progress
- **Goal**: Modern approach using bootc + Calamares (Recommended)
- **Status**: 🔄 In Progress
- **Contents**:
- `Containerfile` - Bootc container definition
- `justfile` - Container build automation
- `scripts/` - Testing scripts
## Critical Prerequisites: Disk Utilities for bootc Deployment
**⚠️ CRITICAL REQUIREMENT:** Successful deployment using `bootc install to-disk` requires specific disk utilities that are often missing from minimal environments.
### Essential Disk Utilities
The following utilities must be available in your deployment environment:
- **`sfdisk`** (from `util-linux`) - **CRITICAL** for automated partitioning
- **`parted`** - Alternative partitioning tool
- **`mkfs.ext4`** (from `e2fsprogs`) - Filesystem creation
- **`mkfs.fat`** (from `dosfstools`) - FAT32 filesystem for EFI
- **`grub-install`** - Bootloader installation
- **`efibootmgr`** - UEFI boot manager
### Installation and Verification
```bash
# Install required utilities
sudo apt update
sudo apt install -y util-linux parted e2fsprogs dosfstools grub-efi-amd64 efibootmgr
# Verify availability (all should return paths)
which sfdisk parted mkfs.ext4 mkfs.fat grub-install efibootmgr
# Test sfdisk functionality
sfdisk --version
```
### Common Failure Points
- `error: Installing to disk: Creating rootfs: Failed to run sfdisk: No such file or directory`
- Missing filesystem creation tools
- Incomplete bootloader installation utilities
### Troubleshooting: PATH Issues in Minimal Environments
**Common Issue**: `sfdisk` exists but isn't found due to incomplete PATH in minimal environments.
**Diagnosis:**
```bash
# Check if util-linux is installed
dpkg -l | grep util-linux
# Find sfdisk location
find / -name sfdisk 2>/dev/null
# Check current PATH
echo $PATH
# Test sfdisk directly
/usr/sbin/sfdisk --version
```
**Solution:**
```bash
# Fix PATH and run bootc
sudo env PATH="/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin" \
podman run --rm --privileged --pid=host --volume /dev:/dev \
localhost/debian-atomic:latest /usr/bin/bootc install to-disk /dev/target-device
```
**Note:** This requirement affects all phases and deployment scenarios. See `scope.md` for detailed implementation guidance.
## Quick Start
1. **Verify Prerequisites** (Critical):
```bash
# Ensure disk utilities are available
which sfdisk parted mkfs.ext4 mkfs.fat grub-install efibootmgr
sfdisk --version
```
2. **Phase 1** (Atomic Image):
```bash
cd 01-debian-atomic
just build-image
just test-image
```
3. **Phase 2** (Traditional live-build approach):
```bash
cd 02-installer
just build-iso
```
4. **Phase 2 Alternative** (Modern bootc approach - Recommended):
```bash
cd 02-installer-bootc
just build-installer
just test-installer-systemd
```
## Which Approach Should You Use?
### For Phase 2, we recommend the **bootc approach** (`02-installer-bootc/`) because:
✅ **Consistent tooling** - Everything uses bootc
✅ **No sysvinit conflicts** - Pure systemd environment
✅ **Atomic guarantees** - The installer itself is atomic
✅ **Simpler maintenance** - One build system instead of two
✅ **Modern approach** - Uses container-native tooling
The traditional live-build approach (`02-installer/`) has many hook files and complex dependencies, which is why we created the bootc alternative.
## Prerequisites
- `just` command runner
- `podman` or `docker`
- `live-build` (for Phase 2 traditional approach)
- `qemu-system-x86_64` (for testing)
- **CRITICAL:** Complete disk utilities (`util-linux`, `parted`, `e2fsprogs`, `dosfstools`, `grub-efi-amd64`, `efibootmgr`)
## Performance Optimization
To speed up builds, use apt-cacher-ng:
```bash
# Set up apt-cacher-ng
./scripts/setup-apt-cacher.sh
# Then edit the justfile to enable the proxy
# In 02-installer/justfile, uncomment APT_CACHER_NG_PROXY
```
## Development
See `roadmap.md` for detailed project planning and `todo` for current tasks.
## License
This project is open source. See individual files for specific licensing information.