pacman-debian 7.3.10 → 7.3.13
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.
- package/README.md +52 -463
- package/README_zh-CN.md +50 -492
- package/dist/ar.d.ts +8 -0
- package/dist/cli/archlinux-java.d.ts +3 -0
- package/dist/cli/fix_default.d.ts +3 -0
- package/dist/cli/paclink.d.ts +3 -0
- package/dist/cli/pacman.d.ts +2 -0
- package/dist/cli/update-ca-trust.d.ts +3 -0
- package/dist/compress.d.ts +2 -0
- package/dist/config.d.ts +3 -0
- package/dist/control.d.ts +2 -0
- package/dist/core/ar.d.ts +7 -0
- package/dist/core/compress.d.ts +4 -0
- package/dist/core/control.d.ts +2 -0
- package/dist/core/deb.d.ts +4 -0
- package/dist/core/deps.d.ts +28 -0
- package/dist/core/options.d.ts +19 -0
- package/dist/core/pkgfile.d.ts +35 -0
- package/dist/core/tar.d.ts +13 -0
- package/dist/core/types.d.ts +83 -0
- package/dist/database.d.ts +20 -0
- package/dist/db/database.d.ts +17 -0
- package/dist/db/dpkg-compat.d.ts +19 -0
- package/dist/db/dpkg-compat.d.ts.map +1 -1
- package/dist/db/dpkg-compat.js +16 -1
- package/dist/db/dpkg-compat.js.map +1 -1
- package/dist/db/localdb.d.ts +9 -0
- package/dist/db/sqlite.d.ts +20 -0
- package/dist/deb.d.ts +5 -0
- package/dist/dpkg-compat.d.ts +18 -0
- package/dist/i18n/index.d.ts +4 -0
- package/dist/i18n/paclink/en.d.ts +3 -0
- package/dist/i18n/paclink/zh-CN.d.ts +3 -0
- package/dist/i18n/setup/en.d.ts +3 -0
- package/dist/i18n/setup/zh-CN.d.ts +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/install.d.ts +2 -0
- package/dist/makepkg/build.d.ts +19 -0
- package/dist/makepkg/index.d.ts +3 -0
- package/dist/makepkg/pkgbuild.d.ts +36 -0
- package/dist/ops/install.d.ts +5 -0
- package/dist/ops/query.d.ts +9 -0
- package/dist/ops/remove.d.ts +4 -0
- package/dist/ops/upgrade.d.ts +4 -0
- package/dist/pacman.d.ts +2 -0
- package/dist/query.d.ts +5 -0
- package/dist/remove.d.ts +2 -0
- package/dist/repo/config.d.ts +3 -0
- package/dist/repo/repository.d.ts +20 -0
- package/dist/repository.d.ts +10 -0
- package/dist/scripts/pacman-conf.d.ts +3 -0
- package/dist/scripts/setup.d.ts +3 -0
- package/dist/tar.d.ts +17 -0
- package/dist/types.d.ts +80 -0
- package/dist/ui/colors.d.ts +13 -0
- package/dist/ui/format.d.ts +3 -0
- package/dist/ui/progress.d.ts +8 -0
- package/dist/ui/prompt.d.ts +4 -0
- package/docs/en/architecture.md +188 -0
- package/docs/en/configuration.md +84 -0
- package/docs/en/installation.md +67 -0
- package/docs/en/makepkg.md +38 -0
- package/docs/en/paclink.md +73 -0
- package/docs/en/usage.md +91 -0
- package/docs/en/yay-aur.md +65 -0
- package/docs/zh-CN/architecture.md +171 -0
- package/docs/zh-CN/configuration.md +80 -0
- package/docs/zh-CN/installation.md +65 -0
- package/docs/zh-CN/makepkg.md +32 -0
- package/docs/zh-CN/paclink.md +70 -0
- package/docs/zh-CN/usage.md +90 -0
- package/docs/zh-CN/yay-aur.md +44 -0
- package/lib/pac4deb/Makefile +26 -0
- package/lib/pac4deb/README.md +47 -0
- package/lib/pac4deb/include/alpm.h +166 -0
- package/lib/pac4deb/include/alpm_list.h +43 -0
- package/lib/pac4deb/src/alpm_list.c +120 -0
- package/lib/pac4deb/src/genstubs.sh +51 -0
- package/lib/pac4deb/src/genstubs2.sh +72 -0
- package/lib/pac4deb/src/genstubs3.sh +43 -0
- package/lib/pac4deb/src/libalpm.c +964 -0
- package/lib/pac4deb/src/stubs_manual.c +452 -0
- 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
|