暂存-说明文档(部分)
This commit is contained in:
147
install.sh
147
install.sh
@@ -2,28 +2,77 @@
|
||||
set -euo pipefail
|
||||
|
||||
REPO_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
|
||||
# 安装目录确认(默认使用脚本所在目录)
|
||||
DEFAULT_INSTALL_DIR="$REPO_DIR"
|
||||
echo "默认安装目录: $DEFAULT_INSTALL_DIR"
|
||||
read -r -p "请输入安装目录(回车使用默认): " INSTALL_DIR_INPUT
|
||||
if [ -z "$INSTALL_DIR_INPUT" ]; then
|
||||
INSTALL_DIR="$DEFAULT_INSTALL_DIR"
|
||||
else
|
||||
INSTALL_DIR="$INSTALL_DIR_INPUT"
|
||||
fi
|
||||
|
||||
# 创建并解析目标路径为绝对路径
|
||||
mkdir -p "$INSTALL_DIR"
|
||||
INSTALL_DIR="$(cd "$INSTALL_DIR" && pwd)"
|
||||
|
||||
if [ "$INSTALL_DIR" != "$REPO_DIR" ]; then
|
||||
echo "选择的安装目录 ($INSTALL_DIR) 与脚本所在目录 ($REPO_DIR) 不同。"
|
||||
if [ -f "$INSTALL_DIR/run_main.sh" ] || [ -f "$INSTALL_DIR/install.sh" ]; then
|
||||
echo "目标目录已包含仓库文件;将在该目录继续安装。"
|
||||
REPO_DIR="$INSTALL_DIR"
|
||||
else
|
||||
read -r -p "目标目录不包含本仓库。是否将当前仓库复制到 $INSTALL_DIR 并在其下继续安装?输入 'yes' 或 'y' 表示同意(默认 no): " COPY_REPLY
|
||||
COPY_REPLY="${COPY_REPLY:-no}"
|
||||
case "${COPY_REPLY,,}" in
|
||||
y|yes|是|1)
|
||||
COPY_CONFIRM=1
|
||||
;;
|
||||
*)
|
||||
COPY_CONFIRM=0
|
||||
;;
|
||||
esac
|
||||
if [ "$COPY_CONFIRM" -eq 1 ]; then
|
||||
if command -v rsync >/dev/null 2>&1; then
|
||||
rsync -a --exclude='.git' "$REPO_DIR/" "$INSTALL_DIR/"
|
||||
else
|
||||
cp -a "$REPO_DIR/." "$INSTALL_DIR/"
|
||||
fi
|
||||
REPO_DIR="$INSTALL_DIR"
|
||||
echo "仓库已复制到 $REPO_DIR"
|
||||
else
|
||||
echo "将继续使用脚本所在目录作为仓库路径:$REPO_DIR"
|
||||
echo "(注意:systemd 服务和脚本仍将引用 $REPO_DIR)"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# 依赖于 REPO_DIR 的路径和变量
|
||||
VENV_DIR="$REPO_DIR/venv"
|
||||
PYTHON_BIN="${PYTHON:-python3}"
|
||||
PRUSA_URL="https://github.com/davidk/PrusaSlicer-ARM.AppImage/releases/download/version_2.9.4/PrusaSlicer-2.9.4-aarch64-full.AppImage"
|
||||
PRUSA_DIR="$REPO_DIR/prusaslicer"
|
||||
PRUSA_FILE="$PRUSA_DIR/$(basename "$PRUSA_URL")"
|
||||
PRUSA_SKIP_DOWNLOAD="${PRUSA_SKIP_DOWNLOAD:-0}"
|
||||
PRUSA_AGPL_ACCEPT="${PRUSA_AGPL_ACCEPT:-0}"
|
||||
|
||||
echo "Installing AIO_3D_Print_Web_Platform into: $REPO_DIR"
|
||||
echo "Using python: $PYTHON_BIN"
|
||||
echo "正在将 AIO_3D_Print_Web_Platform 安装到:$REPO_DIR"
|
||||
echo "使用的 Python: $PYTHON_BIN"
|
||||
|
||||
echo "Stopping services if running (may require sudo)"
|
||||
echo "如果服务正在运行,将尝试停止它们(可能需要 sudo)"
|
||||
sudo systemctl stop aio-3d-main.service 2>/dev/null || true
|
||||
sudo systemctl stop aio-3d-huey.service 2>/dev/null || true
|
||||
|
||||
echo "Creating virtual environment at $VENV_DIR (if missing)"
|
||||
echo "正在创建虚拟环境(如果不存在):$VENV_DIR"
|
||||
if [ ! -d "$VENV_DIR" ]; then
|
||||
$PYTHON_BIN -m venv "$VENV_DIR"
|
||||
fi
|
||||
|
||||
echo "Activating virtualenv and installing Python requirements"
|
||||
echo "正在激活虚拟环境并安装 Python 依赖"
|
||||
# shellcheck disable=SC1091
|
||||
source "$VENV_DIR/bin/activate"
|
||||
# Detect http(s) proxy (respect both lowercase and uppercase env vars)
|
||||
# 检测 http(s) 代理(支持大小写环境变量)
|
||||
PROXY=""
|
||||
if [ -n "${HTTPS_PROXY:-}" ]; then
|
||||
PROXY="$HTTPS_PROXY"
|
||||
@@ -36,7 +85,7 @@ elif [ -n "${http_proxy:-}" ]; then
|
||||
fi
|
||||
|
||||
pip_with_proxy() {
|
||||
# Usage: pip_with_proxy install [args...]
|
||||
# 用法: pip_with_proxy install [参数...]
|
||||
if [ -n "$PROXY" ] && [ "$1" = "install" ]; then
|
||||
shift
|
||||
pip install --proxy "$PROXY" "$@"
|
||||
@@ -49,43 +98,75 @@ pip_with_proxy install --upgrade pip setuptools wheel
|
||||
if [ -f "$REPO_DIR/requirements.txt" ]; then
|
||||
pip_with_proxy install -r "$REPO_DIR/requirements.txt"
|
||||
else
|
||||
echo "Warning: requirements.txt not found in $REPO_DIR"
|
||||
echo "警告:在 $REPO_DIR 未找到 requirements.txt"
|
||||
fi
|
||||
|
||||
echo "Ensure run scripts are executable"
|
||||
echo "确保运行脚本具有可执行权限"
|
||||
chmod +x "$REPO_DIR/run_main.sh" "$REPO_DIR/run_huey.sh"
|
||||
|
||||
echo "Checking PrusaSlicer AppImage (optional)"
|
||||
echo "正在检查 PrusaSlicer AppImage(可选)"
|
||||
mkdir -p "$PRUSA_DIR"
|
||||
if [ ! -f "$PRUSA_FILE" ]; then
|
||||
echo "Downloading PrusaSlicer AppImage to $PRUSA_FILE"
|
||||
if command -v curl >/dev/null 2>&1; then
|
||||
if [ -n "$PROXY" ]; then
|
||||
curl -x "$PROXY" -L -o "$PRUSA_FILE" "$PRUSA_URL"
|
||||
else
|
||||
curl -L -o "$PRUSA_FILE" "$PRUSA_URL"
|
||||
fi
|
||||
elif command -v wget >/dev/null 2>&1; then
|
||||
if [ -n "$PROXY" ]; then
|
||||
env HTTP_PROXY="$PROXY" HTTPS_PROXY="$PROXY" wget -O "$PRUSA_FILE" "$PRUSA_URL"
|
||||
else
|
||||
wget -O "$PRUSA_FILE" "$PRUSA_URL"
|
||||
fi
|
||||
if [ "$PRUSA_SKIP_DOWNLOAD" = "1" ]; then
|
||||
echo "检测到 PRUSA_SKIP_DOWNLOAD=1,跳过 PrusaSlicer 下载。"
|
||||
else
|
||||
echo "Warning: neither curl nor wget found; cannot download PrusaSlicer AppImage automatically."
|
||||
fi
|
||||
if [ -f "$PRUSA_FILE" ]; then
|
||||
chmod +x "$PRUSA_FILE"
|
||||
cat <<'AGPL_NOTICE'
|
||||
PrusaSlicer 使用 GNU Affero General Public License v3 (AGPLv3) 授权。
|
||||
源码仓库: https://github.com/prusa3d/PrusaSlicer
|
||||
本安装器引用的二进制仓库: https://github.com/davidk/PrusaSlicer-ARM.AppImage
|
||||
下载并运行 PrusaSlicer 即表示您同意 AGPLv3 的许可条款。
|
||||
如果您通过网络向用户提供基于该软件的服务,AGPLv3 可能要求您向用户提供相应源码。
|
||||
详情请参见 third_party/PRUSASLICER.md 获取源码与合规说明。
|
||||
AGPL_NOTICE
|
||||
|
||||
if [ "$PRUSA_AGPL_ACCEPT" != "1" ]; then
|
||||
read -r -p "是否接受 AGPLv3 许可并允许下载 PrusaSlicer 二进制?输入 'yes' 或 'y' 表示同意(或设置 PRUSA_AGPL_ACCEPT=1 自动同意): " PRUSA_REPLY
|
||||
else
|
||||
PRUSA_REPLY="yes"
|
||||
fi
|
||||
|
||||
case "${PRUSA_REPLY,,}" in
|
||||
y|yes|是|1)
|
||||
PRUSA_APPROVED=1
|
||||
;;
|
||||
*)
|
||||
PRUSA_APPROVED=0
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ "$PRUSA_APPROVED" -eq 1 ]; then
|
||||
echo "正在下载 PrusaSlicer AppImage 到 $PRUSA_FILE"
|
||||
if command -v curl >/dev/null 2>&1; then
|
||||
if [ -n "$PROXY" ]; then
|
||||
curl -x "$PROXY" -L -o "$PRUSA_FILE" "$PRUSA_URL"
|
||||
else
|
||||
curl -L -o "$PRUSA_FILE" "$PRUSA_URL"
|
||||
fi
|
||||
elif command -v wget >/dev/null 2>&1; then
|
||||
if [ -n "$PROXY" ]; then
|
||||
env HTTP_PROXY="$PROXY" HTTPS_PROXY="$PROXY" wget -O "$PRUSA_FILE" "$PRUSA_URL"
|
||||
else
|
||||
wget -O "$PRUSA_FILE" "$PRUSA_URL"
|
||||
fi
|
||||
else
|
||||
echo "警告:未检测到 curl 或 wget,无法自动下载 PrusaSlicer AppImage。"
|
||||
fi
|
||||
if [ -f "$PRUSA_FILE" ]; then
|
||||
chmod +x "$PRUSA_FILE"
|
||||
fi
|
||||
else
|
||||
echo "用户未接受 AGPL,已跳过 PrusaSlicer 下载。"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "PrusaSlicer AppImage already present: $PRUSA_FILE"
|
||||
echo "已存在 PrusaSlicer AppImage:$PRUSA_FILE"
|
||||
fi
|
||||
|
||||
echo "Prepare and install systemd service files (requires sudo)"
|
||||
echo "准备并安装 systemd 服务文件(需要 sudo)"
|
||||
for svc in "aio-3d-main.service" "aio-3d-huey.service"; do
|
||||
SRC="$REPO_DIR/$svc"
|
||||
if [ ! -f "$SRC" ]; then
|
||||
echo "Warning: $SRC not found, skipping"
|
||||
echo "警告:未找到 $SRC,跳过"
|
||||
continue
|
||||
fi
|
||||
|
||||
@@ -101,15 +182,15 @@ for svc in "aio-3d-main.service" "aio-3d-huey.service"; do
|
||||
if ($0 ~ /^ExecStart=/) { print "ExecStart=" exec; next } \
|
||||
print $0 }' "$SRC" > "$TMPFILE"
|
||||
|
||||
echo "Installing $svc -> /etc/systemd/system/$svc"
|
||||
echo "正在安装 $svc -> /etc/systemd/system/$svc"
|
||||
sudo cp "$TMPFILE" "/etc/systemd/system/$svc"
|
||||
done
|
||||
|
||||
echo "Reloading systemd daemon and enabling services"
|
||||
echo "重新加载 systemd 守护进程并启用服务"
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable aio-3d-main.service aio-3d-huey.service || true
|
||||
sudo systemctl restart aio-3d-huey.service || true
|
||||
sudo systemctl restart aio-3d-main.service || true
|
||||
|
||||
echo "Installation completed successfully"
|
||||
echo "安装完成"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user