From daa8d80ec9859ac5ba990f52930a248fc52d4fca Mon Sep 17 00:00:00 2001 From: DDSRem <1448139087@qq.com> Date: Tue, 20 Feb 2024 14:26:59 +0800 Subject: [PATCH] feat: startup and update script optimization MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 修复Shellcheck指出的问题,增强脚本稳定性。 2. 对于更新部分:采取先更新主程序和前端,插件和资源包再更新的原则;主要解决如果插件或资源包没有下载成功,主程序就无法更新成功的问题,但是其实资源包和插件是不影响主程序更新的。 Co-Authored-By: DDSDerek <108336573+DDSDerek@users.noreply.github.com> Co-Authored-By: Summer⛱ <57806936+honue@users.noreply.github.com> --- entrypoint | 12 ++++--- update | 95 +++++++++++++++++++++++++++--------------------------- 2 files changed, 55 insertions(+), 52 deletions(-) diff --git a/entrypoint b/entrypoint index 7a0c3072..0e1eb761 100644 --- a/entrypoint +++ b/entrypoint @@ -1,17 +1,19 @@ #!/bin/bash +# shellcheck shell=bash +# shellcheck disable=SC2016 # 使用 `envsubst` 将模板文件中的 ${NGINX_PORT} 替换为实际的环境变量值 envsubst '${NGINX_PORT}${PORT}' < /etc/nginx/nginx.template.conf > /etc/nginx/nginx.conf # 自动更新 cd / /usr/local/bin/mp_update -cd /app +cd /app || exit # 更改 moviepilot userid 和 groupid -groupmod -o -g ${PGID} moviepilot -usermod -o -u ${PUID} moviepilot +groupmod -o -g "${PGID}" moviepilot +usermod -o -u "${PUID}" moviepilot # 更改文件权限 chown -R moviepilot:moviepilot \ - ${HOME} \ + "${HOME}" \ /app \ /public \ /config \ @@ -27,6 +29,6 @@ if [ -S "/var/run/docker.sock" ]; then haproxy -f /app/haproxy.cfg fi # 设置后端服务权限掩码 -umask ${UMASK} +umask "${UMASK}" # 启动后端服务 exec dumb-init gosu moviepilot:moviepilot python3 app/main.py diff --git a/update b/update index 29243c18..a1e4cec5 100644 --- a/update +++ b/update @@ -1,15 +1,13 @@ #!/bin/bash +# shellcheck shell=bash # 下载及解压 download_and_unzip() { url="$1" target_dir="$2" echo "正在下载 ${url}..." - curl ${CURL_OPTIONS} "$url" ${CURL_HEADERS} | busybox unzip -d /tmp - - if [ $? -eq 0 ]; then - if [ -e /tmp/MoviePilot-* ]; then - mv /tmp/MoviePilot-* /tmp/${target_dir} - fi + if curl "${CURL_OPTIONS}" "${url}" "${CURL_HEADERS}" | busybox unzip -d /tmp -; then + mv /tmp/MoviePilot-* /tmp/"${target_dir}" else return 1 fi @@ -17,59 +15,62 @@ download_and_unzip() { # 下载程序资源,$1: 后端版本路径 install_backend_and_download_resources() { - download_and_unzip "https://github.com/jxxghp/MoviePilot/archive/refs/${1}" "App" - if [ $? -eq 0 ]; then + if download_and_unzip "https://github.com/jxxghp/MoviePilot/archive/refs/${1}" "App"; then echo "后端程序下载成功" - pip install ${PIP_OPTIONS} --upgrade pip - pip install ${PIP_OPTIONS} -r /tmp/App/requirements.txt - if [ $? -eq 0 ]; then + pip install "${PIP_OPTIONS}" --upgrade pip + if pip install "${PIP_OPTIONS}" -r /tmp/App/requirements.txt; then echo "安装依赖成功" - download_and_unzip "https://github.com/jxxghp/MoviePilot-Plugins/archive/refs/heads/main.zip" "Plugins" - if [ $? -eq 0 ]; then - echo "插件下载成功" - download_and_unzip "https://github.com/jxxghp/MoviePilot-Resources/archive/refs/heads/main.zip" "Resources" - if [ $? -eq 0 ]; then - echo "资源包下载成功" - frontend_version=$(curl ${CURL_OPTIONS} "https://api.github.com/repos/jxxghp/MoviePilot-Frontend/releases/latest" ${CURL_HEADERS} | jq -r .tag_name) - if [[ "${frontend_version}" == *v* ]]; then - download_and_unzip "https://github.com/jxxghp/MoviePilot-Frontend/releases/download/${frontend_version}/dist.zip" "dist" - if [ $? -eq 0 ]; then - echo "前端程序下载成功" - # 备份插件目录 - rm -rf /plugins - mkdir -p /plugins - cp -a /app/app/plugins/* /plugins/ - # 不备份__init__.py - rm -f /plugins/__init__.py - # 清空目录 - rm -rf /app - mkdir -p /app - # 后端程序 - cp -a /tmp/App/* /app/ - # 恢复插件目录 - cp -a /plugins/* /app/app/plugins/ - # 插件仓库 - rsync -av --remove-source-files /tmp/Plugins/plugins/* /app/app/plugins/ + frontend_version=$(curl "${CURL_OPTIONS}" "https://api.github.com/repos/jxxghp/MoviePilot-Frontend/releases/latest" "${CURL_HEADERS}" | jq -r .tag_name) + if [[ "${frontend_version}" == *v* ]]; then + if download_and_unzip "https://github.com/jxxghp/MoviePilot-Frontend/releases/download/${frontend_version}/dist.zip" "dist"; then + echo "前端程序下载成功" + # 清空目录 + rm -rf /app + mkdir -p /app + # 后端程序 + cp -a /tmp/App/* /app/ + # 前端程序 + rm -rf /public + mkdir -p /public + cp -a /tmp/dist/* /public/ + # 清理临时目录 + rm -rf /tmp/* + echo "程序部分更新成功,前端版本:${frontend_version},后端版本:${1}"s + echo "开始更新插件..." + if download_and_unzip "https://github.com/jxxghp/MoviePilot-Plugins/archive/refs/heads/main.zip" "Plugins"; then + echo "插件下载成功" + # 备份插件目录 + rm -rf /plugins + mkdir -p /plugins + cp -a /app/app/plugins/* /plugins/ + # 不备份__init__.py + rm -f /plugins/__init__.py + # 恢复插件目录 + cp -a /plugins/* /app/app/plugins/ + # 插件仓库 + rsync -av --remove-source-files /tmp/Plugins/plugins/* /app/app/plugins/ + # 清理临时目录 + rm -rf /tmp/* + echo "插件更新成功" + echo "开始更新资源包..." + if download_and_unzip "https://github.com/jxxghp/MoviePilot-Resources/archive/refs/heads/main.zip" "Resources"; then + echo "资源包下载成功" # 资源包 cp -a /tmp/Resources/resources/* /app/app/helper/ - # 前端程序 - rm -rf /public - mkdir -p /public - cp -a /tmp/dist/* /public/ # 清理临时目录 rm -rf /tmp/* - echo "程序更新成功,前端版本:${frontend_version},后端版本:${1}" + echo "资源包更新成功" else - echo "前端程序下载失败,继续使用旧的程序来启动..." + echo "资源包下载失败,继续使用旧的资源包来启动..." fi else - echo "前端最新版本号获取失败,继续启动..." + echo "插件下载失败,继续使用旧的插件来启动..." fi else - echo "资源包下载失败,继续使用旧的程序来启动..." + echo "前端程序下载失败,继续使用旧的程序来启动..." fi else - echo "插件下载失败,继续使用旧的程序来启动..." + echo "前端最新版本号获取失败,继续启动..." fi else echo "安装依赖失败,请重新拉取镜像" @@ -100,9 +101,9 @@ if [[ "${MOVIEPILOT_AUTO_UPDATE}" = "true" ]] || [[ "${MOVIEPILOT_AUTO_UPDATE}" echo "Release 更新模式" old_version=$(cat /app/version.py) if [[ "${old_version}" == *APP_VERSION* ]]; then - current_version=v$(echo ${old_version} | sed -ne "s/APP_VERSION\s=\s'v\(.*\)'/\1/gp") + current_version=v$(echo "${old_version}" | sed -ne "s/APP_VERSION\s=\s'v\(.*\)'/\1/gp") echo "当前版本号:${current_version}" - new_version=$(curl ${CURL_OPTIONS} "https://api.github.com/repos/jxxghp/MoviePilot/releases/latest" ${CURL_HEADERS} | jq -r .tag_name) + new_version=$(curl "${CURL_OPTIONS}" "https://api.github.com/repos/jxxghp/MoviePilot/releases/latest" "${CURL_HEADERS}" | jq -r .tag_name) if [[ "${new_version}" == *v* ]]; then release_version=${new_version} echo "最新版本号:${release_version}"