# 佳石服务安装脚本升级文档 (v2.3)

本文档详细记录了 `srv_ubuntu.sh` 相较于旧版 `srv_ubuntu_old.sh` 的核心升级功能点与改进措施。

---

## 🚀 核心升级概览

| 功能模块 | 旧版逻辑 (Old) | 新版逻辑 (v2.3) | 解决痛点 |
| :--- | :--- | :--- | :--- |
| **网络修复** | 无，直接报错退出 | **智能 Netplan 注入** + resolv.conf 降级 | 解决 `Could not resolve host` 导致的安装失败 |
| **镜像源管理** | 硬编码阿里云(Jammy) + 清华(Focal) | **智能优选** (自动测速) + **All-in-One 镜像策略** | 解决混合源导致的依赖冲突 (Dependency Hell) |
| **时区配置** | 仅 `cp` 覆盖文件 | **四重保障** (timedatectl -> ln -> cp -> 手动) | 解决时区修改无效的问题 |
| **日志记录** | 仅输出到屏幕 | **实时双写** (屏幕 + 带时间戳的日志文件) | 提供故障排查依据 |
| **代码健壮性** | 遇到错误继续执行 | **熔断机制** (关键步骤失败立即停止) | 防止系统被错误配置破坏 |

---

## 📝 详细功能升级点

### 1. 智能 DNS 自动修复 (Netplan)

旧版脚本在遇到 DNS 解析失败时会直接报错，导致无法下载。新版引入了 Python 驱动的 Netplan 自动配置：

- **自动检测**：脚本会找到 `/etc/netplan/*.yaml` 配置文件。
- **安全注入**：利用 Python 脚本安全地在 `ethernets.*.nameservers.addresses` 列表头部插入 `114.114.114.114` 和 `223.5.5.5`。
- **自动应用**：执行 `netplan apply` 使配置永久生效。
- **降级策略**：如果 Netplan 自动修复失败，回退到暴力修改 `/etc/resolv.conf`。

### 2. 科学的镜像源管理

旧版同时使用了“阿里云的 Jammy 源”和“清华的 Focal 源”，这导致了严重的包版本冲突。新版实施了：

- **智能测速**：自动测试 阿里云、清华、腾讯、官方源 的连通性，选择最快的一个。
- **同源策略**：选定一个镜像站后，Ubuntu 22.04 (主源) 和 20.04 (兼容源) **全部** 指向该镜像站，杜绝版本割裂。
- **Apt Pinning**：通过 `/etc/apt/preferences.d/99optimize-jammy` 锁定主源优先级 (1001)，强制系统优先使用 22.04 的包。

### 3. Libssl 双保险下载

旧版仅从 `download.jiasion.cn` 下载 `libssl1.1`，一旦该域名 DNS 被劫持或服务器宕机，安装就会中断。

- **主线路**：`download.jiasion.cn` (内网/优化线路)
- **备用线路**：`archive.ubuntu.com` (Ubuntu 官方归档，全球 CDN)
- **机制**：如果主线路下载失败，自动无缝切换到备用线路。

### 4. 彻底的清理与重构

- **移除废弃代码**：删除了所有与 `jsthrdserver` 相关的服务控制代码（该服务在新架构中已移除）。
- **MongoDB 兼容**：增强了 GPG 密钥导入逻辑，如果密钥服务器连接失败，自动启用 `[trusted=yes]` 模式，确保 MongoDB 4.4 能够安装。

### 5. 增强的时区配置

旧版仅使用 `cp` 命令复制时区文件，在容器或特定环境下可能无效。新版采用四状漏斗式配置：

1. 尝试 `timedatectl set-timezone Asia/Shanghai` (Systemd 标准方式)
2. 尝试 `ln -s` 软链接修改 `/etc/localtime`
3. 尝试 `cp` 强制复制文件
4. **兜底交互**：如果以上自动方式全失败，自动调出 `dpkg-reconfigure tzdata` 交互界面供用户手动选择。
5. **自检**：每一步后都会运行 `date` 检查是否生效，确保万无一失。

## 📂 使用说明

新脚本保持了完全兼容的调用方式：

```bash
# 安装
sudo ./srv_ubuntu.sh install

# 重装
sudo ./srv_ubuntu.sh reinstall
```

日志文件将自动生成在脚本运行目录，格式为 `jiasion_install_YYYYMMDD_HHMMSS.log`。
