mint-linux: prebuilt x86_64 glibc binary + one-click installer
This commit is contained in:
@@ -0,0 +1,48 @@
|
|||||||
|
# mint — Linux (x86_64)
|
||||||
|
|
||||||
|
Prebuilt Linux binaries for [trumank/mint](https://github.com/trumank/mint) (x86_64, glibc),
|
||||||
|
plus a one-click installer that downloads, verifies (sha256) and installs `mint`.
|
||||||
|
|
||||||
|
## One-click install
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://gitea.mygoband.com/carrydela/mint-linux/raw/branch/main/install.sh | bash
|
||||||
|
```
|
||||||
|
|
||||||
|
Installs to `~/.local/bin` (or `/usr/local/bin` as root), then runs a headless smoke test.
|
||||||
|
|
||||||
|
## Manual install
|
||||||
|
|
||||||
|
Grab the tarball from the [latest release](https://gitea.mygoband.com/carrydela/mint-linux/releases/latest),
|
||||||
|
check `sha256sum`, extract, put `mint` on your PATH:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -fLO https://gitea.mygoband.com/carrydela/mint-linux/releases/download/v0.1.0/mint-linux-x86_64.tar.gz
|
||||||
|
sha256sum -c mint-linux-x86_64.tar.gz.sha256 # download the .sha256 alongside
|
||||||
|
tar -xzf mint-linux-x86_64.tar.gz
|
||||||
|
install -m 0755 mint /usr/local/bin/
|
||||||
|
mint --version
|
||||||
|
```
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- x86_64 Linux, glibc
|
||||||
|
- GUI runtime libs for the GUI (headless `--version` works without them):
|
||||||
|
- Debian/Ubuntu: `libxcb1 libxkbcommon0 libgl1 libwayland-client0 libx11-6`
|
||||||
|
- Fedora/RHEL: `libxcb libxkbcommon mesa-libGL wayland-client libX11`
|
||||||
|
|
||||||
|
## Build notes
|
||||||
|
|
||||||
|
Built from `trumank/mint` main (v0.2.10) with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cargo +nightly-2026-04-24 build --package mint --no-default-features --release
|
||||||
|
```
|
||||||
|
|
||||||
|
The default `hook` feature is a Windows game-injection cdylib (`x86_64-pc-windows-gnu`) and is
|
||||||
|
intentionally excluded on Linux. Binary is stripped.
|
||||||
|
|
||||||
|
## Files
|
||||||
|
|
||||||
|
- `install.sh` — one-click installer (see above)
|
||||||
|
- `mint-linux-x86_64.tar.gz` — release asset (published on releases, not in the repo)
|
||||||
+117
@@ -0,0 +1,117 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# mint — one-click Linux (x86_64, glibc) installer
|
||||||
|
#
|
||||||
|
# Steps:
|
||||||
|
# 1. Sanity-checks the host (arch, glibc, required GUI runtime libs).
|
||||||
|
# 2. Downloads the prebuilt tarball + sha256 from the public Gitea release.
|
||||||
|
# 3. Verifies the checksum, extracts, installs `mint` onto $PATH.
|
||||||
|
# 4. Runs a headless smoke test.
|
||||||
|
#
|
||||||
|
# Quick start:
|
||||||
|
# curl -fsSL https://gitea.mygoband.com/carrydela/mint-linux/raw/branch/main/install.sh | bash
|
||||||
|
#
|
||||||
|
# Overridable env:
|
||||||
|
# MINT_GITEA gitea base url (default: https://gitea.mygoband.com)
|
||||||
|
# MINT_REPO owner/repo (default: carrydela/mint-linux)
|
||||||
|
# MINT_TAG release tag (default: latest)
|
||||||
|
# MINT_INSTALL_DIR where to install (default: /usr/local/bin, else ~/.local/bin)
|
||||||
|
#
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
GITEA="${MINT_GITEA:-https://gitea.mygoband.com}"
|
||||||
|
REPO="${MINT_REPO:-carrydela/mint-linux}"
|
||||||
|
TAG="${MINT_TAG:-latest}"
|
||||||
|
NAME="mint-linux-x86_64" # asset stem; real file is ${NAME}.tar.gz
|
||||||
|
BIN="mint"
|
||||||
|
LOGO=$'\033[1;36mmint\033[0m'
|
||||||
|
|
||||||
|
log() { printf '%s %b\n' "$LOGO" "$*"; }
|
||||||
|
die() { printf 'error: %s\n' "$*" >&2; exit 1; }
|
||||||
|
|
||||||
|
# --- 1. host checks ---------------------------------------------------------
|
||||||
|
[ "$(uname -s)" = "Linux" ] || die "this installer is for Linux (host is $(uname -s))"
|
||||||
|
ARCH="$(uname -m)"
|
||||||
|
[ "$ARCH" = "x86_64" ] || die "only x86_64 is currently shipped (host is $ARCH)"
|
||||||
|
|
||||||
|
need() { command -v "$1" >/dev/null 2>&1 || die "missing required tool: $1 (install it first)"; }
|
||||||
|
need curl; need tar; need sha256sum
|
||||||
|
|
||||||
|
if ! ldd --version >/dev/null 2>&1; then
|
||||||
|
echo "warning: ldd/glibc not detected — this build is glibc-linked and will not run" >&2
|
||||||
|
echo " on musl/Alpine. Use a musl-static build for those hosts." >&2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# GUI runtime libs (loaded at runtime by egui/winit). Warn if absent.
|
||||||
|
missing=()
|
||||||
|
for probe in libxcb.so.1 libxkbcommon.so.0 libGL.so.1 libwayland-client.so.0 libx11.so.6; do
|
||||||
|
ldconfig -p 2>/dev/null | grep -q "$probe" || missing+=("$probe")
|
||||||
|
done
|
||||||
|
if [ "${#missing[@]}" -gt 0 ]; then
|
||||||
|
echo "warning: these GUI runtime libs are missing (the GUI will not launch until they are installed):" >&2
|
||||||
|
printf ' %s\n' "${missing[@]}" >&2
|
||||||
|
echo " Debian/Ubuntu: apt install libxcb1 libxkbcommon0 libgl1 libwayland-client0 libx11-6" >&2
|
||||||
|
echo " Fedora/RHEL: dnf install libxcb libxkbcommon mesa-libGL wayland-client libX11" >&2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- 2. resolve tag ---------------------------------------------------------
|
||||||
|
if [ "$TAG" = "latest" ]; then
|
||||||
|
TAG="$(curl -fsSL "${GITEA}/api/v1/repos/${REPO}/releases/latest" \
|
||||||
|
| sed -nE 's/.*"tag_name"[[:space:]]*:[[:space:]]*"([^"]+)".*/\1/p' | head -1)"
|
||||||
|
[ -n "$TAG" ] || die "could not resolve the latest release tag from ${GITEA}/${REPO}"
|
||||||
|
fi
|
||||||
|
log "release tag: $TAG"
|
||||||
|
|
||||||
|
URL="${GITEA}/${REPO}/releases/download/${TAG}/${NAME}.tar.gz"
|
||||||
|
SHA_URL="${URL}.sha256"
|
||||||
|
|
||||||
|
# --- 3. download + verify ---------------------------------------------------
|
||||||
|
TMP="$(mktemp -d)"
|
||||||
|
trap 'rm -rf "$TMP"' EXIT
|
||||||
|
|
||||||
|
log "downloading: ${URL}"
|
||||||
|
curl -fL --progress-bar -o "$TMP/${NAME}.tar.gz" "$URL"
|
||||||
|
|
||||||
|
if curl -fsSL -o "$TMP/${NAME}.sha256" "$SHA_URL" 2>/dev/null; then
|
||||||
|
log "verifying sha256..."
|
||||||
|
expected="$(awk '{print $1; exit}' "$TMP/${NAME}.sha256")"
|
||||||
|
actual="$(sha256sum "$TMP/${NAME}.tar.gz" | awk '{print $1}')"
|
||||||
|
[ "$expected" = "$actual" ] || die "checksum mismatch (expected $expected, got $actual)"
|
||||||
|
log "checksum ok"
|
||||||
|
else
|
||||||
|
echo "warning: no published ${NAME}.tar.gz.sha256; skipping checksum verification." >&2
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "extracting..."
|
||||||
|
tar -xzf "$TMP/${NAME}.tar.gz" -C "$TMP"
|
||||||
|
[ -f "$TMP/$BIN" ] || die "extracted archive does not contain '$BIN'"
|
||||||
|
|
||||||
|
# --- 4. install -------------------------------------------------------------
|
||||||
|
if [ -n "${MINT_INSTALL_DIR:-}" ]; then
|
||||||
|
DEST="$MINT_INSTALL_DIR"
|
||||||
|
elif [ "$(id -u)" = 0 ] && [ -d /usr/local/bin ]; then
|
||||||
|
DEST="/usr/local/bin"
|
||||||
|
elif [ -d /usr/local/bin ] && [ -w /usr/local/bin ]; then
|
||||||
|
DEST="/usr/local/bin"
|
||||||
|
else
|
||||||
|
DEST="$HOME/.local/bin"
|
||||||
|
fi
|
||||||
|
mkdir -p "$DEST"
|
||||||
|
|
||||||
|
TARGET="$DEST/$BIN"
|
||||||
|
install -m 0755 "$TMP/$BIN" "$TARGET"
|
||||||
|
log "installed: $TARGET"
|
||||||
|
|
||||||
|
case ":$PATH:" in
|
||||||
|
*":$DEST:"*) : ;;
|
||||||
|
*) echo "note: $DEST is not on your PATH — add it, or call the binary by full path." >&2 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# --- 5. smoke test (headless) ----------------------------------------------
|
||||||
|
if "$TARGET" --version >/dev/null 2>&1; then
|
||||||
|
log "smoke test ok -> $($TARGET --version 2>/dev/null)"
|
||||||
|
else
|
||||||
|
echo "warning: '$TARGET --version' failed; the GUI runtime libs above may be required." >&2
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "done. launch it with: mint"
|
||||||
Reference in New Issue
Block a user