在上一篇折腾的文章中介绍了已经root的Android手机部署Linux榨干性能的具体操作
(此处应该有链接,但是我不知道怎么插)
如果折腾完拉一个fastfetch就放那了, 那也太浪费了, 好不容易让已经逝世的Android再次复活, 当然得让它把活干起来, 我们手里不养闲机
跟着上一个教程完整弄完后, 我们拥有了一个标准的ARM Linux系统, 并且已经具备以下特性
- 随着LinuxDeploy开机自启动, 自动获取CPU唤醒锁
- 基本的sysv服务管理, SSH服务能被sysv自动拉起, 开机不需要任何操作就可以SSH连接
- 可以连接外网, 下载/安装和更新软件
由于Android内核限制不支持docker以及systemd, 但是我们可以使用其他的服务管理
在此之前, 需要进行一些小的问题处理
1. 基本配置与问题处理
1.1 访问HTTPS提示x509
解决联网问题之后, 访问有些HTTPS地址会提示x509, 能ping通域名, 但是无法通过curl等工具实际访问页面
这是因为我们部署的系统太干净了, 缺少基础的根CA证书, 安装一下就能解决
bash
apt update && apt install ca-certificates
安装后还提示509, 可尝试在~/.bashrc中设置环境变量export SSL_CERT_FILE=/etc/tls/cert.pem
1.2 SSH连接后的彩色显示/Tab补全/历史命令
-
编辑 /etc/passwd 在对应用户名后将sh更改为bash
-
编辑 ~/.bashrc 取消注释其中要显示颜色的行
bashsource ~/.bashrc # You may uncomment the following lines if you want `ls' to be colorized: export LS_OPTIONS='--color=auto' eval "$(dircolors)" alias ls='ls $LS_OPTIONS' alias ll='ls $LS_OPTIONS -l' alias l='ls $LS_OPTIONS -lA'修改完成后重新开启一个SSH连接测试效果
1.3 禁用可能的进程杀手
Android 15+版本, Google 引入了极其严格的后台进程限制 (Background Execution Limits)和幻影进程杀手(Phantom Process Killer), 像Termux这种应用只要在后台占用的CPU过高, 或者子进程过多(比如超过32个), 可能会被系统杀后台
为避免这些问题, 让服务器稳定运行, 除了配置时提到的允许权限/打开通知/允许后台/电量使用无限制之外, 还可以进行以下操作, 确保万无一失
用termux(root)或者adb shell(root)连接, 打开命令行, 输入su切换root
bash
su
# 增加幻影进程的最大数量限制至最大值 (LineageOS上未找到该选项, 但还是执行一下)
device_config put activity_manager max_phantom_processes 2147483647
# 禁用幻影进程监控开关
setprop persist.sys.fflag.override.settings_enable_monitor_phantom_procs false
配置好环境之后不要轻易更新系统, 否则可能导致配置失效
1.4 配置apt软件源解决下载过慢问题
若无特殊说明, 命令行都是在chroot中的Linux下执行, 清华源可以按照自己的需要替换, 使用https前先按照第一步处理好ca
bash
cd /etc/apt
cp sources.list sources.list.bak
sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g' sources.list
apt update
# 确保ca-certificates已经安装,https访问正常
sed -i 's/http:/https/g' sources.list
apt update
apt dist-upgrade
2. supervisor服务管理器
自带的sysv可以用来管理一些提供了sysv脚本的服务, 比如ssh和supervisor, 但很多服务应用可能只提供systemd配置, 或者根本没有提供服务管理配置, 自己手撸sysv的服务管理脚本挺麻烦, 使用supervisor来配置服务会简单很多
apt安装supervisor, sysv设置supervisor自启动
bash
apt install supervisor
service supervisor start
service --status-all
supervisor的配置文件与日志文件: 配置/etc/supervisor/supervisor.config, 日志/var/log/supervisor
常用命令
bash
supervisorctl reload # 会重启所有管理的进程, 如果只是加载新添加的配置可以运行以下指令
supervisorctl reread # 重新读取配置文件
supervisorctl update # 刷新配置到进程组
supervisorctl help # 查看可用命令
supervisorctl -h # 帮助
若需要创建新的服务, 在/etc/supervisor/conf.d目录下新建服务配置即可管理服务
配置模板如下, 不是每一项都需要
ini
[program:my_service]
; 启动命令,注意这里写绝对路径, 不支持管道/通配符等复杂运算
command=/usr/local/bin/my_server --port 8080 --config /etc/my_server/config.json
; 程序运行的运行目录 (相当于 cd 到这个目录再执行)
directory=/opt/my_server/
; 以哪个用户的身份运行 (强烈建议不要全用 root)
user=www-data
; 随 supervisord 启动而启动
autostart=true
; 程序异常退出后自动重启
autorestart=true
; 重启重试次数
startretries=3
; 环境变量设置 (如果有的话)
environment=RUST_LOG="info",NODE_ENV="production"
; 标准输出日志路径
stdout_logfile=/var/log/my_server_out.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=3
; 错误输出日志路径
stderr_logfile=/var/log/my_server_err.log
2.1 Siyuan笔记
包括siyuan在内的一些服务之前在termux篇中也说过, 但是标准的ARM Linux环境兼容性更好, 不容易出现各种奇怪的问题
在Termux中搭建HTTP导航页服务时我没有使用lighttpd而是使用darkhttpd, 就是因为兼容性问题
因此, 我觉得有root时用chroot搭建arm linux环境, 没有root时在termux中用proot搭建arm linux环境才是最佳选择
在官网下载linux-arm64版本(依据设备架构, 后续以arm64为例)
解压到~/.local/bin/siyuan/
创建supervisor服务配置 /etc/supervisor/conf.d/siyuan.conf
ini
[program:siyuan]
directory=/root/.local/bin/siyuan/resources
command=/root/.local/bin/siyuan/resources/kernel/SiYuan-Kernel -accessAuthCode mypasswd -lang zh_CN -workspace /root/siyuan -wd /root/.local/bin/siyuan/resources
autostart=true
autorestart=true
startreties=3
stderr_logfile=/var/log/siyuan.err
stdout_logfile=/var/log/siyuan.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=3
;redirect_stderr=true
environment=RUN_IN_CONTAINER=1
启动服务, 查看日志
bash
supervisorctl update
cat /var/log/siyuan.log
若一切正常, 可以访问http://ip:6806愉快使用
2.2 code-server开发环境
这是一个Web端的VSCode, 在Termux环境下我也尝试部署过, 发现启动正常但是大多数插件都提示不支持Web平台, 在chroot环境下又部署了一个, 发现插件都可以用
下载code-server需要设置代理, 直接使用官方脚本
bash
# 设置为自己局域网内的代理地址
export https_proxy=http://192.168.9.7:10808
# 使用官方脚本安装
curl -fsSL https://code-server.dev/install.sh | sh
如果代理不方便处理, 可以直接从github上下载Linux ARM64版本, 解压到设备上
先运行一次, 生成基础配置文件
bash
code-server
# 修改配置文件
nano ~/.config/code-server
配置如下
yaml
# 监听地址和端口
bind-addr: 0.0.0.0:8080
# 授权方式 password 或者 none (无密码)
auth: password
# 密码
password: asdfqwert
# 开启自签名cert https (自签名的https浏览器会提示证书不安全, 忽略即可)
cert: true
最好开启https访问, 否则会有些功能受限制, 浏览器提示证书风险不用管, 反正只是局域网访问
supervisor服务配置 /etc/supervisor/conf.d/code-server.conf
ini
[program:code-server]
directory=/root
command=/usr/bin/code-server
autostart=true
autorestart=true
startreties=3
stderr_logfile=/var/log/code-server.err
stdout_logfile=/var/log/code-server.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=3
如果扩展安装/下载失败, 可以自己下载, 拖到vscode文件目录中, 命令行安装
bash
code-server --install-extension ./xxxx.vsix
安装自己开发常用扩展, 比如: neo-git-graph, dracula theme, indent-rainbow, render line endings, python, python debugger, godot-tools, godot files, clangd
2.3 lighttpd导航Web页
bash
apt install lighttpd -y
安装完成后已经自动在/etc/init.d目录下创建自启动配置, 运行配置在/etc/lighttpd/lighttpd.conf, 默认网站路径为/var/www/html/
bash
# 开启lighttpd服务
service lighttpd start
# 已经可以看到lighttpd服务
service --status-all
访问http://ip:80, 页面正常, 替换页面/var/www/html/index.lighttpd.html
html
<!doctype html>
<html lang="en-US">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="shortcut icon" href="#" />
<title>Services List</title>
</head>
<body>
<div class="container">
<h1>Services List</h1>
<div id="services" class="list-group">
</div>
</div>
<script>
let services = [
["https", "code-server", 8080, ""],
["http", "siyuan", 6806, ""],
];
let container = document.querySelector("#services");
let hostname = window.location.hostname;
let content = "";
services.forEach((service) => {
content += "<a class=\"list-group-item list-group-item-action\" "
+ "target=\"_blank\" "
+ "href=\""
+ service[0]
+ "://"
+ hostname + ":"
+ service[2]
+ service[3]
+ "\">"
+ service[1]
+ "</a>\n";
})
container.innerHTML = content;
</script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
</body>
</html>
2.4 以Headless运行Godot
打开godot官网: github.com/godotengine...
下载版本: stable_linux.arm64
虽然不能用图形界面, 但可以headless模式运行, 可以在code-server中配合插件开发调试 (需要添加headless参数), 或者进行CI/DI集成
运行之后提示一个错误:
libfontconfig.so.1: cannot open shared object file: No such file or directory
来搜索解决一下
bash
apt install libfontconfig1
安装后再运行, 不再提示错误
但是提示root用户风险, 可以在.bashrc中添加export GODOT_SILENCE_ROOT_WARNING=1, 之后执行source .bashrc屏蔽掉
2.5 在code-server中进行headless模式的Godot开发调试
语言服务器LSP连接: 代码提示, 自动补全, 文档提示
在code-server中安装godot-tools, godot-files两个扩展
确保godot在path目录中
在godot-tools配置中打开 lsp-headless (launch the LSP as a headless child process)
上述配置若正确无误, 则LSP是可以直接使用的, 不需要手动启动进程
Godot项目调试
打开调试侧边栏, 点击创建一个launch.json, 配置选择"GDScript Godot Debug", 会生成一个默认配置, 默认生成的调试配置如下
json
{
"name": "GDScript: Launch Project",
"type": "godot",
"request": "launch",
"project": "${workspaceFolder}",
"debug_collisions": false,
"debug_paths": false,
"debug_navigation": false,
"additional_options": ""
}
默认配置直接打断点调试是跑不起来的, 必须在 **additional_options**配置中加上 **--headless**参数
直接F5试试, 很棒, 可以正常调试运行, 变量, 堆栈都可以正常显示, 可以拿手机摸鱼开发Godot游戏了!
你们还想看哪些折腾教程呢, 打在评论区吧
- proot下的ARM Linux自启动与服务管理方案
- chroot/proot环境部署v2raya代理
- chroot/proot环境部署Claude Code/Codex
- chroot/proot环境部署OpenClaw/NanoClaw