镜像自地址
https://github.com/JGZYES/ParlzPackageManger.git
已同步 2026-09-11 05:42:44 +08:00
- pmm 0.6.0: 结构化错误码(见前), 站点 PMM_VERSION + install.sh 版本 + 文档版本 - ppdm 0.0.2: 新增 list/del 命令(客户端) + web/ppdm/list.php/del.php 后端 - CI: ppdm 构建版本 0.0.1 -> 0.0.2 - docs: ppdm.md 加 list/del, download/install 文档 0.5.6 -> 0.6.0 - CHANGELOG 0.6.0 增 ppdm 0.0.2 全量发布说明
89 行
3.1 KiB
Bash
89 行
3.1 KiB
Bash
#!/bin/sh
|
||
# ParlzPackageManager (PMM) — Linux/macOS one-line installer.
|
||
#
|
||
# 用法:
|
||
# curl -sSL -o install.sh https://pmm.parlz.com/install.sh && bash install.sh
|
||
# 或:curl -sSL https://pmm.parlz.com/install.sh | bash
|
||
#
|
||
# 下载官方 release 二进制并安装到 ~/.pmm/root/bin/pmm(与 `pmm install pmm` 自升级同一路径,
|
||
# 避免 install.sh 与 pmm self-update 两处安装“串”)。
|
||
set -e
|
||
VER="0.6.0"
|
||
REPO="JGZYES/ParlzPackageManger"
|
||
|
||
# ---- 检测平台 ----
|
||
OS="$(uname -s)"; ARCH="$(uname -m)"
|
||
case "$OS" in
|
||
Linux) os=linux ;;
|
||
Darwin) os=macos ;;
|
||
*) echo "pmm: 不支持的平台 $OS"; exit 1 ;;
|
||
esac
|
||
case "$ARCH" in
|
||
x86_64|amd64) arch=amd64 ;;
|
||
aarch64|arm64) arch=arm64 ;;
|
||
*) echo "pmm: 不支持的架构 $ARCH"; exit 1 ;;
|
||
esac
|
||
|
||
# ---- 下载 pmm(按架构选 release 资产名)----
|
||
case "$arch" in
|
||
amd64) ASSET="pmm" ;;
|
||
arm64) ASSET="pmm-aarch64" ;;
|
||
esac
|
||
URL="https://github.com/$REPO/releases/download/v$VER/$ASSET"
|
||
echo "pmm: 下载 v$VER ($os/$arch) ..."
|
||
TMP="$(mktemp)"
|
||
# --progress-bar shows a live download progress line (tty only)
|
||
if ! curl -fL --progress-bar --max-time 300 -o "$TMP" "$URL"; then
|
||
rm -f "$TMP"; echo "pmm: 下载失败($URL)"; exit 1
|
||
fi
|
||
echo ""
|
||
chmod +x "$TMP"
|
||
|
||
# ---- 安装:装到与 `pmm install pmm`(自升级)相同的唯一路径,防止“串” ----
|
||
# pmm 自装/升级把二进制放在 ~/.pmm/root/bin/pmm,这里也用同一处。
|
||
DEST="${HOME}/.pmm/root/bin/pmm"
|
||
mkdir -p "$(dirname "$DEST")"
|
||
cp "$TMP" "$DEST" && chmod +x "$DEST" && rm -f "$TMP"
|
||
|
||
# ---- 安装完成:确保 ~/.pmm/root/bin 在 PATH(prepend),并给出精确指引 ----
|
||
DEST_DIR="$(dirname "$DEST")"
|
||
|
||
# 写入 ~/.bashrc(若能写),让以后打开的 shell 优先用这个 pmm。
|
||
RC="$HOME/.bashrc"
|
||
if [ -e "$RC" ] || [ -w "$HOME" ]; then
|
||
if ! grep -qF "export PATH=\"$DEST_DIR:" "$RC" 2>/dev/null; then
|
||
printf 'export PATH="%s:$PATH"\n' "$DEST_DIR" >> "$RC" 2>/dev/null || true
|
||
fi
|
||
fi
|
||
|
||
case ":$PATH:" in
|
||
*":$DEST_DIR:"*) ;;
|
||
*) echo "pmm: 当前 shell 请执行: export PATH=\"$DEST_DIR:\$PATH\" && hash -r" ;;
|
||
esac
|
||
|
||
# bash 可能仍把 pmm 命中在旧路径(如 /usr/local/bin/pmm 或已删除的路径)。
|
||
# 子脚本清不了父 shell 缓存,但 command -v 能报出“重新解析 PATH 后”会命中哪个 pmm。
|
||
hash -r 2>/dev/null || true
|
||
FOUND="$(command -v pmm 2>/dev/null || true)"
|
||
|
||
echo ""
|
||
echo "pmm: 安装完成 -> $DEST"
|
||
"$DEST" -v 2>/dev/null || true
|
||
|
||
if [ -n "$FOUND" ] && [ "$FOUND" != "$DEST" ]; then
|
||
echo ""
|
||
echo "pmm: 注意: 当前 shell 里的 'pmm' 仍会命中: $FOUND"
|
||
echo "pmm: (而不是刚安装的 $DEST)"
|
||
case "$FOUND" in
|
||
/mnt/*) echo "pmm: 它在 /mnt/ 下,通常是 Windows 侧安装的 pmm 经由 WSL 的 PATH 被带进来。" ;;
|
||
/usr/local/bin/*) echo "pmm: 它是系统级 pmm 安装(如需彻底清除可 sudo rm $FOUND)。" ;;
|
||
esac
|
||
echo "pmm: 请在当前终端执行下面三条,让 shell 优先用刚装的版本:"
|
||
echo "pmm:"
|
||
echo "pmm: export PATH=\"$DEST_DIR:\$PATH\""
|
||
echo "pmm: hash -r"
|
||
echo "pmm: which pmm && pmm -v"
|
||
echo "pmm:"
|
||
echo "pmm: 已写入 $RC(未含时);新终端无需再设置。"
|
||
fi
|