say plainly what the rest of the wiki is for
The home page described the other pages as covering everything after first boot,
which reads as though they are the next thing to work through. They are not:
they are gotchas and technical detail for when something is not straightforward.
Saying so sends people to the setup guide and leaves the wiki as the place to
come back to.
975a292
Point the home page at the setup guide instead of listing images
The board table hardcoded twenty seven download urls at a fixed version, so it
was serving 26.06.01 while 26.07.01 had been current for weeks, and nothing here
updates it -- it drifts on every release and has done so quietly for years.
The setup guide on syncloud.org reads the release list from github, so it cannot
go stale, and it walks through writing the image and activating the device
rather than handing over a file and wishing you luck. Every board that was in
the table is still offered there.
What is left here is what a wiki home page is for: what the project is, where to
start, what the other pages cover, and where to ask.
d8cc6cf
porting guide: lessons from the openvpn rewrite
All six cost a CI cycle or a production outage:
- OIDC discovery must not be fatal. Exiting on failure crash-loops the backend
and serves 502 for the whole app, not just sign-in. Retry in the background,
serve regardless, and assert /auth/login returns 302 - once the crash loop is
gone a broken OIDC is otherwise invisible.
- Reach Authelia over GetAuthLocalSocket(), because plenty of devices cannot
resolve their own subdomains. The X-Forwarded-* headers are mandatory: without
them Authelia advertises http://localhost as the issuer and discovery fails
anyway.
- Go is not exempt from the platform CA. It reads the OS trust store, but the
platform CA is never installed into it.
- refresh.hold does not stop an auto-refresh already running, so the documented
entrypoint hold is necessary but not sufficient; abort it, do not wait.
- Pin @playwright/test to the CI image version, and shoot screenshots
explicitly since only-on-failure leaves a green run with nothing to show.
- Quote device commands so the SNAP env prefix stays legal and $1 is not eaten
by the local shell; expect slow first boots on armv7.
Plus a note that 'previously released' becomes your own app once you publish,
which breaks fixtures reaching into the predecessor's layout.
7356378
nextcloud: one full command per version, nothing to assemble
The revisions were in a table, which left the reader to paste a number
into a command line - the exact step where a typo silently sends a
device to the wrong major. Each version now carries its own complete
line, matching how the old ladder read before it went stale.
Also says how to check the current version first, and how to tell an
upgrade has finished rather than starting the next one on top of a
running migration.
ad9bc54
nextcloud: replace the dead sideload ladder with snap refresh --revision
Every wget line in 'Cannot upgrade from UI' 404s. The revisions it
listed - 19102646, 588, 621, 676, 706, 747, 775, 815, covering v15 to
v29 - are all gone from the store, which keeps only the most recent
ones. The ladder also stopped five majors short of where offline
devices actually sit, with nothing for 30 to 34.
Sideloading is no longer the way either. The store now serves the
revision snapd asks for, so stepping through majors is a plain
refresh that stays asserted and keeps auto-updating, instead of wget
plus snap install --devmode.
Lists the revisions that exist today - 968 for 32, 996 for 33, 1011
for 34 - points at repair-status for checking an upgrade finished, and
says plainly that a device older than the oldest retained revision has
no path left through the store.
58d7a55
porting guide: no version step, packaging call matches current mattermost
2268fdd
porting guide: hooks-as-binaries, OIDC slice signature, e2e layouts, CI retries
The RegisterOIDCClient snippet no longer compiled — golib moved the redirect
argument to a slice. The hooks section read as if install/configure/pre-refresh/
post-refresh were cobra subcommands of bin/cli; every app builds them as separate
main packages into meta/hooks/ because snapd dispatches by filename.
Adds the test/e2e/run.sh layout used by apps with no web/ SPA, the five-step
upgrade e2e chain, wait-app.sh, apt/download retry wrappers, and push-only
triggers. Refreshes the store-publisher and platform pins.
Trimmed the example lists to one app per pattern throughout.
d72d409
Correct snap.yaml location: it lives at meta/snap.yaml (all apps + store-publisher default), not repo root
67640e8
porting guide: drop legacy arch-named image migration notes
bd54ee3
porting guide: multi-arch platform images from 26.07.01
Platform/bootstrap images are now multi-arch manifest lists; app
pipelines reference syncloud/platform-<distro>:<version> without the
arch. Bump example to 26.07.01, document the migration (old versions
stay arch-in-repo-name, bump + name change land together).
a6ab7af
CI/testing: drop version step, per-distro binary+device tests, upstream-UI Playwright via SSO
c0ef0ad
Logging: bundled nginx/php-fpm must use syslog, not /dev/stdout (ENXIO crash-loop under systemd)
cc45f96
Testing: use syncloud-lib>=366 without selenium (Playwright-only UI tests)
d5118a9
porting guide: add License section (GPL-3.0, not MIT)
369e82b
Home: bump image download links to 26.06.01
ccf7249
App-porting-guide: drop the runtime-bootstrap bullet (too app-specific for now)
660ed9f
App-porting-guide: add patterns learned from actual-budget
- Non-Go runtimes: bundle the whole runtime + loader (cp /usr /lib, launch via
bundled ld-linux) for no host-OS lib dependency; fixes buster + arm/v7.
- Wrapping an upstream's own OIDC: register client + template its config + runtime
bootstrap from configure; Authelia RFC 9207 iss gotcha -> oauth2 path.
- Trust the platform CA for runtimes that ignore the OS store (NODE_EXTRA_CA_CERTS
/ REQUESTS_CA_BUNDLE -> syncloud.ca.crt).
- Hold snapd auto-refresh via the platform-service entrypoint (photoprism).
- App icon: meta/gui/icon.png 128x128.
- Note: TCP-only upstreams may accept a unix socket path (Node listen(path)).
19e9956
App-porting-guide: document syncloud/store-publisher publish step; mark syncloud-release deployer + AWS keys obsolete; add repo secrets table
2a84991
Photoprism: drop options.yml IndexSchedule edit; it ships in the default config
b1b2590
Report-problems: lead with web UI Send logs; modernise SSH command list; fenced code blocks; PuTTY typo
cd9be7f
Add Photoprism page: index Nextcloud photos via symlink, auto-index, replacing Recognize
765a1ad
External access: fix DNS rebind protection section
Replace the inaccurate one-liner about browser caching with an
accurate description of router-level DNS rebind protection. Add
FRITZ!Box-specific steps (the most common consumer router that
ships with rebind protection on by default) and a public-resolver
workaround for users who can not change router settings.
7199e72
App porting guide: upstream version usually lives in .drone.jsonnet; show jsonnet vs build.sh examples and point users at the forum first if neither matches
dc6ee46
App porting guide: expand upstream-version-bump section, explain what upstream means and how GitHub users can contribute version bumps
c2e644d
App porting guide: link to GitHub for drone.jsonnet references, not local paths
3b567a7
App porting guide: drop buster pin pattern; rootfs now publishes refreshed buster docker per release
23a056a
Bump image links 26.04.7 -> 26.04.9; add legacy HC4 image entry
Older non-LCD HC4 boards now have a dedicated legacy image (older kernel,
same rootfs) shipped in current releases, replacing the 25.12.1 fallback.
HC4 page no longer hardcodes distro/kernel versions or a specific image
version, so future migrations only require updating Home.md.
37b9cef
Home: bump image links 26.03.2 -> 26.04.7
60afa89
Odroid-HC4: point older-board users at 25.12.1 (last Buster/5.11 image) as Petitboot fallback
ce378cf