发布于2022年11月4日3年前 树莓派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 GitPDF文件直链: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
创建帐户或登录后发表意见