Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

fresh install leaves uhttpd.main with no listeners — LuCI unbound, procd crash-loops the default uhttpd instance

Open
#849 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

@Amperstrand is already working on this.

Since Oct 12, 2026.

  • #899 by @Amperstrand — open

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
linux, shell

Research direction

Start with the uhttpd surgery in 99-tollgate-setup and the mode-aware writer's main-section handling, to find which step should write the board-mode pair onto uhttpd.main and why it does not. Reproduce with uci show uhttpd | grep listen and logread | grep -c "No sockets bound" on a fresh install. Done means every shipped uhttpd section has a listener, confirmed by a tests/packaging/ assertion, with no crash loop.

Written by the indexing model from the issue text.

Description

Summary

On a fresh stock OpenWrt 25.12.5 x86-64 VM, installing tollgate-wrt (built from main @ b6f7aa7) leaves the uhttpd main section with no listen_http/listen_https options at all. The uhttpd init still starts it as the default procd instance, which exits with No sockets bound, unable to continue and enters a crash loop. Net effect: LuCI is unreachable — nothing listens on the board-mode secondary pair (:8090/:8443) that the entry-port decision assigns to uhttpd.main.

The three TollGate-created instances all serve correctly; this is solely the leftover bare main section.

Where seen

The #838 post-merge verification lane (QEMU/KVM on ai-legion-small, stock OpenWrt 25.12.5 x86-64 generic-ext4-combined, pristine snapshot boot, serial-console driven). Artifact: tollgate-wrt-0.6.0_rc1-r0.apk from scripts/build-sdk-package.sh (x86-64-25.12.0 apk lane, portal bundle staged from the pin), sha256 fa299cbdbf0e9e09423d73d716f11d2bbfcb71429f8ed0b79d2eab546c3fc09c, hash-verified on-guest. Observed identically on two independent fresh installs, and it persists across reboot.

Evidence

uci show uhttpd | grep -E "listen|home" after install (and after reboot):

uhttpd.main.home='/www'                                  ← no listen options
uhttpd.portal.listen_http='0.0.0.0:2051' '[::]:2051'
uhttpd.portal.home='/etc/tollgate/tollgate-captive-portal-site'
uhttpd.trusted.listen_http='0.0.0.0:80' '[::]:80'
uhttpd.trusted.home='/etc/tollgate/router-home'
uhttpd.admin.listen_http='0.0.0.0:8080' '[::]:8080'
uhttpd.admin.listen_https='0.0.0.0:443' '[::]:443'
uhttpd.admin.home='/www/tollgate'

netstat -tln — :8080, :443, :2051, :80 listening; no :8090/:8443. Three uhttpd processes up (portal, trusted, admin — the admin one with the provisioned hostname in argv).

logread:

daemon.err uhttpd[N]: Error: No sockets bound, unable to continue      (every ~5 s)
daemon.info procd: Instance uhttpd::instance1 in a crash loop 6 crashes, 0 seconds since last crash

Analysis

The stock image's uhttpd.main listeners (:80/:443) were redistributed by the setup (:80 → the trusted router-home instance, the entry pair → uhttpd.admin in board mode) — but nothing wrote main's board-mode secondary pair (:8090/:8443), leaving the section bare. The uhttpd init's default instance then has nothing to bind and crash-loops. Candidate owners of that write: 99-tollgate-setup's uhttpd surgery, or the mode-aware writer's main-section half.

Caveats and scope

  • VM environment: no wifi radios, no br-private (the install notes "br-private did not appear within 15 s — expected on devices without a private network configured"). A radio/bridge-dependent conditional could explain the missing write; real-router confirmation is pending — a desk unit can check with uci show uhttpd | grep listen and logread | grep -c "No sockets bound".
  • Not #838's blast radius: in the same runs the admin gate/order behaved exactly as designed (credential created before the gate; uhttpd.admin listeners intact; board serving).

Suggested fix shape

Either write the board-mode secondary pair onto uhttpd.main (LuCI reachable per the entry-port decision), or disable/omit the bare default instance so procd does not crash-loop it. A tests/packaging/ assertion that every shipped uhttpd section carries at least one listener would fence the class.

Dominant language
Go
Stars
12
Forks
14
Avg merge
1d 5h
Merged PRs (30d)
239

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from OpenTollGate/tollgate-module-basic-go

All issues in OpenTollGate/tollgate-module-basic-go

Similar issues

More Go issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.