170 lines
4.3 KiB
Bash
170 lines
4.3 KiB
Bash
#!/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
|
|
}
|
|
|