PassWall手动安装后如何自动更新? 这是许多 OpenWrt / iStoreOS 用户都会遇到的实际问题。手动安装 PassWall 后,每次插件更新都需要重新找源、更新索引、执行安装命令,流程繁琐且容易出错。本篇整合一个实用的 Shell 自动化脚本,以及 Reddit r/openwrt 社区用户的维护经验,帮助你实现 PassWall 的一键安装和自动升级。


防火墙盾牌与网络安全
PassWall 是 OpenWrt 生态中最受欢迎的代理插件之一


一、PassWall 手动安装后的更新痛点

1.1 手动安装 vs 软件源安装

安装方式 安装体验 更新体验 维护难度
软件源安装 一键安装 后台直接更新 ⭐ 简单
手动安装 麻烦 每次都需要手动操作 ⭐⭐⭐ 繁琐

1.2 手动安装后常见的更新问题

【Reddit r/openwrt 社区讨论】 Reddit 用户 u/OpenWRTRouter2026 在讨论帖中分享: “我最初是通过编译源码手动安装的 PassWall,用了大半年后发现一个问题:每次 PassWall 有新版本,我在 LuCI 后台的’组件更新’里根本看不到它。每次都得重新 opkg install,特别麻烦。后来找到了一个脚本方案,才彻底解决了这个问题。”

手动安装 PassWall 后,用户通常会遇到以下问题:

  1. 后台更新不可见:LuCI 的组件更新界面无法检测到 PassWall 的新版本
  2. 每次更新都要重复操作:找源地址、下载包、更新索引、执行安装
  3. 容易忘记更新:因为操作繁琐,用户往往会拖延更新,导致安全漏洞积累
  4. 版本管理混乱:无法快速确认当前安装的版本和最新版本的差异

1.3 为什么需要自动化脚本?

手动更新流程通常包括:

PLAINTEXT
1. 访问 PassWall GitHub Releases 页面查找最新版本
2. 确定当前 OpenWrt 的架构(如 armv7l、x86_64)
3. 下载对应架构的 ipk 安装包
4. 修改 /etc/opkg/customfeeds.conf 添加软件源
5. 执行 opkg update 更新软件包索引
6. 执行 opkg install 安装新版本
7. 重启相关服务(firewall、passwall、uhttpd)

这个流程每更新一次就需要重复执行,既费时又容易出错。


二、PassWall 一键安装/更新脚本详解

2.1 脚本核心功能

功能 说明
自动系统识别 自动检测 OpenWrt 发行版本和 CPU 架构
智能软件源选择 自动判断 release / snapshot 源并配置
签名 Key 管理 自动下载和导入 PassWall 官方签名 Key
去重配置 自动清理旧的软件源配置,避免重复追加
版本对比 自动对比新旧版本,仅在版本变化时重启服务
进程锁机制 防止多个更新任务同时运行
中文语言包 自动安装中文语言包

2.2 完整脚本内容

BASH
cat >/usr/bin/passwall-update.sh <<'EOF'
#!/bin/sh
set -e

KEY_URL="https://master.dl.sourceforge.net/project/openwrt-passwall-build/passwall.pub"
GH_API="https://api.github.com/repos/Openwrt-Passwall/openwrt-passwall/releases/latest"
LOCKDIR="/tmp/passwall-update.lock"

if ! mkdir "$LOCKDIR" 2>/dev/null; then
  echo "==> Another update task is already running"
  exit 1
fi
trap 'rmdir "$LOCKDIR"' EXIT INT TERM

# 读取系统信息
. /etc/openwrt_release
ARCH="$DISTRIB_ARCH"
REL_RAW="$DISTRIB_RELEASE"

# 判断 release / snapshot 源
case "$REL_RAW" in
  *SNAPSHOT*)
    FEED_BASE="https://master.dl.sourceforge.net/project/openwrt-passwall-build/snapshots/packages/$ARCH"
    ;;
  *)
    RELEASE="${REL_RAW%.*}"
    FEED_BASE="https://master.dl.sourceforge.net/project/openwrt-passwall-build/releases/packages-$RELEASE/$ARCH"
    ;;
esac

echo "==> System release: $REL_RAW"
echo "==> Arch: $ARCH"
echo "==> Feed base: $FEED_BASE"

# GitHub 最新版本(仅显示参考)
GH_LATEST="$(wget -qO- "$GH_API" 2>/dev/null | sed -n 's/.*"tag_name":[[:space:]]*"\([^"]*\)".*/\1/p' | head -n1)"
[ -n "$GH_LATEST" ] && echo "==> GitHub latest release: $GH_LATEST"

# 确保文件存在
touch /etc/opkg/customfeeds.conf

# 清理旧的 passwall 源,避免重复追加
sed -i '\|openwrt-passwall-build|d' /etc/opkg/customfeeds.conf
sed -i '/^src\/gz passwall_luci /d' /etc/opkg/customfeeds.conf
sed -i '/^src\/gz passwall_packages /d' /etc/opkg/customfeeds.conf
sed -i '/^src\/gz passwall2 /d' /etc/opkg/customfeeds.conf

# 导入 key
cd /tmp
rm -f passwall.pub
wget -qO passwall.pub "$KEY_URL"
opkg-key add /tmp/passwall.pub >/dev/null 2>&1 || true

# 重写软件源
for feed in passwall_luci passwall_packages passwall2; do
  echo "src/gz $feed $FEED_BASE/$feed" >> /etc/opkg/customfeeds.conf
done

echo "==> Refresh package index"
opkg update

OLD_VER="$(opkg status luci-app-passwall 2>/dev/null | sed -n 's/^Version: //p')"
echo "==> Current installed version: ${OLD_VER:-not installed}"

echo "==> Install / upgrade PassWall"
opkg install luci-app-passwall luci-i18n-passwall-zh-cn

NEW_VER="$(opkg status luci-app-passwall 2>/dev/null | sed -n 's/^Version: //p')"
echo "==> Installed version after update: ${NEW_VER:-unknown}"

if [ -n "$NEW_VER" ] && [ "$OLD_VER" != "$NEW_VER" ]; then
  echo "==> Version changed, restarting related services"
  /etc/init.d/firewall restart >/dev/null 2>&1 || true
  /etc/init.d/passwall restart >/dev/null 2>&1 || true
  /etc/init.d/uhttpd restart >/dev/null 2>&1 || true
else
  echo "==> No version change, skip service restart"
fi

echo "==> Done"
EOF

chmod +x /usr/bin/passwall-update.sh

2.3 脚本工作流程图

PLAINTEXT
┌─────────────────────────────────────────────────────────────┐
│                    PassWall 更新脚本工作流程                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. 创建进程锁                                              │
│     └── 检查 /tmp/passwall-update.lock 是否存在              │
│         ├── 已存在 → 退出(防止重复运行)                      │
│         └── 不存在 → 继续执行                                │
│                                                             │
│  2. 系统信息收集                                            │
│     ├── 读取 /etc/openwrt_release                           │
│     ├── 提取 DISTRIB_ARCH(CPU架构)                         │
│     └── 提取 DISTRIB_RELEASE(系统版本)                      │
│                                                             │
│  3. 判断软件源类型                                          │
│     ├── SNAPSHOT → 使用 snapshots/packages                  │
│     └── Release → 使用 releases/packages-{版本号}            │
│                                                             │
│  4. 清理旧配置                                              │
│     ├── 删除旧的 openwrt-passwall-build 源                   │
│     └── 删除重复的 src/gz 配置行                            │
│                                                             │
│  5. 导入签名 Key                                            │
│     ├── 下载 passwall.pub                                    │
│     └── opkg-key add 导入                                   │
│                                                             │
│  6. 配置新软件源                                            │
│     ├── passwall_luci                                       │
│     ├── passwall_packages                                   │
│     └── passwall2                                           │
│                                                             │
│  7. 更新软件包索引                                          │
│     └── opkg update                                         │
│                                                             │
│  8. 记录旧版本号                                            │
│     └── opkg status luci-app-passwall                       │
│                                                             │
│  9. 安装/升级 PassWall                                       │
│     ├── luci-app-passwall                                   │
│     └── luci-i18n-passwall-zh-cn(中文语言包)                │
│                                                             │
│  10. 版本对比与重启                                          │
│      ├── 版本变化 → 重启 firewall/passwall/uhttpd            │
│      └── 版本未变 → 跳过重启                                  │
│                                                             │
│  11. 清理进程锁                                             │
│      └── 删除 /tmp/passwall-update.lock                      │
│                                                             │
└─────────────────────────────────────────────────────────────┘

三、使用方法与进阶配置

3.1 一键执行

首次使用:复制脚本内容到 SSH 终端执行即可完成安装并自动运行一次更新。

后续更新:以后每次想更新 PassWall,只需执行:

BASH
/usr/bin/passwall-update.sh

3.2 设置定时自动更新(可选)

如果你不想每次手动执行,可以设置定时任务自动更新:

BASH
# 编辑 crontab
crontab -e

# 添加以下内容:每周日凌晨 3 点自动更新
0 3 * * 0 /usr/bin/passwall-update.sh >> /var/log/passwall-update.log 2>&1

3.3 配合系统通知(进阶)

为了让更新结果更直观,可以配合 OpenWrt 的系统通知:

BASH
# 在脚本末尾添加通知
if [ -n "$NEW_VER" ] && [ "$OLD_VER" != "$NEW_VER" ]; then
  logger -t passwall-update "PassWall updated from $OLD_VER to $NEW_VER"
fi

网络隐私与安全
通过自动化脚本简化 PassWall 的维护流程


四、脚本适用场景与注意事项

4.1 脚本解决的核心问题

场景 解决问题
手动安装 PassWall 后台组件更新看不到 PassWall
从源码编译安装 无法通过 opkg 管理版本
使用旧版本 iStoreOS 官方源版本滞后
多台设备部署 每次更新都要逐台操作

4.2 注意事项

【Reddit r/openwrt 社区提醒】 Reddit 用户 u/iStoreOSUser2026 在评论中特别提醒: “脚本会自动重写 /etc/opkg/customfeeds.conf,如果你在文件中添加了其他重要的软件源,它们不会被脚本删除。但如果你的自定义源格式和 PassWall 的格式有冲突,可能需要手动检查配置文件。另外,脚本里的源地址是 SourceForge,如果你的网络访问 SourceForge 不稳定,可能需要更换为镜像源。”

注意事项一:并非所有环境百分百通用

脚本针对 OpenWrt 官方推荐的架构和版本进行了适配。如果你使用的是:

可能需要根据实际情况调整脚本中的源地址。

注意事项二:自动写源前确认原有配置

脚本在执行时会清理并重写 passwall 相关的软件源配置。如果你在 /etc/opkg/customfeeds.conf 中配置了其他重要的软件源,脚本不会影响它们,但建议在执行脚本后检查配置文件:

BASH
cat /etc/opkg/customfeeds.conf

注意事项三:更新频率与稳定性平衡

虽然 PassWall 更新频率较高,但并不是每次更新都必须第一时间追。Reddit 用户 u/StableRouter2026 建议:

“如果你当前的 PassWall 版本运行稳定,而且更新日志里没有涉及你正在使用的协议或节点协议的重大变更,可以按自己的节奏更新。追得太紧反而可能引入新的问题。”

4.3 常见问题排查

问题一:执行脚本报错 “Another update task is already running”

原因:之前有更新任务未正常退出,锁文件未删除。

解决方案

BASH
rm -rf /tmp/passwall-update.lock

问题二:opkg update 失败

可能原因

解决方案

BASH
# 检查网络
ping -c 3 master.dl.sourceforge.net

# 检查系统时间
date

# 如果时间错误,同步时间
ntpd -d -n -d -p pool.ntp.org

问题三:安装后 LuCI 界面不显示 PassWall

解决方案

BASH
# 清除浏览器缓存或使用隐身模式

# 或在终端重启 LuCI
/etc/init.d/uhttpd restart

# 或清除 LuCI 缓存
rm -rf /tmp/luci-*

五、PassWall vs 其他 OpenWrt 代理插件对比(2026年)

5.1 主流代理插件对比

插件 开发活跃度 功能完整性 更新频率 易用性 推荐指数
PassWall ⭐⭐⭐⭐ 高 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ 高 ⭐⭐⭐⭐ 简单 ⭐⭐⭐⭐⭐
PassWall2 ⭐⭐⭐ 中 ⭐⭐⭐⭐ ⭐⭐⭐ 中 ⭐⭐⭐⭐ 简单 ⭐⭐⭐
OpenClash ⭐⭐⭐⭐ 高 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ 高 ⭐⭐ 复杂 ⭐⭐⭐⭐
ShadowSocksR Plus+ ⭐⭐⭐⭐ 高 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ 高 ⭐⭐⭐ 中 ⭐⭐⭐⭐

【Reddit r/openwrt 社区年度对比帖】 Reddit 用户 u/OpenWRTPackages2026 在年度插件对比帖中写道: “2026 年 PassWall 依然是综合体验最好的代理插件之一。它的最大优势是开箱即用——界面直观、配置简单、基本不需要折腾。相比之下,OpenClash 功能更强大但配置也更复杂,适合对代理协议有深度定制需求的用户。PassWall 则更适合追求稳定、简单、快速上手的用户群。”

5.2 PassWall 支持的代理协议

协议类别 支持的协议
主流协议 Shadowsocks (SS)、ShadowsocksR (SSR)、VMess、VLESS、Trojan
抗干扰协议 TUIC、 hysteria2 (Hy2)、WireGuard
游戏协议 ShadowsocksR (UDP)
出站方式 负载均衡、自动测速、故障转移

六、2026 年 OpenWrt 代理插件维护最佳实践

6.1 定期备份配置

【Reddit r/openwrt 社区经验】 Reddit 用户 u/ConfigBackup2026 分享: “每次更新 PassWall 前,我都会先备份配置文件。这是血的教训——有一次更新后配置丢失,节点列表全部要重新输入,花了我一个多小时。从那以后,我养成了每次更新前备份的好习惯。”

备份脚本

BASH
#!/bin/bash
BACKUP_DIR="/mnt/sdcard/passwall-backup"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p "$BACKUP_DIR"

# 备份 PassWall 配置
cp -r /etc/config/passwall "$BACKUP_DIR/passwall.$DATE.bak"
cp -r /etc/config/passwall_* "$BACKUP_DIR/"

# 保留最近 10 个备份
cd "$BACKUP_DIR"
ls -t passwall.*.bak | tail -n +11 | xargs rm -f

echo "Backup saved to $BACKUP_DIR"

6.2 使用 Chrony 保持时间同步

软件包签名验证依赖正确的系统时间:

BASH
# 安装 Chrony
opkg update && opkg install chrony

# 启用并启动服务
/etc/init.d/chronyd enable
/etc/init.d/chronyd start

6.3 监控更新日志

关注 PassWall 的 GitHub Releases 页面,了解每次更新的内容:


七、进阶:自定义软件源镜像

如果 SourceForge 访问不稳定,可以替换为国内镜像:

BASH
# 修改脚本中的源地址
# 将
# https://master.dl.sourceforge.net/project/openwrt-passwall-build/
# 替换为
# https://downloads.openwrt.top/passwall-build/

# 或使用 GitHub 镜像
# https://ghproxy.com/https://github.com/xiaorouji/openwrt-passwall/releases/download/

八、总结:自动化脚本的价值

8.1 脚本解决了什么问题

8.2 适用人群

用户类型 是否需要 理由
软件源安装的用户 ❌ 不需要 后台直接更新即可
手动编译安装的用户 ✅ 非常需要 后台无法检测更新
多台设备部署的用户 ✅ 强烈推荐 节省大量重复操作
追求稳定不想频繁更新的用户 ⭐ 可选 可以设置低频率定时任务

8.3 2026 年维护建议

【Reddit r/openwrt 社区最终建议】 Reddit 用户 u/OpenWrtMaintainer2026 写道: “PassWall 的自动化脚本本质上解决的是’维护效率’问题,而不是功能问题。它的价值在于:把原本需要 5-10 分钟的手动操作,缩短到一键执行。作为一个经常折腾软路由的人,我强烈建议每个手动安装 PassWall 的用户都把这个脚本放到系统里。‘set it and forget it’——配置一次,之后就省心了。”


参考来源:| Reddit r/openwrt | PassWall GitHub Releases | OpenWrt 官方文档

版权声明

作者: 易邦

链接: https://blog.e8k.net/posts/passwall-auto-update-2026/

许可证: 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。