From e51ff4467927d93e2389fff5ba131566df14a2b6 Mon Sep 17 00:00:00 2001 From: Attente <19653207+wikrin@users.noreply.github.com> Date: Sun, 30 Nov 2025 18:49:30 +0800 Subject: [PATCH] =?UTF-8?q?fix(autobackup):=20root=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E4=B8=8D=E4=BD=BF=E7=94=A8=20exec=5Frun,=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=AD=97=E7=AC=A6=E4=B8=B2=E5=BC=95=E5=8F=B7=E9=A3=8E=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.v2.json | 2 +- plugins.v2/autobackup/__init__.py | 33 ++++++++++++++++--------------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/package.v2.json b/package.v2.json index d0acc50..ffa1e77 100644 --- a/package.v2.json +++ b/package.v2.json @@ -419,7 +419,7 @@ "name": "自动备份", "description": "自动备份数据和配置文件。", "labels": "系统设置", - "version": "2.1.1", + "version": "2.1.2", "icon": "Time_machine_B.png", "author": "thsrite", "level": 1, diff --git a/plugins.v2/autobackup/__init__.py b/plugins.v2/autobackup/__init__.py index 0960b7b..c89925f 100644 --- a/plugins.v2/autobackup/__init__.py +++ b/plugins.v2/autobackup/__init__.py @@ -33,7 +33,7 @@ class AutoBackup(_PluginBase): # 插件图标 plugin_icon = "Time_machine_B.png" # 插件版本 - plugin_version = "2.1.1" + plugin_version = "2.1.2" # 插件作者 plugin_author = "thsrite" # 作者主页 @@ -202,8 +202,8 @@ class AutoBackup(_PluginBase): # 执行安装 PostgreSQL 客户端的命令 try: AutoBackup.install_postgresql_client(pg_version) - logger.info("PostgreSQL 17 客户端安装成功。") - except (docker.errors.ContainerError, subprocess.CalledProcessError) as e: + logger.info(f"PostgreSQL {pg_version} 客户端安装成功。") + except (docker.errors.APIError, docker.errors.ContainerError, subprocess.CalledProcessError) as e: logger.error(f"安装 PostgreSQL {pg_version} 客户端失败: {e.stderr.strip() if e.stderr else str(e)}") logger.error("请手动执行安装命令。") logger.error(f'apt-get update && apt-get install -y wget gnupg lsb-release && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor > /etc/apt/trusted.gpg.d/postgresql.gpg && echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list && apt-get update && apt-get install -y postgresql-client-{pg_version}') @@ -279,30 +279,31 @@ class AutoBackup(_PluginBase): # 设置代理 exec_env = {} if proxy_url and proxy_url.startswith(('http://', 'https://')): - exec_env['http_proxy'] = proxy_url - exec_env['https_proxy'] = proxy_url + exec_env.update(dict.fromkeys(['HTTP_PROXY', 'HTTPS_PROXY', 'http_proxy', 'https_proxy'], proxy_url)) # 构建安装脚本 install_script = ( - "apt-get update && " - "apt-get install -y wget gnupg lsb-release && " - "wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | " - "gpg --dearmor > /etc/apt/trusted.gpg.d/postgresql.gpg && " - "echo 'deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main' " - "> /etc/apt/sources.list.d/pgdg.list && " - "apt-get update && " - "apt-get install -y postgresql-%s" % pg_version + 'apt-get update && ' + 'apt-get install -y wget gnupg lsb-release && ' + 'wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | ' + 'gpg --dearmor > /etc/apt/trusted.gpg.d/postgresql.gpg && ' + 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" ' + '> /etc/apt/sources.list.d/pgdg.list && ' + 'apt-get update && ' + 'apt-get install -y postgresql-%s' % pg_version ) - - if SystemUtils.is_docker() and (container_id := SystemHelper._get_container_id()): + # 非root用户且是docker环境 + if os.geteuid() != 0 and SystemUtils.is_docker() and (container_id := SystemHelper._get_container_id()): # 创建 Docker 客户端 client = docker.DockerClient(base_url=settings.DOCKER_CLIENT_API) # 获取容器对象 container = client.containers.get(container_id) # 执行命令 - container.exec_run( + exit_code, output = container.exec_run( cmd=['sh', '-c', install_script], environment=exec_env ) + if exit_code != 0: + raise docker.errors.ContainerError(exit_status=exit_code, command=install_script, stderr=output) else: subprocess.run(