#nix #daemon #store #progress #api-bindings #talking #traits

nix-daemon

一个用于直接与 Nix 守护进程通信的库

1 个不稳定版本

0.1.1 2024 年 7 月 16 日
0.1.0 2024 年 7 月 14 日

#379 in 文件系统

Download history 203/week @ 2024-07-11 32/week @ 2024-07-18 1/week @ 2024-07-25

每月 236 次下载

EUPL-1.2

145KB
3K SLoC

nix-daemon

一个用于直接与 Nix 守护进程通信的库。

客户端使用

要连接到本地 nix-daemon,请使用 nix::DaemonStore(实现了 Store 特性)

use nix_daemon::{Store, Progress, nix::DaemonStore};

let mut store = DaemonStore::builder()
    .connect_unix("/nix/var/nix/daemon-socket/socket")
    .await?;
let is_valid_path = store.is_valid_path("/nix/store/...").result().await?;

服务器使用

如果您想编写自己的与 nix-daemon 兼容的存储库,并将其暴露给现有工具(如 nix-build),则可以自己实现 Store 特性,并使用 nix::DaemonProtocolAdapter

use tokio::net::UnixListener;
use nix_daemon::nix::{DaemonStore, DaemonProtocolAdapter};

// Accept a connection.
let listener = UnixListener::bind("/tmp/mystore.sock")?;
let (conn, _addr) = listener.accept().await?;

// This will just use `DaemonStore` to proxy to the normal daemon, but you can
// pass your own `Store` implementation here instead.
let mut store = DaemonStore::builder()
    .connect_unix("/nix/var/nix/daemon-socket/socket")
    .await?;

// Run the adapter!
let (cr, cw) = conn.into_split();
let mut adapter = DaemonProtocolAdapter::builder(&mut store)
    .adopt(cr, cw)
    .await?;

请参见 nix-supervisor 以获取更复杂的示例。

限制

  • 并非所有操作码都已实现(尚未)。这部分原因在于,为了测试它们,我们需要找到它们实际使用的位置。
  • 目前仅支持 Nix 2.15+ 和 Lix,但 2.3 的支持已列入待办事项列表。 (并且添加起来相对容易。)

贡献

请参阅 主要 README


NLNet Foundation logo NGI Zero Entrust logo

该项目通过 NGI0 Entrust Fund 资助,该基金由 NLnet 建立,并由欧盟委员会 Next Generation Internet 计划资助,在 DG Communications Networks、Content and Technology 的指导下,根据协议号 Nº 101069594。

依赖项

~5–14MB
~162K SLoC