套件來源與中國鏡像站:分開處理 apk 與 opkg
首先要知道:apk 與 opkg 的差異取決於韌體版本,而不是「哪個鏡像站比較快」。25.12 使用 apk;24.10 使用 opkg。套件格式、套件來源路徑與驗證方式都不同,兩者不能互換。
- 知道韌體使用
apk還是opkg,以及它的套件來源檔位於何處。 - 對齊版本、target、架構與 kmods 核心雜湊值。
- 知道中國鏡像站取代的是 URL 的哪一部分,以及哪些路徑必須保持一致。
- 了解為什麼「更換鏡像站後套件裝不起來」,以及如何回復。
- 了解為什麼
apk upgrade/opkg upgrade不是韌體升級。
辨識套件管理員與套件來源
Section titled “辨識套件管理員與套件來源”ubus call system boardcat /etc/openwrt_releaseuname -mcat /etc/apk/arch 2>/dev/nullopkg print-architecture 2>/dev/null關鍵欄位:release.version、release.target、DISTRIB_ARCH、release.revision。它們必須與鏡像站路徑相符。
預期你能寫出完整的版本/target/架構組合。
OpenWrt 25.12(apk):
cat /etc/apk/repositories.d/distfeeds.listOpenWrt 24.10(opkg):
cat /etc/opkg/distfeeds.confcat /etc/opkg/customfeeds.conf編輯之前先備份:
cp /etc/apk/repositories.d/distfeeds.list /etc/apk/repositories.d/distfeeds.list.bak.$(date +%F) 2>/dev/null || truecp /etc/opkg/distfeeds.conf /etc/opkg/distfeeds.conf.bak.$(date +%F) 2>/dev/null || true預期你知道每個來源指向哪裡,以及它是 apk 還是 opkg。
25.12 的 apk 結構
Section titled “25.12 的 apk 結構”OpenWrt 25.12 使用 apk;索引為 .adb,套件為 .apk。典型的套件來源:
targets/<target>/packages/packages.adb:target 專屬套件;packages/<arch>/base/packages.adb:base;packages/<arch>/luci/packages.adb:LuCI;packages/<arch>/packages/packages.adb:一般套件;packages/<arch>/routing|telephony|video/packages.adb:分類套件來源;targets/<target>/kmods/<kernel-hash>/packages.adb:核心模組;雜湊值必須與正在執行的核心相符。
指令:
apk updateapk search <name>apk add <name>apk info -e <name>請勿使用 opkg,也不要把 24.10 的 .ipk 改名為 .apk。
24.10 的 opkg 結構
Section titled “24.10 的 opkg 結構”OpenWrt 24.10 使用 opkg;索引為 Packages.gz,套件為 .ipk:
opkg updateopkg list | grep <name>opkg install <name>opkg list-installed | grep <name>請勿使用 apk,也不要把 25.12 的 .apk 交給 opkg。
改寫為中國鏡像站
Section titled “改寫為中國鏡像站”以 TUNA 鏡像站為例,根路徑為:
https://mirrors.tuna.tsinghua.edu.cn/openwrt/只把 https://downloads.openwrt.org 換成該根路徑,並保留完整的路徑:
https://downloads.openwrt.org/releases/25.12.6/targets/x86/64/packages/packages.adb→ https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/25.12.6/targets/x86/64/packages/packages.adb不要只寫到 .../openwrt/,也不要省略 releases/25.12.6/targets/x86/64/...;路徑不完整會回傳 404。
curl -I https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/25.12.6/targets/x86/64/packages/packages.adb請把 URL 換成你的版本/target;若是 kmods,也要驗證核心雜湊值。若鏡像站沒有該路徑,不要強行使用。
預期curl 回傳 200,且路徑與目前的版本/target 相符。
apk update# oropkg update使用 apk search/opkg list 確認套件來源可讀取,再只安裝你需要的套件。不要把 apk upgrade/opkg upgrade 當成韌體升級;韌體請使用 sysupgrade/ASU/owut。
預期apk/opkg update 成功,且不會大量升級套件。
- 版本錯誤(25.12.6 與 24.10.8);
- target 錯誤(是
x86/64,不是x86_64目錄); - 架構錯誤(
x86_64、aarch64); - 鏡像站尚未同步該路徑;
- 混淆了
packages與targets目錄。
簽章/驗證失敗
Section titled “簽章/驗證失敗”- 索引損毀或屬於不同版本;
- 系統時間/憑證錯誤;
- 混入了其他套件來源;
- 不要依賴
--allow-untrusted;請修正套件來源/驗證。
相依性/ABI 不符
Section titled “相依性/ABI 不符”- kmods 核心雜湊值不符;
- 套件是為其他 target/架構建置的;
- 混用官方與 ImmortalWrt/iStoreOS 套件來源;
- 你需要相同的來源、版本與架構,或自行重新建置。
- 25.12 沒有
opkg;24.10 沒有apk; - 不要為了執行某個指令而安裝套件管理員;請先辨識韌體/來源。
套件已安裝,但 LuCI 沒有顯示
Section titled “套件已安裝,但 LuCI 沒有顯示”- 只安裝了核心套件,缺少
luci-app-*套件; - 缺少語言套件;
- 瀏覽器快取/重新整理;
- 套件版本與 LuCI 不符。
# apkcp /etc/apk/repositories.d/distfeeds.list.bak.YYYY-MM-DD /etc/apk/repositories.d/distfeeds.listapk update
# opkgcp /etc/opkg/distfeeds.conf.bak.YYYY-MM-DD /etc/opkg/distfeeds.confopkg update若更換鏡像站後更新失效,請先還原官方來源,驗證 DNS/時間/憑證,再重試鏡像站。不要在許多鏡像站之間跳來跳去。
E2 實驗室測試(2026-10-20)
Section titled “E2 實驗室測試(2026-10-20)”- 環境:OpenWrt 25.12.6 x86 VM 200;
apk;官方來源與 TUNA 鏡像站。 - 官方
apk update:OK: 11220 distinct packages available;apk search -x sqm-scripts找到sqm-scripts-1.7.2-r1。 - 切換到 TUNA:
apk update同樣是 11220;apk add sqm-scripts安裝了1.7.2-r1。 - 還原官方來源:
apk update正常;最終來源已回到downloads.openwrt.org。 - 未測試:24.10
opkg、簽章錯誤、混用/ABI 不符、鏡像站索引損毀。 - 測試配方:
tests/recipes/package-sources.md。
E2 狀態與來源
Section titled “E2 狀態與來源”- 這是 E2 部分驗證:已測試 25.12
apk的官方/TUNA/安裝/還原路徑;opkg與錯誤套件來源的分支仍屬文件說明。 - 鏡像站路徑會隨版本變動;發布前請在目標版本/target/架構上重新執行
update/search。 - 不要混用官方、ImmortalWrt 或 iStoreOS 套件來源;ABI/核心/簽章都可能不符。