Skip to content

套件來源與中國鏡像站:分開處理 apk 與 opkg

首先要知道:apk 與 opkg 的差異取決於韌體版本,而不是「哪個鏡像站比較快」。25.12 使用 apk;24.10 使用 opkg。套件格式、套件來源路徑與驗證方式都不同,兩者不能互換。

  • 知道韌體使用 apk 還是 opkg,以及它的套件來源檔位於何處。
  • 對齊版本、target、架構與 kmods 核心雜湊值。
  • 知道中國鏡像站取代的是 URL 的哪一部分,以及哪些路徑必須保持一致。
  • 了解為什麼「更換鏡像站後套件裝不起來」,以及如何回復。
  • 了解為什麼 apk upgrade/opkg upgrade 不是韌體升級。
路由器 Shell讀取版本、target 與架構
Terminal window
ubus call system board
cat /etc/openwrt_release
uname -m
cat /etc/apk/arch 2>/dev/null
opkg print-architecture 2>/dev/null

關鍵欄位:release.version、release.target、DISTRIB_ARCH、release.revision。它們必須與鏡像站路徑相符。

預期你能寫出完整的版本/target/架構組合。

路由器 Shell檢查目前的套件來源檔

OpenWrt 25.12(apk):

Terminal window
cat /etc/apk/repositories.d/distfeeds.list

OpenWrt 24.10(opkg):

Terminal window
cat /etc/opkg/distfeeds.conf
cat /etc/opkg/customfeeds.conf

編輯之前先備份:

Terminal window
cp /etc/apk/repositories.d/distfeeds.list /etc/apk/repositories.d/distfeeds.list.bak.$(date +%F) 2>/dev/null || true
cp /etc/opkg/distfeeds.conf /etc/opkg/distfeeds.conf.bak.$(date +%F) 2>/dev/null || true

預期你知道每個來源指向哪裡,以及它是 apk 還是 opkg。

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:核心模組;雜湊值必須與正在執行的核心相符。

指令:

Terminal window
apk update
apk search <name>
apk add <name>
apk info -e <name>

請勿使用 opkg,也不要把 24.10 的 .ipk 改名為 .apk。

OpenWrt 24.10 使用 opkg;索引為 Packages.gz,套件為 .ipk:

Terminal window
opkg update
opkg list | grep <name>
opkg install <name>
opkg list-installed | grep <name>

請勿使用 apk,也不要把 25.12 的 .apk 交給 opkg。

以 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。

路由器 Shell編輯前先驗證鏡像站路徑
Terminal window
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 相符。

路由器 Shell只更新索引,不要升級系統
Terminal window
apk update
# or
opkg 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 目錄。
  • 索引損毀或屬於不同版本;
  • 系統時間/憑證錯誤;
  • 混入了其他套件來源;
  • 不要依賴 --allow-untrusted;請修正套件來源/驗證。
  • kmods 核心雜湊值不符;
  • 套件是為其他 target/架構建置的;
  • 混用官方與 ImmortalWrt/iStoreOS 套件來源;
  • 你需要相同的來源、版本與架構,或自行重新建置。
  • 25.12 沒有 opkg;24.10 沒有 apk;
  • 不要為了執行某個指令而安裝套件管理員;請先辨識韌體/來源。
  • 只安裝了核心套件,缺少 luci-app-* 套件;
  • 缺少語言套件;
  • 瀏覽器快取/重新整理;
  • 套件版本與 LuCI 不符。
Terminal window
# apk
cp /etc/apk/repositories.d/distfeeds.list.bak.YYYY-MM-DD /etc/apk/repositories.d/distfeeds.list
apk update
# opkg
cp /etc/opkg/distfeeds.conf.bak.YYYY-MM-DD /etc/opkg/distfeeds.conf
opkg update

若更換鏡像站後更新失效,請先還原官方來源,驗證 DNS/時間/憑證,再重試鏡像站。不要在許多鏡像站之間跳來跳去。

  • 環境: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 部分驗證:已測試 25.12 apk 的官方/TUNA/安裝/還原路徑;opkg 與錯誤套件來源的分支仍屬文件說明。
  • 鏡像站路徑會隨版本變動;發布前請在目標版本/target/架構上重新執行 update/search。
  • 不要混用官方、ImmortalWrt 或 iStoreOS 套件來源;ABI/核心/簽章都可能不符。

來源

Router.Homes

獨立的 OpenWrt 實作筆記。每頁都寫明韌體、裝置、套件管理員與復原途徑。

圖示:Solar by 480 Design, CC BY 4.0