XanMod Kernel 一键安装脚本 (适用于 Debian/Ubuntu 及其衍生版)

Author Avatar
青枫 昨天 23:51
  • 在其它设备中阅读本文章

这个脚本会 自动完成所有必要步骤

  1. 检查并安装依赖:确保 curl, gawk, gpg 等必要工具存在。
  2. 自动检测 CPU 级别 :运行官方检查脚本,判断您的 CPU 支持 v2, v3 还是 v4
  3. 自动构建软件包名 :根据检测结果,确定要安装的包是 linux-xanmod-x64v2 还是 linux-xanmod-x64v3 等。
  4. 添加 GPG 密钥和 APT 仓库
  5. 更新软件包列表并安装选定的内核
  6. 提供清晰的彩色输出 ,让您知道每一步都在做什么。
  7. 包含完整的错误检查 ,任何一步失败都会停止并报告错误。

一键安装命令

您只需复制下面这一行命令,粘贴到您的终端中,然后按回车键即可。脚本会请求您输入 sudo 密码。

bash <(curl -sL https://cdn.vdj.me/shell_scripts/install-xanmod.sh)

脚本完整内容

这是上面一键命令所执行的脚本的全部代码,您可以审查它以确保其安全性。

#!/bin/bash

# ==============================================================================
# XanMod Kernel 一键安装脚本 (适用于 Debian/Ubuntu 及其衍生版) - v1.1
#
# 更新日志:
# v1.2 - 新增检查当前发行版是否被支持
# v1.1 - 修正了对 lsb-release 依赖的检查逻辑。
#
# 功能:
# 1. 自动检查并提示安装依赖。
# 2. 自动检测 CPU 的 x86-64 psABI 级别 (v2, v3, v4)。
# 3. 自动添加 XanMod 的 GPG 密钥和 APT 仓库。
# 4. 自动安装与您 CPU 最匹配的 XanMod 内核版本。
# 5. 全程提供清晰的彩色日志和错误处理。
# ==============================================================================

# --- 配置 ---
# 设置颜色代码以便输出
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color

# --- 函数定义 ---
log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# --- 脚本开始 ---
clear
echo -e "${GREEN}===========================================${NC}"
echo -e "${GREEN}==    XanMod Kernel 一键安装脚本     ==${NC}"
echo -e "${GREEN}===========================================${NC}"
echo

# 1. 权限检查:确保以 root 用户身份运行
if [[ $EUID -ne 0 ]]; then
   # 如果不是 root,尝试使用 sudo 重新执行脚本
   log_warn "此脚本需要 root 权限,正在尝试使用 sudo 重新运行..."
   # exec sudo bash "$0" "$@" # 在交互式 shell 中这可能导致问题,直接提示更好
   log_error "请使用 'sudo' 或以 root 用户身份运行此脚本。"
   exit 1
fi

# 2. 依赖检查:确保必要的工具已安装
# --- 修正点 ---
# 将依赖检查中的 "lsb-release" (包名) 修改为 "lsb_release" (命令名)
DEPS=("curl" "gawk" "gpg" "lsb_release" "wget")
MISSING_DEPS_PKGS=() # 用于存放需要安装的包名
log_info "正在检查必要的依赖工具..."
for dep_cmd in "${DEPS[@]}"; do
    if ! command -v "$dep_cmd" &> /dev/null; then
        # 将命令名转换回可能的包名
        pkg_name="${dep_cmd//_/-}" 
        MISSING_DEPS_PKGS+=("$pkg_name")
    fi
done

if [ ${#MISSING_DEPS_PKGS[@]} -gt 0 ]; then
    log_error "检测到以下依赖缺失: ${MISSING_DEPS_PKGS[*]}"
    log_info "请先运行 'sudo apt update && sudo apt install ${MISSING_DEPS_PKGS[*]}' 安装它们。"
    exit 1
fi
log_info "所有依赖均已满足。"
echo

# 3. 检测 CPU 支持的 x86-64 psABI 级别
log_info "正在检测您的 CPU x86-64 psABI 级别..."
CHECK_URL="https://dl.xanmod.org/check_x86-64_psabi.sh"
CPU_CHECK_OUTPUT=$(curl -s "$CHECK_URL" | gawk -f -)

if [ -z "$CPU_CHECK_OUTPUT" ]; then
    log_error "无法从 $CHECK_URL 获取 CPU 信息。请检查您的网络连接。"
    exit 1
fi

ABI_VERSION=$(echo "$CPU_CHECK_OUTPUT" | grep -oP 'x86-64-v\K\d')

if [ -z "$ABI_VERSION" ]; then
    log_error "无法解析 CPU 支持级别。脚本输出为: $CPU_CHECK_OUTPUT"
    log_info "这可能意味着您的 CPU 非常老旧,不支持任何优化级别。脚本无法继续。"
    exit 1
fi

log_info "检测到您的 CPU 支持: x86-64-v${ABI_VERSION}"

# 根据 XanMod 仓库规则调整版本
if [ "$ABI_VERSION" -ge 3 ]; then
    INSTALL_VERSION="v3"
else
    INSTALL_VERSION="v2"
fi
PACKAGE_NAME="linux-xanmod-x64${INSTALL_VERSION}"
log_info "根据您的 CPU 和 XanMod 仓库情况,将为您安装软件包: ${YELLOW}${PACKAGE_NAME}${NC}"
echo

# 新增一个支持的发行版列表
SUPPORTED_DISTROS=("bookworm" "trixie" "sid" "noble" "oracular" "plucky" "questing" "faye" "wilma" "xia")
 
DISTRO_CODENAME=$(lsb_release -sc)
 
# 检查当前发行版是否被支持
if [[ ! " ${SUPPORTED_DISTROS[*]} " =~ " ${DISTRO_CODENAME} " ]]; then
    log_error "您的操作系统 '${DISTRO_CODENAME}' 已不受 XanMod 官方 APT 仓库支持。"
    log_info "支持的发行版列表为: ${SUPPORTED_DISTROS[*]}"
    log_info "建议您采用手动下载 .deb 包的方式进行安装,或将系统升级到受支持的版本。"
    exit 1
fi

# 4. 添加 XanMod GPG 密钥
KEYRING_PATH="/etc/apt/keyrings/xanmod-archive-keyring.gpg"
log_info "正在添加 XanMod GPG 密钥到 ${KEYRING_PATH}..."
if wget -qO - https://dl.xanmod.org/archive.key | gpg --dearmor -vo "$KEYRING_PATH"; then
    log_info "GPG 密钥添加成功。"
else
    log_error "添加 GPG 密钥失败。"
    exit 1
fi
echo

# 5. 添加 XanMod APT 仓库
SOURCE_LIST_PATH="/etc/apt/sources.list.d/xanmod-release.list"
DISTRO_CODENAME=$(lsb_release -sc)
log_info "正在为您的发行版 '${DISTRO_CODENAME}' 添加 XanMod APT 仓库..."
echo "deb [signed-by=${KEYRING_PATH}] http://deb.xanmod.org ${DISTRO_CODENAME} main" | tee "$SOURCE_LIST_PATH" > /dev/null
if [ $? -eq 0 ]; then
    log_info "APT 仓库添加成功。"
else
    log_error "添加 APT 仓库失败。"
    exit 1
fi
echo

# 6. 更新软件包列表并安装内核
log_info "正在更新软件包列表 (apt update)..."
if ! apt-get update; then
    log_error "运行 'apt update' 失败。请检查您的软件源配置和网络。"
    exit 1
fi
log_info "软件包列表更新成功。"
echo

log_info "准备安装内核: ${YELLOW}${PACKAGE_NAME}${NC}"
log_warn "安装过程可能需要一些时间,请耐心等待..."
if ! apt-get install -y "$PACKAGE_NAME"; then
    log_error "安装 ${PACKAGE_NAME} 失败。请检查上面的错误信息。"
    exit 1
fi

# --- 结束 ---
echo
echo -e "${GREEN}======================================================${NC}"
log_info "恭喜!XanMod 内核 (${PACKAGE_NAME}) 已成功安装!"
log_warn "为了使用新内核,您需要 ${YELLOW}重启您的系统${NC}。"
log_info "您可以使用 'reboot' 命令来重启。"
echo
log_info "如果需要为 NVIDIA 驱动等构建外部内核模块 (dkms),"
log_info "建议安装以下依赖: ${YELLOW}apt install dkms libdw-dev clang lld llvm${NC}"
echo -e "${GREEN}======================================================${NC}"

exit 0