Skip to content

Installing Home Assistant OS on Legacy BIOS Hardware: ThinkPad X61s Success Story #39584

@motaviegas

Description

@motaviegas

Feedback

I want to share, my ability to install HAOS in a no EFI old computer considering you’re going to end support on other OS as you’ll be giving support only to HAOS and container. Container for me, because of the lack of addons support, was not an option considering the amount of addons I have and so, I hope this can be my contribute to the community that doesn’t have other computers to install HAOS with EFI like myself.
All is working and the backup restaure was perfect!
3 days of intense work with the help of AI, what else, but things are running! Continue the good work.

URL

https://www.home-assistant.io/installation/

Version

2025.6.1

Additional information

Installing Home Assistant OS on Legacy BIOS Hardware: ThinkPad X61s Success Story

The Challenge

Installing Home Assistant OS (HAOS) on a 2007 ThinkPad X61s with legacy BIOS (no UEFI support) seemed impossible. HAOS uses GPT partitioning and expects UEFI boot, while legacy BIOS only supports MBR and GRUB Legacy has no GPT support.

Root Cause Analysis

HAOS Partition Structure (GPT):

  • sda1: hassos-boot (bootloader files)
  • sda2: hassos-kernel0 (active kernel)
  • sda3: hassos-system0 (root filesystem, SquashFS)
  • sda4: hassos-kernel1 (backup kernel)
  • sda8: hassos-data (user data)

GRUB Legacy Limitations:

  • No GPT partition table support
  • Cannot read SquashFS kernel partitions
  • Missing PARTUUID support

The Solution: Complete Installation Process

Step 1: Prepare Installation Environment

# Boot Ubuntu Live USB
# Access root terminal
sudo -i

# Identify target disk
lsblk
fdisk -l /dev/sda

Step 2: Copy Complete HAOS Image

# Extract HAOS image (if compressed)
cd /media/ubuntu/USB_DEVICE/
xz -d haos_generic-x86-64-15.2.img.xz

# Copy entire HAOS image with all 8 partitions
dd if=haos_generic-x86-64-15.2.img of=/dev/sda bs=4M status=progress
sync

# Expand last partition to use full disk
parted /dev/sda resizepart 8 100%
resize2fs /dev/sda8

This preserves the complete HAOS partition structure:

  • All 8 partitions copied intact
  • GPT partition table maintained
  • HAOS filesystem structure preserved

Step 3: Create Bridge Partition

# Create small ext4 partition for GRUB Legacy
sudo gparted /dev/sda
# Add 10MB ext4 partition as /dev/sda9

Step 2: Install GRUB Legacy Bridge

# Mount bridge partition
sudo mount /dev/sda9 /mnt

# Install GRUB Legacy
sudo grub-install --root-directory=/mnt /dev/sda --force

# Create bridge configuration
sudo nano /mnt/boot/grub/grub.cfg

Bridge Configuration:

set root=(hd0,1)
configfile /efi/boot/grub.cfg

Step 3: BIOS Settings

  • Enable Legacy Boot mode
  • Set HDD as first boot priority
  • Disable UEFI/Secure Boot

How It Works

  1. Legacy BIOS loads GRUB Legacy from bridge partition
  2. GRUB Legacy chainloads GRUB2 from HAOS boot partition
  3. GRUB2 handles modern GPT/SquashFS boot process
  4. HAOS boots normally with full functionality

Results

  • ✅ Full HAOS installation working on 2007 hardware
  • ✅ All add-ons supported (unlike Container method)
  • ✅ Standard HAOS update process maintained
  • ✅ Web interface accessible at port 8123

Hardware Tested

  • Device: Lenovo ThinkPad X61s (2007)
  • CPU: Intel Core 2 Duo (x86-64)
  • RAM: 3GB
  • Storage: 240GB SSD
  • BIOS: Legacy only (no UEFI)

Key Insights

The bridge partition method creates compatibility between legacy BIOS limitations and modern HAOS requirements without modifying the core HAOS image. This preserves update functionality while enabling installation on hardware that would otherwise be incompatible.

This solution works for any legacy x86-64 system lacking UEFI support, providing a path forward as Home Assistant phases out Core and Supervised installation methods.

Metadata

Metadata

Assignees

No one assigned

    Labels

    installationstaleThe PR had no activity for quite some time, and is marked as Stale

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions