-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinstall.sh
More file actions
130 lines (106 loc) · 2.87 KB
/
install.sh
File metadata and controls
130 lines (106 loc) · 2.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/usr/bin/env bash
set -e
REPO_URL="https://github.com/tokyohost/virtual_fun_kernel.git"
REPO_DIR="virtual_fun_kernel"
MODULE_NAME="virtual-fan"
MODULE_REAL_NAME="virtual_fan"
MODULE_VERSION="1.0"
SRC_SUBDIR="virtual_fan_v1"
DKMS_SRC="/usr/src/${MODULE_NAME}-${MODULE_VERSION}"
echo "==============================="
echo " Virtual Fan DKMS Installer"
echo "==============================="
# 必须 root
if [[ $EUID -ne 0 ]]; then
echo "[ERROR] Please run as root"
exit 1
fi
# 检查系统
if [ ! -f /etc/os-release ]; then
echo "[ERROR] Cannot detect OS"
exit 1
fi
. /etc/os-release
echo "[INFO] Detected OS: $ID"
# ---------- 工具检查 ----------
need_cmd() {
command -v "$1" >/dev/null 2>&1
}
# ---------- 安装依赖 ----------
install_deps_debian() {
apt update
apt install -y git dkms build-essential linux-headers-$(uname -r)
}
install_deps_rhel() {
yum install -y git gcc make dkms kernel-devel kernel-headers
}
echo "[INFO] Installing dependencies..."
case "$ID" in
debian|ubuntu)
install_deps_debian
;;
centos|rhel|rocky|almalinux)
install_deps_rhel
;;
*)
echo "[ERROR] Unsupported OS: $ID"
exit 1
;;
esac
# ---------- 检查 git ----------
if ! need_cmd git; then
echo "[ERROR] git not installed"
exit 1
fi
# ---------- 获取源码 ----------
WORKDIR="/usr/local/src"
mkdir -p "$WORKDIR"
cd "$WORKDIR"
if [ ! -d "$REPO_DIR" ]; then
echo "[INFO] Cloning repository..."
git config --global http.version HTTP/1.1
git clone "$REPO_URL"
else
echo "[INFO] Repository already exists, pulling latest..."
cd "$REPO_DIR"
git pull
cd ..
fi
cd "$REPO_DIR"
if [ ! -d "$SRC_SUBDIR" ]; then
echo "[ERROR] ${SRC_SUBDIR} not found in repository"
exit 1
fi
# ---------- 安装到 /usr/src ----------
echo "[INFO] Installing source to ${DKMS_SRC}"
rm -rf "$DKMS_SRC"
mkdir -p "$DKMS_SRC"
cp -r "${SRC_SUBDIR}/"* "$DKMS_SRC/"
if [ ! -f "$DKMS_SRC/dkms.conf" ]; then
echo "[ERROR] dkms.conf not found"
exit 1
fi
# ---------- DKMS ----------
echo "[INFO] Registering DKMS module"
dkms remove -m "$MODULE_NAME" -v "$MODULE_VERSION" --all >/dev/null 2>&1 || true
dkms add -m "$MODULE_NAME" -v "$MODULE_VERSION"
dkms build -m "$MODULE_NAME" -v "$MODULE_VERSION"
dkms install -m "$MODULE_NAME" -v "$MODULE_VERSION"
# ---------- 开机自动加载 ----------
echo "[INFO] Enabling auto-load on boot"
echo "$MODULE_REAL_NAME" > /etc/modules-load.d/${MODULE_REAL_NAME}.conf
# ---------- 立即加载 ----------
echo "[INFO] Loading module now"
modprobe "$MODULE_REAL_NAME" || true
# ---------- 验证 ----------
echo
echo "========== DKMS STATUS =========="
dkms status
echo "================================="
if lsmod | grep -q "$MODULE_REAL_NAME"; then
echo "[SUCCESS] Module ${MODULE_REAL_NAME} loaded successfully"
else
echo "[WARNING] Module installed but not currently loaded"
fi
echo
echo "[DONE] virtual_fan DKMS installation complete"