From 0bb41c897c4bc26da4e0052e6b7cf76747ee64c2 Mon Sep 17 00:00:00 2001 From: kilyabin <65072190+kilyabin@users.noreply.github.com> Date: Tue, 18 Nov 2025 04:03:24 +0400 Subject: [PATCH] goodize scripts --- README.md | 4 +++ scripts/install.sh | 80 +++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 79 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 5d635bb..f4a5bcd 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,10 @@ Install the application directly on a Linux system as a systemd service: - Linux system with systemd - Node.js 20+ installed - Root/sudo access +- ICU library (for Node.js): + - Arch Linux: `sudo pacman -S icu` + - Ubuntu/Debian: `sudo apt-get install libicu-dev` + - Fedora/RHEL/CentOS: `sudo dnf install libicu` or `sudo yum install libicu` **Installation:** diff --git a/scripts/install.sh b/scripts/install.sh index b10cec0..10658dc 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -23,6 +23,39 @@ if [ "$EUID" -ne 0 ]; then exit 1 fi +# Detect distribution and suggest ICU installation if needed +detect_and_suggest_icu() { + if [ -f /etc/os-release ]; then + . /etc/os-release + case $ID in + arch|manjaro) + echo -e "${YELLOW}Detected Arch Linux. Installing ICU library...${NC}" + pacman -Sy --noconfirm icu 2>/dev/null || { + echo -e "${YELLOW}Could not auto-install ICU. Please run manually:${NC}" + echo -e "${GREEN}sudo pacman -S icu${NC}" + } + ;; + ubuntu|debian) + echo -e "${YELLOW}Detected Debian/Ubuntu. Installing ICU library...${NC}" + apt-get update -qq && apt-get install -y libicu-dev 2>/dev/null || { + echo -e "${YELLOW}Could not auto-install ICU. Please run manually:${NC}" + echo -e "${GREEN}sudo apt-get install libicu-dev${NC}" + } + ;; + fedora|rhel|centos) + echo -e "${YELLOW}Detected Fedora/RHEL/CentOS. Installing ICU library...${NC}" + dnf install -y libicu 2>/dev/null || yum install -y libicu 2>/dev/null || { + echo -e "${YELLOW}Could not auto-install ICU. Please run manually:${NC}" + echo -e "${GREEN}sudo dnf install libicu${NC} or ${GREEN}sudo yum install libicu${NC}" + } + ;; + *) + echo -e "${YELLOW}Unknown distribution. Please install ICU library manually.${NC}" + ;; + esac + fi +} + # Check Node.js version echo -e "${YELLOW}Checking Node.js...${NC}" if ! command -v node &> /dev/null; then @@ -30,13 +63,34 @@ if ! command -v node &> /dev/null; then exit 1 fi -NODE_VER=$(node -v | cut -d'v' -f2 | cut -d'.' -f1) -if [ "$NODE_VER" -lt "$NODE_VERSION" ]; then - echo -e "${RED}Node.js version ${NODE_VERSION}+ is required. Current version: $(node -v)${NC}" +# Try to get Node.js version, handle errors gracefully +NODE_VERSION_OUTPUT=$(node -v 2>&1) +if [ $? -ne 0 ]; then + echo -e "${RED}Error running Node.js: $NODE_VERSION_OUTPUT${NC}" + echo -e "${YELLOW}This might be due to missing system libraries (ICU).${NC}" + echo -e "${YELLOW}Attempting to install ICU library...${NC}" + detect_and_suggest_icu + echo -e "${YELLOW}Retrying Node.js check...${NC}" + sleep 2 + NODE_VERSION_OUTPUT=$(node -v 2>&1) + if [ $? -ne 0 ]; then + echo -e "${RED}Still cannot run Node.js. Please install ICU library manually and try again.${NC}" + exit 1 + fi +fi + +NODE_VER=$(echo "$NODE_VERSION_OUTPUT" | cut -d'v' -f2 | cut -d'.' -f1) +if [ -z "$NODE_VER" ] || ! [[ "$NODE_VER" =~ ^[0-9]+$ ]]; then + echo -e "${RED}Could not determine Node.js version. Output: $NODE_VERSION_OUTPUT${NC}" exit 1 fi -echo -e "${GREEN}Node.js version: $(node -v)${NC}" +if [ "$NODE_VER" -lt "$NODE_VERSION" ]; then + echo -e "${RED}Node.js version ${NODE_VERSION}+ is required. Current version: $NODE_VERSION_OUTPUT${NC}" + exit 1 +fi + +echo -e "${GREEN}Node.js version: $NODE_VERSION_OUTPUT${NC}" # Check npm if ! command -v npm &> /dev/null; then @@ -44,7 +98,23 @@ if ! command -v npm &> /dev/null; then exit 1 fi -echo -e "${GREEN}npm version: $(npm -v)${NC}\n" +# Try to get npm version, handle errors gracefully +NPM_VERSION_OUTPUT=$(npm -v 2>&1) +if [ $? -ne 0 ]; then + echo -e "${RED}Error running npm: $NPM_VERSION_OUTPUT${NC}" + echo -e "${YELLOW}This might be due to missing system libraries (ICU).${NC}" + echo -e "${YELLOW}Attempting to install ICU library...${NC}" + detect_and_suggest_icu + echo -e "${YELLOW}Retrying npm check...${NC}" + sleep 2 + NPM_VERSION_OUTPUT=$(npm -v 2>&1) + if [ $? -ne 0 ]; then + echo -e "${RED}Still cannot run npm. Please install ICU library manually and try again.${NC}" + exit 1 + fi +fi + +echo -e "${GREEN}npm version: $NPM_VERSION_OUTPUT${NC}\n" # Get the directory where the script is located SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"