move os detection
This commit is contained in:
parent
688033769d
commit
dd4d156229
2 changed files with 99 additions and 113 deletions
|
|
@ -29,22 +29,115 @@ log_error() {
|
||||||
exit $2
|
exit $2
|
||||||
}
|
}
|
||||||
|
|
||||||
# Helper to download files using wget or curl
|
# Detect OS early for bootstrap
|
||||||
|
OS="$(uname -s)"
|
||||||
|
case "$OS" in
|
||||||
|
Linux*) OS=Linux;;
|
||||||
|
Darwin*) OS=Mac;;
|
||||||
|
*) OS="UNKNOWN"
|
||||||
|
esac
|
||||||
|
|
||||||
|
detect_os_arch() {
|
||||||
|
# OS already detected above, but we need ARCH and systemctl check
|
||||||
|
ARCH="$(uname -m)"
|
||||||
|
case "$ARCH" in
|
||||||
|
x86_64) ARCH=amd64;;
|
||||||
|
arm64|aarch64|armv8*) ARCH=arm64;;
|
||||||
|
armv7*) ARCH=armv7;;
|
||||||
|
*) ARCH="UNKNOWN"
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ "$OS" = "Linux" ] && command -v systemctl &> /dev/null; then
|
||||||
|
SYSTEMCTL_AVAILABLE=true
|
||||||
|
else
|
||||||
|
SYSTEMCTL_AVAILABLE=false
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
PRIMARY_COLOR="\e[38;5;208m"
|
||||||
|
SECONDARY_COLOR="\e[38;5;165m"
|
||||||
|
RESET_COLOR="\e[0m"
|
||||||
|
|
||||||
|
check_deps() {
|
||||||
|
for cmd in grep stat tar; do
|
||||||
|
if ! command -v $cmd &> /dev/null; then
|
||||||
|
log "Missing system dependency: $cmd. Install $cmd via your package manager and retry."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Check for wget or curl (one is required)
|
||||||
|
if ! command -v wget &> /dev/null && ! command -v curl &> /dev/null; then
|
||||||
|
log "Missing system dependency: wget or curl. Install via your package manager and retry."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! command -v sha256sum &> /dev/null && ! command -v shasum &> /dev/null; then
|
||||||
|
log "Missing system dependency: sha256sum or shasum."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Cross-platform sed in-place
|
||||||
|
sed_i() {
|
||||||
|
if [ "$OS" = "Mac" ]; then
|
||||||
|
sed -i '' "$@"
|
||||||
|
else
|
||||||
|
sed -i "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Cross-platform mktemp with parent directory
|
||||||
|
mktemp_in() {
|
||||||
|
local parent="$1"
|
||||||
|
if [ "$OS" = "Mac" ]; then
|
||||||
|
mktemp -d "${parent}/tmp.XXXXXX"
|
||||||
|
else
|
||||||
|
mktemp -d -p "$parent"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Extract JSON value (cross-platform)
|
||||||
|
json_value() {
|
||||||
|
local key="$1"
|
||||||
|
if [ "$OS" = "Mac" ]; then
|
||||||
|
echo "$2" | awk -F"\"${key}\"[[:space:]]*:[[:space:]]*\"" '{print $2}' | awk -F'"' '{print $1}' | head -1
|
||||||
|
else
|
||||||
|
echo "$2" | grep -oP "\"${key}\": \"\\K[^\"]+"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Download file (wget or curl)
|
||||||
download() {
|
download() {
|
||||||
local url="$1"
|
local url="$1"
|
||||||
local dest="$2"
|
local dest="$2"
|
||||||
if command -v wget &> /dev/null; then
|
if [ "$OS" = "Mac" ]; then
|
||||||
wget -q "$url" -O "$dest"
|
|
||||||
elif command -v curl &> /dev/null; then
|
|
||||||
curl -fsL "$url" -o "$dest"
|
curl -fsL "$url" -o "$dest"
|
||||||
else
|
else
|
||||||
log_error "Neither wget nor curl found. Please install one." 1
|
wget -q "$url" -O "$dest"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Download to stdout (wget or curl)
|
||||||
|
download_stdout() {
|
||||||
|
local url="$1"
|
||||||
|
if [ "$OS" = "Mac" ]; then
|
||||||
|
curl -fsL "$url"
|
||||||
|
else
|
||||||
|
wget -qO- "$url"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get latest release tag from GitHub (via API)
|
||||||
|
get_latest_release_tag() {
|
||||||
|
local repo="$1"
|
||||||
|
local url="https://api.github.com/repos/${repo}/releases/latest"
|
||||||
|
local api_json=$(download_stdout "$url")
|
||||||
|
json_value "tag_name" "$api_json"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
modules=(
|
modules=(
|
||||||
"utils"
|
|
||||||
"ports"
|
"ports"
|
||||||
"install_lnd"
|
"install_lnd"
|
||||||
"install_nodejs"
|
"install_nodejs"
|
||||||
|
|
|
||||||
107
scripts/utils.sh
107
scripts/utils.sh
|
|
@ -1,107 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
PRIMARY_COLOR="\e[38;5;208m"
|
|
||||||
SECONDARY_COLOR="\e[38;5;165m"
|
|
||||||
RESET_COLOR="\e[0m"
|
|
||||||
|
|
||||||
detect_os_arch() {
|
|
||||||
OS="$(uname -s)"
|
|
||||||
ARCH="$(uname -m)"
|
|
||||||
case "$OS" in
|
|
||||||
Linux*) OS=Linux;;
|
|
||||||
Darwin*) OS=Mac;;
|
|
||||||
CYGWIN*) OS=Cygwin;;
|
|
||||||
MINGW*) OS=MinGw;;
|
|
||||||
*) OS="UNKNOWN"
|
|
||||||
esac
|
|
||||||
case "$ARCH" in
|
|
||||||
x86_64) ARCH=amd64;;
|
|
||||||
arm64|aarch64|armv8*) ARCH=arm64;;
|
|
||||||
armv7*) ARCH=armv7;;
|
|
||||||
*) ARCH="UNKNOWN"
|
|
||||||
esac
|
|
||||||
|
|
||||||
if [ "$OS" = "Linux" ] && command -v systemctl &> /dev/null; then
|
|
||||||
SYSTEMCTL_AVAILABLE=true
|
|
||||||
else
|
|
||||||
SYSTEMCTL_AVAILABLE=false
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
check_deps() {
|
|
||||||
for cmd in grep stat tar; do
|
|
||||||
if ! command -v $cmd &> /dev/null; then
|
|
||||||
log "Missing system dependency: $cmd. Install $cmd via your package manager and retry."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# Check for wget or curl (one is required)
|
|
||||||
if ! command -v wget &> /dev/null && ! command -v curl &> /dev/null; then
|
|
||||||
log "Missing system dependency: wget or curl. Install via your package manager and retry."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! command -v sha256sum &> /dev/null && ! command -v shasum &> /dev/null; then
|
|
||||||
log "Missing system dependency: sha256sum or shasum."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Cross-platform sed in-place
|
|
||||||
sed_i() {
|
|
||||||
if [ "$OS" = "Mac" ]; then
|
|
||||||
sed -i '' "$@"
|
|
||||||
else
|
|
||||||
sed -i "$@"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Cross-platform mktemp with parent directory
|
|
||||||
mktemp_in() {
|
|
||||||
local parent="$1"
|
|
||||||
if [ "$OS" = "Mac" ]; then
|
|
||||||
mktemp -d "${parent}/tmp.XXXXXX"
|
|
||||||
else
|
|
||||||
mktemp -d -p "$parent"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Extract JSON value (cross-platform)
|
|
||||||
json_value() {
|
|
||||||
local key="$1"
|
|
||||||
if [ "$OS" = "Mac" ]; then
|
|
||||||
echo "$2" | awk -F"\"${key}\"[[:space:]]*:[[:space:]]*\"" '{print $2}' | awk -F'"' '{print $1}' | head -1
|
|
||||||
else
|
|
||||||
echo "$2" | grep -oP "\"${key}\": \"\\K[^\"]+"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Download file (wget or curl)
|
|
||||||
download() {
|
|
||||||
local url="$1"
|
|
||||||
local dest="$2"
|
|
||||||
if [ "$OS" = "Mac" ]; then
|
|
||||||
curl -fsL "$url" -o "$dest"
|
|
||||||
else
|
|
||||||
wget -q "$url" -O "$dest"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Download to stdout (wget or curl)
|
|
||||||
download_stdout() {
|
|
||||||
local url="$1"
|
|
||||||
if [ "$OS" = "Mac" ]; then
|
|
||||||
curl -fsL "$url"
|
|
||||||
else
|
|
||||||
wget -qO- "$url"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Get latest release tag from GitHub (via API)
|
|
||||||
get_latest_release_tag() {
|
|
||||||
local repo="$1"
|
|
||||||
local url="https://api.github.com/repos/${repo}/releases/latest"
|
|
||||||
local api_json=$(download_stdout "$url")
|
|
||||||
json_value "tag_name" "$api_json"
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue