1 个不稳定版本

0.5.0 2024年1月17日

#166#os

Apache-2.0

2MB
12K SLoC

设置

构建组件

# Clone the repo.

git clone [email protected]:uqbar-dao/kinode.git

# Configure dependency retrieval from GitHub
mkdir .cargo
echo "net.git-fetch-with-cli = true" > .cargo/config

# Get some stuff so we can build Wasm.

cd kinode
cargo install wasm-tools
rustup install nightly
rustup target add wasm32-wasi
rustup target add wasm32-wasi --toolchain nightly
cargo install cargo-wasi

# Build the runtime, along with a number of booted-at-startup WASM modules including terminal and key_value
# OPTIONAL: --release flag

cargo +nightly build --release

启动

获取 eth-sepolia-rpc API 密钥并将其作为参数传递。您可以在 alchemy.com 上免费获取。

确保不要同时为两个节点使用相同的家目录!您可以为家目录使用任何名称:这里我们只是使用 home。这里的 -- 用于分隔 cargo 参数和二进制参数。

TODO:文档功能标志 --simulation-mode

cargo +nightly run --release -- home --rpc wss://eth-sepolia.g.alchemy.com/v2/<your-api-key>

启动时,您将被提示导航到 localhost:8080。确保您的 ETH 钱包连接到 Sepolia 测试网络。登录应该是直接的,只需提交交易并遵循流程即可。如果您想注册新 ID,则需要 Sepolia 测试网代币 或邀请码。

发行版和运行时进程

基础操作系统安装包含某些运行时模块。这些模块以与用户空间进程相同的方式进行交互,但它们深深植根于系统中,并且它们在进程 ID 处提供的 API 假设由用户空间进程可用。所有这些都在 distro:sys 包中标识。

此操作系统发行版还预装了用户空间软件包。其中一些软件包与运行时紧密相关:terminalhomepagekns_indexer。修改、删除或替换发行版用户空间软件包应仅在高专业化的用例中进行。

运行时发行版进程包括

  • eth:distro:sys
  • http_client:distro:sys
  • http_server:distro:sys
  • kernel:distro:sys
  • kv:distro:sys
  • net:distro:sys
  • state:distro:sys
  • terminal:distro:sys
  • timer:distro:sys
  • sqlite:distro:sys
  • vfs:distro:sys

发行版用户空间软件包包括

  • app_store:sys
  • chess:sys
  • homepage:sys
  • kns_indexer:sys
  • terminal:sys
  • tester:sys(仅在编译时带有功能标志 simulation-mode 时安装)

系统发布者sys不是真正的节点ID,但也不是特殊值。在节点引导时从磁盘安装的软件包(无论是运行时还是用户空间),都不会验证其软件包ID或发布者节点ID。节点引导后安装的软件包将验证其发布者字段。

终端语法

  • 按CTRL+C或CTRL+D可优雅地关闭节点

  • 按CTRL+V可切换到详细模式(0-3,0为默认和最低详细程度)

  • 按CTRL+J可切换到调试模式

  • 按CTRL+S可在调试模式下逐个事件进行操作

  • 按CTRL+L可切换到日志模式,将所有终端输出写入到.terminal_log文件。默认情况下关闭,这将写入所有事件和详细打印,并带有时间戳。

  • 按CTRL+A可跳转到输入的开始位置

  • 按CTRL+E可跳转到输入的结束位置

  • 向上箭头/向下箭头或CTRL+P/CTRL+N可移动到命令历史记录的上下文

  • 按CTRL+R可搜索历史记录,按CTRL+R再次可切换搜索结果,按CTRL+G可取消搜索

  • /message <address> <json>:发送一个进程间消息。

    格式为@<process_id>。<process_id>的格式为<process_name>:<package_name>:<publisher_node>。

    • 示例:/message our@net:distro:sys diagnostics
    • our将由系统解释为您的节点名称
    • 还可以使用/m执行相同的命令:/m our@net:distro:sys diagnostics
  • /app <address>:将终端设置为所有消息都发送到特定应用的模式。要清除此选择,请使用/app clear或简单地使用/app。这对于具有命令行界面的应用非常有用。

    • 示例:/app our@net:distro:sys,然后/m diagnostics
    • 还可以使用/a执行相同的命令:/a our@net:distro:sys
    • 发送多个消息的示例
      • /a ben.os@net:distro:sys
      • /m hey there
      • /m how are you?
      • /a(退出应用模式)
  • /hi <name> <string>:向另一个节点的命令行发送文本消息。

    • 示例:/hi ben.os hello world
  • /top <process_id>:显示关于进程的内核调试信息。留空进程ID以显示有关所有进程的信息并获取正在运行的进程总数。

    • 示例:/top net:distro:sys
    • 示例:/top

终端示例用法

下载和安装应用

/m our@main:app_store:sys {"Download": {"package": {"package_name": "<pkg>", "publisher_node": "<node>"}, "install_from": "<node>"}}
/m our@main:app_store:sys {"Install": {"package_name": "<pkg>", "publisher_node": "<node>"}}

依赖项

~116MB
~2M SLoC