PiROS services
Services are root-managed daemons (aquatic-authors theme). Manage them from the console as root:
admin service list # what exists + running/stopped
admin service create <name> # mint the service identity (one-time; instant now)
admin service start <name> # run it
admin service stop <name> # stop it
admin service logs <name> [file] # read its logs (from services/<name>/logs)
Each service runs as its own no-login user, with its store at /data/<name>/ (root can browse it via the god-view: ls /data/<name>/files, cat /data/<name>/...). By default charon auto-starts on boot; the others you start explicitly.
charon — SSH (port 2222)
Kernel-hosted SSH daemon. Password and publickey auth; answers keepalives so idle sessions hold.
- Connect:
ssh -p 2222 <user>@<ip>(add-o ServerAliveInterval=15for long idle sessions). - Authorized keys: per-user
files/authorized_keys, plus the globalmnt/authorized_keys. - It's kernel-hosted, so
admin service start/stop charontoggles it (no ring-3 process). - Concurrent sessions. The listener hands each accepted connection to its own worker task and
returns to accept() immediately, so several users hold sessions at once (there's no head-of-line blocking — a live session no longer stalls the next login). Concurrency is bounded by the scheduler task table (MAX_TASKS = 8, so ~3–5 sessions alongside the other services); when it's full a new connection is refused cleanly with a one-line hint (too many concurrent sessions, try again).
tintin — HTTP web server (port 80)
Static files + dynamic *.psh pages. Serves from the tintin user's store.
| what | path |
|---|---|
| Doc root (default) | /data/tintin/files/default/www/ |
| Index file | index.html |
| Config file | /data/tintin/files/server.conf |
| Logs | /data/tintin/logs/ |
server.conf keys (key = value, # comments):
root = default/www # doc root, RELATIVE to /data/tintin/files/
index = index.html # directory index
port = 80
Fallbacks if there's no server.conf: default/config/default.conf, then built-in (root=default/www, index=index.html, port=80). Any *.psh file under the root is run through the psh interpreter and its output is the response body (PHP-style: $_GET/$_POST, qq_query for SQL).
To publish a page: put HTML/psh under /data/tintin/files/default/www/ (e.g. edit /data/tintin/files/default/www/index.html with prano), then admin service start tintin.
nemo — FTP server
File transfer in and out (this is how you get files onto the box — see below). PASV preferred, active PORT supported; STOR (upload) and RETR (download) both work. Serves each user's files/.
- Config:
/data/nemo/files/server.conf(user = …,pass = …).
queequeg — SQL server (Queequeg)
The database engine. Clients:
qq-cli— interactive SQL shell.qq-cmd— admin: users,createdb,dump.qq-query— run one statement (used bypsh'sqq_query).
Getting files onto the box
There is no scp server yet — PiROS's scp/argo owner:name are inter-user publish/fetch, not network transfer, and charon serves only a shell channel. So mac scp file pros:… will not work. Two ways in:
- FTP via nemo (recommended for binaries like a package tar):
admin service start nemo, then
from your Mac upload with an FTP client / curl -T. The file lands in that user's files/.
- Type / edit small text with
pranodirectly on the box.
A native scp/sftp subsystem in charon is a future item.