bash / installer.sh
azils3's picture
Upload 216 files
618430a verified
#!/usr/bin/env bash
REPO="https://github.com/TeamUltroid/Ultroid.git"
CURRENT_DIR="$(pwd)"
ENV_FILE_PATH=".env"
DIR="/root/TeamUltroid"
while [ $# -gt 0 ]; do
case "$1" in
--dir=*)
DIR="${1#*=}" || DIR="/root/TeamUltroid"
;;
--branch=*)
BRANCH="${1#*=}" || BRANCH="main"
;;
--env-file=*)
ENV_FILE_PATH="${1#*=}" || ENV_FILE_PATH=".env"
;;
--no-root)
NO_ROOT=true
;;
*)
echo "Unknown parameter passed: $1"
exit 1
;;
esac
shift
done
check_dependencies() {
# check if debian
echo "Checking dependencies..."
# read file with root access
if ! [[ $(ls -l "/etc/sudoers" | cut -d " " -f1) =~ "r" ]]; then
# check dependencies if installed
echo -e "Root access not found. Checking if dependencies are installed." >&2
if ! [ -x "$(command -v python3)" ] || ! [ -x "$(command -v python)" ]; then
echo -e "Python3 isn't installed. Please install python3.8 or higher to run this bot." >&2
exit 1
fi
if [ $(python3 -c "import sys; print(sys.version_info[1])") -lt 8 ] || [ $(python -c "import sys; print(sys.version_info[1])") -lt 8 ]; then
echo -e "Python 3.8 or higher is required to run this bot." >&2
exit 1
fi
# check if any of ffmpeg, mediainfo, neofetch, git is not installed
if ! command -v ffmpeg &>/dev/null || ! command -v mediainfo &>/dev/null || ! command -v neofetch &>/dev/null || ! command -v git &>/dev/null; then
echo -e "Some dependencies aren't installed. Please install ffmpeg, mediainfo, neofetch and git to run this bot." >&2
exit 1
fi
fi
if [ -x "$(command -v apt-get)" ]; then
echo -e "Installing dependencies..."
# check if any of ffmpeg, mediainfo, neofetch, git is not installed via dpkg
if dpkg -l | grep -q ffmpeg || dpkg -l | grep -q mediainfo || dpkg -l | grep -q neofetch || dpkg -l | grep -q git; then
sudo apt-get -qq -o=Dpkg::Use-Pty=0 update
sudo apt-get install -qq -o=Dpkg::Use-Pty=0 python3 python3-pip ffmpeg mediainfo neofetch git -y
fi
elif [ -x "$(command -v pacman)" ]; then
echo -e "Installing dependencies..."
if pacman -Q | grep -q ffmpeg || pacman -Q | grep -q mediainfo || pacman -Q | grep -q neofetch || pacman -Q | grep -q git; then
sudo pacman -Sy python python-pip git ffmpeg mediainfo neofetch --noconfirm
fi
else
echo -e "Unknown OS. Checking if dependecies are installed" >&2
if ! [ -x "$(command -v python3)" ] || ! [ -x "$(command -v python)" ]; then
echo -e "Python3 isn't installed. Please install python3.8 or higher to run this bot." >&2
exit 1
fi
if [ $(python3 -c "import sys; print(sys.version_info[1])") -lt 8 ] || [ $(python -c "import sys; print(sys.version_info[1])") -lt 8 ]; then
echo -e "Python 3.8 or higher is required to run this bot." >&2
exit 1
fi
if ! command -v ffmpeg &>/dev/null || ! command -v mediainfo &>/dev/null || ! command -v neofetch &>/dev/null || ! command -v git &>/dev/null; then
echo -e "Some dependencies aren't installed. Please install ffmpeg, mediainfo, neofetch and git to run this bot." >&2
exit 1
fi
fi
}
check_python() {
# check if python is installed
if ! command -v python3 &>/dev/null; then
echo -e "Python3 isn't installed. Please install python3.8 or higher to run this bot."
exit 1
elif ! command -v python &>/dev/null; then
echo -e "Python3 isn't installed. Please install python3.8 or higher to run this bot."
exit 1
fi
if [ $(python3 -c "import sys; print(sys.version_info[1])") -lt 8 ]; then
echo -e "Python 3.8 or higher is required to run this bot."
exit 1
elif [ $(python -c "import sys; print(sys.version_info[1])") -lt 3 ]; then
if [ $(python -c "import sys; print(sys.version_info[1])") -lt 8 ]; then
echo -e "Python 3.8 or higher is required to run this bot."
exit 1
fi
fi
}
clone_repo() {
# check if pyultroid, startup, plugins folders exist
cd $DIR
if [ -d $DIR ]; then
if [ -d $DIR/.git ]; then
echo -e "Updating Ultroid ${BRANCH}... "
cd $DIR
git pull
currentbranch="$(git rev-parse --abbrev-ref HEAD)"
if [ ! $BRANCH ]; then
export BRANCH=$currentbranch
fi
case $currentbranch in
$BRANCH)
# do nothing
;;
*)
echo -e "Switching to branch ${BRANCH}... "
echo -e $currentbranch
git checkout $BRANCH
;;
esac
else
rm -rf $DIR
exit 1
fi
if [ -d "addons" ]; then
cd addons
git pull
fi
return
else
if [ ! $BRANCH ]; then
export BRANCH="main"
fi
mkdir -p $DIR
echo -e "Cloning Ultroid ${BRANCH}... "
git clone -b $BRANCH $REPO $DIR
fi
}
install_requirements() {
pip3 install -q --upgrade pip
echo -e "\n\nInstalling requirements... "
pip3 install -q --no-cache-dir -r $DIR/requirements.txt
pip3 install -q -r $DIR/resources/startup/optional-requirements.txt
}
railways_dep() {
if [ $RAILWAY_STATIC_URL ]; then
echo -e "Installing YouTube dependency... "
pip3 install -q yt-dlp
fi
}
misc_install() {
if [ $SETUP_PLAYWRIGHT ]
then
echo -e "Installing playwright."
pip3 install playwright
playwright install
fi
if [ $OKTETO_TOKEN ]; then
echo -e "Installing Okteto-CLI... "
curl https://get.okteto.com -sSfL | sh
elif [ $VCBOT ]; then
if [ -d $DIR/vcbot ]; then
cd $DIR/vcbot
git pull
else
echo -e "Cloning VCBOT.."
git clone https://github.com/TeamUltroid/VcBot $DIR/vcbot
fi
pip3 install pytgcalls==3.0.0.dev23 && pip3 install av -q --no-binary av
fi
}
dep_install() {
echo -e "\n\nInstalling DB Requirement..."
if [ $MONGO_URI ]; then
echo -e " Installing MongoDB Requirements..."
pip3 install -q pymongo[srv]
elif [ $DATABASE_URL ]; then
echo -e " Installing PostgreSQL Requirements..."
pip3 install -q psycopg2-binary
elif [ $REDIS_URI ]; then
echo -e " Installing Redis Requirements..."
pip3 install -q redis hiredis
fi
}
main() {
echo -e "Starting Ultroid Setup..."
if [ -d "pyUltroid" ] && [ -d "resources" ] && [ -d "plugins" ]; then
DIR=$CURRENT_DIR
fi
if [ -f $ENV_FILE_PATH ]
then
set -a
source <(cat $ENV_FILE_PATH | sed -e '/^#/d;/^\s*$/d' -e "s/'/'\\\''/g" -e "s/=\(.*\)/='\1'/g")
set +a
cp $ENV_FILE_PATH .env
fi
(check_dependencies)
(check_python)
(clone_repo)
(install_requirements)
(railways_dep)
(dep_install)
(misc_install)
echo -e "\n\nSetup Completed."
}
if [ $NO_ROOT ]; then
echo -e "Running with non root"
main
return 0
elif [ -t 0 ]; then
unameOut="$(uname -s)"
case "${unameOut}" in
Linux*) machine=Linux;;
Darwin*) machine=Mac;;
CYGWIN*) machine=Cygwin;;
MINGW*) machine=MinGw;;
*) machine="UNKNOWN:${unameOut}"
esac
if machine != "Linux"; then
echo -e "This script is only for Linux. Please use the Windows installer."
exit 1
fi
# check if sudo is installed
if ! command -v sudo &>/dev/null; then
echo -e "Sudo isn't installed. Please install sudo to run this bot."
exit 1
fi
sudo echo "Sudo permission granted."
main
else
echo "Not an interactive terminal, skipping sudo."
# run main function
main
fi