1 个不稳定版本
0.1.1 | 2024 年 7 月 16 日 |
---|---|
0.1.0 |
|
#379 in 文件系统
每月 236 次下载
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。
该项目通过 NGI0 Entrust Fund 资助,该基金由 NLnet 建立,并由欧盟委员会 Next Generation Internet 计划资助,在 DG Communications Networks、Content and Technology 的指导下,根据协议号 Nº 101069594。
依赖项
~5–14MB
~162K SLoC