Compare commits

..

97 Commits

Author SHA1 Message Date
Matt Hill
392ae2d675 fix: correct false breakage detection for flavored packages and config changes
Two bugs caused the UI to incorrectly warn about dependency breakages:

1. dryUpdate (version path): Flavored package versions (e.g. #knots:27.0.0:0)
   failed exver.satisfies() against flavorless ranges (e.g. >=26.0.0) due to
   flavor mismatch. Now checks the manifest's `satisfies` declarations,
   matching the pattern already used in DepErrorService. Added `satisfies`
   field to PackageVersionInfo so it's available from registry data.

2. checkConflicts (config path): fast-json-patch's compare() treated missing
   keys as conflicts (add ops) and used positional array comparison, diverging
   from the backend's conflicts() semantics. Replaced with a conflicts()
   function that mirrors core/src/service/action.rs — missing keys are not
   conflicts, and arrays use set-based comparison.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 11:38:01 -06:00
Matt Hill
b0b4b41c42 feat: unified restart notification with reason-specific messaging (#3147)
* feat: unified restart notification with reason-specific messaging

Replace statusInfo.updated (bool) with serverInfo.restart (nullable enum)
to unify all restart-needed scenarios under a single PatchDB field.

Backend sets the restart reason in RPC handlers for hostname change (mdns),
language change, kiosk toggle, and OS update download. Init clears it on
boot. The update flow checks this field to prevent updates when a restart
is already pending.

Frontend shows a persistent action bar with reason-specific i18n messages
instead of per-feature restart dialogs. For .local hostname changes, the
existing "open new address" dialog is preserved — the restart toast
appears after the user logs in on the new address.

Also includes migration in v0_4_0_alpha_23 to remove statusInfo.updated
and initialize serverInfo.restart.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix broken styling and improve settings layout

* refactor: move restart field from ServerInfo to ServerStatus

The restart reason belongs with other server state (shutting_down,
restarting, update_progress) rather than on the top-level ServerInfo.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix PR comment

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Aiden McClelland <me@drbonez.dev>
2026-03-29 02:23:59 -06:00
Aiden McClelland
bbbc8f7440 fix: correct BIOS boot partition type GUID for backup target filtering
The BIOS_BOOT_TYPE_GUID constant had the wrong value, so
find_bios_boot_partition never matched the actual BIOS boot partition
created by the gpt crate. This caused it to appear as an available
backup target.
2026-03-28 20:00:59 -06:00
Aiden McClelland
c7a4dd617e fix: resolve tunnel add delay and connectivity loss in gateway watcher
Split poll_ip_info into two phases: write IP info (addresses, subnets,
gateway, DNS, NTP) to the watch immediately, then fetch WAN IP in a
second pass. Previously the echoip HTTP fetch (5s timeout per URL)
blocked the write and was repeatedly cancelled by D-Bus signals during
interface activation, preventing the gateway from ever appearing.

Replace PolicyRoutingCleanup Drop with gc_policy_routing. The old Drop
spawned async route flushes that raced with new apply_policy_routing
calls when the watcher restarted on device_added, wiping freshly-created
routing tables for existing interfaces like eth0. Now policy routing is
managed idempotently by apply_policy_routing, and stale rules are
garbage-collected at the start of each watcher iteration.
2026-03-28 20:00:36 -06:00
Aiden McClelland
d6b81f3c9b fix: assorted fixes across container-runtime, core, and sdk
- Fix parseInt callback in container-runtime to avoid extra map arguments
- Use proper error propagation in list_service_interfaces instead of unwrap_or_default
- Handle non-plain objects by reference in deepEqual
2026-03-27 15:58:52 -06:00
Aiden McClelland
879f953a9f feat: delete ext2_saved subvolume after btrfs-convert
Removes the ext2_saved subvolume (created by btrfs-convert to preserve
original ext4 metadata) before running defrag to reclaim space.
2026-03-26 23:38:54 -06:00
Matt Hill
782f2e83bf ensure correct locale on 035 update (#3145) 2026-03-26 21:35:25 -06:00
Matt Hill
6cefc27c5f build: use org-hosted large runners for fast CI builds
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 19:24:19 -06:00
Matt Hill
2b676808a9 feat: generate certificates signed by the root CA (#3144)
Co-authored-by: Aiden McClelland <me@drbonez.dev>
2026-03-26 18:57:11 -06:00
Aiden McClelland
7c1c15073d fix: default tor proxy for registry 2026-03-26 16:56:02 -06:00
Aiden McClelland
025d569dfa build: replace buildjet runners with github actions large runners 2026-03-26 16:12:25 -06:00
Matt Hill
976bdf3e53 disable finish unless valid form 2026-03-26 15:57:56 -06:00
Aiden McClelland
dce0f075ce feat: cascade address enable/disable to related bindings on same gateway 2026-03-26 15:16:08 -06:00
Aiden McClelland
f3d2782f18 chore: add i18n about strings for CLI commands 2026-03-26 15:15:51 -06:00
Aiden McClelland
8d9be64c19 build: skip compat/utils images for riscv64 architecture 2026-03-26 15:13:54 -06:00
Matt Hill
9bc0fbd5b1 hide 0 capacity drives 2026-03-26 08:13:19 -06:00
Aiden McClelland
b7f7202e25 chore: bump version to 0.4.0-alpha.23 2026-03-25 23:27:57 -06:00
Aiden McClelland
0719c227ee fix: deduplicate tor keys using BTreeMap in v0_3_6 migration 2026-03-25 23:24:44 -06:00
Aiden McClelland
621da47990 fix: import data drive before setup if not mounted 2026-03-25 23:24:35 -06:00
Aiden McClelland
9fa81a0c9d feat: add deploy job to startos-iso workflow 2026-03-25 23:24:25 -06:00
Matt Hill
2dac2bb2b3 restart after server name change 2026-03-25 21:15:07 -06:00
Matt Hill
58f1dc5025 mask password in ST 2026-03-25 17:29:19 -06:00
Matt Hill
cc89023bbd fix spinner alignment 2026-03-25 13:39:13 -06:00
Matt Hill
7e35ad57e7 tor http is secure 2026-03-25 13:31:53 -06:00
Aiden McClelland
010e439d1d fix: guard against null startCursor in logs component 2026-03-25 13:24:52 -06:00
Aiden McClelland
cdbb512cca fix: trim whitespace from package data version file 2026-03-25 13:24:35 -06:00
Aiden McClelland
bb2e69299e fix: only log WAN IP error when all echoip URLs fail 2026-03-25 13:24:18 -06:00
Aiden McClelland
fd0dc9a5b8 fix: silence journalctl setup error in init 2026-03-25 13:24:02 -06:00
Aiden McClelland
e2e88f774e chore: add i18n entries for new CLI args and commands 2026-03-25 13:22:47 -06:00
Aiden McClelland
4bebcafdde fix: tolerate setsid EPERM in subcontainer pre_exec
In TTY mode, pty_process already calls setsid() on the child before
our pre_exec runs. The second setsid() fails with EPERM since the
process is already a session leader. This is harmless — ignore it.
2026-03-25 10:31:29 -06:00
Aiden McClelland
2bb1463f4f fix: mitigate tokio I/O driver starvation (tokio-rs/tokio#4730)
Tokio's multi-thread scheduler has an unfixed vulnerability where all
worker threads can end up parked on condvars with no worker driving the
I/O reactor.  Condvar-parked workers have no timeout and sleep
indefinitely, so once in this state the runtime never recovers.

This was observed on a box migrating from 0.3.5.1: after heavy task
churn (package reinstalls, container operations, logging) all 16 workers
ended up on futex_wait with no thread on epoll_wait.  The web server
listened on both HTTP and HTTPS but never replied.  The box was stuck
for 7+ hours with 0% CPU.

Two mitigations:

1. Watchdog OS thread (startd.rs): a plain std::thread that every 30s
   injects a no-op task via Handle::spawn.  This forces a condvar-parked
   worker to wake, cycle through park, and grab the driver TryLock —
   breaking the stall regardless of what triggered it.

2. block_in_place in the logger (logger.rs): the TeeWriter holds a
   std::sync::Mutex across blocking file + stderr writes on worker
   threads.  Wrapping in block_in_place tells tokio to hand off driver
   duties before the worker blocks, reducing the window for starvation.
   Guarded by runtime_flavor() to avoid panicking on current-thread
   runtimes used by the CLI.
2026-03-25 10:14:03 -06:00
Aiden McClelland
f20ece44a1 chore: bump sdk version in container-runtime lockfile 2026-03-24 19:26:56 -06:00
Aiden McClelland
9fddcb957f chore: bump direct_io buffer from 256KiB to 1MiB 2026-03-24 19:26:56 -06:00
Aiden McClelland
fd502cfb99 fix: probe active block device before vg import cycle
When the target VG is already active (e.g. the running system's own
VG), probe the block device directly instead of going through the
full import/activate/open/cleanup sequence.
2026-03-24 19:26:56 -06:00
Aiden McClelland
ee95eef395 fix: mark backup progress complete unconditionally
Remove the backup_succeeded gate so the progress indicator updates
regardless of the backup outcome — the status field already captures
success/failure separately.
2026-03-24 19:26:56 -06:00
Aiden McClelland
aaa43ce6af fix: network error resilience and wifi state tracking
- Demote transient route-replace errors (vanishing interfaces) to trace
- Tolerate errors during policy routing cleanup on drop
- Use join_all instead of try_join_all for gateway watcher jobs
- Simplify wifi interface detection to always use find_wifi_iface()
- Write wifi enabled state to db instead of interface name
2026-03-24 19:26:55 -06:00
Aiden McClelland
e0f27281d1 feat: load bundled migration images and log progress during os migration
Load pre-saved container images from /usr/lib/startos/migration-images
before migrating packages, removing the need for internet access during
the v1→v2 s9pk conversion.  Add a periodic progress logger so the user
can see which package is being migrated.
2026-03-24 19:26:55 -06:00
Aiden McClelland
ecc4703ae7 build: add migration image bundling to build pipeline
Bundle start9/compat, start9/utils, and tonistiigi/binfmt container
images into the OS image so the v1→v2 s9pk migration can run without
internet access.
2026-03-24 19:26:55 -06:00
Aiden McClelland
d478911311 fix: restore chown on /proc/self/fd/* for subcontainer exec
The pipe-wrap binary guarantees FDs are always pipes (not sockets),
making the chown safe. The chown is still needed because anonymous
pipes have mode 0600 — without it, non-root users cannot re-open
/dev/stderr via /proc/self/fd/2.
2026-03-24 19:26:55 -06:00
Matt Hill
23fe6fb663 align checkbox 2026-03-24 18:57:19 -06:00
Matt Hill
186925065d sdk db backups, wifi ux, release notes, minor copy 2026-03-24 16:39:31 -06:00
Aiden McClelland
53dff95365 revert: remove websocket shutdown signal from RpcContinuations 2026-03-24 11:13:59 -06:00
Aiden McClelland
7f6abf2a80 Merge pull request #3140 from Start9Labs/fix/wifi
bugfixes for alpha.21
2026-03-23 10:26:04 -06:00
Aiden McClelland
19fa1cb4e3 fix build 2026-03-23 10:12:15 -06:00
Matt Hill
521f61c647 bump sdk for republish 2026-03-23 09:45:16 -06:00
Matt Hill
3d45234aae fix password input for backups and add adjective noun randomizer 2026-03-23 08:58:37 -06:00
Aiden McClelland
f60a1a9ed0 fix: set backup progress complete atomically with status revert
Move BackupProgress { complete: true } into the same db.mutate() as the
DesiredStatus revert in the backup transition. Previously these were
separate mutations—the status would revert to Running before progress
showed complete, causing a visible gap in the UI.
2026-03-23 01:15:54 -06:00
Aiden McClelland
2aa910a3e8 fix: replace stdio chown with prctl(PR_SET_DUMPABLE) and pipe-wrap
After setuid, the kernel clears the dumpable flag, making /proc/self/
entries owned by root. This broke open("/dev/stderr") for non-root
users inside subcontainers. The previous fix (chowning /proc/self/fd/*)
was dangerous because it chowned whatever file the FD pointed to (could
be the journal socket).

The proper fix is prctl(PR_SET_DUMPABLE, 1) after setuid, which restores
/proc/self/ ownership to the current uid.

Additionally, adds a `pipe-wrap` subcommand that wraps a child process
with piped stdout/stderr, relaying to the original FDs. This ensures all
descendants inherit pipes (which support re-opening via /proc/self/fd/N)
even when the outermost FDs are journal sockets. container-runtime.service
now uses this wrapper.

With pipe-wrap guaranteeing pipe-based FDs, the exec and launch non-TTY
paths no longer need their own pipe+relay threads, eliminating the bug
where exec would hang when a child daemonized (e.g. pg_ctl start).
2026-03-23 01:14:49 -06:00
Aiden McClelland
8d1e11e158 fix: pg_dump/pg_restore permission errors in backup subcontainer
- Pre-create and chown dump file for postgres user before pg_dump
- Chown volume mountpoint to postgres before initdb on restore
- Add --no-privileges to pg_restore to skip GRANT/REVOKE for missing roles
2026-03-23 01:13:20 -06:00
Aiden McClelland
b7e4df44bf wip: subcontainer exec log drain via SCM_RIGHTS (reference only)
Implemented pipe FD handoff from exec to launch via Unix socket +
SCM_RIGHTS for grandchild log capture. Superseded by the simpler
PR_SET_DUMPABLE approach which eliminates the need for pipes entirely.
2026-03-22 23:58:14 -06:00
Aiden McClelland
25aa140174 fix: backup status reporting 2026-03-22 23:55:26 -06:00
Matt Hill
7ffb462355 better smtp and backups for postgres and mysql 2026-03-22 19:49:58 -06:00
Aiden McClelland
6ed0afc75f chore: bump sdk to 0.4.0-beta.63 2026-03-22 14:13:28 -06:00
Aiden McClelland
cb7618cb34 fix: e2fsck exit codes 1-3 are non-fatal during btrfs conversion
e2fsck returns 1 when errors are corrected and 2 when corrections
require a reboot. These are expected during ext4→btrfs conversion.
Only exit codes >= 4 indicate actual failure. Previously, .invoke()
treated any non-zero exit as an error, causing the conversion to
fail after successful filesystem repairs.
2026-03-21 18:20:55 -06:00
Aiden McClelland
456c5d6725 fix: graceful shutdown for subcontainer daemons
Two issues fixed:

1. Process group cascade: exec-command processes inherited the
   container runtime's process group. When an entrypoint script
   did kill(0, SIGTERM) during shutdown, it signaled ALL processes
   in the group — including other subcontainers' launch wrappers,
   causing their PID namespaces to collapse. Fixed by calling
   setsid() in exec-command's pre_exec to isolate each service
   in its own process group.

2. Unordered daemon termination: removeChild("main") fired
   onLeaveContext callbacks for all Daemon.of() instances
   simultaneously, bypassing Daemons.term()'s reverse-dependency
   ordering. Fixed by having Daemons.build() mark individual
   daemons as managed (suppressing their onLeaveContext) and
   registering a single onLeaveContext that calls the ordered
   Daemons.term(). The term() method is deduplicated so
   system.stop() and onLeaveContext share the same shutdown.
2026-03-21 18:20:50 -06:00
Matt Hill
bdfa918a33 a bunch of UI cleanup around backups as well as other bug fixes and UII improvements 2026-03-21 16:32:46 -06:00
Aiden McClelland
8b65490d0e feat: add progress step for btrfs conversion during setup/init 2026-03-20 19:32:41 -06:00
Aiden McClelland
c9a93f0a33 fix: rsync progress regex never matched, spamming logs during backup
The regex used `$` (end-of-string anchor) instead of no anchor,
so it never matched the percentage in rsync output. Every line,
including empty ones, was logged instead of parsed.
2026-03-20 17:13:35 -06:00
Aiden McClelland
f5bfbe0465 Revert "fix: RunAction task re-evaluation compared against partial input, not full config"
also apply alternative fix: only re-activate a task that explicitly conflicts with a run action's input

This reverts commit 2999d22d2a.
2026-03-20 16:35:09 -06:00
Aiden McClelland
8bccffcb5c feat: add --arch flag to start-cli registry package download
Use the new flag in the image build recipe to download the tor s9pk
for the target architecture, replacing the standalone download script.
2026-03-20 15:28:45 -06:00
Aiden McClelland
9ff65497a8 fix: replace fire-and-forget restart loop in Daemon with tracked AbortController
- Track the restart loop as an awaitable { abort, done } handle
- Remove shouldBeRunning flag — signal.aborted serves the same purpose
- Remove exiting field — term() awaits command termination inline
- Guard start() on loop existence to prevent concurrent restart loops
- Make backoff sleep abortable so term() returns immediately
- Suppress error logging during intentional termination
- Loop clears its own handle in finally block for natural exit (oneshot)
2026-03-20 14:31:46 -06:00
Aiden McClelland
7335e52ab3 fix: daemon lifecycle cleanup and error logging improvements
- Refactor HealthDaemon to use a tracked session (AbortController + awaitable
  promise) instead of fire-and-forget health check loops, preventing health
  checks from running after a service is stopped
- Stop health checks before terminating daemon to avoid false crash reports
  during intentional shutdown
- Guard onExit callbacks with AbortSignal to prevent stale session callbacks
- Add logErrorOnce utility to deduplicate repeated error logging
- Fix SystemForEmbassy.stop() to capture clean promise before deleting ref
- Treat SIGTERM (signal 15) as successful exit in subcontainer sync
- Fix asError to return original Error instead of wrapping in new Error
- Remove unused ExtendedVersion import from Backups.ts
2026-03-20 13:50:57 -06:00
Aiden McClelland
b54f10af55 fix: rsync backup bugs and optimize flags for encrypted CIFS targets
- Fix restoreBackup using backupOptions instead of restoreOptions
- Add missing await on preRestore/postRestore hooks
- Remove -c (checksum) flag that forced full reads on every run
- Add --partial to keep partially transferred files on interruption
- Add --inplace to avoid temp-file+rename metadata churn
- Add --timeout=300 to prevent hangs on stalled mounts
2026-03-20 11:56:53 -06:00
Matt Hill
0549c7c0ef fix build 2026-03-20 08:50:54 -06:00
Matt Hill
2a8d8c7154 alpha.22 2026-03-20 08:37:36 -06:00
Andreas Schjønhaug
b9f2446cee Fix Safari hard refresh instructions (#3141) 2026-03-20 08:35:11 -06:00
Matt Hill
03d7d5f123 Merge branch 'fix/wifi' of github.com:Start9Labs/start-os into fix/wifi 2026-03-20 08:23:14 -06:00
Matt Hill
2fd674eca8 bump tor 2026-03-20 08:23:12 -06:00
waterplea
0e9c90f2c0 chore: fix icons in marketplace 2026-03-20 11:16:45 +04:00
Matt Hill
bca2e4d630 feat: add restart button to start-tunnel settings page
Adds a VPS restart button to the settings page, above logout. Shows a
spinner while the RPC completes, then a dialog telling the user to wait
1-2 minutes and refresh.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 23:27:21 -06:00
Alex Inkin
f41fc75024 chore: make service icons not round and add wifi lock badge (#3139)
* chore: make service icons not round and add wifi lock badge

* chore: comments
2026-03-19 18:18:25 -06:00
Matt Hill
56cb3861bc fix build 2026-03-19 18:00:22 -06:00
Matt Hill
2999d22d2a fix: RunAction task re-evaluation compared against partial input, not full config
Bug: After running an action (e.g. bitcoin's autoconfig), update_tasks was
called with the submitted form input — which for task-triggered actions is
filtered to only the task's fields (e.g. {zmqEnabled: true}). Other services'
tasks targeting the same action were then compared against this partial via
is_partial_of, so any task wanting a field NOT in the submission (e.g.
{blocknotify: "curl..."}) would incorrectly become active, even though the
full config still satisfied it.

This caused a cycling bug: running LND's autoconfig (zmqEnabled) would
activate Datum's task (blocknotify), and vice versa, despite the merge
correctly preserving both values in the config.

Fix: After running an action, fetch the full current config via
get_action_input (same as create_task and recheck_tasks already do) and
compare tasks against that.

The one-liner fix would have been to add a get_action_input call in the
RunAction handler. Instead, we extracted eval_action_tasks on
ServiceActorSeed — a single method that both RunAction and recheck_tasks
now call — because the duplication between these two sites is exactly how
this bug happened: recheck_tasks fetched the full config, RunAction didn't,
and they silently diverged.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 14:43:08 -06:00
Matt Hill
bb745c43cc fix: createTask with undefined input values fails to create task
Bug: Setting a task input property to undefined (e.g. { prune: undefined })
to express "this key should be deleted" resulted in no task being created.
JSON.stringify strips undefined values, so { prune: undefined } serialized
as {}, and is_partial_of({}, any_config) always returns true — meaning
input-not-matches saw a "match" and never activated the task.

Fix (two parts):
- SDK: coerce undefined to null in task input values before serialization,
  so they survive JSON.stringify and reach the Rust backend
- Rust: treat null in a partial as matching a missing key in the full
  config, so tasks correctly deactivate when the key is already absent

Assumption: null and undefined/absent are semantically equivalent for
StartOS config values. Input specs produce concrete values (strings,
numbers, booleans, objects, arrays) — null never appears as a meaningful
distinct-from-absent value in real-world configs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 14:28:04 -06:00
Matt Hill
de9a7e4189 fix types 2026-03-19 13:38:40 -06:00
Matt Hill
8fbcf44dec fix 2026-03-19 11:54:28 -06:00
Matt Hill
97b3b548c0 fix type 2026-03-19 11:42:43 -06:00
Matt Hill
6c72a22178 SDK beta.62: fix dynamicSelect crash on empty values, add smtpShape
- Guard z.union() against empty arrays in dynamicSelect/dynamicMultiselect
  by falling back to z.string() (fixes zod v4 _zod TypeError)
- Add smtpShape: typed zod schema for store file models, replacing
  smtpInputSpec.validator which caused cross-zod-instance errors
- Bump version to 0.4.0-beta.62

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 11:30:37 -06:00
Aiden McClelland
d7c394ef33 chore: update generated TS bindings 2026-03-19 01:07:45 -06:00
Aiden McClelland
96dcd126db feat: support restoring backups from a different server 2026-03-19 01:07:37 -06:00
Aiden McClelland
e4b0f56fa7 fix: use tmpfs and lazy unmounts in chroot-and-upgrade 2026-03-19 01:07:23 -06:00
Aiden McClelland
3ef99eca87 fix: allow private access to vhost targets on public gateways 2026-03-19 00:41:48 -06:00
Aiden McClelland
f64c543747 fix: add sudo to prune scripts and truncate b3sum in update-squashfs 2026-03-19 00:13:33 -06:00
Aiden McClelland
292a914307 fix: use shared futures for ACME cert acquisition with 2m timeout 2026-03-19 00:06:34 -06:00
Aiden McClelland
9a58568053 fix: send TLS alerts on handshake timeout and unrecognized SNI 2026-03-19 00:06:25 -06:00
Aiden McClelland
34e01d4223 fix: increase RPC connect timeout from 30s to 60s 2026-03-18 23:49:44 -06:00
Aiden McClelland
427c38f23b feat: add tunnel restart command 2026-03-18 23:49:29 -06:00
Aiden McClelland
d669aa9afb fix: retry BLKRRPART on busy device during OS install 2026-03-18 23:48:49 -06:00
Aiden McClelland
bcdeabfe85 fix: clap CLI definitions and manpage generation
- add #[group(skip)] to all Parser-derived structs
- fix conflicts_with and arg definitions for correct CLI behavior
- refactor bin entry points to support manpage generation
2026-03-18 23:48:13 -06:00
Aiden McClelland
b1b7d2fa70 feat: add xml file helper to SDK 2026-03-18 23:47:17 -06:00
Aiden McClelland
476b10c413 chore: update dependencies and build scripts 2026-03-18 23:47:05 -06:00
Matt Hill
6e56682c11 better wifi ux 2026-03-18 16:52:47 -06:00
Aiden McClelland
9ed6c1263c fix: derive wifi interface dynamically from gateway info instead of detecting at startup
Remove static wifi_interface/ethernet_interface fields from RpcContextSeed. Instead, look up
the wifi interface from the DB (populated by gateway sync) and check ethernet connectivity
by querying gateway entries. This ensures the wifi manager always uses the correct interface
even if network devices change after boot.
2026-03-18 16:01:41 -06:00
Matt Hill
5cf70dc8f5 fix staging docs ref 2026-03-18 15:57:08 -06:00
Matt Hill
1358937fa9 fix private domain dns ip and hide private domaains for wg gateways 2026-03-18 15:55:56 -06:00
Matt Hill
0e9d4f5d53 better wifi page 2026-03-18 14:16:18 -06:00
Matt Hill
59550d6f5e dont hide header if table members 2026-03-18 13:52:20 -06:00
642 changed files with 22234 additions and 1897 deletions

View File

@@ -47,7 +47,7 @@ runs:
sudo rm -rf /usr/share/swift sudo rm -rf /usr/share/swift
sudo rm -rf "$AGENT_TOOLSDIRECTORY" sudo rm -rf "$AGENT_TOOLSDIRECTORY"
# BuildJet runners lack /opt/hostedtoolcache, which setup-python and setup-qemu expect # Some runners lack /opt/hostedtoolcache, which setup-python and setup-qemu expect
- name: Ensure hostedtoolcache exists - name: Ensure hostedtoolcache exists
shell: bash shell: bash
run: sudo mkdir -p /opt/hostedtoolcache && sudo chown $USER:$USER /opt/hostedtoolcache run: sudo mkdir -p /opt/hostedtoolcache && sudo chown $USER:$USER /opt/hostedtoolcache

View File

@@ -63,7 +63,7 @@ jobs:
"ALL": ["x86_64-unknown-linux-musl", "x86_64-apple-darwin", "aarch64-unknown-linux-musl", "aarch64-apple-darwin", "riscv64gc-unknown-linux-musl"] "ALL": ["x86_64-unknown-linux-musl", "x86_64-apple-darwin", "aarch64-unknown-linux-musl", "aarch64-apple-darwin", "riscv64gc-unknown-linux-musl"]
}')[github.event.inputs.platform || 'ALL'] }')[github.event.inputs.platform || 'ALL']
}} }}
runs-on: ${{ fromJson('["ubuntu-latest", "buildjet-32vcpu-ubuntu-2204"]')[github.event.inputs.runner == 'fast'] }} runs-on: ${{ fromJson('["ubuntu-latest", "ubuntu-24.04-32-cores"]')[github.event.inputs.runner == 'fast'] }}
steps: steps:
- name: Mount tmpfs - name: Mount tmpfs
if: ${{ github.event.inputs.runner == 'fast' }} if: ${{ github.event.inputs.runner == 'fast' }}

View File

@@ -59,7 +59,7 @@ jobs:
"ALL": ["x86_64", "aarch64", "riscv64"] "ALL": ["x86_64", "aarch64", "riscv64"]
}')[github.event.inputs.platform || 'ALL'] }')[github.event.inputs.platform || 'ALL']
}} }}
runs-on: ${{ fromJson('["ubuntu-latest", "buildjet-32vcpu-ubuntu-2204"]')[github.event.inputs.runner == 'fast'] }} runs-on: ${{ fromJson('["ubuntu-latest", "ubuntu-24.04-32-cores"]')[github.event.inputs.runner == 'fast'] }}
steps: steps:
- name: Mount tmpfs - name: Mount tmpfs
if: ${{ github.event.inputs.runner == 'fast' }} if: ${{ github.event.inputs.runner == 'fast' }}
@@ -89,7 +89,7 @@ jobs:
permissions: permissions:
contents: read contents: read
packages: write packages: write
runs-on: ${{ fromJson('["ubuntu-latest", "buildjet-32vcpu-ubuntu-2204"]')[github.event.inputs.runner == 'fast'] }} runs-on: ${{ fromJson('["ubuntu-latest", "ubuntu-24.04-32-cores"]')[github.event.inputs.runner == 'fast'] }}
steps: steps:
- name: Cleaning up unnecessary files - name: Cleaning up unnecessary files
run: | run: |

View File

@@ -59,7 +59,7 @@ jobs:
"ALL": ["x86_64", "aarch64", "riscv64"] "ALL": ["x86_64", "aarch64", "riscv64"]
}')[github.event.inputs.platform || 'ALL'] }')[github.event.inputs.platform || 'ALL']
}} }}
runs-on: ${{ fromJson('["ubuntu-latest", "buildjet-32vcpu-ubuntu-2204"]')[github.event.inputs.runner == 'fast'] }} runs-on: ${{ fromJson('["ubuntu-latest", "ubuntu-24.04-32-cores"]')[github.event.inputs.runner == 'fast'] }}
steps: steps:
- name: Mount tmpfs - name: Mount tmpfs
if: ${{ github.event.inputs.runner == 'fast' }} if: ${{ github.event.inputs.runner == 'fast' }}

View File

@@ -89,9 +89,9 @@ jobs:
"riscv64": "ubuntu-latest" "riscv64": "ubuntu-latest"
}')[matrix.arch], }')[matrix.arch],
fromJson('{ fromJson('{
"x86_64": "buildjet-32vcpu-ubuntu-2204", "x86_64": "amd64-fast",
"aarch64": "buildjet-32vcpu-ubuntu-2204-arm", "aarch64": "aarch64-fast",
"riscv64": "buildjet-32vcpu-ubuntu-2204" "riscv64": "amd64-fast"
}')[matrix.arch] }')[matrix.arch]
) )
)[github.event.inputs.runner == 'fast'] )[github.event.inputs.runner == 'fast']
@@ -153,15 +153,15 @@ jobs:
"riscv64-nonfree": "ubuntu-24.04-arm", "riscv64-nonfree": "ubuntu-24.04-arm",
}')[matrix.platform], }')[matrix.platform],
fromJson('{ fromJson('{
"x86_64": "buildjet-8vcpu-ubuntu-2204", "x86_64": "amd64-fast",
"x86_64-nonfree": "buildjet-8vcpu-ubuntu-2204", "x86_64-nonfree": "amd64-fast",
"x86_64-nvidia": "buildjet-8vcpu-ubuntu-2204", "x86_64-nvidia": "amd64-fast",
"aarch64": "buildjet-8vcpu-ubuntu-2204-arm", "aarch64": "aarch64-fast",
"aarch64-nonfree": "buildjet-8vcpu-ubuntu-2204-arm", "aarch64-nonfree": "aarch64-fast",
"aarch64-nvidia": "buildjet-8vcpu-ubuntu-2204-arm", "aarch64-nvidia": "aarch64-fast",
"raspberrypi": "buildjet-8vcpu-ubuntu-2204-arm", "raspberrypi": "aarch64-fast",
"riscv64": "buildjet-8vcpu-ubuntu-2204", "riscv64": "amd64-fast",
"riscv64-nonfree": "buildjet-8vcpu-ubuntu-2204", "riscv64-nonfree": "amd64-fast",
}')[matrix.platform] }')[matrix.platform]
) )
)[github.event.inputs.runner == 'fast'] )[github.event.inputs.runner == 'fast']
@@ -203,7 +203,7 @@ jobs:
sudo rm -rf "$AGENT_TOOLSDIRECTORY" # Pre-cached tool cache (Go, Node, etc.) sudo rm -rf "$AGENT_TOOLSDIRECTORY" # Pre-cached tool cache (Go, Node, etc.)
if: ${{ github.event.inputs.runner != 'fast' }} if: ${{ github.event.inputs.runner != 'fast' }}
# BuildJet runners lack /opt/hostedtoolcache, which setup-qemu expects # Some runners lack /opt/hostedtoolcache, which setup-qemu expects
- name: Ensure hostedtoolcache exists - name: Ensure hostedtoolcache exists
run: sudo mkdir -p /opt/hostedtoolcache && sudo chown $USER:$USER /opt/hostedtoolcache run: sudo mkdir -p /opt/hostedtoolcache && sudo chown $USER:$USER /opt/hostedtoolcache
@@ -268,3 +268,108 @@ jobs:
name: ${{ matrix.platform }}.img name: ${{ matrix.platform }}.img
path: results/*.img path: results/*.img
if: ${{ matrix.platform == 'raspberrypi' }} if: ${{ matrix.platform == 'raspberrypi' }}
deploy:
name: Deploy
needs: [image]
if: github.event_name == 'workflow_dispatch' && github.event.inputs.deploy != 'NONE'
runs-on: ubuntu-latest
env:
REGISTRY: >-
${{
fromJson('{
"alpha": "https://alpha-registry-x.start9.com",
"beta": "https://beta-registry.start9.com"
}')[github.event.inputs.deploy]
}}
S3_BUCKET: s3://startos-images
S3_CDN: https://startos-images.nyc3.cdn.digitaloceanspaces.com
steps:
- uses: actions/checkout@v6
with:
sparse-checkout: web/package.json
- name: Determine version
id: version
run: |
VERSION=$(sed -n 's/.*"version": *"\([^"]*\)".*/\1/p' web/package.json | head -1)
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "Version: $VERSION"
- name: Download squashfs artifacts
uses: actions/download-artifact@v8
with:
pattern: "*.squashfs"
path: artifacts/
merge-multiple: true
- name: Download ISO artifacts
uses: actions/download-artifact@v8
with:
pattern: "*.iso"
path: artifacts/
merge-multiple: true
- name: Install start-cli
run: |
ARCH=$(uname -m)
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ASSET_NAME="start-cli_${ARCH}-${OS}"
DOWNLOAD_URL=$(curl -fsS \
-H "Authorization: token ${{ github.token }}" \
https://api.github.com/repos/Start9Labs/start-os/releases \
| jq -r '[.[].assets[] | select(.name=="'"$ASSET_NAME"'")] | first | .browser_download_url')
curl -fsSL \
-H "Authorization: token ${{ github.token }}" \
-H "Accept: application/octet-stream" \
"$DOWNLOAD_URL" -o /tmp/start-cli
sudo install -m 755 /tmp/start-cli /usr/local/bin/start-cli
echo "start-cli: $(start-cli --version)"
- name: Configure S3
run: |
sudo apt-get install -y -qq s3cmd > /dev/null
cat > ~/.s3cfg <<EOF
[default]
access_key = ${{ secrets.S3_ACCESS_KEY }}
secret_key = ${{ secrets.S3_SECRET_KEY }}
host_base = nyc3.digitaloceanspaces.com
host_bucket = %(bucket)s.nyc3.digitaloceanspaces.com
use_https = True
EOF
- name: Set up developer key
run: |
mkdir -p ~/.startos
printf '%s' "${{ secrets.DEV_KEY }}" > ~/.startos/developer.key.pem
- name: Upload to S3
run: |
VERSION="${{ steps.version.outputs.version }}"
cd artifacts
for file in *.iso *.squashfs; do
[ -f "$file" ] || continue
echo "Uploading $file..."
s3cmd put -P "$file" "${{ env.S3_BUCKET }}/v${VERSION}/$file"
done
- name: Register OS version
run: |
VERSION="${{ steps.version.outputs.version }}"
start-cli --registry="${{ env.REGISTRY }}" registry os version add \
"$VERSION" "v${VERSION}" '' ">=0.3.5 <=${VERSION}"
- name: Index assets in registry
run: |
VERSION="${{ steps.version.outputs.version }}"
cd artifacts
for file in *.squashfs *.iso; do
[ -f "$file" ] || continue
PLATFORM=$(echo "$file" | sed 's/.*_\([^.]*\)\.\(squashfs\|iso\)$/\1/')
echo "Indexing $file for platform $PLATFORM..."
start-cli --registry="${{ env.REGISTRY }}" registry os asset add \
--platform="$PLATFORM" \
--version="$VERSION" \
"$file" \
"${{ env.S3_CDN }}/v${VERSION}/$file"
done

1
.gitignore vendored
View File

@@ -23,3 +23,4 @@ tmp
web/.i18n-checked web/.i18n-checked
docs/USER.md docs/USER.md
*.s9pk *.s9pk
/build/lib/migration-images

View File

@@ -15,8 +15,7 @@ IMAGE_TYPE=$(shell if [ "$(PLATFORM)" = raspberrypi ]; then echo img; else echo
WEB_UIS := web/dist/raw/ui/index.html web/dist/raw/setup-wizard/index.html WEB_UIS := web/dist/raw/ui/index.html web/dist/raw/setup-wizard/index.html
COMPRESSED_WEB_UIS := web/dist/static/ui/index.html web/dist/static/setup-wizard/index.html COMPRESSED_WEB_UIS := web/dist/static/ui/index.html web/dist/static/setup-wizard/index.html
FIRMWARE_ROMS := build/lib/firmware/$(PLATFORM) $(shell jq --raw-output '.[] | select(.platform[] | contains("$(PLATFORM)")) | "./build/lib/firmware/$(PLATFORM)/" + .id + ".rom.gz"' build/lib/firmware.json) FIRMWARE_ROMS := build/lib/firmware/$(PLATFORM) $(shell jq --raw-output '.[] | select(.platform[] | contains("$(PLATFORM)")) | "./build/lib/firmware/$(PLATFORM)/" + .id + ".rom.gz"' build/lib/firmware.json)
TOR_S9PK := build/lib/tor_$(ARCH).s9pk BUILD_SRC := $(call ls-files, build/lib) build/lib/depends build/lib/conflicts $(FIRMWARE_ROMS) build/lib/migration-images/.done
BUILD_SRC := $(call ls-files, build/lib) build/lib/depends build/lib/conflicts $(FIRMWARE_ROMS) $(TOR_S9PK)
IMAGE_RECIPE_SRC := $(call ls-files, build/image-recipe/) IMAGE_RECIPE_SRC := $(call ls-files, build/image-recipe/)
STARTD_SRC := core/startd.service $(BUILD_SRC) STARTD_SRC := core/startd.service $(BUILD_SRC)
CORE_SRC := $(call ls-files, core) $(shell git ls-files --recurse-submodules patch-db) $(GIT_HASH_FILE) CORE_SRC := $(call ls-files, core) $(shell git ls-files --recurse-submodules patch-db) $(GIT_HASH_FILE)
@@ -90,6 +89,7 @@ clean:
rm -rf container-runtime/node_modules rm -rf container-runtime/node_modules
rm -f container-runtime/*.squashfs rm -f container-runtime/*.squashfs
(cd sdk && make clean) (cd sdk && make clean)
rm -rf build/lib/migration-images
rm -f env/*.txt rm -f env/*.txt
format: format:
@@ -106,6 +106,10 @@ test-sdk: $(call ls-files, sdk) sdk/base/lib/osBindings/index.ts
test-container-runtime: container-runtime/node_modules/.package-lock.json $(call ls-files, container-runtime/src) container-runtime/package.json container-runtime/tsconfig.json test-container-runtime: container-runtime/node_modules/.package-lock.json $(call ls-files, container-runtime/src) container-runtime/package.json container-runtime/tsconfig.json
cd container-runtime && npm test cd container-runtime && npm test
build/lib/migration-images/.done: build/save-migration-images.sh
ARCH=$(ARCH) ./build/save-migration-images.sh build/lib/migration-images
touch $@
install-cli: $(GIT_HASH_FILE) install-cli: $(GIT_HASH_FILE)
./core/build/build-cli.sh --install ./core/build/build-cli.sh --install
@@ -251,10 +255,10 @@ update-deb: results/$(BASENAME).deb # better than update, but only available fro
update-squashfs: results/$(BASENAME).squashfs update-squashfs: results/$(BASENAME).squashfs
@if [ -z "$(REMOTE)" ]; then >&2 echo "Must specify REMOTE" && false; fi @if [ -z "$(REMOTE)" ]; then >&2 echo "Must specify REMOTE" && false; fi
$(eval SQFS_SUM := $(shell b3sum results/$(BASENAME).squashfs)) $(eval SQFS_SUM := $(shell b3sum results/$(BASENAME).squashfs | head -c 32))
$(eval SQFS_SIZE := $(shell du -s --bytes results/$(BASENAME).squashfs | awk '{print $$1}')) $(eval SQFS_SIZE := $(shell du -s --bytes results/$(BASENAME).squashfs | awk '{print $$1}'))
$(call ssh,'/usr/lib/startos/scripts/prune-images $(SQFS_SIZE)') $(call ssh,'sudo /usr/lib/startos/scripts/prune-images $(SQFS_SIZE)')
$(call ssh,'/usr/lib/startos/scripts/prune-boot') $(call ssh,'sudo /usr/lib/startos/scripts/prune-boot')
$(call cp,results/$(BASENAME).squashfs,/media/startos/images/next.rootfs) $(call cp,results/$(BASENAME).squashfs,/media/startos/images/next.rootfs)
$(call ssh,'sudo CHECKSUM=$(SQFS_SUM) /usr/lib/startos/scripts/upgrade /media/startos/images/next.rootfs') $(call ssh,'sudo CHECKSUM=$(SQFS_SUM) /usr/lib/startos/scripts/upgrade /media/startos/images/next.rootfs')
@@ -316,9 +320,6 @@ build/lib/depends build/lib/conflicts: $(ENVIRONMENT_FILE) $(PLATFORM_FILE) $(sh
$(FIRMWARE_ROMS): build/lib/firmware.json ./build/download-firmware.sh $(PLATFORM_FILE) $(FIRMWARE_ROMS): build/lib/firmware.json ./build/download-firmware.sh $(PLATFORM_FILE)
./build/download-firmware.sh $(PLATFORM) ./build/download-firmware.sh $(PLATFORM)
$(TOR_S9PK): ./build/download-tor-s9pk.sh
./build/download-tor-s9pk.sh $(ARCH)
core/target/$(RUST_ARCH)-unknown-linux-musl/$(PROFILE)/startbox: $(CORE_SRC) $(COMPRESSED_WEB_UIS) web/patchdb-ui-seed.json $(ENVIRONMENT_FILE) core/target/$(RUST_ARCH)-unknown-linux-musl/$(PROFILE)/startbox: $(CORE_SRC) $(COMPRESSED_WEB_UIS) web/patchdb-ui-seed.json $(ENVIRONMENT_FILE)
ARCH=$(ARCH) PROFILE=$(PROFILE) ./core/build/build-startbox.sh ARCH=$(ARCH) PROFILE=$(PROFILE) ./core/build/build-startbox.sh
touch core/target/$(RUST_ARCH)-unknown-linux-musl/$(PROFILE)/startbox touch core/target/$(RUST_ARCH)-unknown-linux-musl/$(PROFILE)/startbox

View File

@@ -23,6 +23,7 @@ fi
BUCKET="${S3_BUCKET:-start9-debs}" BUCKET="${S3_BUCKET:-start9-debs}"
ENDPOINT="${S3_ENDPOINT:-https://nyc3.digitaloceanspaces.com}" ENDPOINT="${S3_ENDPOINT:-https://nyc3.digitaloceanspaces.com}"
GPG_KEY_ID="${GPG_KEY_ID:-5259ADFC2D63C217}"
SUITE="${SUITE:-stable}" SUITE="${SUITE:-stable}"
COMPONENT="${COMPONENT:-main}" COMPONENT="${COMPONENT:-main}"
REPO_DIR="$(mktemp -d)" REPO_DIR="$(mktemp -d)"
@@ -98,7 +99,7 @@ for arch in amd64 arm64 riscv64; do
mkdir -p "$BINARY_DIR" mkdir -p "$BINARY_DIR"
( (
cd "$REPO_DIR" cd "$REPO_DIR"
dpkg-scanpackages --arch "$arch" pool/ > "$BINARY_DIR/Packages" dpkg-scanpackages --multiversion --arch "$arch" pool/ > "$BINARY_DIR/Packages"
gzip -k -f "$BINARY_DIR/Packages" gzip -k -f "$BINARY_DIR/Packages"
) )
echo "Generated Packages index for ${arch}" echo "Generated Packages index for ${arch}"

View File

@@ -1,14 +0,0 @@
#!/bin/bash
cd "$(dirname "${BASH_SOURCE[0]}")"
set -e
ARCH=$1
if [ -z "$ARCH" ]; then
>&2 echo "usage: $0 <ARCH>"
exit 1
fi
curl --fail -L -o "./lib/tor_${ARCH}.s9pk" "https://s9pks.nyc3.cdn.digitaloceanspaces.com/tor_${ARCH}.s9pk"

View File

@@ -357,6 +357,8 @@ mkdir -p /media/startos
chmod 750 /media/startos chmod 750 /media/startos
chown root:startos /media/startos chown root:startos /media/startos
start-cli --registry=https://alpha-registry-x.start9.com registry package download tor -d /usr/lib/startos/tor_${QEMU_ARCH}.s9pk -a "${QEMU_ARCH}"
EOF EOF
SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(date '+%s')}" SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(date '+%s')}"

View File

@@ -118,6 +118,6 @@ else
fi fi
printf "\n \033[1;37m┌──────────────────────────────────────────────────── QUICK ACCESS ─┐\033[0m\n" printf "\n \033[1;37m┌──────────────────────────────────────────────────── QUICK ACCESS ─┐\033[0m\n"
printf " \033[1;37m│\033[0m Web Interface: \033[0;36m%-50s\033[0m \033[1;37m│\033[0m\n" "$web_url" printf " \033[1;37m│\033[0m Web Interface: \033[0;36m%-50s\033[0m \033[1;37m│\033[0m\n" "$web_url"
printf " \033[1;37m│\033[0m Documentation: \033[0;36m%-50s\033[0m \033[1;37m│\033[0m\n" "https://staging.docs.start9.com" printf " \033[1;37m│\033[0m Documentation: \033[0;36m%-50s\033[0m \033[1;37m│\033[0m\n" "https://docs.start9.com"
printf " \033[1;37m│\033[0m Support: \033[0;36m%-50s\033[0m \033[1;37m│\033[0m\n" "https://start9.com/contact" printf " \033[1;37m│\033[0m Support: \033[0;36m%-50s\033[0m \033[1;37m│\033[0m\n" "https://start9.com/contact"
printf " \033[1;37m└───────────────────────────────────────────────────────────────────┘\033[0m\n\n" printf " \033[1;37m└───────────────────────────────────────────────────────────────────┘\033[0m\n\n"

View File

@@ -55,8 +55,8 @@ mkdir -p /media/startos/next/sys
mkdir -p /media/startos/next/proc mkdir -p /media/startos/next/proc
mkdir -p /media/startos/next/boot mkdir -p /media/startos/next/boot
mkdir -p /media/startos/next/media/startos/root mkdir -p /media/startos/next/media/startos/root
mount --bind /run /media/startos/next/run mount -t tmpfs tmpfs /media/startos/next/run
mount --bind /tmp /media/startos/next/tmp mount -t tmpfs tmpfs /media/startos/next/tmp
mount --bind /dev /media/startos/next/dev mount --bind /dev /media/startos/next/dev
mount -t sysfs sysfs /media/startos/next/sys mount -t sysfs sysfs /media/startos/next/sys
mount -t proc proc /media/startos/next/proc mount -t proc proc /media/startos/next/proc
@@ -79,13 +79,13 @@ if mountpoint /media/startos/next/sys/firmware/efi/efivars 2>&1 > /dev/null; the
umount /media/startos/next/sys/firmware/efi/efivars umount /media/startos/next/sys/firmware/efi/efivars
fi fi
umount /media/startos/next/run umount -l /media/startos/next/run
umount /media/startos/next/tmp umount -l /media/startos/next/tmp
umount /media/startos/next/dev umount -l /media/startos/next/dev
umount /media/startos/next/sys umount -l /media/startos/next/sys
umount /media/startos/next/proc umount -l /media/startos/next/proc
umount /media/startos/next/boot umount -l /media/startos/next/boot
umount /media/startos/next/media/startos/root umount -l /media/startos/next/media/startos/root
if [ "$CHROOT_RES" -eq 0 ]; then if [ "$CHROOT_RES" -eq 0 ]; then

36
build/save-migration-images.sh Executable file
View File

@@ -0,0 +1,36 @@
#!/bin/bash
# Save Docker images needed by the 0.3.6-alpha.0 migration as tarballs
# so they can be bundled into the OS and loaded without internet access.
set -e
ARCH="${ARCH:-x86_64}"
DESTDIR="${1:-build/lib/migration-images}"
if [ "$ARCH" = "x86_64" ]; then
DOCKER_PLATFORM="linux/amd64"
elif [ "$ARCH" = "aarch64" ]; then
DOCKER_PLATFORM="linux/arm64"
else
DOCKER_PLATFORM="linux/$ARCH"
fi
IMAGES=("tonistiigi/binfmt:latest")
if [ "$ARCH" != "riscv64" ]; then
IMAGES=("start9/compat:latest" "start9/utils:latest" "${IMAGES[@]}")
fi
mkdir -p "$DESTDIR"
for IMAGE in "${IMAGES[@]}"; do
FILENAME=$(echo "$IMAGE" | sed 's|/|_|g; s/:/_/g').tar
if [ -f "$DESTDIR/$FILENAME" ]; then
echo "Skipping $IMAGE (already saved)"
continue
fi
echo "Pulling $IMAGE for $DOCKER_PLATFORM..."
docker pull --platform "$DOCKER_PLATFORM" "$IMAGE"
echo "Saving $IMAGE to $DESTDIR/$FILENAME..."
docker save "$IMAGE" -o "$DESTDIR/$FILENAME"
done
echo "Migration images saved to $DESTDIR"

View File

@@ -5,7 +5,7 @@ OnFailure=container-runtime-failure.service
[Service] [Service]
Type=simple Type=simple
Environment=RUST_LOG=startos=debug Environment=RUST_LOG=startos=debug
ExecStart=/usr/bin/node --experimental-detect-module --trace-warnings /usr/lib/startos/init/index.js ExecStart=/usr/bin/start-container pipe-wrap /usr/bin/node --experimental-detect-module --trace-warnings /usr/lib/startos/init/index.js
Restart=no Restart=no
[Install] [Install]

View File

@@ -37,7 +37,7 @@
}, },
"../sdk/dist": { "../sdk/dist": {
"name": "@start9labs/start-sdk", "name": "@start9labs/start-sdk",
"version": "0.4.0-beta.61", "version": "0.4.0-beta.66",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@iarna/toml": "^3.0.0", "@iarna/toml": "^3.0.0",
@@ -45,6 +45,7 @@
"@noble/hashes": "^1.7.2", "@noble/hashes": "^1.7.2",
"@types/ini": "^4.1.1", "@types/ini": "^4.1.1",
"deep-equality-data-structures": "^2.0.0", "deep-equality-data-structures": "^2.0.0",
"fast-xml-parser": "^5.5.6",
"ini": "^5.0.0", "ini": "^5.0.0",
"isomorphic-fetch": "^3.0.0", "isomorphic-fetch": "^3.0.0",
"mime": "^4.0.7", "mime": "^4.0.7",

View File

@@ -445,15 +445,14 @@ export class SystemForEmbassy implements System {
} }
callCallback(_callback: number, _args: any[]): void {} callCallback(_callback: number, _args: any[]): void {}
async stop(): Promise<void> { async stop(): Promise<void> {
const { currentRunning } = this const clean = this.currentRunning?.clean({
this.currentRunning?.clean() timeout: fromDuration(
(this.manifest.main["sigterm-timeout"] as any) || "30s",
),
})
delete this.currentRunning delete this.currentRunning
if (currentRunning) { if (clean) {
await currentRunning.clean({ await clean
timeout: fromDuration(
(this.manifest.main["sigterm-timeout"] as any) || "30s",
),
})
} }
} }
@@ -495,7 +494,7 @@ export class SystemForEmbassy implements System {
const host = new MultiHost({ effects, id }) const host = new MultiHost({ effects, id })
const internalPorts = new Set( const internalPorts = new Set(
Object.values(interfaceValue["tor-config"]?.["port-mapping"] ?? {}) Object.values(interfaceValue["tor-config"]?.["port-mapping"] ?? {})
.map(Number.parseInt) .map((v) => parseInt(v))
.concat( .concat(
...Object.values(interfaceValue["lan-config"] ?? {}).map( ...Object.values(interfaceValue["lan-config"] ?? {}).map(
(c) => c.internal, (c) => c.internal,

714
core/Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -15,7 +15,7 @@ license = "MIT"
name = "start-os" name = "start-os"
readme = "README.md" readme = "README.md"
repository = "https://github.com/Start9Labs/start-os" repository = "https://github.com/Start9Labs/start-os"
version = "0.4.0-alpha.21" # VERSION_BUMP version = "0.4.0-alpha.23" # VERSION_BUMP
[lib] [lib]
name = "startos" name = "startos"
@@ -63,7 +63,7 @@ async-compression = { version = "0.4.32", features = [
] } ] }
async-stream = "0.3.5" async-stream = "0.3.5"
async-trait = "0.1.74" async-trait = "0.1.74"
axum = { version = "0.8.4", features = ["ws", "http2"] } axum = { version = "0.8.4", features = ["http2", "ws"] }
backtrace-on-stack-overflow = { version = "0.3.0", optional = true } backtrace-on-stack-overflow = { version = "0.3.0", optional = true }
base32 = "0.5.0" base32 = "0.5.0"
base64 = "0.22.1" base64 = "0.22.1"
@@ -100,6 +100,7 @@ fd-lock-rs = "0.1.4"
form_urlencoded = "1.2.1" form_urlencoded = "1.2.1"
futures = "0.3.28" futures = "0.3.28"
gpt = "4.1.0" gpt = "4.1.0"
hashing-serializer = "0.1.1"
hex = "0.4.3" hex = "0.4.3"
hickory-server = { version = "0.25.2", features = ["resolver"] } hickory-server = { version = "0.25.2", features = ["resolver"] }
hmac = "0.12.1" hmac = "0.12.1"
@@ -182,16 +183,16 @@ r3bl_tui = "0.7.6"
rand = "0.9.2" rand = "0.9.2"
regex = "1.10.2" regex = "1.10.2"
reqwest = { version = "0.12.25", features = [ reqwest = { version = "0.12.25", features = [
"http2",
"json", "json",
"socks", "socks",
"stream", "stream",
"http2",
] } ] }
reqwest_cookie_store = "0.9.0" reqwest_cookie_store = "0.9.0"
rpassword = "7.2.0" rpassword = "7.2.0"
rpc-toolkit = { git = "https://github.com/Start9Labs/rpc-toolkit.git" }
rust-argon2 = "3.0.0" rust-argon2 = "3.0.0"
rust-i18n = "3.1.5" rust-i18n = "3.1.5"
rpc-toolkit = { git = "https://github.com/Start9Labs/rpc-toolkit.git" }
semver = { version = "1.0.20", features = ["serde"] } semver = { version = "1.0.20", features = ["serde"] }
serde = { version = "1.0", features = ["derive", "rc"] } serde = { version = "1.0", features = ["derive", "rc"] }
serde_cbor = { package = "ciborium", version = "0.2.1" } serde_cbor = { package = "ciborium", version = "0.2.1" }
@@ -232,7 +233,9 @@ uuid = { version = "1.4.1", features = ["v4"] }
visit-rs = "0.1.1" visit-rs = "0.1.1"
x25519-dalek = { version = "2.0.1", features = ["static_secrets"] } x25519-dalek = { version = "2.0.1", features = ["static_secrets"] }
zbus = "5.1.1" zbus = "5.1.1"
hashing-serializer = "0.1.1"
[dev-dependencies]
clap_mangen = "0.2.33"
[target.'cfg(target_os = "linux")'.dependencies] [target.'cfg(target_os = "linux")'.dependencies]
procfs = "0.18.0" procfs = "0.18.0"

44
core/build/build-manpage.sh Executable file
View File

@@ -0,0 +1,44 @@
#!/bin/bash
cd "$(dirname "${BASH_SOURCE[0]}")"
source ./builder-alias.sh
set -ea
shopt -s expand_aliases
PROFILE=${PROFILE:-debug}
if [ "${PROFILE}" = "release" ]; then
BUILD_FLAGS="--release"
else
if [ "$PROFILE" != "debug" ]; then
>&2 echo "Unknown profile $PROFILE: falling back to debug..."
PROFILE=debug
fi
fi
if [ -z "$ARCH" ]; then
ARCH=$(uname -m)
fi
if [ "$ARCH" = "arm64" ]; then
ARCH="aarch64"
fi
RUST_ARCH="$ARCH"
if [ "$ARCH" = "riscv64" ]; then
RUST_ARCH="riscv64gc"
fi
cd ../..
FEATURES="$(echo $ENVIRONMENT | sed 's/-/,/g')"
RUSTFLAGS=""
if [[ "${ENVIRONMENT}" =~ (^|-)console($|-) ]]; then
RUSTFLAGS="--cfg tokio_unstable"
fi
echo "FEATURES=\"$FEATURES\""
echo "RUSTFLAGS=\"$RUSTFLAGS\""
rust-zig-builder cargo test --manifest-path=./core/Cargo.toml --lib $BUILD_FLAGS --features test,$FEATURES --locked 'export_manpage_'
if [ "$(ls -nd "core/man" | awk '{ print $3 }')" != "$UID" ]; then
rust-zig-builder sh -c "chown -R $UID:$UID core/target && chown -R $UID:$UID core/man && chown -R $UID:$UID /usr/local/cargo"
fi

View File

@@ -872,6 +872,13 @@ disk.main.disk-not-found:
fr_FR: "Disque StartOS non trouvé." fr_FR: "Disque StartOS non trouvé."
pl_PL: "Nie znaleziono dysku StartOS." pl_PL: "Nie znaleziono dysku StartOS."
disk.main.converting-to-btrfs:
en_US: "Performing file system conversion to btrfs. This can take many hours, please be patient and DO NOT unplug the server."
de_DE: "Dateisystemkonvertierung zu btrfs wird durchgeführt. Dies kann viele Stunden dauern, bitte haben Sie Geduld und trennen Sie den Server NICHT vom Strom."
es_ES: "Realizando conversión del sistema de archivos a btrfs. Esto puede tardar muchas horas, tenga paciencia y NO desconecte el servidor."
fr_FR: "Conversion du système de fichiers vers btrfs en cours. Cela peut prendre de nombreuses heures, soyez patient et NE débranchez PAS le serveur."
pl_PL: "Wykonywanie konwersji systemu plików na btrfs. To może potrwać wiele godzin, prosimy o cierpliwość i NIE odłączaj serwera od zasilania."
disk.main.incorrect-disk: disk.main.incorrect-disk:
en_US: "A StartOS disk was found, but it is not the correct disk for this device." en_US: "A StartOS disk was found, but it is not the correct disk for this device."
de_DE: "Eine StartOS-Festplatte wurde gefunden, aber es ist nicht die richtige Festplatte für dieses Gerät." de_DE: "Eine StartOS-Festplatte wurde gefunden, aber es ist nicht die richtige Festplatte für dieses Gerät."
@@ -1714,6 +1721,14 @@ lxc.mod.cleaned-up-containers:
fr_FR: "Conteneurs LXC orphelins nettoyés avec succès" fr_FR: "Conteneurs LXC orphelins nettoyés avec succès"
pl_PL: "Pomyślnie wyczyszczono wiszące kontenery LXC" pl_PL: "Pomyślnie wyczyszczono wiszące kontenery LXC"
# version/v0_3_6_alpha_0.rs
migration.migrating-package:
en_US: "Migrating package %{package}..."
de_DE: "Paket %{package} wird migriert..."
es_ES: "Migrando paquete %{package}..."
fr_FR: "Migration du paquet %{package}..."
pl_PL: "Migracja pakietu %{package}..."
# registry/admin.rs # registry/admin.rs
registry.admin.unknown-signer: registry.admin.unknown-signer:
en_US: "Unknown signer" en_US: "Unknown signer"
@@ -2642,6 +2657,13 @@ help.arg.add-signer-key:
fr_FR: "Ajouter une clé publique au signataire" fr_FR: "Ajouter une clé publique au signataire"
pl_PL: "Dodaj klucz publiczny do sygnatariusza" pl_PL: "Dodaj klucz publiczny do sygnatariusza"
help.arg.address:
en_US: "Network address"
de_DE: "Netzwerkadresse"
es_ES: "Dirección de red"
fr_FR: "Adresse réseau"
pl_PL: "Adres sieciowy"
help.arg.allow-model-mismatch: help.arg.allow-model-mismatch:
en_US: "Allow database model mismatch" en_US: "Allow database model mismatch"
de_DE: "Datenbankmodell-Abweichung erlauben" de_DE: "Datenbankmodell-Abweichung erlauben"
@@ -2656,6 +2678,13 @@ help.arg.allow-partial-backup:
fr_FR: "Laisser le média monté même si backupfs échoue à monter" fr_FR: "Laisser le média monté même si backupfs échoue à monter"
pl_PL: "Pozostaw nośnik zamontowany nawet jeśli backupfs nie może się zamontować" pl_PL: "Pozostaw nośnik zamontowany nawet jeśli backupfs nie może się zamontować"
help.arg.architecture:
en_US: "Target CPU architecture (e.g. x86_64, aarch64)"
de_DE: "Ziel-CPU-Architektur (z.B. x86_64, aarch64)"
es_ES: "Arquitectura de CPU objetivo (ej. x86_64, aarch64)"
fr_FR: "Architecture CPU cible (ex. x86_64, aarch64)"
pl_PL: "Docelowa architektura CPU (np. x86_64, aarch64)"
help.arg.architecture-mask: help.arg.architecture-mask:
en_US: "Filter by CPU architecture" en_US: "Filter by CPU architecture"
de_DE: "Nach CPU-Architektur filtern" de_DE: "Nach CPU-Architektur filtern"
@@ -2789,6 +2818,13 @@ help.arg.echoip-urls:
fr_FR: "URLs du service Echo IP pour la détection d'IP externe" fr_FR: "URLs du service Echo IP pour la détection d'IP externe"
pl_PL: "Adresy URL usługi Echo IP do wykrywania zewnętrznego IP" pl_PL: "Adresy URL usługi Echo IP do wykrywania zewnętrznego IP"
help.arg.ed25519:
en_US: "Use Ed25519 instead of NIST P-256"
de_DE: "Ed25519 anstelle von NIST P-256 verwenden"
es_ES: "Usar Ed25519 en lugar de NIST P-256"
fr_FR: "Utiliser Ed25519 au lieu de NIST P-256"
pl_PL: "Użyj Ed25519 zamiast NIST P-256"
help.arg.emulate-missing-arch: help.arg.emulate-missing-arch:
en_US: "Emulate missing architecture using this one" en_US: "Emulate missing architecture using this one"
de_DE: "Fehlende Architektur mit dieser emulieren" de_DE: "Fehlende Architektur mit dieser emulieren"
@@ -2873,6 +2909,13 @@ help.arg.host-url:
fr_FR: "URL du serveur StartOS" fr_FR: "URL du serveur StartOS"
pl_PL: "URL serwera StartOS" pl_PL: "URL serwera StartOS"
help.arg.hostnames:
en_US: "Hostnames to include in the certificate"
de_DE: "Hostnamen, die in das Zertifikat aufgenommen werden sollen"
es_ES: "Nombres de host para incluir en el certificado"
fr_FR: "Noms d'hôtes à inclure dans le certificat"
pl_PL: "Nazwy hostów do uwzględnienia w certyfikacie"
help.arg.icon-path: help.arg.icon-path:
en_US: "Path to service icon file" en_US: "Path to service icon file"
de_DE: "Pfad zur Service-Icon-Datei" de_DE: "Pfad zur Service-Icon-Datei"
@@ -3076,6 +3119,13 @@ help.arg.platform:
fr_FR: "Identifiant de la plateforme cible" fr_FR: "Identifiant de la plateforme cible"
pl_PL: "Identyfikator platformy docelowej" pl_PL: "Identyfikator platformy docelowej"
help.arg.port:
en_US: "Port number"
de_DE: "Portnummer"
es_ES: "Número de puerto"
fr_FR: "Numéro de port"
pl_PL: "Numer portu"
help.arg.postgres-connection-url: help.arg.postgres-connection-url:
en_US: "PostgreSQL connection URL" en_US: "PostgreSQL connection URL"
de_DE: "PostgreSQL-Verbindungs-URL" de_DE: "PostgreSQL-Verbindungs-URL"
@@ -3160,6 +3210,13 @@ help.arg.server-id:
fr_FR: "Identifiant unique du serveur" fr_FR: "Identifiant unique du serveur"
pl_PL: "Unikalny identyfikator serwera" pl_PL: "Unikalny identyfikator serwera"
help.arg.set-as-default-outbound:
en_US: "Set as the default outbound gateway"
de_DE: "Als Standard-Ausgangs-Gateway festlegen"
es_ES: "Establecer como puerta de enlace de salida predeterminada"
fr_FR: "Définir comme passerelle de sortie par défaut"
pl_PL: "Ustaw jako domyślną bramę wychodzącą"
help.arg.set-signer-name: help.arg.set-signer-name:
en_US: "Set the signer name" en_US: "Set the signer name"
de_DE: "Unterzeichnernamen festlegen" de_DE: "Unterzeichnernamen festlegen"
@@ -3524,6 +3581,13 @@ help.arg.gateway-name:
fr_FR: "Nom de la passerelle" fr_FR: "Nom de la passerelle"
pl_PL: "Nazwa bramy" pl_PL: "Nazwa bramy"
help.arg.gateway-type:
en_US: "Type of gateway"
de_DE: "Typ des Gateways"
es_ES: "Tipo de puerta de enlace"
fr_FR: "Type de passerelle"
pl_PL: "Typ bramy"
help.arg.governor-name: help.arg.governor-name:
en_US: "CPU governor name" en_US: "CPU governor name"
de_DE: "CPU-Governor-Name" de_DE: "CPU-Governor-Name"
@@ -4050,6 +4114,13 @@ about.add-version-signer:
fr_FR: "Ajouter un signataire de version" fr_FR: "Ajouter un signataire de version"
pl_PL: "Dodaj sygnatariusza wersji" pl_PL: "Dodaj sygnatariusza wersji"
about.add-vhost-passthrough:
en_US: "Add vhost passthrough"
de_DE: "Vhost-Passthrough hinzufügen"
es_ES: "Agregar passthrough de vhost"
fr_FR: "Ajouter un passthrough vhost"
pl_PL: "Dodaj passthrough vhost"
about.add-wifi-ssid-password: about.add-wifi-ssid-password:
en_US: "Add wifi ssid and password" en_US: "Add wifi ssid and password"
de_DE: "WLAN-SSID und Passwort hinzufügen" de_DE: "WLAN-SSID und Passwort hinzufügen"
@@ -4099,6 +4170,13 @@ about.check-for-updates:
fr_FR: "Vérifier les mises à jour disponibles" fr_FR: "Vérifier les mises à jour disponibles"
pl_PL: "Sprawdź dostępne aktualizacje" pl_PL: "Sprawdź dostępne aktualizacje"
about.check-port-reachability:
en_US: "Check if a port is reachable from the WAN"
de_DE: "Prüfen, ob ein Port vom WAN erreichbar ist"
es_ES: "Comprobar si un puerto es accesible desde la WAN"
fr_FR: "Vérifier si un port est accessible depuis le WAN"
pl_PL: "Sprawdź, czy port jest osiągalny z WAN"
about.check-update-startos: about.check-update-startos:
en_US: "Check a given registry for StartOS updates and update if available" en_US: "Check a given registry for StartOS updates and update if available"
de_DE: "Ein bestimmtes Registry auf StartOS-Updates prüfen und bei Verfügbarkeit aktualisieren" de_DE: "Ein bestimmtes Registry auf StartOS-Updates prüfen und bei Verfügbarkeit aktualisieren"
@@ -4197,6 +4275,13 @@ about.commands-authentication:
fr_FR: "Commandes liées à l'authentification, comme connexion, déconnexion" fr_FR: "Commandes liées à l'authentification, comme connexion, déconnexion"
pl_PL: "Polecenia związane z uwierzytelnianiem, np. logowanie, wylogowanie" pl_PL: "Polecenia związane z uwierzytelnianiem, np. logowanie, wylogowanie"
about.commands-authorized-keys:
en_US: "Commands for managing authorized keys"
de_DE: "Befehle zur Verwaltung autorisierter Schlüssel"
es_ES: "Comandos para gestionar claves autorizadas"
fr_FR: "Commandes pour gérer les clés autorisées"
pl_PL: "Polecenia do zarządzania autoryzowanymi kluczami"
about.commands-backup: about.commands-backup:
en_US: "Commands related to backup creation and backup targets" en_US: "Commands related to backup creation and backup targets"
de_DE: "Befehle zur Backup-Erstellung und Backup-Zielen" de_DE: "Befehle zur Backup-Erstellung und Backup-Zielen"
@@ -4260,6 +4345,41 @@ about.commands-experimental:
fr_FR: "Commandes liées à la configuration d'options expérimentales comme zram et le gouverneur CPU" fr_FR: "Commandes liées à la configuration d'options expérimentales comme zram et le gouverneur CPU"
pl_PL: "Polecenia konfiguracji opcji eksperymentalnych jak zram i regulator CPU" pl_PL: "Polecenia konfiguracji opcji eksperymentalnych jak zram i regulator CPU"
about.commands-host-address-domain:
en_US: "Commands for managing host address domains"
de_DE: "Befehle zur Verwaltung von Host-Adressdomänen"
es_ES: "Comandos para gestionar dominios de direcciones del host"
fr_FR: "Commandes pour gérer les domaines d'adresses de l'hôte"
pl_PL: "Polecenia do zarządzania domenami adresów hosta"
about.commands-host-addresses:
en_US: "Commands for managing host addresses"
de_DE: "Befehle zur Verwaltung von Host-Adressen"
es_ES: "Comandos para gestionar direcciones del host"
fr_FR: "Commandes pour gérer les adresses de l'hôte"
pl_PL: "Polecenia do zarządzania adresami hosta"
about.commands-host-bindings:
en_US: "Commands for managing host bindings"
de_DE: "Befehle zur Verwaltung von Host-Bindungen"
es_ES: "Comandos para gestionar vínculos del host"
fr_FR: "Commandes pour gérer les liaisons de l'hôte"
pl_PL: "Polecenia do zarządzania powiązaniami hosta"
about.commands-host-private-domain:
en_US: "Commands for managing private domains for a host"
de_DE: "Befehle zur Verwaltung privater Domänen für einen Host"
es_ES: "Comandos para gestionar dominios privados de un host"
fr_FR: "Commandes pour gérer les domaines privés d'un hôte"
pl_PL: "Polecenia do zarządzania prywatnymi domenami hosta"
about.commands-host-public-domain:
en_US: "Commands for managing public domains for a host"
de_DE: "Befehle zur Verwaltung öffentlicher Domänen für einen Host"
es_ES: "Comandos para gestionar dominios públicos de un host"
fr_FR: "Commandes pour gérer les domaines publics d'un hôte"
pl_PL: "Polecenia do zarządzania publicznymi domenami hosta"
about.commands-host-system-ui: about.commands-host-system-ui:
en_US: "Commands for modifying the host for the system ui" en_US: "Commands for modifying the host for the system ui"
de_DE: "Befehle zum Ändern des Hosts für die System-UI" de_DE: "Befehle zum Ändern des Hosts für die System-UI"
@@ -4316,6 +4436,13 @@ about.commands-packages:
fr_FR: "Commandes liées aux paquets" fr_FR: "Commandes liées aux paquets"
pl_PL: "Polecenia związane z pakietami" pl_PL: "Polecenia związane z pakietami"
about.commands-port-forward:
en_US: "Commands for managing port forwards"
de_DE: "Befehle zur Verwaltung von Portweiterleitungen"
es_ES: "Comandos para gestionar reenvíos de puertos"
fr_FR: "Commandes pour gérer les redirections de ports"
pl_PL: "Polecenia do zarządzania przekierowaniami portów"
about.commands-registry: about.commands-registry:
en_US: "Commands related to the registry" en_US: "Commands related to the registry"
de_DE: "Befehle zum Registry" de_DE: "Befehle zum Registry"
@@ -4330,6 +4457,13 @@ about.commands-registry-db:
fr_FR: "Commandes pour interagir avec la base de données, comme dump et apply" fr_FR: "Commandes pour interagir avec la base de données, comme dump et apply"
pl_PL: "Polecenia interakcji z bazą danych, np. dump i apply" pl_PL: "Polecenia interakcji z bazą danych, np. dump i apply"
about.commands-registry-info:
en_US: "View or edit registry information"
de_DE: "Registry-Informationen anzeigen oder bearbeiten"
es_ES: "Ver o editar información del registro"
fr_FR: "Afficher ou modifier les informations du registre"
pl_PL: "Wyświetl lub edytuj informacje rejestru"
about.commands-restore-backup: about.commands-restore-backup:
en_US: "Commands for restoring package(s) from backup" en_US: "Commands for restoring package(s) from backup"
de_DE: "Befehle zum Wiederherstellen von Paketen aus dem Backup" de_DE: "Befehle zum Wiederherstellen von Paketen aus dem Backup"
@@ -4372,6 +4506,20 @@ about.commands-tunnel:
fr_FR: "Commandes liées à StartTunnel" fr_FR: "Commandes liées à StartTunnel"
pl_PL: "Polecenia związane z StartTunnel" pl_PL: "Polecenia związane z StartTunnel"
about.commands-tunnel-update:
en_US: "Commands for checking and applying tunnel updates"
de_DE: "Befehle zum Prüfen und Anwenden von Tunnel-Updates"
es_ES: "Comandos para verificar y aplicar actualizaciones del túnel"
fr_FR: "Commandes pour vérifier et appliquer les mises à jour du tunnel"
pl_PL: "Polecenia do sprawdzania i stosowania aktualizacji tunelu"
about.commands-tunnel-web:
en_US: "Commands for managing the tunnel web interface"
de_DE: "Befehle zur Verwaltung der Tunnel-Weboberfläche"
es_ES: "Comandos para gestionar la interfaz web del túnel"
fr_FR: "Commandes pour gérer l'interface web du tunnel"
pl_PL: "Polecenia do zarządzania interfejsem webowym tunelu"
about.commands-wifi: about.commands-wifi:
en_US: "Commands related to wifi networks i.e. add, connect, delete" en_US: "Commands related to wifi networks i.e. add, connect, delete"
de_DE: "Befehle zu WLAN-Netzwerken, z.B. hinzufügen, verbinden, löschen" de_DE: "Befehle zu WLAN-Netzwerken, z.B. hinzufügen, verbinden, löschen"
@@ -4512,6 +4660,13 @@ about.display-s9pk-manifest:
fr_FR: "Afficher le manifeste s9pk" fr_FR: "Afficher le manifeste s9pk"
pl_PL: "Wyświetl manifest s9pk" pl_PL: "Wyświetl manifest s9pk"
about.display-s9pk-root-sighash-and-maxsize:
en_US: "Display the s9pk root signature hash and max size"
de_DE: "Den s9pk-Root-Signaturhash und die maximale Größe anzeigen"
es_ES: "Mostrar el hash de firma raíz y el tamaño máximo del s9pk"
fr_FR: "Afficher le hachage de signature racine et la taille maximale du s9pk"
pl_PL: "Wyświetl hash podpisu głównego i maksymalny rozmiar s9pk"
about.display-server-metrics: about.display-server-metrics:
en_US: "Display server metrics" en_US: "Display server metrics"
de_DE: "Server-Metriken anzeigen" de_DE: "Server-Metriken anzeigen"
@@ -4575,6 +4730,20 @@ about.dump-address-resolution-table:
fr_FR: "Exporter la table de résolution d'adresses" fr_FR: "Exporter la table de résolution d'adresses"
pl_PL: "Zrzuć tabelę rozpoznawania adresów" pl_PL: "Zrzuć tabelę rozpoznawania adresów"
about.dump-port-forward-table:
en_US: "Dump port forward table"
de_DE: "Portweiterleitungstabelle ausgeben"
es_ES: "Volcar tabla de reenvío de puertos"
fr_FR: "Exporter la table de redirection de ports"
pl_PL: "Zrzuć tabelę przekierowań portów"
about.dump-vhost-proxy-table:
en_US: "Dump vhost proxy table"
de_DE: "Vhost-Proxy-Tabelle ausgeben"
es_ES: "Volcar tabla de proxy vhost"
fr_FR: "Exporter la table de proxy vhost"
pl_PL: "Zrzuć tabelę proxy vhost"
about.echo-message: about.echo-message:
en_US: "Echo a message back" en_US: "Echo a message back"
de_DE: "Eine Nachricht zurückgeben" de_DE: "Eine Nachricht zurückgeben"
@@ -4610,6 +4779,13 @@ about.enable-kiosk-mode:
fr_FR: "Activer le mode kiosque" fr_FR: "Activer le mode kiosque"
pl_PL: "Włącz tryb kiosku" pl_PL: "Włącz tryb kiosku"
about.enable-or-disable-port-forward:
en_US: "Enable or disable a port forward"
de_DE: "Portweiterleitung aktivieren oder deaktivieren"
es_ES: "Habilitar o deshabilitar un reenvío de puerto"
fr_FR: "Activer ou désactiver une redirection de port"
pl_PL: "Włącz lub wyłącz przekierowanie portu"
about.enable-webserver: about.enable-webserver:
en_US: "Enable the webserver" en_US: "Enable the webserver"
de_DE: "Webserver aktivieren" de_DE: "Webserver aktivieren"
@@ -4701,6 +4877,13 @@ about.get-developer-pubkey:
fr_FR: "Obtenir la clé publique du développeur" fr_FR: "Obtenir la clé publique du développeur"
pl_PL: "Pobierz klucz publiczny dewelopera" pl_PL: "Pobierz klucz publiczny dewelopera"
about.get-device-info:
en_US: "Display device information"
de_DE: "Geräteinformationen anzeigen"
es_ES: "Mostrar información del dispositivo"
fr_FR: "Afficher les informations de l'appareil"
pl_PL: "Wyświetl informacje o urządzeniu"
about.get-initialization-progress: about.get-initialization-progress:
en_US: "Get initialization progress" en_US: "Get initialization progress"
de_DE: "Initialisierungsfortschritt abrufen" de_DE: "Initialisierungsfortschritt abrufen"
@@ -4890,6 +5073,13 @@ about.list-paths-of-package-ingredients:
fr_FR: "Lister les chemins des composants du package" fr_FR: "Lister les chemins des composants du package"
pl_PL: "Wyświetl ścieżki składników pakietu" pl_PL: "Wyświetl ścieżki składników pakietu"
about.list-registry-categories:
en_US: "List registry categories"
de_DE: "Registry-Kategorien auflisten"
es_ES: "Listar categorías del registro"
fr_FR: "Lister les catégories du registre"
pl_PL: "Wyświetl kategorie rejestru"
about.list-registry-info-packages: about.list-registry-info-packages:
en_US: "List registry info and packages" en_US: "List registry info and packages"
de_DE: "Registry-Informationen und Pakete auflisten" de_DE: "Registry-Informationen und Pakete auflisten"
@@ -4918,6 +5108,13 @@ about.list-version-signers:
fr_FR: "Lister les signataires de versions" fr_FR: "Lister les signataires de versions"
pl_PL: "Wyświetl sygnatariuszy wersji" pl_PL: "Wyświetl sygnatariuszy wersji"
about.list-vhost-passthrough:
en_US: "List vhost passthroughs"
de_DE: "Vhost-Passthroughs auflisten"
es_ES: "Listar passthroughs de vhost"
fr_FR: "Lister les passthroughs vhost"
pl_PL: "Wyświetl passthrough vhost"
about.list-wifi-info: about.list-wifi-info:
en_US: "List wifi information" en_US: "List wifi information"
de_DE: "WLAN-Informationen auflisten" de_DE: "WLAN-Informationen auflisten"
@@ -4967,6 +5164,13 @@ about.manage-query-dns:
fr_FR: "Gérer et interroger le DNS" fr_FR: "Gérer et interroger le DNS"
pl_PL: "Zarządzaj i odpytuj DNS" pl_PL: "Zarządzaj i odpytuj DNS"
about.manage-ssl-certificates:
en_US: "Manage SSL certificates"
de_DE: "SSL-Zertifikate verwalten"
es_ES: "Gestionar certificados SSL"
fr_FR: "Gérer les certificats SSL"
pl_PL: "Zarządzaj certyfikatami SSL"
about.manage-ssl-vhost-proxy: about.manage-ssl-vhost-proxy:
en_US: "Manage SSL vhost proxy" en_US: "Manage SSL vhost proxy"
de_DE: "SSL-vhost-Proxy verwalten" de_DE: "SSL-vhost-Proxy verwalten"
@@ -5212,6 +5416,13 @@ about.remove-version-signer:
fr_FR: "Supprimer le signataire de version" fr_FR: "Supprimer le signataire de version"
pl_PL: "Usuń sygnatariusza wersji" pl_PL: "Usuń sygnatariusza wersji"
about.remove-vhost-passthrough:
en_US: "Remove vhost passthrough"
de_DE: "Vhost-Passthrough entfernen"
es_ES: "Eliminar passthrough de vhost"
fr_FR: "Supprimer un passthrough vhost"
pl_PL: "Usuń passthrough vhost"
about.remove-wifi-network: about.remove-wifi-network:
en_US: "Remove a wifi network" en_US: "Remove a wifi network"
de_DE: "Ein WLAN-Netzwerk entfernen" de_DE: "Ein WLAN-Netzwerk entfernen"
@@ -5275,6 +5486,13 @@ about.restart-service:
fr_FR: "Redémarrer un service" fr_FR: "Redémarrer un service"
pl_PL: "Uruchom ponownie usługę" pl_PL: "Uruchom ponownie usługę"
about.restart-tunnel:
en_US: "Reboot the tunnel server"
de_DE: "Den Tunnel-Server neu starten"
es_ES: "Reiniciar el servidor del túnel"
fr_FR: "Redémarrer le serveur tunnel"
pl_PL: "Uruchom ponownie serwer tunelu"
about.restore-packages-from-backup: about.restore-packages-from-backup:
en_US: "Restore packages from backup" en_US: "Restore packages from backup"
de_DE: "Pakete aus Backup wiederherstellen" de_DE: "Pakete aus Backup wiederherstellen"
@@ -5289,6 +5507,13 @@ about.run-service-action:
fr_FR: "Exécuter une action de service" fr_FR: "Exécuter une action de service"
pl_PL: "Uruchom akcję usługi" pl_PL: "Uruchom akcję usługi"
about.set-address-enabled-for-binding:
en_US: "Set a gateway address enabled for a binding"
de_DE: "Gateway-Adresse für eine Bindung aktivieren"
es_ES: "Establecer una dirección de gateway habilitada para un vínculo"
fr_FR: "Définir une adresse de passerelle activée pour une liaison"
pl_PL: "Ustaw adres bramy jako włączony dla powiązania"
about.set-country: about.set-country:
en_US: "Set the country" en_US: "Set the country"
de_DE: "Das Land festlegen" de_DE: "Das Land festlegen"
@@ -5296,6 +5521,13 @@ about.set-country:
fr_FR: "Définir le pays" fr_FR: "Définir le pays"
pl_PL: "Ustaw kraj" pl_PL: "Ustaw kraj"
about.set-default-outbound-gateway:
en_US: "Set the default outbound gateway"
de_DE: "Standard-Ausgangs-Gateway festlegen"
es_ES: "Establecer la puerta de enlace de salida predeterminada"
fr_FR: "Définir la passerelle sortante par défaut"
pl_PL: "Ustaw domyślną bramę wychodzącą"
about.set-echoip-urls: about.set-echoip-urls:
en_US: "Set the Echo IP service URLs" en_US: "Set the Echo IP service URLs"
de_DE: "Die Echo-IP-Dienst-URLs festlegen" de_DE: "Die Echo-IP-Dienst-URLs festlegen"
@@ -5338,6 +5570,13 @@ about.set-listen-address-for-webserver:
fr_FR: "Définir l'adresse d'écoute du serveur web" fr_FR: "Définir l'adresse d'écoute du serveur web"
pl_PL: "Ustaw adres nasłuchiwania serwera internetowego" pl_PL: "Ustaw adres nasłuchiwania serwera internetowego"
about.set-outbound-gateway-package:
en_US: "Set the outbound gateway for a package"
de_DE: "Ausgangs-Gateway für ein Paket festlegen"
es_ES: "Establecer la puerta de enlace de salida para un paquete"
fr_FR: "Définir la passerelle sortante pour un package"
pl_PL: "Ustaw bramę wychodzącą dla pakietu"
about.set-registry-icon: about.set-registry-icon:
en_US: "Set the registry icon" en_US: "Set the registry icon"
de_DE: "Das Registry-Symbol festlegen" de_DE: "Das Registry-Symbol festlegen"
@@ -5436,6 +5675,13 @@ about.stop-service:
fr_FR: "Arrêter un service" fr_FR: "Arrêter un service"
pl_PL: "Zatrzymaj usługę" pl_PL: "Zatrzymaj usługę"
about.ssl-generate-certificate:
en_US: "Generate an SSL certificate from the system root CA"
de_DE: "SSL-Zertifikat von der System-Root-CA generieren"
es_ES: "Generar un certificado SSL desde la CA raíz del sistema"
fr_FR: "Générer un certificat SSL depuis l'autorité racine du système"
pl_PL: "Wygeneruj certyfikat SSL z głównego CA systemu"
about.teardown-rebuild-containers: about.teardown-rebuild-containers:
en_US: "Teardown and rebuild containers" en_US: "Teardown and rebuild containers"
de_DE: "Container abbauen und neu erstellen" de_DE: "Container abbauen und neu erstellen"
@@ -5506,6 +5752,13 @@ about.update-firmware:
fr_FR: "Mettre à jour le firmware" fr_FR: "Mettre à jour le firmware"
pl_PL: "Zaktualizuj oprogramowanie układowe" pl_PL: "Zaktualizuj oprogramowanie układowe"
about.update-port-forward-label:
en_US: "Update the label of a port forward"
de_DE: "Bezeichnung einer Portweiterleitung aktualisieren"
es_ES: "Actualizar la etiqueta de un reenvío de puerto"
fr_FR: "Mettre à jour le libellé d'une redirection de port"
pl_PL: "Zaktualizuj etykietę przekierowania portu"
about.view-edit-gateway-configs: about.view-edit-gateway-configs:
en_US: "View and edit gateway configurations" en_US: "View and edit gateway configurations"
de_DE: "Gateway-Konfigurationen anzeigen und bearbeiten" de_DE: "Gateway-Konfigurationen anzeigen und bearbeiten"

View File

@@ -0,0 +1,13 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-auth-get-pubkey 1 "get-pubkey "
.SH NAME
start\-cli\-auth\-get\-pubkey \- Get the public key from the server
.SH SYNOPSIS
\fBstart\-cli auth get\-pubkey\fR [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Get the public key from the server
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,13 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-auth-login 1 "login "
.SH NAME
start\-cli\-auth\-login \- Login to a new auth session
.SH SYNOPSIS
\fBstart\-cli auth login\fR [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Login to a new auth session
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,16 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-auth-logout 1 "logout "
.SH NAME
start\-cli\-auth\-logout \- Logout from current auth session
.SH SYNOPSIS
\fBstart\-cli auth logout\fR [\fB\-h\fR|\fB\-\-help\fR] <\fISESSION\fR>
.SH DESCRIPTION
Logout from current auth session
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
<\fISESSION\fR>

View File

@@ -0,0 +1,13 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-auth-reset-password 1 "reset-password "
.SH NAME
start\-cli\-auth\-reset\-password \- Reset the password
.SH SYNOPSIS
\fBstart\-cli auth reset\-password\fR [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Reset the password
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,16 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-auth-session-kill 1 "kill "
.SH NAME
start\-cli\-auth\-session\-kill \- Terminate auth sessions
.SH SYNOPSIS
\fBstart\-cli auth session kill\fR [\fB\-h\fR|\fB\-\-help\fR] [\fIIDS\fR]
.SH DESCRIPTION
Terminate auth sessions
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
[\fIIDS\fR]
Session identifiers

View File

@@ -0,0 +1,16 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-auth-session-list 1 "list "
.SH NAME
start\-cli\-auth\-session\-list \- Display all auth sessions
.SH SYNOPSIS
\fBstart\-cli auth session list\fR [\fB\-\-format\fR] [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Display all auth sessions
.SH OPTIONS
.TP
\fB\-\-format\fR
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,20 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-auth-session 1 "session "
.SH NAME
start\-cli\-auth\-session \- List or kill auth sessions
.SH SYNOPSIS
\fBstart\-cli auth session\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIsubcommands\fR>
.SH DESCRIPTION
List or kill auth sessions
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.SH SUBCOMMANDS
.TP
start\-cli\-auth\-session\-kill(1)
Terminate auth sessions
.TP
start\-cli\-auth\-session\-list(1)
Display all auth sessions

View File

@@ -0,0 +1,29 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-auth 1 "auth "
.SH NAME
start\-cli\-auth \- Commands related to Authentication i.e. login, logout
.SH SYNOPSIS
\fBstart\-cli auth\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIsubcommands\fR>
.SH DESCRIPTION
Commands related to Authentication i.e. login, logout
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.SH SUBCOMMANDS
.TP
start\-cli\-auth\-get\-pubkey(1)
Get the public key from the server
.TP
start\-cli\-auth\-login(1)
Login to a new auth session
.TP
start\-cli\-auth\-logout(1)
Logout from current auth session
.TP
start\-cli\-auth\-reset\-password(1)
Reset the password
.TP
start\-cli\-auth\-session(1)
List or kill auth sessions

View File

@@ -0,0 +1,25 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-backup-create 1 "create "
.SH NAME
start\-cli\-backup\-create \- Create a backup for all packages
.SH SYNOPSIS
\fBstart\-cli backup create\fR [\fB\-\-old\-password\fR] [\fB\-\-package\-ids\fR] [\fB\-h\fR|\fB\-\-help\fR] <\fITARGET_ID\fR> <\fIPASSWORD\fR>
.SH DESCRIPTION
Create a backup for all packages
.SH OPTIONS
.TP
\fB\-\-old\-password\fR \fI<OLD_PASSWORD>\fR
Previous backup password
.TP
\fB\-\-package\-ids\fR \fI<PACKAGE_IDS>\fR
Package IDs to include in backup
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
<\fITARGET_ID\fR>
Backup target identifier
.TP
<\fIPASSWORD\fR>
Password for backup encryption

View File

@@ -0,0 +1,25 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-backup-target-cifs-add 1 "add "
.SH NAME
start\-cli\-backup\-target\-cifs\-add \- Add a new backup target
.SH SYNOPSIS
\fBstart\-cli backup target cifs add\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIHOSTNAME\fR> <\fIPATH\fR> <\fIUSERNAME\fR> [\fIPASSWORD\fR]
.SH DESCRIPTION
Add a new backup target
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
<\fIHOSTNAME\fR>
CIFS server hostname
.TP
<\fIPATH\fR>
Path on the CIFS share
.TP
<\fIUSERNAME\fR>
CIFS authentication username
.TP
[\fIPASSWORD\fR]
CIFS authentication password

View File

@@ -0,0 +1,16 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-backup-target-cifs-remove 1 "remove "
.SH NAME
start\-cli\-backup\-target\-cifs\-remove \- Remove existing backup target
.SH SYNOPSIS
\fBstart\-cli backup target cifs remove\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIID\fR>
.SH DESCRIPTION
Remove existing backup target
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
<\fIID\fR>
Backup target identifier

View File

@@ -0,0 +1,28 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-backup-target-cifs-update 1 "update "
.SH NAME
start\-cli\-backup\-target\-cifs\-update \- Update an existing backup target
.SH SYNOPSIS
\fBstart\-cli backup target cifs update\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIID\fR> <\fIHOSTNAME\fR> <\fIPATH\fR> <\fIUSERNAME\fR> [\fIPASSWORD\fR]
.SH DESCRIPTION
Update an existing backup target
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
<\fIID\fR>
Backup target identifier
.TP
<\fIHOSTNAME\fR>
CIFS server hostname
.TP
<\fIPATH\fR>
Path on the CIFS share
.TP
<\fIUSERNAME\fR>
CIFS authentication username
.TP
[\fIPASSWORD\fR]
CIFS authentication password

View File

@@ -0,0 +1,23 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-backup-target-cifs 1 "cifs "
.SH NAME
start\-cli\-backup\-target\-cifs \- Add, remove, or update a backup target
.SH SYNOPSIS
\fBstart\-cli backup target cifs\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIsubcommands\fR>
.SH DESCRIPTION
Add, remove, or update a backup target
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.SH SUBCOMMANDS
.TP
start\-cli\-backup\-target\-cifs\-add(1)
Add a new backup target
.TP
start\-cli\-backup\-target\-cifs\-remove(1)
Remove existing backup target
.TP
start\-cli\-backup\-target\-cifs\-update(1)
Update an existing backup target

View File

@@ -0,0 +1,25 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-backup-target-info 1 "info "
.SH NAME
start\-cli\-backup\-target\-info \- Display backup information for a package
.SH SYNOPSIS
\fBstart\-cli backup target info\fR [\fB\-\-format\fR] [\fB\-h\fR|\fB\-\-help\fR] <\fITARGET_ID\fR> <\fISERVER_ID\fR> <\fIPASSWORD\fR>
.SH DESCRIPTION
Display backup information for a package
.SH OPTIONS
.TP
\fB\-\-format\fR
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
<\fITARGET_ID\fR>
Backup target identifier
.TP
<\fISERVER_ID\fR>
Unique server identifier
.TP
<\fIPASSWORD\fR>
Password for backup encryption

View File

@@ -0,0 +1,16 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-backup-target-list 1 "list "
.SH NAME
start\-cli\-backup\-target\-list \- List existing backup targets
.SH SYNOPSIS
\fBstart\-cli backup target list\fR [\fB\-\-format\fR] [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
List existing backup targets
.SH OPTIONS
.TP
\fB\-\-format\fR
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,25 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-backup-target-mount 1 "mount "
.SH NAME
start\-cli\-backup\-target\-mount \- Mount a backup target
.SH SYNOPSIS
\fBstart\-cli backup target mount\fR [\fB\-\-server\-id\fR] [\fB\-\-allow\-partial\fR] [\fB\-h\fR|\fB\-\-help\fR] <\fITARGET_ID\fR> <\fIPASSWORD\fR>
.SH DESCRIPTION
Mount a backup target
.SH OPTIONS
.TP
\fB\-\-server\-id\fR \fI<SERVER_ID>\fR
Unique server identifier
.TP
\fB\-\-allow\-partial\fR
Leave media mounted even if backupfs fails to mount
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
<\fITARGET_ID\fR>
Backup target identifier
.TP
<\fIPASSWORD\fR>
Password for backup encryption

View File

@@ -0,0 +1,16 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-backup-target-umount 1 "umount "
.SH NAME
start\-cli\-backup\-target\-umount \- Unmount a backup target
.SH SYNOPSIS
\fBstart\-cli backup target umount\fR [\fB\-h\fR|\fB\-\-help\fR] [\fITARGET_ID\fR]
.SH DESCRIPTION
Unmount a backup target
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
[\fITARGET_ID\fR]
Backup target identifier

View File

@@ -0,0 +1,29 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-backup-target 1 "target "
.SH NAME
start\-cli\-backup\-target \- Commands related to a backup target
.SH SYNOPSIS
\fBstart\-cli backup target\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIsubcommands\fR>
.SH DESCRIPTION
Commands related to a backup target
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.SH SUBCOMMANDS
.TP
start\-cli\-backup\-target\-cifs(1)
Add, remove, or update a backup target
.TP
start\-cli\-backup\-target\-info(1)
Display backup information for a package
.TP
start\-cli\-backup\-target\-list(1)
List existing backup targets
.TP
start\-cli\-backup\-target\-mount(1)
Mount a backup target
.TP
start\-cli\-backup\-target\-umount(1)
Unmount a backup target

View File

@@ -0,0 +1,20 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-backup 1 "backup "
.SH NAME
start\-cli\-backup \- Commands related to backup creation and backup targets
.SH SYNOPSIS
\fBstart\-cli backup\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIsubcommands\fR>
.SH DESCRIPTION
Commands related to backup creation and backup targets
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.SH SUBCOMMANDS
.TP
start\-cli\-backup\-create(1)
Create a backup for all packages
.TP
start\-cli\-backup\-target(1)
Commands related to a backup target

View File

@@ -0,0 +1,22 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-db-apply 1 "apply "
.SH NAME
start\-cli\-db\-apply \- Update a database record
.SH SYNOPSIS
\fBstart\-cli db apply\fR [\fB\-\-allow\-model\-mismatch\fR] [\fB\-h\fR|\fB\-\-help\fR] <\fIEXPR\fR> [\fIPATH\fR]
.SH DESCRIPTION
Update a database record
.SH OPTIONS
.TP
\fB\-\-allow\-model\-mismatch\fR
Allow database model mismatch
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
<\fIEXPR\fR>
Database patch expression to apply
.TP
[\fIPATH\fR]
Path to the database

View File

@@ -0,0 +1,22 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-db-dump 1 "dump "
.SH NAME
start\-cli\-db\-dump \- Filter and query the database
.SH SYNOPSIS
\fBstart\-cli db dump\fR [\fB\-p\fR|\fB\-\-include\-private\fR] [\fB\-\-format\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fIPATH\fR]
.SH DESCRIPTION
Filter and query the database
.SH OPTIONS
.TP
\fB\-p\fR, \fB\-\-include\-private\fR
Include private data in output
.TP
\fB\-\-format\fR
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
[\fIPATH\fR]
Path to the database

View File

@@ -0,0 +1,22 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-db-put-ui 1 "ui "
.SH NAME
start\-cli\-db\-put\-ui \- Add path and value to db
.SH SYNOPSIS
\fBstart\-cli db put ui\fR [\fB\-\-format\fR] [\fB\-h\fR|\fB\-\-help\fR] <\fIPOINTER\fR> <\fIVALUE\fR>
.SH DESCRIPTION
Add path and value to db
.SH OPTIONS
.TP
\fB\-\-format\fR
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
<\fIPOINTER\fR>
JSON pointer to specific value
.TP
<\fIVALUE\fR>
JSON value to set

View File

@@ -0,0 +1,17 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-db-put 1 "put "
.SH NAME
start\-cli\-db\-put \- Command for adding UI record to db
.SH SYNOPSIS
\fBstart\-cli db put\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIsubcommands\fR>
.SH DESCRIPTION
Command for adding UI record to db
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.SH SUBCOMMANDS
.TP
start\-cli\-db\-put\-ui(1)
Add path and value to db

View File

@@ -0,0 +1,23 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-db 1 "db "
.SH NAME
start\-cli\-db \- Commands to interact with the db i.e. dump, put, apply
.SH SYNOPSIS
\fBstart\-cli db\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIsubcommands\fR>
.SH DESCRIPTION
Commands to interact with the db i.e. dump, put, apply
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.SH SUBCOMMANDS
.TP
start\-cli\-db\-apply(1)
Update a database record
.TP
start\-cli\-db\-dump(1)
Filter and query the database
.TP
start\-cli\-db\-put(1)
Command for adding UI record to db

View File

@@ -0,0 +1,13 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-diagnostic-disk-forget 1 "forget "
.SH NAME
start\-cli\-diagnostic\-disk\-forget \- Remove disk filesystem
.SH SYNOPSIS
\fBstart\-cli diagnostic disk forget\fR [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Remove disk filesystem
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,13 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-diagnostic-disk-repair 1 "repair "
.SH NAME
start\-cli\-diagnostic\-disk\-repair \- Repair disk corruption
.SH SYNOPSIS
\fBstart\-cli diagnostic disk repair\fR [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Repair disk corruption
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,20 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-diagnostic-disk 1 "disk "
.SH NAME
start\-cli\-diagnostic\-disk \- Command to remove disk from filesystem
.SH SYNOPSIS
\fBstart\-cli diagnostic disk\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIsubcommands\fR>
.SH DESCRIPTION
Command to remove disk from filesystem
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.SH SUBCOMMANDS
.TP
start\-cli\-diagnostic\-disk\-forget(1)
Remove disk filesystem
.TP
start\-cli\-diagnostic\-disk\-repair(1)
Repair disk corruption

View File

@@ -0,0 +1,13 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-diagnostic-error 1 "error "
.SH NAME
start\-cli\-diagnostic\-error \- Display diagnostic error
.SH SYNOPSIS
\fBstart\-cli diagnostic error\fR [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Display diagnostic error
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,28 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-diagnostic-kernel-logs 1 "kernel-logs "
.SH NAME
start\-cli\-diagnostic\-kernel\-logs \- Display kernel logs
.SH SYNOPSIS
\fBstart\-cli diagnostic kernel\-logs\fR [\fB\-l\fR|\fB\-\-limit\fR] [\fB\-c\fR|\fB\-\-cursor\fR] [\fB\-b\fR|\fB\-\-boot\fR] [\fB\-B\fR|\fB\-\-before\fR] [\fB\-f\fR|\fB\-\-follow\fR] [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Display kernel logs
.SH OPTIONS
.TP
\fB\-l\fR, \fB\-\-limit\fR \fI<LIMIT>\fR
Maximum number of log entries
.TP
\fB\-c\fR, \fB\-\-cursor\fR \fI<CURSOR>\fR
Start from this cursor position
.TP
\fB\-b\fR, \fB\-\-boot\fR \fI<BOOT>\fR
Filter logs by boot ID
.TP
\fB\-B\fR, \fB\-\-before\fR
Show logs before the cursor position
.TP
\fB\-f\fR, \fB\-\-follow\fR
Follow log output in real\-time
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,28 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-diagnostic-logs 1 "logs "
.SH NAME
start\-cli\-diagnostic\-logs \- Display OS logs
.SH SYNOPSIS
\fBstart\-cli diagnostic logs\fR [\fB\-l\fR|\fB\-\-limit\fR] [\fB\-c\fR|\fB\-\-cursor\fR] [\fB\-b\fR|\fB\-\-boot\fR] [\fB\-B\fR|\fB\-\-before\fR] [\fB\-f\fR|\fB\-\-follow\fR] [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Display OS logs
.SH OPTIONS
.TP
\fB\-l\fR, \fB\-\-limit\fR \fI<LIMIT>\fR
Maximum number of log entries
.TP
\fB\-c\fR, \fB\-\-cursor\fR \fI<CURSOR>\fR
Start from this cursor position
.TP
\fB\-b\fR, \fB\-\-boot\fR \fI<BOOT>\fR
Filter logs by boot ID
.TP
\fB\-B\fR, \fB\-\-before\fR
Show logs before the cursor position
.TP
\fB\-f\fR, \fB\-\-follow\fR
Follow log output in real\-time
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,13 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-diagnostic-rebuild 1 "rebuild "
.SH NAME
start\-cli\-diagnostic\-rebuild \- Teardown and rebuild containers
.SH SYNOPSIS
\fBstart\-cli diagnostic rebuild\fR [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Teardown and rebuild containers
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,13 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-diagnostic-restart 1 "restart "
.SH NAME
start\-cli\-diagnostic\-restart \- Restart the server
.SH SYNOPSIS
\fBstart\-cli diagnostic restart\fR [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Restart the server
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,32 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-diagnostic 1 "diagnostic "
.SH NAME
start\-cli\-diagnostic \- Commands to display logs, restart the server, etc
.SH SYNOPSIS
\fBstart\-cli diagnostic\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIsubcommands\fR>
.SH DESCRIPTION
Commands to display logs, restart the server, etc
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.SH SUBCOMMANDS
.TP
start\-cli\-diagnostic\-disk(1)
Command to remove disk from filesystem
.TP
start\-cli\-diagnostic\-error(1)
Display diagnostic error
.TP
start\-cli\-diagnostic\-kernel\-logs(1)
Display kernel logs
.TP
start\-cli\-diagnostic\-logs(1)
Display OS logs
.TP
start\-cli\-diagnostic\-rebuild(1)
Teardown and rebuild containers
.TP
start\-cli\-diagnostic\-restart(1)
Restart the server

View File

@@ -0,0 +1,16 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-disk-list 1 "list "
.SH NAME
start\-cli\-disk\-list \- List disk information
.SH SYNOPSIS
\fBstart\-cli disk list\fR [\fB\-\-format\fR] [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
List disk information
.SH OPTIONS
.TP
\fB\-\-format\fR
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,13 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-disk-repair 1 "repair "
.SH NAME
start\-cli\-disk\-repair \- Repair disk corruption
.SH SYNOPSIS
\fBstart\-cli disk repair\fR [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Repair disk corruption
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,20 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-disk 1 "disk "
.SH NAME
start\-cli\-disk \- Commands for listing disk info and repairing
.SH SYNOPSIS
\fBstart\-cli disk\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIsubcommands\fR>
.SH DESCRIPTION
Commands for listing disk info and repairing
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.SH SUBCOMMANDS
.TP
start\-cli\-disk\-list(1)
List disk information
.TP
start\-cli\-disk\-repair(1)
Repair disk corruption

View File

@@ -0,0 +1,16 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-echo 1 "echo "
.SH NAME
start\-cli\-echo \- Echo a message back
.SH SYNOPSIS
\fBstart\-cli echo\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIMESSAGE\fR>
.SH DESCRIPTION
Echo a message back
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
<\fIMESSAGE\fR>
Message to echo back

View File

@@ -0,0 +1,32 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-flash-os 1 "flash-os "
.SH NAME
start\-cli\-flash\-os \- Flash StartOS to a drive
.SH SYNOPSIS
\fBstart\-cli flash\-os\fR [\fB\-\-efi\fR] [\fB\-h\fR|\fB\-\-help\fR] <\fISQUASHFS\fR> <\fIDISK\fR>
.SH DESCRIPTION
Flash StartOS to a drive
.SH OPTIONS
.TP
\fB\-\-efi\fR \fI<EFI>\fR
Use EFI boot mode
.br
.br
\fIPossible values:\fR
.RS 14
.IP \(bu 2
true
.IP \(bu 2
false
.RE
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
<\fISQUASHFS\fR>
Path to squashfs image file
.TP
<\fIDISK\fR>
Target disk for installation

View File

@@ -0,0 +1,13 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-git-info 1 "git-info "
.SH NAME
start\-cli\-git\-info \- Display the git hash of this build
.SH SYNOPSIS
\fBstart\-cli git\-info\fR [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Display the git hash of this build
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,28 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-init-kernel-logs 1 "kernel-logs "
.SH NAME
start\-cli\-init\-kernel\-logs \- Display kernel logs
.SH SYNOPSIS
\fBstart\-cli init kernel\-logs\fR [\fB\-l\fR|\fB\-\-limit\fR] [\fB\-c\fR|\fB\-\-cursor\fR] [\fB\-b\fR|\fB\-\-boot\fR] [\fB\-B\fR|\fB\-\-before\fR] [\fB\-f\fR|\fB\-\-follow\fR] [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Display kernel logs
.SH OPTIONS
.TP
\fB\-l\fR, \fB\-\-limit\fR \fI<LIMIT>\fR
Maximum number of log entries
.TP
\fB\-c\fR, \fB\-\-cursor\fR \fI<CURSOR>\fR
Start from this cursor position
.TP
\fB\-b\fR, \fB\-\-boot\fR \fI<BOOT>\fR
Filter logs by boot ID
.TP
\fB\-B\fR, \fB\-\-before\fR
Show logs before the cursor position
.TP
\fB\-f\fR, \fB\-\-follow\fR
Follow log output in real\-time
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,13 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-init-key 1 "init-key "
.SH NAME
start\-cli\-init\-key \- Create a new developer key
.SH SYNOPSIS
\fBstart\-cli init\-key\fR [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Create a new developer key
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,28 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-init-logs 1 "logs "
.SH NAME
start\-cli\-init\-logs \- Display OS logs
.SH SYNOPSIS
\fBstart\-cli init logs\fR [\fB\-l\fR|\fB\-\-limit\fR] [\fB\-c\fR|\fB\-\-cursor\fR] [\fB\-b\fR|\fB\-\-boot\fR] [\fB\-B\fR|\fB\-\-before\fR] [\fB\-f\fR|\fB\-\-follow\fR] [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Display OS logs
.SH OPTIONS
.TP
\fB\-l\fR, \fB\-\-limit\fR \fI<LIMIT>\fR
Maximum number of log entries
.TP
\fB\-c\fR, \fB\-\-cursor\fR \fI<CURSOR>\fR
Start from this cursor position
.TP
\fB\-b\fR, \fB\-\-boot\fR \fI<BOOT>\fR
Filter logs by boot ID
.TP
\fB\-B\fR, \fB\-\-before\fR
Show logs before the cursor position
.TP
\fB\-f\fR, \fB\-\-follow\fR
Follow log output in real\-time
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,13 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-init-subscribe 1 "subscribe "
.SH NAME
start\-cli\-init\-subscribe \- Get initialization progress
.SH SYNOPSIS
\fBstart\-cli init subscribe\fR [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Get initialization progress
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,23 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-init 1 "init "
.SH NAME
start\-cli\-init \- Commands for initialization
.SH SYNOPSIS
\fBstart\-cli init\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIsubcommands\fR>
.SH DESCRIPTION
Commands for initialization
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.SH SUBCOMMANDS
.TP
start\-cli\-init\-kernel\-logs(1)
Display kernel logs
.TP
start\-cli\-init\-logs(1)
Display OS logs
.TP
start\-cli\-init\-subscribe(1)
Get initialization progress

View File

@@ -0,0 +1,13 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-kiosk-disable 1 "disable "
.SH NAME
start\-cli\-kiosk\-disable \- Disable kiosk mode
.SH SYNOPSIS
\fBstart\-cli kiosk disable\fR [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Disable kiosk mode
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,13 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-kiosk-enable 1 "enable "
.SH NAME
start\-cli\-kiosk\-enable \- Enable kiosk mode
.SH SYNOPSIS
\fBstart\-cli kiosk enable\fR [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Enable kiosk mode
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,20 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-kiosk 1 "kiosk "
.SH NAME
start\-cli\-kiosk \- Commands for kiosk mode
.SH SYNOPSIS
\fBstart\-cli kiosk\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIsubcommands\fR>
.SH DESCRIPTION
Commands for kiosk mode
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.SH SUBCOMMANDS
.TP
start\-cli\-kiosk\-disable(1)
Disable kiosk mode
.TP
start\-cli\-kiosk\-enable(1)
Enable kiosk mode

View File

@@ -0,0 +1,19 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-acme-init 1 "init "
.SH NAME
start\-cli\-net\-acme\-init \- Setup ACME certificate acquisition
.SH SYNOPSIS
\fBstart\-cli net acme init\fR <\fB\-\-provider\fR> [\fB\-\-contact\fR] [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Setup ACME certificate acquisition
.SH OPTIONS
.TP
\fB\-\-provider\fR \fI<PROVIDER>\fR
ACME provider identifier or url
.TP
\fB\-\-contact\fR \fI<CONTACT>\fR
Contact email for ACME certificate authority
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,16 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-acme-remove 1 "remove "
.SH NAME
start\-cli\-net\-acme\-remove \- Remove ACME certificate acquisition configuration
.SH SYNOPSIS
\fBstart\-cli net acme remove\fR <\fB\-\-provider\fR> [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Remove ACME certificate acquisition configuration
.SH OPTIONS
.TP
\fB\-\-provider\fR \fI<PROVIDER>\fR
ACME provider identifier or url
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,20 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-acme 1 "acme "
.SH NAME
start\-cli\-net\-acme \- Setup ACME certificate
.SH SYNOPSIS
\fBstart\-cli net acme\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIsubcommands\fR>
.SH DESCRIPTION
Setup ACME certificate
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.SH SUBCOMMANDS
.TP
start\-cli\-net\-acme\-init(1)
Setup ACME certificate acquisition
.TP
start\-cli\-net\-acme\-remove(1)
Remove ACME certificate acquisition configuration

View File

@@ -0,0 +1,16 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-dns-dump-table 1 "dump-table "
.SH NAME
start\-cli\-net\-dns\-dump\-table \- Dump address resolution table
.SH SYNOPSIS
\fBstart\-cli net dns dump\-table\fR [\fB\-\-format\fR] [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Dump address resolution table
.SH OPTIONS
.TP
\fB\-\-format\fR
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,19 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-dns-query 1 "query "
.SH NAME
start\-cli\-net\-dns\-query \- Test DNS configuration for a domain
.SH SYNOPSIS
\fBstart\-cli net dns query\fR [\fB\-\-format\fR] [\fB\-h\fR|\fB\-\-help\fR] <\fIFQDN\fR>
.SH DESCRIPTION
Test DNS configuration for a domain
.SH OPTIONS
.TP
\fB\-\-format\fR
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
<\fIFQDN\fR>
Fully qualified domain name

View File

@@ -0,0 +1,16 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-dns-set-static 1 "set-static "
.SH NAME
start\-cli\-net\-dns\-set\-static \- Set static DNS servers
.SH SYNOPSIS
\fBstart\-cli net dns set\-static\fR [\fB\-h\fR|\fB\-\-help\fR] [\fISERVERS\fR]
.SH DESCRIPTION
Set static DNS servers
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
[\fISERVERS\fR]
DNS servers to use

View File

@@ -0,0 +1,23 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-dns 1 "dns "
.SH NAME
start\-cli\-net\-dns \- Manage and query DNS
.SH SYNOPSIS
\fBstart\-cli net dns\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIsubcommands\fR>
.SH DESCRIPTION
Manage and query DNS
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.SH SUBCOMMANDS
.TP
start\-cli\-net\-dns\-dump\-table(1)
Dump address resolution table
.TP
start\-cli\-net\-dns\-query(1)
Test DNS configuration for a domain
.TP
start\-cli\-net\-dns\-set\-static(1)
Set static DNS servers

View File

@@ -0,0 +1,15 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-forward-dump-table 1 "dump-table "
.SH NAME
start\-cli\-net\-forward\-dump\-table
.SH SYNOPSIS
\fBstart\-cli net forward dump\-table\fR [\fB\-\-format\fR] [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
.SH OPTIONS
.TP
\fB\-\-format\fR
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,16 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-forward 1 "forward "
.SH NAME
start\-cli\-net\-forward \- Manage port forwards
.SH SYNOPSIS
\fBstart\-cli net forward\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIsubcommands\fR>
.SH DESCRIPTION
Manage port forwards
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.SH SUBCOMMANDS
.TP
start\-cli\-net\-forward\-dump\-table(1)

View File

@@ -0,0 +1,19 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-gateway-check-dns 1 "check-dns "
.SH NAME
start\-cli\-net\-gateway\-check\-dns \- Check DNS configuration for a gateway
.SH SYNOPSIS
\fBstart\-cli net gateway check\-dns\fR [\fB\-\-format\fR] [\fB\-h\fR|\fB\-\-help\fR] <\fIGATEWAY\fR>
.SH DESCRIPTION
Check DNS configuration for a gateway
.SH OPTIONS
.TP
\fB\-\-format\fR
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
<\fIGATEWAY\fR>
Gateway identifier

View File

@@ -0,0 +1,22 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-gateway-check-port 1 "check-port "
.SH NAME
start\-cli\-net\-gateway\-check\-port \- about.check\-port\-reachability
.SH SYNOPSIS
\fBstart\-cli net gateway check\-port\fR [\fB\-\-format\fR] [\fB\-h\fR|\fB\-\-help\fR] <\fIPORT\fR> <\fIGATEWAY\fR>
.SH DESCRIPTION
about.check\-port\-reachability
.SH OPTIONS
.TP
\fB\-\-format\fR
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
<\fIPORT\fR>
help.arg.port
.TP
<\fIGATEWAY\fR>
Gateway identifier

View File

@@ -0,0 +1,16 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-gateway-forget 1 "forget "
.SH NAME
start\-cli\-net\-gateway\-forget \- Forget a disconnected gateway
.SH SYNOPSIS
\fBstart\-cli net gateway forget\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIGATEWAY\fR>
.SH DESCRIPTION
Forget a disconnected gateway
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
<\fIGATEWAY\fR>
Gateway identifier

View File

@@ -0,0 +1,16 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-gateway-list 1 "list "
.SH NAME
start\-cli\-net\-gateway\-list \- Show gateways StartOS can listen on
.SH SYNOPSIS
\fBstart\-cli net gateway list\fR [\fB\-\-format\fR] [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
Show gateways StartOS can listen on
.SH OPTIONS
.TP
\fB\-\-format\fR
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,16 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-gateway-set-default-outbound 1 "set-default-outbound "
.SH NAME
start\-cli\-net\-gateway\-set\-default\-outbound \- about.set\-default\-outbound\-gateway
.SH SYNOPSIS
\fBstart\-cli net gateway set\-default\-outbound\fR [\fB\-h\fR|\fB\-\-help\fR] [\fIGATEWAY\fR]
.SH DESCRIPTION
about.set\-default\-outbound\-gateway
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
[\fIGATEWAY\fR]
Gateway identifier

View File

@@ -0,0 +1,19 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-gateway-set-name 1 "set-name "
.SH NAME
start\-cli\-net\-gateway\-set\-name \- Rename a gateway
.SH SYNOPSIS
\fBstart\-cli net gateway set\-name\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIID\fR> <\fINAME\fR>
.SH DESCRIPTION
Rename a gateway
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
<\fIID\fR>
Gateway identifier
.TP
<\fINAME\fR>
Name of the gateway

View File

@@ -0,0 +1,32 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-gateway 1 "gateway "
.SH NAME
start\-cli\-net\-gateway \- View and edit gateway configurations
.SH SYNOPSIS
\fBstart\-cli net gateway\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIsubcommands\fR>
.SH DESCRIPTION
View and edit gateway configurations
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.SH SUBCOMMANDS
.TP
start\-cli\-net\-gateway\-check\-dns(1)
Check DNS configuration for a gateway
.TP
start\-cli\-net\-gateway\-check\-port(1)
about.check\-port\-reachability
.TP
start\-cli\-net\-gateway\-forget(1)
Forget a disconnected gateway
.TP
start\-cli\-net\-gateway\-list(1)
Show gateways StartOS can listen on
.TP
start\-cli\-net\-gateway\-set\-default\-outbound(1)
about.set\-default\-outbound\-gateway
.TP
start\-cli\-net\-gateway\-set\-name(1)
Rename a gateway

View File

@@ -0,0 +1,35 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-tunnel-add 1 "add "
.SH NAME
start\-cli\-net\-tunnel\-add \- Add a new tunnel
.SH SYNOPSIS
\fBstart\-cli net tunnel add\fR [\fB\-\-set\-as\-default\-outbound\fR] [\fB\-h\fR|\fB\-\-help\fR] <\fINAME\fR> <\fICONFIG\fR> [\fIGATEWAY_TYPE\fR]
.SH DESCRIPTION
Add a new tunnel
.SH OPTIONS
.TP
\fB\-\-set\-as\-default\-outbound\fR
help.arg.set\-as\-default\-outbound
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
<\fINAME\fR>
Tunnel name
.TP
<\fICONFIG\fR>
WireGuard configuration
.TP
[\fIGATEWAY_TYPE\fR]
help.arg.gateway\-type
.br
.br
\fIPossible values:\fR
.RS 14
.IP \(bu 2
inbound\-outbound
.IP \(bu 2
outbound\-only
.RE

View File

@@ -0,0 +1,16 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-tunnel-remove 1 "remove "
.SH NAME
start\-cli\-net\-tunnel\-remove \- Remove a tunnel
.SH SYNOPSIS
\fBstart\-cli net tunnel remove\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIID\fR>
.SH DESCRIPTION
Remove a tunnel
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
<\fIID\fR>
Gateway identifier

View File

@@ -0,0 +1,20 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-tunnel 1 "tunnel "
.SH NAME
start\-cli\-net\-tunnel \- Manage tunnels
.SH SYNOPSIS
\fBstart\-cli net tunnel\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIsubcommands\fR>
.SH DESCRIPTION
Manage tunnels
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.SH SUBCOMMANDS
.TP
start\-cli\-net\-tunnel\-add(1)
Add a new tunnel
.TP
start\-cli\-net\-tunnel\-remove(1)
Remove a tunnel

View File

@@ -0,0 +1,27 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-vhost-add-passthrough 1 "add-passthrough "
.SH NAME
start\-cli\-net\-vhost\-add\-passthrough
.SH SYNOPSIS
\fBstart\-cli net vhost add\-passthrough\fR <\fB\-\-hostname\fR> <\fB\-\-listen\-port\fR> <\fB\-\-backend\fR> [\fB\-\-public\-gateway\fR] [\fB\-\-private\-ip\fR] [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
.SH OPTIONS
.TP
\fB\-\-hostname\fR \fI<HOSTNAME>\fR
.TP
\fB\-\-listen\-port\fR \fI<LISTEN_PORT>\fR
.TP
\fB\-\-backend\fR \fI<BACKEND>\fR
.TP
\fB\-\-public\-gateway\fR \fI<PUBLIC_GATEWAY>\fR
.TP
\fB\-\-private\-ip\fR \fI<PRIVATE_IP>\fR
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,15 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-vhost-dump-table 1 "dump-table "
.SH NAME
start\-cli\-net\-vhost\-dump\-table
.SH SYNOPSIS
\fBstart\-cli net vhost dump\-table\fR [\fB\-\-format\fR] [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
.SH OPTIONS
.TP
\fB\-\-format\fR
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,15 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-vhost-list-passthrough 1 "list-passthrough "
.SH NAME
start\-cli\-net\-vhost\-list\-passthrough
.SH SYNOPSIS
\fBstart\-cli net vhost list\-passthrough\fR [\fB\-\-format\fR] [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
.SH OPTIONS
.TP
\fB\-\-format\fR
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,18 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-vhost-remove-passthrough 1 "remove-passthrough "
.SH NAME
start\-cli\-net\-vhost\-remove\-passthrough
.SH SYNOPSIS
\fBstart\-cli net vhost remove\-passthrough\fR <\fB\-\-hostname\fR> <\fB\-\-listen\-port\fR> [\fB\-h\fR|\fB\-\-help\fR]
.SH DESCRIPTION
.SH OPTIONS
.TP
\fB\-\-hostname\fR \fI<HOSTNAME>\fR
.TP
\fB\-\-listen\-port\fR \fI<LISTEN_PORT>\fR
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help

View File

@@ -0,0 +1,22 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net-vhost 1 "vhost "
.SH NAME
start\-cli\-net\-vhost \- Manage SSL vhost proxy
.SH SYNOPSIS
\fBstart\-cli net vhost\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIsubcommands\fR>
.SH DESCRIPTION
Manage SSL vhost proxy
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.SH SUBCOMMANDS
.TP
start\-cli\-net\-vhost\-add\-passthrough(1)
.TP
start\-cli\-net\-vhost\-dump\-table(1)
.TP
start\-cli\-net\-vhost\-list\-passthrough(1)
.TP
start\-cli\-net\-vhost\-remove\-passthrough(1)

View File

@@ -0,0 +1,32 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-net 1 "net "
.SH NAME
start\-cli\-net \- Network commands
.SH SYNOPSIS
\fBstart\-cli net\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIsubcommands\fR>
.SH DESCRIPTION
Network commands
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.SH SUBCOMMANDS
.TP
start\-cli\-net\-acme(1)
Setup ACME certificate
.TP
start\-cli\-net\-dns(1)
Manage and query DNS
.TP
start\-cli\-net\-forward(1)
Manage port forwards
.TP
start\-cli\-net\-gateway(1)
View and edit gateway configurations
.TP
start\-cli\-net\-tunnel(1)
Manage tunnels
.TP
start\-cli\-net\-vhost(1)
Manage SSL vhost proxy

View File

@@ -0,0 +1,25 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-notification-create 1 "create "
.SH NAME
start\-cli\-notification\-create \- Persist a new notification
.SH SYNOPSIS
\fBstart\-cli notification create\fR [\fB\-p\fR|\fB\-\-package\fR] [\fB\-h\fR|\fB\-\-help\fR] <\fILEVEL\fR> <\fITITLE\fR> <\fIMESSAGE\fR>
.SH DESCRIPTION
Persist a new notification
.SH OPTIONS
.TP
\fB\-p\fR, \fB\-\-package\fR \fI<PACKAGE>\fR
Package identifier
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
<\fILEVEL\fR>
Notification severity level
.TP
<\fITITLE\fR>
Notification title
.TP
<\fIMESSAGE\fR>
Notification message content

View File

@@ -0,0 +1,22 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-notification-list 1 "list "
.SH NAME
start\-cli\-notification\-list \- List notifications
.SH SYNOPSIS
\fBstart\-cli notification list\fR [\fB\-\-format\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fIBEFORE\fR] [\fILIMIT\fR]
.SH DESCRIPTION
List notifications
.SH OPTIONS
.TP
\fB\-\-format\fR
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
[\fIBEFORE\fR]
Get notifications before this ID
.TP
[\fILIMIT\fR]
Maximum number of notifications to return

View File

@@ -0,0 +1,16 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-notification-mark-seen-before 1 "mark-seen-before "
.SH NAME
start\-cli\-notification\-mark\-seen\-before \- Mark notifications as seen before a given ID
.SH SYNOPSIS
\fBstart\-cli notification mark\-seen\-before\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIBEFORE\fR>
.SH DESCRIPTION
Mark notifications as seen before a given ID
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
<\fIBEFORE\fR>
Get notifications before this ID

View File

@@ -0,0 +1,16 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-notification-mark-seen 1 "mark-seen "
.SH NAME
start\-cli\-notification\-mark\-seen \- Mark notifications as seen
.SH SYNOPSIS
\fBstart\-cli notification mark\-seen\fR [\fB\-h\fR|\fB\-\-help\fR] [\fIIDS\fR]
.SH DESCRIPTION
Mark notifications as seen
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
[\fIIDS\fR]
Notification IDs

View File

@@ -0,0 +1,16 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-notification-mark-unseen 1 "mark-unseen "
.SH NAME
start\-cli\-notification\-mark\-unseen \- Mark notifications as unseen
.SH SYNOPSIS
\fBstart\-cli notification mark\-unseen\fR [\fB\-h\fR|\fB\-\-help\fR] [\fIIDS\fR]
.SH DESCRIPTION
Mark notifications as unseen
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
[\fIIDS\fR]
Notification IDs

View File

@@ -0,0 +1,16 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-notification-remove-before 1 "remove-before "
.SH NAME
start\-cli\-notification\-remove\-before \- Remove notifications before a given ID
.SH SYNOPSIS
\fBstart\-cli notification remove\-before\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIBEFORE\fR>
.SH DESCRIPTION
Remove notifications before a given ID
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
<\fIBEFORE\fR>
Get notifications before this ID

View File

@@ -0,0 +1,16 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-notification-remove 1 "remove "
.SH NAME
start\-cli\-notification\-remove \- Remove notification for IDs
.SH SYNOPSIS
\fBstart\-cli notification remove\fR [\fB\-h\fR|\fB\-\-help\fR] [\fIIDS\fR]
.SH DESCRIPTION
Remove notification for IDs
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.TP
[\fIIDS\fR]
Notification IDs

View File

@@ -0,0 +1,35 @@
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.TH start-cli-notification 1 "notification "
.SH NAME
start\-cli\-notification \- Create, delete, or list notifications
.SH SYNOPSIS
\fBstart\-cli notification\fR [\fB\-h\fR|\fB\-\-help\fR] <\fIsubcommands\fR>
.SH DESCRIPTION
Create, delete, or list notifications
.SH OPTIONS
.TP
\fB\-h\fR, \fB\-\-help\fR
Print help
.SH SUBCOMMANDS
.TP
start\-cli\-notification\-create(1)
Persist a new notification
.TP
start\-cli\-notification\-list(1)
List notifications
.TP
start\-cli\-notification\-mark\-seen(1)
Mark notifications as seen
.TP
start\-cli\-notification\-mark\-seen\-before(1)
Mark notifications as seen before a given ID
.TP
start\-cli\-notification\-mark\-unseen(1)
Mark notifications as unseen
.TP
start\-cli\-notification\-remove(1)
Remove notification for IDs
.TP
start\-cli\-notification\-remove\-before(1)
Remove notifications before a given ID

Some files were not shown because too many files have changed in this diff Show More