[TOC]

项目介绍

此项目是通过使用开源项目clash(已跑路)作为核心程序,再结合脚本实现简单的代理功能。
clash核心备份仓库Clash-backup

主要是为了解决我们在服务器上下载GitHub等一些国外资源速度慢的问题。

由于作者已经跑路,当前为Elegycloud进行备份,若有侵犯您的权利,请提交issues我会看到并删除仓库
clash for linux 备份(备份号:202311091510)。 若喜欢本项目,请点个小星星!

使用须知

  • 运行本项目建议使用root用户,或者使用 sudo 提权。
  • 使用过程中如遇到问题,请优先查已有的 issues
  • 在进行issues提交前,请替换提交内容中是敏感信息(例如:订阅地址)。
  • 本项目是基于 clash(已跑路)yacd 进行的配置整合,关于clash、yacd的详细配置请去原项目查看。
  • 此项目不提供任何订阅信息,请自行准备Clash订阅地址。
  • 运行前请手动更改.env文件中的CLASH_URL变量值,否则无法正常运行。
  • 当前在RHEL系列和Debian,Kali Linux,ubuntu以及Linux系统中测试过,其他系列可能需要适当修改脚本。
  • 支持 x86_64/aarch64 平台
  • 【注意:部分带有桌面端Linux系统的需要在浏览器设置代理!否则有可能无法使用!】
  • 【若系统代理无法使用,但是想要系统代理,请修改尝试修改start.sh中的端口后执行环境变量命令!】
  • 【还是无法使用请更换当前网络环境(也是其中一个因素!)】
  • 谷歌,twitter,youtube等可能无法ping通,正常现象!
1
2
3
4
5
6
7
8
9
10
# 开启系统代理
function proxy_on() {
export http_proxy=http://127.0.0.1:修改这里
export https_proxy=http://127.0.0.1:修改这里
export no_proxy=127.0.0.1,localhost
export HTTP_PROXY=http://127.0.0.1:修改这里
export HTTPS_PROXY=http://127.0.0.1:修改这里
export NO_PROXY=127.0.0.1,localhost
echo -e "\033[32m[√] 已开启代理\033[0m"
}

注意:当你在使用此项目时,遇到任何无法独自解决的问题请优先前往 Issues 寻找解决方法。由于空闲时间有限,后续将不再对Issues中 “已经解答”、“已有解决方案” 的问题进行重复性的回答。

使用教程

下载项目

下载项目

博客备份下载

1
$ git clone https://github.com/Elegycloud/clash-for-linux-backup.git

进入到项目目录,编辑.env文件,修改变量CLASH_URL的值。

1
2
$ cd clash-for-linux
$ vim .env

注意: .env 文件中的变量 CLASH_SECRET 为自定义 Clash Secret,值为空时,脚本将自动生成随机字符串。

启动程序

直接运行脚本文件start.sh

  • 进入项目目录
1
$ cd clash-for-linux
  • 运行启动脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ sudo bash start.sh

正在检测订阅地址...
Clash订阅地址可访问! [ OK ]

正在下载Clash配置文件...
配置文件config.yaml下载成功! [ OK ]

正在启动Clash服务...
服务启动成功! [ OK ]

Clash Dashboard 访问地址:http://<ip>:9090/ui
Secret:xxxxxxxxxxxxx

请执行以下命令加载环境变量: source /etc/profile.d/clash.sh

请执行以下命令开启系统代理: proxy_on

若要临时关闭系统代理,请执行: proxy_off
1
2
$ source /etc/profile.d/clash.sh
$ proxy_on
  • 检查服务端口
1
2
3
4
5
$ netstat -tln | grep -E '9090|789.'
tcp 0 0 127.0.0.1:9090 0.0.0.0:* LISTEN
tcp6 0 0 :::7890 :::* LISTEN
tcp6 0 0 :::7891 :::* LISTEN
tcp6 0 0 :::7892 :::* LISTEN
  • 检查环境变量
1
2
3
$ env | grep -E 'http_proxy|https_proxy'
http_proxy=http://127.0.0.1:7890
https_proxy=http://127.0.0.1:7890

以上步鄹如果正常,说明服务clash程序启动成功,现在就可以体验高速下载github资源了。

重启程序

如果需要对Clash配置进行修改,请修改 conf/config.yaml 文件。然后运行 restart.sh 脚本进行重启。

注意: 重启脚本 restart.sh 不会更新订阅信息。

停止程序

  • 进入项目目录
1
$ cd clash-for-linux
  • 关闭服务
1
2
3
$ sudo bash shutdown.sh

服务关闭成功,请执行以下命令关闭系统代理:proxy_off
1
$ proxy_off

然后检查程序端口、进程以及环境变量http_proxy|https_proxy,若都没则说明服务正常关闭。

Clash Dashboard

  • 访问 Clash Dashboard

通过浏览器访问 start.sh 执行成功后输出的地址,例如:http://192.168.0.1:9090/ui

  • 登录管理界面

API Base URL一栏中输入:http://:9090 ,在Secret(optional)一栏中输入启动成功后输出的Secret。

点击Add并选择刚刚输入的管理界面地址,之后便可在浏览器上进行一些配置。

  • 更多教程

此 Clash Dashboard 使用的是yacd项目,详细使用方法请移步到yacd上查询。

终端界面选择代理节点

部分用户无法通过浏览器使用 Clash Dashboard 进行节点选择、代理模式修改等操作,为了方便用户可以在Linux终端进行操作,下面提供了一个功能简单的脚本以便用户可以临时通过终端界面进行配置。

脚本存放位置:scripts/clash_proxy-selector.sh

注意:

使用脚本前,需要修改脚本中的 Secret 变量值为上述启动脚本输出的值,或者与 .env 文件中定义的 CLASH_SECRET 变量值保持一致。

常见问题

  1. 部分Linux系统默认的 shell /bin/sh 被更改为 dash,运行脚本会出现报错(报错内容一般会有 -en [ OK ])。建议使用 bash xxx.sh 运行脚本。

  2. 部分用户在UI界面找不到代理节点,基本上是因为厂商提供的clash配置文件是经过base64编码的,且配置文件格式不符合clash配置标准。

    目前此项目已集成自动识别和转换clash配置文件的功能。如果依然无法使用,则需要通过自建或者第三方平台(不推荐,有泄露风险)对订阅地址转换。

  3. 程序日志中出现error: unsupported rule type RULE-SET报错,解决方法查看官方WIKI

[toc]

默认在root用户下执行命令

docker部署nginx

自己去安装docker,我相信你会的

1
docker run --name hexo_nginx --network=host -v /hexo_nginx/www/html:/usr/share/nginx/html -d nginx

设置权限

1
chmod -R 777 /hexo_nginx

git

自己安装git,我还是相信你会的

1
useradd -m -s /bin/bash git
  • -m 参数表示创建用户的同时创建用户的家目录
  • -s /bin/bash 参数表示将用户的默认 shell 设置为 Bash

更改密码

1
passwd git

切换git用户

1
su - git

创建Git文件夹

1
[git@archlinux ~]$ mkdir Git

进入Git文件夹

1
2
[git@archlinux ~]$ cd Git/
[git@archlinux Git]$

创建一个裸仓库

1
2
3
4
5
6
7
8
9
10
11
[git@archlinux Git]$ git init --bare hexo_nginx.git
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m <name>

创建钩子脚本

1
2
3
4
cat >hexo_nginx.git/hooks/post-receive<<EOF
#!/bin/bash
git --work-tree=/hexo_nginx/www/html --git-dir=/home/git/Git/hexo_nginx.git checkout -f
EOF

赋予执行权限

1
chmod +x hexo_nginx.git/hooks/post-receive

hexo本地博客配置

编辑_config.yml配置文件

1
2
3
4
5
6
7
8
deploy:
- type: git
repo: git@github.com:julintongxue/julintongxue.github.io.git
branch: master
# 加下面这个
- type: git
repo: git@your_server_ip:/home/git/Git/hexo_nginx.git
branch: master

推送

1
2
3
hexo g
hexo d
# 要输入密码

免密推送

把本地的ssh公钥粘给服务器端的git用户

创建.ssh文件夹

1
[git@archlinux ~]$ mkdir .ssh

创建authorized_keys文本

1
[git@archlinux .ssh]$ touch authorized_keys

把公钥粘贴进去得了

部署ssl实现https访问

首先,得先申请证书!然后下载到certs文件夹里面,欸!太简单了,我不想写

然后修改default.conf配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
server {
listen 80;
listen [::]:80;
#写你的域名
server_name www.xxx.com;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}

server {
listen 443 ssl;
#写你的域名
server_name www.xxx.com;
# 绝对路径指定证书的位置和证书名字
ssl_certificate /etc/ssl/certs/www.xxx.com.pem;
ssl_certificate_key /etc/ssl/certs/www.xxx.com.key;

ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:1m;
fastcgi_param HTTPS on;
fastcgi_param HTTP_SCHEME https;

location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
root /usr/share/nginx/html;
try_files $uri $uri/ /index.html;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

然后docker数据卷映射就行了

把上一个docker容器删了,部署新的

1
docker rm -f hexo_nginx

我是在hexo_nginx创建了certs证书文件夹和default.conf文本文件

1
docker run --name hexo_nginx --network=host --restart always -v /hexo_nginx/www/html:/usr/share/nginx/html -v /hexo_nginx/certs:/etc/ssl/certs -v /hexo_nginx/default.conf:/etc/nginx/conf.d/default.conf:ro -d nginx

image-20240105003320649

访问就可以看到可爱的小锁了,而且80端口也可以正常访问的,就是没有ssl而已

image-20240105003423943

[toc]

前言

毕业前大半年,我收到要设计毕业设计的消息之后,我选了一个最最最作死的毕业设计——基于RFID的图书借还系统,因为我是网工,只会网络和运维,可能还会些安服、安技的知识。但让我当开发去开发一个项目还是对我来说很困难的,现在,毕业设计如同一把达摩利斯之剑悬浮在我的头顶,也是我悲催的开始。

毕业设计里面需要的RFID,我当时考虑的时候就是找个RFID传感器就解决问题了,但很不幸!我树莓派4b的spi找不到RC522的传感器,所以没办法正常调用。我就买了创乐博的CreatePi v2.0,这玩意巨tm贵,花费我600大洋,买回来我就开始RFID的使用,刚开始的组装、刷系统、点亮等前戏还真别说,确实是有模有样!但到了RFID这里就出问题了,他们用的方案也是RC522,也就奠定了我失败!我的树莓派4B的系统硬件版本是1.4

1
2
dmesg | grep Rev
[ 0.000000] Machine model: Raspberry Pi 4 Model B Rev 1.4

因为没办法正常使用RFID我直接和客服联系,他们说可能RFID损坏,我寄回去!寄回去他们检修一段时间后回答我说,板子没有任何问题!这就离了个谱了。没办法正常使用RFID模块,用的是他们提供的东西,除了树莓派4B是我的。和客服扯了一堆有的没的,居然说我的树莓派有问题,没有用他们买的,当时他们给我的方案就是重新购买他们的树莓派4B,我当时那个气呀!树莓派就发行了两个版本硬件结构出现变化,一个是19年第一版树莓派4B有电源不识别的bug,后面发行的电路结构没有任何变化。客服那边说他们那边曾经有过这个问题就是系统硬件版本的问题,只有1.51.2的系统版本可以,而他们卖的配套树莓派则全是1.5系统硬件版本的。

image-20240104003728268

这个东西真的很神奇,我在官网查找资料,很少有人提及到这些东西,但是我查到了个东西,那就是树莓派的系统硬件版本销售

网址在这里

image-20240104005058350

我总结一下,就是树莓派4B有1.2、1.4和目前(2023年)1.5的,而版本1.3的没有流入市场,然后1.1==1.2,这个就很nice了!要知道我树莓派有很多啊!400、4B、5、pico、picoW等,刚好树莓派400的系统硬件版本是1.1的。我马上就让客服给我把板子寄回来,我使用树莓派400做RFID实验!果然成功了。

你以为就这么简单!其实我和客服ob大战了一个多小时!从rpi-eeprom打到Rev,刚开始我还以为我记错了,后面摆事实讲道理和技术客服聊,而客服的语言并不专业,让我在rpi-eeprom版本linux内核版本之间疯狂来回跳,最后我想到他说的可能是Rev。我让给他敲了命令给我看他的板子。。。果然!真是无语,上面那个图其实就是我ob完最后的挣扎,事实已定,我无力反抗。

1.LED模块实验

实验直接使用了物理pin的针脚顺序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 文件名:blinking_led.py
# 版本:
# author:
# 说明:LED灯显示实验


#导入GPIO库
import RPi.GPIO as GPIO
#从time模块导入sleep函数
from time import sleep

# 定义 LED 引脚
makerobo_led_pin = 37

#暂时忽略警告
GPIO.setwarnings(False)
# 使用实际的PIN管脚编码
GPIO.setmode(GPIO.BOARD)
# 将LED引脚设置为输出引脚,并将初始值设置为低(关闭)
GPIO.setup(makerobo_led_pin, GPIO.OUT, initial=GPIO.LOW)

# 程序入口
if __name__ == "__main__":
try:
while True: # 无限循环
GPIO.output(makerobo_led_pin, GPIO.HIGH) # 打开
sleep(0.5) # 延时1s
GPIO.output(makerobo_led_pin, GPIO.LOW) # 关闭
sleep(0.5) # 延时1s
except KeyboardInterrupt:
# 按下 CTRL+C 键, 清除并退出脚本
GPIO.cleanup()

LED模块实验视频

2.有源蜂鸣器传感实验

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/python
# -*- coding: utf-8 -*-
# 文件名:buzzer.py
# 版本:
# author:
# 说明:有源蜂鸣器

# 导入树莓Pi GPIO库
import RPi.GPIO as GPIO
# 从time模块导入sleep函数
from time import sleep
# 暂时忽略警告
GPIO.setwarnings(False)
# 使用实际的PIN管脚编码
GPIO.setmode(GPIO.BOARD)
# 设置蜂鸣器-引脚12作为输出
makerobo_buzzer=12

# 将蜂鸣器引脚设置为输出引脚,并将初始值设置为LOW(关闭)
GPIO.setup(makerobo_buzzer, GPIO.OUT, initial=GPIO.LOW)

# 程序入口
if __name__ == "__main__":
try:
while True:
GPIO.output(makerobo_buzzer,GPIO.HIGH)
print ("Beep")
sleep(0.5) # 延时0.5s
GPIO.output(makerobo_buzzer,GPIO.LOW)
print ("No Beep")
sleep(0.5)
except KeyboardInterrupt:
# 按下 CTRL+C 键, 清除并退出脚本
GPIO.cleanup()

3.按键组模块实验

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 文件名:button_buzzer.py
# 版本:
# author:
# 说明:按下(key3:37)按键,触发蜂鸣器,
# 也可以使用其他按键:key1:22,key2:33,key3:37,key4:35

# 导入树莓Pi GPIO库
import RPi.GPIO as GPIO
# 从time模块导入sleep函数
from time import sleep

# 配置按钮和蜂鸣器引脚
makerobo_button_pin = 37 # 按键
makerobo_buzzer_pin = 12 # 蜂鸣器

# 暂时忽略警告
GPIO.setwarnings(False)
# 使用实际的PIN管脚编码
GPIO.setmode(GPIO.BOARD)

# 设置按钮引脚按键管脚为高电平输入和蜂鸣器引脚作为输出
# GPIO.PUD_UP表示启用上拉电阻,这意味着当按钮没有被按下时,引脚被拉高到逻辑高电平
GPIO.setup(makerobo_button_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# 将蜂鸣器引脚设置为输出引脚,并将初始值设置为LOW(关闭)
GPIO.setup(makerobo_buzzer_pin, GPIO.OUT,initial=GPIO.LOW)

# 程序入口
if __name__ == "__main__":
try:
while True:
# 检查按键是否按下
if(GPIO.input(makerobo_button_pin) ==0):
sleep(0.1) # 延时10ms
if(GPIO.input(makerobo_button_pin) ==0):
# 打开蜂鸣器
GPIO.output(makerobo_buzzer_pin, GPIO.HIGH)
else:
# 没有按键按下, 关闭蜂鸣器
GPIO.output(makerobo_buzzer_pin, GPIO.LOW)
except KeyboardInterrupt:
GPIO.cleanup() # 清空GPIO

博客没有设计声音播放,所以我直接把蜂鸣器换成LED

按键组模块实验

4.继电器实验

我还年轻,还不想死这么快!!!

5.振动小马达模块实验

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 文件名:vibration.py
# 版本:
# author:
# 说明:在做这个项目的时候,要把指拨开关(BUTTON:UX2)的第1位拨到ON上,
# 做完实验之后,记得拨下来

# 导入树莓Pi GPIO库
import RPi.GPIO as GPIO
# 从time模块导入sleep函数
from time import sleep

# 定义振动传感器管脚
makerobo_vibration_pin = 13

# 暂时忽略警告
GPIO.setwarnings(False)
# 将board模式设置为GPIO.BOARD
GPIO.setmode(GPIO.BOARD)

# 设置振动管脚为输出模式,并将初始值设置为LOW(关闭)
GPIO.setup(makerobo_vibration_pin, GPIO.OUT,initial=GPIO.LOW)

# 程序入口
if __name__ == "__main__":
try:
# 打开振动传感器
GPIO.output(makerobo_vibration_pin, GPIO.HIGH)
# 等待2S时间
sleep(2)
# 关闭震动传感器
GPIO.output(makerobo_vibration_pin, GPIO.LOW)

except KeyboardInterrupt:
GPIO.cleanup() # 清空GPIO

6.声音传感器实验

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 文件名:sound.py
# 版本:
# author:
# 说明:在做这个项目的时候,要把指拨开关(BUTTON:UX3)的第6位拨到ON上,
# 做完实验之后,记得拨下来
# 可以扭那个电阻调节灵敏度,向左灵敏,向右不灵敏

# 导入树莓Pi GPIO库
import RPi.GPIO as GPIO
# 从time模块导入sleep函数
from time import sleep

# 定义声音传感器端口
makerobo_sound_pin = 18

# 暂时忽略警告
GPIO.setwarnings(False)
# 使用实际的PIN管脚编码
GPIO.setmode(GPIO.BOARD)

# 设置为输入脚,并设置为上拉为高电平(3.3V)
GPIO.setup(makerobo_sound_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# 程序入口
if __name__ == "__main__":
try:
while True:
# 检查是否检测到声音
if(GPIO.input(makerobo_sound_pin)==GPIO.LOW):
print('Makerobo Sound Detected!')
sleep(0.1)
else:
print('Makerobo No Sound Detected!')
sleep(0.1)
except KeyboardInterrupt:
# 检测到CTRL+C,清除并退出脚本
GPIO.cleanup()

不是很灵敏就是了

image-20240105202324535