Skip to content

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

@KudouShinnyan

Description

@KudouShinnyan

前言:
上次在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 "s@packages.termux.org@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:某端口连接, 然后执行上述命令

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions