资源下载及刷入教程
刷机包
Android SDK Platform-Tools
刷入教程
基本配置
换阿里源
1
| sudo vim /etc/apk/repositories
|
1 2 3
| https://mirrors.aliyun.com/postmarketOS/master https://mirrors.aliyun.com/alpine/edge/main https://mirrors.aliyun.com/alpine/edge/community
|
可以按照需要使用不同的 channel,例如 postmarketOS/v21.12,alpine/v3.15/main
网络配置
1
| sudo vim /etc/network/interfaces
|
1 2 3 4 5
| auto lo iface lo inet loopback
auto wlan0 iface wlan0 inet dhcp
|
较新的版本不用设置,不然会出现 no wifi adapter found,删除/etc/network/interfaces即可
防火墙
用的是nftables,防火墙规则在目录/etc/nftables.d/下
1 2 3
| sudo vim /etc/nftables.d/xxx.nft sudo rc-service nftables reload sudo nft list ruleset
|
1 2 3 4 5 6 7 8
| table inet filter { chain input { tcp dport 8080 accept comment "accept " } }
|
1 2
| sudo rc-service nftables reload sudo nft list ruleset
|
OpenRC管理服务
以mihomo为例
第一步:创建专用用户
出于安全考虑,我们不直接使用 root 用户来运行代理服务。
第二步:创建配置目录
mihomo 需要一个目录来存放的 config.yaml、Country.mmdb 等配置文件。标准的做法是放在 /etc 目录下。
创建目录:
1
| sudo mkdir -p /etc/mihomo
|
放置您的配置文件: 请确保您已经将 config.yaml 和其他必要的 GEOIP 文件(如 Country.mmdb)放入 /etc/mihomo 目录中。
第三步:设置权限
确保我们刚刚创建的 mihomo 用户有权限读取的配置文件。
1
| sudo chown -R mihomo:mihomo /etc/mihomo
|
第四步:创建 OpenRC 服务文件
这是核心步骤,我们来定义 mihomo 服务。
创建服务文件:
1
| sudo vi /etc/init.d/mihomo
|
将以下内容粘贴到文件中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #!/sbin/openrc-run
description="Mihomo Clash Meta Proxy Service"
command="/usr/local/bin/mihomo"
command_args="-d /etc/mihomo"
command_user="mihomo"
pidfile="/run/mihomo.pid" command_background="yes"
output_log="/var/log/mihomo.log" error_log="/var/log/mihomo.err"
depend() { need net }
|
赋予服务文件执行权限:
1
| sudo chmod +x /etc/init.d/mihomo
|
第五步:处理日志权限
我们需要手动创建日志文件并授权给 mihomo 用户。
1 2
| sudo touch /var/log/mihomo.log /var/log/mihomo.err sudo chown mihomo:mihomo /var/log/mihomo.log /var/log/mihomo.err
|
第六步:启动并管理服务 🚀
现在,所有准备工作都已完成。
启动 Mihomo 服务:
1
| sudo rc-service mihomo start
|
检查服务状态:
1
| sudo rc-service mihomo status
|
如果显示 started,就说明一切正常。
设置开机自启:
1
| sudo rc-update add mihomo default
|
查看实时日志: 如果想看 mihomo 的输出,比如连接信息或错误,可以使用 tail 命令:
1
| tail -f /var/log/mihomo.log
|
docker
简单配置:
1 2 3 4 5 6 7 8 9 10 11
| sudo apk update sudo apk add docker sudo apk add dockder-compose
sudo usermod -aG docker $USER newgrp docker
sudo service docker start sudo service docker stop sudo service docker status sudo rc-update add docker default
|
注意docker-compose需要设置network_mode: "bridge",用桥接模式,新建网络会无法访问外网(需要自己配置防火墙)
充电控制
以一加6为例,控制脚本如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
| #!/bin/sh
# ============================================================================== # Advanced Charge Controller for postmarketOS # ============================================================================== #
# Device: OnePlus 6 (enchilada) #
# - 维持电池电量在健康区间,延长电池寿命。 # - 当充电状态改变时,通过 Telegram 发送实时通知。 # - 支持通过 HTTP 代理发送 Telegram 通知。 # - 自动管理日志文件,防止无限增长。 # - 作为后台服务持续运行 (配合 OpenRC 服务使用)。 #
# --- 核心配置 --- # 定义充电阈值 START_CHARGE=40 # 电量低于此值时,开始充电 STOP_CHARGE=60 # 电量高于或等于此值时,停止充电
# 定义电流大小 (单位: 微安 uA) # 停止充电时,使用一个极小的电流值来“维持”,而不是完全断开 MIN_CURRENT=100000 # 0.1A # 正常充电时的电流值 (可根据你的充电器和测试情况调整) NORMAL_CURRENT=1100000 # 1.1A
# --- 硬件路径 (OnePlus 6) --- BATTERY_PATH="/sys/class/power_supply/bq27411-0" CHARGER_PATH="/sys/class/power_supply/pmi8998-charger"
# --- 日志配置 --- LOG_FILE="/var/log/charge_control.log" # 建议放在/var/log下 MAX_LOG_LINES=200 # 保留最多200行日志
# --- Telegram 配置 --- # 把下面的 Token 和 Chat ID 换成你自己的 TELEGRAM_TOKEN="" CHAT_ID="" TELEGRAM_ENABLED=true # 如果想临时禁用通知,可以把这里改成 false
# --- 代理配置 (新增) --- PROXY_ENABLED=true # 设置为 true 来启用代理, false 禁用 PROXY_URL="http://127.0.0.1:7890" # 你的代理服务器地址和端口
# ============================================================================== # 脚本函数定义 # ==============================================================================
# 函数:记录日志 log_message() { local message="$1" echo "[$(date "+%Y-%m-%d %H:%M:%S")] ${message}" >> "$LOG_FILE" }
# 函数:发送 Telegram 通知 (已更新,支持代理) send_telegram_notification() { if [ "$TELEGRAM_ENABLED" = true ]; then local message="$1" local proxy_option=""
# 如果启用了代理,则设置 curl 的代理参数 if [ "$PROXY_ENABLED" = true ]; then proxy_option="-x ${PROXY_URL}" fi
# 使用 curl 发送,${proxy_option} 会在需要时被展开为代理参数 curl -s -o /dev/null \ ${proxy_option} \ --data-urlencode "chat_id=${CHAT_ID}" \ --data-urlencode "text=${message}" \ "https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage" fi }
# 函数:清理旧日志 cleanup_log() { if [ -f "$LOG_FILE" ]; then tail -n "$MAX_LOG_LINES" "$LOG_FILE" > "${LOG_FILE}.tmp" && mv "${LOG_FILE}.tmp" "$LOG_FILE" fi }
# ============================================================================== # 主程序开始 # ==============================================================================
# 检查关键文件是否存在 if [ ! -f "${BATTERY_PATH}/capacity" ] || [ ! -f "${CHARGER_PATH}/current_max" ]; then log_message "错误:找不到电池控制文件,脚本退出。" send_telegram_notification "☠️ 充电管理服务错误:找不到电池控制文件,脚本已退出。" exit 1 fi
# 初始化日志和发送启动通知 log_message "脚本启动" log_message "充电策略: <${START_CHARGE}% 启动 | ≥${STOP_CHARGE}% 停止" send_telegram_notification "🔋 充电管理服务已启动!策略: <${START_CHARGE}% 启动, ≥${STOP_CHARGE}% 停止。"
# 进入主循环 while true; do # 获取当前电量 CAPACITY=$(cat "${BATTERY_PATH}/capacity")
# 获取充电器连接状态 ONLINE=$(cat "${CHARGER_PATH}/online")
# 只有在充电器连接时才执行控制逻辑 if [ "$ONLINE" -eq 1 ]; then CURRENT_MAX_NOW=$(cat "${CHARGER_PATH}/current_max")
if [ "$CAPACITY" -ge "$STOP_CHARGE" ]; then # 电量达到或超过上限,需要停止充电 # 检查当前是否已经是停止状态,避免重复操作和发送通知 if [ "$CURRENT_MAX_NOW" -ne "$MIN_CURRENT" ]; then echo "$MIN_CURRENT" > "${CHARGER_PATH}/current_max" local message="🔌 电量 ${CAPACITY}% ≥ ${STOP_CHARGE}%,已限制充电电流。" log_message "$message" send_telegram_notification "$message" fi elif [ "$CAPACITY" -lt "$START_CHARGE" ]; then # 电量低于下限,需要开始充电 # 检查当前是否已经是充电状态,避免重复操作和发送通知 if [ "$CURRENT_MAX_NOW" -ne "$NORMAL_CURRENT" ]; then echo "$NORMAL_CURRENT" > "${CHARGER_PATH}/current_max" local message="⚡️ 电量 ${CAPACITY}% < ${START_CHARGE}%,已恢复正常充电。" log_message "$message" send_telegram_notification "$message" fi fi fi
# 定期清理日志 (每 100 次循环清理一次,约每50分钟) # 使用一个计数器比按时间检查更简单可靠 loop_count=$((loop_count+1)) if [ "$loop_count" -ge 100 ]; then cleanup_log loop_count=0 fi
# 每30秒检测一次 sleep 30 done
|
备份
使用rsync
backup
1 2
| mkdir ~/postmarketOS_backup rsync -avz --exclude=.cache username@ip:/home/username ~/postmarketOS_backup/
|
restore
1
| rsync -avzu ~/postmarketOS_backup/username/ username@ip:/home/username/
|
杂项
postmarketOS 中,登录时会先读取 .profile 文件
在power中关闭automatic suspend禁止休眠
如果是双系统,可以用sudo qbootctl -s a 设置活动分区为a以切换系统
开机自启 /etc/local.d/boot.start