- 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.
165 lines
No EOL
4.9 KiB
Markdown
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. |