文件
ParlzPackageManger/web/docs/md/ppdm.md
T
JGZYES 4091c6791a release: PMM v0.6.0 + ppdm v0.0.2 — 站点版本/文档/CI 版本提升
- 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 全量发布说明
2026-09-06 18:01:41 +08:00

4.9 KiB
原始文件 Blame 文件历史

ppdm — 打包与发布工具

ppdm(ParlzPackageDevManager)是 PMM 生态里的开发者工具:把软件打包成 .pdm 并发布到镜像注册表。 它与 pmm(安装/使用包)分开,负责“做包、发包”。

  • 版本:独立版本号(当前 0.0.2),不受 PMM 主版本影响。
  • 服务端:https://pmm.parlz.com/ppdmPHP,对应仓库 web/ppdm/)。
  • 配置:~/.ppdm/configLinux)或 D:\.ppdm\configWindows)。

安装

一键安装(推荐)

curl -sSL https://pmm.parlz.com/download/install-ppdm.sh | bash
hash -r
ppdm -v        # ppdm 0.0.2

脚本会自动下载最新 ppdm 装到 ~/.ppdm/bin/ppdm(与 ppdm update 同一路径),并把 ~/.ppdm/bin 加进 PATH。

手动下载

# Linux amd64
curl -L -o ~/.local/bin/ppdm \
  https://github.com/JGZYES/ParlzPackageManger/releases/download/v0.5.5/ppdm
chmod +x ~/.local/bin/ppdm

# 或自更新到 ~/.ppdm/bin/ppdm
ppdm update

验证:

ppdm -v       # ppdm 0.0.2
ppdm help

命令总览

命令 作用
ppdm register <email> <password> 注册账号(本地算术人机验证,答对才创建)
ppdm login <email> <password> 登录,保存 token
ppdm logout 撤销并清除 token
ppdm whoami 显示当前邮箱 + 服务器
ppdm pack <dir> [out] dir 打包成 .pdmdir 内需有 pdm-control
ppdm list 列出当前账号已发布的包
ppdm del <pkg> [version] 删除自己已发布的包(可只删某版本)
ppdm update 更新 ppdm 自身
ppdm ./xxx.pdm 发布包(自动生成 json
ppdm help 帮助

1. 注册 / 登录

ppdm register you@mail.com 你的密码     # 出一道算术题,答对即注册成功
ppdm login    you@mail.com 你的密码     # 保存 token,之后可发布

人机验证在本地完成(一道中等难度算术题),不依赖邮件/服务器。

2. 打包成 .pdm

在任意目录准备源文件 + pdm-controlPackage/Version/Architecture/Description/Maintainer 字段):

myapp/
  pdm-control          # 见下
  bin/myapp            # 可执行文件、配置等(会被装进 ~/.pmm/root 下)

pdm-control 示例:

Package: myapp
Version: 1.0.0
Architecture: linux
Description: My app
Maintainer: you@mail.com
# 可选:
# LibraryPath: true   # 装到 ~/.pmm/root 后,自动把本包 lib/ 加入 LD_LIBRARY_PATH(新 shell 生效)
# InstallDir: tools/myapp   # 把本包装到 ~/.pmm/root/tools/myapp (bin -> .../bin, lib -> .../lib)
# InstallScript: bin/postinst.sh   # 安装后自动运行包内脚本(可访问 $PMM_ROOT 环境变量)

LibraryPath 默认 false(不加);true 时 pmm 会在 ~/.bashrc 写入本包 lib 目录的 LD_LIBRARY_PATHInstallDir 可把包装到 ~/.pmm/root/<子目录>,该目录下的 bin 也会进 PATH。 InstallScript 指向包内脚本路径,安装后执行(环境变量 $PMM_ROOT = 本包安装目录)。

打包:

ppdm pack ./myapp            # 生成 myapp_1.0.0.pdm
ppdm pack ./myapp out/my.pdm # 指定输出名

3. 发布(自动生成 json

ppdm ./myapp_1.0.0.pdm

服务端会:

  • 校验登录 token;
  • 计算 sha256;
  • 写入 web/mirror/dists/<pkg>.jsonvariants+ dists/<pkg>/<version>.json
  • .pdm 放到 web/mirror/files/<首字母>/<pkg>/
  • 追加到 dists/packages.json

重复与权限

  • name 已存在且是你创建的 → 可以继续上传新版本
  • 同版本重复上传 → 409;
  • 别人改你的包 → 409(阻止越权)。

管理自己发布的包(ppdm list / ppdm del

ppdm list                # 列出当前账号已发布的所有包(name@version os/arch + url
ppdm del myapp           # 删除整个包(所有版本)
ppdm del myapp 1.0.0     # 只删除某一个版本(其它版本保留)
  • list 需要先 ppdm login;只返回当前账号作为 owner 的包。
  • del 只能删自己创建的包;他人包会返回 you are not the owner
  • 删整包时,dists/<pkg>.jsondists/<pkg>/<ver>.jsonfiles/<首字母>/<pkg>/*.pdm 一并移除。

4. 用 pmm 安装刚发布的包

# pmm 的镜像 base 需指向 dists~/.pmm/mirror.ini
#   registry = https://pmm.parlz.com/mirror/dists
pmm update
pmm install myapp

5. 更新 ppdm

ppdm update      # 下载最新 ppdm 二进制到 ~/.ppdm/bin/ppdm

常见问题

  • 发布失败:package 'xx' already exists (owner: ...) —— 该包不是你发布的,或版本重复。
  • 本地算术题每次都随机,答错可重跑。
  • 服务端地址默认 https://pmm.parlz.com/ppdm;如需改:在 ~/.ppdm/configserver = <url>
  • 安装后 pmm install <pkg> 找不到 —— 确认 ~/.pmm/mirror.ini 的 registry 是 .../mirror/dists(不是旧的 /packages)。