LinkBox Web Monitor + Admin — CHANGELOG ======================================= Authors (callsigns): Paul Aidukas KN2R Logan Crook K8LRC This file is the full project history for operators and co-maintainers. Dates and times only (no version numbers). Each shipped file also has Last-Updated / Created / Authors at the top. In the history below, work is tagged with the callsign who did it (KN2R / K8LRC). ============================================================================== WHAT THIS PACKAGE IS (read first) ============================================================================== A web package for TheLinkBox (TLB) operators. It does NOT replace IRLP, EchoLink, or TLB core config. It adds: 1) PUBLIC monitor (index.php or exp.php) - Read-only status of the conference / reflector - Live connection TABLE refreshes about every 2 seconds (not a full-page reload — lower CPU and bandwidth) - No login on the public page 2) ADMIN tool (tlb-admin/) - Connect, Mute, Bump, Disconnect, Ban, Restart TLB, log viewers - Protected by Apache Basic Auth only (.htaccess + .htpasswd) - No PHP session login of its own 3) Shared PHP helpers (tlb-common.inc) - tlbcmd wrappers, live panel render, log tails, restart helper 4) Optional EventScripts (pick ONE in tlb.conf) - tlbevent-conference.sh = WITH conference policy - tlbevent-nopolicy.sh = NO policy (preferred name) - tlbevent.sh = NO policy (legacy name) - All: linkit + clean IRLP stn#### .bump via Speak Freely TCP 15425 - Updates do NOT overwrite these — operator-managed 5) Restart scripts for the tlb-admin "Restart TLB" button - restart-tlb-conference (WITH policy) - restart-tlb-nopolicy (NO policy — preferred name) - restart-tlb (NO policy — legacy name; Paul KN2R) - Requires /etc/sudoers.d/tlb-restart-web so www-data can run them - Updates do NOT overwrite these — operator-managed Intended for: - IRLP experimental reflectors (exp####) - EchoLink conferences (*CONF*, *OHIO*, etc.) - EchoLink -L (Link) / -R (Repeater) TLB stations - Mixed bridges carrying IRLP and/or EchoLink NOT intended for: - Plain IRLP node-only systems with no TLB reflector/conference Beta package URL (testing): http://linkbox.k8lrc.crabdance.com/tlb-2+/ Public release package URL (stable): http://linkbox.k8lrc.crabdance.com/tlb-2.0+/ Docs to read before install: README-FIRST.txt SETUP-INSTRUCTIONS.txt This CHANGELOG.txt ============================================================================== WHO DID WHAT (by callsign) ============================================================================== KN2R — Paul Aidukas - Original LinkBox / new exp.php public monitor (started 2026-06-02) - tlb-admin Manager layout and UX direction - restart-tlb clean restart script (final form emailed 2026-07-19) - EventScript / conference operations experience and guidance - Asked for Last-Updated date/time stamps on every shipped file K8LRC — Logan Crook - Packaging into downloadable install/update scripts - Public monitor vs tlb-admin split, Apache auth wiring - tlb-common.inc shared code - Installer prompts (site role, networks, EventScript, restart choice) - Beta vs release package trees - Documentation (README-FIRST, SETUP-INSTRUCTIONS, CHANGELOG) - EventScript rename/split (WITH policy vs NO policy) for packaging ============================================================================== HISTORY BY DATE / TIME ============================================================================== ------------------------------------------------------------------------------ 2026-06-02 [KN2R] ------------------------------------------------------------------------------ PROJECT START — Paul Aidukas KN2R - KN2R wrote the new exp.php public LinkBox status monitor - Read-only web page showing who is connected to the TLB conference - This date is the official start of this web package lineage (confirmed by KN2R; earlier leftover files on some servers are NOT the start of this “new exp.php” work) ------------------------------------------------------------------------------ 2026-06-27 23:14 EDT [K8LRC] ------------------------------------------------------------------------------ - K8LRC — experimental / custom monitor work on operator host - Example backup: /var/www/html/index.php.bak File timestamp: 2026-06-27 23:14 EDT ------------------------------------------------------------------------------ 2026-07-08 21:11 EDT [K8LRC] (with KN2R direction) ------------------------------------------------------------------------------ PACKAGING BEGINS — Logan Crook K8LRC - K8LRC — templates and Apache pieces start landing in the download package - admin-htaccess template (mtime about 2026-07-08 21:11 EDT) - K8LRC + KN2R — decision to SPLIT the product: * Public page = monitor only (no controls that need a password) * tlb-admin/ = full Manager (Apache password required) - Goal: anyone can watch status; only admins can Connect/Bump/etc. ------------------------------------------------------------------------------ 2026-07-11 … 2026-07-13 [KN2R + K8LRC] ------------------------------------------------------------------------------ INSTALLERS + ADMIN + RESTART BUTTON K8LRC — Logan Crook: - install-tlbweb.sh Fresh install into Apache document root (default /var/www/html) Prompts for IP, reflector/conference name, AllStar hub, log paths Creates tlb-admin username/password OR can reuse Supermon .htpasswd Copies templates → live index.php/exp.php, tlb-common.inc, tlb-admin/ - update-tlbweb.sh Updates an existing install without wiping passwords Keeps server IP, site name, index.php vs exp.php choice, AllStar node Refreshes templates from the package URL - tlb-common.inc Shared PHP: talk to tlbcmd, render live table, tail logs safely, run KN2R’s restart script via sudo - Talking-row UI fix (buttons stay readable when transmitting) - Public log links open tlb-admin/ (same Apache login) - Automated /etc/sudoers.d/tlb-restart-web (chmod 440 + visudo check) KN2R — Paul Aidukas: - tlb-admin Manager vertical layout / UX direction - Connect / Mute / Bump / Ban / Disconnect control design - Pause / Resume / Restart placement (screenshot feedback) - 2026-07-13 — restart-tlb clean restart script (KN2R) Stop tlb, kill EventScript leftovers, start tlb again Wired to tlb-admin via $tlbrestartscript ------------------------------------------------------------------------------ 2026-07-17 19:31 EDT [K8LRC] (ops model from KN2R) ------------------------------------------------------------------------------ EVENTSCRIPTS — TWO CHOICES (policy vs no policy) File timestamps about: 2026-07-17 19:31 EDT Packaging / naming: K8LRC. Conference policy behavior: KN2R ops model. Both scripts are EventScript= targets in tlb.conf. Install BOTH files; point EventScript at exactly ONE, then restart TLB. A) tlbevent-conference.sh — WITH conference POLICY - Auto-link (linkit) new VoIP users on the reflector - Rapid-reconnect / multi-conference POLICY (ban/monitor when enabled) - Clean IRLP .bump / kick / ban: Speak Freely TCP port 15425 for stn#### - Extra handling for *CALLSIGN*, *-L, *-R, and CONF-style links - Normal / production conferences B) tlbevent.sh — NO policy - linkit + IRLP 15425 bump support only - Does NOT run rapid-reconnect / multi-conference bans - Stops leftover policy --monitor processes so policy cannot linger - Testers / simple sites / when you do not want conference policing Why this matters: Without an EventScript, web Bump still runs, but IRLP nodes can linger as Kicked/Inactive instead of dropping cleanly. ------------------------------------------------------------------------------ 2026-07-18 23:32 EDT … 2026-07-19 [K8LRC] ------------------------------------------------------------------------------ BETA PACKAGE TREE + SMARTER INSTALLER — Logan Crook K8LRC - K8LRC — separate Beta download tree for testing before public release: Disk: /var/www/html/tlb-2+/ URL: http://linkbox.k8lrc.crabdance.com/tlb-2+/ - Stable public package remains under the release URL Installer / updater now ASK operators (interactive) — K8LRC: 1) What is THIS TheLinkBox primarily? 1 = IRLP experimental reflector — name like exp0092 Page title: "IRLP exp0092 Reflector" 2 = EchoLink conference — name like *OHIO* / *CONF* / *HAM* Page title: "EchoLink *OHIO* Conference" 3 = EchoLink -L Link — callsign like K8LRC-L Page title: "EchoLink K8LRC-L Link" 4 = EchoLink -R Repeater — callsign like K8LRC-R Page title: "EchoLink K8LRC-R Repeater" Name is authoritative: *NAME* is NEVER titled as an IRLP Reflector (even if /home/irlp exists for -L/-R stations) 2) Which networks does THIS box use? 1 = Both IRLP and EchoLink 2 = IRLP only 3 = EchoLink only (no IRLP) EchoLink-only skips the IRLP ALLOW_EXPERIMENTAL_NODES hint on the page. 3) Which EventScript to activate in tlb.conf? 1 = WITH conference policy → tlbevent-conference.sh 2 = NO policy → tlbevent.sh Both files are installed; only the chosen path is written to EventScript= 4) Which Restart TLB script tlb-admin should use? 1 = restart-tlb-conference (policy pairing) 2 = restart-tlb (no-policy pairing / KN2R’s script) Both scripts can be installed; sudoers allows both; admin uses the choice. ------------------------------------------------------------------------------ 2026-07-19 13:17 EDT [KN2R] (packaged by K8LRC) ------------------------------------------------------------------------------ RESTART-TLB — Paul Aidukas KN2R (script as emailed) KN2R specified exact behavior: - Optional: systemctl stop tlb (if systemd unit exists) so systemd does not fight the manual restart - killall tlb (then -9) - killall tlbevent.sh (then -9) - killall tlbevent-conference.sh (then -9) ← JIC leftover policy script - Start: /usr/local/libexec/tlb -d -f /home/thelinkbox/tlb.conf - Print process status Typical path: /home/thelinkbox/scripts/restart-tlb chmod 755 K8LRC — put KN2R’s script into the Beta package as restart-tlb; also kept restart-tlb-conference as a second install name for policy-paired admin button path. ------------------------------------------------------------------------------ 2026-07-19 13:48 EDT … 2026-07-19 14:26 EDT [KN2R ask / K8LRC did] ------------------------------------------------------------------------------ DATE/TIME STAMPS ON EVERY SHIPPED FILE - KN2R asked: every piece of software should have date-time at the top for troubleshooting / knowing which copy you have - K8LRC added to shell and PHP sources: Last-Updated: YYYY-MM-DD HH:MM TZ Created: … Authors: Paul Aidukas KN2R, Logan Crook K8LRC - K8LRC — CHANGELOG.txt (date/time history; no version numbers) - Start date set to 2026-06-02 per KN2R (new exp.php) ------------------------------------------------------------------------------ 2026-07-19 14:49 EDT … 2026-07-19 14:51 EDT [K8LRC] ------------------------------------------------------------------------------ - K8LRC — CHANGELOG expanded for other operators (full story) - K8LRC — callsigns KN2R / K8LRC tagged on who did what in each section ------------------------------------------------------------------------------ 2026-07-21 16:40 EDT [KN2R ask / K8LRC did] ------------------------------------------------------------------------------ HTPASSWD ALWAYS USE -B (BCRYPT) — Paul Aidukas KN2R - KN2R: documentation and tooling must always use htpasswd capital -B - Without -B, htpasswd uses old MD5 — NOT secure by today's standards - With -B, htpasswd uses bcrypt (best available) — considered Secure Manual commands (SETUP Step 3): Create new file (wipes existing users if file exists): htpasswd -cB /var/www/html/tlb-admin/.htpasswd username Add another user (do not use -c): htpasswd -B /var/www/html/tlb-admin/.htpasswd username - K8LRC: install-tlbweb.sh now creates passwords with htpasswd -cbB (batch + create + bcrypt); INSTALLER_VERSION bumped to 14 - Docs updated: SETUP-INSTRUCTIONS.txt Step 3, README-FIRST.txt, admin-htaccess comments ------------------------------------------------------------------------------ 2026-07-25 21:35 EDT [KN2R ask / K8LRC did] ------------------------------------------------------------------------------ ONE-PACKAGE TGZ + IP DOWNLOADS + exp.php PUBLIC NAMING - KN2R style (like supermonASL_fresh_install / supermonASL3_latest_update): /var/www/html/Beta/install-tlbweb-fresh -> wget tgz, tar xvzf, install /var/www/html/Beta/update-tlbweb-latest -> wget tgz, tar xvzf, update /var/www/html/Beta/make-tlbweb-tgz.sh -> tar cvzf tlb-2+-web.tgz /var/www/html/tlb-2+-web.tgz -> one downloadable package - Download host defaults to IP (some networks block crabdance.com DDNS): http://45.32.193.131/ Alternate: http://linkbox.k8lrc.crabdance.com/Beta/ - KN2R naming locked for new installs: Public monitor: /var/www/html/exp.php Admin tool: /var/www/html/tlb-admin/index.php - K8LRC: INSTALLER_VERSION=15, UPDATE_VERSION=17 - Docs: README-FIRST, SETUP, BETA-README, CHANGELOG ------------------------------------------------------------------------------ 2026-07-25 22:45 EDT [KN2R ask / K8LRC did] ------------------------------------------------------------------------------ .htaccess MATCHES PAUL + SUPERMON FILE BLOCKS - Keep Auth + FilesMatch "^\.ht" (forbids .htaccess & .htpasswd) - Added supermon-style block for .inc .sh .bak .log .ini etc. (Apache 2.4) - Does not stop server-side PHP from using those files ------------------------------------------------------------------------------ 2026-07-25 22:55 EDT [K8LRC did] ------------------------------------------------------------------------------ ALLSTAR HUB LINK USES https:// (ASL3) - index.template / exp.php: https://NODE.nodes.allstarlink.org/... - Works for ASL3 HTTPS hubs; HTTP-only sites usually redirect ------------------------------------------------------------------------------ 2026-07-25 22:57 EDT [K8LRC did] ------------------------------------------------------------------------------ ALLSTAR LINK: http (ASL1) OR https (ASL3) - Template uses YOUR_ALLSTAR_SCHEME://NODE.nodes.allstarlink.org/... - Installer/updater prompt or detect: 1=http (ASL1), 2=https (ASL3) - This hub 41001 stays http:// (ASL1, not ASL3) - INSTALLER_VERSION=20, UPDATE_VERSION=23 ------------------------------------------------------------------------------ 2026-07-25 23:01 EDT [K8LRC did] ------------------------------------------------------------------------------ INSTALLER ASKS FOR SUPERMON SITE URL (not updater) - Fresh install prompt: type http://41001.nodes... or https://42121.nodes... - Updater preserves existing Supermon URL from exp.php (no prompt) - Template link is YOUR_SUPERMON_URL (full href) - Blank on install omits the AllStar/Supermon hub link - INSTALLER_VERSION=22, UPDATE_VERSION=26 ------------------------------------------------------------------------------ 2026-07-26 06:15 EDT [K8LRC did] ------------------------------------------------------------------------------ PAUL-STYLE WRAPPERS (match supermonASL_fresh_install / latest_update) - install-tlbweb-fresh / update-tlbweb-latest: OSR debian check, apt (fresh), cd /; wget .../tlb-2+-web.tgz -O tlb-2+-web.tgz sync; tar -xzvpf tlb-2+-web.tgz; sync; rm tlb-2+-web.tgz (same pattern as Paul's supermonASL tgz wrappers) - Ends with "All tasks completed." / "# The end ;)" - Package URL default: http://45.32.193.131/tlb-2+-web.tgz ------------------------------------------------------------------------------ 2026-08-01 22:15 EDT [K8LRC did] ------------------------------------------------------------------------------ tlb.ini LOADED BY INSTALLER / UPDATER - tlb.ini.sample in package; copy to tlb.ini and edit - install-tlbweb.sh / update-tlbweb.sh load tlb.ini for defaults - Environment variables still win over tlb.ini - Personal tlb.ini is not packed into tlb-2+-web.tgz (sample only) - INSTALLER_VERSION=23, UPDATE_VERSION=27 ------------------------------------------------------------------------------ 2026-08-02 09:50 EDT [K8LRC] ------------------------------------------------------------------------------ FIX — update-tlbweb-latest corrupted tlb-admin/.htaccess AuthUserFile Bad "belt-and-suspenders" sed escaped "/" to "&". In sed replacements, "&" means the whole match, so AuthUserFile exploded into garbage and Apache returned Internal Server Error (500). - Removed that rewrite from update-tlbweb-latest (updater already does it) - install-tlbweb.sh sets AuthUserFile via awk; rejects corrupt prior paths - INSTALLER_VERSION=24 ------------------------------------------------------------------------------ 2026-08-02 10:35 EDT [K8LRC] ------------------------------------------------------------------------------ FEATURE — Received column (who is transmitting / last TX) in live panel Same behavior as live exp.php + tlb-admin on K8LRC: - New table column "Received" (Supermon-style HHH:MM:SS from TLB last tx:) - While keyed (attribute T and last tx <= ~5s): count up this keyup - Idle: show time since last transmit ("Never" if none) - Talking rows still highlight (rColor) - Also: ENT_SUBSTITUTE on messages log so Latin-1 chat does not blank the panel ------------------------------------------------------------------------------ 2026-08-02 10:55 EDT [K8LRC] ------------------------------------------------------------------------------ Browser tab titles: short + spaced (no full ConferenceID dump) ConferenceID can be a long sentence (e.g. MICH-EXP … Allstar Hub …). Tab titles now use site role placeholders only, e.g.: IRLP exp0092 Reflector Monitor IRLP exp0092 Reflector Manager Full ConferenceID still shows on the page heading. ------------------------------------------------------------------------------ 2026-08-03 17:40 EDT [K8LRC] ------------------------------------------------------------------------------ FIX — Received column + sort for Paul KN2R / Dave K5NX conference.c defaults Web now calls: users -q -c -t -T -t prints last tx: (Received) even when bDisplayTalkTime defaults FALSE -T sorts by last tx so keyed stations (EchoLink, ULAW, RTP/SF) rise to top No conference.c edit required on operator systems. Testers: Paul Aidukas KN2R, Dave K5NX ------------------------------------------------------------------------------ 2026-08-03 18:30 EDT [K8LRC] (request: KN2R) ------------------------------------------------------------------------------ FEATURE — Conns: N above the live connections table Top-left of the main table on public monitor + tlb-admin: Conns: 12 Count matches visible rows (lurkers / bump-hidden skipped). Live AJAX refresh updates the number. Simple indicator only — not Supermon Display Configuration (per KN2R: do not expand). ------------------------------------------------------------------------------ 2026-08-03 19:10 EDT [K8LRC] (request: KN2R) ------------------------------------------------------------------------------ TWEAK — Conns placement (no extra line on Manager) Public monitor (exp.php): Conns: N stays above the connections table. tlb-admin: Conns: N on the same top line as Pause refresh / Restart TLB, left-justified; Pause/Restart layout unchanged. Still not Supermon Display Configuration. ------------------------------------------------------------------------------ 2026-08-03 19:12 EDT [K8LRC] (request: KN2R) ------------------------------------------------------------------------------ TWEAK — Conns on top line for public monitor too Both exp.php and tlb-admin: Conns: N left on the refresh/toolbar line (no extra line above the table). Hint text / Pause / Restart stay as-is. ------------------------------------------------------------------------------ 2026-08-08 21:25 EDT [K8LRC] (request: ask + write tlb.ini) ------------------------------------------------------------------------------ FEATURE — Installer asks site questions and can write tlb.ini - Clear "Site information" prompt block (IP, type, name, Supermon, logs) - After answers: offer to save /var/www/html/tlb.ini (overwrite ask if exists) - --yes: write tlb.ini only when missing (never clobber) - update-tlbweb.sh also offers write_tlb_ini after config prompts - UPDATE_VERSION=32 ------------------------------------------------------------------------------ 2026-08-08 21:20 EDT [K8LRC] (report: tlb.ini missing after install) ------------------------------------------------------------------------------ FIX — Install tlb.ini.template + tlb.ini.sample into WEB_ROOT - install-tlbweb-fresh extracts under /tmp then deletes it — template never landed where operators look (/var/www/html) - Now copies template + sample next to exp.php / tlb-common.inc - Never overwrites an existing filled-in tlb.ini ------------------------------------------------------------------------------ 2026-08-08 21:05 EDT [K8LRC] (request: public release) ------------------------------------------------------------------------------ ADD — tlb.ini.template for operators to enter site information - Blank fill-in form with YOUR_* placeholders (site type, IP, name, Supermon) - tlb.ini.sample kept as a filled example - Installer help + --download pull template/sample - cp tlb.ini.template tlb.ini then edit before install/update ------------------------------------------------------------------------------ 2026-08-08 21:00 EDT [K8LRC] (request: KN2R — public release) ------------------------------------------------------------------------------ RELEASE — Promote Beta tlb-2+ to public package - Public dir: /var/www/html/tlb-2+/ - URLs: http://45.32.193.131/tlb-2+/ (+ tlb-2+-web.tgz wrappers) - Same tested content: UPDATE_VERSION=32, INSTALLER_VERSION=30 - Includes codec display + non-EchoLink/non-GSM Talking/Received fixes - Beta kept at /var/www/html/Beta/ for future testing ------------------------------------------------------------------------------ 2026-08-06 17:00 EDT [K8LRC] (request: KN2R / Beta sync) ------------------------------------------------------------------------------ FIX — Codec display for non-EchoLink / non-GSM (Speak Freely, IRLP, RTP) - Speak Freely / IRLP: show GSM on connect; after first TX learn uLaw / ADPCM / GSM and keep it while idle (cache + TLB flags) - RTP: show uLaw when TLB omits the letter (chan_tlb) - Keeps Aug 5 Talking/Received fixes for uLaw / ADPCM / RTP / SF - Status table headers (Paul): Node · Attributes · IPAddress · Protocol · Received · Connected; 88% panel; column alignment CSS - UPDATE_VERSION=32, INSTALLER_VERSION=30; rebuild tlb-2+-web.tgz ------------------------------------------------------------------------------ 2026-08-05 18:55 EDT [K8LRC] (report: EchoLink attr wording) ------------------------------------------------------------------------------ FIX — EchoLink Attributes wording - Was: (T) Nailed up GSM Talking - Now: T Talking Nailed up GSM - RTP/uLaw unchanged: (T1u) Talking RTP uLaw ------------------------------------------------------------------------------ 2026-08-05 18:50 EDT [K8LRC] (report: drops to bottom / Never) ------------------------------------------------------------------------------ FIX — After unkey, keep last-heard for ALL codecs (like uLaw last tx) - EchoLink/GSM was going Never + bottom of list after stop transmitting - uLaw RTP (ASL-40869) correctly kept aging Received (000:00:35) near top - Session exp_rx_last_heard: when TLB omits last tx, age Received the same way - Sort uses that heard-ago for GSM / uLaw / RTP / ADPCM / SpeakFreely / EchoLink ------------------------------------------------------------------------------ 2026-08-05 18:45 EDT [K8LRC] (report: talker not top of list) ------------------------------------------------------------------------------ FIX — Active talker must sort to top of status table - Screenshot: K8LRC EchoLink Talking was row 2 while ASL-40869 RTP sat on top - TLB users -T sort alone is not reliable across mixed codecs - tlb-common.inc now builds rows then sorts: keyed first, then freshest last tx - When keyed, always show Talking in Attributes (RTP/uLaw included) ------------------------------------------------------------------------------ 2026-08-05 18:40 EDT [K8LRC] (report: non-GSM talking/Never) ------------------------------------------------------------------------------ FIX — Talking highlight + Received for non-GSM / non-EchoLink codecs - tlb-common.inc: uLaw / ADPCM / RTP / SpeakFreely were stuck on Never and not highlighted when attribute T or last tx lagged (EchoLink/GSM worked) - If last tx is missing: fall back to T and/or port Rx (count Received live) - If last tx is fresh on non-EchoLink: highlight even when T is late/missing - Still clear sticky T after unkey when last tx ages (>2s) - Broader port -q Rx parsing when TLB provides Rx flags ------------------------------------------------------------------------------ 2026-08-05 17:30 EDT [K8LRC] (report: update stops tlb) ------------------------------------------------------------------------------ FIX — update-tlbweb-latest must not leave TheLinkBox down - Extract package under /tmp (not /tlb-2+ on /) - Strip execute bits from restart-tlb* in the extract dir (those scripts run systemctl stop + killall tlb — must never run during web update) - Safe PATH (no ".") - Prefer apache2 reload instead of full restart after PHP file updates - Verify tlb after update AND after apache; auto-start if it was up before ------------------------------------------------------------------------------ 2026-08-05 17:20 EDT [K8LRC] (report: KD8UJS *HOTMOVE2*) ------------------------------------------------------------------------------ FIX — EchoLink conference installs must not inherit IRLP package defaults - Removed packed tlb.ini from tlb-2+-web.tgz (it had exp0092 / uses_irlp=1 / 41001 / this host's IP — poisoned other-site fresh installs) - Interactive install ALWAYS asks site role (1–4); no silent SITE_TYPE=irlp - When name corrects role (*HOTMOVE2* → echolink), clear stale USES_IRLP - EchoLink conference / -L / -R default network choice: EchoLink only (3) (do not assume IRLP just because /home/irlp exists on ASL/DVSwitch) ------------------------------------------------------------------------------ 2026-08-05 17:15 EDT [K8LRC] (report: tlb stops on update) ------------------------------------------------------------------------------ FIX — Web update must not leave TheLinkBox down - Update no longer touches /home/thelinkbox bak piles (tlb.conf / scripts) - Update never calls systemctl/killall on tlb; web files only - After update: if tlb was running and is now down, auto-recover (systemctl start tlb, else common tlb binary paths) - restart-tlb* samples: try multiple tlb binary paths; if start fails, fall back to systemctl start tlb so Restart button cannot leave tlb dead ------------------------------------------------------------------------------ 2026-08-05 17:00 EDT [K8LRC] (request: KN2R / HiNoter notes) ------------------------------------------------------------------------------ FIX — Match Paul notes: fresh-install config vs update leave-alone - Updates never write index.html into web root (package still does not ship it) - Updates preserve \$tlbrestartscript across tlb-admin template rewrite (bug: RESTART_TLB_DEST default was resetting the Restart button every update) - Fresh install: may add missing EventScripts / restart scripts under new names - Fresh install: EventScript= / Restart button set ONLY if currently unset (never auto-enable or replace an operator's existing choice) - Update still leaves alone: .htaccess, .htpasswd, scripts/*, tlb.conf EventScript= ------------------------------------------------------------------------------ 2026-08-04 18:15 EDT [K8LRC] (request: KN2R / K5NX) ------------------------------------------------------------------------------ FIX — Stop overwriting operator files on update/install - Removed package index.html (was clobbering Paul/Dave web-root pages) - update-tlbweb: web files only — does NOT touch tlb-admin/.htaccess, /home/thelinkbox/scripts/*, tlb.conf EventScript= especially restart-tlb and restart-tlb-conference - install-tlbweb: never overwrite existing .htaccess, EventScripts, restart-tlb, restart-tlb-conference, or an existing EventScript= line - Added third EventScript: tlbevent-nopolicy.sh (preferred NO-policy name) (keeps tlbevent.sh as legacy NO-policy name) - Stop creating .htaccess.bak.* on every update; purge leftover piles (old updater backed up .htaccess even when not needed) - Added restart-tlb-nopolicy (preferred NO-policy restart; pairs with tlbevent-nopolicy.sh). Keeps restart-tlb as legacy name. - Backups once only for exp.php / tlb-common.inc / tlb-admin/index.php: keep a single path.bak; collapse/remove .bak.* / .bak2 piles on update - Same one-.bak cleanup for tlb.conf, tlbevent*.sh, restart-tlb* (collapse piles only — never overwrite the live files) ============================================================================== WHAT YOU GET WHEN YOU INSTALL (checklist of outcomes) ============================================================================== Under Apache document root (default /var/www/html): exp.php Public monitor (official; Paul KN2R) tlb-common.inc Shared PHP helpers tlb-admin/index.php Administration Manager tlb-admin/.htaccess Apache Basic Auth (install only if missing) tlb-admin/.htpasswd Passwords (created by installer, or Supermon) Under TLB scripts (typical /home/thelinkbox/scripts/) — fresh install only if missing: tlbevent-conference.sh WITH policy EventScript tlbevent-nopolicy.sh NO policy EventScript (preferred name) tlbevent.sh NO policy EventScript (legacy name) restart-tlb-conference WITH policy restart restart-tlb-nopolicy NO policy restart (preferred name) restart-tlb NO policy restart (legacy name) restart-tlb-conference Optional second restart name System: /etc/sudoers.d/tlb-restart-web www-data NOPASSWD for restart script(s) tlb.conf (installer can set): EventScript = /home/thelinkbox/scripts/tlbevent-conference.sh — or — EventScript = /home/thelinkbox/scripts/tlbevent-nopolicy.sh — or (legacy) — EventScript = /home/thelinkbox/scripts/tlbevent.sh Restart TLB after changing EventScript. Updates do not change EventScript= — edit tlb.conf yourself. ============================================================================== HOW TO UPDATE THIS CHANGELOG ============================================================================== 1) Edit the file that changed; bump its Last-Updated stamp at the top 2) Add a new dated section ABOVE in this file (newest near the bottom of the history block, or append at the end of HISTORY BY DATE) 3) Use real timestamps: YYYY-MM-DD HH:MM TZ when known 4) Do not use version numbers — dates/times only 5) Write for someone who was not in the conversation: say WHAT changed and WHY it matters to an operator ============================================================================== FILE STAMP FORMAT (every shipped file) ============================================================================== Shell: # Last-Updated: YYYY-MM-DD HH:MM TZ # Created: … # Authors: Paul Aidukas KN2R, Logan Crook K8LRC PHP: // Last-Updated: YYYY-MM-DD HH:MM TZ // Created: … // Authors: Paul Aidukas KN2R, Logan Crook K8LRC