mirror of
https://gitee.com/amber-ce/amber-pm
synced 2026-06-22 06:03:55 +08:00
124 lines
3.0 KiB
Markdown
124 lines
3.0 KiB
Markdown
# NixOS 构建与本地测试
|
||
|
||
本仓库提供了实验性的 Nix 打包文件,可用于在 NixOS 上本地构建和测试 APM。
|
||
|
||
## 本地构建
|
||
|
||
在仓库根目录执行:
|
||
|
||
```bash
|
||
nix-build default.nix
|
||
```
|
||
|
||
构建成功后会生成 `result` 符号链接,可先做基础命令测试:
|
||
|
||
```bash
|
||
./result/bin/apm --version
|
||
./result/bin/apm --help
|
||
./result/bin/amber-pm-init-state --help
|
||
```
|
||
|
||
如果使用 Flake,也可以执行:
|
||
|
||
```bash
|
||
nix build .#amber-pm
|
||
nix flake check
|
||
```
|
||
|
||
## 初始化本地状态目录
|
||
|
||
APM 需要可写的 `/var/lib/apm` 目录保存自身运行环境和已安装应用。Nix 包中的文件位于只读 Nix store,因此首次测试前需要初始化状态目录:
|
||
|
||
```bash
|
||
sudo ./result/bin/amber-pm-init-state
|
||
```
|
||
|
||
如需用新构建结果覆盖 APM 自身文件,可执行:
|
||
|
||
```bash
|
||
sudo ./result/bin/amber-pm-init-state --force
|
||
```
|
||
|
||
`--force` 会原地覆盖 `/var/lib/apm/apm` 中的 APM 自身文件,不会移动、备份或删除整个 `/var/lib/apm/apm` 目录,以免影响已经安装在该目录下的 APM 应用。
|
||
|
||
随后初始化内置 AmberCE 环境:
|
||
|
||
```bash
|
||
sudo /var/lib/apm/apm/files/bin/ace-init
|
||
```
|
||
|
||
完成后可继续测试:
|
||
|
||
```bash
|
||
./result/bin/apm debug
|
||
./result/bin/apm update
|
||
./result/bin/apm search amber-pm-
|
||
```
|
||
|
||
## 作为 NixOS Module 使用
|
||
|
||
可在 NixOS 配置中引入本仓库的 module:
|
||
|
||
```nix
|
||
{ pkgs, ... }:
|
||
{
|
||
imports = [
|
||
/path/to/amber-pm/nix/module.nix
|
||
];
|
||
|
||
nixpkgs.overlays = [
|
||
(final: prev: {
|
||
amber-pm = final.callPackage /path/to/amber-pm/nix/package.nix { };
|
||
})
|
||
];
|
||
|
||
programs.amber-pm.enable = true;
|
||
}
|
||
```
|
||
|
||
然后执行:
|
||
|
||
```bash
|
||
sudo nixos-rebuild switch
|
||
```
|
||
|
||
该 module 会将 `amber-pm` 加入 `environment.systemPackages`,并在系统激活时初始化 `/var/lib/apm/apm`。APM 使用 bwrap 与 fuse-overlayfs,module 默认会设置 `kernel.apparmor_restrict_unprivileged_userns = 0`,并启用 `nix-ld` 以提高兼容性。
|
||
|
||
## NUR/nixpkgs 打包复用
|
||
|
||
`nix/package.nix` 支持外部传入 `version` 和 `src`,因此 NUR 或 nixpkgs 中可以复用同一个表达式,不必依赖本地源码路径。
|
||
|
||
NUR 仓库中的示例:
|
||
|
||
```nix
|
||
{ pkgs ? import <nixpkgs> { } }:
|
||
|
||
{
|
||
amber-pm = pkgs.callPackage ./pkgs/amber-pm {
|
||
version = "1.3.4.0";
|
||
src = pkgs.fetchFromGitHub {
|
||
owner = "amber-ce";
|
||
repo = "amber-pm";
|
||
rev = "v1.3.4.0";
|
||
hash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
|
||
};
|
||
};
|
||
}
|
||
```
|
||
|
||
nixpkgs 中的包通常应放在类似路径:
|
||
|
||
```text
|
||
pkgs/by-name/am/amber-pm/package.nix
|
||
```
|
||
|
||
提交 nixpkgs 前建议先满足以下条件:
|
||
|
||
- 使用正式 tag 或 release,不使用本地路径作为源码。
|
||
- 固定 `src.hash`。
|
||
- 本地通过 `nix-build -A amber-pm` 或 `nix build .#amber-pm`。
|
||
- 确认 `apm --version`、`apm --help`、`amber-pm-init-state --help` 正常。
|
||
- `meta` 中填写 license、homepage、platforms 和 maintainers。
|
||
|
||
当前 NixOS 适配仍偏测试用途。建议先发布到 NUR 收集测试反馈,再投 nixpkgs。
|