diff --git a/localbuild.sh b/localbuild.sh new file mode 100644 index 00000000..9d1c85ff --- /dev/null +++ b/localbuild.sh @@ -0,0 +1,138 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2022 Ing +# +# This is free software, licensed under the MIT License. +# See /LICENSE for more information. +# + +if [ "$(id -u)" -ne 0 ]; then + echo "This script must be run as root" + exit 1 +fi + +function help() { + echo "Usage: $0 [args]" + echo "Commands:" + echo " init [workspace] [rr.img] - Initialize the workspace" + echo " config - Configure the workspace" + echo " pack [rr.img] - Pack the workspace" + echo " help - Show this help" + exit 1 +} + +function init() { + WORKSPACE="$(realpath ${1:-"workspace"})" + RRIMGPATH="$(realpath ${2:-"rr.img"})" + + if [ ! -f "${RRIMGPATH}" ]; then + echo "File not found: ${RRIMGPATH}" + exit 1 + fi + + sudo apt update + sudo apt install -y locales busybox dialog + sudo locale-gen en_US.UTF-8 ko_KR.UTF-8 ru_RU.UTF-8 zh_CN.UTF-8 zh_HK.UTF-8 zh_TW.UTF-8 + + YQ=$(command -v yq) + if [ -z "${YQ}" ] || ! ${YQ} --version 2>/dev/null | grep -q "v4."; then + wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O "${YQ:-"/usr/bin/yq"}" && chmod +x "${YQ:-"/usr/bin/yq"}" + fi + + LOOPX=$(sudo losetup -f) + sudo losetup -P "${LOOPX}" "${RRIMGPATH}" + + echo "Mounting image file" + rm -rf "/tmp/p1" + rm -rf "/tmp/p2" + rm -rf "/tmp/p3" + mkdir -p "/tmp/p1" + mkdir -p "/tmp/p2" + mkdir -p "/tmp/p3" + sudo mount ${LOOPX}p1 "/tmp/p1" + sudo mount ${LOOPX}p2 "/tmp/p2" + sudo mount ${LOOPX}p3 "/tmp/p3" + + echo "Create WORKSPACE" + rm -rf "${WORKSPACE}" + mkdir -p "${WORKSPACE}/mnt" + mkdir -p "${WORKSPACE}/tmp" + mkdir -p "${WORKSPACE}/initrd" + cp -rf "/tmp/p1" "${WORKSPACE}/mnt/p1" + cp -rf "/tmp/p2" "${WORKSPACE}/mnt/p2" + cp -rf "/tmp/p3" "${WORKSPACE}/mnt/p3" + ( + cd "${WORKSPACE}/initrd" + xz -dc <"${WORKSPACE}/mnt/p3/initrd-rr" | cpio -idm + ) 2>/dev/null + sudo sync + sudo umount "/tmp/p1" + sudo umount "/tmp/p2" + sudo umount "/tmp/p3" + rm -rf "/tmp/p1" + rm -rf "/tmp/p2" + rm -rf "/tmp/p3" + sudo losetup --detach ${LOOPX} + + rm -f $(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)/rr.env + echo "export LOADER_DISK=\"LOCALBUILD\"" >>$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)/rr.env + echo "export CHROOT_PATH=\"${WORKSPACE}\"" >>$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)/rr.env + echo "OK." +} + +function config() { + if [ ! -f $(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)/rr.env ]; then + echo "Please run init first" + exit 1 + fi + . $(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)/rr.env + pushd "${CHROOT_PATH}/initrd/opt/rr" + ./init.sh + ./menu.sh + popd + echo "OK." +} + +function pack() { + if [ ! -f $(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)/rr.env ]; then + echo "Please run init first" + exit 1 + fi + . $(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)/rr.env + + RRIMGPATH="$(realpath ${2:-"rr.img"})" + if [ ! -f "${RRIMGPATH}" ]; then + gzip -dc "${CHROOT_PATH}/initrd/opt/rr/grub.img.gz" >"${RRIMGPATH}" + fi + fdisk -l "${RRIMGPATH}" + + LOOPX=$(sudo losetup -f) + sudo losetup -P "${LOOPX}" "${RRIMGPATH}" + + echo "Mounting image file" + rm -rf "/tmp/p1" + rm -rf "/tmp/p2" + rm -rf "/tmp/p3" + mkdir -p "/tmp/p1" + mkdir -p "/tmp/p2" + mkdir -p "/tmp/p3" + sudo mount ${LOOPX}p1 "/tmp/p1" + sudo mount ${LOOPX}p2 "/tmp/p2" + sudo mount ${LOOPX}p3 "/tmp/p3" + + echo "Pack image file" + cp -rf "${CHROOT_PATH}/mnt/p1/"* "/tmp/p1" + cp -rf "${CHROOT_PATH}/mnt/p2/"* "/tmp/p2" + cp -rf "${CHROOT_PATH}/mnt/p3/"* "/tmp/p3" + sudo sync + sudo umount "/tmp/p1" + sudo umount "/tmp/p2" + sudo umount "/tmp/p3" + rm -rf "/tmp/p1" + rm -rf "/tmp/p2" + rm -rf "/tmp/p3" + sudo losetup --detach ${LOOPX} + echo "OK." +} + +$@ \ No newline at end of file