From c33d58e6f879be98d7cfa6d2e0c44d433b995922 Mon Sep 17 00:00:00 2001 From: BluTiger <65156144+Blu-Tiger@users.noreply.github.com> Date: Tue, 1 Oct 2024 17:32:33 +0200 Subject: [PATCH] Aggiunto script di installazione automatico (#171) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Aggiunto shebang iniziale Aggiunto shebang iniziale che verrΓ  sostituito dall install script con il percorso python adeguato permettendo di eseguire run.py senza prefissare python o python3 * Script di installazione per principali os Script di installazione per principali sistemi unix(Linux/MacOS) e windows * Update unix_install.sh * Update README.md con Automatic Installation e anchor link * Update README.md * Update README.md * Update win_install.bat * Update README.md * Update README.md * Update unix_install.sh * Update unix_install.sh * Update win_install.bat * Update win_install.bat * Update README.md * Avvio amministratore * Update unix_install.sh * Update unix_install.sh, conversione da bash a sh, supporto bsd --- README.md | 78 ++++++++++++++++--- run.py | 3 +- unix_install.sh | 200 ++++++++++++++++++++++++++++++++++++++++++++++++ win_install.bat | 169 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 439 insertions(+), 11 deletions(-) create mode 100644 unix_install.sh create mode 100644 win_install.bat diff --git a/README.md b/README.md index 7862770..8270a4f 100644 --- a/README.md +++ b/README.md @@ -11,18 +11,73 @@ You can chat, help improve this repo, or just hang around for some fun in the ** # Table of Contents * [INSTALLATION](#installation) - * [Requirement](#requirement) - * [Usage](#usage) - * [Win 7](https://github.com/Ghost6446/StreamingCommunity_api/wiki/Installation#win-7) - * [Termux](https://github.com/Ghost6446/StreamingCommunity_api/wiki/Termux) + * [Automatic Installation](#automatic-installation) + * [Usage](#usage-automatic) + * [Supported OSs for Automatic Installation](#automatic-installation-os) + * [Manual Installation](#manual-installation) + * [Requirement](#requirement) + * [Usage](#usage-manual) + * [Win 7](https://github.com/Ghost6446/StreamingCommunity_api/wiki/Installation#win-7) + * [Termux](https://github.com/Ghost6446/StreamingCommunity_api/wiki/Termux) * [Update](#update) -* [CONFIGURATION](#Configuration) +* [CONFIGURATION](#configuration) * [DOCKER](#docker) * [TUTORIAL](#tutorial) * [TO DO](#to-do) +# INSTALLATION -## Requirement πŸ“‹ +## Automatic Installation + +### Supported OSs for Automatic Installation πŸ’Ώ +- Supported βœ”οΈ +- Not tested ⏳ +- Not supported ❌ + +| OS | Automatic Installation Support | +|:--------------------|:--------------------:| +| Windows 10/11 | βœ”οΈ | +| Windows 7 | ❌ | +| Debian Linux | βœ”οΈ | +| Arch Linux | βœ”οΈ | +| CentOS Stream 9 | βœ”οΈ | +| FreeBSD | ⏳ | +| MacOS | βœ”οΈ | +| Termux | ❌ | + +### Installation βš™οΈ +Run the following command inside the main directory: +#### On Windows: +```powershell +.\win_install.bat +``` + +#### On Linux/MacOS/BSD: +```bash +sudo chmod +x unix_install.sh && ./unix_install.sh +``` + + +### Usage πŸ“š + +Run the script with the following command: +#### On Windows: +```powershell +.\run.py +``` +or +```powershell +.venv\Scripts\python .\run.py +``` + +#### On Linux/MacOS/BSD: +```bash +./run.py +``` + +## Manual Installation + +### Requirement πŸ“‹ Make sure you have the following prerequisites installed on your system: @@ -30,7 +85,7 @@ Make sure you have the following prerequisites installed on your system: * [ffmpeg](https://www.gyan.dev/ffmpeg/builds/) * [openssl](https://www.openssl.org) or [pycryptodome](https://pypi.org/project/pycryptodome/) -## Installation βš™οΈ +### Installation βš™οΈ Install the required Python libraries using the following command: @@ -38,7 +93,8 @@ Install the required Python libraries using the following command: pip install -r requirements.txt ``` -## Usage πŸ“š + +### Usage πŸ“š Run the script with the following command: @@ -71,7 +127,7 @@ python update_version.py python3 update_version.py ``` - + ## Configuration βš™οΈ You can change some behaviors by tweaking the configuration file. @@ -164,6 +220,7 @@ You can choose different vars: > NOTE: You don't need to add .mp4 at the end + ## Docker 🐳 You can run the script in a docker container, to build the image just run @@ -197,13 +254,14 @@ make LOCAL_DIR=/path/to/download run-container The `run-container` command mounts also the `config.json` file, so any change to the configuration file is reflected immediately without having to rebuild the image. + ## Tutorial πŸ“– For a detailed walkthrough, refer to the [video tutorial](https://www.youtube.com/watch?v=Ok7hQCgxqLg&ab_channel=Nothing) Add [api_1](https://www.youtube.com/watch?v=3ylBSMyQlhM) Add [api_2](https://www.youtube.com/watch?v=ReEYUIbdbG4) - + ## To do πŸ“ - GUI - Website api diff --git a/run.py b/run.py index 76c3881..5a28ca2 100644 --- a/run.py +++ b/run.py @@ -1,3 +1,4 @@ +#! # 10.12.23 import os @@ -187,4 +188,4 @@ def main(): if __name__ == '__main__': initialize() - main() \ No newline at end of file + main() diff --git a/unix_install.sh b/unix_install.sh new file mode 100644 index 0000000..a595cff --- /dev/null +++ b/unix_install.sh @@ -0,0 +1,200 @@ +#!/bin/sh + +# Function to check if a command exists +command_exists() { + command -v "$1" > /dev/null 2>&1 +} + +# Install on Debian/Ubuntu-based systems +install_on_debian() { + echo "Installing $1..." + sudo apt update + sudo apt install -y "$1" +} + +# Install on Red Hat/CentOS/Fedora-based systems +install_on_redhat() { + echo "Installing $1..." + sudo yum install -y "$1" +} + +# Install on Arch-based systems +install_on_arch() { + echo "Installing $1..." + sudo pacman -Sy --noconfirm "$1" +} + +# Install on BSD-based systems +install_on_bsd() { + echo "Installing $1..." + env ASSUME_ALWAYS_YES=yes sudo pkg install -y "$1" +} + +# Install on macOS +install_on_macos() { + echo "Installing $1..." + if command_exists brew; then + brew install "$1" + else + echo "Homebrew is not installed. Installing Homebrew first..." + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + brew install "$1" + fi +} + +set -e + + +# Check and install Python3 +# if command_exists python3 > /dev/null 2>&1; then +# echo "Checking Python..." +# else +# # Detect the platform and install Python3 accordingly +# if [[ "$OSTYPE" == "linux-gnu"* ]]; then +# # Detect the package manager +# if command_exists apt; then +# install_on_debian "python3" +# elif command_exists yum; then +# install_on_redhat "python3" +# elif command_exists pacman; then +# install_on_arch "python-pip" +# else +# echo "Unsupported Linux distribution." +# exit 1 +# fi +# elif [[ "$OSTYPE" == "bsd"* ]]; then +# echo "Detected BSD-based system." +# install_on_bsd "python39" +# elif [[ "$OSTYPE" == "darwin"* ]]; then +# install_on_macos "python" +# else +# echo "Unsupported operating system." +# exit 1 +# fi +# fi + +# Get the Python version +PYTHON_VERSION=$(python3 -c 'import sys; print(".".join(map(str, sys.version_info[:3])))') + +# Compare the Python version with 3.8 +REQUIRED_VERSION="3.8" + +if [ "$(echo -e "$PYTHON_VERSION\n$REQUIRED_VERSION" | sort -V | head -n1)" = "$REQUIRED_VERSION" ]; then + echo "Python version $PYTHON_VERSION is >= $REQUIRED_VERSION. Continuing..." +else + echo "ERROR: Python version $PYTHON_VERSION is < $REQUIRED_VERSION. Exiting..." + exit 1 +fi + +if [ -d ".venv/" ]; then + echo ".venv exists. Installing requirements.txt..." + .venv/bin/pip install -r requirements.txt +else + echo "Making .venv and installing requirements.txt..." + + if [ "$(uname)" = "Linux" ]; then + # Detect the package manager for venv installation check. + if command_exists apt; then + echo "Detected Debian-based system. Checking python3-venv." + if dpkg -l | grep -q "python3-venv"; then + echo "python3-venv found." + else + echo "python3-venv not found, installing..." + install_on_debian "python3-venv" + fi + fi + fi + + python3 -m venv .venv + .venv/bin/pip install -r requirements.txt + +fi + +if command_exists ffmpeg; then + echo "ffmpeg exists." +else + echo "ffmpeg does not exist." + + # Detect the platform and install ffmpeg accordingly. + case "$(uname)" in + Linux) + if command_exists apt; then + echo "Detected Debian-based system." + install_on_debian "ffmpeg" + elif command_exists yum; then + echo "Detected Red Hat-based system." + echo "Installing needed repos for ffmpeg..." + sudo yum config-manager --set-enabled crb > /dev/null 2>&1 || true + sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-$(rpm -E %rhel).noarch.rpm https://dl.fedoraproject.org/pub/epel/epel-next-release-latest-$(rpm -E %rhel).noarch.rpm > /dev/null 2>&1 || true + sudo yum install -y --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-$(rpm -E %rhel).noarch.rpm > /dev/null 2>&1 || true + install_on_redhat "ffmpeg" + elif command_exists pacman; then + echo "Detected Arch-based system." + install_on_arch "ffmpeg" + else + echo "Unsupported Linux distribution." + exit 1 + fi + ;; + FreeBSD|NetBSD|OpenBSD) + echo "Detected BSD-based system." + install_on_bsd "ffmpeg" + ;; + Darwin) + echo "Detected macOS." + install_on_macos "ffmpeg" + ;; + *) + echo "Unsupported operating system." + exit 1 + ;; + esac +fi + +if command_exists openssl || .venv/bin/pip list | grep -q pycryptodome; then + echo "openssl or pycryptodome exists." +else + echo "Please choose an option:" + echo "1) openssl" + echo "2) pycryptodome" + read -p "Enter your choice (1): " choice + + case "$choice" in + 2) + echo "Installing pycryptodome." + .venv/bin/pip install pycryptodome + ;; + *) + # Detect the platform and install OpenSSL accordingly. + case "$(uname)" in + Linux) + if command_exists apt; then + install_on_debian openssl + elif command_exists yum; then + install_on_redhat openssl + elif command_exists pacman; then + install_on_arch openssl + else + echo "Unsupported Linux distribution." + exit 1 + fi + ;; + FreeBSD|NetBSD|OpenBSD) + install_on_bsd openssl + ;; + Darwin) + install_on_macos openssl + ;; + *) + echo "Unsupported operating system." + exit 1 + ;; + esac + ;; + esac +fi + +sed -i.bak '1s|.*|#!.venv/bin/python3|' run.py +sudo chmod +x run.py +echo 'Everything is installed!' +echo 'Run StreamingCommunity with "./run.py"' diff --git a/win_install.bat b/win_install.bat new file mode 100644 index 0000000..6f02c20 --- /dev/null +++ b/win_install.bat @@ -0,0 +1,169 @@ +@echo off +:: BatchGotAdmin +::------------------------------------- +REM --> Check for permissions +>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" + +REM --> If error flag set, we do not have admin. +if '%errorlevel%' NEQ '0' ( + echo Requesting administrative privileges... + goto UACPrompt +) else ( goto gotAdmin ) + +:UACPrompt + echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" + set params = %*:"=" + echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" + + "%temp%\getadmin.vbs" + del "%temp%\getadmin.vbs" + exit /B + +:gotAdmin + pushd "%CD%" + CD /D "%~dp0" +::-------------------------------------- +REM Check if running in PowerShell +@REM Check and install python +@REM where /q python >nul 2>nul +@REM if %errorlevel% neq 1 ( +@REM echo Checking Python... +@REM ) else ( +@REM call (exit /b 0) +@REM echo python not found. Checking for Chocolatey... +@REM REM Check if Chocolatey is installed +@REM where /q choco >nul 2>nul +@REM if %errorlevel% neq 1 ( +@REM echo Installing python using Chocolatey... +@REM choco install python -y +@REM ) else ( +@REM echo Chocolatey is not installed. +@REM echo Please install Chocolatey first from https://chocolatey.org/install +@REM echo After installing Chocolatey, you can run this script again to install ffmpeg. +@REM echo Alternatively, you can install python manually from https://www.python.org/ +@REM exit /b 1 +@REM ) +@REM ) + +REM Get the Python version +for /f "delims=" %%v in ('python -c "import sys; print('.'.join(map(str, sys.version_info[:3])))"') do set PYTHON_VERSION=%%v + +REM Set the required version +set REQUIRED_VERSION=3.8 + +REM Compare the Python version with the required version +REM Split versions by dot and compare each segment +setlocal enabledelayedexpansion +for /f "tokens=1-3 delims=." %%a in ("%PYTHON_VERSION%") do ( + set PYTHON_MAJOR=%%a + set PYTHON_MINOR=%%b + set PYTHON_PATCH=%%c +) + +for /f "tokens=1-3 delims=." %%a in ("%REQUIRED_VERSION%") do ( + set REQUIRED_MAJOR=%%a + set REQUIRED_MINOR=%%b + set REQUIRED_PATCH=%%c +) + +REM Compare major version +if !PYTHON_MAJOR! LSS !REQUIRED_MAJOR! ( + echo ERROR: Python version !PYTHON_VERSION! is < !REQUIRED_VERSION!. Exiting... + exit /b 1 +) else if !PYTHON_MAJOR! EQU !REQUIRED_MAJOR! ( + REM Compare minor version + if !PYTHON_MINOR! LSS !REQUIRED_MINOR! ( + echo ERROR: Python version !PYTHON_VERSION! is < !REQUIRED_VERSION!. Exiting... + exit /b 1 + ) else if !PYTHON_MINOR! EQU !REQUIRED_MINOR! ( + REM Compare patch version + if !PYTHON_PATCH! LSS !REQUIRED_PATCH! ( + echo ERROR: Python version !PYTHON_VERSION! is < !REQUIRED_VERSION!. Exiting... + exit /b 1 + ) + ) +) + +echo Python version %PYTHON_VERSION% is >= %REQUIRED_VERSION%. Continuing... + +if exist ".venv\" ( + echo .venv exists. Installing requirements.txt. + .venv\Scripts\python -m pip install -r requirements.txt +) else ( + echo Making .venv and installing requirements.txt... + python -m venv .venv + .venv\Scripts\python -m pip install -r requirements.txt +) + +where /q ffmpeg >nul 2>nul +if %errorlevel% neq 1 ( + echo ffmpeg exists. +) else ( + call (exit /b 0) + echo ffmpeg not found. Checking for Chocolatey... + REM Check if Chocolatey is installed + where /q choco >nul 2>nul + if %errorlevel% neq 1 ( + echo Installing ffmpeg using Chocolatey... + choco install ffmpeg -y + ) else ( + echo Chocolatey is not installed. + echo Please install Chocolatey first from https://chocolatey.org/install + echo After installing Chocolatey, you can run this script again to install ffmpeg. + echo Alternatively, you can install ffmpeg manually from https://www.ffmpeg.org/ + exit /b 1 + ) +) + + +REM Check if OpenSSL exists +where /q openssl >nul 2>nul +if %errorlevel% neq 1 ( + echo openssl exists. + goto end +) +call (exit /b 0) + +REM Check if pycryptodome is installed +.venv\Scripts\pip list | findstr /i "pycryptodome" >nul +if %errorlevel% equ 0 ( + echo pycryptodome exists. + goto end +) +call (exit /b 0) + +REM Prompt for installation option +echo Please choose an option: +echo 1) openssl +echo 2) pycryptodome +set /p choice="Enter your choice (1): " + +REM Handle the choice +if "%choice%"=="2" ( + echo Installing pycryptodome. + .venv\Scripts\pip install pycryptodome +) else ( + echo Installing openssl. + echo Checking for Chocolatey... + + REM Check if Chocolatey is installed + where /q choco >nul 2>nul + if %errorlevel% neq 1 ( + echo Installing openssl using Chocolatey... + choco install openssl -y + ) else ( + echo Chocolatey is not installed. + echo Please install Chocolatey first from https://chocolatey.org/install + echo After installing Chocolatey, you can run this script again to install openssl. + echo Alternatively, you can install OpenSSH manually from https://www.openssl.com/. + exit /b 1 + ) +) + +:end + +setlocal enabledelayedexpansion & set "tempfile=%temp%\tempfile.txt" & (echo #^^!.venv\Scripts\python & type run.py | more +1) > "!tempfile!" & move /Y "!tempfile!" run.py >nul 2>nul + +echo Everything is installed^^! +echo Run StreamingCommunity with '.\run.py' +pause