Skip to content

Releases: startergo/EndeavourOS-ISO-arm64

v2026.02.24-c687f2f

24 Feb 04:35

Choose a tag to compare

Since EndeavourOS Live ISO now uses KDE, it's too big to fit into GitHub release, so we are using other means of distribution.

Just run:
curl -fsSL https://github.com/startergo/EndeavourOS-ISO-arm64/releases/download/v2026.02.24-c687f2f/helper.sh | bash

in your terminal.

Full Changelog: v2026.02.24-9fcdd0b...v2026.02.24-c687f2f

To install the EndeavourOS from the Live ISO:

cat > install-eos.sh << 'EOF'
#!/bin/bash
#
# EndeavourOS ARM64 one-step installer
# Run from the live ISO as: sudo bash install-eos.sh
#
# Installs to /dev/vda with:
#   /dev/vda1 — 512M EFI  (mounted at /boot)
#   /dev/vda2 — root (ext4)
#
# Edit the variables below before running.
# -------------------------------------------------------

DISK="/dev/vda"
HOSTNAME="endeavouros-vm"
TIMEZONE="America/New_York"
LOCALE="en_US.UTF-8"
USERNAME="user"
ROOT_PASSWORD="root"
USER_PASSWORD="user"

PACKAGES_URL="https://raw.githubusercontent.com/startergo/EndeavourOS-ISO-arm64/main/packages.aarch64"

# KDE Plasma X11 — minimal working base
DE_PACKAGES="xorg-server xf86-video-fbdev xf86-input-libinput \
    plasma-desktop plasma-workspace kwin-x11 \
    plasma-nm plasma-pa kscreen \
    sddm sddm-kcm breeze breeze-gtk kwallet-pam \
    konsole dolphin firefox \
    xdg-desktop-portal-kde xdg-user-dirs kde-cli-tools"

# -------------------------------------------------------
set -e

EFI_PART="${DISK}1"
ROOT_PART="${DISK}2"

echo ""
echo "==> EndeavourOS ARM64 Installer"
echo "    Disk   : $DISK"
echo "    User   : $USERNAME"
echo ""
read -rp "This will ERASE $DISK. Continue? [y/N] " confirm
[[ "$confirm" =~ ^[Yy]$ ]] || { echo "Aborted."; exit 1; }

# -------------------------------------------------------
echo ""
echo "==> Fixing keyring..."
pacman-key --init
pacman-key --populate archlinuxarm archlinux endeavouros
pacman -Sy --noconfirm archlinux-keyring archlinuxarm-keyring endeavouros-keyring 2>/dev/null || true

# -------------------------------------------------------
echo ""
echo "==> Fetching full package list..."
curl -fsSL "$PACKAGES_URL" -o /tmp/packages.aarch64

# -------------------------------------------------------
echo ""
echo "==> Partitioning $DISK..."
parted -s "$DISK" \
    mklabel gpt \
    mkpart ESP fat32 1MiB 513MiB \
    set 1 esp on \
    mkpart root ext4 513MiB 100%

echo "==> Formatting..."
mkfs.fat -F32 "$EFI_PART"
mkfs.ext4 -F "$ROOT_PART"

echo "==> Mounting..."
mount "$ROOT_PART" /mnt
mkdir -p /mnt/boot
mount "$EFI_PART" /mnt/boot

# Set machine-id before pacstrap so kernel-install hooks work correctly
systemd-machine-id-setup --root=/mnt

# -------------------------------------------------------
echo ""
echo "==> Running pacstrap with minimal working base..."
pacstrap /mnt \
    base base-devel \
    linux-eos-arm linux-eos-arm-headers linux-firmware \
    networkmanager efibootmgr \
    sudo nano git curl wget \
    pipewire pipewire-pulse pipewire-alsa wireplumber \
    spice-vdagent qemu-guest-agent \
    $DE_PACKAGES

# -------------------------------------------------------
echo ""
echo "==> Generating fstab..."
genfstab -U /mnt | tee /mnt/etc/fstab

# -------------------------------------------------------
echo ""
echo "==> Detecting kernel and initramfs..."
KERNEL=$(find /mnt/boot -maxdepth 3 \( -name "Image" -o -name "vmlinuz*" \) 2>/dev/null | grep -v ".efi" | head -1)
INITRD=$(find /mnt/boot -maxdepth 3 \( -name "initramfs*.img" -o -name "initrd*" \) 2>/dev/null | grep -v "fallback" | head -1)

if [ -z "$KERNEL" ]; then
    echo "ERROR: Kernel not found. /mnt/boot contents:"
    find /mnt/boot -maxdepth 4 | head -40
    exit 1
fi

echo "    Kernel : $KERNEL"
echo "    Initrd : $INITRD"

KERNEL_REL="${KERNEL#/mnt/boot}"
INITRD_REL="${INITRD#/mnt/boot}"
ROOT_UUID=$(blkid -s UUID -o value "$ROOT_PART")

# Copy full package list into new root for chroot install
cp /tmp/packages.aarch64 /mnt/tmp/packages.aarch64

# Copy EndeavourOS KDE config from live ISO liveuser into installed system
echo ""
echo "==> Copying EndeavourOS KDE config from live ISO..."
cp -a /etc/skel/. /mnt/etc/skel/
# Copy liveuser KDE config — this is the actual theming/plasma config
mkdir -p /mnt/home/${USERNAME}/.config
mkdir -p /mnt/home/${USERNAME}/.local
cp -a /home/liveuser/.config/. /mnt/home/${USERNAME}/.config/ 2>/dev/null || true
cp -a /home/liveuser/.local/. /mnt/home/${USERNAME}/.local/ 2>/dev/null || true
cp -a /home/liveuser/.gtkrc-2.0 /mnt/home/${USERNAME}/ 2>/dev/null || true

# -------------------------------------------------------
echo ""
echo "==> Writing chroot script..."

cat > /mnt/chroot-install.sh << CHROOT_SCRIPT
#!/bin/bash
set -e

# Timezone
ln -sf /usr/share/zoneinfo/TIMEZONE_PLACEHOLDER /etc/localtime
hwclock --systohc

# Locale
echo "LOCALE_PLACEHOLDER UTF-8" >> /etc/locale.gen
locale-gen
echo "LANG=LOCALE_PLACEHOLDER" > /etc/locale.conf

# Hostname
echo "HOSTNAME_PLACEHOLDER" > /etc/hostname
printf '127.0.0.1\tlocalhost\n::1\tlocalhost\n127.0.1.1\tHOSTNAME_PLACEHOLDER.localdomain HOSTNAME_PLACEHOLDER\n' > /etc/hosts

# Root password
printf 'ROOT_PASSWORD_PLACEHOLDER\nROOT_PASSWORD_PLACEHOLDER\n' | passwd root

# User
groupadd -f nopasswdlogin
useradd -mG wheel,audio,video,storage,network,nopasswdlogin "USERNAME_PLACEHOLDER"
printf 'USER_PASSWORD_PLACEHOLDER\nUSER_PASSWORD_PLACEHOLDER\n' | passwd "USERNAME_PLACEHOLDER"

# Fix ownership of KDE config copied from live ISO
chown -R USERNAME_PLACEHOLDER:USERNAME_PLACEHOLDER /home/USERNAME_PLACEHOLDER/

# Sudoers
sed -i 's/^# %wheel ALL=(ALL:ALL) ALL/%wheel ALL=(ALL:ALL) ALL/' /etc/sudoers

# SDDM — force X11, autologin
mkdir -p /etc/sddm.conf.d
cat > /etc/sddm.conf.d/kde.conf << SDDM
[General]
DisplayServer=X11

[Autologin]
User=USERNAME_PLACEHOLDER
Session=plasma
Relogin=false
SDDM

# Getty autologin on tty1 — same mechanism as live ISO
mkdir -p /etc/systemd/system/getty@tty1.service.d
cat > /etc/systemd/system/getty@tty1.service.d/autologin.conf << GETTY
[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear --autologin USERNAME_PLACEHOLDER - \$TERM
GETTY

# Services
systemctl enable NetworkManager
systemctl enable sddm
systemctl enable qemu-guest-agent
systemctl set-default graphical.target
[[ -f /usr/lib/systemd/system/spice-vdagentd.service ]] && systemctl enable spice-vdagentd

# Install full package list on top of working base
echo "==> Installing full package list..."
pacman -Sy --noconfirm --needed \$(grep -v '^#' /tmp/packages.aarch64 | grep -v '^\$' | \
    grep -v 'mkinitcpio-archiso' | grep -v 'clonezilla' | tr '\n' ' ') || true

# systemd-boot
bootctl install --esp-path=/boot

cat > /boot/loader/loader.conf << LOADER
default endeavouros.conf
timeout 3
console-mode max
editor no
LOADER

mkdir -p /boot/loader/entries
cat > /boot/loader/entries/endeavouros.conf << ENTRY
title   EndeavourOS
linux   KERNEL_REL_PLACEHOLDER
initrd  INITRD_REL_PLACEHOLDER
options root=UUID=ROOT_UUID_PLACEHOLDER rw quiet
ENTRY

echo "==> Boot entry written:"
cat /boot/loader/entries/endeavouros.conf
echo "==> Chroot done."
CHROOT_SCRIPT

# Substitute placeholders
sed -i "s|TIMEZONE_PLACEHOLDER|${TIMEZONE}|g" /mnt/chroot-install.sh
sed -i "s|LOCALE_PLACEHOLDER|${LOCALE}|g" /mnt/chroot-install.sh
sed -i "s|HOSTNAME_PLACEHOLDER|${HOSTNAME}|g" /mnt/chroot-install.sh
sed -i "s|ROOT_PASSWORD_PLACEHOLDER|${ROOT_PASSWORD}|g" /mnt/chroot-install.sh
sed -i "s|USERNAME_PLACEHOLDER|${USERNAME}|g" /mnt/chroot-install.sh
sed -i "s|USER_PASSWORD_PLACEHOLDER|${USER_PASSWORD}|g" /mnt/chroot-install.sh
sed -i "s|ROOT_UUID_PLACEHOLDER|${ROOT_UUID}|g" /mnt/chroot-install.sh
sed -i "s|KERNEL_REL_PLACEHOLDER|${KERNEL_REL}|g" /mnt/chroot-install.sh
sed -i "s|INITRD_REL_PLACEHOLDER|${INITRD_REL}|g" /mnt/chroot-install.sh

chmod +x /mnt/chroot-install.sh

# -------------------------------------------------------
echo "==> Running chroot configuration..."
arch-chroot /mnt /bin/bash /chroot-install.sh

rm /mnt/chroot-install.sh

# -------------------------------------------------------
echo ""
echo "==> Unmounting..."
umount -R /mnt

echo ""
echo "================================================"
echo "  Installation complete!"
echo "  Username : $USERNAME / Password : $USER_PASSWORD"
echo "  Root     : root     / Password : $ROOT_PASSWORD"
echo ""
echo "  In the QEMU monitor type: eject icd0"
echo "  Then: system_reset"
echo "================================================"
EOF

And then run:

sudo bash  install-eos.sh

v2026.02.24-b541eed

24 Feb 03:08

Choose a tag to compare

Since EndeavourOS Live ISO now uses KDE, it's too big to fit into GitHub release, so we are using other means of distribution.

Just run:
curl -fsSL https://github.com/startergo/EndeavourOS-ISO-arm64/releases/download/v2026.02.24-b541eed/helper.sh | bash

in your terminal.

Full Changelog: v2026.02.24-ac5e0e1...v2026.02.24-b541eed

v2026.02.24-ac5e0e1

24 Feb 02:36

Choose a tag to compare

Since EndeavourOS Live ISO now uses KDE, it's too big to fit into GitHub release, so we are using other means of distribution.

Just run:
curl -fsSL https://github.com/startergo/EndeavourOS-ISO-arm64/releases/download/v2026.02.24-ac5e0e1/helper.sh | bash

in your terminal.

Full Changelog: v2026.02.24-89fab0d...v2026.02.24-ac5e0e1

v2026.02.24-9fcdd0b

24 Feb 03:59

Choose a tag to compare

Since EndeavourOS Live ISO now uses KDE, it's too big to fit into GitHub release, so we are using other means of distribution.

Just run:
curl -fsSL https://github.com/startergo/EndeavourOS-ISO-arm64/releases/download/v2026.02.24-9fcdd0b/helper.sh | bash

in your terminal.

Full Changelog: v2026.02.24-b541eed...v2026.02.24-9fcdd0b

v2026.02.24-92e5cf8

24 Feb 01:06

Choose a tag to compare

Since EndeavourOS Live ISO now uses KDE, it's too big to fit into GitHub release, so we are using other means of distribution.

Just run:
curl -fsSL https://github.com/startergo/EndeavourOS-ISO-arm64/releases/download/v2026.02.24-92e5cf8/helper.sh | bash

in your terminal.

Full Changelog: v2026.02.22-b732dc9...v2026.02.24-92e5cf8

v2026.02.24-89fab0d

24 Feb 02:02

Choose a tag to compare

Since EndeavourOS Live ISO now uses KDE, it's too big to fit into GitHub release, so we are using other means of distribution.

Just run:
curl -fsSL https://github.com/startergo/EndeavourOS-ISO-arm64/releases/download/v2026.02.24-89fab0d/helper.sh | bash

in your terminal.

Full Changelog: v2026.02.24-92e5cf8...v2026.02.24-89fab0d

v2026.02.22-b732dc9

22 Feb 21:51

Choose a tag to compare

Since EndeavourOS Live ISO now uses KDE, it's too big to fit into GitHub release, so we are using other means of distribution.

Just run:
curl -fsSL https://github.com/startergo/EndeavourOS-ISO-arm64/releases/download/v2026.02.22-b732dc9/helper.sh | bash

in your terminal.

Full Changelog: v2026.02.20-ab188a9...v2026.02.22-b732dc9