From ffde3a731c8b0612711906e804eeb04281efefeb Mon Sep 17 00:00:00 2001 From: Chris Date: Sat, 27 Sep 2025 16:36:14 -0400 Subject: [PATCH] MeTube: Various fixes (#7936) --- ct/metube.sh | 119 ++++++++++++++++++-------------------- install/metube-install.sh | 23 ++++---- 2 files changed, 70 insertions(+), 72 deletions(-) diff --git a/ct/metube.sh b/ct/metube.sh index abfd891cb..72047d0b0 100644 --- a/ct/metube.sh +++ b/ct/metube.sh @@ -29,59 +29,53 @@ function update_script() { exit fi - msg_info "Stopping ${APP} Service" - systemctl stop metube - msg_ok "Stopped ${APP} Service" - - msg_info "Backing up Old Installation" - if [[ -d /opt/metube_bak ]]; then - rm -rf /opt/metube_bak + if [[ $(echo ":$PATH:" != *":/usr/local/bin:"*) ]]; then + echo 'export PATH="/usr/local/bin:$PATH"' >>~/.bashrc + source ~/.bashrc + if ! command -v deno &>/dev/null; then + export DENO_INSTALL="/usr/local" + curl -fsSL https://deno.land/install.sh | $STD sh -s -- -y + else + $STD deno upgrade + fi fi - mv /opt/metube /opt/metube_bak - msg_ok "Backup created" - msg_info "Cloning Latest ${APP} Release" - $STD git clone https://github.com/alexta69/metube /opt/metube - msg_ok "Cloned ${APP}" + if check_for_gh_release "metube" "alexta69/metube"; then + msg_info "Stopping ${APP} Service" + systemctl stop metube + msg_ok "Stopped ${APP} Service" - msg_info "Building Frontend" - cd /opt/metube/ui - $STD npm install - $STD node_modules/.bin/ng build - msg_ok "Built Frontend" + msg_info "Backing up Old Installation" + if [[ -d /opt/metube_bak ]]; then + rm -rf /opt/metube_bak + fi + mv /opt/metube /opt/metube_bak + msg_ok "Backup created" - PYTHON_VERSION="3.13" setup_uv + fetch_and_deploy_gh_release "metube" "alexta69/metube" "tarball" "latest" - msg_info "Setting up Python Environment (uv)" - $STD uv venv /opt/metube/.venv - $STD /opt/metube/.venv/bin/python -m ensurepip --upgrade - $STD /opt/metube/.venv/bin/python -m pip install --upgrade pip - $STD /opt/metube/.venv/bin/python -m pip install pipenv - msg_ok "Python Environment Ready" + msg_info "Building Frontend" + cd /opt/metube/ui + $STD npm install + $STD node_modules/.bin/ng build + msg_ok "Built Frontend" - msg_info "Installing Backend Requirements" - cd /opt/metube - $STD /opt/metube/.venv/bin/pipenv install - msg_ok "Installed Backend" - - msg_info "Restoring Environment File" - if [[ -f /opt/metube_bak/.env ]]; then - cp /opt/metube_bak/.env /opt/metube/.env - fi - msg_ok "Restored .env" - - if [[ ! -d /opt/metube/.venv ]]; then - msg_info "Migrating to uv-based environment" PYTHON_VERSION="3.13" setup_uv - $STD uv venv /opt/metube/.venv - $STD /opt/metube/.venv/bin/python -m ensurepip --upgrade - $STD /opt/metube/.venv/bin/python -m pip install --upgrade pip - $STD /opt/metube/.venv/bin/python -m pip install pipenv - $STD /opt/metube/.venv/bin/pipenv install - $STD /opt/metube/.venv/bin/pipenv update yt-dlp - msg_info "Patching systemd Service" - cat </etc/systemd/system/metube.service + msg_info "Installing Backend Requirements" + cd /opt/metube + $STD uv sync --frozen --no-dev + msg_ok "Installed Backend" + + msg_info "Restoring Environment File" + if [[ -f /opt/metube_bak/.env ]]; then + cp /opt/metube_bak/.env /opt/metube/.env + fi + msg_ok "Restored .env" + + if grep -q 'pipenv' /etc/systemd/system/metube.service; then + msg_info "Patching systemd Service" + cat </etc/systemd/system/metube.service [Unit] Description=Metube - YouTube Downloader After=network.target @@ -90,30 +84,31 @@ After=network.target Type=simple WorkingDirectory=/opt/metube EnvironmentFile=/opt/metube/.env -ExecStart=/opt/metube/.venv/bin/pipenv run python3 app/main.py +ExecStart=/opt/metube/.venv/bin/python3 app/main.py Restart=always User=root [Install] WantedBy=multi-user.target EOF - msg_ok "Patched systemd Service" + msg_ok "Patched systemd Service" + fi + $STD systemctl daemon-reload + msg_ok "Service Updated" + + msg_info "Cleaning up" + rm -rf /opt/metube_bak + $STD apt-get -y autoremove + $STD apt-get -y autoclean + msg_ok "Cleaned Up" + + msg_info "Starting ${APP} Service" + systemctl start metube + sleep 1 + msg_ok "Started ${APP} Service" + + msg_ok "Updated Successfully!" fi - $STD systemctl daemon-reload - msg_ok "Service Updated" - - msg_info "Cleaning up" - rm -rf /opt/metube_bak - $STD apt-get -y autoremove - $STD apt-get -y autoclean - msg_ok "Cleaned Up" - - msg_info "Starting ${APP} Service" - systemctl enable -q --now metube - sleep 1 - msg_ok "Started ${APP} Service" - - msg_ok "Updated Successfully!" } start diff --git a/install/metube-install.sh b/install/metube-install.sh index ac22cf332..a204d4022 100644 --- a/install/metube-install.sh +++ b/install/metube-install.sh @@ -22,7 +22,6 @@ $STD apt-get install -y --no-install-recommends \ g++ \ musl-dev \ ffmpeg \ - git \ make \ ca-certificates msg_ok "Installed Dependencies" @@ -30,25 +29,29 @@ msg_ok "Installed Dependencies" PYTHON_VERSION="3.13" setup_uv NODE_VERSION="22" setup_nodejs +msg_info "Installing Deno" +export DENO_INSTALL="/usr/local" +curl -fsSL https://deno.land/install.sh | $STD sh -s -- -y +[[ ":$PATH:" != *":/usr/local/bin:"* ]] && + echo 'export PATH="/usr/local/bin:$PATH"' >>~/.bashrc && + source ~/.bashrc +msg_ok "Installed Deno" + +fetch_and_deploy_gh_release "metube" "alexta69/metube" "tarball" "latest" + msg_info "Installing MeTube" -$STD git clone https://github.com/alexta69/metube /opt/metube cd /opt/metube/ui $STD npm install $STD node_modules/.bin/ng build cd /opt/metube -$STD uv venv /opt/metube/.venv -$STD /opt/metube/.venv/bin/python -m ensurepip --upgrade -$STD /opt/metube/.venv/bin/python -m pip install --upgrade pip -$STD /opt/metube/.venv/bin/python -m pip install pipenv -$STD /opt/metube/.venv/bin/pipenv install -$STD /opt/metube/.venv/bin/pipenv update yt-dlp +$STD uv sync --frozen --no-dev mkdir -p /opt/metube_downloads /opt/metube_downloads/.metube /opt/metube_downloads/music /opt/metube_downloads/videos cat </opt/metube/.env DOWNLOAD_DIR=/opt/metube_downloads STATE_DIR=/opt/metube_downloads/.metube TEMP_DIR=/opt/metube_downloads -YTDL_OPTIONS={"trim_file_name":10} +YTDL_OPTIONS={"trim_file_name":10,"extractor_args":{"youtube":{"player_client":["default","-tv_simply"]}}} EOF msg_ok "Installed MeTube" @@ -62,7 +65,7 @@ After=network.target Type=simple WorkingDirectory=/opt/metube EnvironmentFile=/opt/metube/.env -ExecStart=/opt/metube/.venv/bin/pipenv run python3 app/main.py +ExecStart=/opt/metube/.venv/bin/python3 app/main.py Restart=always User=root