Add dynamic DNS and show the running kernel on the overview
router.ddns keeps provider records on the uplink's addresses with ddclient, run by a timer and by a watcher that starts it when an address changes. The Dynamic DNS page edits it; the secret is a private file on the router. The overview shows the running kernel and says when the current system boots a different one. PLAN.md records why the A/B image approach was not pursued. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AeFqV9dZrK6nipHkPfyM4F
This commit is contained in:
@@ -31,10 +31,11 @@ func (s System) leasesDNSDir() string {
|
||||
return "/run/router-leases-dns"
|
||||
}
|
||||
|
||||
func (s System) settingsPath() string { return filepath.Join(s.ConfigDir, "settings.json") }
|
||||
func (s System) confirmedPath() string { return filepath.Join(s.StateDir, "settings.confirmed.json") }
|
||||
func (s System) passwordPath() string { return filepath.Join(s.StateDir, "webui-password") }
|
||||
func (s System) pppoePath() string { return filepath.Join(s.StateDir, "pppoe-password") }
|
||||
func (s System) settingsPath() string { return filepath.Join(s.ConfigDir, "settings.json") }
|
||||
func (s System) confirmedPath() string { return filepath.Join(s.StateDir, "settings.confirmed.json") }
|
||||
func (s System) passwordPath() string { return filepath.Join(s.StateDir, "webui-password") }
|
||||
func (s System) pppoePath() string { return filepath.Join(s.StateDir, "pppoe-password") }
|
||||
func (s System) ddnsSecretPath() string { return filepath.Join(s.StateDir, "ddns-secret") }
|
||||
|
||||
func command(name string, args ...string) (string, error) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
|
||||
|
||||
Reference in New Issue
Block a user