sinelaw/fresh · error

[ERROR] \n

Error message

[ERROR] %s\n

What it means

log_error in scripts/install.sh prints a red '[ERROR] <message>' line to stderr and then exits the installer with status 1. It is reserved for fatal top-level installer paths, since 'exit' inside command substitution would only kill a subshell — helpers capturing output return a status instead.

Solutions

  1. Read the [ERROR] line on stderr — it names the fatal check that failed.
  2. Install missing prerequisites (curl or wget) and re-run the installer.
  3. Confirm your OS/architecture is a supported release target (uname -m).
  4. Fix permissions or choose a writable install prefix, or run with appropriate privileges.

Example fix

// minimal container missing curl
// before: ./install.sh -> [ERROR] curl is required
// after
apt-get update && apt-get install -y curl && ./install.sh
Defensive patterns

Strategy: validation

Validate before calling

for cmd in curl wget uname tar; do command -v "$cmd" >/dev/null 2>&1 || { echo "missing: $cmd"; exit 1; }; done
case "$(uname -m)" in x86_64|aarch64) ;; *) echo "unsupported arch"; exit 1;; esac

Try / catch

if ! ./install.sh; then echo "installer exited $? — see [ERROR] line above"; fi

Prevention

When it happens

Trigger: Any fatal check in install.sh calling log_error: unsupported OS/architecture, missing required commands (curl/wget/uname), failed download of the release binary, or inability to write to the install prefix.

Common situations: Running the installer on an unsupported platform (e.g. unknown architecture or non-glibc Linux); no network access to the release host; curl/wget absent on a minimal container; insufficient permissions in the target install directory.

Related errors


AI-assisted analysis of sinelaw/fresh@67894ca546 (2026-09-13). Data as JSON: /api/errors/100eb55053a86c59. Report an issue: GitHub.

Appendix: source

Thrown at scripts/install.sh:94

#   END CONFIGURATION
# ==============================================================================

# --- Colors and Helpers ---
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Helpers below return values by echoing them, so a diagnostic left on stdout
# would be captured as if it were the value.
log_info()    { printf "${BLUE}[INFO]${NC} %s\n" "$1" >&2; }
log_success() { printf "${GREEN}[SUCCESS]${NC} %s\n" "$1" >&2; }
log_warn()    { printf "${YELLOW}[WARN]${NC} %s\n" "$1" >&2; }

# `exit` inside $(...) ends only that subshell, so log_error is for top-level
# paths; helpers whose output is captured return a status instead.
log_error()   { printf "${RED}[ERROR]${NC} %s\n" "$1" >&2; exit 1; }

check_cmd() { command -v "$1" >/dev/null 2>&1; }

usage() {
    cat <<EOF
Fresh Editor installer

Usage: install.sh [--method=METHOD] [--no-desktop-integration]

Methods:
  auto      (default) universal build on Linux, Homebrew on macOS, Nix on NixOS
  tarball   universal static build under ~/.local — self-updating, no root
  deb       Debian/Ubuntu .deb from the latest release (needs root)
  rpm       Fedora/RHEL/openSUSE .rpm from the latest release (needs root)
  aur       Arch Linux, via the AUR
  brew      Homebrew
  nix       Nix profile
  cargo     cargo install / cargo binstall

View on GitHub (pinned to 67894ca546)