树莓派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

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

标签: none

已有 2 条评论

  1. 爸爸 爸爸

    是你小子把睿帝引过来的?

添加新评论

(头像使用Gravatar服务,如需自定义,请访问Gravatar.com)