Skip to content

Commit faf4300

Browse files
Sbussisoclaude
andcommitted
docs: trim never-used auto-start / service sections
The Windows-Service-on-boot and systemd `--install-service` paths are real features in the code (WiX ServiceInstall + install.sh install_systemd_service helper + src/service.rs), but they were never actually exercised by the operator and the docs were prominently promoting them as a 24/7 unattended-operation recommendation. Better to remove the doc paths than to keep promising a flow we haven't validated end-to-end. Removed from docs (CC frontend): - CloudNodeSetup.jsx — both "Auto-start on boot (optional)" sections (Windows + Linux) including the PowerShell `Start-Service / Set-Service SourceBoxSentryCloudNode` block, the `systemctl status sourcebox-sentry-cloudnode` block, and the `curl … | bash -s -- --install-service` example. Trimmed the inline `--install-service` hint from the post-install summary. The "Running on Windows" + "Running on Linux/macOS" sections now cover the foreground-TUI path only, which matches what we actually use day-to-day. - Deployment.jsx — entire "systemd service (Linux)" section (heading + the full unit-file scratchpad + the enable-and-start example). Also trimmed the systemd reference from the "Updating" paragraph. - Faq.jsx — Windows install FAQ entry no longer mentions the optional `SourceBoxSentryCloudNode` service; the rest of the answer (MSI download, SmartScreen warning, no PowerShell one-liner) is unchanged. Kept (not touched by this commit): - `install.sh`'s `--install-service` flag in the script itself. The feature works if anyone wants it; we just stopped advertising it from setup docs. - The WiX installer's service registration in main.wxs. Existing Windows installs still register a manual-start service that works the same way it always has — we just no longer point new users at it. - `src/service.rs` and the corresponding service-mode entry point in `src/main.rs`. Dead-doc, live-code. - The `systemctl status` debugging hint at the top of `docs/runbooks/video-not-showing.md` — that's diagnostic, not promotional. - The "systemd timer" example in SecurityProcedures.jsx's "Cut the camera off-hours" remediation — that's suggesting the CUSTOMER's own scheduling mechanism, not advertising our service. Refreshed backend/static/ from a clean build so the trimmed docs ship in local-dev runs without a manual rebuild. 612 backend tests pass, frontend build clean. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 7edaefa commit faf4300

6 files changed

Lines changed: 22 additions & 204 deletions

File tree

backend/static/assets/DocsPage-Dt0zHNYN.js renamed to backend/static/assets/DocsPage-D8wIfef_.js

Lines changed: 4 additions & 61 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/static/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
<meta name="twitter:image:alt" content="A close-up of a USB security webcam with a green LED indicator, set against a dark background with green and purple dashboard bokeh." />
2525

2626
<title>Sentinel by SourceBox — Private Security Camera System</title>
27-
<script type="module" crossorigin src="/assets/index-CkCjj4Hj.js"></script>
27+
<script type="module" crossorigin src="/assets/index-DEzyi58d.js"></script>
2828
<link rel="modulepreload" crossorigin href="/assets/jsx-runtime-Bg_NI1en.js">
2929
<link rel="modulepreload" crossorigin href="/assets/preload-helper-D4M6sveU.js">
3030
<link rel="modulepreload" crossorigin href="/assets/dist-DoOXorMg.js">

frontend/src/pages/docs/CloudNodeSetup.jsx

Lines changed: 9 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ function CloudNodeSetup() {
5252
<p style={{ marginTop: '0.75rem', fontSize: '0.9rem', color: 'var(--text-muted)' }}>
5353
{os === 'windows'
5454
? 'After the MSI finishes, click the Sentinel CloudNode shortcut from the Start menu — first launch runs the setup wizard, every launch after streams cameras directly.'
55-
: 'Run in your terminal. The script downloads the binary and registers the node. After it finishes, run the binary directly to start the foreground dashboard — same recommended path as the Windows MSI Start menu shortcut. For 24/7 unattended operation, append --install-service to register a systemd unit (opt-in).'}
55+
: 'Run in your terminal. The script downloads the binary and registers the node. After it finishes, run the binary directly to start the foreground dashboard — same recommended path as the Windows MSI Start menu shortcut.'}
5656
</p>
5757

5858
<h3>Setup Wizard</h3>
@@ -86,40 +86,17 @@ function CloudNodeSetup() {
8686
<p>
8787
The Start menu shortcut launches CloudNode as a foreground app — a terminal window
8888
opens with the live dashboard, FFmpeg starts pushing segments, and the node stays
89-
online for as long as the window is open. This is the recommended path for everyday
90-
use: you can see what's happening, hit a slash command, and close it cleanly.
91-
</p>
92-
93-
<h4>Auto-start on boot (optional)</h4>
94-
<p>
95-
For 24/7 unattended operation, the MSI also registers a Windows Service named{' '}
96-
<code>SourceBoxSentryCloudNode</code> set to <strong>manual start</strong>. Flip it
97-
to automatic if you want CloudNode to come up after a reboot without anyone logging
98-
in:
99-
</p>
100-
<div className="docs-code-block">
101-
<code>{`Start-Service SourceBoxSentryCloudNode
102-
Set-Service -Name SourceBoxSentryCloudNode -StartupType Automatic`}</code>
103-
<button className="docs-copy-btn" onClick={() => copyToClipboard("Start-Service SourceBoxSentryCloudNode\nSet-Service -Name SourceBoxSentryCloudNode -StartupType Automatic")}>Copy</button>
104-
</div>
105-
<p>Standard service-management commands all work:</p>
106-
<ul>
107-
<li><code>Get-Service SourceBoxSentryCloudNode</code> — running / stopped status</li>
108-
<li><code>Stop-Service SourceBoxSentryCloudNode</code> / <code>Restart-Service SourceBoxSentryCloudNode</code></li>
109-
<li><code>Get-Content -Wait C:\ProgramData\SourceBoxSentry\logs\cloudnode-service.<i>YYYY-MM-DD</i></code> — tail today's service log</li>
110-
</ul>
111-
<p style={{ fontSize: '0.9rem', color: 'var(--text-muted)' }}>
112-
Don't run the foreground TUI and the service at the same time — only one process
113-
should hold the cameras.
89+
online for as long as the window is open. You can see what's happening, hit a slash
90+
command, and close it cleanly.
11491
</p>
11592

11693
<h3>Uninstalling</h3>
11794
<p>
11895
Use <strong>Settings → Apps → Installed apps → Sentinel CloudNode → Uninstall</strong>.
119-
That stops the service (if running), removes the binary, removes the Windows Service
120-
registration, and wipes <code>C:\ProgramData\SourceBoxSentry\</code> — including your
121-
encrypted config and recordings. FFmpeg installed via <code>winget</code> stays put
122-
because it's a separate package owned by the OS package manager.
96+
That removes the binary and wipes <code>C:\ProgramData\SourceBoxSentry\</code>
97+
including your encrypted config and recordings. FFmpeg installed via{' '}
98+
<code>winget</code> stays put because it's a separate package owned by the OS
99+
package manager.
123100
</p>
124101
<p style={{ fontSize: '0.9rem', color: 'var(--text-muted)' }}>
125102
Upgrades (re-running a newer MSI) preserve everything under ProgramData; only an
@@ -145,32 +122,8 @@ Set-Service -Name SourceBoxSentryCloudNode -StartupType Automatic`}</code>
145122
</div>
146123
<p>
147124
A terminal dashboard opens with live cameras, segment counts, FFmpeg state, and
148-
slash commands. The node stays online for as long as the window is open. This is
149-
the recommended path for everyday use — same model as the Windows MSI's Start
150-
menu shortcut. You can see what's happening, hit a slash command, and close it
151-
cleanly with Ctrl+C.
152-
</p>
153-
154-
<h4>Auto-start on boot (optional)</h4>
155-
<p>
156-
For 24/7 unattended operation (camera in a closet, no SSH session), append{' '}
157-
<code>--install-service</code> to the install command. This registers a systemd
158-
unit and starts it:
159-
</p>
160-
<div className="docs-code-block">
161-
<code>curl -fsSL https://opensentry-command.fly.dev/install.sh | bash -s -- --install-service</code>
162-
<button className="docs-copy-btn" onClick={() => copyToClipboard("curl -fsSL https://opensentry-command.fly.dev/install.sh | bash -s -- --install-service")}>Copy</button>
163-
</div>
164-
<p>Standard service-management commands all work:</p>
165-
<ul>
166-
<li><code>systemctl status sourcebox-sentry-cloudnode</code> — running / stopped status</li>
167-
<li><code>sudo systemctl restart sourcebox-sentry-cloudnode</code></li>
168-
<li><code>journalctl -u sourcebox-sentry-cloudnode -f</code> — tail live log</li>
169-
</ul>
170-
<p style={{ fontSize: '0.9rem', color: 'var(--text-muted)' }}>
171-
Don't run the foreground TUI and the service at the same time — only one process
172-
should hold the cameras. Verify the foreground flow works first before flipping
173-
to unattended.
125+
slash commands. The node stays online for as long as the window is open — you can
126+
see what's happening, hit a slash command, and close it cleanly with Ctrl+C.
174127
</p>
175128
</>
176129
)}

frontend/src/pages/docs/Deployment.jsx

Lines changed: 2 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -82,81 +82,6 @@ cargo build --release
8282
./target/release/sourcebox-sentry-cloudnode setup`)}>Copy</button>
8383
</div>
8484

85-
<h3>systemd service (Linux)</h3>
86-
<p>
87-
The easiest path is the install script — after the wizard finishes, it offers to write
88-
the systemd unit and enable it for you. If you'd rather wire it up manually, the unit
89-
below mirrors what the script would have written. It assumes the binary lives at{' '}
90-
<code>~/.sourcebox-sentry/sourcebox-sentry-cloudnode</code> (the install script's
91-
default <code>INSTALL_DIR</code>) and the wizard wrote <code>node.db</code> under{' '}
92-
<code>$HOME</code>; substitute your own paths if you installed elsewhere.
93-
</p>
94-
<p>Drop into <code>/etc/systemd/system/sourcebox-sentry-cloudnode.service</code>:</p>
95-
<div className="docs-code-block">
96-
<code>{`[Unit]
97-
Description=Sentinel CloudNode
98-
Documentation=https://opensentry-command.fly.dev
99-
After=network-online.target
100-
Wants=network-online.target
101-
102-
[Service]
103-
Type=simple
104-
User=YOUR_USER
105-
# 'video' is the standard group that owns /dev/video* on Debian / Ubuntu /
106-
# Raspberry Pi OS — needed to open USB cameras.
107-
SupplementaryGroups=video
108-
# Inherit a sane PATH so ffmpeg (system-installed) is found even when
109-
# systemd's default PATH skips /usr/local/bin.
110-
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
111-
# Suppress the TUI's ANSI cursor escapes so journalctl entries stay
112-
# line-oriented instead of full-screen redraws.
113-
Environment=NO_COLOR=1
114-
Environment=TERM=dumb
115-
Environment=RUST_LOG=info
116-
WorkingDirectory=/home/YOUR_USER
117-
ExecStart=/home/YOUR_USER/.sourcebox-sentry/sourcebox-sentry-cloudnode run
118-
StandardOutput=journal
119-
StandardError=journal
120-
Restart=on-failure
121-
RestartSec=5s
122-
# Stop retrying after 5 failures in a minute so logs stay readable.
123-
StartLimitIntervalSec=60
124-
StartLimitBurst=5
125-
126-
[Install]
127-
WantedBy=multi-user.target`}</code>
128-
<button className="docs-copy-btn" onClick={() => copyToClipboard(`[Unit]
129-
Description=Sentinel CloudNode
130-
Documentation=https://opensentry-command.fly.dev
131-
After=network-online.target
132-
Wants=network-online.target
133-
134-
[Service]
135-
Type=simple
136-
User=YOUR_USER
137-
SupplementaryGroups=video
138-
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
139-
Environment=NO_COLOR=1
140-
Environment=TERM=dumb
141-
Environment=RUST_LOG=info
142-
WorkingDirectory=/home/YOUR_USER
143-
ExecStart=/home/YOUR_USER/.sourcebox-sentry/sourcebox-sentry-cloudnode run
144-
StandardOutput=journal
145-
StandardError=journal
146-
Restart=on-failure
147-
RestartSec=5s
148-
StartLimitIntervalSec=60
149-
StartLimitBurst=5
150-
151-
[Install]
152-
WantedBy=multi-user.target`)}>Copy</button>
153-
</div>
154-
<p>Enable and start:</p>
155-
<div className="docs-code-block">
156-
<code>sudo systemctl enable --now sourcebox-sentry-cloudnode</code>
157-
<button className="docs-copy-btn" onClick={() => copyToClipboard('sudo systemctl enable --now sourcebox-sentry-cloudnode')}>Copy</button>
158-
</div>
159-
16085
<h3>Cross-compilation (Raspberry Pi)</h3>
16186
<p>CloudNode runs on ARM64 Linux — build on a dev machine, copy the binary:</p>
16287
<div className="docs-code-block">
@@ -168,10 +93,9 @@ cargo build --release --target aarch64-unknown-linux-gnu`)}>Copy</button>
16893

16994
<h3>Updating</h3>
17095
<p>
171-
Re-run the install script. It downloads the latest release, preserves your
96+
Re-run the install script. It downloads the latest release, preserves your{' '}
17297
<code>data/node.db</code>, and restarts the binary. With Docker, pull the new image
173-
and recreate the container. With systemd, replace the binary and run
174-
<code>sudo systemctl restart sourcebox-sentry-cloudnode</code>.
98+
and recreate the container.
17599
</p>
176100
</section>
177101
)

frontend/src/pages/docs/Faq.jsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,10 @@ function Faq() {
3131
and run it. The MSI is unsigned today, so SmartScreen will warn "Windows protected
3232
your PC" on first run — click <strong>More info → Run anyway</strong>. After install,
3333
click the <strong>Sentinel CloudNode</strong> shortcut from the Start menu —
34-
first launch runs the setup wizard, every launch after streams cameras directly. For
35-
24/7 unattended operation, the MSI also registers an optional Windows Service named{" "}
36-
<code>SourceBoxSentryCloudNode</code> that you can flip to auto-start; see the{" "}
37-
<a href="#cloudnode-setup">CloudNode Setup</a> section for details. There is no
38-
PowerShell one-liner installer — that path was retired in v0.1.31 because the MSI
39-
is the only Windows install that handles upgrades and Add/Remove Programs cleanly.
34+
first launch runs the setup wizard, every launch after streams cameras directly.
35+
There is no PowerShell one-liner installer — that path was retired in v0.1.31
36+
because the MSI is the only Windows install that handles upgrades and Add/Remove
37+
Programs cleanly.
4038
</p>
4139
</details>
4240

0 commit comments

Comments
 (0)