From fa8205b2be3f07be1bbe06c27cd63d25b1e705cc Mon Sep 17 00:00:00 2001 From: DDSRem <73049927+DDSRem@users.noreply.github.com> Date: Sat, 1 Jun 2024 20:01:21 +0800 Subject: [PATCH 1/4] fix: suggestions and errors pointed out by shellcheck --- alist/data.sh | 7 +++---- alist/start.sh | 8 ++++---- emby/entrypoint.sh | 7 +++---- emby/update_alist_addr.sh | 2 +- install.sh | 36 +++++++++++++++++------------------ jellyfin/entrypoint.sh | 4 ++-- jellyfin/update_alist_addr.sh | 2 +- metadata/emby.sh | 5 +++-- metadata/entrypoint.sh | 2 +- uninstall.sh | 4 ++-- 10 files changed, 38 insertions(+), 39 deletions(-) diff --git a/alist/data.sh b/alist/data.sh index c0f4ed0..6414ba0 100644 --- a/alist/data.sh +++ b/alist/data.sh @@ -64,14 +64,13 @@ download_files() { } restart_service() { - kill -15 $(ps ax | grep 'nginx|httpd|alist' | grep -v grep | awk '{print$1}') + kill -15 $(pgrep -f 'nginx|httpd|alist') sleep 10 /entrypoint.sh /opt/alist/alist server --no-prefix & } update() { - download_files - if [ $? -ne 0 ]; then + if ! download_files; then echo "Failed to download files or no need to update" return 1 fi @@ -89,4 +88,4 @@ case "$1" in echo "Usage: $0 {update|download}" exit 1 ;; -esac \ No newline at end of file +esac diff --git a/alist/start.sh b/alist/start.sh index cb308f5..f2b5673 100644 --- a/alist/start.sh +++ b/alist/start.sh @@ -46,9 +46,9 @@ fi if [ -n "${PIKPAK_LIST:-}" ]; then echo "设置PIKPAK用户密码..." rm -rf /data/pikpak_list.txt - echo ${PIKPAK_LIST} | tr ',' '\n' | while read line; do - user=$(echo $line | cut -d':' -f1) - pass=$(echo $line | cut -d':' -f2-) + echo "${PIKPAK_LIST}" | tr ',' '\n' | while read -r line; do + user=$(echo "$line" | cut -d':' -f1) + pass=$(echo "$line" | cut -d':' -f2-) echo "\"${user}\" \"${pass}\"" >> /data/pikpak_list.txt done fi @@ -106,4 +106,4 @@ fi /entrypoint.sh /opt/alist/alist server --no-prefix & -exec crond -f \ No newline at end of file +exec crond -f diff --git a/emby/entrypoint.sh b/emby/entrypoint.sh index 8525c93..c13b403 100644 --- a/emby/entrypoint.sh +++ b/emby/entrypoint.sh @@ -1,7 +1,7 @@ #!/bin/sh echo "等待alist启动完成..." -while ! wget -q -T 1 -O /dev/null "${ALIST_ADDR:=http://alist:5678}" &> /dev/null; do +while ! wget -q -T 1 -O /dev/null "${ALIST_ADDR:=http://alist:5678}" > /dev/null 2>&1; do sleep 2 done @@ -16,13 +16,12 @@ networks: files EOF echo "开始自动更新alist地址..." -/update_alist_addr.sh &> /dev/null & +/update_alist_addr.sh > /dev/null 2>&1 & -/start_emby.sh &> /dev/null & +/start_emby.sh > /dev/null 2>&1 & start_command="/system/EmbyServer -programdata /config -ffdetect /bin/ffdetect -ffmpeg /bin/ffmpeg -ffprobe /bin/ffprobe -restartexitcode 3" $start_command & exec shell2http -port 8080 /stop "killall -15 EmbyServer" /start "LD_LIBRARY_PATH=/lib:/system ${start_command} &" - diff --git a/emby/update_alist_addr.sh b/emby/update_alist_addr.sh index 8b327d2..ed050c0 100644 --- a/emby/update_alist_addr.sh +++ b/emby/update_alist_addr.sh @@ -9,7 +9,7 @@ ALIST_DOMAIN=$(echo "${ALIST_ADDR}" | sed -e 's#http://##' -e 's#https://##' -e add_hosts() { # 容器里不能使用sed -i,所以使用临时文件 sed -e "/xiaoya.host/d" /etc/hosts > /tmp/hosts - echo -e "$1\txiaoya.host" >> /tmp/hosts + printf "%s\txiaoya.host\n" "$1" >> /tmp/hosts cat /tmp/hosts > /etc/hosts } diff --git a/install.sh b/install.sh index 475e7ff..d29211e 100644 --- a/install.sh +++ b/install.sh @@ -29,7 +29,7 @@ if ! command -v docker &> /dev/null; then echo "Docker 未安装,请安装docker后再运行脚本,推荐OrbStack:https://orbstack.dev/" exit 1 fi - read -p "Docker 未安装,是否安装?(y/n): " install + read -rp "Docker 未安装,是否安装?(y/n): " install if [ "$install" = "y" ]; then echo "安装docker..." curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun @@ -45,7 +45,7 @@ DOCKER_COMPOSE="docker compose" # 检查是否安装了compose插件,docker compose 命令 if ! docker compose &> /dev/null && ! which docker-compose &> /dev/null; then - read -p "Docker Compose 未安装,是否安装?(y/n): " install + read -rp "Docker Compose 未安装,是否安装?(y/n): " install if [ "$install" = "y" ]; then echo "安装docker compose..." # 判断系统是x86还是arm,arm有很多种类,都要判断 @@ -70,14 +70,14 @@ if ! docker compose &> /dev/null; then fi # 让用户输入服务部署目录,默认/opt/xiaoya -read -p "请输入服务部署目录(默认/opt/xiaoya): " install_path +read -rp "请输入服务部署目录(默认/opt/xiaoya): " install_path install_path=${install_path:=/opt/xiaoya} # 检查服务是否已经运行 echo "检查服务是否已经存在..." if [ -f "$install_path/docker-compose.yml" ]; then # 询问用户是否要更新服务 - read -p "检查到服务已存在,是否更新服务?(y/n): " update + read -rp "检查到服务已存在,是否更新服务?(y/n): " update if [ "${update}" != "y" ]; then echo "退出安装" exit 1 @@ -86,15 +86,15 @@ fi # 如果是更新服务,则从原有的compose配置中获取token等信息 if [ "${update}" = "y" ]; then - token=$(cat $install_path/env 2> /dev/null | grep ALIYUN_TOKEN | awk -F '=' '{print $2}') - open_token=$(cat $install_path/env 2> /dev/null | grep ALIYUN_OPEN_TOKEN | awk -F '=' '{print $2}') - folder_id=$(cat $install_path/env 2> /dev/null | grep ALIYUN_FOLDER_ID | awk -F '=' '{print $2}') + token=$(grep ALIYUN_TOKEN "$install_path/env" 2> /dev/null | awk -F '=' '{print $2}') + open_token=$(grep ALIYUN_OPEN_TOKEN "$install_path/env" 2> /dev/null | awk -F '=' '{print $2}') + folder_id=$(grep ALIYUN_FOLDER_ID "$install_path/env" 2> /dev/null | awk -F '=' '{print $2}') fi # 让用户输入阿里云盘TOKEN,token获取方式教程:https://alist.nn.ci/zh/guide/drivers/aliyundrive.html echo echo "阿里云盘token获取方式教程:https://alist.nn.ci/zh/guide/drivers/aliyundrive.html" -read -p "请输入阿里云盘TOKEN(默认为$token): " res +read -rp "请输入阿里云盘TOKEN(默认为$token): " res token=${res:=$token} if [ ${#token} -ne 32 ]; then echo "长度不对,阿里云盘 Token是32位" @@ -104,7 +104,7 @@ fi # 让用户输入阿里云盘OpenTOKEN,token获取方式教程:https://alist.nn.ci/zh/guide/drivers/aliyundrive_open.html echo echo "阿里云盘Open token获取方式教程:https://alist.nn.ci/zh/guide/drivers/aliyundrive_open.html" -read -p "请输入阿里云盘Open TOKEN(默认为$open_token): " res +read -rp "请输入阿里云盘Open TOKEN(默认为$open_token): " res open_token=${res:=$open_token} if [ ${#open_token} -le 334 ]; then echo "长度不对,阿里云盘 Open Token是335位" @@ -114,7 +114,7 @@ fi # 让用户输入阿里云盘转存目录folder_id,folder_id获取方式教程:https://www.aliyundrive.com/s/rP9gP3h9asE echo echo "转存以下文件到你的网盘,进入文件夹,获取地址栏末尾的文件夹ID:https://www.aliyundrive.com/s/rP9gP3h9asE" -read -p "请输入阿里云盘转存目录folder_id(默认为$folder_id): " res +read -rp "请输入阿里云盘转存目录folder_id(默认为$folder_id): " res folder_id=${res:=$folder_id} if [ ${#folder_id} -ne 40 ]; then echo "长度不对,阿里云盘 folder id是40位" @@ -128,7 +128,7 @@ echo "1. alist + emby (默认)" echo "2. alist" echo "3. alist + jellyfin" echo "4. alist + emby + jellyfin" -read -p "请选择部署服务类型: " service_type +read -rp "请选择部署服务类型: " service_type case $service_type in 1) service_type="" @@ -150,15 +150,15 @@ esac # 检查目录是否存在,不存在则创建 if [ ! -d "$install_path" ]; then - mkdir -p $install_path + mkdir -p "$install_path" fi -cd $install_path +cd "$install_path" echo "开始生成配置文件docker-compose${service_type}.yml..." -curl -#Lo $install_path/docker-compose.yml "${GH_PROXY}https://raw.githubusercontent.com/monlor/docker-xiaoya/main/docker-compose${service_type}.yml" -if [ ! -f $install_path/env ]; then - curl -#Lo $install_path/env "${GH_PROXY}https://raw.githubusercontent.com/monlor/docker-xiaoya/main/env" +curl -#Lo "$install_path/docker-compose.yml" "${GH_PROXY}https://raw.githubusercontent.com/monlor/docker-xiaoya/main/docker-compose${service_type}.yml" +if [ ! -f "$install_path/env" ]; then + curl -#Lo "$install_path/env" "${GH_PROXY}https://raw.githubusercontent.com/monlor/docker-xiaoya/main/env" fi sedsh "s#ALIYUN_TOKEN=.*#ALIYUN_TOKEN=$token#g" env sedsh "s#ALIYUN_OPEN_TOKEN=.*#ALIYUN_OPEN_TOKEN=$open_token#g" env @@ -196,7 +196,7 @@ echo "emby地址: http://$local_ip:6908, http://$ip:6908, 默认用户密码: xi echo "jellyfin地址: http://$local_ip:8096, http://$ip:8096" # 添加管理脚本,启动,停止,查看日志 -cat > $install_path/manage.sh <<-EOF +cat > "$install_path/manage.sh" <<-EOF #!/bin/bash set -e @@ -230,4 +230,4 @@ case \$1 in esac EOF -chmod +x $install_path/manage.sh \ No newline at end of file +chmod +x "$install_path/manage.sh" diff --git a/jellyfin/entrypoint.sh b/jellyfin/entrypoint.sh index 47fc15e..21495a6 100644 --- a/jellyfin/entrypoint.sh +++ b/jellyfin/entrypoint.sh @@ -1,7 +1,7 @@ #!/bin/sh echo "等待alist启动完成..." -while ! curl -s -f -m 1 "${ALIST_ADDR:=http://alist:5678}" &> /dev/null; do +while ! curl -s -f -m 1 "${ALIST_ADDR:=http://alist:5678}" > /dev/null 2>&1; do sleep 2 done @@ -16,6 +16,6 @@ networks: files EOF echo "开始自动更新alist地址..." -/update_alist_addr.sh &> /dev/null & +/update_alist_addr.sh > /dev/null 2>&1 & /jellyfin/jellyfin --datadir /config --cachedir /cache --ffmpeg /usr/lib/jellyfin-ffmpeg/ffmpeg \ No newline at end of file diff --git a/jellyfin/update_alist_addr.sh b/jellyfin/update_alist_addr.sh index 8b327d2..ed050c0 100644 --- a/jellyfin/update_alist_addr.sh +++ b/jellyfin/update_alist_addr.sh @@ -9,7 +9,7 @@ ALIST_DOMAIN=$(echo "${ALIST_ADDR}" | sed -e 's#http://##' -e 's#https://##' -e add_hosts() { # 容器里不能使用sed -i,所以使用临时文件 sed -e "/xiaoya.host/d" /etc/hosts > /tmp/hosts - echo -e "$1\txiaoya.host" >> /tmp/hosts + printf "%s\txiaoya.host\n" "$1" >> /tmp/hosts cat /tmp/hosts > /etc/hosts } diff --git a/metadata/emby.sh b/metadata/emby.sh index c034345..0bb14a2 100644 --- a/metadata/emby.sh +++ b/metadata/emby.sh @@ -112,7 +112,8 @@ wait_for_emby() { echo "Waiting for Emby service to start at $EMBY_URL..." while true; do - local http_code=$(curl -s -o /dev/null -w "%{http_code}" "${EMBY_URL}/Users") + local http_code + http_code=$(curl -s -o /dev/null -w "%{http_code}" "${EMBY_URL}/Users") if [ "$http_code" -eq 401 ]; then echo "Emby service is up and running." return 0 @@ -196,4 +197,4 @@ case $1 in echo "Usage: $0 {update|reset|download}" exit 1 ;; -esac \ No newline at end of file +esac diff --git a/metadata/entrypoint.sh b/metadata/entrypoint.sh index ad3b313..74094e3 100644 --- a/metadata/entrypoint.sh +++ b/metadata/entrypoint.sh @@ -156,4 +156,4 @@ echo "Complete." touch ${MEDIA_DIR}/config/meta_finished -cron -f \ No newline at end of file +cron -f diff --git a/uninstall.sh b/uninstall.sh index 5d46c0b..708682d 100644 --- a/uninstall.sh +++ b/uninstall.sh @@ -2,7 +2,7 @@ set -e -read -p "请输入服务部署目录(默认/opt/xiaoya):" install_path +read -rp "请输入服务部署目录(默认/opt/xiaoya):" install_path install_path=${install_path:=/opt/xiaoya} if [ ! -d "$install_path" ]; then @@ -17,7 +17,7 @@ if ! docker compose &> /dev/null; then fi params="" -read -p "是否删除数据卷?(y/n)" delete_volume +read -rp "是否删除数据卷?(y/n)" delete_volume if [ "$delete_volume" = "y" ]; then params="--volumes" fi From ca9a5804ce69b71861c6571968074f01ffcdaf06 Mon Sep 17 00:00:00 2001 From: DDSRem <73049927+DDSRem@users.noreply.github.com> Date: Sat, 1 Jun 2024 20:12:12 +0800 Subject: [PATCH 2/4] feat: reduce the number of duplicate layers --- alist/Dockerfile | 14 +++----------- emby/Dockerfile | 15 ++++++--------- jellyfin/Dockerfile | 6 ++---- metadata/Dockerfile | 7 ++----- 4 files changed, 13 insertions(+), 29 deletions(-) diff --git a/alist/Dockerfile b/alist/Dockerfile index 57fad4b..fe9b9d5 100644 --- a/alist/Dockerfile +++ b/alist/Dockerfile @@ -10,20 +10,12 @@ ARG TARGETARCH ENV DUMB_INIT_VERSION "1.2.5" -ADD https://raw.githubusercontent.com/monlor/docker-xiaoya/main/bin/dumb-init_${DUMB_INIT_VERSION}_${TARGETARCH} /dumb-init +ADD --chmod=755 https://raw.githubusercontent.com/monlor/docker-xiaoya/main/bin/dumb-init_${DUMB_INIT_VERSION}_${TARGETARCH} /dumb-init -RUN chmod +x /dumb-init - -COPY ./start.sh /start.sh -COPY ./clear.sh /clear.sh -COPY ./update_media_addr.sh /update_media_addr.sh -COPY ./fix_media.sh /fix_media.sh -COPY ./data.sh /data.sh - -RUN chmod +x /start.sh /clear.sh /update_media_addr.sh /fix_media.sh /data.sh +COPY --chmod=755 ./*.sh / RUN DATA_DIR=/tmp/data /data.sh download ENTRYPOINT [ "/dumb-init", "--", "/start.sh" ] -CMD [] \ No newline at end of file +CMD [] diff --git a/emby/Dockerfile b/emby/Dockerfile index 3520158..f210cb4 100644 --- a/emby/Dockerfile +++ b/emby/Dockerfile @@ -4,19 +4,16 @@ LABEL MAINTAINER me@monlor.com ARG TARGETARCH -ENV SHELL2HTTP_VERSION "1.17.0" - -ENV DUMB_INIT_VERSION "1.2.5" +ENV SHELL2HTTP_VERSION="1.17.0" \ + DUMB_INIT_VERSION="1.2.5" ENV PUID=0 PGID=0 -ADD https://github.com/msoap/shell2http/releases/download/v${SHELL2HTTP_VERSION}/shell2http_${SHELL2HTTP_VERSION}_linux_${TARGETARCH}.tar.gz . - -ADD https://raw.githubusercontent.com/monlor/docker-xiaoya/main/bin/dumb-init_${DUMB_INIT_VERSION}_${TARGETARCH} /dumb-init +ADD --chmod=755 https://raw.githubusercontent.com/monlor/docker-xiaoya/main/bin/dumb-init_${DUMB_INIT_VERSION}_${TARGETARCH} /dumb-init -RUN tar -zxvf shell2http_${SHELL2HTTP_VERSION}_linux_${TARGETARCH}.tar.gz -C /usr/bin/ shell2http && \ - rm -rf shell2http_${SHELL2HTTP_VERSION}_linux_${TARGETARCH}.tar.gz && \ - chmod +x /dumb-init +RUN curl -sL "https://github.com/msoap/shell2http/releases/download/v${SHELL2HTTP_VERSION}/shell2http_${SHELL2HTTP_VERSION}_linux_${TARGETARCH}.tar.gz" | \ + tar -zxvf - -C /usr/bin/ shell2http && \ + rm -rf shell2http_${SHELL2HTTP_VERSION}_linux_${TARGETARCH}.tar.gz COPY ./entrypoint.sh /entrypoint.sh COPY ./update_alist_addr.sh /update_alist_addr.sh diff --git a/jellyfin/Dockerfile b/jellyfin/Dockerfile index 763e3af..7c7e199 100644 --- a/jellyfin/Dockerfile +++ b/jellyfin/Dockerfile @@ -2,9 +2,7 @@ FROM monlor/jellyfin LABEL MAINTAINER me@monlor.com -COPY ./entrypoint.sh /entrypoint.sh -COPY ./update_alist_addr.sh /update_alist_addr.sh - -RUN chmod +x /entrypoint.sh /update_alist_addr.sh +COPY --chmod=755 ./entrypoint.sh /entrypoint.sh +COPY --chmod=755 ./update_alist_addr.sh /update_alist_addr.sh ENTRYPOINT [ "/entrypoint.sh" ] \ No newline at end of file diff --git a/metadata/Dockerfile b/metadata/Dockerfile index 72747bc..5501bec 100644 --- a/metadata/Dockerfile +++ b/metadata/Dockerfile @@ -33,9 +33,6 @@ RUN curl -#LO https://github.com/Rik-F5/xiaoya_db/archive/refs/heads/main.zip && mv xiaoya_db-main/solid.py / && \ rm -rf main.zip xiaoya_db-main -COPY ./entrypoint.sh /entrypoint.sh -COPY ./emby.sh /emby.sh +COPY --chmod=755 ./*.sh / -RUN chmod +x /entrypoint.sh /emby.sh - -ENTRYPOINT [ "/entrypoint.sh" ] \ No newline at end of file +ENTRYPOINT [ "/entrypoint.sh" ] From 0eb700667f74e3be9bf788a73cc82a13f9e45a13 Mon Sep 17 00:00:00 2001 From: DDSRem <73049927+DDSRem@users.noreply.github.com> Date: Sat, 1 Jun 2024 20:26:50 +0800 Subject: [PATCH 3/4] feat: reduce the number of duplicate layers --- emby/.dockerignore | 1 + emby/Dockerfile | 5 +---- jellyfin/.dockerignore | 1 + jellyfin/Dockerfile | 3 +-- 4 files changed, 4 insertions(+), 6 deletions(-) create mode 100644 emby/.dockerignore create mode 100644 jellyfin/.dockerignore diff --git a/emby/.dockerignore b/emby/.dockerignore new file mode 100644 index 0000000..81d87ee --- /dev/null +++ b/emby/.dockerignore @@ -0,0 +1 @@ +create_embyserver.sh \ No newline at end of file diff --git a/emby/Dockerfile b/emby/Dockerfile index f210cb4..c75a7a8 100644 --- a/emby/Dockerfile +++ b/emby/Dockerfile @@ -15,9 +15,6 @@ RUN curl -sL "https://github.com/msoap/shell2http/releases/download/v${SHELL2HTT tar -zxvf - -C /usr/bin/ shell2http && \ rm -rf shell2http_${SHELL2HTTP_VERSION}_linux_${TARGETARCH}.tar.gz -COPY ./entrypoint.sh /entrypoint.sh -COPY ./update_alist_addr.sh /update_alist_addr.sh - -RUN chmod +x /entrypoint.sh /update_alist_addr.sh +COPY --chmod=755 ./*.sh / ENTRYPOINT [ "/dumb-init", "/entrypoint.sh" ] \ No newline at end of file diff --git a/jellyfin/.dockerignore b/jellyfin/.dockerignore new file mode 100644 index 0000000..f1a8de6 --- /dev/null +++ b/jellyfin/.dockerignore @@ -0,0 +1 @@ +create_jellyfn.sh \ No newline at end of file diff --git a/jellyfin/Dockerfile b/jellyfin/Dockerfile index 7c7e199..8f483bd 100644 --- a/jellyfin/Dockerfile +++ b/jellyfin/Dockerfile @@ -2,7 +2,6 @@ FROM monlor/jellyfin LABEL MAINTAINER me@monlor.com -COPY --chmod=755 ./entrypoint.sh /entrypoint.sh -COPY --chmod=755 ./update_alist_addr.sh /update_alist_addr.sh +COPY --chmod=755 ./*.sh / ENTRYPOINT [ "/entrypoint.sh" ] \ No newline at end of file From 0010ebf7156a731da413f8e9dd29310fb6e303f5 Mon Sep 17 00:00:00 2001 From: DDSRem <73049927+DDSRem@users.noreply.github.com> Date: Sat, 1 Jun 2024 20:54:27 +0800 Subject: [PATCH 4/4] fix: emby does not have a curl command --- emby/Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/emby/Dockerfile b/emby/Dockerfile index c75a7a8..ccb8ceb 100644 --- a/emby/Dockerfile +++ b/emby/Dockerfile @@ -9,10 +9,11 @@ ENV SHELL2HTTP_VERSION="1.17.0" \ ENV PUID=0 PGID=0 +ADD https://github.com/msoap/shell2http/releases/download/v${SHELL2HTTP_VERSION}/shell2http_${SHELL2HTTP_VERSION}_linux_${TARGETARCH}.tar.gz . + ADD --chmod=755 https://raw.githubusercontent.com/monlor/docker-xiaoya/main/bin/dumb-init_${DUMB_INIT_VERSION}_${TARGETARCH} /dumb-init -RUN curl -sL "https://github.com/msoap/shell2http/releases/download/v${SHELL2HTTP_VERSION}/shell2http_${SHELL2HTTP_VERSION}_linux_${TARGETARCH}.tar.gz" | \ - tar -zxvf - -C /usr/bin/ shell2http && \ +RUN tar -zxvf shell2http_${SHELL2HTTP_VERSION}_linux_${TARGETARCH}.tar.gz -C /usr/bin/ shell2http && \ rm -rf shell2http_${SHELL2HTTP_VERSION}_linux_${TARGETARCH}.tar.gz COPY --chmod=755 ./*.sh /