资源下载及刷入教程

刷机包

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.12alpine/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
#添加以下内容放行tcp端口8080:
table inet filter {
chain input {
tcp dport 8080 accept comment "accept "
}
}
#多端口{80, 443, 8080}

1
2
sudo rc-service nftables reload #重载服务
sudo nft list ruleset #列出规则

OpenRC管理服务

以mihomo为例

第一步:创建专用用户

出于安全考虑,我们不直接使用 root 用户来运行代理服务。

1
2
# -D 参数创建一个无密码、不能登录的系统用户,非常适合运行服务
sudo adduser -D mihomo

第二步:创建配置目录

mihomo 需要一个目录来存放的 config.yamlCountry.mmdb 等配置文件。标准的做法是放在 /etc 目录下。

  1. 创建目录

    1
    sudo mkdir -p /etc/mihomo
  2. 放置您的配置文件: 请确保您已经将 config.yaml 和其他必要的 GEOIP 文件(如 Country.mmdb放入 /etc/mihomo 目录中

第三步:设置权限

确保我们刚刚创建的 mihomo 用户有权限读取的配置文件。

1
sudo chown -R mihomo:mihomo /etc/mihomo

第四步:创建 OpenRC 服务文件

这是核心步骤,我们来定义 mihomo 服务。

  1. 创建服务文件

    1
    sudo vi /etc/init.d/mihomo
  2. 将以下内容粘贴到文件中

    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"

    # 您提供的 mihomo 可执行文件路径
    command="/usr/local/bin/mihomo"
    # -d 参数指定了配置文件的目录
    command_args="-d /etc/mihomo"

    # 以我们创建的 mihomo 用户身份运行
    command_user="mihomo"

    # 使用 start-stop-daemon 在后台运行
    pidfile="/run/mihomo.pid"
    command_background="yes"

    # 将日志输出到文件
    output_log="/var/log/mihomo.log"
    error_log="/var/log/mihomo.err"

    depend() {
    # 确保在网络连接后启动
    need net
    }
  3. 赋予服务文件执行权限

    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

第六步:启动并管理服务 🚀

现在,所有准备工作都已完成。

  1. 启动 Mihomo 服务

    1
    sudo rc-service mihomo start
  2. 检查服务状态

    1
    sudo rc-service mihomo status

    如果显示 started,就说明一切正常。

  3. 设置开机自启

    1
    sudo rc-update add mihomo default
  4. 查看实时日志: 如果想看 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 #添加当前用户到docker用户组
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
# ==============================================================================
#
# Author: Meng
# 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