51 lines
1.9 KiB
Bash
51 lines
1.9 KiB
Bash
#!/usr/bin/env zsh
|
||
|
||
prepare_docker_build_proxy() {
|
||
# Desktop and remote/rootless daemons are managed in their own environment.
|
||
docker_uses_local_engine || return 0
|
||
docker_desktop_present && return 0
|
||
|
||
local python_bin="$(command -v python3)"
|
||
local helper="$SCRIPT_DIR/scripts/docker_proxy.py"
|
||
local plan_file error_file
|
||
local mode changed connected status_text
|
||
if [ -z "$python_bin" ] || ! plan_file="$(mktemp "$PLANET_STATE_DIR/docker-proxy.XXXXXX")"; then
|
||
log_error "Docker 构建代理检测失败"
|
||
return 1
|
||
fi
|
||
error_file="${plan_file}.error"
|
||
chmod 600 "$plan_file"
|
||
: > "$error_file"
|
||
chmod 600 "$error_file"
|
||
{
|
||
if ! "$python_bin" "$helper" plan > "$plan_file" 2> "$error_file"; then
|
||
log_error "Docker 构建代理检测失败" "$error_file"
|
||
return 1
|
||
fi
|
||
if ! status_text="$("$python_bin" "$helper" status < "$plan_file" 2> "$error_file")"; then
|
||
log_error "Docker 构建代理检测失败" "$error_file"
|
||
return 1
|
||
fi
|
||
read -r mode changed connected <<< "$status_text"
|
||
if [ "$changed" -eq 1 ]; then
|
||
docker_require_sudo || return 1
|
||
log_note "更新 Docker 构建代理配置,重启后恢复原先运行的容器"
|
||
if ! docker_as_root "$python_bin" "$helper" apply < "$plan_file" 2> "$error_file"; then
|
||
log_error "Docker 构建代理更新失败" "$error_file"
|
||
return 1
|
||
fi
|
||
fi
|
||
if [ "$connected" -ne 1 ]; then
|
||
log_error "PLANET_PROXY_NO_ROUTE"
|
||
return 1
|
||
fi
|
||
if [ "$mode" = proxy ]; then
|
||
log_note "Docker 构建使用已验证可用的主机代理"
|
||
else
|
||
log_note "未发现可用主机代理,Docker 构建使用直连"
|
||
fi
|
||
} always {
|
||
rm -f -- "$plan_file" "$error_file"
|
||
}
|
||
}
|