#!/usr/bin/env bash source ./common.d/functions.sh source ./common.d/build_functions.sh require "wget" require "bsdtar" # shellcheck disable=SC2155 fetch_base_system() { local rootdir="$1" local src="$2" local filename="./cache/$(basename "${src%%\?*}")" [ ! -d "$rootdir" ] && { log "Rootdir [$rootdir] does not exists" ierror return 2 } if [ ! -f "$filename" ]; then log "Downloading rootfs tarball" internal wget -q --show-progress -O "$filename" "$src" || { log "Failed to download rootfs tarball" ierror return 1 } fi log "Extracting rootfs tarball" internal bsdtar -xpf "$filename" -C "$rootdir" || { log "Failed to extract rootfs tarball" error return 1 } return 0 } prepare_system() { local rootdir="$1" [ ! -d "$rootdir" ] && { log "Rootdir [$rootdir] does not exists" ierror return 2 } log "Removing default kernel and settings" internal chroot "$rootdir" userdel -r alarm chroot "$rootdir" pacman -R linux-aarch64 linux-firmware --noconfirm || { log "Failed to remove default kernel" } log "Adding mirrorlist" internal cp ./drop/mirrorlist "$rootdir/etc/pacman.d/mirrorlist" log "Populating pacman key store" internal { chroot "$rootdir" pacman-key --init && chroot "$rootdir" pacman-key --populate archlinuxarm } || { log "Failed to populate pacman key store" } log "Enable pacman parallel downloads" internal chroot "$rootdir" sed -i "s/#ParallelDownloads/ParallelDownloads/g" /etc/pacman.conf log "Update pacman keyrings" internal chroot "$rootdir" pacman -Sy archlinux-keyring archlinuxarm-keyring --noconfirm || { log "Failed to update pacman keyrings" } log "Updating system" internal chroot "$rootdir" pacman -Syu --noconfirm || { log "Failed to update system" } return 0 } setup_zram_generator() { local rootdir="$1" [ ! -d "$rootdir" ] && { log "Rootdir [$rootdir] does not exists" ierror return 2 } log "Installing systemd-zram-generator" install chroot "$rootdir" pacman -S zram-generator --noconfirm || { log "Failed to install systemd-zram-generator" ierror return 1 } log "Configuring zram-generator" internal cp ./drop/zram-generator.conf "$rootdir/etc/systemd/zram-generator.conf" || { log "Failed to confugire zram-generator" ierror return 1 } log "Enabling zram-generator" internal chroot "$rootdir" systemctl enable systemd-zram-setup@zram0.service || { log "Failed to enable zram-generator" ierror return 1 } return 0 } install_nabu_packages() { local rootdir="$1" [ ! -d "$rootdir" ] && { log "Rootdir [$rootdir] does not exists" ierror return 2 } cp ./packages/*.zst "$rootdir/opt/" chroot "$rootdir" bash -c "pacman -U /opt/*.zst --noconfirm" || { log "Failed to install packages" ierror return 1 } chroot "$rootdir" bash -c "rm /opt/*.zst" log "Enabling userspace services" internal chroot "$rootdir" systemctl enable qrtr-ns pd-mapper tqftpserv rmtfs || { log "Failed to enable services" ierror return 1 } return 0 } # shellcheck disable=SC2086 install_packages() { local rootdir="$1" local packages="${*:2}" [ ! -d "$rootdir" ] && { log "Rootdir [$rootdir] does not exists" ierror return 2 } chroot "$rootdir" pacman -S $packages --noconfirm || { log "Failed to install package(s)" ierror return 1 } return 0 } finish_system() { local rootdir="$1" [ ! -d "$rootdir" ] && { log "Rootdir [$rootdir] does not exists" ierror return 2 } log "Cleaning pacman cache" internal yes | chroot "$rootdir" pacman -Scc || { log "Failed to clean pacman cache" ierror return 1 } log "Updating runtime linker bindings" internal chroot "$rootdir" ldconfig || { log "Failed to update runtime linker bindings" ierror return 1 } log "Restoring resolv.conf symlink" mv "$rootdir/etc/resolv.conf.1" "$rootdir/etc/resolv.conf" rm "$rootdir"/.* > /dev/null 2>&1 return 0 }