#!/bin/bash set -e # Note that these are packages installed to the Arch container # used to build the ISO. pacman-key --init pacman --noconfirm -Sy archlinux-keyring pacman --noconfirm -Sy archiso git python-pip sudo base-devel jq wget cache_dir=$(realpath --canonicalize-missing ~/.cache/omarchy/iso_$(date +%Y-%m-%d)) offline_mirror_dir="$cache_dir/airootfs/var/cache/omarchy/mirror/offline" # We need to fiddle with pip settings # in order to install to the correct place # as well as ignore some errors to make this less verbose export PIP_ROOT="$cache_dir/airootfs/" export PIP_ROOT_USER_ACTION="ignore" export PIP_NO_WARN_SCRIPT_LOCATION=1 export PIP_BREAK_SYSTEM_PACKAGES=1 # These packages will be installed **into** the ISO, and # won't be available to either archinstall or omarchy installer. python_packages=( terminaltexteffects ) arch_packages=( git gum openssl wget ) mkdir -p $cache_dir/ mkdir -p $offline_mirror_dir/ # We base our ISO on the official arch ISO (releng) config cp -r archiso/configs/releng/* $cache_dir/ # We clone the installer, and move it to the root users home folder # since this is the default user in the official releng ISO profile. git clone https://github.com/omacom-io/omarchy-installer "$cache_dir/airootfs/root/omarchy-installer" mv "$cache_dir/airootfs/root/omarchy-installer/installer" "$cache_dir/airootfs/root/installer" mv "$cache_dir/airootfs/root/omarchy-installer/logo.txt" "$cache_dir/airootfs/root/logo.txt" rm -rf "$cache_dir/airootfs/root/omarchy-installer" # Copy in the connectivity check script cp /check_connectivity.sh "$cache_dir/airootfs/root/check_connectivity.sh" # Configure sudoers for passwordless installation # This allows the installer to run without password prompts mkdir -p $cache_dir/airootfs/etc/sudoers.d/ echo "# Omarchy ISO - Allow passwordless sudo during installation" >>"$cache_dir/airootfs/etc/sudoers.d/99-omarchy-installer" echo "root ALL=(ALL:ALL) NOPASSWD: ALL" >>"$cache_dir/airootfs/etc/sudoers.d/99-omarchy-installer" echo "%wheel ALL=(ALL:ALL) NOPASSWD: ALL" >>"$cache_dir/airootfs/etc/sudoers.d/99-omarchy-installer" # We add in our auto-start applications # First we'll check for an active internet connection # Then we'll start the omarchy installer cat <<-'_EOF_' | tee "$cache_dir/airootfs/root/.automated_script.sh" #!/usr/bin/env bash set -euo pipefail if [[ $(tty) == "/dev/tty1" ]]; then sh ./check_connectivity.sh sh ./installer archinstall \ --config user_configuration.json \ --creds user_credentials.json \ --silent OMARCHY_USER="$(ls -1 /mnt/home | head -n1)" # Copy sudoers config to target system for passwordless sudo in chroot mkdir -p /mnt/etc/sudoers.d cp /etc/sudoers.d/99-omarchy-installer /mnt/etc/sudoers.d/ # Also ensure the user can run sudo without password in chroot echo "$OMARCHY_USER ALL=(ALL:ALL) NOPASSWD: ALL" >> /mnt/etc/sudoers.d/99-omarchy-installer HOME=/home/$OMARCHY_USER \ arch-chroot -u $OMARCHY_USER /mnt/ \ env OMARCHY_USER_NAME="$(>"$cache_dir/packages.x86_64" # Because this weird glitch with archiso, we also need to sync down # all the packages we need to build the ISO, but we'll do that in the # "host" mirror location, as we don't want them inside the ISO taking up space. # We'll also remove tzupdate as it won't be found in upstream mirrors. iso_packages=($(cat "$cache_dir/packages.x86_64")) mkdir -p /tmp/cleandb # Finally, we assemble the entire ISO mkarchiso -v -w "$cache_dir/work/" -o "/out/" "$cache_dir/"