feat: soft channel
This commit is contained in:
523
cattools.sh
523
cattools.sh
@@ -13,7 +13,7 @@ if [ $(id -u) != "0" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
openwrt_release=$(cat /etc/openwrt_release)
|
openwrt_release=$(cat /etc/openwrt_release)
|
||||||
if ! grep -q "OpenWrt" <<< "$openwrt_release"; then
|
if ! grep -q "OpenWrt" <<<"$openwrt_release"; then
|
||||||
echo "Your system is not supported!"
|
echo "Your system is not supported!"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -92,11 +92,14 @@ skip_update=false
|
|||||||
|
|
||||||
while [[ "$#" -gt 0 ]]; do
|
while [[ "$#" -gt 0 ]]; do
|
||||||
case $1 in
|
case $1 in
|
||||||
-h) help ;;
|
-h) help ;;
|
||||||
-help) help ;;
|
-help) help ;;
|
||||||
-u) skip_update=true ;;
|
-u) skip_update=true ;;
|
||||||
-update) skip_update=true ;;
|
-update) skip_update=true ;;
|
||||||
*) echo "Unknown parameter passed: $1"; exit 1 ;;
|
*)
|
||||||
|
echo "Unknown parameter passed: $1"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
shift
|
shift
|
||||||
done
|
done
|
||||||
@@ -106,7 +109,7 @@ if [ "$skip_update" = false ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Setup
|
# Setup
|
||||||
setip(){
|
setip() {
|
||||||
DEFAULT_IP="192.168.1.4"
|
DEFAULT_IP="192.168.1.4"
|
||||||
while true; do
|
while true; do
|
||||||
read -p "Please enter the IP Addr and press Enter /// 请输入 IP (默认为 $DEFAULT_IP): " input_ip
|
read -p "Please enter the IP Addr and press Enter /// 请输入 IP (默认为 $DEFAULT_IP): " input_ip
|
||||||
@@ -114,7 +117,7 @@ setip(){
|
|||||||
input_ip=$DEFAULT_IP
|
input_ip=$DEFAULT_IP
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if echo "$input_ip" | grep -Eo '^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$' > /dev/null; then
|
if echo "$input_ip" | grep -Eo '^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$' >/dev/null; then
|
||||||
break
|
break
|
||||||
else
|
else
|
||||||
echo "Invalid IP address format /// 非法的 IP 地址格式,请重新输入"
|
echo "Invalid IP address format /// 非法的 IP 地址格式,请重新输入"
|
||||||
@@ -267,7 +270,6 @@ network_wizard() {
|
|||||||
uci set network.lan._orig_ifname="$bridge_ports"
|
uci set network.lan._orig_ifname="$bridge_ports"
|
||||||
uci set network.lan._orig_bridge='true'
|
uci set network.lan._orig_bridge='true'
|
||||||
|
|
||||||
|
|
||||||
echo "Network interfaces configured: WAN (eth0), LAN ($bridge_ports) /// 网口已配置: WAN (eth0), LAN ($bridge_ports)"
|
echo "Network interfaces configured: WAN (eth0), LAN ($bridge_ports) /// 网口已配置: WAN (eth0), LAN ($bridge_ports)"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
@@ -384,76 +386,76 @@ debug() {
|
|||||||
rm /www/logs.txt
|
rm /www/logs.txt
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cat /etc/banner >> /www/logs.txt
|
cat /etc/banner >>/www/logs.txt
|
||||||
date >> /www/logs.txt
|
date >>/www/logs.txt
|
||||||
|
|
||||||
echo "## RELEASE" >> /www/logs.txt
|
echo "## RELEASE" >>/www/logs.txt
|
||||||
echo "==========" >> /www/logs.txt
|
echo "==========" >>/www/logs.txt
|
||||||
cat /etc/catwrt_release >> /www/logs.txt
|
cat /etc/catwrt_release >>/www/logs.txt
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "## STATUS" >> /www/logs.txt
|
echo "## STATUS" >>/www/logs.txt
|
||||||
echo "=================" >> /www/logs.txt
|
echo "=================" >>/www/logs.txt
|
||||||
eval $UPTIME >> /www/logs.txt
|
eval $UPTIME >>/www/logs.txt
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "## Memory Usage" >> /www/logs.txt
|
echo "## Memory Usage" >>/www/logs.txt
|
||||||
echo "==========" >> /www/logs.txt
|
echo "==========" >>/www/logs.txt
|
||||||
free -h >> /www/logs.txt
|
free -h >>/www/logs.txt
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "## Disk Usage" >> /www/logs.txt
|
echo "## Disk Usage" >>/www/logs.txt
|
||||||
echo "==========" >> /www/logs.txt
|
echo "==========" >>/www/logs.txt
|
||||||
df -h >> /www/logs.txt
|
df -h >>/www/logs.txt
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "## Application" >> /www/logs.txt
|
echo "## Application" >>/www/logs.txt
|
||||||
echo "==========" >> /www/logs.txt
|
echo "==========" >>/www/logs.txt
|
||||||
opkg list_installed >> /www/logs.txt
|
opkg list_installed >>/www/logs.txt
|
||||||
|
|
||||||
echo "## SYSLOG" >> /www/logs.txt
|
echo "## SYSLOG" >>/www/logs.txt
|
||||||
echo "==========" >> /www/logs.txt
|
echo "==========" >>/www/logs.txt
|
||||||
logread >> /www/logs.txt
|
logread >>/www/logs.txt
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "## DMESG" >> /www/logs.txt
|
echo "## DMESG" >>/www/logs.txt
|
||||||
echo "==========" >> /www/logs.txt
|
echo "==========" >>/www/logs.txt
|
||||||
dmesg >> /www/logs.txt
|
dmesg >>/www/logs.txt
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "## Plugins" >> /www/logs.txt
|
echo "## Plugins" >>/www/logs.txt
|
||||||
echo "==========" >> /www/logs.txt
|
echo "==========" >>/www/logs.txt
|
||||||
cat /tmp/openclash.log >> /www/logs.txt
|
cat /tmp/openclash.log >>/www/logs.txt
|
||||||
cat /tmp/log/ssrplus.log >> /www/logs.txt
|
cat /tmp/log/ssrplus.log >>/www/logs.txt
|
||||||
cat /tmp/log/passwall.log >> /www/logs.txt
|
cat /tmp/log/passwall.log >>/www/logs.txt
|
||||||
cat /tmp/log/passwall2.log >> /www/logs.txt
|
cat /tmp/log/passwall2.log >>/www/logs.txt
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "## Task" >> /www/logs.txt
|
echo "## Task" >>/www/logs.txt
|
||||||
echo "==========" >> /www/logs.txt
|
echo "==========" >>/www/logs.txt
|
||||||
top -b -n 1 >> /www/logs.txt
|
top -b -n 1 >>/www/logs.txt
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "## Network Configuration" >> /www/logs.txt
|
echo "## Network Configuration" >>/www/logs.txt
|
||||||
echo "==========" >> /www/logs.txt
|
echo "==========" >>/www/logs.txt
|
||||||
ifconfig -a >> /www/logs.txt
|
ifconfig -a >>/www/logs.txt
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "## UCI Network" >> /www/logs.txt
|
echo "## UCI Network" >>/www/logs.txt
|
||||||
echo "==========" >> /www/logs.txt
|
echo "==========" >>/www/logs.txt
|
||||||
uci show network >> /www/logs.txt
|
uci show network >>/www/logs.txt
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "## Firewall" >> /www/logs.txt
|
echo "## Firewall" >>/www/logs.txt
|
||||||
echo "==========" >> /www/logs.txt
|
echo "==========" >>/www/logs.txt
|
||||||
iptables -L -v -n >> /www/logs.txt
|
iptables -L -v -n >>/www/logs.txt
|
||||||
ip6tables -L -v -n >> /www/logs.txt
|
ip6tables -L -v -n >>/www/logs.txt
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "## Routing Table" >> /www/logs.txt
|
echo "## Routing Table" >>/www/logs.txt
|
||||||
echo "==========" >> /www/logs.txt
|
echo "==========" >>/www/logs.txt
|
||||||
ip route >> /www/logs.txt
|
ip route >>/www/logs.txt
|
||||||
ip -6 route >> /www/logs.txt
|
ip -6 route >>/www/logs.txt
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
lan_ip=$(uci get network.lan.ipaddr)
|
lan_ip=$(uci get network.lan.ipaddr)
|
||||||
@@ -484,6 +486,7 @@ catwrt_update() {
|
|||||||
arch_self=$1
|
arch_self=$1
|
||||||
version_remote=$(curl -s "$API_URL" | jq -r ".$arch_self.version")
|
version_remote=$(curl -s "$API_URL" | jq -r ".$arch_self.version")
|
||||||
hash_remote=$(curl -s "$API_URL" | jq -r ".$arch_self.hash")
|
hash_remote=$(curl -s "$API_URL" | jq -r ".$arch_self.hash")
|
||||||
|
channel_remote=$(curl -s "$API_URL" | jq -r ".$arch_self.channel")
|
||||||
|
|
||||||
if [ $? -ne 0 ] || [ -z "$version_remote" ] || [ -z "$hash_remote" ]; then
|
if [ $? -ne 0 ] || [ -z "$version_remote" ] || [ -z "$hash_remote" ]; then
|
||||||
remote_error "version or hash"
|
remote_error "version or hash"
|
||||||
@@ -504,7 +507,7 @@ catwrt_update() {
|
|||||||
contrast_version() {
|
contrast_version() {
|
||||||
if [ "$version_remote" == "$version_local" ] && [ "$hash_remote" == "$hash_local" ]; then
|
if [ "$version_remote" == "$version_local" ] && [ "$hash_remote" == "$hash_local" ]; then
|
||||||
echo "======================================================="
|
echo "======================================================="
|
||||||
echo " Your CatWrt is up to date!"
|
echo " Your CatWrt is up to date! Also, you are using $channel_remote channel."
|
||||||
echo "======================================================="
|
echo "======================================================="
|
||||||
else
|
else
|
||||||
echo "======================================================="
|
echo "======================================================="
|
||||||
@@ -516,10 +519,12 @@ catwrt_update() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
print_version() {
|
print_version() {
|
||||||
echo "Local Version : $version_local"
|
|
||||||
echo "Remote Version : $version_remote"
|
|
||||||
echo "Local Hash : $hash_local"
|
|
||||||
echo "Remote Hash : $hash_remote"
|
echo "Remote Hash : $hash_remote"
|
||||||
|
echo "Remote Version : $version_remote"
|
||||||
|
echo "Source Channel : $channel_remote"
|
||||||
|
echo "Local Version : $version_local"
|
||||||
|
echo "Local Hash : $hash_local"
|
||||||
|
|
||||||
echo "======================================================="
|
echo "======================================================="
|
||||||
echo ""
|
echo ""
|
||||||
}
|
}
|
||||||
@@ -531,7 +536,7 @@ catwrt_update() {
|
|||||||
print_version
|
print_version
|
||||||
}
|
}
|
||||||
main
|
main
|
||||||
}
|
}
|
||||||
|
|
||||||
# Repo
|
# Repo
|
||||||
apply_repo() {
|
apply_repo() {
|
||||||
@@ -543,32 +548,32 @@ apply_repo() {
|
|||||||
openwrt_version=$(grep DISTRIB_RELEASE /etc/openwrt_release | cut -d"'" -f2)
|
openwrt_version=$(grep DISTRIB_RELEASE /etc/openwrt_release | cut -d"'" -f2)
|
||||||
arch=$(grep DISTRIB_TARGET /etc/openwrt_release | cut -d"/" -f1)
|
arch=$(grep DISTRIB_TARGET /etc/openwrt_release | cut -d"/" -f1)
|
||||||
case "$arch" in
|
case "$arch" in
|
||||||
x86_64)
|
x86_64)
|
||||||
if grep -q "R22.11.11" /etc/openwrt_release; then
|
if grep -q "R22.11.11" /etc/openwrt_release; then
|
||||||
version="v22.12"
|
version="v22.12"
|
||||||
elif grep -q "R23.2" /etc/openwrt_release; then
|
elif grep -q "R23.2" /etc/openwrt_release; then
|
||||||
version="v23.2"
|
version="v23.2"
|
||||||
else
|
else
|
||||||
echo "Unknown arch x86_64 /// 未知的 x86_64 版本"
|
echo "Unknown arch x86_64 /// 未知的 x86_64 版本"
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
aarch64_generic)
|
|
||||||
if grep -q "R22.12.1" /etc/openwrt_release; then
|
|
||||||
version="v22.12"
|
|
||||||
arch="rkarm"
|
|
||||||
else
|
|
||||||
echo "Unknown arch aarch64_generic ///未知的 aarch64_generic 版本"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Unknown arch $arch /// 未知的架构: $arch"
|
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
fi
|
||||||
|
;;
|
||||||
|
aarch64_generic)
|
||||||
|
if grep -q "R22.12.1" /etc/openwrt_release; then
|
||||||
|
version="v22.12"
|
||||||
|
arch="rkarm"
|
||||||
|
else
|
||||||
|
echo "Unknown arch aarch64_generic ///未知的 aarch64_generic 版本"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown arch $arch /// 未知的架构: $arch"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
else
|
else
|
||||||
echo "`/etc/catwrt_release` or `/etc/openwrt_release` Files do not exist /// 文件不存在或者系统损坏!"
|
echo "$(/etc/catwrt_release) or $(/etc/openwrt_release) Files do not exist /// 文件不存在或者系统损坏!"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -577,56 +582,56 @@ apply_repo() {
|
|||||||
|
|
||||||
select_repo() {
|
select_repo() {
|
||||||
case "$arch" in
|
case "$arch" in
|
||||||
amd64)
|
amd64)
|
||||||
if [ "$version" == "v23.8" ]; then
|
if [ "$version" == "v23.8" ]; then
|
||||||
REPO_URL="$BASE_URL/amd64"
|
REPO_URL="$BASE_URL/amd64"
|
||||||
elif [ "$version" == "v22.12" ]; then
|
elif [ "$version" == "v22.12" ]; then
|
||||||
REPO_URL="$BASE_URL/history/v22.12/amd64"
|
REPO_URL="$BASE_URL/history/v22.12/amd64"
|
||||||
elif [ "$version" == "v23.2" ]; then
|
elif [ "$version" == "v23.2" ]; then
|
||||||
REPO_URL="$BASE_URL/history/v23.2/amd64"
|
REPO_URL="$BASE_URL/history/v23.2/amd64"
|
||||||
elif [ "$version" == "v24.3" ]; then
|
elif [ "$version" == "v24.3" ]; then
|
||||||
REPO_URL="$BASE_URL/amd64"
|
REPO_URL="$BASE_URL/amd64"
|
||||||
elif [ "$version" == "v24.8" ]; then
|
elif [ "$version" == "v24.8" ]; then
|
||||||
REPO_URL="$BASE_URL/amd64"
|
REPO_URL="$BASE_URL/amd64"
|
||||||
else
|
else
|
||||||
echo "Unknown arch $arch /// 未知的架构: $arch"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
mt798x)
|
|
||||||
if [ "$version" == "v23.8" ]; then
|
|
||||||
REPO_URL="$BASE_URL/mt798x"
|
|
||||||
elif [ "$version" == "v22.12" ]; then
|
|
||||||
REPO_URL="$BASE_URL/history/v22.12/aarch64_cortex-a53"
|
|
||||||
elif [ "$version" == "v23.2" ]; then
|
|
||||||
REPO_URL="$BASE_URL/history/v23.2/mt7986a"
|
|
||||||
else
|
|
||||||
echo "Unknown arch mt798x /// 未知的 mt798x 版本"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
rkarm)
|
|
||||||
if [ "$version" == "v22.12" ]; then
|
|
||||||
REPO_URL="$BASE_URL/rkarm"
|
|
||||||
else
|
|
||||||
echo "Unknown arch rkarm /// 未知的 rkarm 版本"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Unknown arch $arch /// 未知的架构: $arch"
|
echo "Unknown arch $arch /// 未知的架构: $arch"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
fi
|
||||||
|
;;
|
||||||
|
mt798x)
|
||||||
|
if [ "$version" == "v23.8" ]; then
|
||||||
|
REPO_URL="$BASE_URL/mt798x"
|
||||||
|
elif [ "$version" == "v22.12" ]; then
|
||||||
|
REPO_URL="$BASE_URL/history/v22.12/aarch64_cortex-a53"
|
||||||
|
elif [ "$version" == "v23.2" ]; then
|
||||||
|
REPO_URL="$BASE_URL/history/v23.2/mt7986a"
|
||||||
|
else
|
||||||
|
echo "Unknown arch mt798x /// 未知的 mt798x 版本"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
rkarm)
|
||||||
|
if [ "$version" == "v22.12" ]; then
|
||||||
|
REPO_URL="$BASE_URL/rkarm"
|
||||||
|
else
|
||||||
|
echo "Unknown arch rkarm /// 未知的 rkarm 版本"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown arch $arch /// 未知的架构: $arch"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "Warning:"
|
echo "Warning:"
|
||||||
echo "软件源纯属免费分享,赞助我们复制链接在浏览器打开,这对我们继续保持在线服务有很大影响。"
|
echo "软件源纯属免费分享,赞助我们复制链接在浏览器打开,这对我们继续保持在线服务有很大影响。"
|
||||||
echo "本人不对所有软件进行保证,我们没有第三方商业服务,风险需要自行承担。"
|
echo "本人不对所有软件进行保证,我们没有第三方商业服务,风险需要自行承担。"
|
||||||
echo "支持我们: https://www.miaoer.xyz/sponsor"
|
echo "支持我们: https://www.miaoer.xyz/sponsor"
|
||||||
echo "你需要同意 CatWrt 软件源用户协议,请确认是否继续 (10 秒内按 [Ctrl]+[C] 取消操作)"
|
echo "你需要同意 CatWrt 软件源用户协议,请确认是否继续 (10 秒内按 [Ctrl]+[C] 取消操作)"
|
||||||
echo "=============================================================================="
|
echo "=============================================================================="
|
||||||
|
|
||||||
select_repo
|
select_repo
|
||||||
|
|
||||||
@@ -642,12 +647,12 @@ apply_repo() {
|
|||||||
choice=${choice:-5}
|
choice=${choice:-5}
|
||||||
|
|
||||||
case $choice in
|
case $choice in
|
||||||
1) conf_file="distfeeds.conf";;
|
1) conf_file="distfeeds.conf" ;;
|
||||||
2) conf_file="cfnetlify.conf";;
|
2) conf_file="cfnetlify.conf" ;;
|
||||||
3) conf_file="netlify.conf";;
|
3) conf_file="netlify.conf" ;;
|
||||||
4) conf_file="cfvercel.conf";;
|
4) conf_file="cfvercel.conf" ;;
|
||||||
5) conf_file="vercel.conf";;
|
5) conf_file="vercel.conf" ;;
|
||||||
*) conf_file="vercel.conf";;
|
*) conf_file="vercel.conf" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
CONF_PATH="$REPO_URL/$conf_file"
|
CONF_PATH="$REPO_URL/$conf_file"
|
||||||
@@ -671,17 +676,17 @@ apply_repo() {
|
|||||||
}
|
}
|
||||||
# catnd
|
# catnd
|
||||||
|
|
||||||
catnd(){
|
catnd() {
|
||||||
echo "$(date) - Starting CatWrt Network Diagnostics"
|
echo "$(date) - Starting CatWrt Network Diagnostics"
|
||||||
echo " "
|
echo " "
|
||||||
|
|
||||||
# Ping & PPPoE
|
# Ping & PPPoE
|
||||||
ping -c 3 223.5.5.5 > /dev/null
|
ping -c 3 223.5.5.5 >/dev/null
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "[Ping] Network connection succeeded!"
|
echo "[Ping] Network connection succeeded!"
|
||||||
echo " "
|
echo " "
|
||||||
else
|
else
|
||||||
ping -c 3 119.29.29.99 > /dev/null
|
ping -c 3 119.29.29.99 >/dev/null
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "[Ping] Network connection succeeded,But there may be problems!"
|
echo "[Ping] Network connection succeeded,But there may be problems!"
|
||||||
echo " "
|
echo " "
|
||||||
@@ -702,11 +707,11 @@ catnd(){
|
|||||||
dns_servers=$(echo $dns_config | awk -F "'" '{print $2}')
|
dns_servers=$(echo $dns_config | awk -F "'" '{print $2}')
|
||||||
|
|
||||||
for ip in $dns_servers; do
|
for ip in $dns_servers; do
|
||||||
if ! [[ $valid_dns =~ (^|[ ])$ip($|[ ]) ]]; then
|
if ! [[ $valid_dns =~ (^|[ ])$ip($|[ ]) ]]; then
|
||||||
echo "[DNS] Recommended to delete DNS $ip"
|
echo "[DNS] Recommended to delete DNS $ip"
|
||||||
echo " "
|
echo " "
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# Bad DNS
|
# Bad DNS
|
||||||
@@ -715,64 +720,64 @@ catnd(){
|
|||||||
|
|
||||||
bad_dns="114.114.114.114 114.114.115.115 119.29.29.29"
|
bad_dns="114.114.114.114 114.114.115.115 119.29.29.29"
|
||||||
if [[ $dns_config =~ $bad_dns ]]; then
|
if [[ $dns_config =~ $bad_dns ]]; then
|
||||||
echo "[DNS] DNS may be polluted or unreliable"
|
echo "[DNS] DNS may be polluted or unreliable"
|
||||||
echo " "
|
echo " "
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# nslookup
|
# nslookup
|
||||||
nslookup bilibili.com > /dev/null
|
nslookup bilibili.com >/dev/null
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
nslookup www.miaoer.xyz > /dev/null
|
nslookup www.miaoer.xyz >/dev/null
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "[DNS] DNS resolution succeeded"
|
echo "[DNS] DNS resolution succeeded"
|
||||||
echo " "
|
echo " "
|
||||||
else
|
else
|
||||||
echo "[DNS] NS resolution failed for 'www.miaoer.xyz'"
|
echo "[DNS] NS resolution failed for 'www.miaoer.xyz'"
|
||||||
echo "[DNS] Your DNS server may have issues"
|
echo "[DNS] Your DNS server may have issues"
|
||||||
echo " "
|
echo " "
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Public IP
|
# Public IP
|
||||||
echo CatWrt IPv4 Addr: $(curl --silent --connect-timeout 5 4.ipw.cn )
|
echo CatWrt IPv4 Addr: $(curl --silent --connect-timeout 5 4.ipw.cn)
|
||||||
echo " "
|
echo " "
|
||||||
|
|
||||||
curl 6.ipw.cn --connect-timeout 5 > /dev/null 2>&1
|
curl 6.ipw.cn --connect-timeout 5 >/dev/null 2>&1
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "[IPv6] IPv6 network connection timed out"
|
echo "[IPv6] IPv6 network connection timed out"
|
||||||
echo " "
|
echo " "
|
||||||
else
|
else
|
||||||
echo CatWrt IPv6 Addr: $(curl --silent 6.ipw.cn)
|
echo CatWrt IPv6 Addr: $(curl --silent 6.ipw.cn)
|
||||||
echo " "
|
echo " "
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# IPv6
|
# IPv6
|
||||||
resp=$(curl --silent test.ipw.cn)
|
resp=$(curl --silent test.ipw.cn)
|
||||||
|
|
||||||
if echo "$resp" | grep -q -E '240e|2408|2409|2401'; then
|
if echo "$resp" | grep -q -E '240e|2408|2409|2401'; then
|
||||||
echo "[IPv6] IPv6 access is preferred"
|
echo "[IPv6] IPv6 access is preferred"
|
||||||
echo " "
|
echo " "
|
||||||
else
|
else
|
||||||
echo "[IPv6] IPv4 access is preferred"
|
echo "[IPv6] IPv4 access is preferred"
|
||||||
echo " "
|
echo " "
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Default IP
|
# Default IP
|
||||||
ipaddr_config=$(grep '192.168.1.4' /etc/config/network)
|
ipaddr_config=$(grep '192.168.1.4' /etc/config/network)
|
||||||
|
|
||||||
if [ -z "$ipaddr_config" ]; then
|
if [ -z "$ipaddr_config" ]; then
|
||||||
echo "[Default-IP] address is not the catwrt default 192.168.1.4"
|
echo "[Default-IP] address is not the catwrt default 192.168.1.4"
|
||||||
echo "Please configure your network at 'https://www.miaoer.xyz/posts/network/quickstart-catwrt'"
|
echo "Please configure your network at 'https://www.miaoer.xyz/posts/network/quickstart-catwrt'"
|
||||||
echo " "
|
echo " "
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Bypass Gateway
|
# Bypass Gateway
|
||||||
wan_config=$(grep 'config interface' /etc/config/network | grep 'wan')
|
wan_config=$(grep 'config interface' /etc/config/network | grep 'wan')
|
||||||
|
|
||||||
if [ -z "$wan_config" ]; then
|
if [ -z "$wan_config" ]; then
|
||||||
echo "[Bypass Gateway] No config for 'wan' interface found in /etc/config/network"
|
echo "[Bypass Gateway] No config for 'wan' interface found in /etc/config/network"
|
||||||
echo "Please check if your device is set as a Bypass Gateway"
|
echo "Please check if your device is set as a Bypass Gateway"
|
||||||
echo " "
|
echo " "
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Rotuer Mode(PPPoE)
|
# Rotuer Mode(PPPoE)
|
||||||
@@ -790,16 +795,16 @@ catnd(){
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# IPv6 WAN6
|
# IPv6 WAN6
|
||||||
grep 'config interface' /etc/config/network | grep 'wan6' > /dev/null
|
grep 'config interface' /etc/config/network | grep 'wan6' >/dev/null
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "[wan6] Your IPv6 network may have issues"
|
echo "[wan6] Your IPv6 network may have issues"
|
||||||
echo " "
|
echo " "
|
||||||
fi
|
fi
|
||||||
|
|
||||||
grep 'dhcpv6' /etc/config/network > /dev/null
|
grep 'dhcpv6' /etc/config/network >/dev/null
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "[wan6] Your IPv6 network may have issues"
|
echo "[wan6] Your IPv6 network may have issues"
|
||||||
echo " "
|
echo " "
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Tcping
|
# Tcping
|
||||||
@@ -824,7 +829,7 @@ catnd(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Sysupgrade
|
# Sysupgrade
|
||||||
sysupgrade(){
|
sysupgrade() {
|
||||||
if [ "$(uname -m)" != "x86_64" ]; then
|
if [ "$(uname -m)" != "x86_64" ]; then
|
||||||
echo "仅有 x86_64 可以使用脚本进行系统升级。"
|
echo "仅有 x86_64 可以使用脚本进行系统升级。"
|
||||||
exit 1
|
exit 1
|
||||||
@@ -833,7 +838,7 @@ sysupgrade(){
|
|||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
disk_size=$(fdisk -l /dev/sda | grep "Disk /dev/sda:" | awk '{print $3}')
|
disk_size=$(fdisk -l /dev/sda | grep "Disk /dev/sda:" | awk '{print $3}')
|
||||||
if (( $(echo "$disk_size != 800.28" | bc -l) )); then
|
if (($(echo "$disk_size != 800.28" | bc -l))); then
|
||||||
echo "磁盘空间未修改或不匹配,无法继续升级。"
|
echo "磁盘空间未修改或不匹配,无法继续升级。"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -900,14 +905,14 @@ enhancement_menu() {
|
|||||||
echo
|
echo
|
||||||
read -p "请输入数字并回车(Please enter your choice): " choice
|
read -p "请输入数字并回车(Please enter your choice): " choice
|
||||||
case $choice in
|
case $choice in
|
||||||
1) configure_luci_mihomo ;;
|
1) configure_luci_mihomo ;;
|
||||||
2) configure_tailscale ;;
|
2) configure_tailscale ;;
|
||||||
3) configure_ttyd ;;
|
3) configure_ttyd ;;
|
||||||
4) manual_deploy_uhttpd_ssl_cert ;;
|
4) manual_deploy_uhttpd_ssl_cert ;;
|
||||||
5) openwrt_firstboot ;;
|
5) openwrt_firstboot ;;
|
||||||
6) reset_root_password ;;
|
6) reset_root_password ;;
|
||||||
0) menu ;;
|
0) menu ;;
|
||||||
*) echo "无效选项,请重试" && enhancement_menu ;;
|
*) echo "无效选项,请重试" && enhancement_menu ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -919,16 +924,16 @@ configure_luci_mihomo() {
|
|||||||
|
|
||||||
arch=$(uname -m)
|
arch=$(uname -m)
|
||||||
case "$arch" in
|
case "$arch" in
|
||||||
"x86_64")
|
"x86_64")
|
||||||
arch="amd64"
|
arch="amd64"
|
||||||
;;
|
;;
|
||||||
"aarch64")
|
"aarch64")
|
||||||
arch="arm64"
|
arch="arm64"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "[ERROR] 不支持的架构: $arch"
|
echo "[ERROR] 不支持的架构: $arch"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if ! opkg list_installed | grep -q luci-app-openclash; then
|
if ! opkg list_installed | grep -q luci-app-openclash; then
|
||||||
@@ -1005,30 +1010,30 @@ configure_luci_mihomo() {
|
|||||||
)
|
)
|
||||||
|
|
||||||
case $choice in
|
case $choice in
|
||||||
1)
|
1)
|
||||||
echo "正在更新 Mihomo 内核..."
|
echo "正在更新 Mihomo 内核..."
|
||||||
download_mihomo_core "clash_meta" "${clash_meta_urls[@]}"
|
download_mihomo_core "clash_meta" "${clash_meta_urls[@]}"
|
||||||
echo "正在更新原版内核..."
|
echo "正在更新原版内核..."
|
||||||
download_mihomo_core "clash" "${clash_urls[@]}"
|
download_mihomo_core "clash" "${clash_urls[@]}"
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
echo "正在更新 Mihomo 内核..."
|
echo "正在更新 Mihomo 内核..."
|
||||||
download_mihomo_core "clash_meta" "${clash_meta_urls[@]}"
|
download_mihomo_core "clash_meta" "${clash_meta_urls[@]}"
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
echo "正在更新原版内核..."
|
echo "正在更新原版内核..."
|
||||||
download_mihomo_core "clash" "${clash_urls[@]}"
|
download_mihomo_core "clash" "${clash_urls[@]}"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "[ERROR] 无效选项"
|
echo "[ERROR] 无效选项"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
echo "操作完成"
|
echo "操作完成"
|
||||||
}
|
}
|
||||||
|
|
||||||
configure_tailscale(){
|
configure_tailscale() {
|
||||||
if ! grep -q -E "catwrt|repo.miaoer.xyz" /etc/opkg/distfeeds.conf && ! ip a | grep -q -E "192\.168\.[0-9]+\.[0-9]+|10\.[0-9]+\.[0-9]+\.[0-9]+|172\.1[6-9]\.[0-9]+\.[0-9]+|172\.2[0-9]\.[0-9]+\.[0-9]+|172\.3[0-1]\.[0-9]+\.[0-9]+"; then
|
if ! grep -q -E "catwrt|repo.miaoer.xyz" /etc/opkg/distfeeds.conf && ! ip a | grep -q -E "192\.168\.[0-9]+\.[0-9]+|10\.[0-9]+\.[0-9]+\.[0-9]+|172\.1[6-9]\.[0-9]+\.[0-9]+|172\.2[0-9]\.[0-9]+\.[0-9]+|172\.3[0-1]\.[0-9]+\.[0-9]+"; then
|
||||||
echo "[ERROR] 请先配置软件源"
|
echo "[ERROR] 请先配置软件源"
|
||||||
menu
|
menu
|
||||||
@@ -1056,16 +1061,16 @@ configure_tailscale(){
|
|||||||
|
|
||||||
firewall_file="/etc/firewall.user"
|
firewall_file="/etc/firewall.user"
|
||||||
rules=("iptables -I FORWARD -i tailscale0 -j ACCEPT"
|
rules=("iptables -I FORWARD -i tailscale0 -j ACCEPT"
|
||||||
"iptables -I FORWARD -o tailscale0 -j ACCEPT"
|
"iptables -I FORWARD -o tailscale0 -j ACCEPT"
|
||||||
"iptables -t nat -I POSTROUTING -o tailscale0 -j MASQUERADE")
|
"iptables -t nat -I POSTROUTING -o tailscale0 -j MASQUERADE")
|
||||||
|
|
||||||
for rule in "${rules[@]}"; do
|
for rule in "${rules[@]}"; do
|
||||||
if ! grep -q "^$rule$" $firewall_file; then
|
if ! grep -q "^$rule$" $firewall_file; then
|
||||||
echo $rule >> $firewall_file
|
echo $rule >>$firewall_file
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
lan_ip=$(uci get network.lan.ipaddr)
|
lan_ip=$(uci get network.lan.ipaddr)
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "点击上面的 tailscale login 链接然后再进行以下配置"
|
echo "点击上面的 tailscale login 链接然后再进行以下配置"
|
||||||
@@ -1093,7 +1098,7 @@ configure_tailscale(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
# TTYD (NOT SAFETY)
|
# TTYD (NOT SAFETY)
|
||||||
configure_ttyd(){
|
configure_ttyd() {
|
||||||
if ! opkg list_installed | grep -q "luci-app-ttyd" || ! opkg list_installed | grep -q "ttyd"; then
|
if ! opkg list_installed | grep -q "luci-app-ttyd" || ! opkg list_installed | grep -q "ttyd"; then
|
||||||
echo "[ERROR]未安装 luci-app-ttyd 或 ttyd 软件包,请先配置软件源并安装这些软件包"
|
echo "[ERROR]未安装 luci-app-ttyd 或 ttyd 软件包,请先配置软件源并安装这些软件包"
|
||||||
menu
|
menu
|
||||||
@@ -1127,8 +1132,8 @@ configure_ttyd(){
|
|||||||
if grep -q "option command '/bin/login -f root'" /etc/config/ttyd; then
|
if grep -q "option command '/bin/login -f root'" /etc/config/ttyd; then
|
||||||
sed -i "s/option command '\/bin\/login -f root'/option command '\/bin\/login'/" /etc/config/ttyd
|
sed -i "s/option command '\/bin\/login -f root'/option command '\/bin\/login'/" /etc/config/ttyd
|
||||||
/etc/init.d/ttyd restart
|
/etc/init.d/ttyd restart
|
||||||
echo ""
|
echo ""
|
||||||
echo "TTYD 配置已还原为默认配置"
|
echo "TTYD 配置已还原为默认配置"
|
||||||
else
|
else
|
||||||
sed -i "s/option command '\/bin\/login'/option command '\/bin\/login -f root'/" /etc/config/ttyd
|
sed -i "s/option command '\/bin\/login'/option command '\/bin\/login -f root'/" /etc/config/ttyd
|
||||||
/etc/init.d/ttyd restart
|
/etc/init.d/ttyd restart
|
||||||
@@ -1156,10 +1161,10 @@ manual_deploy_uhttpd_ssl_cert() {
|
|||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! grep -q "list listen_http '0.0.0.0:80'" /etc/config/uhttpd || \
|
if ! grep -q "list listen_http '0.0.0.0:80'" /etc/config/uhttpd ||
|
||||||
! grep -q "list listen_http '\[::\]:80'" /etc/config/uhttpd || \
|
! grep -q "list listen_http '\[::\]:80'" /etc/config/uhttpd ||
|
||||||
! grep -q "list listen_https '0.0.0.0:443'" /etc/config/uhttpd || \
|
! grep -q "list listen_https '0.0.0.0:443'" /etc/config/uhttpd ||
|
||||||
! grep -q "list listen_https '\[::\]:443'" /etc/config/uhttpd; then
|
! grep -q "list listen_https '\[::\]:443'" /etc/config/uhttpd; then
|
||||||
echo "[ERROR] uhttpd 配置文件中的监听端口配置已被修改,请检查!"
|
echo "[ERROR] uhttpd 配置文件中的监听端口配置已被修改,请检查!"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -1173,7 +1178,7 @@ manual_deploy_uhttpd_ssl_cert() {
|
|||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
lan_ip=$(uci get network.lan.ipaddr)
|
lan_ip=$(uci get network.lan.ipaddr)
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "请在浏览器中访问 http://$lan_ip/cgi-bin/luci/admin/system/filetransfer 上传证书 zip 文件。"
|
echo "请在浏览器中访问 http://$lan_ip/cgi-bin/luci/admin/system/filetransfer 上传证书 zip 文件。"
|
||||||
@@ -1288,38 +1293,38 @@ while true; do
|
|||||||
menu
|
menu
|
||||||
read choice
|
read choice
|
||||||
case $choice in
|
case $choice in
|
||||||
1)
|
1)
|
||||||
setip
|
setip
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
network_wizard
|
network_wizard
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
debug
|
debug
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
catwrt_update
|
catwrt_update
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
apply_repo
|
apply_repo
|
||||||
;;
|
;;
|
||||||
6)
|
6)
|
||||||
catnd
|
catnd
|
||||||
;;
|
;;
|
||||||
7)
|
7)
|
||||||
sysupgrade
|
sysupgrade
|
||||||
;;
|
;;
|
||||||
8)
|
8)
|
||||||
enhancement_menu
|
enhancement_menu
|
||||||
;;
|
;;
|
||||||
0)
|
0)
|
||||||
echo "Exiting..."
|
echo "Exiting..."
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Invalid choice, please try again"
|
echo "Invalid choice, please try again"
|
||||||
read -p "Press [Enter] key to continue..."
|
read -p "Press [Enter] key to continue..."
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user