树莓派ZeroW搭建PHP环境运行BiliHelper实现BiliBliLive自动捡辣条
树莓派ZeroW搭建PHP环境运行BiliHelper实现BiliBliLive自动捡辣条
前言
树莓派(RaspberryPi)是一类卡片型计算机,其有一枚博通的ARM处理器,可以运行基于Debian的Raspbian系统。其具有低价的硬件,较低的功耗,小巧的外观。而树莓派ZeroW拥有更小的外观,具有2.4GWIFI功能,且价格不到百元。
BiliBili是是一个弹幕视频网站,后期发展了直播业务BiliBiliLive,目前其有设计某些礼物赠送时会触发全网通告抽奖任务,然后大家蜂拥而上,来到这个直播房间抽奖。奖品目前基本为辣条或粉丝亲密度,这个虽不涉及财物,但涉及粉丝勋章升级,其亦乃兵家必争之地(货?)。
既然这个抽奖对我们有用,那便可以加以利用。正常情况下,我们手动操作Web网页端或APP端效率低下,于是考虑可以使用一些辅助脚本等实现自动化领取。于是就出现某些网友分享实现方式,比如 metowolf的BilibiliHelper ,然后就有基于该项目的 lkeme的BiliHelper 。感谢以上两位大佬的付出。本文所讲述的就是使用这个脚本,我们将在树莓派ZeroW上配置一个PHP环境,然后运行这个脚本。
读懂实践本文,你可能需要在技能树中点亮以下技能:
- 树莓派装配、启动操作;
- 基本的Windows系统与Linux系统操作;
准备
- 运行Windows电脑一台(其他系统也可,但具体某些操作可能不同)
- 树莓派ZeroW一套(包含主板卡、8G或以上的MicroSD卡、电源)
- MicroSD卡读卡器
- SSH客户端,我用的是Putty
操作警告:
使用外部程序完成原本应手动完成操作的行为,可能导致您的BiliBili账号被封禁!本人及相关项目的作者等均不会对使用脚本产生的损失负责,亦不会对您学习本文的操作负责。继续操作,请自行承担风险!
步骤
- 1.写入映像到MicroSD卡并启动
- 2.Raspbian系统配置
- 3.配置PHP环境
- 4.配置脚本并运行脚本
- 5.脚本任务的自动化配置
1.写入映像到MicroSD卡并启动
打开树莓派官网选择合适的方法下载合适的映像文件。因为本文实现的功能都是在命令行终端下完成的,不需要桌面系统,所以我选的是Raspbian Stretch Lite这个版本。
Torrent下载
ZIP
我们下载回来的是压缩包文件,解压后里面的img文件便是系统映像。
Etcher是一种图形化SD卡写入工具,适用于Mac OS,Linux和Windows,是RaspberryPi官网推荐的最简单的映像写入工具。Etcher还支持直接从zip文件中读取映像并开始写入,无需任何解压缩。用Etcher实现写入映像:
1.下载Etcher并安装它。
2.将SD卡插入SD卡读卡器并连接电脑。
3.打开Etcher并从磁盘驱动器中选择要写入SD卡的.img或.zip文件。
4.选择要写入映像的SD卡,注意确认不要选错,错误的选择会导致损坏您所选存储设备的资料。
5.检查您的选择,然后点击“Flash!/”开始将数据写入SD卡,写入完成后软件会自动安全移除并告知您操作完成。
6.完成后便可以关闭软件,拔下存储卡了。
(其他操作系统与软件操作方法可以查阅官网此页下方的更多链接)
2.Raspbian系统配置
连接WIFI并开启SSH:
将SD卡插入SD卡读卡器并连接电脑。
在电脑显示的/boot下创建文件"wpa_supplicant.conf"。
编辑文件内容如下格式所示,SSID与PSK等对应选项请自行调整:
country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="我是WIFI名字"
psk="WIFI密码"
key_mgmt=WPA-PSK
priority=1
}
以上是WiFi 配置示例。具体含义:
ssid:网络的ssid
psk:网路的密码
priority:连接优先级,数字越大优先级越高(不可以是负数)
scan_ssid:连接隐藏WiFi时需要指定该值为1
然后在/boot下创建空文件“ssh”,注意全小写。
完成操作后安全移除硬件,将MicroSD卡插入树莓派中。
以上操作可具体参考以下链接:
无屏幕和键盘配置树莓派WiFi和SSH
Setting up a Raspberry Pi headless
Setting WiFi up via the command line
启动并连接树莓派
将树莓派通电,等待至树莓派指示灯不再快速闪烁(建议通电后先等待90秒)。
查找树莓派的IP地址,我在Windows命令提示符下尝试运行Ping树莓派默认主机名:
ping raspberrypi
从回显的信息中我得到了一个IP地址,观察此IP地址与我的电脑在一个子网内,判断这应该是正确的IP。
(获取IP的方式不只一种,你可以从路由器的管理页面获取,或者尝试在电脑或手机上安装局域网扫描软件来查找树莓派IP地址。可参考本文:IP Address)
使用SSH客户端通过填入IP地址连接树莓派,我使用的Putty。该软件使用方法不再赘述,不会可参考本文。
使用用户名“pi”,密码:raspberry登陆到树莓派。
修改软件源为国内源
由于一些“未知”的原因,我们连接官方的软件源时速度慢,经常断开,所以我们需要将其修改为国内镜像源。比如我改为清华源。需要编辑 /etc/apt/sources.list
文件,参考命令如下:
pi@raspberrypi ~ $ sudo nano /etc/apt/sources.list
用以下内容替代原文内容:
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main non-free contrib
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main non-free contrib
nano编辑器中按F3,提示编辑保存的文件名,直接保持原始文件名,Enter键确认。再按Ctrl+“X”键退出nano编辑器。
编辑镜像站后,请使用 sudo apt-get update
命令,更新软件源列表,同时检查您的编辑是否正确。
然后运行 sudo apt-get upgrade
命令将所有已经安装在系统内的包升级为最新版本。
具体参考:Raspbian 镜像使用帮助
或可使用中科大源,参考http://mirrors.ustc.edu.cn/help/raspbian.html
本地化设置
使用以下命令通过APT安装中文字体:
sudo apt-get install ttf-wqy-zenhei
安装过程中如果碰到(Y/n),请输入Y并回车。
运行以下命令打开Raspbian的软件配置工具:
sudo raspi-config
上下键移动光标到 Localisation Options 选项,按Enter键进入设置项,在 Change Locale 选项中可以调整系统语言和地区,我这就不修改了。选择 Change Timezone -> Asia ,通过按Pagedown键、Pageup键与方向键调整光标到 Shanghai 并使用Enter键确定,将时区设置为上海。按Tab键调整光标所处区域,通过方向键选择 Finish 退出配置工具。
3.配置PHP环境
我使用oneinstack提供的LNMP一键包来配置PHP环境。这需要漫长的时间,为保证不会因网络问题中断安装进程,我们使用Screen来操作。使用以下命令安装Screen。
sudo apt-get -y install screen
使用以下命令获取LNMP的安装包:
wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz
下载完成后使用以下命令解压文件:
tar xzf oneinstack-full.tar.gz
使用 cd oneinstack
命令进入oneinstack目录.
使用以下命令创建一个名为oneinstack的会话窗口:
screen -S oneinstack
如果网路出现中断,可以执行命令screen -R oneinstack
重新连接安装窗口。
运行 sudo ./install.sh
开始安装脚本,按照自己需求选择要安装的模块,比如我选择了安装Web server和PHP,具体过程如下:
Please input SSH port(Default: 22): 22
Do you want to enable iptables? [y/n]: y
Do you want to install Web server? [y/n]: y
Please select Nginx server:
1. Install Nginx
2. Install Tengine
3. Install OpenResty
4. Do not install
Please input a number:(Default 1 press Enter) 1
Please select Apache server:
1. Install Apache-2.4
2. Install Apache-2.2
3. Do not install
Please input a number:(Default 3 press Enter) 3
Please select tomcat server:
1. Install Tomcat-9
2. Install Tomcat-8
3. Install Tomcat-7
4. Install Tomcat-6
5. Do not install
Please input a number:(Default 5 press Enter) 5
Do you want to install Database? [y/n]: n
Do you want to install PHP? [y/n]: y
Please select a version of the PHP:
1. Install php-5.3
2. Install php-5.4
3. Install php-5.5
4. Install php-5.6
5. Install php-7.0
6. Install php-7.1
7. Install php-7.2
8. Install php-7.3
Please input a number:(Default 5 press Enter) 7
Do you want to install opcode cache of the PHP? [y/n]: n
Please select PHP extensions:
0. Do not install
1. Install zendguardloader(PHP<=5.6)
2. Install ioncube
3. Install sourceguardian(PHP<=7.2)
4. Install imagick
5. Install gmagick
6. Install fileinfo
7. Install imap
8. Install ldap
9. Install phalcon(PHP>=5.5)
10. Install redis
11. Install memcached
12. Install memcache
13. Install mongodb
14. Install swoole
15. Install xdebug(PHP>=5.5)
Please input numbers:(Default '4 10 11' press Enter) 0
Do you want to install Pure-FTPd? [y/n]: n
Do you want to install phpMyAdmin? [y/n]: n
Do you want to install redis-server? [y/n]: n
Do you want to install memcached-server? [y/n]: n
Do you want to install HHVM? [y/n]: n
然后就是漫长的等待了,安装成功后会提示成功,并询问是否重新启动,选择重新启动,待启动后重新连接终端。
使用以下命令进入LNMP包目录,运行以下命令添加组件,我们这里添加 PHP Composer :
pi@raspberrypi:~ $ cd oneinstack/
pi@raspberrypi:~/oneinstack $ sudo ./addons.sh
What Are You Doing?
1. Install/Uninstall PHP Composer
2. Install/Uninstall fail2ban
3. Install/Uninstall ngx_lua_waf
4. Install/Uninstall Python3.6
q. Exit
Please input the correct option:1
Please select an action:
1. install
2. uninstall
Please input a number:(Default 1 press Enter) 1
PHP Composer installed successfully!
What Are You Doing?
1. Install/Uninstall PHP Composer
2. Install/Uninstall fail2ban
3. Install/Uninstall ngx_lua_waf
4. Install/Uninstall Python3.6
q. Exit
Please input the correct option: q
关于这个脚本的具体使用,可以参考安装步骤-Oneinstack。
4.配置脚本并运行脚本
因相关代码作者开源在GitHub,我们需要使用Git工具拉取项目文件。使用以下命令通过APT安装Git:
sudo apt-get install git
如已经安装APT会提示已经安装了,如果提示Y/n,输入Y回车即可。
回到用户目录,拉取项目文件到本地:
cd
git clone https://github.com/lkeme/BiliHelper.git
关于Git的使用可以参考此书:Pro Git
PDF文件直链:progit_v2.1.17
进入配置目录,从 user.conf.example 创建 user.conf,并使用nano编辑器修改配置:
cd BiliHelper/conf
cp user.conf.example user.conf
nano user.conf
在出现的界面中填入B站用户名和密码(用户名为注册邮箱或注册手机号),完成后F3保存,Ctrl+X退出。
使用 composer 工具进行安装:
composer install
若提示(Y/n)请输入y回车。
这时,我们可以返回上层目录中,运行index.php开始脚本了:
cd ..
php index.php
如果一切正常,脚本现在已经能够捡辣条了。只要树莓派不关机,电脑上的终端不关闭。
(脚本默认加载user.conf,如果需要多账户,可复制配置文件修改账号密码,使用php index.php example.conf
指定配置文件运行)
这种情况如果我们关闭终端窗口,BiliHelper 就停止了,这样肯定是非常麻烦。我们可以借助Screen来实现后台运行。
GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。其可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。
首先Ctrl+C停止BiliHelper,使用以下命令创建一个名为Bili的的session:
screen -S Bili
在终端中使用 php index.php
运行BiliHelper,然后使用 Ctrl+a+d 组合键便可以分离这个Session,这时我们就可以安全的使用 exit
命令断开终端与树莓派的连接了,如果我们需要再次连接到这个Session,可以在终端中运行: screen -r Bili
,若Session处于分离状态,便会重新连接。
Screen 官方文档在此,关于Screen的使用可参考本文:linux screen 命令详解
5.脚本任务的自动化配置
systemd是Linux计算机操作系统之下的一套中央化系统及设置管理程序(init),包括有守护进程、程序库以及应用软件,由Lennart Poettering带头开发。其开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果,最终代替现在常用的System V与BSD风格init程序。
由此看来,使用systemd管理我们的脚本是一种比较迎合系统的方法。
在以下位置 /etc/systemd/system/
创建文件 bilibili.service
文件内容如下:
# /etc/systemd/system/bilibili.service
[Unit]
Description=BiliHelper Manager
Documentation=https://github.com/lkeme/BiliHelper
After=network.target
[Service]
ExecStart=/usr/local/php/bin/php /home/pi/BiliHelper/index.php
Restart=always
[Install]
WantedBy=multi-user.target
这个文件的创建可参考本文替换软件源小节内容,使用nano编辑器创建。
这样我们就创建了一个Service单元配置文件,可见其信息包含三大部分:Unit-主要包含一些基本描述信息与依赖关系;Service-主要描述这个SService运行的内容;Install-安装信息。以下详细介绍每行内容含义:
[Unit]
Description=BiliHelper Manager //这个Unit的描述,写给人看的。
Documentation=https://github.com/lkeme/BiliHelper //这个服务的文档,给人看的。
After=network.target //表示network.target完成后,才会开始启动这个服务。
[Service]
ExecStart=/usr/local/php/bin/php /home/pi/BiliHelper/index.php //指定服务启动的主要命令
Restart=always //让服务在退出时能自动重启
#Restart值用于指定在什么情况下需要重启服务进程。常用的值有 no,on-success,on-failure,on-abnormal,on-abort 和 always。默认值为 no,即不会自动重启服务。这些不同的值分别表示了在哪些情况下,服务会被重新启动,参见下方表。
[Install]
WantedBy=multi-user.target
# 表明当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行。
# 当然,这还需要 systemctl enable 激活这个服务以后自动运行才会生效。
Restart配置为不同值时分别会在哪些情况下重启服务(表格解析异常):
| 服务退出原因 | no | always | on-failure | on-abnormal | on-abort | no-success|
| :----------: | :-----: | :-----: | :--------: | :---------: | :------: | :-------: |
| 正常退出 | | √ | | | | √ |
| 异常退出 | | √ | √ | | | |
| 启动/停止超时 | | √ | √ | √ | | |
| 被异常KILL | | √ | √ | √ | √ | |
Install 段中的配置与 Unit 有几分相似,但是这部分的配置需要通过 systemctl enable 命令来激活,并且可以通过 systemctl disable 命令禁用。另外这部分配置的目标模块通常是特定启动级别的 .target 文件,用来使得服务在系统启动时自动运行。所以我们把服务添加上【当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行。】这个配置信息后,使用 systemctl enable 激活后就可以实现让这个服务在开机时自动运行。
Unit文件的详细解析可参考此文:Systemd的Unit文件; systemctl增加服务详细介绍
创建bilibili.service
文件后使用以下命令将其添加到开机自动启动:
sudo systemctl enable bilibili.service
使用以下命令立即启动:
sudo systemctl start bilibili.service
使用以下命令输出运行状态:
systemctl status bilibili.service
如果你学习到此,且一切正常,你应该已经成功开始了自动捡辣条之路。恭喜您距离封号又近了一步。
若您后期需要某些调整,以下命令可能有用:
使用以下命令可删除其开机自动启动:
sudo systemctl disable bilibili.service
使用以下命令可检查单元是否配置为自动启动:
sudo systemctl is-enabled bilibili.service
使用以下命令立即停止:
sudo systemctl stop bilibili.service
使用以下命令立即重启:
sudo systemctl restart bilibili.service
使用以下命令重载配置:
sudo systemctl reload bilibili.service
如果修改了bilibili.service
文件,需使用以下命令重载systemd 系统配置:
systemctl daemon-reload
使用此命令显示系统状态:
systemctl status
使用以下命令输出激活的单元:
systemctl
使用以下命令输出运行失败的单元:
systemctl --failed
具体命令参考:[systemd (简体中文)]
https://wiki.archlinux.org/index.php/systemd_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#%E7%BC%96%E5%86%99%E5%8D%95%E5%85%83%E6%96%87%E4%BB%B6
表格解析异常,提供本文Markdown原始文件:树莓派ZeroW搭建PHP环境运行BiliHelper实现BiliBliLive自动捡辣条.zip
参考:
Installing operating system images
https://www.raspberrypi.org/documentation/installation/installing-images/README.md
Setting up a Raspberry Pi headless
https://www.raspberrypi.org/documentation/configuration/wireless/headless.md
Setting WiFi up via the command line
https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md
无屏幕和键盘配置树莓派WiFi和SSH
http://shumeipai.nxez.com/2017/09/13/raspberry-pi-network-configuration-before-boot.html
IP Address
https://www.raspberrypi.org/documentation/remote-access/ip-address.md
Raspbian 镜像使用帮助
https://mirror.tuna.tsinghua.edu.cn/help/raspbian/
安装步骤-Oneinstack
https://oneinstack.com/install/
Systemd的Unit文件; systemctl增加服务详细介绍
https://blog.csdn.net/shuaixingi/article/details/49641721
是你小子把睿帝引过来的?
我没有!