在linux平台上如果需要实现任务调度功能可以编写cron脚本来实现。
以某一频率执行任务
linux缺省会启动crond进程,crond进程不需要用户启动、关闭。
crond进程负责读取调度任务并执行,用户只需要将相应的调度脚本写入cron的调度配置文件中。
cron的调度文件有以下几个:
1.crontab
2.cron.d
3.cron.daily
4.cron.hourly
5.cron.monthly
6.cron.weekly
如果用的任务不是以hourlymonthlyweekly方式执行,则可以将相应的crontab写入到crontab或cron.d目录中。
示例:
每隔一分钟执行一次脚本/opt/bin/test-cron.sh
可以在cron.d新建脚本echo-date.sh
内容为
*/1****root/opt/bin/test-cron.sh
2、cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron是Linux的内置服务,如果它不自动起来,可以用以下的方法启动、关闭这个服务:
/sbin/servicecrondstart//启动服务
/sbin/servicecrondstop//关闭服务
/sbin/servicecrondrestart//重启服务
/sbin/servicecrondreload//重新载入配置
你也可以将这个服务在系统启动的时候自动启动:
在/etc/rc.d/rc.local这个脚本的末尾加上:
/sbin/servicecrondstart
现在Cron这个服务已经在进程里面了,我们就可以用这个服务了
查看服务是否已经运行用ps-ax|grepcron
3、crontab命令
查看该用户下的crontab服务是否创建成功,用crontab-l命令
命令whichphp查看linux下安装的php的路径
cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:
crontab-u//设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab-l//列出某个用户cron服务的详细内容
crontab-r//删除没个用户的cron服务
crontab-e//编辑某个用户的cron服务
比如说root查看自己的cron设置:crontab-uroot-l
再例如,root想删除fred的cron设置:crontab-ufred-r
在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab-uroot-e
进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1****ls>>/tmp/ls.txt
任务调度的crond常驻命令crond是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
crontab命令选项:
-u指定一个用户
-l列出某个用户的任务计划
-r删除某个用户的任务
-e编辑某个用户的任务
4、cron文件语法:
分小时日月星期命令
0-590-231-311-120-6command(取值范围,0表示周日一般一行对应一个任务)
记住几个特殊符号的含义:
“*”代表取值范围内的数字,
“/”代表”每”,
“-”代表从某个数字到某个数字,
“,”分开几个离散的数字
5、新增调度任务
新增调度任务可用两种方法:
1)、在命令行输入:crontab-e然后添加相应的任务,wq存盘退出。
2)、直接编辑/etc/crontab文件,即vi/etc/crontab,添加相应的任务。
6、查看调度任务
crontab-l//列出当前的所有调度任务
crontab-l-ujp//列出用户jp的所有调度任务
7、删除任务调度工作
crontab-r//删除所有任务调度工作
8、任务调度执行结果的转向
例1:每天5:30执行ls命令,并把结果输出到/jp/test文件中
305***ls>/jp/test2>&1
注:2>&1表示执行结果及错误信息。
编辑/etc/crontab文件配置cron
cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用cron服务做一些事情。
用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。此文件的文件格式是:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root//如果出现错误,或者有数据输出,数据作为邮件发给这个帐号
HOME=///使用者运行的路径,这里是根目录
#run-parts
01****rootrun-parts/etc/cron.hourly//每小时执行/etc/cron.hourly内的脚本
024***rootrun-parts/etc/cron.daily//每天执行/etc/cron.daily内的脚本
224**0rootrun-parts/etc/cron.weekly//每星期执行/etc/cron.weekly内的脚本
4241**rootrun-parts/etc/cron.monthly//每月去执行/etc/cron.monthly内的脚本
大家注意”run-parts”这个参数了,如果去掉这个参数的话,后面就可以写::要运行的某个脚本名,而不是文件夹名了。
例如:
1)在命令行输入:crontab-e然后添加相应的任务,wq存盘退出。
2)直接编辑/etc/crontab文件,即vi/etc/crontab,添加相应的任务
1122110*rm-rf/mnt/fb
总结:
编写定时任务的两种方式:1.sudovim/etc/crontab2.sudocrontab-e
查看定时任务的两种方式:1.sudocat/etc/crontab2.sudocrontab-l
*/1****appusercd/app/webserver/website/api-cb.chuchujie.com/master/current/script/&&./back_coupon.sh210>>/dev/null2>&1
查看定时任务是否运行:
sudotail-f/var/log/cron//定时任务日志(查看刚才设置的任务是否执行)
注:脚本有可执行权限
sha.sh(不需要执行权限)
./sh(需要执行权限)
ddif=/dev/zerobs=1Mcount=4096>>FydeOS.img
sudolosetup/dev/loop18FydeOS.img#挂载img文件sudopartprobe/dev/loop18#重载分区表
sudoparted/dev/loop18unitsprintrm1mkpartSTATE5898240s100%quit
fdisk-l
sudolosetup-d/dev/loop18
sudomkdir/mnt/lswjj#创建临时文件夹sudomount/dev/loop18p1/mnt/lswjj#根据重载分区表后的情况是p1还是p2等修改文件sudosync#同步文件sudoumount/mnt/lswjj#卸载挂载的目录sudolosetup-d/dev/loop18#卸载挂载的设备
今天车里听到这首歌,当年的林志颖是多么的稚嫩。我的青春,我的回忆。
一个B类地址,它的子网掩码为255.255.224.0,能划分多少个子网每个子网容纳多少台主机
255.255.224.0转成二进制是:11111111.11111111.11100000.00000000
从上可以看出它向主机位借了三位,子网为2的3次方等于8,所以它有8个子网,分别为:000001010011100101110111减去首尾即:001-110六个子网
再看主机位,减去子网尾,也就是2的13次方减去2等于8190也就是每个子网可以容纳8190台主机上述子网掩码化成二进制就是11111111111111111110000000000000就是说向主机位借了3位1.子网个数=把借的主机位个数做为2的几次方,也就是2的三次方=8个子网:2,每个子网容纳的主机数=把网络位(0的位数)做为2的几次方再减去2=2的13次方-2=8190。
这是规率,如果不知道原因就先记规率,以后会明白的。255.255.224.0/19这个19代表是19位16进制的1由于是一个B类的地址,所有前16位是网络位。而后16位才包括子网为和主机位。要记住几个公式主机数是2的N次幂-2这里的N是代表这16位0的个数。255.255.224.0他的十六进制就是11111111.11111111.11100000.00000000后面的0的数量就是N,也就是主机数。所以该掩码的主机数是2的13次幂-2等于8192个
子网数后16位中1个个数就是2的3次幂8个子网数
可用的子网号分别是0,32,64,96,128,160,192,224这八个。(是用256-224=32然后依次递加32直到224)
所以他们的可用的子网地址就是172.16.0.0172.16.32.0以此类推到172.16.224.0这8个。
每个子网可用主机地址的范围是172.16.0.1~172.16.31.254172.16.32.1172.16.63.254以此类推直到172.16.192.1~172.16.223.254
新安装的Linux系统,建议安装好后,运行3个bench测试命令。
wget-qO-bench.sh|bash或者
curl-Lso-bench.sh|bash命令2:
wget-qO-86.re/bench.sh|bash或者
curl-so-86.re/bench.sh|bash备注:bench.sh既是脚本名,同时又是域名。
同时最好做一下Unixbench。
UnixBench是一个类unix系(Unix,BSD,Linux)统下的性能测试工具,一个开源工具,被广泛用与测试linux系统主机的性能。Unixbench的主要测试项目有:系统调用、读写、进程、图形化测试、2D、3D、管道、运算、C库等系统基准性能提供测试数据。
测试方法:
Double-PrecisionWhetstone这一项测试浮点数操作的速度和效率。这一测试包括几个模块,每个模块都包括一组用于科学计算的操作。覆盖面很广的一系列c函数:sin,cos,sqrt,exp,log被用于整数和浮点数的数学运算、数组访问、条件分支(conditionalbranch)和程序调用。此测试同时测试了整数和浮点数算术运算。
ExeclThroughput此测试考察每秒钟可以执行的execl系统调用的次数。execl系统调用是exec函数族的一员。它和其他一些与之相似的命令一样是execve()函数的前端。
PipeThroughput管道(pipe)是进程间交流的最简单方式,这里的Pipethroughtput指的是一秒钟内一个进程可以向一个管道写512字节数据然后再读回的次数。需要注意的是,pipethroughtput在实际编程中没有对应的真实存在。
Pipe-basedContextSwitching这个测试两个进程(每秒钟)通过一个管道交换一个不断增长的整数的次数。这一点很向现实编程中的一些应用,这个测试程序首先创建一个子进程,再和这个子进程进行双向的管道传输。
SystemCallOverhead测试进入和离开操作系统内核的代价,即一次系统调用的代价。它利用一个反复地调用getpid函数的小程序达到此目的。
ShellScripts测试一秒钟内一个进程可以并发地开始一个shell脚本的n个拷贝的次数,n一般取值1,2,4,8。(我在测试时取1,8)。这个脚本对一个数据文件进行一系列的变形操作(transformation)。
很有趣,家里有蒲公英的路由器,其实已经不怎么用了,因为有一些硬盘还没来得及放到nas里面,所以挂到了蒲公英的U盘共享里面。
目前碰到了一个问题是如何在Linux里面挂载这个硬盘。
红色部分非常关键,蒲公英共享如果不输入这部分是没有办法正常共享的。
WireGuard是由JasonDonenfeld等人用C语言编写的一个开源3层网络隧道工具,被视为下一代VPN协议,旨在解决许多困扰IPSec/IKEv2、OpenVPN或L2TP等其他VPN协议的问题。它与Tinc和MeshBird等现代VPN产品有一些相似之处,即加密技术先进、配置简单。从2020年1月开始,它已经并入了Linux内核的5.6版本,这意味着大多数Linux发行版的用户将拥有一个开箱即用的WireGuard。
无论你是想破墙而出,还是想在服务器之间组网,WireGuard都不会让你失望,它就是组网的『乐高积木』,就像ZFS是构建文件系统的『乐高积木』一样。
WireGuard与其他VPN协议的性能测试对比:
可以看到WireGuard直接碾压其他VPN协议。再来说说OpenVPN,大约有10万行代码,而WireGuard只有大概4000行代码,代码库相当精简。
WireGuard优点:
WireGuard不能做的事:
当然,你可以使用WireGuard作为底层协议来实现自己想要的功能,从而弥补上述这些缺憾。
注意
WireGuard的安装条件非常苛刻,对内核版本要求极高,不仅如此,在不同的系统中,内核,内核源码包,内核头文件必须存在且这三者版本要一致,RedHat、CentOS、Fedora等系统的内核,内核源码包,内核头文件包名分别为kernel、kernel-devel、kernel-headers;Debian、Ubuntu等系统的内核,内核源码包,内核头文件包名分别为kernel、linux-headers。果这三者任一条件不满足的话,则不管是从代码编译安装还是从repository直接安装,也只是安装了wireguard-tools而已。而WireGuard真正工作的部分,是wireguard-dkms,也就是动态内核模块支持(DKMS),是它将WireGuard编译到系统内核中。
目前WireGuard已经被合并到Linux5.6内核中了,如果你的内核版本>=5.6,就可以用上原生的WireGuard了,只需要安装wireguard-tools即可,内核版本<5.6,可能需要首先更新内核,否则可能会报错:Unabletoaccessinterface:Protocolnotsupported,如下为更新内核版本示例(CentOS)
了,只需要安装wireguard-tools即可,内核版本<5.6,可能需要首先更新内核,否则可能会报错:Unabletoaccessinterface:Protocolnotsupported,如下为更新内核版本示例(CentOS)
#重启reboot#查看升级后的内核版本uname--kernel-release牛刀小试最开始尝试可以在内网中进行,避开互联网不稳定或者防火墙等因素,节点可以是内网中的两台虚拟机或者跑两个docker容器进行尝试。
下面在docker容器中进行最简单的配置,环境信息如下:
创建两个容器wg1和wg2
#创建wg1dockerrun--rm-it--entrypoint=bash\--name=wg1\--cap-add=NET_ADMIN\--cap-add=SYS_MODULE\-ePUID=1000\-ePGID=1000\-v/lib/modules:/lib/modules\--sysctl="net.ipv4.conf.all.src_valid_mark=1"\linuxserver/wireguard#同样的方式,新开一个session创建wg2dockerrun--rm-it--entrypoint=bash\--name=wg2\--cap-add=NET_ADMIN\--cap-add=SYS_MODULE\-ePUID=1000\-ePGID=1000\-v/lib/modules:/lib/modules\--sysctl="net.ipv4.conf.all.src_valid_mark=1"\linuxserver/wireguard#在新开一个session查看wg1和wg2的ip,记住此IP,后续会用到dockerinspectwg1|grepIPAddress#假设是172.17.0.2dockerinspectwg2|grepIPAddress#假设是172.17.0.3配置生成在wg1上执行如下命令生成wg1和wg2的配置
注意IP地址的CIRD(ClasslessInter-DomainRouting)表示法:
wg1.conf:
$ping5.5.5.2PING5.5.5.2(5.5.5.2)56(84)bytesofdata.From5.5.5.1icmp_seq=1DestinationHostUnreachableping:sendmsg:Destinationaddressrequired...但是在wg2上pingwg1的内网IP5.5.5.1是可以ping通的,因为配置了相应的endpoint
$ping5.5.5.1PING5.5.5.1(5.5.5.1)56(84)bytesofdata.64bytesfrom5.5.5.1:icmp_seq=1ttl=64time=0.493ms64bytesfrom5.5.5.1:icmp_seq=2ttl=64time=0.195ms此时wg1和wg2peer已经配对,再在wg1上pingwg2可以ping通,至此简单的隧道已搭建完毕。
所谓直连,是指peer的一端位于NAT后,没有公网IP地址,另一端位于公网中,有独立的不变IP地址,通过位于NAT后的peer主动加入位于公网的peer达到组网的目的,假设位于NAT后的peer提供了局域网服务,那么位于公网的peer就可以直接访问NAT后的局域网服务,如下图所示:
假设位于公网主机的IP为3.68.156.128,称为peer2,位于NAT后的主机称为peer1,那么peer2的配置应该如下,注意,以下配置私钥只是举例,请勿照搬,应参考牛刀小试中自行修改。
#放开udp43155端口iptables-AINPUT-pudp--destination-port43155-jACCEPT#关闭该端口#iptables-DINPUT-pudp--destination-port43155-jACCEPTpeer1配置peer1的配置应该如下:
$wginterface:wg10publickey:1yrnzlpVNhpQyyBj0oehVqCaL/06RjK/tcd3icMuZ0Q=privatekey:(hidden)listeningport:43155在peer1中启动服务,输出如下信息,可以观察到
$wginterface:wg10publickey:451o6In0DqSTyg1GE4WzrK4Z0BLuFXTrjdqjBJ/RLwc=privatekey:(hidden)listeningport:33807peer:1yrnzlpVNhpQyyBj0oehVqCaL/06RjK/tcd3icMuZ0Q=endpoint:3.68.156.128:43155allowedips:5.5.5.1/32latesthandshake:3secondsagotransfer:92Breceived,180Bsentpersistentkeepalive:every15seconds此时,再去peer2中查看wg信息,可以看到peer1的endpoint自动加上了,该endpoint和端口会根据NAT进行变化,这就是所谓IP漫游,而这一点是用户感知不到的,无需关心。
$wginterface:wg10publickey:1yrnzlpVNhpQyyBj0oehVqCaL/06RjK/tcd3icMuZ0Q=privatekey:(hidden)listeningport:43155peer:451o6In0DqSTyg1GE4WzrK4Z0BLuFXTrjdqjBJ/RLwc=endpoint:5.20.222.65:33807allowedips:5.5.5.2/32,192.168.2.0/24latesthandshake:26secondsagotransfer:212Breceived,92Bsent尝试在peer2上访问peer1上的内网服务
如下为测试直连场景时的截图说明
注意,应该先看直连方案后在看中转方案,中转方案是基于直连方案之上的。且对wireguard配置文件有一定了解
在现实情况中更多的场景是中转,如两台设备都处于NAT中,一台设备需要访问另外一台设备所处的内网,假设是peer1,peer2仍然是处于公网中的主机(假设IP为3.68.156.128),peer3则是需要访问peer1中内网服务的主机,如下图所示:
本地使用iptables进行家庭内网转发,指定peer为中转服务器peer2,并配置peer2的endpoint
#放开udp43155端口iptables-AINPUT-pudp--destination-port43155-jACCEPT#关闭该端口#iptables-DINPUT-pudp--destination-port43155-jACCEPTpeer3配置peer3配置最简单,只作为流量接收,不做转发,需要配置peer2的endpoint
$ping192.168.2.5PING192.168.2.5(192.168.2.5)56(84)bytesofdata.64bytesfrom192.168.2.5:icmp_seq=1ttl=127time=213ms64bytesfrom192.168.2.5:icmp_seq=2ttl=127time=213ms...如下为测试中转(网关)场景时的截图说明
iptables注意事项
如果发现主机peer3去ping主机peer1能成功,但是telnet端口不通有可能是iptables规则顺序问题,wireguard中有如下几条规则
(该情况可能发生在peer1或peer2,主要看规则是不是加在丢弃所有包的规则之后!)
PostUp=iptables-AFORWARD-i%i-jACCEPTPostUp=iptables-AFORWARD-o%i-jACCEPTPostUp=iptables-tnat-APOSTROUTING-oeth0-jMASQUERADE这几条规则其实会在FORWARD链中末尾追加内容,如下所示(使用iptables-nvLFORWARD可查看)
ChainFORWARD(policyDROP0packets,0bytes)pktsbytestargetprotoptinoutsourcedestination...#该规则会舍弃掉所有包00DROPall--**0.0.0.0/00.0.0.0/07448REJECTall--**0.0.0.0/00.0.0.0/0...#如下为追加的规则00ACCEPTall--wg21*0.0.0.0/00.0.0.0/000ACCEPTall--*wg210.0.0.0/00.0.0.0/0仔细观察一下上面的规则其实是有问题的,因为iptables会从上往下匹配,发现有DROP和REJECT两条规则,规则都是所有丢弃所有包,我们自己添加的规则由于顺序问题导致优先级更低,所以其实没生效,因此只要将PostUp中的追加(-A)该为插入(-I),如下所示
PostUp=iptables-IFORWARD-i%i-jACCEPTPostUp=iptables-IFORWARD-o%i-jACCEPTPostUp=iptables-tnat-IPOSTROUTING-oeth0-jMASQUERADE改完之后规则顺序如下
在弹出来的窗口中填写连接信息,名称任意,主机填写路由器的地址,认证方法选择【密码】,用户名和密码填写进入路由器的Web管理界面的用户名和密码,也就是路由器的管理员账号和密码,填写完成后点击【确当】按钮添加
在主页面中就可以看到刚刚添加的路由器了,点击路由器名称进行连接,弹出是否保存密钥,点击【接受并保存】
连接到路由器之后,我们需要在root文件夹下新建一个文件夹用来存储WireGuard的信息,输入一下命令新建文件夹
复制代码输入完以上命令后输入ls然后回车就可以看到刚刚新建的文件夹了
使用cd命令进入刚刚新建的文件夹
输入一下命令对文件夹设置权限
为路由器端创建公钥和私钥,sprivatekey为私钥,spublickey为公钥
复制代码输入完上面的命令后输入ls就可以看到创建的公钥和私钥了,在使用cat命令查看公钥和私钥的内容并且记录下来
在浏览器打开路由器的Web管理界面,点击【网络】>【接口】>【添加新接口】
接口名称任意,我自己填写的是WG0,新接口的协议选【WireGuardvirtual**】,然后点击【提交】
在【基本设置】中,把刚刚记录下来的私钥填写上去,监听端口自己指定一个,IP地址填写一个私有IP,不能与自己的局域网冲突就可以
【高级设置】保持默认
【防火墙设置】悬着【virtual**】,如果没有【virtual**】选项的就选【LAN】,我这个就没有【virtual**】选项,选好了之后点击【保持&应用】
在接口里面就可以看到刚刚新增的WG0接口了
接口新建完了之后还需要设置防火墙规则,点击【网络】>【防火墙】>【自定义规则】,把下面的命令粘贴进去,注意:192.168.5.0/24是WireGuard的网段,就是刚刚在接口里面填写的那个IP地址的网段,-o参数如果路由器的LAN口没有取消桥接就是br-lan,如果取消桥接了就是网口,例如eth0或者eth1等,如果不清楚自己的是什么可以在【网络】下的【接口】里面查看【LAN】口的名称或者网口,添加完成后点击【重启防火墙】
防火墙规则自定义完成后还需要开放端口,点击【网络】>【防火墙】>【通信规则】,滑倒最下面,在名称处填写一个名称,名称自定义,协议选【UDP】,外部端口填刚刚添加新端口时填写的监听端口,填写完成后点击【添加】,然后点击【保存&应用】,如果OpenWrt是旁路有,那么需要在主路由上做端口转发,外部端口和内部端口都填刚刚新建端口时填写的监听端口,IP地址填旁路有的IP地址,协议填UDP协议。
二、创建以及配置其他用户端回到命令模式,在WireGuard文件夹下在新建一个文件夹,这样的目的是方便管理,一个用户一个文件夹,我这里创建了一个01文件夹,创建完成后使用cd命令进入文件夹
先给01这个用户创建一个预共享密钥并查看记录下来,这个预共享密钥不是必须的,但是有这个可以提升访问的速度,使用以下命令
在使用创建01用户的私钥和公钥并且查看记录下来
公钥和私钥都生成后返回路由器的Web管理界面,点击【网络】>【接口】并找到刚刚创建的接口然后点击【修改】
找到Peers这一项,点击【添加】,在公钥那个地方填写刚刚01用户的公钥,允许的IP填写一个IP,要和刚刚创建的新接口在同一个网段上的,但是不能冲突,勾选上路由允许的IP,最下面的【更多选项】选泽【预共享密钥】,然后点击旁边的【添加】
点击【预共享密钥】旁边的【添加】之后,就可以看到预共享密钥这个填写框了,把刚刚创建的01用户的预共享密钥填写进去,填写完成后点击【保存&应用】按钮
这样路由器这端就设置好了,只需要生成配置文件然后再其他端导入配置文件就可以使用了,如果需要外网访问的话可以做一个端口映射,如果自己没有公网地址的话可以使用FRP进行穿透,配置文件是不能自动生成的,所以需要自己用文本文档填写好然后改成conf格式的文件,配置文件的格式如下,把对应的部分替换成自己的就可以,最后一行保持默认就可以。
复制代码下面这个是我配置好的文件,可以做一个参考
配置完成后点击【文件】>【另存为】,文件名为:xxx.conf,保持类型为:所有文件(*.*)
最后把这个文件导入到用户端使用就可以了。
本期视频给大家介绍两种方法搭建FRP内网穿透服务器,一种方法是使用Docker,另外一种方法是直接创建服务。视频的最后会讲一下防火墙的设置,这也是萌新经常遇到的一个坑。
本教程需求:RaspberryPi4ModelB(内存2GB或以上)、拥有宽带连接的2.4GHz或5GHz的WLAN(SSID不可带有下划线(_)、DHCP服务器能够给指定的MAC地址分配固定的IP地址功能、需要能够顺畅连接raw.githubusercontent.com)、一台显示器、USB接口的键盘以及一张容量至少为16GB且速度等级为C10或以上的MicroSD卡。
清华大学TUNA源的速度还是很不错的。此外,阿里云镜像站(mirrors.aliyun.com)也提供相同的镜像。系统镜像下载完成后,解压之,得到ISO文件。
使用SDCardFormatter格式化MicroSD卡。
格式化完成后,打开Win32DiskImager,向MicroSD卡写入系统镜像。
步骤1.1.2刷写完成后,MicroSD卡的boot分区会被分配一个盘符,进入此分区,新建文件wpa_supplicant.conf和SSH。使用编辑器(不得使用Window记事本)编辑wpa_supplicant.conf文件,填入以下内容:
ctrl_interface=DIR=/var/run/wpa_supplicantGROUP=netdevupdate_config=1network={ssid="WiFi的SSID"psk="WiFi密码"}保存即可,SSH文件则保持空白。拔出MicroSD卡,将其插入树莓派。
执行echo"PermitRootLoginyes">>/etc/ssh/sshd_config&&echo"PasswordAuthenticationyes">>/etc/ssh/sshd_config后执行systemctlrestartsshd,使用root用户重新SSH连接至树莓派即可。
执行rm/etc/apt/sources.list.d/*.list清除不必要的源。编辑/etc/apt/sources.list文件,将deb.debian.org和security.debian.org尽数替换为mirrors.cloud.tencent.com并在下方添加以下两行内容:
其中,前3行的mirrors.cloud.tencent.com可以替换为其他支持Debian11的源,第5行的mirrors.cloud.tencent.com可以替换为其他支持RaspberryPiOS的源。部分源并不同时支持两者。
执行aptupdate&&sudoaptdist-upgrade-y&&aptinstall-yraspberrypi-kernel-headers以更新软件包数据库、更新软件包和安装raspberrypi内核头文件。
编辑/etc/network/interfaces文件,清除原有内容后填入以下内容:
autoloifaceloinetloopbackautowlan0ifacewlan0inetstaticaddress192.168.1.233/24gateway192.168.1.1其中,192.168.1.233/24和192.168.1.1分别为步骤1.2.1中提到的树莓派被分配到的IP地址和网关。修改完成后保存。
执行hostnamectlset-hostnameRPi4-PVE-01,其中RPi4-PVE-01请自定义。编辑/etc/hosts文件,清除原有内容后填入以下内容:
127.0.0.1localhost192.168.1.233RPi4-PVE-01其中,192.168.1.233和RPi4-PVE-01分别为步骤1.2.1中提到的树莓派被分配到的IP地址和主机名。
树莓派默认的SWAP大小只有100M,非常不适合本文场景,故请编辑/etc/dphys-swapfile文件,将原先CONF_SWAPSIZE的值从100改为2048;执行/etc/init.d/dphys-swapfilestop&&/etc/init.d/dphys-swapfilestart以应用更改。
一切完成后,重新启动系统。
将树莓派连接至显示器,插入键盘,执行aptinstall-yproxmox-ve。因安装过程中将重置网络,故请勿直接在SSH中直接执行aptinstall-yproxmox-ve。
弹出配置Postfix时,请选择Localsystem。
安装需要半个小时左右,建议耐心等待;安装完成后,请重新启动设备。
编辑/etc/network/interfaces文件,在source-directory/etc/network/interfaces.d此行上方插入以下内容:
autowlan0ifacewlan0inetdhcpwpa-ssid114514wpa-pskqweasdzxc123autovmbr0ifacevmbr0inetstaticaddress10.154.46.1netmask255.255.255.0bridge-portsnonebridge-stpoffbridge-fd0post-upiptables-tnat-APOSTROUTING-s'10.154.46.0/24'-owlan0-jMASQUERADEpost-downiptables-tnat-DPOSTROUTING-s'10.154.46.0/24'-owlan0-jMASQUERADE其中,wpa-ssid后为WLAN的SSID,wpa-psk后为WLAN的密码。其他内容请按需修改。执行systemctlrestartnetworking以重启网络设备。
编辑/etc/sysctl.conf文件,添加以下内容:
vm.overcommit_memory=1net.ipv4.ip_forward=1net.ipv4.conf.all.rp_filter=1net.ipv4.icmp_echo_ignore_broadcasts=1net.ipv4.conf.default.forwarding=1net.ipv4.conf.default.proxy_arp=0net.ipv4.conf.default.send_redirects=1net.ipv4.conf.all.send_redirects=0保存后执行sysctl-p使其生效。
用户名和密码与步骤2.1中设置的系统用户名和密码一致;语言可选Chinese(Simplified)。
单击本机唯一的节点,选择“凭证”,单击上方的“上传自定义凭证”按钮上传自定义的证书。此操作会让ProxmoxVE用户界面在重载时使用自定义的证书,在主机名对应的情况下提供基于TLS的身份验证和加密的安全性。(把pve.iks.moe解析到步骤1.2.1中提到的192.168.1.233然后再传证书,刷新即可。)
单击节点下的local,选择ISO映像,单击上方的“上传”(如果本地有镜像的话)或“从URL下载”下载相应的镜像。
将镜像的URL粘贴到文本框后单击右边的“查询网址”,待文件名成功显示后即可单击下方的“立即下载”按钮。下载过程将在后台进行,进度将被实时打印。
名称请自定义,其他内容请留空;在单击对话框底部的“下一步”前,请勾选左边的“高级”。
此处“操作系统”选择“不使用任何介质”。
勾选“QEMU代理”,并将BIOS改为OVMF(UEFI),“添加EFI磁盘”下的“存储”选择local。
随后的“磁盘大小(GiB)”和“内存(MiB)”请按需选择,其他配置建议默认。
单击“完成”以开始创建虚拟机。
单击刚刚创建的虚拟机,选择“硬件”,单击选中CD/DVD驱动器(ide2)后点击上方的“删除”按钮。
单击上方的“添加”,选择“CD/DVD驱动器”。
“总线/设备”选择SCSI,顺序为2;使用“存储”为local,“ISO映像”为步骤4.1下载的Debian11.1ARM64镜像;单击对话框底部的“创建“按钮。
单击“选项”,双击右方的“引导顺序”,将scsi2改为如图在scsi0后、在net0前的顺序,单击对话框下方的“OK”保存之。
单击右上角的“启动”按钮,再单击右方的“控制台”进入noKVM,稍等片刻即可进入Debian安装程序。
请按照默认值进行安装。
当出现Networkautoconfigurationfails时请不要惊慌,因为我们在步骤3.2配置的网桥vmbr0没有DHCP功能,故自动DHCP无法生效,此时我们需要指定网络配置。
此处选择Configurenetworkmanually,在后续页面输入步骤3.2中提到的10.154.46.2/24。
此处的Nameserveraddress应该为步骤1.2.1中提到的192.168.1.1。
后续配置不是特别复杂,在此按下不表。(注意:需要手动配置软件包源为China以加快后续的安装速度)
KVM虚拟机安装大功告成。
单击节点下的local,选择CT模板,单击上方的“上传”(如果本地有镜像的话)或“从URL下载”下载相应的镜像。
将镜像的URL粘贴到文本框后单击右边的“查询网址”,待文件名成功显示后修改文件名为方便辨识发行版名称和版本的格式,然后单击下方的“立即下载”按钮。下载过程同样将在后台进行,进度也将被实时打印。
“密码”(需要“确认密码”)和“SSH公钥”(可以通过下方的“加载SSH密钥文件”按钮载入)任选其一设置即可。
“存储”选择local,“模板”选择在步骤5.1中下载的模板;单击对话框底部的“下一步”;随后的“磁盘大小(GiB)”和“内存(MiB)”请按需选择,其他配置建议默认。
“IPv4/CIDR”填写步骤3.2中提到的10.154.46.3/24,“网关(IPv4)”填写步骤3.2中提到的10.154.46.1,其他内容保持默认;单击在步骤“确认”下方的“完成”按钮以开始创建LXC容器。
开机方法与KVM相同,单击右上角的“启动”按钮,再单击右方的“控制台”即可直接进入已经安装完成的容器。