zhenxun_bot icon indicating copy to clipboard operation
zhenxun_bot copied to clipboard

安卓用Termux装CentOS ⑨ Stream 并部署zhenxun bot の流程分享

Open KudouShinnyan opened this issue 2 years ago • 3 comments

前言: 上次在Termux+Ubuntu20.04尝试成功了, 之后又稍微尝试了Termux + CentOS ⑨ Stream , 因为莪另一个看板娘(Bot)用Termux + CentOS ⑨ Stream 挂着的, 把两个Bot搬到一起住就不用启动两个Linux了, 但那时候ffmpeg貌似没CentOS⑨的包所以中止了, 现在有包了所以再次尝试, 然而尝试用CentOS ⑨ Stream 自带的python3.9, 有部分依赖不能装上, 所以就编译安装3.8了; 另外, 之前在Ubuntu里尝试过安装PostgreSQL不能用, CentOS ⑨ Stream 好像没怎么尝试, 但还是直接在Termux装PostgreSQL吧

关于签名服务器 HuggingFace的QQSign集体暴毙, 所以还是用其他方法吧 有个Koyeb具体流程不便公开并且试了两三次没跑起来 这里有本地(或服务器)搭建的相关文件和简单的使用方法 https://gitee.com/KudouShinnyan/qsign (之前试了Termux+CentOS⑨最高貌似只有1.1.0正常用, 后续版本比如有些水土不服, 1.1.9是被尝试连接之后它就卡了, 1.2.1版好像直接不兼容arm, 你试下Termux改用其它Linux容器装jre跑1.1.9, 或直接在Termux装jdk不通过容器跑1.1.9, 莪现在是在一个熟人服务器跑1.1.9了) 签名服务器地址本地运行的是http://127.0.0.1:8081 在服务器运行则是http://服务器IP地址:8081 (比如服务器用宝塔面板需要在安全那里放行8081端口)

准备工作: 下载并安装Termux (现在的爪机一般下载arm64版即可, 其它Android设备自己判断, universal是通用的但安装包会大很多)

装完后启动它

获取唤醒锁 (防止Termux后台运行和锁屏后休眠) 点击通知栏Termux那里的Acquire wakelock, 也可以在Termux的命令行输入termux-wake-lock, 弹出询问始终在后台运行点允许, 然后通知栏显示wake lock held

然后在Termux的命令行输入下面的命令

Termux换源并更新 (一整行一起执行) sed -i "[email protected]@mirrors.bfsu.edu.cn/termux@g" $PREFIX/etc/apt/sources.list && apt update && apt upgrade -y (解包过程大概有6次询问有关换回默认源的, 直接回车默认否)

(Android12~13有也许要解决杀进程的问题, 可以考虑现在解决了再继续, 后面有相关流程)

安装PostgreSQL、wget和proot apt install postgresql wget proot -y

创建postgresql目录 mkdir -p $PREFIX/var/lib/postgresql

初始化 initdb $PREFIX/var/lib/postgresql

后台运行postgresql nohup postgres -D $PREFIX/var/lib/postgresql/ & (以后关掉重开Termux需要先执行它)

查看Termux使用的用户名 whoami

连接数据库 (自己把u0_a394换成上一行命令查看到的用户名) psql -U u0_a394 -d postgres (连接成功后会显示 postgres=# )

连接失败的话修改配置文件 (没失败就不用改) (解决报错FATAL: could not map shared memory segment "xxxxxxxxxx") nano $PREFIX/var/lib/postgresql/postgresql.conf 按ctrl+w搜dynamic_shared_memory_type回车, 假如等号右边是sysv那就改成mmap 完成后Ctrl+O保存, 然后不改文件名直接回车 Ctrl+X离开, 然后再次后台运行postgresql和连接数据库

创建用户和设置密码 create user oyama with password 'mahiro';

创建数据库 create database oyamadb owner oyama;

将oyamadb的所有权赋予oyama grant all privileges on database oyamadb to oyama;

退出 \q

获取安装Linux的脚本 wget https://hub.gitmirror.com/https://github.com/xiliuya/termux-linux/releases/download/0.1/install_linux.sh

执行安装脚本 chmod +x install_linux.sh && ./install_linux.sh 安装的Linux发行版输入centos (其它系统就不一定能用后面的流程了) 系统版本莪是输入9 (其它版本自己尝试, 是CentOS版本, 与安卓版本无关) (另外, CentOS ⑨ Stream 貌似只有arm64和amd64的镜像, 32位的arm设备就用Ubuntu 22.04 吧)

装完后根据需求删掉安装脚本 rm install_linux.sh

之前备份过postgresql数据库的话现在就还原它然后再继续后续流程 (没备份过就不用管) 往后面翻有备份还原的流程, 为了不让第一次安装的人感到混乱就不放在这了

创建Termux命令行的输入记录 (Termux没用exit或logout命令正常退出的话不会保存输入记录, 好像很少会这么退出, 干脆直接创建记录算了) echo -e "nohup postgres -D \$PREFIX/var/lib/postgresql/ &\n./start-centos.sh" > ~/.bash_history 创建之后, 以后打开Termux就可以按方向↑和↓直接找到后台运行postgresql的命令和启动CentOS命令了

启动CentOS (这次先手动复制粘贴执行吧) ./start-centos.sh 启动后会显示[root@localhost ~]#

CentOS Stream 换源 (两行命令, 默认源能稳定下载的话可不换) curl -o /etc/yum.repos.d/centos.repo https://gitee.com/KudouShinnyan/bfsu-centos-stream-mirror/raw/master/centos.repo curl -o /etc/yum.repos.d/centos-addons.repo https://gitee.com/KudouShinnyan/bfsu-centos-stream-mirror/raw/master/centos-addons.repo

安装EPEL源 (扩充软件库) yum install epel-release -y EPEL换源 (一整行一起执行, 默认源能稳定下载的话可不换) sed -e 's!^metalink=!#metalink=!g' -e 's!^#baseurl=!baseurl=!g' -e 's#download.example\/pub#mirrors.bfsu.edu.cn#g' -i /etc/yum.repos.d/epel*.repo

安装RPM Fusion源 (也是扩充软件库但不一定用得上) yum localinstall -y https://mirrors.bfsu.edu.cn/rpmfusion/free/el/rpmfusion-free-release-9.noarch.rpm yum localinstall -y https://mirrors.bfsu.edu.cn/rpmfusion/nonfree/el/rpmfusion-nonfree-release-9.noarch.rpm RPM Fusion换源 (一整行一起执行, 默认源能稳定下载的话可不换) sed -e 's!^metalink=!#metalink=!g' -e 's!^#baseurl=!baseurl=!g' -e 's#download1.rpmfusion.org#mirrors.bfsu.edu.cn\/rpmfusion#g' -i /etc/yum.repos.d/rpmfusion*.repo

更新软件包缓存 yum makecache

安装screen多会话组件和nano文本编辑器 yum install screen nano -y

修复screen文件夹权限 chmod 777 /run/screen

创建gocq的会话 screen -S gocq

安装gocq 用浏览器点这里获取新版本go-cqhttp的deb包下载链接

以1.2.0版为例 (用arm64的版本举例, 其它架构的设备自己另外获取链接) yum localinstall -y https://hub.gitmirror.com/https://github.com/Mrs4s/go-cqhttp/releases/download/v1.2.0/go-cqhttp_1.2.0_linux_arm64.rpm

创建存放gocq配置文件夹 (以便和其它东西区分) mkdir ~/gocq

首次启动gocq cd ~/gocq && go-cqhttp 选3, 生成配置之后回车会退出

编辑配置文件 nano config.yml 按方向↑↓←→移到账号相关那里, 把1233456改成机器人的QQ号, 密码的话填在单引号里面 白色sign-server下边url右边单引号里的横杠改成签名服务器链接(就是前面说的http://IP地址:8081) (假如没有sign-server114514那就安装新版gocq然后执行rm config.yml删除文件然后按刚装完gocq的流程重来) Ctrl + \ (反斜杠)搜索, 然后输入下面内容 universal: ws://your_websocket_universal.server 回车然后输入下面内容替换 universal: ws://127.0.0.1:8080/onebot/v11/ws/ 回车然后输入A全部替换 (其实也就一处) 完成后Ctrl+O保存, 然后不改文件名直接回车 Ctrl+X离开 (后续改其它文件也是这样保存离开)

再次启动gocq go-cqhttp 提示生成设备虚拟设备信息(以及一些目录)后先ctrl+c退出

获取特定QQ版本号文件 点进这里(点链接), 网页开PC模式, 然后点进想用的QQ版本(要和签名服务器一致), 再按需求点开android_pad.jsonandroid_phone.json, 在右上方原始数据的按钮长按或右键复制链接 复制后按下面的例子执行 (用8.9.90举例) curl -o ./data/versions/6.json https://gitee.com/KudouShinnyan/qsign/raw/protocol/8.9.90/android_pad.json curl -o ./data/versions/1.json https://gitee.com/KudouShinnyan/qsign/raw/protocol/8.9.90/android_phone.json (6.json是Android Pad, 1.json是Android爪机)

修改登录设备 (可跳过, 默认Android Pad) nano device.json 按ctrl+w搜protocol回车, 按方向→把后面数字改成想要的设备 (首选6, 次选1) 1 Android爪机、2 Android手表(不能接收notify、口令红包、不能撤回)、3 macOS、4 企点(普通账号不能用)、5 iPad、6 Android Pad ctrl+o(保存)回车 ctrl+x(离开)

完成后再次启动gocq go-cqhttp

登录成功后连接错误先不用管 Ctrl+A然后D放到后台继续后续步骤

(可以在不同的会话在不同的目录启动gocq同时登录多个QQ共用一份zhenxun)

创建真寻会话 screen -S zhenxun

安装wget、tar、python编译环境和git yum install wget tar zlib-devel bzip2-devel openssl-devel gcc libffi-devel make git -y 获取python 3.8源码 wget https://registry.npmmirror.com/-/binary/python/3.8.18/Python-3.8.18.tgz 解包文件 tar -xzf Python-3.8.18.tgz 进入目录 cd Python-3.8.18 配置编译参数 (一整行一起执行) ./configure --prefix=/usr/local/python3.8 --enable-optimizations --with-system-ffi --with-computed-gotos --enable-loadable-sqlite-extensions 开始编译 make -j $(nproc) && make altinstall 添加环境变量 echo 'export PATH="/usr/local/python3.8/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc 返回上级目录并删除文件 cd ../ && rm -rf Python-3.8.18 Python-3.8.18.tgz

升级pip python3.8 -m pip install -i https://mirrors.bfsu.edu.cn/pypi/web/simple --upgrade pip

pip换源 (默认源能稳定下载的话可不换) pip3.8 config set global.index-url https://mirrors.bfsu.edu.cn/pypi/web/simple

获取真寻 git clone --depth=1 -b main https://mirror.ghproxy.com/https://github.com/HibiKier/zhenxun_bot.git

进入真寻目录 cd ~/zhenxun_bot

克隆插件集 (可选) git clone --depth=1 -b master https://mirror.ghproxy.com/https://github.com/zhenxun-org/nonebot_plugins_zhenxun_bot.git ./extensive_plugin/ (现在跳过的话后续可能要用下面的方法了)

获取另一组插件 (可选) git clone https://mirror.ghproxy.com/https://github.com/CRAZYShimakaze/zhenxun_extensive_plugin.git ./extensive_plugin/temp/ 移到插件目录(排除某些文件) find ./extensive_plugin/temp -maxdepth 1 ! -name 'README.md' ! -name 'LICENSE' ! -name '.git' -exec mv {} ./extensive_plugin/ \; 删除临时目录 rm -rf ./extensive_plugin/temp

安装 poetry pip3.8 install poetry

(假如是用python 3.10那就需要在pyproject.toml文件把PyYAML的版本改成6.0.1, poetry.lock文件就删掉吧) (python3.8不需要改不需要删)

安装依赖 poetry install (执行后等待它完成, 假如有安装失败的那就再次执行直到成功)

进入虚拟环境 poetry shell

安装Chromium (和ffmpeg) playwright install chromium

设置机器人的主人以及机器人的昵称 nano .env.dev 在SUPERUSERS右边引号内输入自己QQ ctrl+o(保存)回车 ctrl+x(离开)

填写数据库 nano configs/config.py 修改下面内容, 机器人的昵称按需求修改, 其它的保持默认 user: str = "oyama" password: str = "mahiro" address: str = "127.0.0.1" port: str = "5432" database: str = "oyamadb" image ctrl+o(保存)回车 ctrl+x(离开)

首次启动真寻 python3.8 bot.py

要是提示没某个模块比如nonebot.adapter.onebot并且自动退出运行的话尝试输入这个 pip3.8 install nonebot-adapter-onebot 完成后再次启动真寻

自动退出后配置插件 (可选) nano configs/config.yaml 各个插件有注释说明, true为启用、false为禁用 (这里有个坑, 比如API_KEY这里, 冒号后面要加空格再填写API) 改完之后ctrl+o(保存)回车 ctrl+x(离开)

再次启动真寻 python3.8 bot.py 稍微等亿点时间下载完一些数据和图片包什么的就能用了

帮助菜单: '真寻帮助' 或 '管理员帮助'

真寻使用文档

可以到真寻bot的插件库NoneBot商店找一些插件安装 (具体的安装流程查看插件的Gayhub仓库)

以后关闭Termux重开后这样操作: 点状态栏的Acquire wakelock或者在Termux的命令行输入termux-wake-lock 然后执行下列命令 (可用方向↑↓找到命令, 这次在screen会话里面也可以用方向↑↓键了)

nohup postgres -D $PREFIX/var/lib/postgresql/ & ./start-centos.sh

screen -S gocq cd ~/gocq && go-cqhttp ctrl+a然后d

screen -S zhenxun cd ~/zhenxun_bot poetry shell python3.8 bot.py

附加screen的常规用法:

将该screen会话放后台 Ctrl+A然后D

回到zhenxun会话 screen -r zhenxun

回到gocq会话 screen -r gocq

进入回滚模式 (查看日志) Ctrl+A然后Esc (再次按Esc则是退出该模式)

关闭该screen会话 exit 或 Ctrl+A然后K再y

备份还原PostgreSQLの方法: 将oyamadb这个数据库备份到内置存储的下载(Download)文件夹 (等以后想要备份的时候再执行, 是在后台运行postgresql之后、启动CentOS之前执行) pg_dump oyamadb > ~/storage/downloads/oyamadb.sql 把内置存储下载(Download)文件夹的oyamadb.sql文件还原到oyamadb数据库 (之前备份过的话把文件放到对应位置执行这个还原, 要建完数据库之后再还原) psql oyamadb < ~/storage/downloads/oyamadb.sql

解决Android12~13因为杀进程导致Termux出现[Process completed (signal 9) - press Enter] 用数据线连PC并开启USB调试, PC需要装adb驱动 (应该可以用MiFlash的驱动) 然后PC下载platform-tools并解压 进去解压后的文件夹在地址栏输入cmd回车 Android13或12L执行这一行即可adb shell "settings put global settings_enable_monitor_phantom_procs false" Android12无谷歌服务执行这一行adb shell "/system/bin/device_config put activity_manager max_phantom_processes 2147483647" Android12有谷歌服务执行这一行adb shell "/system/bin/device_config set_sync_disabled_for_tests persistent; /system/bin/device_config put activity_manager max_phantom_processes 2147483647" 执行完后把爪机重启 没PC的话可以尝试开启无线调试然后在分屏或窗口用Termux进行配对(不自带分屏或窗口可以用米窗, 用Shizuku激活它), 在Termux里输入apt install android-tools -y安装android-tools, 然后输入adb pair 127.0.0.1:某端口配对, 输入六位配对码, 然后输入adb connect 127.0.0.1:某端口连接, 然后执行上述命令

KudouShinnyan avatar Oct 17 '22 04:10 KudouShinnyan

运行真寻bot时出错 Screenshot_20230322_144348

948812757 avatar Mar 22 '23 06:03 948812757

运行真寻bot时出错

没遇到过, 按照提示它是叫你执行playwright install 或者试下再次装依赖 不行就用Termux+Ubuntu22.04或20.04

KudouShinnyan avatar Mar 22 '23 09:03 KudouShinnyan

playwright install 执行了,但是没用现在用的就是Termux+Ubuntu22.04

948812757 avatar Mar 22 '23 14:03 948812757