Compare commits
162 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d6f90c818f | ||
|
|
18d13f2105 | ||
|
|
80837ace36 | ||
|
|
7c07c51993 | ||
|
|
ef1fd70a32 | ||
|
|
70290746b4 | ||
|
|
e98a113b2f | ||
|
|
c9227d9c36 | ||
|
|
7fd3d79669 | ||
|
|
ac0e024787 | ||
|
|
3f2485dbe4 | ||
|
|
6794271c5e | ||
|
|
4447244b61 | ||
|
|
72c9061cff | ||
|
|
7772e82631 | ||
|
|
bcf7b347b2 | ||
|
|
dc539cb51d | ||
|
|
6b9b83be35 | ||
|
|
daf765f7ee | ||
|
|
fd57de5861 | ||
|
|
a64f00c6bf | ||
|
|
1662b9b31a | ||
|
|
69ca9ae4c2 | ||
|
|
d2ad04b1c7 | ||
|
|
c5f7030ff9 | ||
|
|
95af248016 | ||
|
|
4124a2e458 | ||
|
|
15461b3fdd | ||
|
|
aa0393f456 | ||
|
|
a8be67520a | ||
|
|
8524d7a7fb | ||
|
|
4874e3fbe1 | ||
|
|
bf5bb983c1 | ||
|
|
77908af189 | ||
|
|
f27a195bd9 | ||
|
|
732cee1e59 | ||
|
|
3ac3fe267f | ||
|
|
e179241dc2 | ||
|
|
b4069661b3 | ||
|
|
2b2c18ac99 | ||
|
|
22361515cf | ||
|
|
28dc17cd7e | ||
|
|
d9df06b0d9 | ||
|
|
69969841d8 | ||
|
|
b73de1a9aa | ||
|
|
d27ebdb0a8 | ||
|
|
28d9fe48c3 | ||
|
|
21a5186940 | ||
|
|
3376b24394 | ||
|
|
8e56a7443c | ||
|
|
aae2f0ac18 | ||
|
|
207dbdf8d1 | ||
|
|
9fb79b6c32 | ||
|
|
08cc386e19 | ||
|
|
39c93ef417 | ||
|
|
862af13667 | ||
|
|
31873d25bf | ||
|
|
863f37eb99 | ||
|
|
1eb9734e86 | ||
|
|
5e703692ee | ||
|
|
9f5ab57e75 | ||
|
|
6a6bf0e499 | ||
|
|
9aec51a267 | ||
|
|
5f1b1bc3cc | ||
|
|
c4a6909feb | ||
|
|
5ad7785eae | ||
|
|
3f0475973c | ||
|
|
b0ae77bdf6 | ||
|
|
3c9e6d9255 | ||
|
|
a6f60e64a8 | ||
|
|
cc38eeeb47 | ||
|
|
42946a19fc | ||
|
|
cdbf02eb9b | ||
|
|
86c52081cc | ||
|
|
886843cca6 | ||
|
|
4f80fd66f2 | ||
|
|
0ef13778d4 | ||
|
|
527127f539 | ||
|
|
234daf87b3 | ||
|
|
d5157eb68b | ||
|
|
1d2744ab3e | ||
|
|
4527c9deed | ||
|
|
c6d17d5742 | ||
|
|
0e0ba55f0b | ||
|
|
cc422abb1e | ||
|
|
addccfcb12 | ||
|
|
9da78cb31d | ||
|
|
a58820ec76 | ||
|
|
7b38bf2fc5 | ||
|
|
a5bc88db23 | ||
|
|
ca40f6bbba | ||
|
|
70f3256576 | ||
|
|
17e84428a4 | ||
|
|
18bb5069ce | ||
|
|
155fb8c970 | ||
|
|
85d13e2483 | ||
|
|
1991ef3489 | ||
|
|
c5d7c8d8b1 | ||
|
|
a9a0a41448 | ||
|
|
d17ca606dd | ||
|
|
301565f8f5 | ||
|
|
b863bb6bc4 | ||
|
|
725c052b7c | ||
|
|
df153c9be0 | ||
|
|
13fbc6923f | ||
|
|
7bd23131a3 | ||
|
|
3b37c04cb6 | ||
|
|
b36f324637 | ||
|
|
66d230f748 | ||
|
|
d48402a101 | ||
|
|
e434b00703 | ||
|
|
949c927a8d | ||
|
|
a246e41079 | ||
|
|
ce06dc9d45 | ||
|
|
7b08547f16 | ||
|
|
3c6a40dae5 | ||
|
|
258ffc85e0 | ||
|
|
bfa25f97e1 | ||
|
|
99b738da18 | ||
|
|
6ab2f27fc6 | ||
|
|
cede36be16 | ||
|
|
dead1a2d84 | ||
|
|
3b09e06c2c | ||
|
|
4aaa809aad | ||
|
|
52d2d7f25e | ||
|
|
f683608cf3 | ||
|
|
e0a7f79e80 | ||
|
|
b357d312f7 | ||
|
|
27e6563d2c | ||
|
|
7fef15b4a8 | ||
|
|
eee0f06faf | ||
|
|
0c659083dc | ||
|
|
d0d8cd57eb | ||
|
|
599fd0ccc9 | ||
|
|
e711ad117f | ||
|
|
63307cf67c | ||
|
|
b33d7daaa1 | ||
|
|
e2691a522b | ||
|
|
651f21c7b6 | ||
|
|
392b8f6877 | ||
|
|
f3ccaeb429 | ||
|
|
c8205cabde | ||
|
|
699068edd5 | ||
|
|
963af05d75 | ||
|
|
822cd6b8a2 | ||
|
|
59afb42f6e | ||
|
|
a20b3284d1 | ||
|
|
4a4526fc09 | ||
|
|
9514cb56ff | ||
|
|
85ca15eb76 | ||
|
|
8ff716488b | ||
|
|
303df9a757 | ||
|
|
89a251dfad | ||
|
|
87628ff36b | ||
|
|
677de581f6 | ||
|
|
191be63049 | ||
|
|
9f643170d1 | ||
|
|
d4549ba582 | ||
|
|
651dec0914 | ||
|
|
ce1b4cb926 | ||
|
|
8f6a41cbed | ||
|
|
9b8d364b46 |
32
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
32
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
name: Feature report
|
||||
description: Suggest an idea for this project
|
||||
title: "[Feature] "
|
||||
body:
|
||||
- type: checkboxes
|
||||
id: ensure
|
||||
attributes:
|
||||
label: Verify steps
|
||||
description: "
|
||||
在提交之前,请确认
|
||||
Please verify that you've followed these steps
|
||||
"
|
||||
options:
|
||||
- label: "
|
||||
我已经在 [Issue Tracker](……/) 中找过我要提出的问题
|
||||
I have searched on the [issue tracker](……/) for a related issue.
|
||||
"
|
||||
required: true
|
||||
- label: "
|
||||
我已经使用公测版本测试过,问题依旧存在
|
||||
I have tested using the test mod, and the issue still exists.
|
||||
"
|
||||
required: true
|
||||
- label: "
|
||||
我已经仔细看过 [常见问题](https://juewuy.github.io/chang-jian-wen-ti/) 并无法自行解决问题
|
||||
"
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Description
|
||||
validations:
|
||||
required: true
|
||||
33
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
33
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
name: Bug report
|
||||
description: Create a report to help us improve
|
||||
title: "[Bug] "
|
||||
body:
|
||||
- type: checkboxes
|
||||
id: ensure
|
||||
attributes:
|
||||
label: Verify steps
|
||||
description: "
|
||||
在提交之前,请确认
|
||||
Please verify that you've followed these steps
|
||||
"
|
||||
options:
|
||||
- label: "
|
||||
我已经在 [Issue Tracker](……/) 中找过我要提出的问题
|
||||
I have searched on the [issue tracker](……/) for a related issue.
|
||||
"
|
||||
required: true
|
||||
- label: "
|
||||
我已经使用公测版本测试过,问题依旧存在
|
||||
I have tested using the test mod, and the issue still exists.
|
||||
"
|
||||
required: true
|
||||
- label: "
|
||||
我已经仔细看过 [常见问题](https://juewuy.github.io/chang-jian-wen-ti/) 并无法自行解决问题
|
||||
"
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Description
|
||||
description: 请详细、清晰地表达你要提出的论述,例如这个问题如何影响到你?你想实现什么功能?目前ShellClash的行为是什么?
|
||||
validations:
|
||||
required: true
|
||||
3
.github/workflows/bin_update.yml
vendored
3
.github/workflows/bin_update.yml
vendored
@@ -9,7 +9,7 @@ on:
|
||||
# branches:
|
||||
# - master
|
||||
schedule:
|
||||
- cron: 0 9 * * 2,6
|
||||
- cron: 0 9 * * 6
|
||||
# watch:
|
||||
# types: [started]
|
||||
workflow_dispatch:
|
||||
@@ -88,6 +88,7 @@ jobs:
|
||||
curl -kfSL -O https://raw.githubusercontent.com/alecthw/mmdb_china_ip_list/release/Country.mmdb
|
||||
curl -kfSL -o cn_mini.mmdb https://raw.githubusercontent.com/Hackl0us/GeoIP2-CN/release/Country.mmdb
|
||||
curl -kfSL -o china_ip_list.txt https://raw.githubusercontent.com/17mon/china_ip_list/master/china_ip_list.txt
|
||||
curl -kfSL -o china_ipv6_list.txt https://raw.githubusercontent.com/ChanthMiao/China-IPv6-List/release/cn6.txt
|
||||
curl -kfSL -O https://raw.githubusercontent.com/P3TERX/ca-certificates.crt/download/ca-certificates.crt
|
||||
curl -kfSL -O https://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/geosite.dat
|
||||
sed -i '/GeoIP_v*/'d version
|
||||
|
||||
3
.github/workflows/update_premium_core.yaml
vendored
3
.github/workflows/update_premium_core.yaml
vendored
@@ -23,7 +23,7 @@ jobs:
|
||||
tar xf upx-3.93-amd64_linux.tar.xz
|
||||
- name: Download Core
|
||||
run: |
|
||||
archs="386 amd64 armv5 armv7 armv8 mips-softfloat mipsle-hardfloat mipsle-softfloat"
|
||||
archs="386 amd64 armv5 armv7 arm64 mips-softfloat mipsle-hardfloat mipsle-softfloat"
|
||||
mkdir tmp
|
||||
for arch in ${archs};do
|
||||
wget "${download_url}/${download_version}/clash-linux-${arch}-${download_version}.gz" -O - | gunzip -c > ./tmp/clash-linux-${arch}
|
||||
@@ -36,6 +36,7 @@ jobs:
|
||||
fi
|
||||
fi
|
||||
done
|
||||
mv -f ./tmp/clash-linux-arm64 ./tmp/clash-linux-armv8
|
||||
rm -fr upx*
|
||||
- name: Update
|
||||
run: |
|
||||
|
||||
108
README.md
108
README.md
@@ -23,113 +23,5 @@
|
||||
|
||||
~Support various router devices based on OpenWrt or secondary custom development using OpenWrt<br>~Support various devices running standard Linux systems (such as Debian/CenOS/Armbian, etc.)<br>~Compatible with Padavan firmware (conservative mode), Pandora firmware<br>~Compatible with various types of devices customized and developed using the Linux kernel<br>——————————<br>~For more device support, please submit an issue or go to the TG group for feedback (the device name and the device core information returned by running uname -a must be provided)<br>
|
||||
|
||||
How to use:
|
||||
--
|
||||
|
||||
~Confirm that the router device has enabled SSH and obtained root privileges (Linux devices with GUI desktops can be installed using their own terminal)<br>~Use SSH connection tools (such as putty, JuiceSSH, system built-in terminal, etc.) router or Linux device SSH management interface or terminal interface, and switch to the root user<br>~Confirm that the curl or wget download tool has been installed on the device. If not installed, please [refer to here](https://www.howtoforge.com/install-curl-in-linux) for LInux devices to install curl. For devices based on OpenWrt (Xiaomi official system, Pandora, Gaoke, etc.), please Use the following command to install curl:<br>
|
||||
|
||||
```Shell
|
||||
opkg update && opkg install curl
|
||||
```
|
||||
|
||||
~ Then execute the following installation commands on the SSH interface, and follow the subsequent prompts to complete the installation<br>
|
||||
|
||||
##### ~Use curl:<br>
|
||||
|
||||
```Shell
|
||||
#by fastgit.org
|
||||
export url='https://raw.fastgit.org/juewuy/ShellClash/master' && sh -c "$(curl -kfsSl $url/install.sh)" && source /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
```shell
|
||||
#by GitHub
|
||||
export url='https://raw.githubusercontent.com/juewuy/ShellClash/master' && sh -c "$(curl -kfsSl $url/install.sh)" && source /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
```shell
|
||||
#by jsDelivr-CDN
|
||||
export url='https://fastly.jsdelivr.net/gh/juewuy/ShellClash@master' && sh -c "$(curl -kfsSl $url/install.sh)" && source /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
##### ~Use wget:<br>
|
||||
|
||||
```Shell
|
||||
#by GitHub
|
||||
export url='https://raw.githubusercontent.com/juewuy/ShellClash/master' && wget -q --no-check-certificate -O /tmp/install.sh $url/install.sh && sh /tmp/install.sh && source /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
```shell
|
||||
#By jsDelivrCDN
|
||||
export url='https://fastly.jsdelivr.net/gh/juewuy/ShellClash@master' && wget -q --no-check-certificate -O /tmp/install.sh $url/install.sh && sh /tmp/install.sh && source /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
~**Use a low version of wget (prompt not to support https) local installation**:<br>
|
||||
|
||||
```Shell
|
||||
#by shellclash.cf
|
||||
export url='http://shellclash.cf/' && wget -q -O /tmp/install.sh $url/install.sh && sh /tmp/install.sh && source /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
~**After installation by non-root users**, please execute the following additional commands to read environment variables:<br>
|
||||
|
||||
```Shell
|
||||
source ~/.bashrc &> /dev/null
|
||||
```
|
||||
|
||||
~After installing the management script, execute the following command to **run the management script**<br>
|
||||
|
||||
```Shell
|
||||
clash #normal mode
|
||||
clash -h #help
|
||||
clash -u #uninstall
|
||||
clash -t #test mode
|
||||
```
|
||||
|
||||
~**Install in Docker:**<br>
|
||||
|
||||
Use: https://github.com/echvoyager/shellclash_docker
|
||||
|
||||
~**Additional dependencies at runtime**:<br>
|
||||
|
||||
> Most of the equipment/systems are pre-installed with most of the following dependencies, you can ignore them if there is no impact when you use them.
|
||||
|
||||
```Text
|
||||
bash/ash necessary Cannot install and run scripts when all are missing
|
||||
curl/wget necessary When all are missing, it cannot be installed and updated online
|
||||
iptables important Only use pure mode when missing
|
||||
systemd/rc.common general Only use conservative mode when all are missing
|
||||
iptables-mod-nat general Cannot use redir mode, mixed mode when missing
|
||||
ip6tables-mod-nat lower Affects redir mode when missing, mixed mode support for ipv6
|
||||
crontab lower Cannot enable timing task function when missing
|
||||
net-tools minimal Cannot detect port occupancy normally when missing
|
||||
ubus/iproute-doc minimal The host address of the machine cannot be obtained normally when missing
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Update log:
|
||||
|
||||
### [Click to view](https://github.com/juewuy/ShellClash/releases)
|
||||
|
||||
## Exchange feedback:
|
||||
|
||||
### [TG Discussion Group](https://t.me/ShellClash)
|
||||
|
||||
## Related Q&A:
|
||||
|
||||
### [See blog for details](https://juewuy.github.io)
|
||||
|
||||
## Donate:
|
||||
|
||||
Alipay WeChat
|
||||
|
||||
##### <img src="http://juewuy.github.io/post-images/1604390977172.png" style="zoom:50%;" /><img src="http://juewuy.github.io/post-images/1604391042406.png" style="zoom:50%;" />
|
||||
|
||||
机场推荐:
|
||||
--
|
||||
#### [Catnet](https://dash.catnet.uk/#/register?code=KOhfH9qD)<br>
|
||||
#### [Dler](https://dler.best/auth/register?affid=89698)<br>
|
||||
|
||||
|
||||
118
README_CN.md
118
README_CN.md
@@ -32,96 +32,99 @@
|
||||
——————————<br>
|
||||
~更多设备支持,请提issue或前往TG群反馈(需提供设备名称及运行uname -a返回的设备核心信息)<br>
|
||||
|
||||
使用方式:
|
||||
--
|
||||
~确认路由器设备已经开启SSH并获取root权限(带GUI桌面的Linux设备可使用自带终端安装)<br>
|
||||
~使用SSH连接工具(如putty,JuiceSSH,系统自带终端等)路由器或Linux设备的SSH管理界面或终端界面,并切换到root用户<br>
|
||||
~确认设备已经安装curl或者wget下载工具。**如未安装**,LInux设备请[参考此处](https://www.howtoing.com/install-curl-in-linux)安装curl,基于OpenWrt(小米官方系统、潘多拉、高恪等)的设备请使用如下命令安装curl:<br>
|
||||
## 常见问题:
|
||||
|
||||
```Shell
|
||||
opkg update && opkg install curl #如已安装请忽略
|
||||
```
|
||||
[ShellClash常见问题 | Juewuy's Blog](https://juewuy.github.io/chang-jian-wen-ti/)
|
||||
|
||||
~之后在SSH界面执行如下安装命令,并按照后续提示完成安装<br>
|
||||
## 使用方式:
|
||||
|
||||
~确认设备已经开启SSH并获取root权限(带GUI桌面的Linux设备可使用自带终端安装)<br>
|
||||
~使用SSH连接工具(如putty,JuiceSSH,系统自带终端等)路由器或Linux设备的SSH管理界面或终端界面
|
||||
|
||||
~之后在SSH界面执行目标设备对应的安装命令,并按照后续提示完成安装<br>
|
||||
|
||||
### 在线安装:<br>
|
||||
|
||||
(**如无法连接或出现SSL连接错误,请尝试更换各种不同的安装源!**)<br>
|
||||
|
||||
~**使用curl安装**:<br>
|
||||
|
||||
```Shell
|
||||
#fastgit.org加速
|
||||
export url='https://raw.fastgit.org/juewuy/ShellClash/master' && sh -c "$(curl -kfsSl $url/install.sh)" && source /etc/profile &> /dev/null
|
||||
```
|
||||
~**标准Linux设备安装:**<br>
|
||||
|
||||
```shell
|
||||
#GitHub源
|
||||
export url='https://raw.githubusercontent.com/juewuy/ShellClash/master' && sh -c "$(curl -kfsSl $url/install.sh)" && source /etc/profile &> /dev/null
|
||||
sudo -i #切换到root用户,如果需要密码,请输入密码
|
||||
export url='https://fastly.jsdelivr.net/gh/juewuy/ShellClash@master' && wget -q --no-check-certificate -O /tmp/install.sh $url/install.sh && bash /tmp/install.sh && source /etc/profile &> /dev/null
|
||||
```
|
||||
或者
|
||||
```shell
|
||||
sudo -i #切换到root用户,如果需要密码,请输入密码
|
||||
export url='https://gh.jwsc.eu.org/master' && bash -c "$(curl -kfsSl $url/install.sh)" && source /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
~**路由设备使用curl安装**:<br>
|
||||
|
||||
```shell
|
||||
#GitHub源(可能需要代理)
|
||||
export url='https://raw.githubusercontent.com/juewuy/ShellClash/master' && sh -c "$(curl -kfsSl $url/install.sh)" && source /etc/profile &> /dev/null
|
||||
```
|
||||
或者
|
||||
```shell
|
||||
#jsDelivrCDN源
|
||||
export url='https://fastly.jsdelivr.net/gh/juewuy/ShellClash@master' && sh -c "$(curl -kfsSl $url/install.sh)" && source /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
或者
|
||||
```shell
|
||||
#作者私人源
|
||||
export url='https://shellclash.cf' && sh -c "$(curl -kfsSl $url/install.sh)" && source /etc/profile &> /dev/null
|
||||
export url='https://gh.jwsc.eu.org/master' && sh -c "$(curl -kfsSl $url/install.sh)" && source /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
~**使用wget安装**:<br>
|
||||
~**路由设备使用wget安装**:<br>
|
||||
|
||||
```Shell
|
||||
#GitHub源
|
||||
#GitHub源(可能需要代理)
|
||||
export url='https://raw.githubusercontent.com/juewuy/ShellClash/master' && wget -q --no-check-certificate -O /tmp/install.sh $url/install.sh && sh /tmp/install.sh && source /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
或者
|
||||
```shell
|
||||
#jsDelivrCDN源
|
||||
export url='https://fastly.jsdelivr.net/gh/juewuy/ShellClash@master' && wget -q --no-check-certificate -O /tmp/install.sh $url/install.sh && sh /tmp/install.sh && source /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
```shell
|
||||
#fastgit.org加速
|
||||
export url='https://raw.fastgit.org/juewuy/ShellClash/master' && wget -q -O /tmp/install.sh $url/install.sh && sh /tmp/install.sh && source /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
~**使用低版本wget(提示不支持https)安装**:<br>
|
||||
~**老旧设备使用低版本wge安装**:<br>
|
||||
|
||||
```Shell
|
||||
#作者私人http源
|
||||
export url='http://shellclash.cf/' && wget -q -O /tmp/install.sh $url/install.sh && sh /tmp/install.sh && source /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
~**非root用户安装后**请额外执行以下命令以读取环境变量:<br>
|
||||
|
||||
```Shell
|
||||
source ~/.bashrc &> /dev/null
|
||||
```
|
||||
|
||||
~安装完成管理脚本后,执行如下命令以**运行管理脚本**<br>
|
||||
|
||||
```Shell
|
||||
clash #正常模式运行
|
||||
clash -h #脚本帮助及说明
|
||||
clash -u #卸载脚本
|
||||
clash -t #测试模式运行
|
||||
#作者私人http内测源
|
||||
export url='http://t.jwsc.eu.org' && wget -q -O /tmp/install.sh $url/install.sh && sh /tmp/install.sh && source /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
~**DOCKER环境下安装:**<br>
|
||||
|
||||
请参考https://github.com/echvoyager/shellclash_docker
|
||||
请参考 [ShellClash_docker 一键脚本和镜像](https://github.com/echvoyager/shellclash_docker)
|
||||
|
||||
~**运行时的额外依赖**:<br>
|
||||
### **本地安装:**<br>
|
||||
|
||||
如使用在线安装出现问题,请参考:[本地安装ShellClash的教程 | Juewuy's Blog](https://juewuy.github.io/bdaz) 使用本地安装!<br>
|
||||
|
||||
### 使用脚本:<br>
|
||||
|
||||
安装完成管理脚本后,执行如下命令使用~
|
||||
|
||||
```Shell
|
||||
clash #进入对话脚本
|
||||
clash -h #脚本帮助及说明
|
||||
clash -u #卸载脚本
|
||||
clash -t #测试模式运行
|
||||
clash -s start #启动服务
|
||||
clash -s stop #停止服务
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### **运行时的额外依赖**:<br>
|
||||
|
||||
> 大部分的设备/系统都已经预装了以下的大部分依赖,使用时如无影响可以无视之
|
||||
|
||||
```Text
|
||||
bash/ash 必须 全部缺少时无法安装及运行脚本
|
||||
```shell
|
||||
curl/wget 必须 全部缺少时无法在线安装及更新,无法使用节点保存功能
|
||||
iptables 重要 缺少时只能使用纯净模式
|
||||
systemd/rc.common 一般 全部缺少时只能使用保守模式
|
||||
iptables-mod-nat 一般 缺少时无法使用redir模式,混合模式
|
||||
ip6tables-mod-nat 较低 缺少时影响redir模式,混合模式对ipv6的支持
|
||||
iptables/nftables 重要 缺少时只能使用纯净模式
|
||||
crontab 较低 缺少时无法启用定时任务功能
|
||||
net-tools 极低 缺少时无法正常检测端口占用
|
||||
ubus/iproute-doc 极低 缺少时无法正常获取本机host地址
|
||||
@@ -138,11 +141,6 @@ ubus/iproute-doc 极低 缺少时无法正常获取本机host地址
|
||||
--
|
||||
### [TG讨论组](https://t.me/ShellClash)
|
||||
|
||||
相关Q&A:
|
||||
--
|
||||
|
||||
### [详见博客](https://juewuy.github.io)
|
||||
|
||||
## 请喝杯茶:
|
||||
|
||||
支付宝 微信
|
||||
@@ -151,5 +149,5 @@ ubus/iproute-doc 极低 缺少时无法正常获取本机host地址
|
||||
|
||||
机场推荐:
|
||||
--
|
||||
#### [梦迪-高速专线,流媒体解锁,月付推荐](https://dash.catnet.uk/#/register?code=KOhfH9qD)<br>
|
||||
#### [墙洞-老牌稳定,流媒体解锁,年付推荐](https://dler.best/auth/register?affid=89698)<br>
|
||||
#### [大米-群友力荐,流媒体解锁,月付推荐](https://bigme.pro/auth/register?code=tdXp)<br>
|
||||
#### [Dler-老牌稳定,流媒体解锁,年付推荐](https://dler.best/auth/register?affid=89698)<br>
|
||||
|
||||
BIN
bin/Country.mmdb
BIN
bin/Country.mmdb
Binary file not shown.
BIN
bin/ShellClash.tar.gz
Normal file
BIN
bin/ShellClash.tar.gz
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load Diff
1605
bin/china_ipv6_list.txt
Normal file
1605
bin/china_ipv6_list.txt
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
bin/cn_mini.mmdb
BIN
bin/cn_mini.mmdb
Binary file not shown.
|
Before Width: | Height: | Size: 114 KiB After Width: | Height: | Size: 115 KiB |
56664
bin/geosite.dat
56664
bin/geosite.dat
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
@@ -1,3 +1,4 @@
|
||||
1.7.0
|
||||
1.6.3
|
||||
1.5.1
|
||||
1.3.0
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
clashnet_v=v1.7.6
|
||||
clashpre_v=2021.09.15
|
||||
clashpre_v=2022.11.25
|
||||
clash_v=v1.7.1
|
||||
meta_v=v1.12.0
|
||||
versionsh=1.6.3
|
||||
GeoIP_v=20220709
|
||||
meta_v=v1.13.2
|
||||
versionsh=1.7.0f
|
||||
GeoIP_v=20230204
|
||||
|
||||
BIN
bin/yacd.tar.gz
BIN
bin/yacd.tar.gz
Binary file not shown.
271
install.sh
271
install.sh
@@ -1,14 +1,15 @@
|
||||
#! /bin/bash
|
||||
# Copyright (C) Juewuy
|
||||
|
||||
type bash &>/dev/null && shtype=bash || shtype=sh
|
||||
echo='echo -e' && [ -n "$(echo -e|grep e)" ] && echo=echo
|
||||
#[ -z "$1" ] && test=0 || test=$1
|
||||
|
||||
echo "***********************************************"
|
||||
echo "** 欢迎使用 **"
|
||||
echo "** ShellClash **"
|
||||
echo "** by Juewuy **"
|
||||
echo "***********************************************"
|
||||
#内置工具
|
||||
dir_avail(){
|
||||
df -h $1 |awk '{ for(i=1;i<=NF;i++){ if(NR==1){ arr[i]=$i; }else{ arr[i]=arr[i]" "$i; } } } END{ for(i=1;i<=NF;i++){ print arr[i]; } }' |grep Ava |awk '{print $2}'
|
||||
}
|
||||
@@ -16,22 +17,6 @@ setconfig(){
|
||||
configpath=$clashdir/mark
|
||||
[ -n "$(grep ${1} $configpath)" ] && sed -i "s#${1}=.*#${1}=${2}#g" $configpath || echo "${1}=${2}" >> $configpath
|
||||
}
|
||||
[ -f "/etc/storage/started_script.sh" ] && systype=Padavan && initdir='/etc/storage/started_script.sh'
|
||||
[ -d "/jffs" ] && systype=asusrouter && {
|
||||
[ -f "/jffs/.asusrouter" ] && initdir='/jffs/.asusrouter'
|
||||
[ -d "/jffs/scripts" ] && initdir='/jffs/scripts/nat-start'
|
||||
[ -z "$initdir" ] && initdir='/jffs/scripts/nat-start' && mkdir -p '/jffs/scripts'
|
||||
}
|
||||
[ -f "/data/etc/crontabs/root" -a "$(dir_avail /etc)" = 0 ] && systype=mi_snapshot
|
||||
#检查root权限
|
||||
if [ "$USER" != "root" -a -z "$systype" ];then
|
||||
echo 当前用户:$USER
|
||||
$echo "\033[31m请尽量使用root用户(不要直接使用sudo命令!)执行安装!\033[0m"
|
||||
echo -----------------------------------------------
|
||||
read -p "仍要安装?可能会产生未知错误!(1/0) > " res
|
||||
[ "$res" != "1" ] && exit 1
|
||||
fi
|
||||
|
||||
webget(){
|
||||
#参数【$1】代表下载目录,【$2】代表在线地址
|
||||
#参数【$3】代表输出显示,【$4】不启用重定向
|
||||
@@ -53,132 +38,103 @@ webget(){
|
||||
[ $? -eq 0 ] && result="200"
|
||||
fi
|
||||
}
|
||||
#检查更新
|
||||
url_cdn="https://raw.githubusercontents.com/juewuy/ShellClash"
|
||||
[ -z "$url" ] && url=$url_cdn
|
||||
echo -----------------------------------------------
|
||||
$echo "\033[33m请选择想要安装的版本:\033[0m"
|
||||
$echo " 1 \033[32mShellclash正式版\033[0m"
|
||||
$echo " 2 \033[31mShellclash测试版\033[0m"
|
||||
echo -----------------------------------------------
|
||||
read -p "请输入相应数字 > " num
|
||||
if [ -z $num ];then
|
||||
echo 安装已取消! && exit 1;
|
||||
elif [ "$num" = "1" ];then
|
||||
webget /tmp/clashrelease $url_cdn/master/bin/release_version echoon rediroff 2>/tmp/clashrelease
|
||||
if [ "$result" = "200" ];then
|
||||
release_new=$(cat /tmp/clashrelease | head -1)
|
||||
url_dl="$url_cdn/$release_new"
|
||||
else
|
||||
echo "无法切换版本,尝试安装测试版!"
|
||||
fi
|
||||
fi
|
||||
[ -z "$url_dl" ] && url_dl=$url
|
||||
webget /tmp/clashversion "$url_dl/bin/version" echooff
|
||||
[ "$result" = "200" ] && versionsh=$(cat /tmp/clashversion | grep "versionsh" | awk -F "=" '{print $2}')
|
||||
[ -z "$release_new" ] && release_new=$versionsh
|
||||
rm -rf /tmp/clashversion
|
||||
rm -rf /tmp/clashrelease
|
||||
tarurl=$url_dl/bin/clashfm.tar.gz
|
||||
|
||||
error_down(){
|
||||
$echo "请参考 \033[32mhttps://github.com/juewuy/ShellClash/blob/master/README_CN.md"
|
||||
$echo "\033[33m使用其他安装源重新安装!\033[0m"
|
||||
}
|
||||
#安装及初始化
|
||||
gettar(){
|
||||
webget /tmp/clashfm.tar.gz $tarurl
|
||||
[ "$result" != "200" ] && echo "文件下载失败,请尝试使用其他安装源!" && exit 1
|
||||
webget /tmp/ShellClash.tar.gz $tarurl
|
||||
if [ "$result" != "200" ];then
|
||||
$echo "\033[33m文件下载失败!\033[0m"
|
||||
error_down
|
||||
exit 1
|
||||
else
|
||||
$clashdir/start.sh stop 2>/dev/null
|
||||
#解压
|
||||
echo -----------------------------------------------
|
||||
echo 开始解压文件!
|
||||
mkdir -p $clashdir > /dev/null
|
||||
tar -zxvf '/tmp/clashfm.tar.gz' -C $clashdir/
|
||||
[ $? -ne 0 ] && echo "文件解压失败!" && rm -rf /tmp/clashfm.tar.gz && exit 1
|
||||
#初始化文件目录
|
||||
[ -f "$clashdir/mark" ] || echo '#标识clash运行状态的文件,不明勿动!' > $clashdir/mark
|
||||
#判断系统类型写入不同的启动文件
|
||||
if [ -f /etc/rc.common ];then
|
||||
#设为init.d方式启动
|
||||
cp -f $clashdir/clashservice /etc/init.d/clash
|
||||
chmod 755 /etc/init.d/clash
|
||||
else
|
||||
[ -w /etc/systemd/system ] && sysdir=/etc/systemd/system
|
||||
[ -w /usr/lib/systemd/system ] && sysdir=/usr/lib/systemd/system
|
||||
if [ -n "$sysdir" ];then
|
||||
#设为systemd方式启动
|
||||
mv $clashdir/clash.service $sysdir/clash.service
|
||||
sed -i "s%/etc/clash%$clashdir%g" $sysdir/clash.service
|
||||
systemctl daemon-reload
|
||||
else
|
||||
#设为保守模式启动
|
||||
setconfig start_old 已开启
|
||||
fi
|
||||
fi
|
||||
#修饰文件及版本号
|
||||
shtype=sh && [ -n "$(ls -l /bin/sh|grep -oE 'dash|show|bash')" ] && shtype=bash
|
||||
sed -i "s|/bin/sh|/bin/$shtype|" $clashdir/start.sh
|
||||
chmod 755 $clashdir/start.sh
|
||||
setconfig versionsh_l $release_new
|
||||
#设置更新地址
|
||||
[ -n "$url" ] && setconfig update_url $url
|
||||
#设置环境变量
|
||||
[ -w /opt/etc/profile ] && profile=/opt/etc/profile
|
||||
[ -w /jffs/configs/profile.add ] && profile=/jffs/configs/profile.add
|
||||
[ -w ~/.bashrc ] && profile=~/.bashrc
|
||||
[ -w /etc/profile ] && profile=/etc/profile
|
||||
if [ -n "$profile" ];then
|
||||
sed -i '/alias clash=*/'d $profile
|
||||
echo "alias clash=\"$shtype $clashdir/clash.sh\"" >> $profile #设置快捷命令环境变量
|
||||
sed -i '/export clashdir=*/'d $profile
|
||||
echo "export clashdir=\"$clashdir\"" >> $profile #设置clash路径环境变量
|
||||
else
|
||||
echo 无法写入环境变量!请检查安装权限!
|
||||
tar -zxvf '/tmp/ShellClash.tar.gz' -C $clashdir/
|
||||
if [ $? -ne 0 ];then
|
||||
rm -rf /tmp/ShellClash.tar.gz
|
||||
$echo "\033[33m文件解压失败!\033[0m"
|
||||
error_down
|
||||
exit 1
|
||||
fi
|
||||
#华硕/Padavan额外设置
|
||||
[ -n "$initdir" ] && {
|
||||
sed -i '/ShellClash初始化/'d $initdir && touch $initdir && echo "$clashdir/start.sh init #ShellClash初始化脚本" >> $initdir
|
||||
setconfig initdir $initdir
|
||||
}
|
||||
#小米镜像化OpenWrt额外设置
|
||||
if [ "$systype" = "mi_snapshot" ];then
|
||||
chmod 755 $clashdir/misnap_init.sh
|
||||
uci set firewall.ShellClash=include
|
||||
uci set firewall.ShellClash.type='script'
|
||||
uci set firewall.ShellClash.path='/data/clash/misnap_init.sh'
|
||||
uci set firewall.ShellClash.enabled='1'
|
||||
uci commit firewall
|
||||
setconfig systype $systype
|
||||
else
|
||||
rm -rf $clashdir/misnap_init.sh
|
||||
rm -rf $clashdir/clashservice
|
||||
source $clashdir/init.sh >/dev/null
|
||||
fi
|
||||
fi
|
||||
#删除临时文件
|
||||
rm -rf /tmp/clashfm.tar.gz
|
||||
rm -rf $clashdir/clash.service
|
||||
}
|
||||
#下载及安装
|
||||
install(){
|
||||
echo -----------------------------------------------
|
||||
echo 开始从服务器获取安装文件!
|
||||
echo -----------------------------------------------
|
||||
gettar
|
||||
echo -----------------------------------------------
|
||||
echo ShellClash 已经安装成功!
|
||||
[ "$profile" = "~/.bashrc" ] && echo "请执行【source ~/.bashrc &> /dev/null】命令以加载环境变量!"
|
||||
echo -----------------------------------------------
|
||||
$echo "\033[33m输入\033[30;47m clash \033[0;33m命令即可管理!!!\033[0m"
|
||||
echo -----------------------------------------------
|
||||
}
|
||||
setdir(){
|
||||
set_usb_dir(){
|
||||
$echo "请选择安装目录"
|
||||
du -hL /mnt | awk '{print " "NR" "$2" "$1}'
|
||||
read -p "请输入相应数字 > " num
|
||||
dir=$(du -hL /mnt | awk '{print $2}' | sed -n "$num"p)
|
||||
if [ -z "$dir" ];then
|
||||
$echo "\033[31m输入错误!请重新设置!\033[0m"
|
||||
set_usb_dir
|
||||
fi
|
||||
}
|
||||
echo -----------------------------------------------
|
||||
if [ -n "$systype" ];then
|
||||
[ "$systype" = "Padavan" ] && dir=/etc/storage
|
||||
[ "$systype" = "asusrouter" ] && dir=/jffs
|
||||
[ "$systype" = "mi_snapshot" ] && dir=/data
|
||||
else
|
||||
[ "$systype" = "mi_snapshot" ] && {
|
||||
$echo "\033[33m检测到当前设备为小米官方系统,请选择安装位置\033[0m"
|
||||
$echo " 1 安装到/data目录(推荐,支持软固化功能)"
|
||||
$echo " 2 安装到USB设备(支持软固化功能)"
|
||||
[ "$(dir_avail /etc)" != 0 ] && $echo " 3 安装到/etc目录(不推荐)"
|
||||
$echo " 0 退出安装"
|
||||
echo -----------------------------------------------
|
||||
read -p "请输入相应数字 > " num
|
||||
case "$num" in
|
||||
1)
|
||||
dir=/data
|
||||
;;
|
||||
2)
|
||||
set_usb_dir ;;
|
||||
3)
|
||||
if [ "$(dir_avail /etc)" != 0 ];then
|
||||
dir=/etc
|
||||
systype=""
|
||||
else
|
||||
$echo "\033[31m你的设备不支持安装到/etc目录,已改为安装到/data\033[0m"
|
||||
dir=data
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
exit 1 ;;
|
||||
esac
|
||||
}
|
||||
[ "$systype" = "asusrouter" ] && {
|
||||
$echo "\033[33m检测到当前设备为华硕固件,请选择安装方式\033[0m"
|
||||
$echo " 1 基于USB设备安装(通用,须插入\033[31m任意\033[0mUSB设备)"
|
||||
$echo " 2 基于自启脚本安装(仅支持梅林及部分官改固件)"
|
||||
$echo " 0 退出安装"
|
||||
echo -----------------------------------------------
|
||||
read -p "请输入相应数字 > " num
|
||||
case "$num" in
|
||||
1)
|
||||
read -p "将脚本安装到USB存储/系统闪存?(1/0) > " res
|
||||
[ "$res" = "1" ] && set_usb_dir || dir=/jffs
|
||||
usb_status=1
|
||||
;;
|
||||
2)
|
||||
$echo "如无法正常开机启动,请重新使用USB方式安装!"
|
||||
sleep 2
|
||||
dir=/jffs ;;
|
||||
*)
|
||||
exit 1 ;;
|
||||
esac
|
||||
}
|
||||
else
|
||||
$echo "\033[33m安装ShellClash至少需要预留约1MB的磁盘空间\033[0m"
|
||||
$echo " 1 在\033[32m/etc目录\033[0m下安装(适合root用户)"
|
||||
$echo " 2 在\033[32m/usr/share目录\033[0m下安装(适合Linux设备)"
|
||||
$echo " 2 在\033[32m/usr/share目录\033[0m下安装(适合Linux系统)"
|
||||
$echo " 3 在\033[32m当前用户目录\033[0m下安装(适合非root用户)"
|
||||
$echo " 4 手动设置安装目录"
|
||||
$echo " 4 在\033[32m外置存储\033[0m中安装"
|
||||
$echo " 5 手动设置安装目录"
|
||||
$echo " 0 退出安装"
|
||||
echo -----------------------------------------------
|
||||
read -p "请输入相应数字 > " num
|
||||
@@ -194,6 +150,8 @@ else
|
||||
dir=~/.local/share
|
||||
mkdir -p ~/.config/systemd/user
|
||||
elif [ "$num" = "4" ];then
|
||||
set_usb_dir
|
||||
elif [ "$num" = "5" ];then
|
||||
echo -----------------------------------------------
|
||||
echo '可用路径 剩余空间:'
|
||||
df -h | awk '{print $6,$4}'| sed 1d
|
||||
@@ -217,6 +175,67 @@ else
|
||||
[ "$res" = "1" ] && clashdir=$dir/clash || setdir
|
||||
fi
|
||||
}
|
||||
install(){
|
||||
echo -----------------------------------------------
|
||||
echo 开始从服务器获取安装文件!
|
||||
echo -----------------------------------------------
|
||||
gettar
|
||||
echo -----------------------------------------------
|
||||
echo ShellClash 已经安装成功!
|
||||
[ "$profile" = "~/.bashrc" ] && echo "请执行【source ~/.bashrc &> /dev/null】命令以加载环境变量!"
|
||||
[ -n "$(ls -l /bin/sh|grep -oE 'zsh')" ] && echo "请执行【source ~/.zshrc &> /dev/null】命令以加载环境变量!"
|
||||
echo -----------------------------------------------
|
||||
$echo "\033[33m输入\033[30;47m clash \033[0;33m命令即可管理!!!\033[0m"
|
||||
echo -----------------------------------------------
|
||||
}
|
||||
|
||||
#特殊固件识别及标记
|
||||
[ -f "/etc/storage/started_script.sh" ] && {
|
||||
systype=Padavan #老毛子固件
|
||||
initdir='/etc/storage/started_script.sh'
|
||||
}
|
||||
[ -d "/jffs" ] && {
|
||||
systype=asusrouter #华硕固件
|
||||
[ -f "/jffs/.asusrouter" ] && initdir='/jffs/.asusrouter'
|
||||
[ -d "/jffs/scripts" ] && initdir='/jffs/scripts/nat-start'
|
||||
}
|
||||
[ -f "/data/etc/crontabs/root" ] && systype=mi_snapshot #小米设备
|
||||
#检查root权限
|
||||
if [ "$USER" != "root" -a -z "$systype" ];then
|
||||
echo 当前用户:$USER
|
||||
$echo "\033[31m请尽量使用root用户(不要直接使用sudo命令!)执行安装!\033[0m"
|
||||
echo -----------------------------------------------
|
||||
read -p "仍要安装?可能会产生未知错误!(1/0) > " res
|
||||
[ "$res" != "1" ] && exit 1
|
||||
fi
|
||||
|
||||
#检查更新
|
||||
url_cdn="https://fastly.jsdelivr.net/gh/juewuy/ShellClash"
|
||||
[ -z "$url" ] && url=$url_cdn
|
||||
echo -----------------------------------------------
|
||||
$echo "\033[33m请选择想要安装的版本:\033[0m"
|
||||
$echo " 1 \033[32mShellclash公测版\033[0m"
|
||||
$echo " 2 \033[36mShellclash稳定版\033[0m"
|
||||
echo -----------------------------------------------
|
||||
read -p "请输入相应数字 > " num
|
||||
if [ -z $num ];then
|
||||
echo 安装已取消! && exit 1;
|
||||
elif [ "$num" = "2" ];then
|
||||
webget /tmp/clashrelease $url_cdn@master/bin/release_version echoon rediroff 2>/tmp/clashrelease
|
||||
if [ "$result" = "200" ];then
|
||||
release_new=$(cat /tmp/clashrelease | head -1)
|
||||
url_dl="$url_cdn@$release_new"
|
||||
else
|
||||
$echo "\033[33m无法获取稳定版安装地址,将尝试安装公测版!\033[0m"
|
||||
fi
|
||||
fi
|
||||
[ -z "$url_dl" ] && url_dl=$url
|
||||
webget /tmp/clashversion "$url_dl/bin/version" echooff
|
||||
[ "$result" = "200" ] && versionsh=$(cat /tmp/clashversion | grep "versionsh" | awk -F "=" '{print $2}')
|
||||
[ -z "$release_new" ] && release_new=$versionsh
|
||||
rm -rf /tmp/clashversion
|
||||
rm -rf /tmp/clashrelease
|
||||
tarurl=$url_dl/bin/ShellClash.tar.gz
|
||||
|
||||
#输出
|
||||
$echo "最新版本:\033[32m$release_new\033[0m"
|
||||
|
||||
993
scripts/clash.sh
993
scripts/clash.sh
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,11 @@
|
||||
#!/bin/bash
|
||||
# Copyright (C) Juewuy
|
||||
|
||||
error_down(){
|
||||
echo -e "\033[33m请尝试切换至其他安装源后重新下载!\033[0m"
|
||||
sleep 1
|
||||
setserver
|
||||
}
|
||||
#导入订阅、配置文件相关
|
||||
linkconfig(){
|
||||
echo -----------------------------------------------
|
||||
@@ -37,9 +42,9 @@ linkserver(){
|
||||
echo -e "\033[32m感谢以下作者的无私奉献!!!\033[0m"
|
||||
echo 当前使用后端为:$server_link
|
||||
echo 1 api.dler.io (墙洞提供)
|
||||
echo 2 sub.shellclash.cf (作者提供)
|
||||
echo 3 sub.xeton.dev (SUB作者T大提供)
|
||||
echo 4 sub.id9.cc (品云提供)
|
||||
echo 2 api.v1.mk (肥羊提供,支持vless)
|
||||
echo 3 sub.xeton.dev (SUB作者提供)
|
||||
echo 4 v.id9.cc (品云提供,支持vless)
|
||||
echo 5 sub.maoxiongnet.com (猫熊提供)
|
||||
echo -----------------------------------------------
|
||||
echo 0 返回上级菜单
|
||||
@@ -146,9 +151,8 @@ getlink(){
|
||||
if [ -n "$Url_link" ];then
|
||||
i=100
|
||||
#将用户链接写入mark
|
||||
sed -i '/Https=*/'d $ccfg
|
||||
setconfig Https
|
||||
setconfig Url \'$Url_link\'
|
||||
Https=""
|
||||
#获取在线yaml文件
|
||||
getyaml
|
||||
else
|
||||
@@ -194,7 +198,7 @@ getlink2(){
|
||||
read -p "请输入完整链接 > " link
|
||||
test=$(echo $link | grep -iE "tp.*://" )
|
||||
link=`echo ${link/\ \(*\)/''}` #删除恶心的超链接内容
|
||||
link=`echo ${link//\&/\%26}` #将分隔符 & 替换成urlcode:%26
|
||||
link=`echo ${link//\&/\\\&}` #处理分隔符
|
||||
if [ -n "$link" -a -n "$test" ];then
|
||||
echo -----------------------------------------------
|
||||
echo -e 请检查输入的链接是否正确:
|
||||
@@ -256,10 +260,16 @@ clashlink(){
|
||||
|
||||
elif [ "$num" = 2 ];then
|
||||
echo -----------------------------------------------
|
||||
echo -e "\033[33m此功能可能会导致严重bug,仅限熟练了解clash运行机制的用户使用!!!\033[0m"
|
||||
echo -e "如你不熟悉clash机制或者使用此功能出现bug,请使用\033[32m在线生成配置文件功能!\033[0m"
|
||||
echo -e "\033[33m此功能可能会导致严重bug!!!\033[0m"
|
||||
sleep 1
|
||||
echo -----------------------------------------------
|
||||
read -p "是否继续?[1/0] > " res
|
||||
echo -e "强烈建议你使用\033[32m在线生成配置文件功能!\033[0m"
|
||||
sleep 1
|
||||
echo -----------------------------------------------
|
||||
echo -e "\033[33m继续后如出现任何问题,请务必自行解决,一切提问恕不受理!\033[0m"
|
||||
echo -----------------------------------------------
|
||||
sleep 2
|
||||
read -p "我确认遇到问题可以自行解决[1/0] > " res
|
||||
if [ "$res" = '1' ]; then
|
||||
getlink2
|
||||
else
|
||||
@@ -319,76 +329,26 @@ clashlink(){
|
||||
#下载更新相关
|
||||
gettar(){
|
||||
$clashdir/start.sh webget /tmp/clashfm.tar.gz $tarurl
|
||||
[ "$?" != "0" ] && echo "文件下载失败,请尝试使用其他安装源!" && exit 1
|
||||
if [ "$?" != "0" ];then
|
||||
echo -e "\033[33m文件下载失败!\033[0m"
|
||||
error_down
|
||||
else
|
||||
$clashdir/start.sh stop 2>/dev/null
|
||||
#解压
|
||||
echo -----------------------------------------------
|
||||
echo 开始解压文件!
|
||||
mkdir -p $clashdir > /dev/null
|
||||
tar -zxvf '/tmp/clashfm.tar.gz' -C $clashdir/
|
||||
[ $? -ne 0 ] && echo "文件解压失败!" && rm -rf /tmp/clashfm.tar.gz && exit 1
|
||||
#初始化文件目录
|
||||
[ -f "$clashdir/mark" ] || echo '#标识clash运行状态的文件,不明勿动!' > $clashdir/mark
|
||||
#判断系统类型写入不同的启动文件
|
||||
if [ -f /etc/rc.common ];then
|
||||
#设为init.d方式启动
|
||||
cp -f $clashdir/clashservice /etc/init.d/clash
|
||||
chmod +x /etc/init.d/clash
|
||||
else
|
||||
[ -w /etc/systemd/system ] && sysdir=/etc/systemd/system
|
||||
[ -w /usr/lib/systemd/system ] && sysdir=/usr/lib/systemd/system
|
||||
if [ -n "$sysdir" ];then
|
||||
#设为systemd方式启动
|
||||
mv $clashdir/clash.service $sysdir/clash.service
|
||||
sed -i "s%/etc/clash%$clashdir%g" $sysdir/clash.service
|
||||
systemctl daemon-reload
|
||||
else
|
||||
#设为保守模式启动
|
||||
setconfig start_old 已开启
|
||||
fi
|
||||
fi
|
||||
#修饰文件及版本号
|
||||
shtype=sh && [ -n "$(ls -l /bin/sh|grep -oE 'dash|show|bash')" ] && shtype=bash
|
||||
sed -i "s|/bin/sh|/bin/$shtype|" $clashdir/start.sh
|
||||
chmod +x $clashdir/start.sh
|
||||
setconfig versionsh_l $release_new
|
||||
#设置更新地址
|
||||
[ -n "$url" ] && setconfig update_url $url
|
||||
#设置环境变量
|
||||
[ -w /opt/etc/profile ] && profile=/opt/etc/profile
|
||||
[ -w /jffs/configs/profile.add ] && profile=/jffs/configs/profile.add
|
||||
[ -w ~/.bashrc ] && profile=~/.bashrc
|
||||
[ -w /etc/profile ] && profile=/etc/profile
|
||||
if [ -n "$profile" ];then
|
||||
sed -i '/alias clash=*/'d $profile
|
||||
echo "alias clash=\"$shtype $clashdir/clash.sh\"" >> $profile #设置快捷命令环境变量
|
||||
sed -i '/export clashdir=*/'d $profile
|
||||
echo "export clashdir=\"$clashdir\"" >> $profile #设置clash路径环境变量
|
||||
else
|
||||
echo 无法写入环境变量!请检查安装权限!
|
||||
exit 1
|
||||
fi
|
||||
#华硕/Padavan额外设置
|
||||
[ -n "$initdir" ] && {
|
||||
sed -i '/ShellClash初始化/'d $initdir && touch $initdir && echo "$clashdir/start.sh init #ShellClash初始化脚本" >> $initdir
|
||||
setconfig initdir $initdir
|
||||
}
|
||||
#小米镜像化OpenWrt额外设置
|
||||
if [ "$systype" = "mi_snapshot" ];then
|
||||
chmod +x $clashdir/misnap_init.sh
|
||||
uci set firewall.ShellClash=include
|
||||
uci set firewall.ShellClash.type='script'
|
||||
uci set firewall.ShellClash.path='/data/clash/misnap_init.sh'
|
||||
uci set firewall.ShellClash.enabled='1'
|
||||
uci commit firewall
|
||||
setconfig systype $systype
|
||||
else
|
||||
rm -rf $clashdir/misnap_init.sh
|
||||
rm -rf $clashdir/clashservice
|
||||
fi
|
||||
#删除临时文件
|
||||
if [ $? -ne 0 ];then
|
||||
rm -rf /tmp/clashfm.tar.gz
|
||||
rm -rf $clashdir/clash.service
|
||||
echo -e "\033[33m文件解压失败!\033[0m"
|
||||
error_down
|
||||
else
|
||||
source $clashdir/init.sh >/dev/null
|
||||
echo -e "\033[32m脚本更新成功!\033[0m"
|
||||
fi
|
||||
fi
|
||||
exit
|
||||
}
|
||||
getsh(){
|
||||
echo -----------------------------------------------
|
||||
@@ -408,6 +368,7 @@ getsh(){
|
||||
exit;
|
||||
fi
|
||||
}
|
||||
|
||||
getcpucore(){
|
||||
cputype=$(uname -ms | tr ' ' '_' | tr '[A-Z]' '[a-z]')
|
||||
[ -n "$(echo $cputype | grep -E "linux.*armv.*")" ] && cpucore="armv5"
|
||||
@@ -427,8 +388,7 @@ setcpucore(){
|
||||
echo -e "\033[31m仅适合脚本无法正确识别核心或核心无法正常运行时使用!\033[0m"
|
||||
echo -e "当前可供在线下载的处理器架构为:"
|
||||
echo $cpucore_list | awk -F " " '{for(i=1;i<=NF;i++) {print i" "$i }}'
|
||||
echo -e "如果您的CPU架构未在以上列表中,请运行【uname -a】命令,并复制好返回信息"
|
||||
echo -e "之后前往 t.me/ShellClash 群提交或 github.com/juewuy/ShellClash 提交issue"
|
||||
echo -e "不知道如何获取核心版本?请参考:\033[36;4mhttps://juewuy.github.io/bdaz\033[0m"
|
||||
echo -----------------------------------------------
|
||||
read -p "请输入对应数字 > " num
|
||||
setcpucore=$(echo $cpucore_list | awk '{print $"'"$num"'"}' )
|
||||
@@ -453,11 +413,14 @@ getcore(){
|
||||
if [ "$?" = "1" ];then
|
||||
echo -e "\033[31m核心文件下载失败!\033[0m"
|
||||
rm -rf /tmp/clash.new
|
||||
error_down
|
||||
else
|
||||
chmod +x /tmp/clash.new && /tmp/clash.new -v >/dev/null 2>&1
|
||||
if [ "$?" != 0 ];then
|
||||
echo -e "\033[31m核心文件下载失败!\033[0m"
|
||||
chmod +x /tmp/clash.new
|
||||
clashv=$(/tmp/clash.new -v 2>/dev/null | sed 's/ linux.*//;s/.* //')
|
||||
if [ -z "$clashv" ];then
|
||||
echo -e "\033[31m核心文件下载成功但校验失败!请尝试手动指定CPU版本\033[0m"
|
||||
rm -rf /tmp/clash.new
|
||||
setcpucore
|
||||
else
|
||||
echo -e "\033[32m$clashcore核心下载成功!\033[0m"
|
||||
mv -f /tmp/clash.new $bindir/clash
|
||||
@@ -473,21 +436,21 @@ setcore(){
|
||||
###
|
||||
echo -----------------------------------------------
|
||||
[ -z "$cpucore" ] && getcpucore
|
||||
echo -e "当前clash核心:\033[47;30m $clashcore \033[46;30m$clashv\033[0m"
|
||||
echo -e "当前clash核心:\033[42;30m $clashcore \033[47;30m$clashv\033[0m"
|
||||
echo -e "当前系统处理器架构:\033[32m $cpucore \033[0m"
|
||||
echo -e "\033[33m请选择需要使用的核心版本!\033[0m"
|
||||
echo -----------------------------------------------
|
||||
echo "1 clash: 稳定,内存占用小,推荐!"
|
||||
echo "(官方正式版) 不支持Tun模式、混合模式"
|
||||
echo -e "1 \033[43;30m Clash \033[0m: \033[32m占用低\033[0m"
|
||||
echo -e " (官方基础版) \033[33m不支持Tun、Rule-set等\033[0m"
|
||||
echo -e " 说明文档: \033[36;4mhttps://lancellc.gitbook.io\033[0m"
|
||||
echo
|
||||
echo "2 clashpre: 支持Tun模式、混合模式"
|
||||
echo "(高级预览版) 内存占用更高"
|
||||
echo -e "2 \033[43;30m Clashpre \033[0m: \033[32m支持Tun、Rule-set、域名嗅探\033[0m"
|
||||
echo -e " (官方高级版) \033[33m不支持vless、hy协议\033[0m"
|
||||
echo -e " 说明文档: \033[36;4mhttps://lancellc.gitbook.io\033[0m"
|
||||
echo
|
||||
echo "3 clash.net: 支持部分vless协议"
|
||||
echo "(.net定制版) 第三方定制内核"
|
||||
echo
|
||||
echo "4 clash.meta:支持大部分vless协议"
|
||||
echo "(meta定制版) 第三方定制内核"
|
||||
echo -e "3 \033[43;30mClash.Meta\033[0m: \033[32m多功能,支持最全面\033[0m"
|
||||
echo -e " (Meta定制版) \033[33m第三方定制内核\033[0m"
|
||||
echo -e " 说明文档: \033[36;4mhttps://docs.metacubex.one\033[0m"
|
||||
echo
|
||||
echo "5 手动指定处理器架构"
|
||||
echo -----------------------------------------------
|
||||
@@ -506,10 +469,6 @@ setcore(){
|
||||
version=$clashpre_v
|
||||
getcore
|
||||
elif [ "$num" = 3 ]; then
|
||||
clashcore=clash.net
|
||||
version=$clashnet_v
|
||||
getcore
|
||||
elif [ "$num" = 4 ]; then
|
||||
clashcore=clash.meta
|
||||
version=$meta_v
|
||||
getcore
|
||||
@@ -521,6 +480,7 @@ setcore(){
|
||||
update
|
||||
fi
|
||||
}
|
||||
|
||||
getgeo(){
|
||||
echo -----------------------------------------------
|
||||
echo 正在从服务器获取数据库文件…………
|
||||
@@ -528,7 +488,7 @@ getgeo(){
|
||||
if [ "$?" = "1" ];then
|
||||
echo -----------------------------------------------
|
||||
echo -e "\033[31m文件下载失败!\033[0m"
|
||||
exit 1
|
||||
error_down
|
||||
else
|
||||
mv -f /tmp/$geoname $bindir/$geoname
|
||||
echo -----------------------------------------------
|
||||
@@ -548,9 +508,10 @@ setgeo(){
|
||||
echo -----------------------------------------------
|
||||
echo -e " 1 由\033[32malecthw\033[0m提供的全球版GeoIP数据库(约6mb)"
|
||||
echo -e " 2 由\033[32mHackl0us\033[0m提供的精简版CN-IP数据库(约0.2mb)"
|
||||
echo -e " 3 由\033[32m17mon\033[0m提供的CN-IP文件(需启用CN_IP绕过内核功能,约0.2mb)"
|
||||
echo -e " 3 由\033[32m17mon\033[0m提供的CN-IP文件(需启用CN_IP绕过,约0.2mb)"
|
||||
echo -e " 4 由\033[32mChanthMiao\033[0m提供的CN-IPV6文件(需ipv6启用CN_IP绕过,约50kb)"
|
||||
[ "$clashcore" = "clash.meta" ] && \
|
||||
echo -e " 4 由\033[32mLoyalsoldier\033[0m提供的GeoSite数据库(限Meta内核,约4.5mb)"
|
||||
echo -e " 5 由\033[32mLoyalsoldier\033[0m提供的GeoSite数据库(限Meta内核,约4.5mb)"
|
||||
echo " 0 返回上级菜单"
|
||||
echo -----------------------------------------------
|
||||
read -p "请输入对应数字 > " num
|
||||
@@ -573,16 +534,27 @@ setgeo(){
|
||||
sleep 1
|
||||
fi
|
||||
elif [ "$num" = '4' ]; then
|
||||
if [ "$cn_ipv6_route" = "已开启" -a "$ipv6_redir" = "已开启" ]; then
|
||||
geotype=china_ipv6_list.txt
|
||||
geoname=cn_ipv6.txt
|
||||
getgeo
|
||||
else
|
||||
echo -----------------------------------------------
|
||||
echo -e "\033[31m未开启ipv6下CN绕过功能,无需更新CN-IPV6文件!!\033[0m"
|
||||
sleep 1
|
||||
fi
|
||||
elif [ "$num" = '5' ]; then
|
||||
geotype=geosite.dat
|
||||
geoname=geosite.dat
|
||||
geoname=GeoSite.dat
|
||||
getgeo
|
||||
else
|
||||
update
|
||||
fi
|
||||
}
|
||||
|
||||
getdb(){
|
||||
#下载及安装
|
||||
if [ -d /www/clash -o -d $clashdir/ui ];then
|
||||
if [ -f /www/clash/index.html -o -f $clashdir/ui/index.html ];then
|
||||
echo -----------------------------------------------
|
||||
echo -e "\033[31m检测到您已经安装过本地面板了!\033[0m"
|
||||
echo -----------------------------------------------
|
||||
@@ -601,6 +573,7 @@ getdb(){
|
||||
echo -----------------------------------------------
|
||||
echo -e "\033[31m文件下载失败!\033[0m"
|
||||
echo -----------------------------------------------
|
||||
error_down
|
||||
setdb
|
||||
else
|
||||
echo -e "\033[33m下载成功,正在解压文件!\033[0m"
|
||||
@@ -697,6 +670,7 @@ setdb(){
|
||||
errornum
|
||||
fi
|
||||
}
|
||||
|
||||
getcrt(){
|
||||
crtlink="${update_url}/bin/ca-certificates.crt"
|
||||
echo -----------------------------------------------
|
||||
@@ -705,6 +679,7 @@ getcrt(){
|
||||
if [ "$?" = "1" ];then
|
||||
echo -----------------------------------------------
|
||||
echo -e "\033[31m文件下载失败!\033[0m"
|
||||
error_down
|
||||
else
|
||||
echo -----------------------------------------------
|
||||
mv -f /tmp/ca-certificates.crt $crtdir
|
||||
@@ -746,6 +721,7 @@ setcrt(){
|
||||
sleep 1
|
||||
fi
|
||||
}
|
||||
#安装源
|
||||
setserver(){
|
||||
saveserver(){
|
||||
#写入mark文件
|
||||
@@ -759,13 +735,12 @@ setserver(){
|
||||
echo -e "\033[30;47m切换ShellClash版本及更新源地址\033[0m"
|
||||
echo -e "当前源地址:\033[4;32m$update_url\033[0m"
|
||||
echo -----------------------------------------------
|
||||
echo -e " 1 \033[32m正式版\033[0m&Jsdelivr-CDN源"
|
||||
echo -e " 2 \033[32m正式版\033[0m&fastgit.org源"
|
||||
echo -e " 3 \033[36m公测版\033[0m&Github源(本机clash服务加速)"
|
||||
echo -e " 4 \033[36m公测版\033[0m&ShellClash源"
|
||||
echo -e " 5 \033[36m公测版\033[0m&githubusercontents加速"
|
||||
echo -e " 6 \033[36m公测版\033[0m&fastgit.org源"
|
||||
echo -e " 7 \033[33m内测版\033[0m(请加TG讨论组:\033[4;36mhttps://t.me/ShellClash\033[0m)"
|
||||
echo -e " 1 \033[33m稳定版\033[0m&Jsdelivr-CDN源"
|
||||
echo -e " 2 \033[33m稳定版\033[0m&Github源(须clash服务启用)"
|
||||
echo -e " 3 \033[32m公测版\033[0m&Github源(须clash服务启用)"
|
||||
echo -e " 4 \033[32m公测版\033[0m&ShellClash私人源"
|
||||
echo -e " 5 \033[32m公测版\033[0m&Jsdelivr-CDN源(推荐)"
|
||||
echo -e " 7 \033[31m内测版\033[0m(请加TG讨论组:\033[4;36mhttps://t.me/ShellClash\033[0m)"
|
||||
echo -e " 8 自定义源地址(用于本地源或自建源)"
|
||||
echo -e " 9 \033[31m版本回退\033[0m"
|
||||
echo -e " 0 返回上级菜单"
|
||||
@@ -776,26 +751,26 @@ setserver(){
|
||||
release_url='https://fastly.jsdelivr.net/gh/juewuy/ShellClash'
|
||||
saveserver
|
||||
elif [ "$num" = 2 ]; then
|
||||
release_url='https://raw.fastgit.org/juewuy/ShellClash'
|
||||
release_url='https://raw.githubusercontent.com/juewuy/ShellClash'
|
||||
saveserver
|
||||
elif [ "$num" = 3 ]; then
|
||||
update_url='https://raw.githubusercontent.com/juewuy/ShellClash/master'
|
||||
release_url=''
|
||||
saveserver
|
||||
elif [ "$num" = 4 ]; then
|
||||
update_url='https://gh.shellclash.cf/master'
|
||||
update_url='https://gh.jwsc.eu.org/master'
|
||||
release_url=''
|
||||
saveserver
|
||||
elif [ "$num" = 5 ]; then
|
||||
update_url='https://raw.githubusercontents.com/juewuy/ShellClash/master'
|
||||
update_url='https://fastly.jsdelivr.net/gh/juewuy/ShellClash@master'
|
||||
release_url=''
|
||||
saveserver
|
||||
elif [ "$num" = 6 ]; then
|
||||
update_url='https://raw.fastgit.org/juewuy/ShellClash/master'
|
||||
update_url='https://raw.staticdn.net/juewuy/ShellClash/master'
|
||||
release_url=''
|
||||
saveserver
|
||||
elif [ "$num" = 7 ]; then
|
||||
update_url='http://test.shellclash.cf'
|
||||
update_url='http://t.jwsc.eu.org'
|
||||
release_url=''
|
||||
saveserver
|
||||
elif [ "$num" = 8 ]; then
|
||||
@@ -810,26 +785,29 @@ setserver(){
|
||||
fi
|
||||
elif [ "$num" = 9 ]; then
|
||||
echo -----------------------------------------------
|
||||
$clashdir/start.sh webget /tmp/clashrelease https://raw.githubusercontents.com/juewuy/ShellClash/master/bin/release_version echooff rediroff 2>/tmp/clashrelease
|
||||
echo -e "\033[33m如无法连接,请务必先启用clash服务!!!\033[0m"
|
||||
$clashdir/start.sh webget /tmp/clashrelease https://raw.githubusercontent.com/juewuy/ShellClash/master/bin/release_version echooff rediroff 2>/tmp/clashrelease
|
||||
echo -e "\033[31m请选择想要回退至的release版本:\033[0m"
|
||||
cat /tmp/clashrelease | awk '{print " "NR" "$1}'
|
||||
echo -e " 0 返回上级菜单"
|
||||
read -p "请输入对应数字 > " num
|
||||
if [ -z "$num" -o "$num" = 0 ]; then
|
||||
setserver
|
||||
elif [ $num -le $(cat /tmp/clashrelease | awk 'END{print NR}') 2>/dev/null ]; then
|
||||
elif [ $num -le $(cat /tmp/clashrelease 2>/dev/null | awk 'END{print NR}') ]; then
|
||||
release_version=$(cat /tmp/clashrelease | awk '{print $1}' | sed -n "$num"p)
|
||||
update_url="https://raw.githubusercontents.com/juewuy/ShellClash/$release_version"
|
||||
update_url="https://raw.githubusercontent.com/juewuy/ShellClash/$release_version"
|
||||
saveserver
|
||||
release_url=''
|
||||
else
|
||||
echo -----------------------------------------------
|
||||
echo -e "\033[31m输入有误,请重新输入!\033[0m"
|
||||
fi
|
||||
rm -rf /tmp/clashrelease
|
||||
else
|
||||
errornum
|
||||
fi
|
||||
}
|
||||
#检查更新
|
||||
checkupdate(){
|
||||
if [ -z "$release_new" ];then
|
||||
if [ -n "$release_url" ];then
|
||||
@@ -844,7 +822,14 @@ if [ -z "$release_new" ];then
|
||||
fi
|
||||
$clashdir/start.sh webget /tmp/clashversion $update_url/bin/version echooff
|
||||
[ "$?" = "0" ] && release_new=$(cat /tmp/clashversion | grep -oE 'versionsh=.*' | awk -F'=' '{ print $2 }')
|
||||
[ -n "$release_new" ] && source /tmp/clashversion 2>/dev/null || echo -e "\033[31m检查更新失败!请检查网络连接或切换安装源!\033[0m"
|
||||
if [ -n "$release_new" ];then
|
||||
source /tmp/clashversion 2>/dev/null
|
||||
else
|
||||
echo -e "\033[31m检查更新失败!请切换其他安装源!\033[0m"
|
||||
echo -e "\033[36m如全部安装源都无法使用,请先运行服务后再使用更新!\033[0m"
|
||||
sleep 1
|
||||
setserver
|
||||
fi
|
||||
rm -rf /tmp/clashversion
|
||||
fi
|
||||
}
|
||||
@@ -868,8 +853,10 @@ update(){
|
||||
echo -e " 6 查看\033[32mPAC\033[0m自动代理配置"
|
||||
echo -----------------------------------------------
|
||||
echo -e " 7 切换\033[36m安装源\033[0m及\033[36m安装版本\033[0m"
|
||||
echo -e " 8 鸣谢"
|
||||
echo -e " 8 \033[32m重新初始化运行环境\033[0m"
|
||||
echo -e " 9 \033[31m卸载\033[34mShellClash\033[0m"
|
||||
echo -----------------------------------------------
|
||||
echo -e "99 \033[36m鸣谢!\033[0m"
|
||||
echo -e " 0 返回上级菜单"
|
||||
echo -----------------------------------------------
|
||||
read -p "请输入对应数字 > " num
|
||||
@@ -906,21 +893,28 @@ update(){
|
||||
elif [ "$num" = 7 ]; then
|
||||
setserver
|
||||
update
|
||||
|
||||
elif [ "$num" = 8 ]; then
|
||||
echo -----------------------------------------------
|
||||
echo -e "感谢:\033[32mClash \033[0m作者\033[36m Dreamacro\033[0m 项目地址:\033[32mhttps://github.com/Dreamacro/clash\033[0m"
|
||||
echo -e "感谢:\033[32msubconverter \033[0m作者\033[36m tindy2013\033[0m 项目地址:\033[32mhttps://github.com/tindy2013/subconverter\033[0m"
|
||||
echo -e "感谢:\033[32malecthw提供的GeoIP数据库\033[0m 项目地址:\033[32mhttps://github.com/alecthw/mmdb_china_ip_list\033[0m"
|
||||
echo -e "感谢:\033[32mHackl0us提供的GeoIP精简数据库\033[0m 项目地址:\033[32mhttps://github.com/Hackl0us/GeoIP2-CN\033[0m"
|
||||
echo -e "感谢:\033[32m17mon提供的CN-IP列表\033[0m 项目地址:\033[32mhttps://github.com/17mon/china_ip_list\033[0m"
|
||||
echo -e "感谢:\033[32myacd \033[0m作者\033[36m haishanh\033[0m 项目地址:\033[32mhttps://github.com/haishanh/yacd\033[0m"
|
||||
echo -e "感谢:\033[32m更多的帮助过我的人!\033[0m"
|
||||
sleep 2
|
||||
source $clashdir/init.sh
|
||||
update
|
||||
|
||||
elif [ "$num" = 9 ]; then
|
||||
$0 -u
|
||||
exit
|
||||
|
||||
elif [ "$num" = 99 ]; then
|
||||
echo -----------------------------------------------
|
||||
echo -e "感谢:\033[32mClash项目 \033[0m作者\033[36m Dreamacro\033[0m 项目地址:\033[32mhttps://github.com/Dreamacro/clash\033[0m"
|
||||
echo -e "感谢:\033[32mClash.meta项目 \033[0m作者\033[36m MetaCubeX\033[0m 项目地址:\033[32mhttps://github.com/MetaCubeX/Clash.Meta\033[0m"
|
||||
echo -e "感谢:\033[32mYACD面板项目 \033[0m作者\033[36m haishanh\033[0m 项目地址:\033[32mhttps://github.com/haishanh/yacd\033[0m"
|
||||
echo -e "感谢:\033[32mSubconverter \033[0m作者\033[36m tindy2013\033[0m 项目地址:\033[32mhttps://github.com/tindy2013/subconverter\033[0m"
|
||||
echo -e "感谢:\033[32m由alecthw提供的GeoIP数据库\033[0m 项目地址:\033[32mhttps://github.com/alecthw/mmdb_china_ip_list\033[0m"
|
||||
echo -e "感谢:\033[32m由Hackl0us提供的GeoIP精简数据库\033[0m 项目地址:\033[32mhttps://github.com/Hackl0us/GeoIP2-CN\033[0m"
|
||||
echo -e "感谢:\033[32m由17mon提供的CN-IP列表\033[0m 项目地址:\033[32mhttps://github.com/17mon/china_ip_list\033[0m"
|
||||
echo -e "感谢:\033[32m由ChanthMiao提供的CN-IPV6列表\033[0m 项目地址:\033[32mhttps://github.com/ChanthMiao/China-IPv6-List\033[0m"
|
||||
echo -----------------------------------------------
|
||||
echo -e "特别感谢:\033[36m所有帮助及赞助过此项目的同仁们!\033[0m"
|
||||
echo -----------------------------------------------
|
||||
sleep 2
|
||||
update
|
||||
else
|
||||
errornum
|
||||
@@ -928,33 +922,7 @@ update(){
|
||||
}
|
||||
#新手引导
|
||||
userguide(){
|
||||
whichmod(){
|
||||
echo -----------------------------------------------
|
||||
echo -e "\033[33m是否需要代理UDP流量(主要用于连接外服游戏)? \033[0m"
|
||||
echo -----------------------------------------------
|
||||
echo -e " 1 \033[33m不代理UDP流量(推荐)\033[0m"
|
||||
ip tuntap >/dev/null 2>&1 && [ "$?" = 0 ] && \
|
||||
echo -e " 2 \033[32m使用Tun虚拟网卡\033[0m代理UDP流量" || \
|
||||
echo -e " - \033[0m使用Tun模式(你的设备不支持此模式,如为虚拟机运行请调整虚拟网卡设置)\033[0m"
|
||||
[ -n "$(iptables -j TPROXY 2>&1 | grep 'on-port')" ] && \
|
||||
echo -e " 3 \033[32m使用Tproxy模式\033[0m代理UDP流量"
|
||||
echo -----------------------------------------------
|
||||
read -p "请输入对应数字 > " num
|
||||
if [ -z "$num" ] || [ "$num" -gt 4 ];then
|
||||
errornum
|
||||
whichmod
|
||||
elif [ "$num" = 1 ];then
|
||||
setconfig redir_mod "Redir模式"
|
||||
setconfig clashcore "clash"
|
||||
elif [ "$num" = 2 ];then
|
||||
setconfig redir_mod "混合模式"
|
||||
setconfig clashcore "clashpre"
|
||||
elif [ "$num" = 3 ];then
|
||||
setconfig redir_mod "Redir模式"
|
||||
setconfig clashcore "clash"
|
||||
setconfig tproxy_mod "已开启"
|
||||
fi
|
||||
}
|
||||
|
||||
forwhat(){
|
||||
echo -----------------------------------------------
|
||||
echo -e "\033[30;46m 欢迎使用ShellClash新手引导! \033[0m"
|
||||
@@ -971,7 +939,16 @@ userguide(){
|
||||
errornum
|
||||
forwhat
|
||||
elif [ "$num" = 1 ];then
|
||||
whichmod
|
||||
if ckcmd nft;then
|
||||
setconfig redir_mod "Nft模式"
|
||||
else
|
||||
setconfig redir_mod "Redir模式"
|
||||
fi
|
||||
#设置开机启动
|
||||
[ -f /etc/rc.common ] && /etc/init.d/clash enable
|
||||
ckcmd systemctl && systemctl enable clash.service > /dev/null 2>&1
|
||||
rm -rf $clashdir/.dis_startup
|
||||
autostart=enable
|
||||
#检测IP转发
|
||||
if [ "$(cat /proc/sys/net/ipv4/ip_forward)" = "0" ];then
|
||||
echo -----------------------------------------------
|
||||
@@ -983,10 +960,12 @@ userguide(){
|
||||
elif [ "$num" = 2 ];then
|
||||
setconfig redir_mod "纯净模式"
|
||||
setconfig clashcore "clash"
|
||||
setconfig common_ports "未开启"
|
||||
echo -----------------------------------------------
|
||||
echo -e "\033[36m请选择设置本机代理的方式\033[0m"
|
||||
echo -e " 1 使用\033[32m环境变量\033[0m方式配置(不支持部分应用)"
|
||||
echo -e " 2 使用\033[32miptables增强模式\033[0m配置(不支持OpenWrt)"
|
||||
echo -e " 2 使用\033[32miptables增强模式\033[0m配置"
|
||||
echo -e " 3 使用\033[32mnftables增强模式\033[0m配置"
|
||||
echo -e " 0 稍后设置"
|
||||
read -p "请输入对应数字 > " num
|
||||
if [ "$num" = 1 ]; then
|
||||
@@ -995,6 +974,9 @@ userguide(){
|
||||
elif [ "$num" = 2 ]; then
|
||||
local_proxy=已开启
|
||||
local_type=iptables增强模式
|
||||
elif [ "$num" = 3 ]; then
|
||||
local_proxy=已开启
|
||||
local_type=nftables增强模式
|
||||
fi
|
||||
setconfig local_proxy $local_proxy
|
||||
setconfig local_type $local_type
|
||||
@@ -1049,7 +1031,7 @@ userguide(){
|
||||
sethost
|
||||
fi
|
||||
}
|
||||
if type systemd >/dev/null 2>&1 ;then
|
||||
if ckcmd systemd;then
|
||||
echo -----------------------------------------------
|
||||
echo -e "\033[32m是否开启公网访问Dashboard面板及socks服务?\033[0m"
|
||||
echo -e "注意当前设备必须有公网IP才能从公网正常访问"
|
||||
@@ -1073,6 +1055,12 @@ userguide(){
|
||||
setconfig authentication \'$authentication\'
|
||||
fi
|
||||
fi
|
||||
#小米设备软固化
|
||||
if [ "$systype" = "mi_snapshot" ];then
|
||||
echo -----------------------------------------------
|
||||
read -p "是否启用软固化SSH?(1/0) > " res
|
||||
[ "$res" = 1 ] && setconfig mi_autoSSH 已启用
|
||||
fi
|
||||
#提示导入订阅或者配置文件
|
||||
echo -----------------------------------------------
|
||||
echo -e "\033[32m是否导入配置文件?\033[0m(这是运行前的最后一步)"
|
||||
@@ -1097,11 +1085,9 @@ testcommand(){
|
||||
echo " 1 查看Clash运行时的报错信息(会停止clash服务)"
|
||||
echo " 2 查看系统DNS端口(:53)占用 "
|
||||
echo " 3 测试ssl加密(aes-128-gcm)跑分"
|
||||
echo " 4 查看iptables端口转发详情"
|
||||
echo " 5 查看config.yaml前40行"
|
||||
echo " 4 查看clash相关路由规则"
|
||||
echo " 5 查看config.yaml前30行"
|
||||
echo " 6 测试代理服务器连通性(google.tw)"
|
||||
echo " 7 重新进入新手引导"
|
||||
echo " 9 查看后台脚本运行日志"
|
||||
echo -----------------------------------------------
|
||||
echo " 0 返回上级目录!"
|
||||
read -p "请输入对应数字 > " num
|
||||
@@ -1129,22 +1115,35 @@ testcommand(){
|
||||
echo -----------------------------------------------
|
||||
exit;
|
||||
elif [ "$num" = 4 ]; then
|
||||
echo -----------------------------------------------
|
||||
|
||||
if [ -n "$(echo $redir_mod | grep 'Nft')" -o "$local_type" = "nftables增强模式" ];then
|
||||
nft list table inet shellclash
|
||||
else
|
||||
echo -------------------Redir---------------------
|
||||
iptables -t nat -L PREROUTING --line-numbers
|
||||
echo -----------------------------------------------
|
||||
iptables -t nat -L clash --line-numbers
|
||||
echo -----------------------------------------------
|
||||
iptables -t nat -L clash_dns --line-numbers
|
||||
echo -----------------------------------------------
|
||||
iptables -t nat -L clash --line-numbers
|
||||
[ -n "$(echo $redir_mod | grep 'Tproxy')" ] && {
|
||||
echo ----------------Tun/Tproxy-------------------
|
||||
iptables -t mangle -L PREROUTING --line-numbers
|
||||
iptables -t mangle -L clash --line-numbers
|
||||
}
|
||||
[ -n "$(echo $redir_mod | grep 'Tproxy')" -a "$ipv6_redir" = "已开启" ] && {
|
||||
echo ----------------Tun/Tproxy-------------------
|
||||
ip6tables -t mangle -L PREROUTING --line-numbers
|
||||
ip6tables -t mangle -L clashv6 --line-numbers
|
||||
[ -n "$(lsmod | grep 'ip6table_nat')" ] && {
|
||||
echo -------------------Redir---------------------
|
||||
ip6tables -t nat -L PREROUTING --line-numbers
|
||||
echo -----------------------------------------------
|
||||
ip6tables -t nat -L clashv6 --line-numbers
|
||||
echo -----------------------------------------------
|
||||
ip6tables -t nat -L clashv6_dns --line-numbers
|
||||
ip6tables -t nat -L clashv6 --line-numbers
|
||||
}
|
||||
}
|
||||
fi
|
||||
exit;
|
||||
elif [ "$num" = 5 ]; then
|
||||
echo -----------------------------------------------
|
||||
sed -n '1,40p' $yaml
|
||||
sed -n '1,30p' $yaml
|
||||
echo -----------------------------------------------
|
||||
exit;
|
||||
elif [ "$num" = 6 ]; then
|
||||
@@ -1158,12 +1157,7 @@ testcommand(){
|
||||
echo -e "\033[31m连接超时!请重试或检查节点配置!\033[0m"
|
||||
fi
|
||||
clashsh
|
||||
elif [ "$num" = 7 ]; then
|
||||
userguide
|
||||
elif [ "$num" = 9 ]; then
|
||||
echo -----------------------------------------------
|
||||
cat $clashdir/log
|
||||
exit;
|
||||
|
||||
else
|
||||
errornum
|
||||
clashsh
|
||||
|
||||
226
scripts/init.sh
Normal file
226
scripts/init.sh
Normal file
@@ -0,0 +1,226 @@
|
||||
#!/bin/sh
|
||||
# Copyright (C) Juewuy
|
||||
|
||||
version=1.7.0f
|
||||
|
||||
setdir(){
|
||||
dir_avail(){
|
||||
df -h $1 |awk '{ for(i=1;i<=NF;i++){ if(NR==1){ arr[i]=$i; }else{ arr[i]=arr[i]" "$i; } } } END{ for(i=1;i<=NF;i++){ print arr[i]; } }' |grep Ava |awk '{print $2}'
|
||||
}
|
||||
set_usb_dir(){
|
||||
echo -e "请选择安装目录"
|
||||
du -hL /mnt | awk '{print " "NR" "$2" "$1}'
|
||||
read -p "请输入相应数字 > " num
|
||||
dir=$(du -hL /mnt | awk '{print $2}' | sed -n "$num"p)
|
||||
if [ -z "$dir" ];then
|
||||
echo -e "\033[31m输入错误!请重新设置!\033[0m"
|
||||
set_usb_dir
|
||||
fi
|
||||
}
|
||||
echo -----------------------------------------------
|
||||
if [ -n "$systype" ];then
|
||||
[ "$systype" = "Padavan" ] && dir=/etc/storage
|
||||
[ "$systype" = "mi_snapshot" ] && {
|
||||
echo -e "\033[33m检测到当前设备为小米官方系统,请选择安装位置\033[0m"
|
||||
echo -e " 1 安装到/data目录(推荐,支持软固化功能)"
|
||||
echo -e " 2 安装到USB设备(支持软固化功能)"
|
||||
[ "$(dir_avail /etc)" != 0 ] && echo -e " 3 安装到/etc目录(不推荐)"
|
||||
echo -e " 0 退出安装"
|
||||
echo -----------------------------------------------
|
||||
read -p "请输入相应数字 > " num
|
||||
case "$num" in
|
||||
1)
|
||||
dir=/data
|
||||
;;
|
||||
2)
|
||||
set_usb_dir ;;
|
||||
3)
|
||||
if [ "$(dir_avail /etc)" != 0 ];then
|
||||
dir=/etc
|
||||
systype=""
|
||||
else
|
||||
echo -e "\033[31m你的设备不支持安装到/etc目录,已改为安装到/data\033[0m"
|
||||
dir=data
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
exit 1 ;;
|
||||
esac
|
||||
}
|
||||
[ "$systype" = "asusrouter" ] && {
|
||||
echo -e "\033[33m检测到当前设备为华硕固件,请选择安装方式\033[0m"
|
||||
echo -e " 1 基于USB设备安装(通用,须插入\033[31m任意\033[0mUSB设备)"
|
||||
echo -e " 2 基于自启脚本安装(仅支持梅林及部分官改固件)"
|
||||
echo -e " 0 退出安装"
|
||||
echo -----------------------------------------------
|
||||
read -p "请输入相应数字 > " num
|
||||
case "$num" in
|
||||
1)
|
||||
read -p "将脚本安装到USB存储/系统闪存?(1/0) > " res
|
||||
[ "$res" = "1" ] && set_usb_dir || dir=/jffs
|
||||
usb_status=1
|
||||
;;
|
||||
2)
|
||||
echo -e "如无法正常开机启动,请重新使用USB方式安装!"
|
||||
sleep 2
|
||||
dir=/jffs ;;
|
||||
*)
|
||||
exit 1 ;;
|
||||
esac
|
||||
}
|
||||
else
|
||||
echo -e "\033[33m安装ShellClash至少需要预留约1MB的磁盘空间\033[0m"
|
||||
echo -e " 1 在\033[32m/etc目录\033[0m下安装(适合root用户)"
|
||||
echo -e " 2 在\033[32m/usr/share目录\033[0m下安装(适合Linux系统)"
|
||||
echo -e " 3 在\033[32m当前用户目录\033[0m下安装(适合非root用户)"
|
||||
echo -e " 4 在\033[32m外置存储\033[0m中安装"
|
||||
echo -e " 5 手动设置安装目录"
|
||||
echo -e " 0 退出安装"
|
||||
echo -----------------------------------------------
|
||||
read -p "请输入相应数字 > " num
|
||||
#设置目录
|
||||
if [ -z $num ];then
|
||||
echo 安装已取消
|
||||
exit 1;
|
||||
elif [ "$num" = "1" ];then
|
||||
dir=/etc
|
||||
elif [ "$num" = "2" ];then
|
||||
dir=/usr/share
|
||||
elif [ "$num" = "3" ];then
|
||||
dir=~/.local/share
|
||||
mkdir -p ~/.config/systemd/user
|
||||
elif [ "$num" = "4" ];then
|
||||
set_usb_dir
|
||||
elif [ "$num" = "5" ];then
|
||||
echo -----------------------------------------------
|
||||
echo '可用路径 剩余空间:'
|
||||
df -h | awk '{print $6,$4}'| sed 1d
|
||||
echo '路径是必须带 / 的格式,注意写入虚拟内存(/tmp,/opt,/sys...)的文件会在重启后消失!!!'
|
||||
read -p "请输入自定义路径 > " dir
|
||||
if [ -z "$dir" ];then
|
||||
echo -e "\033[31m路径错误!请重新设置!\033[0m"
|
||||
setdir
|
||||
fi
|
||||
else
|
||||
echo 安装已取消!!!
|
||||
exit 1;
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -w $dir ];then
|
||||
echo -e "\033[31m没有$dir目录写入权限!请重新设置!\033[0m" && sleep 1 && setdir
|
||||
else
|
||||
echo -e "目标目录\033[32m$dir\033[0m空间剩余:$(dir_avail $dir)"
|
||||
read -p "确认安装?(1/0) > " res
|
||||
[ "$res" = "1" ] && clashdir=$dir/clash || setdir
|
||||
fi
|
||||
}
|
||||
setconfig(){
|
||||
#参数1代表变量名,参数2代表变量值,参数3即文件路径
|
||||
[ -z "$3" ] && configpath=$clashdir/mark || configpath=$3
|
||||
[ -n "$(grep -E "^${1}=" $configpath)" ] && sed -i "s#^${1}=\(.*\)#${1}=${2}#g" $configpath || echo "${1}=${2}" >> $configpath
|
||||
}
|
||||
|
||||
$clashdir/start.sh stop 2>/dev/null #防止进程冲突
|
||||
#特殊固件识别及标记
|
||||
[ -f "/etc/storage/started_script.sh" ] && {
|
||||
systype=Padavan #老毛子固件
|
||||
initdir='/etc/storage/started_script.sh'
|
||||
}
|
||||
[ -d "/jffs" ] && {
|
||||
systype=asusrouter #华硕固件
|
||||
[ -f "/jffs/.asusrouter" ] && initdir='/jffs/.asusrouter'
|
||||
[ -d "/jffs/scripts" ] && initdir='/jffs/scripts/nat-start'
|
||||
}
|
||||
[ -f "/data/etc/crontabs/root" ] && systype=mi_snapshot #小米设备
|
||||
|
||||
#检查环境变量
|
||||
[ -z "$clashdir" -a -d /tmp/SC_tmp ] && {
|
||||
setdir
|
||||
}
|
||||
#移动文件
|
||||
mkdir -p $clashdir
|
||||
mv -f /tmp/SC_tmp/* $clashdir 2>/dev/null
|
||||
|
||||
#初始化
|
||||
[ -f "$clashdir/mark" ] || echo '#ShellClash配置文件,不明勿动!' > $clashdir/mark
|
||||
#本地安装跳过新手引导
|
||||
[ -z "$url" ] && setconfig userguide 1
|
||||
#判断系统类型写入不同的启动文件
|
||||
if [ -f /etc/rc.common ];then
|
||||
#设为init.d方式启动
|
||||
cp -f $clashdir/clashservice /etc/init.d/clash
|
||||
chmod 755 /etc/init.d/clash
|
||||
else
|
||||
[ -w /etc/systemd/system ] && sysdir=/etc/systemd/system
|
||||
[ -w /usr/lib/systemd/system ] && sysdir=/usr/lib/systemd/system
|
||||
if [ -n "$sysdir" ];then
|
||||
#设为systemd方式启动
|
||||
mv -f $clashdir/clash.service $sysdir/clash.service 2>/dev/null
|
||||
sed -i "s%/etc/clash%$clashdir%g" $sysdir/clash.service
|
||||
systemctl daemon-reload
|
||||
else
|
||||
#设为保守模式启动
|
||||
setconfig start_old 已开启
|
||||
fi
|
||||
fi
|
||||
#修饰文件及版本号
|
||||
type bash &>/dev/null && shtype=bash || shtype=sh
|
||||
sed -i "s|/bin/sh|/bin/$shtype|" $clashdir/start.sh
|
||||
chmod 755 $clashdir/start.sh
|
||||
setconfig versionsh_l $version
|
||||
#设置更新地址
|
||||
[ -n "$url" ] && setconfig update_url $url
|
||||
#设置环境变量
|
||||
[ -w /opt/etc/profile ] && profile=/opt/etc/profile
|
||||
[ -w /jffs/configs/profile.add ] && profile=/jffs/configs/profile.add
|
||||
[ -w ~/.bashrc ] && profile=~/.bashrc
|
||||
[ -w /etc/profile ] && profile=/etc/profile
|
||||
if [ -n "$profile" ];then
|
||||
sed -i '/alias clash=*/'d $profile
|
||||
echo "alias clash=\"$shtype $clashdir/clash.sh\"" >> $profile #设置快捷命令环境变量
|
||||
sed -i '/export clashdir=*/'d $profile
|
||||
echo "export clashdir=\"$clashdir\"" >> $profile #设置clash路径环境变量
|
||||
source $profile &>/dev/null
|
||||
#适配zsh环境变量
|
||||
[ -n "$(ls -l /bin/sh|grep -oE 'zsh')" ] && [ -z "$(cat ~/.zshrc 2>/dev/null|grep clashdir)" ] && {
|
||||
echo "alias clash=\"$shtype $clashdir/clash.sh\"" >> ~/.zshrc
|
||||
echo "export clashdir=\"$clashdir\"" >> ~/.zshrc
|
||||
source ~/.zshrc &>/dev/null
|
||||
}
|
||||
else
|
||||
echo -e "\033[33m无法写入环境变量!请检查安装权限!\033[0m"
|
||||
exit 1
|
||||
fi
|
||||
#梅林/Padavan额外设置
|
||||
[ -n "$initdir" ] && {
|
||||
sed -i '/ShellClash初始化/'d $initdir
|
||||
touch $initdir
|
||||
echo "$clashdir/start.sh init #ShellClash初始化脚本" >> $initdir
|
||||
chmod a+rx $initdir 2>/dev/null
|
||||
setconfig initdir $initdir
|
||||
}
|
||||
#小米镜像化OpenWrt额外设置
|
||||
if [ "$systype" = "mi_snapshot" ];then
|
||||
chmod 755 $clashdir/misnap_init.sh
|
||||
uci set firewall.ShellClash=include
|
||||
uci set firewall.ShellClash.type='script'
|
||||
uci set firewall.ShellClash.path='/data/clash/misnap_init.sh'
|
||||
uci set firewall.ShellClash.enabled='1'
|
||||
uci commit firewall
|
||||
setconfig systype $systype
|
||||
else
|
||||
rm -rf $clashdir/misnap_init.sh
|
||||
fi
|
||||
#华硕USB启动额外设置
|
||||
[ "$usb_status" = "1" ] && {
|
||||
echo "$clashdir/start.sh init #ShellClash初始化脚本" > $clashdir/asus_usb_mount.sh
|
||||
nvram set script_usbmount="$clashdir/asus_usb_mount.sh"
|
||||
nvram commit
|
||||
}
|
||||
#删除临时文件
|
||||
rm -rf /tmp/*lash*gz
|
||||
rm -rf /tmp/SC_tmp
|
||||
|
||||
sleep 1
|
||||
echo -e "\033[32m脚本初始化完成,请输入\033[30;47m clash \033[0;33m命令开始使用!\033[0m"
|
||||
@@ -4,20 +4,27 @@
|
||||
clashdir=/data/clash
|
||||
profile=/etc/profile
|
||||
|
||||
#h初始化环境变量
|
||||
#检查clash运行状态
|
||||
if [ -z $(pidof clash) ]; then
|
||||
#初始化环境变量
|
||||
sed -i "/alias clash/d" $profile
|
||||
sed -i "/export clashdir/d" $profile
|
||||
echo "alias clash=\"$clashdir/clash.sh\"" >>$profile
|
||||
echo "export clashdir=\"$clashdir\"" >>$profile
|
||||
|
||||
#设置init.d服务并启动clash服务
|
||||
ln -sf $clashdir/clashservice /etc/init.d/clash
|
||||
cp -f $clashdir/clashservice /etc/init.d/clash
|
||||
chmod 755 /etc/init.d/clash
|
||||
|
||||
if [ ! -f $clashdir/.dis_startup ]; then
|
||||
log_file=`uci get system.@system[0].log_file`
|
||||
log_file=$(uci get system.@system[0].log_file)
|
||||
while [ "$i" -lt 10 ]; do
|
||||
sleep 3
|
||||
sleep 5
|
||||
[ -n "$(grep 'init complete' $log_file)" ] && i=10 || i=$((i + 1))
|
||||
done
|
||||
/etc/init.d/clash start
|
||||
/etc/init.d/clash enable
|
||||
fi
|
||||
else
|
||||
sleep 10
|
||||
$clashdir/start.sh restart
|
||||
fi
|
||||
|
||||
836
scripts/start.sh
836
scripts/start.sh
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user