new ~/linusware; new interface; new updater

This commit is contained in:
2026-06-17 00:51:53 +04:00
parent bf0f8fcdd7
commit 47af6c2f75
3 changed files with 306 additions and 0 deletions
Executable
+107
View File
@@ -0,0 +1,107 @@
#!/usr/bin/env bash
set -euo pipefail
BASE_URL="${BASE_URL:-https://git.jewguard.xyz/linusware/main/raw/branch/main}"
INSTALL_DIR="${HOME}/linusware"
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
info() {
echo -e "${GREEN}[*]${NC} $1"
}
warn() {
echo -e "${YELLOW}[!]${NC} $1"
}
error() {
echo -e "${RED}[x]${NC} $1"
exit 1
}
command -v curl >/dev/null 2>&1 || error "curl is required"
command -v md5sum >/dev/null 2>&1 || error "md5sum is required"
mkdir -p "${INSTALL_DIR}/external" "${INSTALL_DIR}/internal"
download_bin() {
local url="$1" dest="$2"
local tmp; tmp="$(mktemp)"
curl -fsSL -o "$tmp" "$url" || { rm -f "$tmp"; return 1; }
mv "$tmp" "$dest"
}
install_edition() {
local edition="$1"
local status_url="${BASE_URL}/${edition}/status.json"
local status_file="${INSTALL_DIR}/${edition}/status.json"
local bin_dir="${INSTALL_DIR}/${edition}/linusware"
local bin_path="${bin_dir}/linusware"
info "Checking ${edition} edition..."
download_bin "$status_url" "$status_file" || {
warn "Could not fetch status.json for ${edition}, skipping"
return
}
local updated
updated=$(sed -n 's/.*"updated":[[:space:]]*\([a-z]*\).*/\1/p' "$status_file")
if [ "$updated" != "true" ]; then
info "${edition}: not yet released, skipping"
return
fi
local version
version=$(sed -n 's/.*"version":[[:space:]]*"\([^"]*\)".*/\1/p' "$status_file")
info "Downloading ${edition} v${version}..."
local md5_url="${BASE_URL}/${edition}/bin/MD5SUM"
local md5_file; md5_file="$(mktemp)"
download_bin "$md5_url" "$md5_file" || {
rm -f "$md5_file"
warn "Could not fetch MD5SUM for ${edition}"
return
}
local expected_hash; expected_hash=$(tr -cd '[:xdigit:]' < "$md5_file"); rm -f "$md5_file"
local bin_url="${BASE_URL}/${edition}/bin/linusware"
local tmp_bin; tmp_bin="$(mktemp)"
download_bin "$bin_url" "$tmp_bin" || {
rm -f "$tmp_bin"
error "Failed to download ${edition} binary"
}
local actual_hash
actual_hash=$(md5sum "$tmp_bin" | cut -d' ' -f1)
if [ "$actual_hash" != "$expected_hash" ]; then
rm -f "$tmp_bin"
error "MD5 mismatch for ${edition} (expected ${expected_hash}, got ${actual_hash})"
fi
mkdir -p "$bin_dir"
mv "$tmp_bin" "$bin_path"
chmod +x "$bin_path"
echo "$version" > "${INSTALL_DIR}/${edition}/version.txt"
info "${edition} v${version} installed successfully"
}
# main
info "Installing LinusWare to ${INSTALL_DIR}"
echo ""
install_edition external
install_edition internal
info "Downloading launcher and updater..."
download_bin "${BASE_URL}/launcher.sh" "${INSTALL_DIR}/launcher.sh"
download_bin "${BASE_URL}/update.sh" "${INSTALL_DIR}/update.sh"
chmod +x "${INSTALL_DIR}/launcher.sh" "${INSTALL_DIR}/update.sh"
echo ""
info "Installation complete!"
echo ""
echo " Run: ${INSTALL_DIR}/launcher.sh"