Release archives, the container image, building from source, and running core as a service.
--embedded-storage).Tagged releases are built by goreleaser for linux and darwin, amd64 and arm64.
Archives are named core_<version>_<Os>_<Arch>.tar.gz and contain the eru-core binary
plus LICENSE and README.md:
# Linux amd64, a specific tag
curl -fsSL -o core.tar.gz \
https://github.com/projecteru2/core/releases/download/v0.1.0/core_0.1.0_Linux_x86_64.tar.gz
tar -xzf core.tar.gz
install -m 0755 eru-core /usr/bin/
Every release also publishes unversioned aliases, so releases/latest/download resolves without
knowing the tag:
curl -fsSL -o core.tar.gz \
https://github.com/projecteru2/core/releases/latest/download/core_Linux_x86_64.tar.gz
| Artifact | Contents |
|---|---|
core_<ver>_Linux_x86_64.tar.gz, core_<ver>_Linux_arm64.tar.gz |
stripped eru-core for Linux |
core_<ver>_Darwin_x86_64.tar.gz, core_<ver>_Darwin_arm64.tar.gz |
stripped eru-core for macOS |
core_<ver>_Linux_x86_64_debug.tar.gz, core_<ver>_Linux_arm64_debug.tar.gz |
unstripped eru-core.dbg, Linux only |
core_<Os>_<Arch>.tar.gz |
unversioned alias of the release build |
checksums.txt |
SHA-256 of every archive |
Images are published on every master push and every v* tag, to both GHCR and Docker Hub,
for linux/amd64 and linux/arm64:
docker pull ghcr.io/projecteru2/core:v0.1.0 # or projecteru2/core:v0.1.0
The image is Alpine-based, ships the binary at /usr/bin/eru-core and a copy of the sample
config at /etc/eru/core.yaml.sample. Mount your own config directory over /etc/eru:
docker run -d \
--name eru_core_$HOSTNAME \
--net host \
--restart always \
-v <HOST_CONFIG_DIR_PATH>:/etc/eru \
ghcr.io/projecteru2/core \
/usr/bin/eru-core
--net host matters: core registers its own outbound address for service discovery, and it needs
to reach every node’s engine endpoint.
git clone https://github.com/projecteru2/core.git
cd core
make build
This produces eru-core in the repo root, built with CGO_ENABLED=0 and the version, revision
and build time baked in through ldflags. KEEP_SYMBOL=1 make build keeps the symbol table.
To regenerate the gRPC bindings after editing rpc/gen/core.proto you also need protoc on
PATH; make grpc installs the pinned protoc-gen-go and protoc-gen-go-grpc into bin/.
Core takes two flags of its own, plus what urfave/cli adds:
| Flag | Default | Meaning |
|---|---|---|
--config |
/etc/eru/core.yaml |
config file path, in YAML. Also read from ERU_CONFIG_PATH |
--embedded-storage |
off | start a single-member in-process etcd under $TMPDIR/eru-core-etcd and use it as the store |
--version |
print version, git hash, build time, Go version and OS/arch |
eru-core --config /etc/eru/core.yaml
export ERU_CONFIG_PATH=/path/to/core.yaml
eru-core
--embedded-storage is for development and tests only — the data lives in a temp directory and
no other process can reach it. The rest of the config is still read normally; see
Configuration.
The repo ships eru-core.service,
which runs /usr/bin/eru-core --config /etc/eru/core.yaml:
install -m 0644 eru-core.service /usr/lib/systemd/system/
install -m 0644 core.yaml.sample /etc/eru/core.yaml # then edit it
systemctl daemon-reload
systemctl enable --now eru-core
The unit raises LimitNOFILE/LimitNPROC to 10485760, allows core dumps
(LimitCORE=infinity, GOTRACEBACK=crash) and gives a 1200s stop timeout so in-flight
streaming tasks can drain — core stops its gRPC server gracefully and waits for running tasks
before exiting.