This commit is contained in:
eddy
2025-11-07 14:11:51 +08:00
parent b5737d0594
commit 40b3d8a5ae

View File

@@ -78,6 +78,11 @@ download_file() {
print_info "正在下载: $url"
# 如果存在旧的不完整文件,先删除
if [[ -f "$output" ]]; then
rm -f "$output"
fi
if command -v wget &> /dev/null; then
wget -q --show-progress "$url" -O "$output"
elif command -v curl &> /dev/null; then
@@ -87,11 +92,13 @@ download_file() {
exit 1
fi
if [[ $? -eq 0 ]]; then
# 检查下载是否成功
if [[ $? -eq 0 ]] && [[ -f "$output" ]] && [[ -s "$output" ]]; then
print_success "下载完成: $output"
return 0
else
print_error "下载失败: $url"
rm -f "$output"
return 1
fi
}
@@ -105,20 +112,63 @@ download_packages() {
local xray_file="xray_${XRAY_VERSION}_${arch}.deb"
local v2raya_file="v2raya_${V2RAYA_VERSION}_${arch}.deb"
local download_failed=0
# 下载 Xray
if [[ ! -f "$INSTALL_DIR/$xray_file" ]]; then
download_file "$BASE_URL/$xray_file" "$INSTALL_DIR/$xray_file"
if ! download_file "$BASE_URL/$xray_file" "$INSTALL_DIR/$xray_file"; then
download_failed=1
fi
else
print_warning "文件已存在,跳过下载: $xray_file"
fi
# 下载 V2rayA
if [[ ! -f "$INSTALL_DIR/$v2raya_file" ]]; then
download_file "$BASE_URL/$v2raya_file" "$INSTALL_DIR/$v2raya_file"
if ! download_file "$BASE_URL/$v2raya_file" "$INSTALL_DIR/$v2raya_file"; then
download_failed=1
fi
else
print_warning "文件已存在,跳过下载: $v2raya_file"
fi
return $download_failed
}
# 验证文件是否有效
verify_deb_file() {
local file=$1
if [[ ! -f "$file" ]]; then
return 1
fi
if [[ ! -s "$file" ]]; then
print_warning "文件为空: $file"
return 1
fi
# 检查 file 命令是否存在
if command -v file &> /dev/null; then
if ! file "$file" | grep -q "Debian"; then
print_warning "文件不是有效的 deb 包: $file"
return 1
fi
else
# 如果没有 file 命令,简单检查文件扩展名和大小
if [[ ! "$file" =~ \.deb$ ]]; then
print_warning "文件扩展名不正确: $file"
return 1
fi
# 检查文件大小是否合理(至少 1KB
local size=$(stat -c%s "$file" 2>/dev/null || stat -f%z "$file" 2>/dev/null)
if [[ $size -lt 1024 ]]; then
print_warning "文件大小异常: $file (${size} bytes)"
return 1
fi
fi
return 0
}
# 安装 V2rayA
@@ -130,30 +180,49 @@ install_v2raya() {
# 检查文件是否存在
if [[ ! -f "$xray_file" ]] || [[ ! -f "$v2raya_file" ]]; then
print_warning "安装包不存在,开始下载..."
download_packages
if ! download_packages; then
print_error "下载失败,无法继续安装"
print_info "请检查网络连接或下载地址是否正确"
return 1
fi
fi
# 验证文件完整性
print_info "验证安装包完整性..."
if ! verify_deb_file "$xray_file"; then
print_error "Xray 安装包验证失败,请重新下载"
rm -f "$xray_file"
return 1
fi
if ! verify_deb_file "$v2raya_file"; then
print_error "V2rayA 安装包验证失败,请重新下载"
rm -f "$v2raya_file"
return 1
fi
print_success "安装包验证通过"
print_info "开始安装 Xray..."
chmod 644 "$xray_file"
dpkg -i "$xray_file"
apt --fix-broken install -y
if [[ $? -ne 0 ]]; then
if dpkg -i "$xray_file" 2>&1 | tee /tmp/xray_install.log; then
apt --fix-broken install -y
print_success "Xray 安装成功"
else
print_error "Xray 安装失败"
exit 1
print_info "错误日志已保存到: /tmp/xray_install.log"
return 1
fi
print_success "Xray 安装成功"
print_info "开始安装 V2rayA..."
chmod 644 "$v2raya_file"
dpkg -i "$v2raya_file"
apt --fix-broken install -y
if [[ $? -ne 0 ]]; then
if dpkg -i "$v2raya_file" 2>&1 | tee /tmp/v2raya_install.log; then
apt --fix-broken install -y
print_success "V2rayA 安装成功"
else
print_error "V2rayA 安装失败"
exit 1
print_info "错误日志已保存到: /tmp/v2raya_install.log"
return 1
fi
print_success "V2rayA 安装成功"
# 启动服务
print_info "启动 V2rayA 服务..."
@@ -163,6 +232,8 @@ install_v2raya() {
print_success "V2rayA 服务启动成功"
else
print_error "V2rayA 服务启动失败"
print_info "请运行 'systemctl status v2raya.service' 查看详情"
return 1
fi
# 设置开机自启
@@ -301,7 +372,11 @@ main() {
read -p "按任意键继续..." -n 1
;;
3)
download_packages
if download_packages; then
print_success "所有安装包下载完成"
else
print_error "部分安装包下载失败"
fi
read -p "按任意键继续..." -n 1
;;
4)