fake-os/src/fake_manager.sh

261 lines
10 KiB
Bash

#!/usr/bin/env sh
#--------[ FAKE//OS Logging ]--------#
export FAKE_LOG="/var/log/fake/fake-os.log"
mkdir -p "$(dirname $FAKE_LOG)"
#--------[ FAKE//OS System Variables ]--------#
export FAKE_PATH=/opt/fakeos # System location
#--------[ Check Root ]--------#
if [ "$EUID" -ne 0 ]; then
export FAKE_SUDO="sudo"
export FAKE_BTL=""
else
export FAKE_SUDO=""
export FAKE_BTL="sudo -u admin $SHELL -C"
fi
#--------[ Input Variables ]--------#
VARS=$(echo "$@" | sed -e 's/[^ ]* *//')
# ┌───────────────────────────────────────┐
# │ Update │
# └───────────────────────────────────────┘
_fake_update () {
echo ""
echo "[UPDATE] $(date)" >> $FAKE_LOG
echo ""
if [ "$(command -v paru)" ]; then CMD="$FAKE_BTL paru --noconfirm -Syyy && $FAKE_BTL paru --noconfirm -Syu"
elif [ "$(command -v pacman)" ]; then CMD="$FAKE_SUDO pacman --noconfirm -Syyy && $FAKE_SUDO pacman --noconfirm -Syu"
elif [ "$(command -v apt)" ]; then CMD="$FAKE_SUDO apt -y update && $FAKE_SUDO apt -y upgrade"
elif [ "$(command -v apk)" ]; then CMD="$FAKE_SUDO apk update && $FAKE_SUDO apk upgrade"
elif [ "$(command -v dnf)" ]; then CMD="$FAKE_SUDO dnf -y update && $FAKE_SUDO apt -y upgrade"
else CMD="echo '[ERROR] Incompatable System...'"; fi
INDEX=1
echo "[FAKE//OS] Update: $CMD"
if ! eval "$CMD 2>> $FAKE_LOG"; then
while ! eval "$CMD"; do
INDEX=$(( INDEX + 1 ))
echo ""
echo "[ERROR] Retrying: Attempt $INDEX..."
done
fi
echo "[UPDATE] ----> Completed in $INDEX attempt(s)" >> $FAKE_LOG
}
# ┌───────────────────────────────────────┐
# │ Install │
# └───────────────────────────────────────┘
_fake_install () {
echo ""
echo "[INSTALL] $@" >> $FAKE_LOG
echo ""
if [ "$(command -v paru)" ]; then CMD="$FAKE_BTL paru --noconfirm -S $@"
elif [ "$(command -v pacman)" ]; then CMD="$FAKE_SUDO pacman --noconfirm -S $@"
elif [ "$(command -v apt)" ]; then CMD="$FAKE_SUDO apt -y install $@"
elif [ "$(command -v apk)" ]; then CMD="$FAKE_SUDO apk add $@"
elif [ "$(command -v dnf)" ]; then CMD="$FAKE_SUDO dnf -y install $@"
else CMD="echo '[ERROR] Incompatable System...'"; fi
INDEX=1
echo "[FAKE//OS] Install: $@"
if ! eval "$CMD 2>> $FAKE_LOG"; then
while ! eval "$CMD"; do
INDEX=$(( INDEX + 1 ))
echo ""
echo "[ERROR] Retrying: Attempt $INDEX..."
done
fi
echo "[INSTALL] ----> Completed in $INDEX attempt(s)" >> $FAKE_LOG
}
# ┌───────────────────────────────────────┐
# │ Remove │
# └───────────────────────────────────────┘
_fake_remove () {
echo ""
echo "[REMOVE] $@" >> $FAKE_LOG
echo ""
if [ "$(command -v paru)" ]; then CMD="$FAKE_BTL paru --noconfirm -R $@"
elif [ "$(command -v pacman)" ]; then CMD="$FAKE_SUDO pacman --noconfirm -R $@"
elif [ "$(command -v apt)" ]; then CMD="$FAKE_SUDO apt -y remove $@"
elif [ "$(command -v apk)" ]; then CMD="$FAKE_SUDO apk del $@"
elif [ "$(command -v dnf)" ]; then CMD="$FAKE_SUDO dnf -y remove $@"
else CMD="echo '[ERROR] Incompatable System...'"; fi
INDEX=1
echo "[FAKE//OS] Remove: $@"
if ! eval "$CMD 2>> $FAKE_LOG"; then
while ! eval "$CMD"; do
INDEX=$(( INDEX + 1 ))
echo ""
echo "[ERROR] Retrying: Attempt $INDEX..."
done
fi
echo "[REMOVE] ----> Completed in $INDEX attempt(s)" >> $FAKE_LOG
}
# ┌───────────────────────────────────────┐
# │ Search │
# └───────────────────────────────────────┘
_fake_search () {
if [ "$(command -v paru)" ]; then CMD="paru -Ss $@"
elif [ "$(command -v pacman)" ]; then CMD="pacman -Ss $@"
elif [ "$(command -v apt)" ]; then CMD="apt search $@"
elif [ "$(command -v apk)" ]; then CMD="apk search $@"
elif [ "$(command -v dnf)" ]; then CMD="dnf search $@"
else CMD="echo '[ERROR] Incompatable System...'"; fi
echo "[FAKE//OS] Search: $@"
if ! eval "$CMD 2>> $FAKE_LOG"; then
echo "[FAKE//OS] Error: Search failed..."
fi
}
# ┌───────────────────────────────────────┐
# │ Service Daemon │
# └───────────────────────────────────────┘
_fake_start () { #--------[ Start Daemon ]
echo ""
echo "[START] $@"
for SERVICE in $@; do
if [ "$(command -v systemctl)" ]; then $FAKE_SUDO systemctl start "$SERVICE" 2>> $FAKE_LOG; fi
if [ "$(command -v rc-update)" ]; then $FAKE_SUDO rc-service "$SERVICE" start 2>> $FAKE_LOG; fi
done
echo ""
}
_fake_stop () { #---------[ Stop Daemon ]
echo ""
echo "[STOP] $@"
for SERVICE in $@; do
if [ "$(command -v systemctl)" ]; then $FAKE_SUDO systemctl start "$SERVICE" 2>> $FAKE_LOG; fi
if [ "$(command -v rc-update)" ]; then $FAKE_SUDO rc-service "$SERVICE" start 2>> $FAKE_LOG; fi
done
echo ""
}
_fake_restart () { #------[ Restart Daemon ]
echo ""
echo "[RESTART] $@"
for SERVICE in $@; do
if [ "$(command -v systemctl)" ]; then $FAKE_SUDO systemctl restart "$SERVICE" 2>> $FAKE_LOG; fi
if [ "$(command -v rc-update)" ]; then $FAKE_SUDO rc-service "$SERVICE" restart 2>> $FAKE_LOG; fi
done
echo ""
}
_fake_status () { #------[ Status of Daemon ]
echo ""
echo "[STATUS] $@"
for SERVICE in $@; do
if [ "$(command -v systemctl)" ]; then systemctl status "$SERVICE" 2>> $FAKE_LOG; fi
if [ "$(command -v rc-update)" ]; then rc-service "$SERVICE" status 2>> $FAKE_LOG; fi
done
echo ""
}
_fake_enable () { #-------[ Enable Daemon at Startup ]
echo ""
echo "[ENABLE] $@"
for SERVICE in $@; do
if [ "$(command -v systemctl)" ]; then $FAKE_SUDO systemctl enable "$SERVICE" 2>> $FAKE_LOG; fi
if [ "$(command -v rc-update)" ]; then $FAKE_SUDO rc-update add "$SERVICE" 2>> $FAKE_LOG; fi
done
echo ""
}
_fake_disable () { #------[ Disable Daeon at Startup ]
echo ""
echo "[DISABLE] $@"
for SERVICE in $@; do
if [ "$(command -v systemctl)" ]; then sudo systemctl disable "$SERVICE" 2>> $FAKE_LOG; fi
if [ "$(command -v rc-update)" ]; then sudo rc-update rm "$SERVICE" 2>> $FAKE_LOG; fi
done
echo ""
}
# ┌───────────────────────────────────────┐
# │ Other Functions │
# └───────────────────────────────────────┘
_fake_flush () { #--------[ Flush System Cache ]
echo ""
sudo -u root $ENV_SHELL -c "sync; echo 3 > /proc/sys/vm/drop_caches"
echo ""
}
_fake_upgrade () {
echo ""
echo "[FAKE//OS] Upgrading to latest Git version..."
echo "[FAKE//OS] Upgraded: $(date)"
$FAKE_SUDO curl https://fake.onl/fake-os.sh | sh
echo ""
echo "Restart shell/terminal to take effect."
echo ""
}
# ┌───────────────────────────────────────┐
# │ Help Screen │
# └───────────────────────────────────────┘
_fake_help () {
echo ""
echo "FAKE//OS"
echo "-----------------------------------"
echo "usage: fake <command> <arguments>"
echo ""
echo "Package management commands:"
echo " install Install new software packages"
echo " update Update installed software packages"
echo " remove Remove/Uninstall software packages"
echo " search Search repository for software packages"
echo ""
echo "Init/System management commands"
echo " start Start system daemons"
echo " stop Stop system daemons"
echo " restart Restart system daemons"
echo " status Show status of daemons"
echo " enable Add system daemons to default startup PID"
echo " disable Remove system daemons from default startup PID"
echo " flush Clear system caches"
echo ""
echo "FAKE//OS commands:"
echo " upgrade Upgrade FAKE//OS to latest git version"
echo " help Display this help screen"
echo ""
}
# ┌───────────────────────────────────────┐
# │ Main Entry Point │
# └───────────────────────────────────────┘
#--------[ Package Management ]--------#
if [ "$1" == "update" ]; then _fake_update
elif [ "$1" == "install" ]; then _fake_install "$VARS"
elif [ "$1" == "remove" ]; then _fake_remove "$VARS"
elif [ "$1" == "search" ]; then _fake_search "$VARS"
#--------[ Service Daemon Management ]--------#
elif [ "$1" == "start" ]; then _fake_start "$VARS"
elif [ "$1" == "stop" ]; then _fake_stop "$VARS"
elif [ "$1" == "restart" ]; then _fake_restart "$VARS"
elif [ "$1" == "status" ]; then _fake_status "$VARS"
elif [ "$1" == "enable" ]; then _fake_enable "$VARS"
elif [ "$1" == "disable" ]; then _fake_disable "$VARS"
#--------[ Other Commands ]--------#
elif [ "$1" == "flush" ]; then _fake_flush
elif [ "$1" == "upgrade" ]; then _fake_upgrade
elif [ "$1" == "help" ]; then _fake_help
#--------[ Error Catching ]--------#
else
echo ""
echo "[ERROR] Command '$1' not recognised.";
echo ""
fi