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

3.0 KiB
Raw Permalink Blame History

NixOS 构建与本地测试

本仓库提供了实验性的 Nix 打包文件,可用于在 NixOS 上本地构建和测试 APM。

本地构建

在仓库根目录执行:

nix-build default.nix

构建成功后会生成 result 符号链接,可先做基础命令测试:

./result/bin/apm --version
./result/bin/apm --help
./result/bin/amber-pm-init-state --help

如果使用 Flake,也可以执行:

nix build .#amber-pm
nix flake check

初始化本地状态目录

APM 需要可写的 /var/lib/apm 目录保存自身运行环境和已安装应用。Nix 包中的文件位于只读 Nix store,因此首次测试前需要初始化状态目录:

sudo ./result/bin/amber-pm-init-state

如需用新构建结果覆盖 APM 自身文件,可执行:

sudo ./result/bin/amber-pm-init-state --force

--force 会原地覆盖 /var/lib/apm/apm 中的 APM 自身文件,不会移动、备份或删除整个 /var/lib/apm/apm 目录,以免影响已经安装在该目录下的 APM 应用。

随后初始化内置 AmberCE 环境:

sudo /var/lib/apm/apm/files/bin/ace-init

完成后可继续测试:

./result/bin/apm debug
./result/bin/apm update
./result/bin/apm search amber-pm-

作为 NixOS Module 使用

可在 NixOS 配置中引入本仓库的 module:

{ 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;
}

然后执行:

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 支持外部传入 versionsrc,因此 NUR 或 nixpkgs 中可以复用同一个表达式,不必依赖本地源码路径。

NUR 仓库中的示例:

{ 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 中的包通常应放在类似路径:

pkgs/by-name/am/amber-pm/package.nix

提交 nixpkgs 前建议先满足以下条件:

  • 使用正式 tag 或 release,不使用本地路径作为源码。
  • 固定 src.hash
  • 本地通过 nix-build -A amber-pmnix build .#amber-pm
  • 确认 apm --versionapm --helpamber-pm-init-state --help 正常。
  • meta 中填写 license、homepage、platforms 和 maintainers。

当前 NixOS 适配仍偏测试用途。建议先发布到 NUR 收集测试反馈,再投 nixpkgs。