pacman-debian 7.3.11 → 7.3.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +36 -504
  2. package/README_zh-CN.md +35 -489
  3. package/dist/ar.d.ts +8 -0
  4. package/dist/cli/archlinux-java.d.ts +3 -0
  5. package/dist/cli/fix_default.d.ts +3 -0
  6. package/dist/cli/paclink.d.ts +3 -0
  7. package/dist/cli/pacman.d.ts +2 -0
  8. package/dist/cli/pacman.d.ts.map +1 -1
  9. package/dist/cli/pacman.js +4 -1
  10. package/dist/cli/pacman.js.map +1 -1
  11. package/dist/cli/update-ca-trust.d.ts +3 -0
  12. package/dist/compress.d.ts +2 -0
  13. package/dist/config.d.ts +3 -0
  14. package/dist/control.d.ts +2 -0
  15. package/dist/core/ar.d.ts +7 -0
  16. package/dist/core/compress.d.ts +4 -0
  17. package/dist/core/control.d.ts +2 -0
  18. package/dist/core/deb.d.ts +4 -0
  19. package/dist/core/deps.d.ts +28 -0
  20. package/dist/core/options.d.ts +19 -0
  21. package/dist/core/pkgfile.d.ts +35 -0
  22. package/dist/core/tar.d.ts +13 -0
  23. package/dist/core/types.d.ts +83 -0
  24. package/dist/database.d.ts +20 -0
  25. package/dist/db/database.d.ts +17 -0
  26. package/dist/db/dpkg-compat.d.ts +19 -0
  27. package/dist/db/localdb.d.ts +9 -0
  28. package/dist/db/sqlite.d.ts +20 -0
  29. package/dist/deb.d.ts +5 -0
  30. package/dist/dpkg-compat.d.ts +18 -0
  31. package/dist/i18n/en.json +2 -0
  32. package/dist/i18n/index.d.ts +4 -0
  33. package/dist/i18n/paclink/en.d.ts +3 -0
  34. package/dist/i18n/paclink/zh-CN.d.ts +3 -0
  35. package/dist/i18n/setup/en.d.ts +3 -0
  36. package/dist/i18n/setup/zh-CN.d.ts +3 -0
  37. package/dist/i18n/zh-CN.json +2 -0
  38. package/dist/index.d.ts +3 -0
  39. package/dist/install.d.ts +2 -0
  40. package/dist/makepkg/build.d.ts +19 -0
  41. package/dist/makepkg/index.d.ts +3 -0
  42. package/dist/makepkg/pkgbuild.d.ts +36 -0
  43. package/dist/ops/install.d.ts +5 -0
  44. package/dist/ops/query.d.ts +9 -0
  45. package/dist/ops/remove.d.ts +4 -0
  46. package/dist/ops/upgrade.d.ts +4 -0
  47. package/dist/pacman.d.ts +2 -0
  48. package/dist/query.d.ts +5 -0
  49. package/dist/remove.d.ts +2 -0
  50. package/dist/repo/config.d.ts +3 -0
  51. package/dist/repo/repository.d.ts +20 -0
  52. package/dist/repository.d.ts +10 -0
  53. package/dist/scripts/pacman-conf.d.ts +3 -0
  54. package/dist/scripts/setup.d.ts +3 -0
  55. package/dist/tar.d.ts +17 -0
  56. package/dist/types.d.ts +80 -0
  57. package/dist/ui/colors.d.ts +13 -0
  58. package/dist/ui/format.d.ts +3 -0
  59. package/dist/ui/progress.d.ts +8 -0
  60. package/dist/ui/prompt.d.ts +4 -0
  61. package/docs/en/architecture.md +188 -0
  62. package/docs/en/configuration.md +84 -0
  63. package/docs/en/installation.md +67 -0
  64. package/docs/en/makepkg.md +38 -0
  65. package/docs/en/paclink.md +73 -0
  66. package/docs/en/usage.md +91 -0
  67. package/docs/en/yay-aur.md +65 -0
  68. package/docs/zh-CN/architecture.md +171 -0
  69. package/docs/zh-CN/configuration.md +80 -0
  70. package/docs/zh-CN/installation.md +65 -0
  71. package/docs/zh-CN/makepkg.md +32 -0
  72. package/docs/zh-CN/paclink.md +70 -0
  73. package/docs/zh-CN/usage.md +90 -0
  74. package/docs/zh-CN/yay-aur.md +44 -0
  75. package/lib/pac4deb/Makefile +26 -0
  76. package/lib/pac4deb/README.md +47 -0
  77. package/lib/pac4deb/include/alpm.h +166 -0
  78. package/lib/pac4deb/include/alpm_list.h +43 -0
  79. package/lib/pac4deb/src/alpm_list.c +120 -0
  80. package/lib/pac4deb/src/genstubs.sh +51 -0
  81. package/lib/pac4deb/src/genstubs2.sh +72 -0
  82. package/lib/pac4deb/src/genstubs3.sh +43 -0
  83. package/lib/pac4deb/src/libalpm.c +964 -0
  84. package/lib/pac4deb/src/stubs_manual.c +452 -0
  85. package/package.json +19 -1
@@ -0,0 +1,65 @@
1
+ # libalpm & yay / AUR
2
+
3
+ ## libalpm C Library (libpac4deb)
4
+
5
+ A C library at `lib/pac4deb/` that implements the libalpm ABI (`alpm.h`),
6
+ allowing Go-based AUR helpers like `yay` to work on Debian without
7
+ modification. It reads:
8
+
9
+ - Local database (`/var/lib/pacman-debian/local/`) — packages installed by
10
+ pacman-debian
11
+ - dpkg status (`/var/lib/dpkg/status`) — system packages from apt/dpkg
12
+ - Sync databases (`/var/cache/pacman-debian/packages/*/` — JSONL chunks)
13
+
14
+ Over 200 stubs are provided for rarely-used functions.
15
+
16
+ ### Key Implementation Details
17
+
18
+ - **packages.idx binary search (C)**: `alpm_db_get_pkg` and
19
+ `alpm_find_dbs_satisfier` use binary search on the sorted index, then read
20
+ a single JSONL line by byte offset — no full JSONL loading.
21
+ - **Auto-register sync DBs**: `ensure_syncdbs` scans
22
+ `/var/cache/pacman-debian/packages/` on first `alpm_get_syncdbs`,
23
+ registering all available repos lazily.
24
+ - **Package DB pointer**: `pkg_internal.db` field tracks owning database;
25
+ `alpm_pkg_get_db` returns it, preventing `DB().Name()` nil dereference.
26
+ - **idx-based search**: `alpm_db_search` scans index lines for pattern
27
+ matching instead of loading all packages. ~1.5s for -Ss with 6 repos / 15k
28
+ packages.
29
+ - **dpkg Provides parsing**: `load_dpkg_status` reads the `Provides:` field
30
+ from dpkg status, so Debian packages that declare virtual names
31
+ (e.g. `7zip` → `p7zip`) are discoverable by yay via
32
+ `alpm_pkg_has_provide`.
33
+ - **Local DB fallback**: `alpm_find_dbs_satisfier` searches the local
34
+ database after sync DBs, matching both package names and provides.
35
+ - **find_in_idx provides scan**: After binary search by package name fails,
36
+ scans the `provides` column of `packages.idx` for sync DB provides.
37
+ - **dpkg -S fallback**: For `lib*.so` SONAMEs not found anywhere, forks
38
+ `dpkg -S` to locate the owning Debian package at runtime.
39
+ - **Debian alternatives**: Checks `/etc/alternatives/` for `sh`, `awk`, `vi`,
40
+ `editor` etc. and adds virtual provides to the owning package.
41
+
42
+ ### Build
43
+
44
+ ```bash
45
+ make -C lib/pac4deb
46
+ sudo make -C lib/pac4deb install
47
+ ```
48
+
49
+ ## yay / AUR Support
50
+
51
+ `yay` works with `pacman-debian` through the bundled libalpm:
52
+
53
+ ```bash
54
+ # Install yay (Go required)
55
+ sudo apt install golang-go
56
+ git clone https://aur.archlinux.org/yay.git /tmp/yay
57
+ cd /tmp/yay && go build -o /usr/local/bin/yay
58
+
59
+ # Use with pacman-debian (PACMAN env var detected automatically)
60
+ yay -Ss ponysay
61
+ sudo -E yay -S ponysay
62
+ ```
63
+
64
+ Note: AUR packages that depend on `python` (not `python3`) are resolved
65
+ automatically via paclink's `python → python3` mapping, created during setup.
@@ -0,0 +1,171 @@
1
+ # 架构
2
+
3
+ ## 源文件结构
4
+
5
+ ```
6
+ src/
7
+ ├── cli/
8
+ │ ├── pacman.ts # CLI 参数解析和分发
9
+ │ ├── paclink.ts # 虚拟包链接管理
10
+ │ ├── update-ca-trust.ts # Arch 兼容 CA 证书更新器
11
+ │ ├── archlinux-java.ts # Arch 兼容 Java 环境管理器
12
+ │ └── fix_default.ts # Arch 兼容默认 JDK 助手
13
+ ├── core/ # 包格式解析器、依赖引擎
14
+ │ ├── ar.ts # ar 归档解析器
15
+ │ ├── tar.ts # tar 提取器
16
+ │ ├── deb.ts # .deb 包解析器
17
+ │ ├── pkgfile.ts # .pkg.tar.zst 解析器
18
+ │ ├── compress.ts # gz/xz 解压缩
19
+ │ ├── control.ts # Debian control 文件解析器
20
+ │ └── deps.ts # 依赖解析引擎
21
+ ├── db/
22
+ │ ├── localdb.ts # 目录式本地包数据库
23
+ │ ├── database.ts # 带事务的 DB 封装
24
+ │ └── dpkg-compat.ts # dpkg 状态文件读写
25
+ ├── ops/
26
+ │ ├── install.ts # 包安装
27
+ │ ├── remove.ts # 包删除
28
+ │ ├── query.ts # 所有 -Q 查询
29
+ │ └── upgrade.ts # 同步 + 升级流程
30
+ ├── repo/
31
+ │ ├── repository.ts # 仓库同步、下载、JSONL 缓存
32
+ │ └── config.ts # pacman.conf 解析器(支持 Include)
33
+ ├── scripts/
34
+ │ └── setup.ts # 交互式安装脚本
35
+ ├── makepkg/
36
+ │ ├── index.ts # makepkg 主入口
37
+ │ ├── pkgbuild.ts # PKGBUILD 解析器
38
+ │ ├── source.ts # 源码下载/解压
39
+ │ ├── build.ts # build()/package() 执行
40
+ │ └── printsrcinfo.ts # .SRCINFO 生成
41
+ ├── ui/ # 用户界面(提示、格式化)
42
+ └── index.ts # 入口
43
+ ```
44
+
45
+ ```
46
+ lib/pac4deb/ # libalpm C 库
47
+ ├── Makefile # 用 gcc 构建,目标 libalpm.so
48
+ ├── include/
49
+ │ ├── alpm.h # 公共 libalpm API 头文件
50
+ │ └── alpm_list.h # 链表头文件
51
+ └── src/
52
+ ├── libalpm.c # 核心实现(handle、db、pkg、JSON 解析器)
53
+ ├── stubs_manual.c # ~200 个不常用函数的桩实现
54
+ └── alpm_list.c # 链表实现
55
+ ```
56
+
57
+ ## 数据库
58
+
59
+ ### 本地数据库:`/var/lib/pacman-debian/local/`
60
+
61
+ 采用与 Arch Linux 本地 DB 一致的目录-包格式:
62
+
63
+ ```
64
+ /var/lib/pacman-debian/local/
65
+ ├── index.json # 包名 → 目录映射(base64 编码路径)
66
+ ├── by-name/
67
+ │ ├── fastfetch -> ../fastfetch-2.64.2-2/
68
+ │ └── ...
69
+ ├── fastfetch-2.64.2-2/
70
+ │ ├── desc # JSON 元数据(名称、版本、依赖、大小等)
71
+ │ └── files # 文件清单
72
+ └── ...
73
+ ```
74
+
75
+ ### dpkg 兼容
76
+
77
+ 通过 `dpkg` 或 `apt` 安装的包在查询时直接从 `/var/lib/dpkg/status` 读取
78
+ (按 mtime 缓存)。`pacman-debian` 安装包时会同时写入 dpkg 兼容的条目。
79
+
80
+ ### 仓库缓存:`/var/cache/pacman-debian/packages/`
81
+
82
+ 每个仓库以 JSON Lines 块形式缓存(每个 `.jsonl` 文件 5000 个包)。
83
+ 同步时还会生成全局排序的 `packages.idx` 索引。
84
+
85
+ ```
86
+ /var/cache/pacman-debian/packages/
87
+ ├── bookworm/
88
+ │ ├── 00000.jsonl # JSON Lines, ~5000 包/块
89
+ │ ├── ...
90
+ │ └── packages.idx # 全局排序索引 (~200KB)
91
+ └── ...
92
+ ```
93
+
94
+ #### 内存索引缓存
95
+
96
+ `packages.idx` 在首次读取后驻留内存,按仓库名 + mtime 缓存:
97
+
98
+ ```
99
+ _idxCache = new Map<string, IdxEntry>();
100
+ IdxEntry { lines: string[], mtime: number, providesIndex: Map<string, Array<{chunkFile, offset}>> }
101
+ ```
102
+
103
+ - 后续操作直接读内存,不重复读盘
104
+ - `providesIndex` 是倒排索引,O(1) 查找
105
+ - `pacman -Syy` 清空缓存
106
+ - 增量同步后自动重新加载
107
+
108
+ ### 查找路径
109
+
110
+ | 操作 | 方法 | 说明 |
111
+ |------|------|------|
112
+ | `-S <pkg>` / `-Qo` | 二分搜索 `packages.idx` → seek JSONL | O(log N) |
113
+ | `-Ss` | 逐行扫索引(包名+描述)→ seek JSONL | 不解析 JSON |
114
+ | `-Sl` | 扫索引 → seek 每个包 | 懒加载 |
115
+ | 依赖 provides | 扫索引 provides 字段 | 仅索引 |
116
+ | `-Qi` / `-Ql` | dpkg 状态或本地数据库 | 不涉及缓存 |
117
+
118
+ ## 依赖引擎
119
+
120
+ 依赖解析器(`src/core/deps.ts`)支持:
121
+
122
+ - 带版本约束的包名解析(`>=`、`<=`、`=`)
123
+ - OR 依赖(`|`)
124
+ - 架构限定符(如 `:arm64`)
125
+ - Debian(逗号分隔)和 Arch(空格分隔)两种格式
126
+ - BFS 解析,带预加载 DB 状态
127
+ - 冲突检测
128
+ - 系统包保护(glibc、libc6 等)
129
+
130
+ ### 性能优化
131
+
132
+ | 技术 | 说明 |
133
+ |------|------|
134
+ | **idx 内存缓存** | 二分搜索直接在内存中进行 |
135
+ | **provides 倒排索引** | `Map.get()` O(1) 查找 |
136
+ | **顺序 BFS + 指针游标** | 避免数组塌缩 |
137
+ | **keep-alive HTTP** | 复用 TCP/TLS 连接 |
138
+ | **异步解压 .gz** | 不阻塞事件循环 |
139
+ | **304 条件请求** | 跳过未变更仓库 |
140
+
141
+ ### 删除时的依赖处理
142
+
143
+ | 操作 | 逻辑 |
144
+ |------|------|
145
+ | `-R` | 仅删除指定包 |
146
+ | `-Rs` | 删除包 + 递归查找孤儿,逆拓扑序 |
147
+ | `-Rc` | 级联:找出所有依赖目标包的包 |
148
+ | `-Rsc` | 递归 + 级联组合 |
149
+ | `-Rn` | 备份 conffiles 后删除 |
150
+
151
+ ## 仓库支持
152
+
153
+ - **Debian/Ubuntu**:读取 `Packages.gz` / `Packages.xz`
154
+ - **Arch Linux**:读取 `db.tar.gz`,下载 `.pkg.tar.zst` 解包安装
155
+ - **Arch ARM**:需要 glibc 2.38+(Debian 12 自带 2.36),请用 `makepkg` 本地编译
156
+
157
+ ## 项目状态
158
+
159
+ 主要功能:
160
+
161
+ - **性能**:`packages.idx` 索引实现亚秒级查找
162
+ - **并行同步**:多仓库并发下载
163
+ - **多语言**:中英文完整本地化
164
+ - **颜色输出**:匹配官方 pacman 配色
165
+ - **权限分离**:查询无需 root
166
+ - **链接系统**(`paclink`):Debian→Arch 虚拟包名映射
167
+
168
+ 主要限制:
169
+
170
+ - **Arch ARM 二进制仓库需要 glibc 2.38+** — Debian 12 自带 2.36
171
+ - **yay/AUR**:复杂 AUR 依赖链可能因包名差异失败
@@ -0,0 +1,80 @@
1
+ # 配置
2
+
3
+ 配置文件:`/etc/pacman-debian/pacman.conf`
4
+
5
+ 使用纯 Arch Linux pacman 语法,支持 `Include` 指令。仓库特有键
6
+ (`Type`、`Dist`、`Components` 等)放在 `/etc/pacman.d/` 的包含文件中。
7
+
8
+ ## 示例
9
+
10
+ ```ini
11
+ [options]
12
+ Architecture = auto
13
+
14
+ [bookworm]
15
+ Include = /etc/pacman.d/debian-bookworm
16
+
17
+ [extra]
18
+ Include = /etc/pacman.d/arch-extra
19
+ ```
20
+
21
+ 包含文件 `/etc/pacman.d/debian-bookworm`:
22
+
23
+ ```
24
+ Server = https://mirrors.tuna.tsinghua.edu.cn/debian
25
+ Type = debian
26
+ Dist = bookworm
27
+ Components = main contrib non-free non-free-firmware
28
+ ```
29
+
30
+ Arch 仓库包含文件 `/etc/pacman.d/arch-extra`:
31
+
32
+ ```
33
+ Server = http://mirror.archlinuxarm.org/$arch/$repo
34
+ Type = arch
35
+ Architecture = auto
36
+ ```
37
+
38
+ ## 仓库类型
39
+
40
+ ### Debian
41
+
42
+ | 键 | 必需 | 说明 |
43
+ |-----|------|------|
44
+ | `Server` | 是 | 镜像 URL(支持 `$repo`、`$arch` 变量替换) |
45
+ | `Type` | 是 | 必须为 `debian` |
46
+ | `Dist` | 是 | 发行版代号(如 `bookworm`、`trixie`) |
47
+ | `Components` | 是 | 空格分隔的组件列表(`main contrib non-free`) |
48
+
49
+ ### Arch
50
+
51
+ | 键 | 必需 | 说明 |
52
+ |-----|------|------|
53
+ | `Server` | 是 | 镜像 URL(支持 `$repo`、`$arch` 变量替换) |
54
+ | `Type` | 是 | 必须为 `arch` |
55
+ | `Architecture` | 否 | 设为 `auto` 以匹配系统架构 |
56
+
57
+ ## 符号链接
58
+
59
+ 安装时会创建 `/etc/pacman.conf` → `/etc/pacman-debian/pacman.conf` 符号链接,
60
+ 方便硬编码该路径的工具(如 yay)使用。
61
+
62
+ ## 查看解析后的配置
63
+
64
+ ```bash
65
+ $ pacman-conf
66
+ # pacman-debian configuration
67
+ [options]
68
+ Architecture = auto
69
+
70
+ [bookworm]
71
+ Server = https://mirrors.tuna.tsinghua.edu.cn/debian
72
+ Type = debian
73
+ Dist = bookworm
74
+ Components = main contrib non-free non-free-firmware
75
+
76
+ [extra]
77
+ Server = http://mirror.archlinuxarm.org/$arch/$repo
78
+ Type = arch
79
+ Architecture = auto
80
+ ```
@@ -0,0 +1,65 @@
1
+ # 安装说明
2
+
3
+ ## 环境要求
4
+
5
+ - Node.js 18+
6
+ - Debian 系发行版(Debian、Ubuntu、Armbian、Linux Mint 等)
7
+ - 写操作需要 root 权限
8
+ - 编译工具:`gcc`、`make`、`ldconfig`(可选,用于 libalpm C 库)
9
+
10
+ ## npm 安装(推荐)
11
+
12
+ ```bash
13
+ npm install -g pacman-debian@latest
14
+ sudo $(which pacman-debian-setup)
15
+ ```
16
+
17
+ > [!WARNING]
18
+ > `npm install -g` **必须**在 `sudo` 或 `root` 用户下运行。
19
+ > 如果使用普通用户安装,Node.js 会将包安装到用户家目录(`~/.npm-global/` 等),
20
+ > 存在被其他用户或脚本篡改、植入恶意内容的风险。请始终使用 `sudo npm install -g`。
21
+
22
+ ### Setup 做了什么
23
+
24
+ 1. 创建默认配置 `/etc/pacman-debian/pacman.conf`
25
+ 2. 创建 `/etc/pacman.conf` → `/etc/pacman-debian/pacman.conf` 符号链接
26
+ 3. 创建 CLI 符号链接(`pacman`、`makepkg`、`pacman-conf`、`paclink`、`update-ca-trust`、`archlinux-java`、`fix_default`)
27
+ 4. 创建 `/var/lib/pacman` → `/var/lib/pacman-debian` 符号链接(fastfetch 检测用)
28
+ 5. 安装 Arch 兼容工具(`update-ca-trust`、`archlinux-java`、`fix_default`)
29
+ 6. 安装 Arch 兼容 shell 函数(`/etc/profile.d/append_path.sh`)
30
+ 7. 注册虚拟 `pacman` 包到 dpkg 状态
31
+ 8. 创建默认 paclink 映射(sh → bash、python → python3 等)
32
+
33
+ ## 开发安装
34
+
35
+ ```bash
36
+ git clone https://github.com/xbodwf/pacman-debian.git
37
+ cd pacman-debian
38
+ pnpm install
39
+ pnpm build # tsc + C 库
40
+ sudo node dist/scripts/setup.js
41
+ ```
42
+
43
+ 或手动设置:
44
+
45
+ ```bash
46
+ sudo ln -sf "$PWD/dist/cli/pacman.js" /usr/local/bin/pacman
47
+ sudo ln -sf "$PWD/dist/cli/paclink.js" /usr/local/bin/paclink
48
+ sudo ln -sf "$PWD/dist/scripts/pacman-conf.js" /usr/local/bin/pacman-conf
49
+ sudo ln -sf "$PWD/dist/makepkg/index.js" /usr/local/bin/makepkg
50
+ ```
51
+
52
+ ## 首次使用
53
+
54
+ ```bash
55
+ # 同步仓库
56
+ sudo pacman -Sy
57
+
58
+ # 搜索
59
+ pacman -Ss neofetch
60
+
61
+ # 安装
62
+ sudo pacman -S neofetch
63
+ ```
64
+
65
+ 完整命令参考见[使用文档](usage.md)。
@@ -0,0 +1,32 @@
1
+ # makepkg
2
+
3
+ 独立的 `makepkg` 实现,无需 `base-devel` 或任何 Arch 工具即可从 PKGBUILD
4
+ 构建 Arch Linux 包。
5
+
6
+ ```bash
7
+ # 从 PKGBUILD 构建包
8
+ cd /path/to/PKGBUILD/dir
9
+ makepkg --syncdeps --install
10
+ ```
11
+
12
+ ## 功能
13
+
14
+ - 通过 bash sourcing 解析 PKGBUILD
15
+ - 下载并验证源文件
16
+ - 解压归档:`.tar.gz`、`.tar.xz`、`.tar.bz2`、`.tar.zst`、`.zip`
17
+ - 运行 `prepare()`、`build()`、`check()`、`package()`
18
+ - 创建 `.pkg.tar.zst` 归档
19
+ - 通过 `--syncdeps` 安装缺失依赖
20
+
21
+ ## 参数
22
+
23
+ | 参数 | 说明 |
24
+ |------|------|
25
+ | `-s, --syncdeps` | 通过 pacman 安装缺失依赖 |
26
+ | `-i, --install` | 安装构建好的包 |
27
+ | `-c, --clean` | 打包后清理构建文件 |
28
+ | `-r, --rmdeps` | 构建后删除已安装的依赖 |
29
+ | `-f, --force` | 覆盖已有的包文件 |
30
+ | `-o, --nobuild` | 仅下载和解压源码 |
31
+ | `--nocolor` | 禁用彩色输出 |
32
+ | `--printsrcinfo` | 打印 `.SRCINFO` 并退出 |
@@ -0,0 +1,70 @@
1
+ # paclink(包链接管理)
2
+
3
+ 管理持久化的 Debian→Arch 虚拟包名映射。链接存储在本地数据库中,
4
+ 仅对 pacman/libalpm 可见,dpkg 不可见。
5
+
6
+ ## 命令
7
+
8
+ | 命令 | 说明 |
9
+ |------|------|
10
+ | `paclink -Ln <deb> <virt>` | 创建链接:Debian 包 `<deb>` 提供 Arch 虚拟名 `<virt>` |
11
+ | `paclink -L` | 列出所有链接 |
12
+ | `paclink -Ls <关键词>` | 搜索链接 |
13
+ | `paclink -Li <虚拟名>` | 显示链接详情 |
14
+ | `paclink -R <虚拟名>` | 删除链接(不影响 Debian 包) |
15
+
16
+ ## 示例
17
+
18
+ ```bash
19
+ # 映射 dash 提供 sh
20
+ sudo paclink -Ln dash sh
21
+
22
+ # 映射 python3 提供 python
23
+ sudo paclink -Ln python3 python
24
+
25
+ # 列出所有映射
26
+ paclink -L
27
+
28
+ # 搜索含 python 的链接
29
+ paclink -Ls python
30
+ ```
31
+
32
+ ## 行为
33
+
34
+ - 链接以 `repoType: link` 存储在本地 DB
35
+ - 当仓库中存在与链接同名的真包时,真包优先,安装时自动移除链接
36
+ - 链接仅对 pacman 和 libalpm 可见
37
+
38
+ ## 默认链接
39
+
40
+ Setup 创建的默认映射:
41
+
42
+ | 虚拟名 | Debian 包 |
43
+ |--------|-----------|
44
+ | sh | bash(或 dash) |
45
+ | python | python3 |
46
+ | zlib | zlib1g |
47
+ | bzip2 | libbz2-1.0 |
48
+ | xz | liblzma5 |
49
+ | zstd | libzstd1 |
50
+ | openssl | libssl-dev |
51
+ | libssl | libssl3t64 |
52
+ | libcrypt | libcrypt1 |
53
+ | libffi | libffi8 |
54
+ | libpcre | libpcre3 |
55
+ | libpcre2 | libpcre2-8-0 |
56
+ | libpng | libpng16-16t64 |
57
+ | libjpeg-turbo | libjpeg62-turbo |
58
+ | freetype2 | libfreetype6 |
59
+ | ncurses | libncursesw6 |
60
+ | readline | libreadline8t64 |
61
+ | sqlite | libsqlite3-0 |
62
+ | expat | libexpat1 |
63
+ | libxml2 | libxml2 |
64
+ | glibc | libc6 |
65
+ | gcc-libs | libgcc-s1 |
66
+ | libstdc++ | libstdc++6 |
67
+ | systemd-libs | libsystemd0 |
68
+ | gnutls | libgnutls30t64 |
69
+ | libcurl | libcurl4t64 |
70
+ | ca-certificates-utils | ca-certificates |
@@ -0,0 +1,90 @@
1
+ # 使用文档
2
+
3
+ ## 同步(-S)
4
+
5
+ | 命令 | 说明 |
6
+ |------|------|
7
+ | `pacman -S <pkg>` | 从仓库安装包 |
8
+ | `pacman -Sy` | 刷新包数据库(mtime 检查,24 小时) |
9
+ | `pacman -Syy` | 强制刷新包数据库(清除内存 idx 缓存) |
10
+ | `pacman -Su` | 升级所有已安装的包 |
11
+ | `pacman -Syu` | 刷新数据库并升级 |
12
+ | `pacman -Ss <keyword>` | 搜索仓库 |
13
+ | `pacman -Si <pkg>` | 显示远程包信息 |
14
+ | `pacman -Sl` | 列出仓库中所有包 |
15
+ | `pacman -Sw <pkg>` | 下载包到缓存目录,不安装 |
16
+ | `pacman -Sc` | 删除缓存目录中的包文件,保留仓库元数据 |
17
+ | `pacman -Scc` | 清空整个缓存目录(含仓库 jsonl/idx) |
18
+ | `pacman -Sp <pkg>` | 打印下载 URL(不会安装) |
19
+
20
+ ## 删除(-R)
21
+
22
+ | 命令 | 说明 |
23
+ |------|------|
24
+ | `pacman -R <pkg>` | 删除包 |
25
+ | `pacman -Rs <pkg>` | 删除包及未使用的依赖 |
26
+ | `pacman -Rn <pkg>` | 删除包及其配置文件 |
27
+ | `pacman -Rns <pkg>` | 删除包、依赖和配置文件 |
28
+ | `pacman -Rc <pkg>` | 级联删除:删除依赖该包的所有包 |
29
+ | `pacman -Rdd <pkg>` | 跳过依赖检查强制删除 |
30
+ | `pacman -Rp <pkg>` | 显示将要删除的内容(干运行) |
31
+
32
+ 支持多目标(`pacman -R a b`):所有目标合并显示后统一确认。
33
+
34
+ ## 查询(-Q)
35
+
36
+ | 命令 | 说明 |
37
+ |------|------|
38
+ | `pacman -Q` | 列出所有已安装的包 |
39
+ | `pacman -Qe` | 列出显式安装的包 |
40
+ | `pacman -Qd` | 列出作为依赖安装的包 |
41
+ | `pacman -Qdt` | 列出孤儿包(未使用的依赖) |
42
+ | `pacman -Qi <pkg>` | 显示详细包信息 |
43
+ | `pacman -Ql <pkg>` | 列出包拥有的文件 |
44
+ | `pacman -Qo <file>` | 查询文件属于哪个包 |
45
+ | `pacman -Qs <keyword>` | 搜索已安装的包 |
46
+ | `pacman -Qk [pkg]` | 验证包文件完整性 |
47
+ | `pacman -Qq` | 静默模式:仅输出包名 |
48
+
49
+ ## 其他
50
+
51
+ | 命令 | 说明 |
52
+ |------|------|
53
+ | `pacman -U <file>` | 安装本地包文件(.deb/.pkg.tar.zst) |
54
+ | `pacman -D --asdeps <pkg>` | 将包标记为依赖 |
55
+ | `pacman -D --asexplicit <pkg>` | 将包标记为显式安装 |
56
+ | `pacman -T <pkg>` | 检查依赖是否满足 |
57
+ | `pacman -F <file>` | 搜索提供该文件的包 |
58
+ | `pacman -V` | 显示版本号 |
59
+
60
+ ## 内置工具
61
+
62
+ | 命令 | 说明 |
63
+ |------|------|
64
+ | `pacman-conf` | 打印解析后的配置 |
65
+ | `makepkg` | 从 PKGBUILD 构建 Arch 包(见 [makepkg](makepkg.md)) |
66
+ | `pacman-debian-setup` | 交互式安装脚本 |
67
+ | `paclink` | 管理 Debian→Arch 虚拟包名映射(见 [paclink](paclink.md)) |
68
+ | `update-ca-trust` | CA 证书更新器(Arch 兼容,包装 `update-ca-certificates`) |
69
+ | `archlinux-java` | Java 环境管理器:`status`、`get`、`set`、`unset`、`fix` |
70
+ | `fix_default` | 打印当前默认 JDK 短名(Arch Java 包安装脚本使用) |
71
+
72
+ ## 全局参数
73
+
74
+ | 参数 | 说明 |
75
+ |------|------|
76
+ | `--noconfirm` | 跳过确认提示 |
77
+ | `--confirm` | 始终询问确认(默认) |
78
+ | `--needed` | 不重新安装已是最新的包 |
79
+ | `--noscriptlet` | 不执行安装脚本 |
80
+ | `--print` | 干运行 |
81
+
82
+ ## 配置选项(`pacman.conf [options]`)
83
+
84
+ | 选项 | 说明 |
85
+ |------|------|
86
+ | `Color` | 启用彩色输出 |
87
+ | `Architecture` | 设置目标架构(默认 `auto`) |
88
+ | `IgnorePkg` | 跳过指定包的升级 |
89
+
90
+ 详见[配置文档](configuration.md)。
@@ -0,0 +1,44 @@
1
+ # libalpm & yay / AUR 支持
2
+
3
+ ## libalpm C 库(libpac4deb)
4
+
5
+ 位于 `lib/pac4deb/` 的 C 库,实现了 libalpm ABI(`alpm.h`),使基于 Go 的
6
+ AUR 助手(如 yay)无需修改即可在 Debian 上运行。它读取:
7
+
8
+ - 本地数据库(`/var/lib/pacman-debian/local/`)
9
+ - dpkg 状态(`/var/lib/dpkg/status`)
10
+ - 同步数据库(`/var/cache/pacman-debian/packages/*/`)
11
+
12
+ 提供了 200+ 个不常用函数的桩实现。
13
+
14
+ ### 关键实现细节
15
+
16
+ - **二分查找**:对排序索引做二分查找,按字节偏移读单行 JSONL
17
+ - **自动注册 sync DB**:首次调用时扫描缓存目录,懒加载注册
18
+ - **dpkg Provides 解析**:读取 dpkg status 的 `Provides:` 字段
19
+ - **本地 DB 后备搜索**:sync DB 搜索失败后搜索本地数据库
20
+ - **dpkg -S 后备**:`lib*.so` SONAME 找不到时通过 `dpkg -S` 查归属
21
+ - **Debian alternatives**:检测 `/etc/alternatives/` 自动添加虚拟 provides
22
+
23
+ ### 构建
24
+
25
+ ```bash
26
+ make -C lib/pac4deb
27
+ sudo make -C lib/pac4deb install
28
+ ```
29
+
30
+ ## yay / AUR 支持
31
+
32
+ ```bash
33
+ # 安装 yay(需要 Go)
34
+ sudo apt install golang-go
35
+ git clone https://aur.archlinux.org/yay.git /tmp/yay
36
+ cd /tmp/yay && go build -o /usr/local/bin/yay
37
+
38
+ # 与 pacman-debian 配合使用(PACMAN 自动识别)
39
+ yay -Ss ponysay
40
+ sudo -E yay -S ponysay
41
+ ```
42
+
43
+ 注意:依赖 `python`(而非 `python3`)的 AUR 包可通过 setup 创建的 paclink
44
+ 映射 `python → python3` 自动解析。
@@ -0,0 +1,26 @@
1
+ CC ?= gcc
2
+ CFLAGS ?= -O2 -fPIC
3
+ CFLAGS += -Iinclude -Wno-unused-parameter
4
+ LDFLAGS += -shared -ldl
5
+
6
+ SRC = $(wildcard src/*.c)
7
+ OBJ = $(SRC:.c=.o)
8
+ TARGET = libalpm.so
9
+
10
+ .PHONY: all clean install
11
+
12
+ all: $(TARGET)
13
+
14
+ $(TARGET): $(OBJ)
15
+ $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
16
+
17
+ %.o: %.c
18
+ $(CC) $(CFLAGS) -c -o $@ $<
19
+
20
+ clean:
21
+ rm -f $(TARGET) src/*.o
22
+
23
+ install: $(TARGET)
24
+ install -Dm755 $(TARGET) /usr/local/lib/$(TARGET)
25
+ ldconfig
26
+ @echo "Installed to /usr/local/lib/$(TARGET)"
@@ -0,0 +1,47 @@
1
+ # pac4deb-libalpm
2
+
3
+ A drop-in replacement for Arch Linux's `libalpm.so`, reading from pacman-debian's database (`/var/lib/pacman-debian/`). Enables native AUR helpers like `yay`, `expac`, `pkgfile` to run on Debian without modification.
4
+
5
+ ## What is libalpm?
6
+
7
+ Arch Linux's package management core library (C). `pacman`, `yay`, `expac` and other Arch tools link against it to query databases, resolve dependencies, and manage transactions — all at the C API level rather than through the `pacman` CLI binary.
8
+
9
+ ## How it works
10
+
11
+ ```
12
+ yay ──────┐
13
+ expac ────┤
14
+ pkgfile ──┼─ libalpm.so (this project)
15
+ │ ├─ reads /var/lib/pacman-debian/status.json
16
+ │ ├─ reads /var/cache/pacman-debian/packages/*.json
17
+ │ └─ wraps pacman-debian for transactions
18
+
19
+ └─ (real libalpm reads /var/lib/pacman/local/*/desc)
20
+ ```
21
+
22
+ Instead of reading Arch's file-based package database, this library reads pacman-debian's JSON database and exposes the same C API. AUR helpers and other libalpm-dependent tools become usable on Debian without porting.
23
+
24
+ ## Build
25
+
26
+ ```bash
27
+ make
28
+ sudo make install
29
+ ```
30
+
31
+ ## API Coverage
32
+
33
+ Implements the most commonly used subset of libalpm's public API:
34
+
35
+ | Group | Functions |
36
+ |-------|-----------|
37
+ | Handle | `alpm_initialize`, `alpm_release` |
38
+ | Databases | `alpm_db_register_local`, `alpm_db_register_sync`, `alpm_db_unregister_all` |
39
+ | Package access | `alpm_db_get_pkg`, `alpm_db_get_pkgcache` |
40
+ | Package properties | `alpm_pkg_get_name`, `alpm_pkg_get_version`, `alpm_pkg_get_desc`, `alpm_pkg_get_url`, `alpm_pkg_get_arch`, `alpm_pkg_get_builddate`, `alpm_pkg_get_installdate`, `alpm_pkg_get_reason`, `alpm_pkg_get_base64_sig`, `alpm_pkg_free` |
41
+ | Lists | `alpm_list_add`, `alpm_list_remove`, `alpm_list_free`, `alpm_list_count`, `alpm_list_nth`, etc. |
42
+ | Options | `alpm_option_add_cachedir`, `alpm_option_set_dbpath`, `alpm_option_get_localdb`, `alpm_option_get_syncdbs` |
43
+ | Logging | `alpm_logaction`, `alpm_option_set_logfile` |
44
+
45
+ ## License
46
+
47
+ GNU General Public License v3.0