mirror of
https://github.com/caiwx86/small-packages.git
synced 2026-10-27 10:52:51 +08:00
281 lines
14 KiB
YAML
281 lines
14 KiB
YAML
# Dev routers for this theme, via owlab (https://github.com/owfeed/owlab).
|
|
#
|
|
# owlab up build and start every router
|
|
# owlab sync --watch rebuild the CSS and push it on every edit
|
|
# owlab open owrt2512 open LuCI in a browser
|
|
# owlab doctor what this machine supports
|
|
#
|
|
# Four routers rather than one, because the three axes that change how this theme renders are the
|
|
# package manager (apk on 25.12, opkg on 24.10), the LuCI feed (upstream vs a fork's patched one)
|
|
# and the release. Only all four boxes cover every pairing.
|
|
|
|
version: 1
|
|
|
|
project:
|
|
name: luci-theme-footstrap
|
|
theme: footstrap
|
|
|
|
# The package lives in a subdirectory, so the install mapping is stated rather than defaulted.
|
|
install:
|
|
luci-theme-footstrap/htdocs: /www
|
|
luci-theme-footstrap/ucode: /usr/share/ucode/luci
|
|
luci-theme-footstrap/root: /
|
|
|
|
# cascade.css is concatenated from styles/ and is not in the tree. Without this a sync copies
|
|
# everything except the file LuCI asks for, and the router serves a 404 for its own stylesheet.
|
|
build: ./luci-theme-footstrap/build-css.sh luci-theme-footstrap/htdocs/luci-static/footstrap/cascade.css --dev
|
|
|
|
# Runs on the router after every sync: the half of an install that copying files does not cover.
|
|
# The package's own uci-defaults registers the theme, and owlab's `theme:` above then selects it.
|
|
#
|
|
# Registration is written out rather than sourced from root/etc/uci-defaults/30_luci-theme-footstrap,
|
|
# because sync deliberately never overwrites /etc/uci-defaults — that directory is router state.
|
|
post_sync: |
|
|
uci -q set luci.themes.Footstrap=/luci-static/footstrap
|
|
uci -q commit luci
|
|
# Every asset is served as `?v=<PKG_VERSION>-<pkgs_update_time>`, the mtime of the package
|
|
# database, which a sync never touches — so the browser keeps the modules it has and the page
|
|
# runs a mixture of old and new. Both paths, because which one exists depends on the release
|
|
# (docs/development.md, "Caches while iterating").
|
|
for db in /lib/apk/db/installed /usr/lib/opkg/status; do [ -f "$db" ] && touch "$db"; done
|
|
rm -rf /www/luci-static/footstrap-top /usr/share/ucode/luci/template/themes/footstrap-top
|
|
|
|
defaults:
|
|
fidelity: basic
|
|
arch: auto
|
|
# Everything, including the seeded wireless config: this theme has to style the wireless pages
|
|
# too, and they render from UCI with no radios present.
|
|
fixtures: [all]
|
|
|
|
# Added ON TOP of owlab's stock set, which is already what a shipping OpenWrt router has. Every
|
|
# entry is prefixed with +, so this list adds rather than replacing — an unprefixed list would
|
|
# define the router outright and drop everything owlab installs by default.
|
|
#
|
|
# Entries the stock set also contains are kept rather than trimmed: this file is the theme's test
|
|
# surface, and each name here is something the theme is checked against.
|
|
#
|
|
# It is long on purpose. A stock router renders a handful of menus, and the sections, tabs, tables
|
|
# and widgets that need styling live in the apps.
|
|
#
|
|
# curl is deliberately absent: it is not in OpenWrt's default set, and the uclient-fetch fallback
|
|
# exists precisely because of that. Installing it here would hide that bug class on the dev box.
|
|
packages:
|
|
- +luci
|
|
- +luci-app-firewall
|
|
- +luci-app-package-manager
|
|
- +luci-app-opkg
|
|
- +luci-app-banip
|
|
- +luci-app-adblock
|
|
- +luci-app-ddns
|
|
- +luci-app-upnp
|
|
- +luci-app-statistics
|
|
- +luci-app-nlbwmon
|
|
- +luci-app-sqm
|
|
- +luci-app-vnstat2
|
|
- +luci-app-wol
|
|
- +luci-app-watchcat
|
|
- +luci-app-filemanager
|
|
- +luci-app-ttyd
|
|
- +luci-app-https-dns-proxy
|
|
- +luci-app-mwan3
|
|
- +luci-app-acme
|
|
- +luci-app-samba4
|
|
- +luci-app-openvpn
|
|
- +luci-proto-wireguard
|
|
- +luci-proto-openconnect
|
|
- +luci-mod-dashboard
|
|
- +luci-app-attendedsysupgrade
|
|
- +wpad-basic-mbedtls
|
|
- +wifi-scripts
|
|
- +iw
|
|
- +iwinfo
|
|
- +hostapd-utils
|
|
# dropbear ships no sftp-server and OpenSSH 9+ scp speaks SFTP by default, so without this every
|
|
# scp against the box fails. The one package here that is not about fidelity.
|
|
- +openssh-sftp-server
|
|
|
|
# The Russian catalogues, one per app above, pinned here after the first RU sweep found three
|
|
# overflow faults English never showed: RU strings run longer, and this theme's gates rendered
|
|
# English only until 2026-09-06, so a caption that clips at a Cyrillic length went unmeasured.
|
|
# The sweep installed these by hand; without a pin here the next `owlab up` would wipe them and
|
|
# the next sweep would start over. One entry per luci-app-* above that ships a translation —
|
|
# `luci-i18n-opkg-ru`, `-wireguard-ru` and `-openconnect-ru` are deliberately ABSENT: neither
|
|
# feed (25.12/apk, 24.10/opkg) publishes them, and `owlab up` fails resolving a name neither has.
|
|
- +luci-i18n-base-ru
|
|
- +luci-i18n-firewall-ru
|
|
- +luci-i18n-package-manager-ru
|
|
- +luci-i18n-banip-ru
|
|
- +luci-i18n-adblock-ru
|
|
- +luci-i18n-ddns-ru
|
|
- +luci-i18n-upnp-ru
|
|
- +luci-i18n-statistics-ru
|
|
- +luci-i18n-nlbwmon-ru
|
|
- +luci-i18n-sqm-ru
|
|
- +luci-i18n-vnstat2-ru
|
|
- +luci-i18n-wol-ru
|
|
- +luci-i18n-watchcat-ru
|
|
- +luci-i18n-filemanager-ru
|
|
- +luci-i18n-ttyd-ru
|
|
- +luci-i18n-https-dns-proxy-ru
|
|
- +luci-i18n-mwan3-ru
|
|
- +luci-i18n-acme-ru
|
|
- +luci-i18n-samba4-ru
|
|
- +luci-i18n-openvpn-ru
|
|
- +luci-i18n-dashboard-ru
|
|
- +luci-i18n-attendedsysupgrade-ru
|
|
|
|
routers:
|
|
- id: owrt2512
|
|
# 25.12.4, NOT .5: the stand builds from openwrt/rootfs:x86_64-<release> and that tag has to
|
|
# EXIST in the registry — 25.12.5 publishes none, so `owlab up` cannot resolve it. CI's build.yml
|
|
# pins the same number for the same reason and the two must not drift. Check
|
|
# `docker manifest inspect openwrt/rootfs:x86_64-<release>` before bumping either.
|
|
release: "25.12.4"
|
|
ports: { http: 8025, ssh: 2225 }
|
|
# Third-party apps whose stylesheets this theme has to share a document with. They are the
|
|
# hardest case the theme handles, and no text file can reason about them: justclash ships no
|
|
# .css at all — every rule is built from its view JS at runtime.
|
|
#
|
|
# Unsigned dev fixtures: pinned to exact releases and installed without signature verification.
|
|
# Nothing here ships.
|
|
#
|
|
# Anchored here and aliased onto the other three RELEASE routers, not `defaults:` — owlab's
|
|
# `extra_packages` merge is additive only (append(default, router), no subtraction syntax,
|
|
# internal/config/config.go), so a router-scoped list has to start from a router, not from a
|
|
# default every router inherits. `owrtsnap` below carries no alias: these three are pinned
|
|
# builds against release branches (openclash/ssclash need kmod-tun, which resolves through a
|
|
# kmods index keyed to the box's exact kernel git hash) and the snapshot box's baked kernel is
|
|
# never the one downloads.openwrt.org/snapshots is currently publishing kmods for — confirmed
|
|
# 2026-09-07: `apk add` 404s the kmods packages.adb for the running 6.18.33 hash and both apps
|
|
# fail to resolve `kmod-tun`, while justclash (no kernel module) installs cleanly on the same
|
|
# box. `owlab up` reported that partial result as its own exit 1 (by design — see
|
|
# `reportMissingExtras` in owlab's own source), which the fix is to stop asking for.
|
|
extra_packages: &third_party_apps
|
|
- name: luci-app-openclash
|
|
apk: https://github.com/vernesong/OpenClash/releases/download/v0.47.116/luci-app-openclash-0.47.116.apk
|
|
ipk: https://github.com/vernesong/OpenClash/releases/download/v0.47.116/luci-app-openclash_0.47.116_all.ipk
|
|
- name: luci-app-justclash
|
|
apk: https://github.com/SaltyMonkey/justclash/releases/download/v0.73.0/luci-app-justclash-0.73.0-r1.apk
|
|
ipk: https://github.com/SaltyMonkey/justclash/releases/download/v0.73.0/luci-app-justclash-0.73.0-r1-all.ipk
|
|
# ssclash embeds the Ace editor, which inserts its stylesheets as the FIRST child of <head>,
|
|
# and lazily, adding more on first hover. That is the one adversary that can invert the
|
|
# cascade layer order (docs/css.md), and neither of the two above can produce it: a sheet
|
|
# that lands ahead of cascade.css is a different attack on the chrome from one that outranks
|
|
# it.
|
|
- name: luci-app-ssclash
|
|
apk: https://github.com/zerolabnet/ssclash/releases/download/v4.7.0/luci-app-ssclash-4.7.0-r1.apk
|
|
ipk: https://github.com/zerolabnet/ssclash/releases/download/v4.7.0/luci-app-ssclash_4.7.0-r1_all.ipk
|
|
|
|
- id: owrt2410
|
|
release: "24.10.8"
|
|
ports: { http: 8024, ssh: 2224 }
|
|
extra_packages: *third_party_apps
|
|
|
|
- id: imm2512
|
|
distro: immortalwrt
|
|
release: "25.12.1"
|
|
ports: { http: 8026, ssh: 2226 }
|
|
extra_packages: *third_party_apps
|
|
|
|
- id: imm2410
|
|
distro: immortalwrt
|
|
release: "24.10.6"
|
|
ports: { http: 8027, ssh: 2227 }
|
|
extra_packages: *third_party_apps
|
|
|
|
# A SNAPSHOT box, because the installer has a path only it takes: `SNAPSHOT` parses to no feed
|
|
# branch, so the script asks the feed for the newest one its package manager can read, and
|
|
# everything about that path is unreachable on a release router. It is also the userland the theme
|
|
# is least tested against, since it tracks luci-base's master rather than a release branch.
|
|
#
|
|
# No `extra_packages` here, on purpose: see the comment on owrt2512's `&third_party_apps` for the
|
|
# kmod-tun / kmods-index mismatch that makes openclash and ssclash permanently unresolvable on
|
|
# this box. The theme still installs and every other gate this leg runs still runs.
|
|
#
|
|
# THE ORDINARY `packages:` LIST ABOVE CAN ALSO INSTALL SHORT HERE, and unlike the kmod-tun case
|
|
# this is not permanent and carries no fix to pin against: `feeds/luci` and `feeds/packages` are
|
|
# two git repos built into the snapshot index independently, and a `luci-app-*`/binary pair can
|
|
# briefly disagree while one side has moved and the other has not yet mirrored. Task 0177 caught
|
|
# this from a scroll-anchor finding (owrtsnap @1440 side compact, Overview showing 12
|
|
# `.cbi-section` against owrt2512's 13) and named `luci-app-https-dns-proxy` as the absentee. By
|
|
# task 0178 that package installed clean on every stand and the absentee was `luci-app-mwan3`
|
|
# instead — no `90_mwan3.js`, and `/var/log/apk.log` on the same boot showed `ERROR: unable to
|
|
# select packages` for `mwan3`, `nlbwmon`, `openvpn` and `sqm` together. Two different names in
|
|
# two sessions is the finding: THE SET DRIFTS, so neither name belongs in this comment as if it
|
|
# were fixed. To check what is missing TODAY: `apk info -e <pkg>` for a `+luci-app-*` above
|
|
# against `owrtsnap`, or `grep 'unable to select' /var/log/apk.log` on that box, or just compare
|
|
# the Overview's `.cbi-section` count (or DOM count) against a release stand before treating a
|
|
# snapshot-only difference as a theme finding. Not pinned: `packages:` here has no version syntax,
|
|
# and a hard pin would go stale as the snapshot feed prunes old builds (unlike a release branch,
|
|
# which keeps them for the branch's life).
|
|
- id: owrtsnap
|
|
release: "snapshot"
|
|
# ssh 2228, NOT 2222: 2222 is the port a developer machine's own sshd usually listens on, and
|
|
# docker refuses the bind with "address already in use" — which is why this stand had never come
|
|
# up, and why every gate that claimed the snapshot line was measuring two routers instead of
|
|
# three. docs/development.md, "The stand's own traps".
|
|
ports: { http: 8022, ssh: 2228 }
|
|
|
|
# ---- second instances of the three OpenWrt lines, for parallel measurement ----
|
|
#
|
|
# Not more coverage — the SAME three lines a second time. Added 2026-09-09, when a day of
|
|
# concurrent anchor work kept colliding on five stands: one agent held owrt2512/owrt2410/owrtsnap
|
|
# for a full three-engine sweep, a second was told to use the ImmortalWrt boxes because nothing
|
|
# else was free, and a measurement about the theme was very nearly made on the wrong distro. The
|
|
# maintainer's rule is that a behaviour claim needs 24.10, 25.12 and snapshot; imm* answers a
|
|
# question about the brand instead. So the answer to contention is more OpenWrt, never a
|
|
# substitute.
|
|
#
|
|
# Same releases and the same third-party fixtures as their originals, so a finding on `-b`
|
|
# carries exactly as much weight as one on the original. Ports: http 8045/8034/8032, ssh
|
|
# 2245/2234/2232 — each an original's port plus 20 (2512b) or 10 (2410b, snapb), clear of 2222 for
|
|
# the reason owrtsnap's comment gives.
|
|
- id: owrt2512b
|
|
release: "25.12.4"
|
|
ports: { http: 8045, ssh: 2245 }
|
|
extra_packages: *third_party_apps
|
|
- id: owrt2410b
|
|
release: "24.10.8"
|
|
ports: { http: 8034, ssh: 2234 }
|
|
extra_packages: *third_party_apps
|
|
- id: owrtsnapb
|
|
release: "snapshot"
|
|
ports: { http: 8032, ssh: 2232 }
|
|
|
|
# ---- third and fourth instances, one set per browser engine ----
|
|
#
|
|
# Added 2026-09-12. `-b` answered contention between two people; this answers contention inside
|
|
# ONE sweep. `tools/scroll-anchor.mjs --full` is 276 runs per engine, and running the three
|
|
# engines in one process against one set of stands takes chromium's zygote down about two minutes
|
|
# in (docs/development.md, "The stand's own traps") — so the sweep was being run one engine at a
|
|
# time, ~25 min each, three quarters of a 20-core machine idle throughout. Three sets means three
|
|
# separate node processes, each with its own engine AND its own routers: no shared browser server
|
|
# to lose, and no two contexts hitting one uhttpd.
|
|
#
|
|
# Same releases and the same third-party fixtures as their originals, so a finding on `-c` or
|
|
# `-d` carries exactly as much weight as one on the original. Ports: `-c` is `-b` plus 10
|
|
# (8055/8044/8042, ssh 2255/2244/2242), `-d` is `-c` plus 10 (8065/8054/8052, ssh 2265/2254/2252),
|
|
# all clear of 2222.
|
|
- id: owrt2512c
|
|
release: "25.12.4"
|
|
ports: { http: 8055, ssh: 2255 }
|
|
extra_packages: *third_party_apps
|
|
- id: owrt2410c
|
|
release: "24.10.8"
|
|
ports: { http: 8044, ssh: 2244 }
|
|
extra_packages: *third_party_apps
|
|
- id: owrtsnapc
|
|
release: "snapshot"
|
|
ports: { http: 8042, ssh: 2242 }
|
|
- id: owrt2512d
|
|
release: "25.12.4"
|
|
ports: { http: 8065, ssh: 2265 }
|
|
extra_packages: *third_party_apps
|
|
- id: owrt2410d
|
|
release: "24.10.8"
|
|
ports: { http: 8054, ssh: 2254 }
|
|
extra_packages: *third_party_apps
|
|
- id: owrtsnapd
|
|
release: "snapshot"
|
|
ports: { http: 8052, ssh: 2252 }
|