nectar/README.md

120 lines
5.4 KiB
Markdown
Raw Normal View History

# Kinode
Kinode OS is a decentralized OS, built for crypto.
This repo contains the core runtime and processes.
Most developers need not build the runtime.
Instead, check out the [Kinode book](https://book.kinode.org/), and in particular the ["My First App" tutorial](https://book.kinode.org/my_first_app/chapter_1.html).
2024-01-30 07:42:28 +03:00
If you want to get on the network, you can download a binary, rather than building it yourself, from [the releases page](https://github.com/kinode-dao/kinode/tags).
Then follow the instructions to [install it](https://book.kinode.org/install.html) and [join the network](https://book.kinode.org/login.html).
If you have questions, join the [Kinode discord](https://discord.gg/TCgdca5Bjt) and drop us a question!
2023-10-02 23:02:53 +03:00
## Setup
### Building components
```bash
# Clone the repo.
2024-01-30 07:42:28 +03:00
git clone git@github.com:kinode-dao/kinode.git
2023-10-02 23:02:53 +03:00
2023-11-30 13:44:21 +03:00
# Configure dependency retrieval from GitHub
mkdir .cargo
echo "net.git-fetch-with-cli = true" > .cargo/config
2023-10-17 00:53:24 +03:00
2024-01-08 23:02:14 +03:00
# Get some stuff so we can build Wasm.
2023-10-02 23:02:53 +03:00
2024-01-16 01:51:07 +03:00
cd kinode
2023-10-02 23:02:53 +03:00
cargo install wasm-tools
rustup install nightly
rustup target add wasm32-wasi
rustup target add wasm32-wasi --toolchain nightly
cargo install cargo-wasi
2023-10-02 23:02:53 +03:00
# Build the runtime, along with a number of booted-at-startup WASM modules including terminal and key_value
# OPTIONAL: --release flag
2023-10-03 21:25:46 +03:00
cargo +nightly build --release
2023-10-02 23:02:53 +03:00
```
### Boot
Get an eth-sepolia-rpc API key and pass that as an argument. You can get one for free at `alchemy.com`.
2023-10-02 23:02:53 +03:00
2023-12-05 21:37:33 +03:00
Make sure not to use the same home directory for two nodes at once! You can use any name for the home directory: here we just use `home`. The `--` here separates cargo arguments from binary arguments.
2023-12-11 19:06:36 +03:00
TODO: document feature flags `--simulation-mode`
2023-10-02 23:02:53 +03:00
```bash
cargo +nightly run --release -- home --rpc wss://eth-sepolia.g.alchemy.com/v2/<your-api-key> --tesnet
2023-10-02 23:02:53 +03:00
```
On boot you will be prompted to navigate to `localhost:8080`. Make sure your ETH wallet is connected to the Sepolia test network. Login should be straightforward, just submit the transactions and follow the flow. If you want to register a new ID you will either need [Sepolia testnet tokens](https://www.infura.io/faucet/sepolia) or an invite code.
2023-10-02 23:02:53 +03:00
### Distro and Runtime processes
2023-10-02 23:02:53 +03:00
The base OS install comes with certain runtime modules. These are interacted with in the same way as userspace processes, but are deeply ingrained to the system and the APIs they present at their Process IDs are assumed to be available by userspace processes. All of these are identified in the `distro:sys` package.
2024-01-17 09:18:33 +03:00
This distribution of the OS also comes with userspace packages pre-installed. Some of these packages are intimately tied to the runtime: `terminal`, `homepage`, and `kns_indexer`. Modifying, removing or replacing the distro userspace packages should only be done in highly specialized use-cases.
The runtime distro processes are:
- `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`
The distro userspace packages are:
- `app_store:sys`
- `chess:sys`
- `homepage:sys`
2024-01-17 09:18:33 +03:00
- `kns_indexer:sys`
- `terminal:sys`
- `tester:sys` (only installed in if compiled with feature flag `simulation-mode`)
The `sys` publisher is not a real node ID, but it's also not a special case value. Packages, whether runtime or userspace, installed from disk when a node bootstraps do not have their package ID or publisher node ID validated. Packages installed (not injected locally, as is done during development) after a node has booted will have their publisher field validated.
### Terminal syntax
2023-10-02 23:02:53 +03:00
- CTRL+C or CTRL+D to gracefully shutdown node
- CTRL+V to toggle through verbose modes (0-3, 0 is default and lowest verbosity)
2023-10-02 23:02:53 +03:00
- CTRL+J to toggle debug mode
- CTRL+S to step through events in debug mode
- CTRL+L to toggle logging mode, which writes all terminal output to the `.terminal_log` file. Off by default, this will write all events and verbose prints with timestamps.
2023-10-02 23:02:53 +03:00
- CTRL+A to jump to beginning of input
- CTRL+E to jump to end of input
- UpArrow/DownArrow or CTRL+P/CTRL+N to move up and down through command history
- CTRL+R to search history, CTRL+R again to toggle through search results, CTRL+G to cancel search
2024-01-30 08:29:17 +03:00
- `m <address> <json>`: send an inter-process message. <address> is formatted as <node>@<process_id>. <process_id> is formatted as <process_name>:<package_name>:<publisher_node>. JSON containing spaces must be wrapped in single-quotes (`''`).
2024-01-22 20:53:32 +03:00
- Example: `m our@net:distro:sys diagnostics`
- `our` will always be interpolated by the system as your node's name
2024-01-22 20:53:32 +03:00
- `hi <name> <string>`: send a text message to another node's command line.
- Example: `hi ben.os hello world`
- `top <process_id>`: display kernel debugging info about a process. Leave the process ID blank to display info about all processes and get the total number of running processes.
- Example: `top net:distro:sys`
- Example: `top`
- `cat <vfs-file-path>`: print the contents of a file in the terminal
- Example: `cat /terminal:sys/pkg/scripts.json`
- `echo <text>`: print `text` to the terminal
- Example: `echo foo`
2023-10-02 23:02:53 +03:00
### Terminal example usage
2023-10-02 23:02:53 +03:00
2023-11-01 23:37:31 +03:00
Download and install an app:
```
2024-01-30 08:29:17 +03:00
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>"}}'
2023-11-01 23:37:31 +03:00
```