优化网络检测并自动选择速度最快的APT镜像源
This commit is contained in:
parent
dae130cf46
commit
c6d3b456d9
241
jsite.sh
241
jsite.sh
@ -264,25 +264,44 @@ export DEBCONF_NONINTERACTIVE_SEEN=true
|
||||
export UCF_FORCE_CONFNEW=1
|
||||
export UCF_FORCE_CONFOLD=1
|
||||
|
||||
# 网络连通性检测
|
||||
# 优化curl配置,提高下载速度和稳定性
|
||||
export CURL_CONNECT_TIMEOUT=5
|
||||
export CURL_MAX_TIME=30
|
||||
export CURL_RETRY=2
|
||||
export CURL_RETRY_DELAY=1
|
||||
|
||||
# 网络连通性检测和最佳镜像源选择
|
||||
check_network_connectivity() {
|
||||
log_info "检测网络连通性..."
|
||||
log_info "检测网络连通性并选择最佳镜像源..."
|
||||
|
||||
local test_urls=(
|
||||
"https://mirrors.aliyun.com"
|
||||
"https://registry.npmmirror.com"
|
||||
"https://gitee.com"
|
||||
"https://mirrors.ustc.edu.cn"
|
||||
"https://raw.githubusercontent.com"
|
||||
"https://mirrors.tuna.tsinghua.edu.cn"
|
||||
"https://mirrors.cloud.tencent.com"
|
||||
"https://mirrors.huaweicloud.com"
|
||||
)
|
||||
|
||||
local network_ok=false
|
||||
local best_mirror=""
|
||||
local fastest_time=999
|
||||
|
||||
for url in "${test_urls[@]}"; do
|
||||
log_info "测试连接: $url"
|
||||
if curl -fsSL --connect-timeout 5 --max-time 10 "$url" >/dev/null 2>&1; then
|
||||
log_success "网络连接正常: $url"
|
||||
log_info "测试连接速度: $url"
|
||||
local start_time=$(date +%s%N)
|
||||
if curl -fsSL --connect-timeout 3 --max-time 8 "$url" >/dev/null 2>&1; then
|
||||
local end_time=$(date +%s%N)
|
||||
local response_time=$(( (end_time - start_time) / 1000000 ))
|
||||
log_success "网络连接正常: $url (响应时间: ${response_time}ms)"
|
||||
|
||||
if [ $response_time -lt $fastest_time ]; then
|
||||
fastest_time=$response_time
|
||||
best_mirror="$url"
|
||||
fi
|
||||
|
||||
network_ok=true
|
||||
break
|
||||
else
|
||||
log_warning "网络连接失败: $url"
|
||||
fi
|
||||
@ -293,6 +312,12 @@ check_network_connectivity() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
# 设置全局最佳镜像源
|
||||
if [ -n "$best_mirror" ]; then
|
||||
export BEST_MIRROR="$best_mirror"
|
||||
log_success "选择最佳镜像源: $best_mirror (响应时间: ${fastest_time}ms)"
|
||||
fi
|
||||
|
||||
log_success "网络连通性检测完成"
|
||||
}
|
||||
|
||||
@ -309,52 +334,46 @@ configure_apt_mirrors() {
|
||||
# 检测系统版本
|
||||
local codename=$(lsb_release -cs 2>/dev/null || echo "jammy")
|
||||
|
||||
# 创建新的源列表,使用多个国内镜像源(按优先级排序)
|
||||
# 根据网络检测结果选择最佳镜像源
|
||||
local primary_mirror="https://mirrors.aliyun.com"
|
||||
if [ -n "$BEST_MIRROR" ]; then
|
||||
case "$BEST_MIRROR" in
|
||||
*"aliyun"*) primary_mirror="https://mirrors.aliyun.com" ;;
|
||||
*"npmmirror"*) primary_mirror="https://mirrors.aliyun.com" ;;
|
||||
*"tencent"*) primary_mirror="https://mirrors.cloud.tencent.com" ;;
|
||||
*"huawei"*) primary_mirror="https://mirrors.huaweicloud.com" ;;
|
||||
*"ustc"*) primary_mirror="https://mirrors.ustc.edu.cn" ;;
|
||||
*"tuna"*) primary_mirror="https://mirrors.tuna.tsinghua.edu.cn" ;;
|
||||
*) primary_mirror="https://mirrors.aliyun.com" ;;
|
||||
esac
|
||||
log_info "根据网络检测结果选择APT主镜像源: $primary_mirror"
|
||||
fi
|
||||
|
||||
# 创建新的源列表,使用最佳镜像源作为主要源
|
||||
cat > /etc/apt/sources.list << EOF
|
||||
# 1. 阿里云镜像源(国内最快)
|
||||
# 主要镜像源(根据网络检测结果选择)
|
||||
deb $primary_mirror/ubuntu/ ${codename} main restricted universe multiverse
|
||||
deb $primary_mirror/ubuntu/ ${codename}-security main restricted universe multiverse
|
||||
deb $primary_mirror/ubuntu/ ${codename}-updates main restricted universe multiverse
|
||||
deb $primary_mirror/ubuntu/ ${codename}-proposed main restricted universe multiverse
|
||||
deb $primary_mirror/ubuntu/ ${codename}-backports main restricted universe multiverse
|
||||
|
||||
# 备用镜像源(按速度排序)
|
||||
deb https://mirrors.aliyun.com/ubuntu/ ${codename} main restricted universe multiverse
|
||||
deb https://mirrors.aliyun.com/ubuntu/ ${codename}-security main restricted universe multiverse
|
||||
deb https://mirrors.aliyun.com/ubuntu/ ${codename}-updates main restricted universe multiverse
|
||||
deb https://mirrors.aliyun.com/ubuntu/ ${codename}-proposed main restricted universe multiverse
|
||||
deb https://mirrors.aliyun.com/ubuntu/ ${codename}-backports main restricted universe multiverse
|
||||
|
||||
# 2. 腾讯云镜像源(备用)
|
||||
deb https://mirrors.cloud.tencent.com/ubuntu/ ${codename} main restricted universe multiverse
|
||||
deb https://mirrors.cloud.tencent.com/ubuntu/ ${codename}-security main restricted universe multiverse
|
||||
deb https://mirrors.cloud.tencent.com/ubuntu/ ${codename}-updates main restricted universe multiverse
|
||||
deb https://mirrors.cloud.tencent.com/ubuntu/ ${codename}-proposed main restricted universe multiverse
|
||||
deb https://mirrors.cloud.tencent.com/ubuntu/ ${codename}-backports main restricted universe multiverse
|
||||
|
||||
# 3. 华为云镜像源(备用)
|
||||
deb https://mirrors.huaweicloud.com/ubuntu/ ${codename} main restricted universe multiverse
|
||||
deb https://mirrors.huaweicloud.com/ubuntu/ ${codename}-security main restricted universe multiverse
|
||||
deb https://mirrors.huaweicloud.com/ubuntu/ ${codename}-updates main restricted universe multiverse
|
||||
deb https://mirrors.huaweicloud.com/ubuntu/ ${codename}-proposed main restricted universe multiverse
|
||||
deb https://mirrors.huaweicloud.com/ubuntu/ ${codename}-backports main restricted universe multiverse
|
||||
|
||||
# 4. 中科大镜像源(备用)
|
||||
deb https://mirrors.ustc.edu.cn/ubuntu/ ${codename} main restricted universe multiverse
|
||||
deb https://mirrors.ustc.edu.cn/ubuntu/ ${codename}-security main restricted universe multiverse
|
||||
deb https://mirrors.ustc.edu.cn/ubuntu/ ${codename}-updates main restricted universe multiverse
|
||||
deb https://mirrors.ustc.edu.cn/ubuntu/ ${codename}-proposed main restricted universe multiverse
|
||||
deb https://mirrors.ustc.edu.cn/ubuntu/ ${codename}-backports main restricted universe multiverse
|
||||
|
||||
# 5. 清华大学镜像源(备用)
|
||||
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ ${codename} main restricted universe multiverse
|
||||
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ ${codename}-security main restricted universe multiverse
|
||||
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ ${codename}-updates main restricted universe multiverse
|
||||
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ ${codename}-proposed main restricted universe multiverse
|
||||
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ ${codename}-backports main restricted universe multiverse
|
||||
|
||||
# 源码镜像源(使用阿里云,速度最快)
|
||||
deb-src https://mirrors.aliyun.com/ubuntu/ ${codename} main restricted universe multiverse
|
||||
deb-src https://mirrors.aliyun.com/ubuntu/ ${codename}-security main restricted universe multiverse
|
||||
deb-src https://mirrors.aliyun.com/ubuntu/ ${codename}-updates main restricted universe multiverse
|
||||
deb-src https://mirrors.aliyun.com/ubuntu/ ${codename}-proposed main restricted universe multiverse
|
||||
deb-src https://mirrors.aliyun.com/ubuntu/ ${codename}-backports main restricted universe multiverse
|
||||
# 源码镜像源
|
||||
deb-src $primary_mirror/ubuntu/ ${codename} main restricted universe multiverse
|
||||
deb-src $primary_mirror/ubuntu/ ${codename}-security main restricted universe multiverse
|
||||
deb-src $primary_mirror/ubuntu/ ${codename}-updates main restricted universe multiverse
|
||||
deb-src $primary_mirror/ubuntu/ ${codename}-proposed main restricted universe multiverse
|
||||
deb-src $primary_mirror/ubuntu/ ${codename}-backports main restricted universe multiverse
|
||||
EOF
|
||||
|
||||
log_success "APT镜像源配置完成"
|
||||
log_success "APT镜像源配置完成 (主镜像源: $primary_mirror)"
|
||||
}
|
||||
|
||||
# 日志函数
|
||||
@ -452,21 +471,21 @@ install_nodejs() {
|
||||
if [ ! -d "/home/jingrow/.nvm" ]; then
|
||||
log_info "下载并安装nvm..."
|
||||
|
||||
# 尝试多个NVM下载源,按优先级排序(国内镜像优先)
|
||||
# 使用更快的国内镜像源,避免GitHub连接问题
|
||||
local nvm_install_success=false
|
||||
local nvm_sources=(
|
||||
"https://gitee.com/mirrors/nvm/raw/v0.40.3/install.sh"
|
||||
"https://cdn.jsdelivr.net/gh/nvm-sh/nvm@v0.40.3/install.sh"
|
||||
"https://npmmirror.com/mirrors/nvm/v0.40.3/install.sh"
|
||||
"https://mirrors.ustc.edu.cn/nvm/v0.40.3/install.sh"
|
||||
"https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh"
|
||||
"https://mirrors.tuna.tsinghua.edu.cn/nvm/v0.40.3/install.sh"
|
||||
"https://cdn.jsdelivr.net/gh/nvm-sh/nvm@v0.40.3/install.sh"
|
||||
)
|
||||
|
||||
for nvm_source in "${nvm_sources[@]}"; do
|
||||
log_info "尝试从 $nvm_source 下载nvm..."
|
||||
|
||||
# 设置较短的超时时间,避免长时间等待
|
||||
if su - jingrow -c "curl -fsSL --connect-timeout 10 --max-time 60 '$nvm_source' | bash"; then
|
||||
# 使用更短的超时时间和更快的下载设置
|
||||
if su - jingrow -c "curl -fsSL --connect-timeout 5 --max-time 30 --retry 2 --retry-delay 1 '$nvm_source' | bash"; then
|
||||
log_success "nvm安装完成 (来源: $nvm_source)"
|
||||
nvm_install_success=true
|
||||
break
|
||||
@ -476,7 +495,39 @@ install_nodejs() {
|
||||
done
|
||||
|
||||
if [ "$nvm_install_success" = false ]; then
|
||||
log_error "所有NVM下载源都失败,请检查网络连接"
|
||||
log_error "所有NVM下载源都失败,尝试使用离线安装方式..."
|
||||
|
||||
# 离线安装方式:直接下载nvm压缩包
|
||||
log_info "尝试离线安装方式..."
|
||||
local offline_sources=(
|
||||
"https://gitee.com/mirrors/nvm/archive/v0.40.3.tar.gz"
|
||||
"https://npmmirror.com/mirrors/nvm/v0.40.3/nvm-0.40.3.tar.gz"
|
||||
)
|
||||
|
||||
for offline_source in "${offline_sources[@]}"; do
|
||||
log_info "尝试下载nvm压缩包: $offline_source"
|
||||
if su - jingrow -c "
|
||||
cd /tmp
|
||||
curl -fsSL --connect-timeout 5 --max-time 30 --retry 2 '$offline_source' -o nvm.tar.gz
|
||||
"; then
|
||||
log_info "nvm压缩包下载成功,开始解压安装..."
|
||||
if su - jingrow -c "
|
||||
cd /tmp
|
||||
tar -xzf nvm.tar.gz
|
||||
mv nvm-0.40.3 /home/jingrow/.nvm
|
||||
chown -R jingrow:jingrow /home/jingrow/.nvm
|
||||
rm -f nvm.tar.gz
|
||||
"; then
|
||||
log_success "nvm离线安装完成"
|
||||
nvm_install_success=true
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [ "$nvm_install_success" = false ]; then
|
||||
log_error "所有NVM安装方式都失败,请检查网络连接或手动安装"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
@ -485,14 +536,55 @@ install_nodejs() {
|
||||
|
||||
# 加载nvm并安装node.js
|
||||
log_info "安装Node.js v$NODE_VERSION..."
|
||||
|
||||
# 配置nvm使用国内镜像源,提高下载速度
|
||||
log_info "配置nvm使用国内镜像源..."
|
||||
su - jingrow -c "
|
||||
export NVM_DIR=\"\$HOME/.nvm\"
|
||||
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
|
||||
nvm install $NODE_VERSION
|
||||
nvm use $NODE_VERSION
|
||||
nvm alias default $NODE_VERSION
|
||||
|
||||
# 设置nvm使用国内镜像源
|
||||
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node/
|
||||
export NVM_IOJS_ORG_MIRROR=https://npmmirror.com/mirrors/iojs/
|
||||
|
||||
# 显示配置信息
|
||||
echo 'NVM镜像源配置:'
|
||||
echo ' Node.js: \$NVM_NODEJS_ORG_MIRROR'
|
||||
echo ' io.js: \$NVM_IOJS_ORG_MIRROR'
|
||||
"
|
||||
|
||||
log_info "开始下载和安装Node.js v$NODE_VERSION (这可能需要几分钟)..."
|
||||
if su - jingrow -c "
|
||||
export NVM_DIR=\"\$HOME/.nvm\"
|
||||
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
|
||||
|
||||
# 设置nvm使用国内镜像源
|
||||
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node/
|
||||
export NVM_IOJS_ORG_MIRROR=https://npmmirror.com/mirrors/iojs/
|
||||
|
||||
# 安装Node.js,使用更快的下载设置
|
||||
nvm install $NODE_VERSION --latest-npm
|
||||
"; then
|
||||
log_success "Node.js v$NODE_VERSION 下载完成"
|
||||
|
||||
log_info "配置Node.js环境..."
|
||||
su - jingrow -c "
|
||||
export NVM_DIR=\"\$HOME/.nvm\"
|
||||
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
|
||||
nvm use $NODE_VERSION
|
||||
nvm alias default $NODE_VERSION
|
||||
|
||||
# 验证安装
|
||||
echo 'Node.js版本:'
|
||||
node -v
|
||||
echo 'npm版本:'
|
||||
npm -v
|
||||
"
|
||||
else
|
||||
log_error "Node.js安装失败"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# 配置npm使用国内镜像源,按优先级排序
|
||||
log_info "配置npm使用国内镜像源..."
|
||||
su - jingrow -c "
|
||||
@ -617,34 +709,33 @@ install_pm2() {
|
||||
# 设置PM2开机自启
|
||||
log_info "配置PM2开机自启..."
|
||||
|
||||
# 获取PM2 startup命令的输出,避免交互式阻塞
|
||||
local startup_output=$(su - jingrow -c "
|
||||
# 直接执行PM2 startup命令,创建systemd服务文件
|
||||
log_info "执行PM2 startup命令创建systemd服务..."
|
||||
su - jingrow -c "
|
||||
export NVM_DIR=\"\$HOME/.nvm\"
|
||||
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
|
||||
pm2 startup 2>&1
|
||||
" 2>/dev/null)
|
||||
pm2 startup systemd -u jingrow --hp /home/jingrow
|
||||
"
|
||||
|
||||
# 检查是否成功生成systemd服务
|
||||
if echo "$startup_output" | grep -q "systemd"; then
|
||||
log_success "PM2 systemd服务文件生成成功"
|
||||
# 检查服务文件是否创建成功
|
||||
if [ -f "/etc/systemd/system/pm2-jingrow.service" ]; then
|
||||
log_success "PM2 systemd服务文件创建成功"
|
||||
|
||||
# 提取systemd命令并执行(避免交互式提示)
|
||||
local systemd_cmd=$(echo "$startup_output" | grep -E "sudo.*systemctl" | head -1)
|
||||
if [ -n "$systemd_cmd" ]; then
|
||||
log_info "执行systemd命令: $systemd_cmd"
|
||||
# 移除sudo前缀,因为当前已经是root用户
|
||||
local clean_cmd=$(echo "$systemd_cmd" | sed 's/^sudo //')
|
||||
if eval "$clean_cmd" 2>/dev/null; then
|
||||
log_success "PM2 systemd服务启用成功"
|
||||
else
|
||||
log_warning "PM2 systemd服务启用失败,请手动执行: $systemd_cmd"
|
||||
fi
|
||||
# 启用systemd服务
|
||||
log_info "启用PM2 systemd服务..."
|
||||
systemctl enable pm2-jingrow
|
||||
if [ $? -eq 0 ]; then
|
||||
log_success "PM2 systemd服务已启用"
|
||||
else
|
||||
log_warning "PM2 systemd服务启用失败"
|
||||
fi
|
||||
elif echo "$startup_output" | grep -q "init.d"; then
|
||||
log_success "PM2 init.d脚本生成成功"
|
||||
|
||||
# 重新加载systemd配置
|
||||
systemctl daemon-reload
|
||||
log_success "systemd配置已重新加载"
|
||||
else
|
||||
log_warning "PM2开机启动配置可能失败,输出: $startup_output"
|
||||
log_info "请手动执行: su - jingrow -c 'pm2 startup'"
|
||||
log_warning "PM2 systemd服务文件创建失败"
|
||||
log_info "请手动执行: su - jingrow -c 'pm2 startup systemd -u jingrow --hp /home/jingrow'"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user