Some checks failed
particle-os CI / Test particle-os (push) Failing after 1s
particle-os CI / Integration Test (push) Has been skipped
particle-os CI / Security & Quality (push) Failing after 1s
Test particle-os Basic Functionality / test-basic (push) Failing after 1s
particle-os CI / Build and Release (push) Has been skipped
- Add critical issues section for GRUB TTY problems - Document all attempted TTY bypass solutions - Organize by development phases with clear priorities - Add immediate action items and project metrics - Include risk assessment and integration planning This update reflects the current blocking issues preventing functional bootable image creation and outlines the path forward through bootupd integration.
132 lines
5.8 KiB
Text
132 lines
5.8 KiB
Text
# Overseer Project - Debian Boot Architecture Fix Changelog
|
|
|
|
## 2024-12-19 - Debian Boot Architecture Implementation
|
|
|
|
### Phase 1: GRUB TTY Fix & Debian Layout Correction
|
|
|
|
#### Initial Analysis
|
|
- **Problem Identified**: GRUB installation failing with "Error: short-name resolution enforced but cannot prompt without a TTY"
|
|
- **Root Cause**: Container environment cannot provide TTY for GRUB device resolution prompts
|
|
- **Architecture Validation**: Fedora-style partition layout (ESP + Boot + Root) is correct for atomic systems
|
|
- **Partition Scheme**: 3-partition layout confirmed optimal - ESP (FAT32), Boot (ext4), Root (ext4)
|
|
|
|
#### Implementation Attempts
|
|
|
|
**Attempt 1: Basic TTY Flag Removal**
|
|
- **Action**: Removed `--tty` flag from podman run commands
|
|
- **Result**: TTY error persisted - flag removal insufficient
|
|
- **Error**: "Error: short-name resolution enforced but cannot prompt without a TTY"
|
|
|
|
**Attempt 2: Environment Variable Override**
|
|
- **Action**: Added `DEBIAN_FRONTEND=noninteractive`, `GRUB_DISABLE_OS_PROBER=true`
|
|
- **Result**: TTY error persisted - environment variables insufficient
|
|
- **Error**: Same TTY resolution error
|
|
|
|
**Attempt 3: Comprehensive Non-Interactive Flags**
|
|
- **Action**: Added `--force`, `--no-nvram`, `--skip-fs-probe`, `--no-boot-directory-check`
|
|
- **Result**: TTY error persisted - flag combinations insufficient
|
|
- **Error**: Same TTY resolution error
|
|
|
|
**Attempt 4: Device Map Creation**
|
|
- **Action**: Created explicit device map `(hd0) /dev/loop0` before GRUB installation
|
|
- **Result**: TTY error persisted - device mapping insufficient
|
|
- **Error**: Same TTY resolution error
|
|
|
|
**Attempt 5: Alternative GRUB Installation Methods**
|
|
- **Action**: Implemented three fallback methods with minimal flags
|
|
- **Result**: All methods failed with same TTY error
|
|
- **Error**: Same TTY resolution error
|
|
|
|
**Attempt 6: Explicit Device Specification (Your Suggested Fix)**
|
|
- **Action**: Used `grub-install --target=x86_64-efi --efi-directory=/boot/efi --boot-directory=/boot /dev/loop0`
|
|
- **Result**: Still failed with TTY error - explicit device specification insufficient
|
|
- **Error**: "Error: short-name resolution enforced but cannot prompt without a TTY"
|
|
- **Analysis**: Issue is deeper than device specification - GRUB requires interactive TTY for device resolution regardless of flags
|
|
|
|
#### What Worked
|
|
|
|
**Kernel File Copying Pipeline**
|
|
- **Function**: `copyKernelFiles()` successfully copies kernel files from OSTree location to `/boot` partition
|
|
- **Source**: `/usr/lib/ostree-boot/` in container image
|
|
- **Target**: `/mnt/boot/` on separate boot partition
|
|
- **Files Copied**: `vmlinuz-*`, `initrd.img-*`, `config-*`, `System.map-*`
|
|
- **Result**: Kernel files accessible to bootloader in correct location
|
|
|
|
**Partition Management**
|
|
- **GPT Partition Table**: Successfully created with parted
|
|
- **Filesystem Formatting**: FAT32 (ESP), ext4 (Boot), ext4 (Root)
|
|
- **Mount Point Management**: Correct mounting order and cleanup
|
|
- **Permission Handling**: Fixed OSTree boot directory creation with sudo
|
|
|
|
**OSTree System Detection**
|
|
- **Detection Logic**: Successfully identifies OSTree components
|
|
- **Components Found**: `usr/lib/ostree-boot`, `usr/lib/systemd`, `usr/bin/bootc`, `usr/bin/bootupd`
|
|
- **Fallback Logic**: Gracefully handles non-OSTree systems
|
|
|
|
#### What Failed
|
|
|
|
**GRUB Installation**
|
|
- **UEFI Target**: Failed with exit status 125 (TTY resolution error)
|
|
- **BIOS Target**: Failed with exit status 125 (TTY resolution error)
|
|
- **All Methods**: Failed regardless of flag combinations or environment variables
|
|
- **Root Cause**: Fundamental container environment limitation - GRUB requires interactive TTY for device resolution
|
|
|
|
**GRUB Configuration Generation**
|
|
- **grub-mkconfig**: Failed with same TTY error
|
|
- **update-grub**: Failed with same TTY error
|
|
- **Result**: No GRUB configuration files generated
|
|
|
|
#### Final Implementation
|
|
|
|
**Working Script**: `create-corrected-bootable-image.go`
|
|
- **Language**: Go (compiles successfully)
|
|
- **Partition Layout**: Fedora-style optimal for atomic systems
|
|
- **Kernel File Handling**: Complete pipeline from OSTree to boot partition
|
|
- **Error Handling**: Comprehensive logging and graceful degradation
|
|
- **Fallback Strategy**: Creates minimal bootable image when GRUB fails
|
|
|
|
**Fallback Behavior**
|
|
- **GRUB Failure**: Detected and logged
|
|
- **Minimal Image**: Created with kernel files and boot instructions
|
|
- **Boot Configuration**: `boot.txt` with manual boot instructions
|
|
- **Result**: Functional image with kernel files, no automatic bootloader
|
|
|
|
#### Technical Details
|
|
|
|
**Container Environment Issues**
|
|
- **Podman Version**: Using container image `238208cf481a`
|
|
- **Privilege Level**: `--privileged` with device mounting
|
|
- **TTY Allocation**: Cannot provide interactive TTY for GRUB prompts
|
|
- **Device Resolution**: GRUB cannot resolve device names without user input
|
|
|
|
**Partition Specifications**
|
|
- **BIOS Boot**: 1MB (unmounted)
|
|
- **EFI System**: 501MB FAT32 mounted at `/boot/efi`
|
|
- **Boot Partition**: 1GB ext4 mounted at `/boot`
|
|
- **Root Partition**: Remaining space ext4 mounted at `/`
|
|
|
|
**File System Operations**
|
|
- **Copy Method**: `cp -a` for rootfs content
|
|
- **Permission Fix**: `chown -R root:root` after copy
|
|
- **Directory Creation**: `mkdir -p` with sudo for proper ownership
|
|
- **Cleanup**: Reverse mount order unmounting with defer
|
|
|
|
#### Current Status
|
|
|
|
**Functional Components**
|
|
- Image creation pipeline: Working
|
|
- Partition management: Working
|
|
- OSTree detection: Working
|
|
- Kernel file copying: Working
|
|
- Error handling: Working
|
|
- Fallback strategy: Working
|
|
|
|
**Non-Functional Components**
|
|
- GRUB installation: Failed (TTY limitation)
|
|
- GRUB configuration: Failed (TTY limitation)
|
|
- Automatic boot: Not available
|
|
|
|
**Production Readiness**
|
|
- **Development**: Ready for testing and iteration
|
|
- **Production**: Requires external bootloader or GRUB alternative
|
|
- **Limitation**: Images contain kernel files but no automatic boot mechanism
|