orama/os/scripts/build.sh
anonpenguin23 abcc23c4f3 refactor(monorepo): restructure repo with core, website, vault, os packages
- add monorepo Makefile delegating to sub-projects
- update CI workflows, GoReleaser, gitignore for new structure
- revise README, CONTRIBUTING.md for monorepo overview
- bump Go to 1.24
2026-03-26 18:21:55 +02:00

126 lines
4.0 KiB
Bash
Executable File

#!/bin/bash
# OramaOS full image build script.
#
# Prerequisites:
# - Go 1.23+ installed
# - Buildroot downloaded (set BUILDROOT_SRC or it clones automatically)
# - Host tools: genimage, qemu-img (optional), veritysetup (optional)
#
# Usage:
# ORAMA_VERSION=1.0.0 ARCH=amd64 ./scripts/build.sh
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
VERSION="${ORAMA_VERSION:-dev}"
ARCH="${ARCH:-amd64}"
OUTPUT_DIR="$ROOT_DIR/output"
BUILDROOT_DIR="$ROOT_DIR/buildroot"
BUILDROOT_SRC="${BUILDROOT_SRC:-$ROOT_DIR/.buildroot}"
BUILDROOT_VERSION="2024.02.9"
mkdir -p "$OUTPUT_DIR"
echo "=== OramaOS Build ==="
echo "Version: $VERSION"
echo "Arch: $ARCH"
echo "Output: $OUTPUT_DIR"
echo ""
# --- Step 1: Cross-compile orama-agent ---
echo "--- Step 1: Building orama-agent ---"
cd "$ROOT_DIR/agent"
GOOS=linux GOARCH="$ARCH" CGO_ENABLED=0 \
go build -ldflags "-s -w -X main.version=$VERSION" \
-o "$OUTPUT_DIR/orama-agent" ./cmd/orama-agent/
echo "Built: orama-agent"
# --- Step 2: Collect service binaries ---
echo "--- Step 2: Collecting service binaries ---"
BINS_DIR="$OUTPUT_DIR/orama-bins"
mkdir -p "$BINS_DIR"
# Copy the agent
cp "$OUTPUT_DIR/orama-agent" "$BINS_DIR/orama-agent"
# If the main orama project has been built, collect its binaries
ORAMA_BUILD="${ORAMA_BUILD_DIR:-$ROOT_DIR/../orama}"
if [ -d "$ORAMA_BUILD/build" ]; then
echo "Copying service binaries from $ORAMA_BUILD/build/"
for bin in rqlited olric-server ipfs ipfs-cluster-service coredns gateway; do
src="$ORAMA_BUILD/build/$bin"
if [ -f "$src" ]; then
cp "$src" "$BINS_DIR/$bin"
echo " Copied: $bin"
else
echo " WARNING: $bin not found in $ORAMA_BUILD/build/"
fi
done
else
echo "WARNING: orama build dir not found at $ORAMA_BUILD/build/"
echo " Service binaries must be placed in $BINS_DIR/ manually."
fi
# --- Step 3: Download Buildroot if needed ---
if [ ! -d "$BUILDROOT_SRC" ]; then
echo "--- Step 3: Downloading Buildroot $BUILDROOT_VERSION ---"
TARBALL="buildroot-$BUILDROOT_VERSION.tar.xz"
wget -q "https://buildroot.org/downloads/$TARBALL" -O "/tmp/$TARBALL"
mkdir -p "$BUILDROOT_SRC"
tar xf "/tmp/$TARBALL" -C "$BUILDROOT_SRC" --strip-components=1
rm "/tmp/$TARBALL"
else
echo "--- Step 3: Using existing Buildroot at $BUILDROOT_SRC ---"
fi
# --- Step 4: Configure and build with Buildroot ---
echo "--- Step 4: Running Buildroot ---"
BUILD_OUTPUT="$OUTPUT_DIR/buildroot-build"
mkdir -p "$BUILD_OUTPUT"
# Copy our board and config files into the Buildroot tree
cp -r "$BUILDROOT_DIR/board" "$BUILDROOT_SRC/"
cp -r "$BUILDROOT_DIR/configs" "$BUILDROOT_SRC/"
# Place binaries where post_build.sh expects them
mkdir -p "$BUILD_OUTPUT/images/orama-bins"
cp "$BINS_DIR"/* "$BUILD_OUTPUT/images/orama-bins/" 2>/dev/null || true
# Set version for post_build.sh
export ORAMA_VERSION="$VERSION"
export BINARIES_DIR="$BUILD_OUTPUT/images"
# Run Buildroot
cd "$BUILDROOT_SRC"
make O="$BUILD_OUTPUT" orama_defconfig
make O="$BUILD_OUTPUT" -j"$(nproc)"
# --- Step 5: Copy final artifacts ---
echo "--- Step 5: Copying artifacts ---"
FINAL_PREFIX="orama-os-${VERSION}-${ARCH}"
if [ -f "$BUILD_OUTPUT/images/orama-os.img" ]; then
cp "$BUILD_OUTPUT/images/orama-os.img" "$OUTPUT_DIR/${FINAL_PREFIX}.img"
echo "Raw image: $OUTPUT_DIR/${FINAL_PREFIX}.img"
fi
if [ -f "$BUILD_OUTPUT/images/orama-os.qcow2" ]; then
cp "$BUILD_OUTPUT/images/orama-os.qcow2" "$OUTPUT_DIR/${FINAL_PREFIX}.qcow2"
echo "qcow2: $OUTPUT_DIR/${FINAL_PREFIX}.qcow2"
fi
if [ -f "$BUILD_OUTPUT/images/rootfs.roothash" ]; then
cp "$BUILD_OUTPUT/images/rootfs.roothash" "$OUTPUT_DIR/${FINAL_PREFIX}.roothash"
echo "Root hash: $OUTPUT_DIR/${FINAL_PREFIX}.roothash"
fi
# Generate SHA256 checksums
cd "$OUTPUT_DIR"
sha256sum "${FINAL_PREFIX}"* > "${FINAL_PREFIX}.sha256"
echo "Checksums: $OUTPUT_DIR/${FINAL_PREFIX}.sha256"
echo ""
echo "=== OramaOS Build Complete ==="
echo "Artifacts in $OUTPUT_DIR/"