Skip to main content

zeroserve-script-create

Create Zeroserve eBPF request-processing scripts in C for `.zeroserve/scripts` using the Zeroserve SDK (`zeroserve.h`). Use when you need to implement request inspection, header/query parsing, metadata templating, custom responses, or reverse-proxy behavior in a script.

来源信息

仓库
losfair/zeroserve
最近来源活动
2026年6月9日 14:02
检测到的 SKILL.md 语言
英语
星标
627
分支
8

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

文件资源管理器
5 个文件

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
zeroserve-script-create
description
Create Zeroserve eBPF request-processing scripts in C for `.zeroserve/scripts` using the Zeroserve SDK (`zeroserve.h`). Use when you need to implement request inspection, header/query parsing, metadata templating, custom responses, or reverse-proxy behavior in a script.
# Zeroserve Script Create ## Overview Zeroserve is a high-performance, scriptable HTTP server that uses `io_uring` and eBPF. It serves a static website from a tarball, and optionally runs eBPF request scripts. It supports HTTP, HTTPS, hot reload, a small templating pass for text responses, and an opt-in reverse proxy from scripts. This skill creates a Zeroserve request script in C from requirements, using the SDK helpers and eBPF constraints. Output is a single `.c` file ready to place under `.zeroserve/scripts/`. It includes JSON helper usage for parsing structured inputs from headers or params. ## Basic zeroserve usage Serve a prebuilt tarball: ```bash zeroserve --addr 0.0.0.0:8080 site.tar ``` Package a directory into a tarball and serve it: ```bash # Create a tarball from the current directory zeroserve --pack . > site.tar # Serve it zeroserve --addr 0.0.0.0:8080 site.tar ``` Packaging a site: Zeroserve expects a tarball whose root corresponds to the site root. Use `--pack` to build one from a directory: ```bash zeroserve --pack ./public > site.tar ``` Packaging notes: - All regular files under the directory are added to the tarball. - Request scripts live under `.zeroserve/scripts/`. - Any `.c` file in `.zeroserve/scripts/` is compiled to an `.o` eBPF object. The resulting `.o` is included in the tarball and the `.c` is omitted. - If a `.c` and `.o` share the same name, the `.o` is skipped in favor of recompiling. - Script compilation requires `clang` and `llc` on your `PATH`. If you want the SDK header without packing: ```bash zeroserve --dump-sdk > zeroserve.h ``` ## Workflow 1. Gather requirements - Trigger: path, method, header, query param, peer, or scheme. - Action: log, mutate URI/headers, set metadata, respond, or reverse proxy. - Short-circuit: confirm if the script should terminate the chain with `zs_respond` or `zs_reverse_proxy`. 2. Choose a base - Start from `assets/script_template.c` for a new script. - Keep the entry signature and `ZS_ENTRY` section if editing an existing script. 3. Implement logic - Read request data with `zs_req_*` helpers into fixed buffers; clamp lengths before use. - Use `ZS_STR("literal")` for helper calls needing `(ptr, len)` for string literals. - For JSON parsing, use `zs_json_parse`/`zs_json_get`/`zs_json_array_get` and `zs_json_read_*`, then free handles with `zs_object_free` (handle table is limited). - To parse the request body as JSON, use `zs_req_body_json()` which returns a handle (-1 on empty body, body > 256KB, or invalid JSON). The body is read lazily and cached. - To build JSON dynamically, use `zs_json_new_object`/`zs_json_new_array` and modify with `zs_json_set`, `zs_json_array_push`, `zs_json_set_string`, `zs_json_set_i64`, etc. - To send a JSON response, use `zs_json_respond(status, handle)` which auto-sets Content-Type. - To parse a static JSON file from the tarball, call `zs_load_static_json(path, path_len)` and treat the returned handle like any other JSON handle. - To read tarball entry metadata as JSON, call `zs_load_file_metadata(path, path_len)` and access `size`, `etag`, and `mtime`. - For response headers, set metadata keys `zs.response.header.<name>`. - To rate limit, use `zs_rate_limit(key, key_len, per_second, per_minute, per_hour)`; it returns a result code indicating allowed or which limit was exceeded. - Call `zs_respond`, `zs_json_respond`, or `zs_reverse_proxy` to stop later scripts. 4. Validate eBPF constraints - Avoid unbounded loops and recursion. - Keep stack usage small (BPF stack is limited). 5. Deliver result - Provide the `.c` file and note it should live under `.zeroserve/scripts/`. - Remind that `zeroserve --pack` compiles `.c` to `.o` automatically. - If needed, dump the SDK header with `zeroserve --dump-sdk` to inspect the full API. ## References - `references/sdk_api.md` for the SDK helper list and notes. - `references/scripting_behavior.md` for execution order, short-circuit rules, and packaging. - `references/examples.md` for common patterns (logging, health response, reverse proxy, templating). - `assets/script_template.c` for a starter skeleton.
在 GitHub 查看