-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinstall.sh
More file actions
186 lines (157 loc) · 6.53 KB
/
Copy pathinstall.sh
File metadata and controls
186 lines (157 loc) · 6.53 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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#!/bin/sh
# ==============================================================================
# Argon ONE V3 Fan Control Automated Installer for OpenWrt (Raspberry Pi 5)
# Author: ciwga
# Version: 3.1.1
# Description: Universal installer supporting both legacy opkg and modern apk.
# ==============================================================================
REPO_USER="ciwga"
REPO_NAME="luci-app-argononev3-fancontrol"
GREEN='\033[0;32m'; RED='\033[0;31m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; NC='\033[0m'
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_err() { echo -e "${RED}[ERROR]${NC} $1"; }
log_step() { echo -e "${CYAN}>>> $1${NC}"; }
echo "========================================================"
echo " Argon ONE V3 Fan Control Installer v3.1.1 "
echo " OpenWrt / Raspberry Pi 5 "
echo "========================================================"
if [ "$(id -u)" -ne 0 ]; then
log_err "This script must be run as root."
exit 1
fi
# ==============================================================================
# PHASE 0: PRE-INSTALL CLEANUP (Clean-Slate)
# ==============================================================================
log_step "Phase 0: Pre-Install Cleanup"
if [ -f "/etc/init.d/argon_daemon" ]; then
log_info "Stopping existing installation..."
/etc/init.d/argon_daemon stop >/dev/null 2>&1 || true
/etc/init.d/argon_daemon disable >/dev/null 2>&1 || true
fi
killall -9 argon_fan_control.sh 2>/dev/null || true
killall -9 argon_update.sh 2>/dev/null || true
rm -f /var/run/argon_fan.status /var/run/argon_fan.status.tmp /var/run/argon_fan.lock/pid 2>/dev/null || true
rmdir /var/run/argon_fan.lock 2>/dev/null || true
rm -f /etc/argon_version /tmp/argon_update.* /tmp/argononev3_latest.* /tmp/argon_update_install.log 2>/dev/null || true
rm -f /etc/config/argononev3-opkg /etc/config/argononev3.bak 2>/dev/null || true
rm -f /tmp/luci-indexcache /tmp/luci-modulecache/* 2>/dev/null || true
# Fan off during upgrade window
for dev in /dev/i2c-*; do
[ -e "$dev" ] || continue
bus="${dev##*-}"
if i2cdetect -y -r "$bus" 2>/dev/null | grep -q "1a"; then
i2cset -y -f "$bus" 0x1a 0x80 0x00 2>/dev/null || true
log_info "Fan MCU set to OFF on bus $bus."
break
fi
done
log_info "Cleanup complete."
# ==============================================================================
# PACKAGE MANAGER DETECTION
# ==============================================================================
if command -v apk >/dev/null 2>&1; then
PKG_MGR="apk"
PKG_EXT="apk"
INSTALL_CMD="apk add --force-broken-world --allow-untrusted"
log_info "Detected modern OpenWrt with apk package manager."
else
PKG_MGR="opkg"
PKG_EXT="ipk"
INSTALL_CMD="opkg install --force-maintainer --force-overwrite"
log_info "Detected legacy OpenWrt with opkg package manager."
fi
# ==============================================================================
# STEP 1: DEPENDENCIES
# ==============================================================================
log_step "Step 1: Installing Dependencies"
if [ "$PKG_MGR" = "apk" ]; then
apk update >/dev/null 2>&1
if apk add i2c-tools; then
log_info "'i2c-tools' ready."
else
log_err "Failed to install 'i2c-tools'."
exit 1
fi
else
opkg update >/dev/null 2>&1
if opkg install i2c-tools; then
log_info "'i2c-tools' ready."
else
log_err "Failed to install 'i2c-tools'."
exit 1
fi
fi
# ==============================================================================
# STEP 2: DOWNLOAD & INSTALL PACKAGE
# ==============================================================================
log_step "Step 2: Downloading Latest Package ($PKG_EXT)"
API_URL="https://api.github.com/repos/$REPO_USER/$REPO_NAME/releases/latest"
RELEASE_JSON=$(wget -qO- "$API_URL" 2>/dev/null) || { log_err "GitHub API unreachable."; exit 1; }
DOWNLOAD_URL=$(echo "$RELEASE_JSON" | sed -n 's/.*"browser_download_url": *"\([^"]*\.'$PKG_EXT'\)".*/\1/p' | head -n 1)
REMOTE_TAG=$(echo "$RELEASE_JSON" | sed -n 's/.*"tag_name": *"\([^"]*\)".*/\1/p' | head -n 1)
if [ -z "$DOWNLOAD_URL" ]; then
log_err "No .$PKG_EXT found in latest release."
exit 1
fi
log_info "Latest: ${REMOTE_TAG:-unknown}"
PKG_FILE="/tmp/argononev3_latest.$PKG_EXT"
if wget --no-check-certificate -q -O "$PKG_FILE" "$DOWNLOAD_URL"; then
log_info "Download complete."
if $INSTALL_CMD "$PKG_FILE"; then
log_info "Package installed successfully."
else
log_err "Installation failed."; rm -f "$PKG_FILE"; exit 1
fi
rm -f "$PKG_FILE"
else
log_err "Download failed."; exit 1
fi
# ==============================================================================
# STEP 3: I2C HARDWARE CONFIG
# ==============================================================================
log_step "Step 3: Hardware Configuration (I2C)"
CONFIG_FILE="/boot/config.txt"
I2C_PARAM="dtparam=i2c_arm=on"
REBOOT_REQUIRED=0
if [ -f "$CONFIG_FILE" ]; then
if grep -q "^$I2C_PARAM" "$CONFIG_FILE"; then
log_info "I2C already enabled."
else
cp "$CONFIG_FILE" "$CONFIG_FILE.bak"
echo "" >> "$CONFIG_FILE"
echo "# Added by Argon ONE Installer" >> "$CONFIG_FILE"
echo "$I2C_PARAM" >> "$CONFIG_FILE"
log_info "I2C enabled. Reboot required."
REBOOT_REQUIRED=1
fi
else
log_warn "$CONFIG_FILE not found. Enable I2C manually if needed."
fi
# ==============================================================================
# STEP 4: SERVICE INIT
# ==============================================================================
log_step "Step 4: Service Initialization"
if [ ! -f "/etc/init.d/argon_daemon" ]; then
log_err "/etc/init.d/argon_daemon missing. Install may be broken."
exit 1
fi
if [ -f "/etc/argon_version" ]; then
log_info "Installed version: $(cat /etc/argon_version)"
fi
/etc/init.d/rpcd restart >/dev/null 2>&1 || true
/etc/init.d/argon_daemon enable
if [ "$REBOOT_REQUIRED" -eq 0 ]; then
/etc/init.d/argon_daemon start
log_info "Daemon started."
else
log_warn "Daemon enabled but requires reboot for I2C bus."
fi
echo "========================================================"
echo -e "${GREEN} INSTALLATION COMPLETE!${NC}"
echo "========================================================"
if [ "$REBOOT_REQUIRED" -eq 1 ]; then
echo -e "${YELLOW}IMPORTANT: Reboot required for I2C. Run: ${CYAN}reboot${NC}"
else
echo -e "Web UI: ${CYAN}LuCI -> Services -> Argon ONE V3 Fan${NC}"
fi