merge common.d/functions.sh into setup.sh and rename to mklni
This commit is contained in:
parent
5cbc22b5c8
commit
1e84bdd2d2
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
284
mklni
Executable file
284
mklni
Executable file
|
@ -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 "$*"
|
||||
|
Loading…
Reference in a new issue