Raspberry玩法和心得

[toc]

入门/萌新篇

安装树莓派基地系统

买回来一块树莓派4b裸板,首先得给它刷上系统。那么选官方的树莓派系统呢?还是选一个干净的ubuntu系统呢?嘿嘿,我们都不选,我们使用树莓派爱好者基地编译好的树莓派基地系统。里面集成了各种功能强大的图像化面板。

优化/关闭多余服务

安装宝塔服务

宝塔面板下载,免费全能的服务器运维软件 (bt.cn)

进阶/折腾篇

raspberry安装 hexo博客

学习raspberry是少不了折腾的,每一次的折腾都能积累不少经验,这些失败的记忆和折腾的历程会伴随时间慢慢淡去,一个博客能够记下你的学习历程以及知识的积累。那么,入门的萌新都不舍得花钱买服务器,公网ip,域名等等。那么,我们现在开始搭建的博客,可以在有“免费的x级域名”的github下用“免费的仓库”来搭建我们“宝贵的知识宝库”。

首先我们安装nvm

1
wget https://github.com/nvm-sh/nvm/archive/refs/tags/v0.39.1.tar.gz

然后解压

1
tar -xzvf v0.39.1.tar.gz

进入解压目录中

1
cd nvm-0.39.1/

安装

1
./install.sh

执行完成后会弹出这样的信息

export NVM_DIR=”$HOME/.nvm”
[ -s “$NVM_DIR/nvm.sh” ] && . “$NVM_DIR/nvm.sh” # This loads nvm
[ -s “$NVM_DIR/bash_completion” ] && . “$NVM_DIR/bash_completion” # This loads nvm bash_completion

然后在终端粘贴这个命令配置环境

1
2
3
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion

检测nvm是否安装成功

1
nvm --version

查看已经安装的版本

1
nvm list

查看可安装版本

如何查看通过NVM安装的Node.js版本呢?
你可以直接使用NVM命令:

1
2
# raspberry
nvm list available

安装Node.js

我们安装16.15.1版本node.js:

1
nvm install 16.15.1

激活Node.js版本

我们安装好Node.js以后,需要激活它

1
nvm use 16.15.1

换腾讯的源

1
npm config set registry http://mirrors.cloud.tencent.com/npm/

安装Git

1
apt-get install git

安装hexo博客软件

1
npm install -g hexo-cli

创建博客orange目录

1
mkdir orange

初始化博客目录

1
2
cd orange 
hexo init

启动博客服务

1
2
# 在orange目录里面,执行后去4000端口查看博客生成
hexo s

image-20220830135622620

终端

临时获得访问GitHub

很多时候,我们使用终端去克隆下载GitHub的东西的时候,发现会被拒绝的现象出现,这个原因是我们国家的GFW在发挥着不可或缺的作用,那么Github在世界是有大量的CDN节点的,我们可以利用这个特性,让我们的终端临时性重新获得下载东西的能力。

首先,访问tool.lu把域名的ip解析出来

image-20230125230205943

然后修改Linux系统的/etc/hosts文件

image-20230125230244687

那么终端就能临时性的访问Github的能力了。

终端代理访问GitHub

如果你们设计了本地代理软件的话,可以把局域网共享打开然后让树莓派也获得访问GitHub能力,这样终端下载国外的deb包速度也是很快的(因为我不习惯换国内源,国内源删太多东西了,有些资源包说没有的时候比下的慢更难受)

1
2
3
4
5
6
7
8
9
10
11
12
vim /etc/profile

function proxy_on() {
export http_proxy=http://your_ip:your_port
export https_proxy=$http_proxy
echo -e "终端代理已开启。"
}

function proxy_off(){
unset http_proxy https_proxy
echo -e "终端代理已关闭。"
}

弄好后,记得要source /etc/profile让其临时生效,不然就要重启才能使用了

通过proxy_on启动代理,proxy_off关闭代理。

可以执行curl cip.cc验证:

1
2
3
4
5
6
7
8
9
10
11
root@raspbian:~# proxy_on
终端代理已开启。
root@raspbian:~# curl cip.cc
IP : 3.113.4.154
地址 : 美国 美国

数据二 : 日本 | 东京Amazon数据中心

数据三 : 美国华盛顿 | 亚马逊

URL : http://www.cip.cc/3.113.4.154

更加先进的clash终端代理

下载项目

博客备份下载

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
dd bs=4M if=/dev/sda | gzip > bask-raspberry.img.gz

解压至盘符

1
gzip -cd bask-raspberry.img.gz | dd bs=4M of=/dev/sda

备份到远程服务器

1
scp -p bask-raspberry.img.gz user@ip:path/

scp 和 rsync : scp是每次传都是重新重传独立的一份,rsync使用的是差分传输算法,只会传输发生了变化的那部分

定时备份脚本

1
2
3
4
5
#!/bin/bash
TODAY=$(date + "%F")
cd /home/pi
tar -czf mydocsbackup-"$TODAY".tgz Documents
scp mydocsbackup-"$TODAY".tgz user@ip:path/bak/

这里需要双方互换ssh-key,不然需要验证密码,这样脚本就无法完成最后一步

命令

学到这里了,那么我默认你已经是具有RHCSA(RHCSA是Red Hat Certified System Administrator的简称,属于红帽linux的初级入门认证)的实力。下面学到的命令,跟RHCSA学到的可以起到相辅相成的作用。

安全移除数据

别以为,你rm -rf就是删掉了数据,其实跟win一样都是只删掉了对应的inode表项,是可以通过修复底层数据的修复来还原整个文件系统,如果你需要安全清理某些敏感数据,可以试一下shred这是通过多次覆盖,下面是覆盖5次。(其实dd命令也是可以以比特为单位覆盖数据,shred能干多次而已)

1
2
shred -v -n 5 a.txt
shred -v -n 5 /dev/sdb

我的世界

我的世界启动器安装

HMCL

HMCL

下载好后点开安装即可

我的世界程序安装

想要我的世界服务跑起来,光有启动器是不行的,还得有我的世界程序。那么这个 程序可以跑在本地电脑(自己一个人游玩和局域网内和小伙伴们一起游玩),也可以跑在公网服务器上(自己游玩的同时,小伙伴们也不限制在局域网连机,小伙伴可以在各自的家里舒舒服服地躺着玩,也因为是公网服务器,世界各地的小伙伴也可以进来happy,只不过由于地域距离的问题,他们要顶着高ping和国人玩耍。正常来讲是我们顶着高ping去玩人家的服务器,网易服务器的尿性你们懂的!!!)

raspberry树莓派4b部署我的世界

pinecraft里面已经支持到了1.20.1,旧版本的MC也可以通过之前发布的版本找到,本次以1.16.5作为安装教程。

image-20230714173342531

pinecraft项目所在地

下载安装程序:

1
git clone  https://github.com/Cat5TV/pinecraft.git

进入下载程序目录:

1
cd pinecraft/

安装

1
sudo ./install

image-20230216185458839

敲下安装命令可以看到一个非常好看的安装界面,不要吐槽,这在linux算是貂蝉西施那样的尤物了。我们按下两下空格,等待安装包下载。。。

image-20230216185626671

下面是安装路径和启动用户(pi),我们按下空格确认,这样我就知道程序运行在哪里,运行程序的用户是谁了。

image-20230216185652951

选择种子。。。

image-20230217111118092

选择服务器是什么版本的我选择fabric的。。。因为我只会fabric,你们如果不会直接默认paper(人家优化好说不定。。。)

image-20230217113335192

模式选择生存模式

image-20230217111444649

同意一下协议

image-20230217111500058

它想写点东西进你的boot

image-20230217111533209

意思是。。。把你的树莓派超频到1.9Ghz,吃掉你的树莓派内存4398MB~5319MB,要记得你这我的世界的版本是1.16.5

image-20230217113423508

image-20230217112021350

image-20230217113447754

image-20230217113513324

1
htop

可以看出mc吃内存和占用cpu很高

image-20230217113613574

切换用户

1
su - pi

进入目录

1
cd minecraft/

编辑文件,允许非正版用户加入MC

1
vim server.properties

改成false

image-20230217120355525

我们来看一下这个MC目录里面的结构

image-20230217121055428

里面有个叫server的执行文件,我们可以修改里面给java赋予的内存,可以把最小值改到1G即(1024M)

image-20230217121345778

我一般喜欢把能降低的都降低。。。尽量压缩使用内存留给更多后续服务

然后执行停止命令

1
./stop

然后执行运行我的世界命令

1
screen -R MC

然后

1
./server

image-20230217121804146

等待到100%就可以使用启动器进入我的世界了

image-20230217121841038

我们按住ctrl+a然后ctrl+d就能把这个sscreen程序运行的mc服务常驻后台

我们再看看htop,先后对比

修改server之前

image-20230217113613574

修改server之后

image-20230217122052848

Mem内存的使用状况已经降低,我们可以为后续加mod留出更大的空间

查看服务器ip

1
ip add

image-20230217123031830

由上面,可以知道我们MC服务器ip是内网地址192.168.0.107,那么我本机也是在内网的可以直接连接。

image-20230217123149553

启动器打开,进MC,左上角FPS达到惊人的98

image-20230217122542979

启动器

我们刚刚安装好HMCL后,打开应该都是这个样子

image-20230321145515476

我们首先登录账号,如果有微软正版账号也可以用正版登录,这里选择离线模式和微软账号都没有任何区别,这里用离线模式登录。

image-20230321145856307

image-20230321145933639

然后,回到最初界面,可以看到有个用户了。

image-20230321150044259

接下来,我们选择我的世界版本。

image-20230321150123098

点击安装新游戏版本

image-20230321150153176

我们服务器安装的就是1.16.5fabric版本

image-20230321150303388

image-20230321150521647

image-20230321150550571

image-20230321150605561

我们还是遵循选新不选旧原则

image-20230321150639242

本体+fabric+fabric API确认无误之后然后点击安装

image-20230321151023930

点击安装,静待安装成功

image-20230321151106422

安装成功,回到最初界面,发现图标变了。

image-20230321151213363

点击游戏开始玩原汁原味的MC 1.16.5吧!!!

加装光影

光影只会占本地端电脑的性能,不关linux服务器的事,所以光影只需放在本地即可

然后,在本地电脑端找到.minecraft–>shaderpacks放入下载好的光影压缩包

image-20230328202947555

然后在游戏加载光影压缩包即可

image-20230321151636309

材质包
加装mods

MOD它是一个英语的缩写,它的全称应该是modification,这个其实是修改的意思,不过中文给音译过来变成了“模组”,所以MOD其实就是游戏模组,作用就是对原本的游戏内容再加入一些新的东西,让我的世界这款游戏,更加的多样化。

这里有个要点,就是服务器加mod,本地不加mod是无法调用mod的。反之,本地加了mod,服务器没有加mod也是用不了的。必须要两端都加mod才能成功使用mod。

首先,在你linux服务器上面找到你mc的服务文件夹,然后cd进去,然后ls一下就能看到mods文件夹了

image-20230328201940861

在网上找到喜欢的mod,然后下载相对应版本的mod放进去mods文件夹中

image-20230328202239098

就是这样啦!什么模组菜单啦!一键整理啦!创世神啦!

然后,在本地电脑端也要找到.minecraft–>mods放入和服务器端一样的mod

image-20230328202522867

打开游戏就会自动和服务器同步载入mod啦

MC调用独显帧率暴涨

搭好MC会发现,进去玩的时候50多帧,下雨的时候直接掉到40多帧,这怎么办?

F3可以看到这个图,左边的52FPS夜晚状态,中间的GPU占用72%,右边的CPUI5-12450H可以知道目前使用的是CPU的核显,那个性能懂得都懂。

image-20230711235352153

接下来教你们怎么驱动独显跑MC,帧率暴涨,首先打开MC的启动器,我的以HMCL作为演示。

image-20230711235836145

打开HMCL,然后点击设置

image-20230711235920070

记住这个java路径

image-20230712000007798

点击电脑的开始菜单,找到设置按钮,并且点击进去

image-20230712000136395

找到游戏选项,点击进去

image-20230712000217306

Xbox Game Bar找到右上角这个图形设置,并且点击进去

image-20230712000315575

打开里面的硬件加速GPU计划,再点击下方的浏览找到Java的路径

image-20230712000438716

java.exe,javac.exe,javaw.exe这三个都加入进去

image-20230712000701293

并且三个都设置为独显

image-20230712000845161

image-20230712000925958

设置完成之后重启电脑,再次打开MC的F3就能看到帧率暴涨了

F3可以看到这个图,左边的144FPS夜晚状态,中间的GPU占用10%,右边的CPUI5-12450H,但是下方多了个3050显卡

image-20230712001320008

ZeroTier

最最最最nb的内网穿透工具!

zt安装命令

1
curl -s https://install.zerotier.com | sudo bash

自己先去zt官网创建网卡,然后需要的设备安装zt并且加入该网络就行了,支持linux、苹果和安卓手机、win电脑、mac等

pi-apps

https://github.com/Botspot/pi-apps

docker

安装docker

Centos

1
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

阿里云源

1
2
3
sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

官方源

1
2
3
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

由于树莓派基地系统自带了docker,我们只需要将docker服务启动即可,为了docker能够更好完成和为我们设备提供优质服务,这里建议将docker设置为开机自启。

1
2
3
4
5
6
7
8
9
10
11
12
# 查看docker状态
root@raspbian:~# systemctl status docker.service
# 开机自启docker
root@raspbian:~# systemctl enable docker.service
# 关闭开机自启docker
root@raspbian:~# systemctl disable docker.service
# 关闭docker
root@raspbian:~# systemctl stop docker.service
# 开启docker
root@raspbian:~# systemctl start docker.service
# 关闭再开启docker
root@raspbian:~# systemctl restart docker.service

怎么说咧!想要玩得起docker,有个地方是我们不得不去的,那就是docker的官方宝藏之地——Dockerhub,里面有世界各地说话又好听、技术又高的大佬,他们写好的容器则上传到了dockerhub,这些容器就是一个小型的服务或者说是应用。这些应用可以独立或者混合其他容器一起使用。我们后面会讲到部署一个wordpress博客然后用到mariadb数据库容器的案例。再此之前,我们还是先老老实实去b站学习有关docker的各种课程,学习好docker对我们后面学习其他的容器化有很大帮助,而docker里面的网络内容则会贯穿整个进阶篇章。

配置镜像加速

额,换了上面的源就别搞下面的加速了

镜像加速

1
vim /etc/docker/daemon.json

加入这个中科大的源

1
2
3
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

重新加载配置

1
systemctl daemon-reload
1
systemctl restart docker

docker-compose安装

docker-compose二进制执行包

把二进制包放下面路径

1
/usr/local/bin/

并且改名为docker-compose就行了

papermc-server

minecraft-papermc-server

openwrt

openwrt软路由可以替我们电脑实现一些魔法上网的功能,将fq功能给予树莓派处理可以让我们的fq体验更加顺畅丝滑。

下面我以docker容器化部署一下openwrt,实现家庭设备魔法上网。

拉取镜像

1
2
# 先下载openwrt镜像,这个镜像是树莓派4b的openwrt镜像
docker pull registry.cn-shanghai.aliyuncs.com/suling/openwrt:rpi4

查看镜像

1
docker images

打开网卡混杂模式

1
sudo ip link set eth0 promisc on 

创建网络(须结合实际网络情况,不能照抄命令)

1
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 macnet
1
2
3
4
5
6
7
8
9
--subnet=192.168.1.0/24  #树莓派正所处在192.168.1.x网段

--gateway=192.168.1.1 #树莓派的网关(即路由器ip)

parent=eth0 #这个是物理网卡名字

macvlan #这是创建的一个驱动程序macvlan管理网络(已经创建了192.168.1这个网络段给它)

macnet #macnet创建的网络名字

查看macnet网络创建程度

1
docker network ls

创建并启动容器

1
docker run --restart always --name openwrt -d --network macnet --privileged registry.cn-shanghai.aliyuncs.com/suling/openwrt:rpi4 /sbin/init

进入容器并修改相关参数

1
docker exec -it openwrt bash

执行此命令后我们便进入 OpenWrt 的命令行界面,首先,我们需要编辑 OpenWrt 的网络配置文件:

1
vim /etc/config/network

我们需要更改 Lan 口设置:

1
2
3
4
5
6
7
8
9
10
config interface 'lan'
option type 'bridge'
option ifname 'eth0'
option proto 'static'
option ipaddr '192.168.1.100' #自己设置一个ip,这个ip是你即将要访问的openwrt控制面板
option netmask '255.255.255.0'
option ip6assign '60'
option gateway '192.168.1.1'
option broadcast '192.168.1.255'
option dns '8.8.8.8'

所有的 192.168.1.x 需要根据树莓派所处网段修改,option gateway填写路由器的 IP。

option ipaddr 项目定义了 OpenWrt 的 IP 地址,在完成网段设置后,IP最后一段可根据自己的爱好修改(前提是符合规则且不和现有已分配 IP 冲突)。

重启网络

1
/etc/init.d/network restart

输入完成这段命令之后,按住键盘的ctrl+p+q就能退出openwrt容器的命令行界面。

如果有更换mac的要求,下面给一个临时更换的办法,重启会失效要注意哦!

1
ip link set dev br-lan address 12:34:56:78:9A:BC

进入控制面板

在浏览器中输入option ipaddr 项目中的 IP 进入 Luci 控制面板,若option ipaddr 的参数为 192.168.1.100,则可以在浏览器输入 http://192.168.1.100进入控制面板。

用户名:root

**密码:password **

image-20221222182120848

登录进去后可以看到树莓派的基础信息、cpu架构、cpu温度等信息

image-20221222182250444

fq的功能配置:左边的列表选择服务–>PassWall,可以看到这个界面。

image-20221222182535583

首先,打开里面的主开关

image-20221222182649678

复制fq节点的订阅地址到节点订阅选项

image-20221222183121714

设置完成之后点击手动订阅可以看到相应日志

image-20221222183224283

回到节点列表就可以看到大量节点出现

image-20221222183338376

我一般喜欢开放固定端口代理流量,这样我就可以通过ip+端口使用代理服务器

image-20221222183615463

image-20221222183815397

image-20221222183910155

image-20221222183920184

清理完成刷新一下,fq服务就可以使用了。win系统有代理功能的,首次fq可以先在win系统里面设置,然后打开谷歌浏览器安装代理插件。

image-20221222184044294

image-20221222184141529

image-20221222184202042

这样可以很好的切换,而且只有浏览器能够fq,想要电脑全局fq就在代理里面设置ip+端口即可。记住win的代理和浏览器的插件只能开一个,别环路了。。。

网络修复

用久了发现,树莓派居然没办法将自己的流量代理这就很离谱了,我用ping命令测试了openwrt的容器ip,发现是没办法ping通的,然后把openwrt防火墙清空了还是不行。在同一个网段下,主机居然无法ping通自己肚子里openwrt,这里我重新想了docker容器和主机之间的网卡之间的关系。

我认为,我在发送ping命令的icmp给openwrt的时候,流量通过树莓派的物理网卡出去了,但是路由器说流量应该流回树莓派内,然后接收到流量的树莓派因为规则把这股流量给丢弃了(因为没有找到内部的openwrt设备ip),这是我的猜想。

所以,我觉得应该桥接一个网卡出来,这个网卡是和树莓派、openwrt都在同一个网段下的才行,而且ip要独立(非树莓派的ip、非openwrt的ip)

编辑/etc/network/interfaces文件

1
2
3
4
5
6
7
8
9
# 添加下面
auto macvlan
iface macvlan inet static
address 192.168.1.5 #这个ip一定要非树莓派的ip和非openwrt的ip
netmask 255.255.255.0
gateway 192.168.1.1 #要同一个网段
dns-nameservers 192.168.1.1
pre-up ip link add macvlan link eth0 type macvlan mode bridge
post-down ip link del macvlan link eth0 type macvlan mode bridge
  • pre-up ip link add macvlan link eth0 type macvlan mode bridge: 在接口启动之前,使用 ip link add 命令创建一个名为 macvlanmacvlan 类型的子接口,连接到 eth0 主接口上,以桥接模式运行。
  • post-down ip link del macvlan link eth0 type macvlan mode bridge: 在接口关闭之后,使用 ip link del 命令删除 macvlan 子接口。

重启树莓派即可,就发现可以pingopenwrt的容器ip

docker版的openwrt还有其他的很多功能,可以自己私下去探索,这里就不再多说了,各自努力吧!

aria2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
docker run -d \
--name aria2-pro \
--restart unless-stopped \
--log-opt max-size=1m \
-e PUID=$UID \
-e PGID=$GID \
-e UMASK_SET=022 \
-e RPC_SECRET=orange \ # 这个自定义,一定要记住
-e RPC_PORT=6800 \
-p 6800:6800 \
-e LISTEN_PORT=6888 \
-p 6888:6888 \
-p 6888:6888/udp \
-v $PWD/aria2-config:/config \
-v $PWD/aria2-downloads:/downloads \
p3terx/aria2-pro

WebUI

1
2
3
4
5
6
docker run -d \
--name ariang \
--log-opt max-size=1m \
--restart unless-stopped \
-p 6880:6880 \
p3terx/ariang

mariadb

先拉取mariadb

1
docker pull mariadb

下面需要修改的地方就是密码password修改成为自己需要的密码就可以刷入命令了

1
docker run --restart=always --name mariadb01 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -v /data/mariadb/mysql.conf.d/mysql.cnf:/etc/mysql/mysql.conf.d/mysql.cnf -v /data/mariadb/data:/var/lib/mysql -d mariadb

那么再教你个好玩的,使用Navicat连接数据库爽的一批

image-20230328163059348

image-20230328163207688

wordpress

httpbin

现在越来越多的测试人员除了功能测试外,都已开始接触并进行接口测试。在学习接口测试时,尤其对于测试新手来说,接口测试工具上怎样填写请求地址、方法、请求参数等,还是多多少少有些困难,而且往往找不到合适的调试与请求的接口服务地址而无从练手。那么本地化部署httpbin就能满足你对接口调试的需求啦

1
docker pull kong/httpbin
1
docker run -d --restart always -p 8080:80 --name httpbin kong/httpbin:latest

image-20230725232514912

双网卡内外网优先级设置

根据自己的需要,有时候树莓派需要两张网卡,一张用于访问外网(wlan0),另一种用于连接内网(eth0)。

image-20230429233559391

我们可以看到这里连接了两个网卡,分别是wlan0和eth0,在我们学数通知识的时候,我们老师会教我们网络的知识,直连的跃点数是会比连接wifi的是要更小的(普遍情况下是这样,不要和我杠,杠的要不你别学)

image-20230429234002039

这里,我设计的网络是eth0是面向内网的,对我的nas起到稳定的网络传输和安全性;而wlan0是连接了我的热点,这里我ping了一下8.8.8.8,发现是完全ping不同的。

我们再查看了网络优先级方面,发现eth0的网络优先级是比wlan0高的(即eth0的网络跃点数metric比wlan0的跃点数metric要小)

我们可以使用以下命令查看跃点数

1
root@raspberrypi:~# ip route show

image-20230429234447247

一个100一个600,看得很清楚吧。这里我把wlan0跃点数调到99,192.168.137.1是路由器网关地址

1
root@raspberrypi:~# sudo ip route add default via 192.168.137.1 dev wlan0 proto dhcp metric 99

image-20230429234927301

wlan0这个网卡优先级马上就第一了,那么不出意外的话,这个网络就能通了

image-20230429235048919

上面讲的这个咧,是临时解决办法,要是想一劳永逸呢还是要把IPV4_ROUTE_METRIC=99这个写入到网卡配置文件中,但是。。。很不巧树莓派貌似没有。。。除非你用的不是树莓派官方的

那么我们也有另外的处理办法,把sudo ip route add default via 192.168.137.1 dev wlan0 proto dhcp metric 99这个命令写入一个文本里面,然后添加入contab里面,命令如下:

1
2
3
4
5
6
root@raspberrypi:/usr/bin# /usr/bin
root@raspberrypi:/usr/bin# vim network_metric
#!/bin/bash
ip route add default via 192.168.137.1 dev wlan0 proto dhcp metric 99

root@raspberrypi:/usr/bin# chmod +x network_metric

这里是设置开机执行文件

1
2
root@raspberrypi:/usr/bin# crontab -e
@reboot bash /usr/bin/network_metric

树莓派跑win98

看到这个标题是不是很疯狂?确实。。。真离谱

run-windows-98-on-raspberry-pi-with-dosbox-x

树莓派安装win10、win11

这个更逆天

wor-flasher

微型电台-FM

树莓派的 GPIO 引脚可以用作信号输出,因此,可以把音频信号通过树莓派进行 FM 调制后从 GPIO引脚送出,这样树莓派就变成了一个微型FM 发射器,即微型电台,可以自己指定发射频率,打开 FM 调频收音机,调到对应频道就可以接收到树派播放的 FM 广播信号了。
通过安装 PiFmRds 来将树莓派变成微型 FM 电台

安装过程

首先,执行以下命令,安装 sndfile 库:

1
sudo apt-get install libsndfile1-dev

第二步,执行以下命令,克隆 PiFmRds 的源代码:

1
git clone https://github.com/ChristopheJacquet/PiFmRds.git

第三步,执行以下命令,进行编译:

1
2
3
cd PiFmRds/src
make clean
make

播放命令

编译完成后,可以执行 sudo ./pi_fm_rds 命令发射 FM信号。pi_fm_rds 命令格式为:

1
sudo ./pi_fm_rds -audio [filename] -freq [frequency]

其中-audio [filename]是指定播放文件是wav格式的音频文件;

-freq [frequency]是指定发射信号的频率

下面是不指定发射信号播放666.wav文件

1
2
3
4
5
6
7
8
9
10
root@ubuntu:~/PiFmRds/src# pwd
/root/PiFmRds/src
root@ubuntu:~/PiFmRds/src# sudo ./pi_fm_rds
root@ubuntu:~/PiFmRds/src# sudo ./pi_fm_rds
Using mbox device /dev/vcio.
Allocating physical memory: size = 3403776 mem_ref = 4 bus_addr = fe8bb000 virt_addr = 0xffff94ea1000
ppm corr is 0.0000, divider is 1644.7368 (1644 + 3018*2^-12) [nominal 1096.4912].
PI: 1234, PS: <Varying>.
RT: "PiFmRds: live FM-RDS transmission from the RaspberryPi"
Starting to transmit on 107.9 MHz.

image-20230610164626929

然后新建一个shell窗口,执行播放文件

1
root@ubuntu:~/PiFmRds/src# sudo ./pi_fm_rds -audio 666.wav 

image-20230610164453696

用FM收音机接收107.9MHZ信号,可以听到文件声音

微信图片_20230610164817

增强播放效果

在树莓派 GPIO 4(物理引脚编号为7)接上一根长 20m 的杜邦线作为发射天线来增强 FM 信号,然后使用 FM(调频)收音机收听,在 1m 范围内音质很清晰,在3m 范围内仍然可以听得见,超过 3m 信号会很弱。

iptables

一、简介一下iptables

iptables命令中ACCEPT(允许流量通过)、LOG(记录日志信息)、REJECT(拒绝流量通过)、DROP(拒绝流量通过)。允许动作和记录日志工作都比较好理解,着重需要讲解的是这两条拒绝动作的不同点,其中REJECT和DROP的动作操作都是把数据包拒绝,DROP是直接把数据包抛弃不响应,而REJECT会拒绝后再回复一条“您的信息我已收到,但被扔掉了”,让对方清晰的看到数据被拒绝的响应。

四表五链

命令解释
1
2
3
4
5
6
7
8
9
10
11
12
# 允许192.168.1.0/24这个IP段的流量流进服务器的80端口
iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 80 -j ACCEPT

# 只允许本机22端口被192.168.1.0/24网段访问,其他流量均被拒绝。我们输入命令:
iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT

# 拒绝所有人访问本机4444到5555端口,输入命令:
iptables -A INPUT -p tcp --dport 4444:5555 -j REJECT
iptables -A INPUT -p udp --dport 4444:5555 -j REJECT

# 删除INPUT链中的第2条策略,首先我们看一下防火墙策略中的第二条策略是什么“iptables -L”,然后输入命令删除第2条策略:
iptables -D INPUT 2

当我们使用 ipt­a­bles 设置了一些规则后需要对这些设置永久保存,避免当服务器重启后规则消失需要重新配置。为了能够让 ipt­a­bles 规则永久保存,这里介绍两种方法:

1、 使用iptables-restore

在设置了一系列的 ipt­a­bles 规则后,首先需要切换到 root 用户,执行如下命令将规则保存到文件中:

1
2
3
# 这包括了ipv4和ipv6规则,如果只有ipv4的规则可以只执行第一条
iptables-save > /etc/iptables-rules
ip6tables-save > /etc/ip6tables-rules

然后编辑 /etc/net­work/in­ter­faces 文件,在对应的外网网卡下(通常是 eth0 接口,如果不是请按照实际情况添加,可以通过 if­con­fig 查看外网 ip 对应的网卡接口)插入下面两行:

1
2
pre-up iptables-restore < /etc/iptables-rules
pre-up ip6tables-restore < /etc/ip6tables-rules

这样当服务器重启后就能自动加载已经配置好的 ipt­a­bles 规则了。如果后续有添加新的规则则需要重新执行上面的 ipt­a­bles-save 命令更新规则文件即可

2、 使用iptables-persistent

这个方法是我更喜欢使用的,它实际操作起来更简单一些。

  • 首先安装iptables-persistent工具
1
sudo apt install iptables-persistent
  • 每当设置了新的iptables规则后,使用如下命令保存规则即可,规则会根据ipv4和ipv6分别保存在了/etc/iptables/rules.v4和/etc/iptables/rules.v6文件中。
1
2
3
4
# 保存现有规则
sudo service netfilter-persistent save
# 读取并应用先有规则
sudo service netfilter-persistent reload

由于 ipt­a­bles-per­sis­tent 在安装时已经把它作为一个服务设置为开机启动了,它在开机后会自动加载已经保存的规则,所以也就达到了永久保存的目的。其实原理和第一种方法是类似的,只是设置起来会更简单一些。

RaspAP

https://raspap.com/

NAS

samba

首先,安装samba服务

1
apt install samba samba-common-bin

添加文件配置

1
vim /etc/samba/smb.conf

配置如下:

1
2
3
4
5
[share]                      #共享文件夹名字,将在网络上显示此名称
path = /orange/share #共享文件夹的路径
valid users = orange #允许访问的用户名称
browseable = yes #允许浏览文件夹
writable = yes #可以写入文件

创建orange的linux用户

1
useradd -m orange

创建samba的orange用户并且设置密码

1
smbpasswd -a orange

重启samba服务即可访问

1
systemctl restart smbd.service

这里由于华为手机有隐私保护,不能截图,所以我已经登录账号密码进来了

微信图片_20230607011823

咳咳,都配了认证,那么我们是不是可以端口映射一下

把445映射出去即可

image-20230607015948428

手机和win电脑都验证过了,完全没问题。

NFS

安装rpcbind

1
apt install rpcbind

查看rpcbind.socket状态

1
systemctl status rpcbind.socket

image-20230508145322917

可以看出rpcbind.socket一直在监听端口

安装nfs

1
sudo apt install nfs-kernel-server

image-20230508145655757

查看rpcbind.socket状态

1
systemctl status rpcbind.service

image-20230508145512096

从上面安装好看nfs再查看rpcbind.service可以发现,nfs没开启服务,rpcbind.service也不会自动开启

这次,我们开启nfs再查看nfs和rpcbind.service的服务状态

1
systemctl restart nfs-kernel-server.service
1
systemctl status nfs-kernel-server.service

image-20230508145901666

1
systemctl status rpcbind.service

image-20230508145927673

可以看出,nfs服务启动后,rpcbind.socket检测到端口被激活从而开启了rpcbind.service服务

编辑/etc/exports

后面的权限我先不加,这里默认是只读

1
/data *

image-20230508152044419

重新加载配置(不需要重启服务)

1
exportfs -r

image-20230508152209456

查看默认权限

1
exportfs -v

image-20230508152254228

显示NFS服务器的共享信息

1
showmount -e

image-20230508152331011

win10挂载nfs共享目录

先打开控制面板,找到程序

image-20230508152719331

点击启用或者关闭windows功能

image-20230508152753361

把nfs服务全选上

image-20230508152913031

然后确认退出,打开此电脑找到映射网络驱动器

image-20230508152644711

按照\\ip\共享目录名字这样的格式

image-20230508153030562

然后就能看到共享的文件了

image-20230508153203212

由于上面在/etc/exports里没有添加权限使用仅有下载功能,硬盘的大小还不能完全支配

image-20230508153328881

卸载挂载。。。懂?

image-20230508154432995

linux挂载nfs共享目录

很简单。。。知道怎么挂载磁盘吧。。。就是这样

1
mount ip:/data /服务器的本地文件夹

临时挂载很不方便,你懂的!!!重启就没了,可以试一下永久挂载,这里就不BB了

卸载挂载

1
umount /服务器的本地文件夹

权限修改

rw

1
/data *(rw)
1
2
exportfs -r
exportfs -v

image-20230508160434284

拉个文件进去,它说哒咩!!!

image-20230508155738554

这怎么回事捏,我可是win10的主人,居然没有权限访问?

好吧!虽然是win10的主人,但是linux层面上你只是一个来宾,所以还要在文件夹授予其他用户权限

1
chmod o+rw /data/

image-20230508160220572

嘿嘿!给了权限就可以上传了

image-20230508160209860

权限选择 权限的作用
ro 只读
rw 读写
async 异步,先将数据写入到内存,在将数据写入到硬盘(性能高)
root_squash 将客户端使用的是root用户时,则映射到NFS服务器的用户为NFS的匿名用户(nfsnobody)
no_root_squash 将客户端使用的是root用户时,则映射到FNS服务器的用户依然为root用户
all_squash 默认选项,将所有访问NFS服务器的客户端的用户都映射为匿名用户,不管客户端使用的是什么用户
anonuid 设置映射到本地的匿名用户的UID(配合all_squash使用)
anongid 设置映射到本地的匿名用户的GID(配合all_squash使用)
sync 默认选项,保持数据同步,数据同步写入到内存和硬盘
secure NFS客户端必须使用NFS保留端口(通常是1024以下的端口),默认选项
insecure 允许NFS客户端不使用NFS保留端口(通常是1024以上的端口)

OpenMediaVault

https://www.openmediavault.org/

OpenMediaVault | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

换源(树莓派5)
1
2
3
4
5
6
7
8
9
10
11
cat >/etc/apt/sources.list<<EOF
# 清华源
deb https://mirrors4.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
#deb-src https://mirrors4.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors4.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
#deb-src https://mirrors4.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors4.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
#deb-src https://mirrors4.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb https://mirrors4.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
#deb-src https://mirrors4.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
EOF
网络修复
这个是我的特殊需求!你们别用!
1
2
3
4
cat >add_route.sh<<EOF
#! /bin/bash
sudo ip route add default via 192.168.200.1 dev wlan0 proto dhcp metric 99
EOF
1
chmod +x add_route.sh
zt
1
curl -s https://install.zerotier.com | sudo bash

自己加入自己的zt网络

安装
  • 注意

安装omv需要无头树莓派,也就是无桌面化的树莓派才行,所以千万别装有桌面化的镜像!!!我是安装树莓派5的64bit lite版本,后面装桌面应该也可以,但是我不会装的

image-20231224215907560

前期部署
  • 设置root密码

omv装好后会把用户一切权限禁用,从而导致用户没办法登录ssh,如果root管理员没有设置密码和开启允许root管理员ssh登录,那就完蛋了!

1
2
3
4
root@R5:~# passwd
New password:
Retype new password:
passwd: password updated successfully
  • 允许root管理员ssh登录
1
2
3
root@R5:~# nano /etc/ssh/sshd_config
#在里面加入这句
PermitRootLogin yes
  • 重启ssh服务
1
root@R5:~# systemctl restart sshd
  • 提前解析raw.githubusercontent.com的ip

反向解析最近能用ip网站

在中国玩服务器百分之九十的问题都来自网络!而世界上最大的同性交流网站gayhub(github)经常被,所以学多点骚操作很有必要

1
2
# 通过上面解析出来的ip
echo "185.199.111.133 raw.githubusercontent.com" >> /etc/hosts
  • 安装个救命的网络包
1
apt-get install network-manager

因为安装omv会导致无线网卡直接关闭,而树莓派5很特殊,用平常的改文件没办法让它连上wifi的,这个安装包里面有个叫nmtui的命令超级好用!

我的树莓派是双网卡连接模式,所以我知道这个坑!使用单网卡而且用的是网口当我没说

一键安装脚本
1
wget -O - https://raw.githubusercontent.com/OpenMediaVault-Plugin-Developers/installScript/master/install | sudo bash
面板设置
  • 账号:admin
  • 密码:openmediavault

image-20231224203714581

image-20231224233310464

image-20231224233431216

image-20231224233459808

image-20231224233758795

image-20231224233818742

image-20231224233917785

image-20231224233952330

image-20231224234040032

image-20231224234151290

image-20231224234258984

image-20231224234321072

image-20231224235034120

image-20231224235055339

image-20231224235643001

特殊待遇

我这边有特殊需求,要手机设备和内网设备可以连接nas,其他全部拒绝访问nas,所以有了这个配置

  • 除了192.168.0.0/24和192.168.200.108该ip设备,其他一并拒绝,有密码也没用
  • samba我还是很不放心的,虽然已经开启smb3.0,但是我曾经用其他舍友的电脑直接无密码登进去了,就让我对nas设备产生了安全顾虑!
  • 后面有新的安全内容也会进行添加
1
2
3
4
root@R5:~# vim /etc/samba/smb.conf
# 用户配置加入这个
hosts allow = 192.168.0.0/24 192.168.200.108
hosts deny = ALL

k3s

1
sudo nano /boot/cmdline.txt
1
cgroup_memory=1 cgroup_enable=memory

ansible

esxi

ESXI 挂载U盘

image-20241008141317906

先进ssh里,这个时候别插u盘

1
2
3
4
#  执行下面两条命令
/etc/init.d/usbarbitrator stop

chkconfig usbarbitrator off

插入 USB 硬盘

1
2
# 执行就能看到设备
esxcli storage core device list |grep -i usb

在WEB就能这样看

image-20241008141714748

raspberry python 控 GPIO

python添加gpiozero库

raspberry python 与树莓派硬件交互

python添加psutil库、OS库、commands库、subprocess库