Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0c66722989 | |||
| d21dcaa303 | |||
| 02c7fa68aa |
@@ -1,8 +1,8 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# server-config-cli installer
|
# server-config-cli installer
|
||||||
#
|
#
|
||||||
# Usage:
|
# Usage (always latest, no version needed):
|
||||||
# curl -fsSL <REPO>/releases/latest/download/install.sh | bash
|
# curl -fsSL https://gitea1.deeppolicy.cn:3002/hanruo/server-config-cli/raw/branch/main/scripts/install.sh | bash
|
||||||
#
|
#
|
||||||
# Environment overrides:
|
# Environment overrides:
|
||||||
# VERSION release tag to install (default: latest)
|
# VERSION release tag to install (default: latest)
|
||||||
@@ -47,7 +47,22 @@ NODE_URL="${NODE_MIRROR}/${NODE_VERSION}/${NODE_PKG}"
|
|||||||
NODE_DIR="${INSTALL_DIR}/node-${NODE_VERSION}-${NODE_OS}-${NODE_ARCH}"
|
NODE_DIR="${INSTALL_DIR}/node-${NODE_VERSION}-${NODE_OS}-${NODE_ARCH}"
|
||||||
|
|
||||||
if [ "$VERSION" = "latest" ]; then
|
if [ "$VERSION" = "latest" ]; then
|
||||||
BUNDLE_URL="${REPO_BASE}/releases/latest/download/app.mjs"
|
# Resolve the newest release tag via the API (works on all Gitea versions,
|
||||||
|
# unlike the GitHub-style /releases/latest/download shortcut).
|
||||||
|
proto="${REPO_BASE%%://*}"
|
||||||
|
rest="${REPO_BASE#*://}"
|
||||||
|
host="${rest%%/*}"
|
||||||
|
repo_path="${rest#*/}"
|
||||||
|
API_BASE="${proto}://${host}/api/v1/repos/${repo_path}"
|
||||||
|
|
||||||
|
log "Resolving latest release tag"
|
||||||
|
TAG=$(curl -fsSL "${API_BASE}/releases/latest" \
|
||||||
|
| grep -o '"tag_name"[[:space:]]*:[[:space:]]*"[^"]*"' \
|
||||||
|
| head -1 \
|
||||||
|
| sed -E 's/.*"tag_name"[[:space:]]*:[[:space:]]*"([^"]*)".*/\1/')
|
||||||
|
[ -n "$TAG" ] || die "could not resolve latest release tag from ${API_BASE}/releases/latest"
|
||||||
|
log "Latest release is ${TAG}"
|
||||||
|
BUNDLE_URL="${REPO_BASE}/releases/download/${TAG}/app.mjs"
|
||||||
else
|
else
|
||||||
BUNDLE_URL="${REPO_BASE}/releases/download/${VERSION}/app.mjs"
|
BUNDLE_URL="${REPO_BASE}/releases/download/${VERSION}/app.mjs"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,10 +1,26 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
const os = require("node:os");
|
||||||
const path = require("node:path");
|
const path = require("node:path");
|
||||||
const { randomBytes } = require("node:crypto");
|
const { randomBytes } = require("node:crypto");
|
||||||
|
|
||||||
const DEFAULT_FRP_VERSION = "0.58.1";
|
const DEFAULT_FRP_VERSION = "0.58.1";
|
||||||
const DEFAULT_FRP_ARCH = "amd64";
|
|
||||||
|
// Map Node's os.arch() to the arch token frp uses in its release asset names
|
||||||
|
// (e.g. frp_0.58.1_linux_arm64.tar.gz). Falls back to amd64 for the common case.
|
||||||
|
function detectFrpArch() {
|
||||||
|
switch (os.arch()) {
|
||||||
|
case "x64": return "amd64";
|
||||||
|
case "arm64": return "arm64";
|
||||||
|
case "arm": return "arm";
|
||||||
|
case "ia32": return "386";
|
||||||
|
case "mips": return "mips";
|
||||||
|
case "mipsel": return "mipsle";
|
||||||
|
default: return "amd64";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const DEFAULT_FRP_ARCH = detectFrpArch();
|
||||||
const DEFAULT_FRP_SERVER_ADDR = "81.70.134.9";
|
const DEFAULT_FRP_SERVER_ADDR = "81.70.134.9";
|
||||||
const DEFAULT_FRP_SERVER_PORT = 15443;
|
const DEFAULT_FRP_SERVER_PORT = 15443;
|
||||||
const DEFAULT_SERVICE_NAME = "frpc";
|
const DEFAULT_SERVICE_NAME = "frpc";
|
||||||
@@ -212,6 +228,7 @@ function buildGlobals({ serverAddr, serverPort, token, tlsEnable, tcpMux, logFil
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
DEFAULT_FRP_VERSION,
|
DEFAULT_FRP_VERSION,
|
||||||
DEFAULT_FRP_ARCH,
|
DEFAULT_FRP_ARCH,
|
||||||
|
detectFrpArch,
|
||||||
DEFAULT_FRP_SERVER_ADDR,
|
DEFAULT_FRP_SERVER_ADDR,
|
||||||
DEFAULT_FRP_SERVER_PORT,
|
DEFAULT_FRP_SERVER_PORT,
|
||||||
DEFAULT_SERVICE_NAME,
|
DEFAULT_SERVICE_NAME,
|
||||||
|
|||||||
@@ -48,7 +48,6 @@ function zshInstallPlan() {
|
|||||||
|
|
||||||
const steps = [
|
const steps = [
|
||||||
run("apt update", "sudo", aptArgs("update")),
|
run("apt update", "sudo", aptArgs("update")),
|
||||||
run("apt upgrade", "sudo", aptArgs("upgrade", "-y")),
|
|
||||||
run("install zsh & friends", "sudo", aptArgs("install", "zsh", "git", "curl", "wget", "-y")),
|
run("install zsh & friends", "sudo", aptArgs("install", "zsh", "git", "curl", "wget", "-y")),
|
||||||
run("git credential helper = store", "git", ["config", "--global", "credential.helper", "store"]),
|
run("git credential helper = store", "git", ["config", "--global", "credential.helper", "store"]),
|
||||||
run("change shell to zsh", "sudo", ["chsh", "-s", "/bin/zsh", os.userInfo().username]),
|
run("change shell to zsh", "sudo", ["chsh", "-s", "/bin/zsh", os.userInfo().username]),
|
||||||
@@ -80,8 +79,11 @@ function gitPluginStep(name, repo, destination) {
|
|||||||
|
|
||||||
function condaInstallPlan(options = {}) {
|
function condaInstallPlan(options = {}) {
|
||||||
const installDir = options.installDir || path.join(os.homedir(), "miniconda3");
|
const installDir = options.installDir || path.join(os.homedir(), "miniconda3");
|
||||||
const installer = "/tmp/Miniconda3-latest-Linux-x86_64.sh";
|
// Miniconda asset naming uses uname-style arch tokens (x86_64 / aarch64).
|
||||||
const url = "https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh";
|
const condaArch = os.arch() === "arm64" ? "aarch64" : "x86_64";
|
||||||
|
const installerName = `Miniconda3-latest-Linux-${condaArch}.sh`;
|
||||||
|
const installer = `/tmp/${installerName}`;
|
||||||
|
const url = `https://repo.anaconda.com/miniconda/${installerName}`;
|
||||||
const condaBin = path.join(installDir, "bin", "conda");
|
const condaBin = path.join(installDir, "bin", "conda");
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
Reference in New Issue
Block a user