Files
2026-06-07 20:32:46 +08:00

124 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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-overlayfsmodule 默认会设置 `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。