ubuntu一键安装Node指定版本脚本

自动检测当前系统和Node.js版本,安装或更新到满足Node.js安装要求的编译器版本然后继续编译安装

 

#!/bin/bash

# 检查是否为root用户
if [ "$EUID" -ne 0 ]; then
  echo "请以root用户运行此脚本"
  exit
fi

# 检查当前操作系统版本
OS_VERSION=$(lsb_release -rs)
echo "检测到的Ubuntu版本: $OS_VERSION"

# 检查是否已安装 Node.js
if command -v node &> /dev/null; then
  INSTALLED_NODE_VERSION=$(node -v)
  echo "已安装的Node.js版本: $INSTALLED_NODE_VERSION"
  read -p "是否要卸载并重装Node.js? (y/N): " REINSTALL
  REINSTALL=${REINSTALL:-N}
  if [[ "$REINSTALL" =~ ^([yY][eE][sS]|[yY])$ ]]; then
    echo "正在卸载Node.js..."
    sudo apt-get purge -y nodejs npm
    sudo apt-get autoremove -y
    sudo rm -rf /usr/local/bin/node /usr/local/include/node /usr/local/lib/node_modules /usr/local/src/node*
    sudo rm -rf /usr/lib/node_modules /usr/bin/node /usr/bin/npm /usr/local/bin/npm
  else
    echo "退出脚本。"
    exit 0
  fi
fi

# 更新系统并安装必要的依赖
sudo apt-get update
sudo apt-get install -y build-essential python3 curl jq software-properties-common

# 检查是否安装了 wget,如果没有则安装
if ! command -v wget &> /dev/null; then
  sudo apt-get install -y wget
fi

# 处理可能存在的前端锁文件
LOCK_FILES=("/var/lib/dpkg/lock-frontend" "/var/lib/apt/lists/lock")
for LOCK_FILE in "${LOCK_FILES[@]}"; do
  if sudo fuser $LOCK_FILE >/dev/null 2>&1; then
    echo "检测到锁文件 $LOCK_FILE,正在删除..."
    sudo rm -f $LOCK_FILE
  fi
done

# 获取当前gcc版本
current_gcc_version=$(gcc -dumpversion)

# 获取需要的Node.js版本
AVAILABLE_VERSIONS=$(curl -s https://nodejs.org/dist/index.json | jq -r '.[].version' | grep -E '^v(1[2-9]|[2-9][0-9])' | sort -V)
echo "可用的 Node.js 版本:"
echo "$AVAILABLE_VERSIONS"

# 检测最优版本(最新LTS版本)
RECOMMENDED_VERSION=$(curl -s https://nodejs.org/dist/index.json | jq -r '[.[] | select(.lts != false)] | .[0].version')

# 如果推荐版本为空,则默认取最新版本
if [[ -z "$RECOMMENDED_VERSION" ]]; then
  RECOMMENDED_VERSION=$(echo "$AVAILABLE_VERSIONS" | tail -n 1)
fi

echo "推荐安装的版本: $RECOMMENDED_VERSION"

# 提供选择菜单
read -p "请输入要安装的 Node.js 版本号 (默认: $RECOMMENDED_VERSION): " NODE_VERSION
NODE_VERSION=${NODE_VERSION:-$RECOMMENDED_VERSION}

# 检查用户输入是否为空
if [[ -z "$NODE_VERSION" ]]; then
  echo "版本号不能为空。退出脚本。"
  exit 1
fi

echo "将安装Node.js版本: $NODE_VERSION"

# 检查所需的gcc版本
REQUIRED_GCC_VERSION=$(curl -s https://nodejs.org/dist/$NODE_VERSION/SHASUMS256.txt | grep 'gcc' | head -n 1 | awk '{print $3}')
if [[ -z "$REQUIRED_GCC_VERSION" ]]; then
  REQUIRED_GCC_VERSION=10
fi

echo "当前gcc版本: $current_gcc_version, 需要的gcc版本: $REQUIRED_GCC_VERSION"

if dpkg --compare-versions "$current_gcc_version" "lt" "$REQUIRED_GCC_VERSION"; then
  echo "正在安装所需的gcc版本..."
  sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
  sudo apt-get update
  sudo apt-get install -y gcc-$REQUIRED_GCC_VERSION g++-$REQUIRED_GCC_VERSION
  sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$REQUIRED_GCC_VERSION 60 --slave /usr/bin/g++ g++ /usr/bin/g++-$REQUIRED_GCC_VERSION
  sudo update-alternatives --config gcc
fi

# 下载 Node.js 源代码
cd /usr/local/src
sudo wget https://nodejs.org/dist/$NODE_VERSION/node-$NODE_VERSION.tar.gz

# 检查下载是否成功
if [[ $? -ne 0 ]]; then
  echo "下载失败,请检查版本号是否正确。"
  exit 1
fi

# 解压源代码
sudo tar -xzf node-$NODE_VERSION.tar.gz
cd node-$NODE_VERSION

# 配置、编译和安装 Node.js
sudo ./configure
sudo make -j$(nproc)
sudo make install

# 检查安装的 Node.js 版本
node_version=$(node -v)
echo "Node.js 安装完成,版本号: $node_version"

# 检查安装的 npm 版本
npm_version=$(npm -v)
echo "npm 安装完成,版本号: $npm_version"

 

使用方法:

 

创建脚本文件

sudo nano install_node.sh

赋予执行权限

chmod +x install_node.sh

执行脚本文件
sudo ./install_node.sh

免责声明:
1:如非特殊说明,本站对提供的素材及源码不拥有任何权利,其版权归原著者拥有。
2:本站内容均由互联网收集整理、网友上传,并且以技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。
3:本站部分收费内容仅作本站日常维护费用,若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4:请勿将源码、软件进行商业交易、转载等行为,源码、软件只为研究、学习所提供,该软件使用后发生的一切问题与本站无关。
5:站内资源如有侵犯你版权的,请来信1058364519@qq.com指出,本站将立即改正。
6:素材源码均为网络收集,不承担任何版权问题,不提供任何技术支持!
7:严重警告本站木屋模型、木屋CAD图纸、木屋效果图未经允许不得转载:凡木屋模型及CAD文章由设计师QINYUHUI设计制作,享有内容所有权,文章仅在QINYUHUI名下网站、信息平台或嘿很有内涵微博发布,未经授权违者必究!!!

MASUC » ubuntu一键安装Node指定版本脚本