From acd0b15df01356df2cf10b80fac6659adf4e6f5e Mon Sep 17 00:00:00 2001
From: timoxa0 <tima012007@gmail.com>
Date: Sat, 2 Nov 2024 19:43:15 +0500
Subject: [PATCH] merge common.d/functions.sh into setup.sh and rename to mklni

---
 common.d/functions.sh | 264 ---------------------------------------
 mklni                 | 284 ++++++++++++++++++++++++++++++++++++++++++
 setup.sh              |  11 --
 3 files changed, 284 insertions(+), 275 deletions(-)
 create mode 100755 mklni
 delete mode 100755 setup.sh

diff --git a/common.d/functions.sh b/common.d/functions.sh
index 7f59848..20d602b 100644
--- a/common.d/functions.sh
+++ b/common.d/functions.sh
@@ -1,266 +1,2 @@
 #!/usr/bin/env bash
 
-ALPINE="https://dl-cdn.alpinelinux.org/alpine/v3.20/releases/x86_64/alpine-minirootfs-3.20.3-x86_64.tar.gz"
-CHROOTDIR="./alpine_chroot"
-
-log()
-{
-    case "$2" in
-        error)
-            printf "\e[1m\e[31mERROR:\e[0m \e[1m%s\e[0m\n" "$1">&2;;
-        internal)
-            printf "\e[1m\e[96m  >>\e[0m \e[1m%s\e[0m\n" "$1">&2;;
-        ierror)
-            printf "\e[1m\e[31m  >>\e[0m \e[1m%s\e[0m\n" "$1">&2;;
-        *)
-            printf "\e[1m\e[92m>>>\e[0m \e[1m%s\e[0m\n" "$1">&2;;
-    esac
-}
-
-mkdir_if_not_exists()
-{
-   [ -d "$1" ] && return 0
-   [ -f "$1" ] && rm -f "$1"
-   mkdir "$1"
-}
-
-umount_if_mouted()
-{   
-    [ ! -d "$1" ] && return 0
-    if grep -qs "$(realpath "$1")" /proc/mounts; then
-        umount "$1"
-        return $?
-    else
-        return 0
-    fi
-}
-
-require ()
-{
-    which "$1" > /dev/null 2>&1 ||
-    {
-        log "$1 not found" error
-        exit 1
-    }
-}
-
-# shellcheck disable=SC2161
-# shellcheck disable=SC2086
-arguments() {
-    while [[ $# -gt 0 ]]; do
-        opt="$1"
-
-        shift
-
-        case "$(echo ${opt} | tr '[:upper:]' '[:lower:]')" in
-            install)
-                install_chroot 
-                break 2 ;;
-
-            remove)
-                remove_chroot 
-                break 2 ;;
-
-            chroot)
-                chroot_into
-                break 2 ;;
-
-            -h | -help | --help)
-                usage ;;
-        
-            *)
-                log "Unknown option: $opt" error
-                break 2 ;;
-        esac
-    done
-}
-
-usage() {
-    log "Usage commands:"
-
-    cat <<EOF
-    # Help screen (this)
-    $0 --help or $0 -h
-
-    # Setup build chroot
-    $0 install
-
-    # Remove build chroot
-    $0 uninstall
-
-    # Chroot into
-    $0 chroot
-EOF
-    exit 0
-}
-
-# shellcheck disable=SC2317
-_shutdown()
-{
-    detach_chroot
-    if [ -z ${1+x} ]; then
-        exit 0
-    else
-        exit "$1"
-    fi
-}
-
-sigterm_handler()
-{
-    sig=$?
-    printf "\e[1m\e[31m>>\e[0m \e[1m%s\e[0m\n" "Shutdown signal received."
-    _shutdown $sig
-}
-
-trap 'trap " " SIGINT SIGTERM SIGHUP; kill 0; wait; sigterm_handler' SIGINT SIGTERM SIGHUP
-
-
-# Chroot functions
-require "lsof"
-require "tar"
-require "gzip"
-require "wget"
-
-setup_inet()
-{
-    [ ! -d "$CHROOTDIR" ] && {
-        log "Rootdir [$CHROOTDIR] does not exists" ierror
-        return 2
-    }
-    echo "nameserver 1.1.1.1" > "$CHROOTDIR/etc/resolv.conf"
-    echo "makelnichroot" > "$CHROOTDIR/etc/hostname"
-    echo "127.0.0.1 localhost" > "$CHROOTDIR/etc/hosts"
-}
-
-prepare_chroot()
-{
-    [ ! -d "$CHROOTDIR" ] && {
-        log "Rootdir [$CHROOTDIR] does not exists" ierror
-        return 2
-    }
-
-    export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:\$PATH
-    
-    mount --bind "$CHROOTDIR" "$CHROOTDIR"
-    mount -t proc proc "$CHROOTDIR/proc"
-    mount -t sysfs sysfs "$CHROOTDIR/sys"
-    mount -t devtmpfs devtmpfs "$CHROOTDIR/dev"
-    mount -t devpts devpts "$CHROOTDIR/dev/pts"
-    mount -t tmpfs devshm "$CHROOTDIR/dev/shm"
-    
-    if uname -m | grep -q aarch64 || [ -f "/proc/sys/fs/binfmt_misc/qemu-aarch64" ]; then
-        log "Cancel qemu-aarch64-static register"
-    else
-
-        # shellcheck disable=SC2028
-        echo ':aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:'"$(realpath $CHROOTDIR/qemu-aarch64-static):PF" > /proc/sys/fs/binfmt_misc/register 2> /dev/null || true
-         
-        # shellcheck disable=SC2028
-        echo ':aarch64ld:M::\x7fELF\x02\x01\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:'"$(realpath $CHROOTDIR/qemu-aarch64-static):PF" > /proc/sys/fs/binfmt_misc/register 2> /dev/null || true
-    fi
-}
-
-detach_chroot()
-{
-    [ ! -d "$CHROOTDIR" ] && {
-        log "Rootdir [$CHROOTDIR] does not exists" ierror
-        return 2
-    }
-    
-    umount_if_mouted "$CHROOTDIR/sys"
-    umount_if_mouted "$CHROOTDIR/dev/pts"
-    umount_if_mouted "$CHROOTDIR/dev/shm"
-    umount_if_mouted "$CHROOTDIR/dev"
-    umount_if_mouted "$CHROOTDIR/proc"
-    umount_if_mouted "$CHROOTDIR"
-    
-    if [ -f "/proc/sys/fs/binfmt_misc/aarch64" ]; then
-        echo -1 > /proc/sys/fs/binfmt_misc/aarch64 2> /dev/null
-    fi
-    if [ -f "/proc/sys/fs/binfmt_misc/aarch64ld" ]; then
-        echo -1 > /proc/sys/fs/binfmt_misc/aarch64ld 2> /dev/null
-    fi
-}
-
-install_chroot()
-{
-    [ -d "$CHROOTDIR" ] && {
-        log "Chroot already installed" error
-        exit 1
-    }
-    mkdir "$CHROOTDIR"
-    [ ! -f "./alpine.tar.gz" ] && {
-        log "Downloading alpine rootfs tarball"
-        wget -q --show-progress "$ALPINE" -O "./alpine.tar.gz" || {
-            ec=$?
-            log "Failed to download rootfs tarball" error
-            exit "$ec"
-        }
-    }
-    
-    log "Extracting alpine rootfs tarball"
-    tar -xzf "./alpine.tar.gz" -C "$CHROOTDIR/" || {
-        log "Failed to extract rootfs" error
-    }
-    setup_inet
-    prepare_chroot || {
-        log "Failed to setup chroot" error
-        exit 1
-    }
-    log "Updating apk repos"
-    chroot "$CHROOTDIR" apk update || {
-        log "Failed to update apk repos" error
-        exit 1
-    }
-    log "Installing pakages"
-    chroot "$CHROOTDIR" apk add shadow fish bash git debootstrap pixz losetup rsync pv wget e2fsprogs libarchive-tools coreutils || {
-        log "Failed to install packages" error
-        exit 1
-    }
-    chroot "$CHROOTDIR" chsh -s /usr/bin/fish root
-    log "Cloning makelni repo"
-    chroot "$CHROOTDIR" git clone "https://git.timoxa0.su/timoxa0/makelni.git" /makelni || {
-        log "Failed to clone makelni repo" error
-        exit 1
-    }
-    log "Installing qemu-aarch64-static"
-    {
-        wget  -q --show-progress -N https://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-aarch64-static -O "$CHROOTDIR/qemu-aarch64-static" && chmod 755 "$CHROOTDIR/qemu-aarch64-static"
-    } || {
-        log "Failed to install qemu-aarch64-static" error
-        exit 1
-    }
-    detach_chroot || {
-        log "Failed to detach chroot" error
-        exit 1
-    }
-    log "Done!"
-    exit 0
-}
-
-remove_chroot()
-{
-    [ ! -d "$CHROOTDIR" ] && {
-        log "Chroot not installed" error
-        exit 1
-    }
-    detach_chroot || {
-        log "Failed to umount chroot" error
-        exit 1
-    }
-    log "Done!"
-    rm -rf "${CHROOTDIR:?}/"
-}
-
-chroot_into()
-{
-    prepare_chroot || {
-        log "Failed to setup chroot" error
-        exit 1
-    }
-    chroot "$CHROOTDIR" /usr/bin/fish
-    detach_chroot || {
-        log "Failed to detach chroot" error
-        exit 1
-    }
-}
diff --git a/mklni b/mklni
new file mode 100755
index 0000000..fdc554b
--- /dev/null
+++ b/mklni
@@ -0,0 +1,284 @@
+#!/usr/bin/env bash
+
+ALPINE="https://dl-cdn.alpinelinux.org/alpine/v3.20/releases/x86_64/alpine-minirootfs-3.20.3-x86_64.tar.gz"
+CHROOTDIR="./alpine_chroot"
+LON_TOOL_URL="https://git.timoxa0.su/timoxa0/lon-tool/releases/download/latest/lon-tool_lin_amd64"
+
+
+log()
+{
+    case "$2" in
+        error)
+            printf "\e[1m\e[31mERROR:\e[0m \e[1m%s\e[0m\n" "$1">&2;;
+        internal)
+            printf "\e[1m\e[96m  >>\e[0m \e[1m%s\e[0m\n" "$1">&2;;
+        ierror)
+            printf "\e[1m\e[31m  >>\e[0m \e[1m%s\e[0m\n" "$1">&2;;
+        *)
+            printf "\e[1m\e[92m>>>\e[0m \e[1m%s\e[0m\n" "$1">&2;;
+    esac
+}
+
+mkdir_if_not_exists()
+{
+   [ -d "$1" ] && return 0
+   [ -f "$1" ] && rm -f "$1"
+   mkdir "$1"
+}
+
+umount_if_mouted()
+{   
+    [ ! -d "$1" ] && return 0
+    if grep -qs "$(realpath "$1")" /proc/mounts; then
+        umount "$1"
+        return $?
+    else
+        return 0
+    fi
+}
+
+require ()
+{
+    which "$1" > /dev/null 2>&1 ||
+    {
+        log "$1 not found" error
+        exit 1
+    }
+}
+
+# shellcheck disable=SC2161
+# shellcheck disable=SC2086
+arguments() {
+    while [[ $# -gt 0 ]]; do
+        opt="$1"
+
+        shift
+
+        case "$(echo ${opt} | tr '[:upper:]' '[:lower:]')" in
+            install)
+                install_chroot 
+                break 2 ;;
+
+            remove)
+                remove_chroot 
+                break 2 ;;
+
+            chroot)
+                chroot_into
+                break 2 ;;
+
+            -h | -help | --help)
+                usage ;;
+        
+            *)
+                log "Unknown option: $opt" error
+                break 2 ;;
+        esac
+    done
+}
+
+usage() {
+    log "Usage commands:"
+
+    cat <<EOF
+    # Help screen (this)
+    $0 --help or $0 -h
+
+    # Setup build chroot
+    $0 install
+
+    # Remove build chroot
+    $0 uninstall
+
+    # Chroot into
+    $0 chroot
+EOF
+    exit 0
+}
+
+# shellcheck disable=SC2317
+_shutdown()
+{
+    detach_chroot
+    if [ -z ${1+x} ]; then
+        exit 0
+    else
+        exit "$1"
+    fi
+}
+
+sigterm_handler()
+{
+    sig=$?
+    printf "\e[1m\e[31m>>\e[0m \e[1m%s\e[0m\n" "Shutdown signal received."
+    _shutdown $sig
+}
+
+trap 'trap " " SIGINT SIGTERM SIGHUP; kill 0; wait; sigterm_handler' SIGINT SIGTERM SIGHUP
+
+
+# Chroot functions
+require "lsof"
+require "tar"
+require "gzip"
+require "wget"
+
+setup_inet()
+{
+    [ ! -d "$CHROOTDIR" ] && {
+        log "Rootdir [$CHROOTDIR] does not exists" ierror
+        return 2
+    }
+    echo "nameserver 1.1.1.1" > "$CHROOTDIR/etc/resolv.conf"
+    echo "makelnichroot" > "$CHROOTDIR/etc/hostname"
+    echo "127.0.0.1 localhost" > "$CHROOTDIR/etc/hosts"
+}
+
+prepare_chroot()
+{
+    [ ! -d "$CHROOTDIR" ] && {
+        log "Rootdir [$CHROOTDIR] does not exists" ierror
+        return 2
+    }
+
+    export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:\$PATH
+    
+    mount --bind "$CHROOTDIR" "$CHROOTDIR"
+    mount -t proc proc "$CHROOTDIR/proc"
+    mount -t sysfs sysfs "$CHROOTDIR/sys"
+    mount -t devtmpfs devtmpfs "$CHROOTDIR/dev"
+    mount -t devpts devpts "$CHROOTDIR/dev/pts"
+    mount -t tmpfs devshm "$CHROOTDIR/dev/shm"
+    
+    if uname -m | grep -q aarch64 || [ -f "/proc/sys/fs/binfmt_misc/qemu-aarch64" ]; then
+        log "Cancel qemu-aarch64-static register"
+    else
+
+        # shellcheck disable=SC2028
+        echo ':aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:'"$(realpath $CHROOTDIR/qemu-aarch64-static):PF" > /proc/sys/fs/binfmt_misc/register 2> /dev/null || true
+         
+        # shellcheck disable=SC2028
+        echo ':aarch64ld:M::\x7fELF\x02\x01\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:'"$(realpath $CHROOTDIR/qemu-aarch64-static):PF" > /proc/sys/fs/binfmt_misc/register 2> /dev/null || true
+    fi
+}
+
+detach_chroot()
+{
+    [ ! -d "$CHROOTDIR" ] && {
+        log "Rootdir [$CHROOTDIR] does not exists" ierror
+        return 2
+    }
+    
+    umount_if_mouted "$CHROOTDIR/sys"
+    umount_if_mouted "$CHROOTDIR/dev/pts"
+    umount_if_mouted "$CHROOTDIR/dev/shm"
+    umount_if_mouted "$CHROOTDIR/dev"
+    umount_if_mouted "$CHROOTDIR/proc"
+    
+    if [ -f "/proc/sys/fs/binfmt_misc/aarch64" ]; then
+        echo -1 > /proc/sys/fs/binfmt_misc/aarch64 2> /dev/null
+    fi
+    if [ -f "/proc/sys/fs/binfmt_misc/aarch64ld" ]; then
+        echo -1 > /proc/sys/fs/binfmt_misc/aarch64ld 2> /dev/null
+    fi
+    
+    umount_if_mouted "$CHROOTDIR"
+}
+
+install_chroot()
+{
+    [ -d "$CHROOTDIR" ] && {
+        log "Chroot already installed" error
+        exit 1
+    }
+    mkdir "$CHROOTDIR"
+    [ ! -f "./alpine.tar.gz" ] && {
+        log "Downloading alpine rootfs tarball"
+        wget -q --show-progress "$ALPINE" -O "./alpine.tar.gz" || {
+            ec=$?
+            log "Failed to download rootfs tarball" error
+            exit "$ec"
+        }
+    }
+    
+    log "Extracting alpine rootfs tarball"
+    tar -xzf "./alpine.tar.gz" -C "$CHROOTDIR/" || {
+        log "Failed to extract rootfs" error
+    }
+    setup_inet
+    prepare_chroot || {
+        log "Failed to setup chroot" error
+        exit 1
+    }
+    log "Updating apk repos"
+    chroot "$CHROOTDIR" apk update || {
+        log "Failed to update apk repos" error
+        exit 1
+    }
+    log "Installing pakages"
+    chroot "$CHROOTDIR" apk add shadow fish bash git debootstrap pixz losetup rsync pv wget e2fsprogs e2fsprogs-extra libarchive-tools coreutils || {
+        log "Failed to install packages" error
+        exit 1
+    }
+    chroot "$CHROOTDIR" chsh -s /usr/bin/fish root
+    log "Cloning makelni repo"
+    chroot "$CHROOTDIR" git clone "https://git.timoxa0.su/timoxa0/makelni.git" /makelni || {
+        log "Failed to clone makelni repo" error
+        exit 1
+    }
+
+    log "Installing qemu-aarch64-static"
+    {
+        wget -q --show-progress -N https://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-aarch64-static -O "$CHROOTDIR/qemu-aarch64-static" && chmod 755 "$CHROOTDIR/qemu-aarch64-static"
+    } || {
+        log "Failed to install qemu-aarch64-static" error
+        exit 1
+    }
+    
+    detach_chroot || {
+        log "Failed to detach chroot" error
+        exit 1
+    }
+    log "Done!"
+    exit 0
+}
+
+remove_chroot()
+{
+    [ ! -d "$CHROOTDIR" ] && {
+        log "Chroot not installed" error
+        exit 1
+    }
+    detach_chroot || {
+        log "Failed to umount chroot" error
+        exit 1
+    }
+    log "Done!"
+    rm -rf "${CHROOTDIR:?}/"
+}
+
+chroot_into()
+{
+    prepare_chroot || {
+        log "Failed to setup chroot" error
+        exit 1
+    }
+    chroot "$CHROOTDIR" /usr/bin/fish
+    detach_chroot || {
+        log "Failed to detach chroot" error
+        exit 1
+    }
+}
+
+if [ "$(id -u)" != "0" ]; then
+    log "$0 must be run as root"
+    exit 3
+fi
+
+[[ "$(uname -m)" != "x86_64*" ]] || {
+    printf "Unsupported CPU arch\n"
+    exit 1
+}
+
+arguments "$*"
+
diff --git a/setup.sh b/setup.sh
deleted file mode 100755
index 3288356..0000000
--- a/setup.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env bash
-
-source ./common.d/functions.sh
-
-if [ "$(id -u)" != "0" ]; then
-    log "$0 must be run as root"
-    exit 3
-fi
-
-arguments "$*"
-