Skip to Content
CoreUpdate stock firmware

Update stock firmware and subsystems

sleepypod runs as userspace software on top of the Pod’s underlying embedded Linux operating system. The sleepypod biometrics pipeline communicates with the bed via stock background daemons (frankenfirmware) and onboard microcontroller firmware (firmware-sensor on the cover, and firmware-frozen in the hub).

While sleepypod Core updates itself with sp-update, the underlying stock firmware daemons and microcontroller binaries are not updated by sleepypod. Usually you do not need to touch stock firmware. However, there are scenarios where updating the stock subsystems is necessary.

When an update is needed

  • Cross-generation hardware pairings: For example, pairing a Pod 3 hub with a Pod 4 cover. Stock Pod 3 firmware only supports older STM32F0/F1 cover microcontrollers (0x08005000 flash base). The Pod 4 cover uses an STM32G0 microcontroller with bootloader v2.0.3.0 (0x08008000 flash base). Older firmware repeatedly sends a jump command to the wrong address, putting the cover into an infinite reboot loop (BL: Likely wrong Firmware address 8005000).
  • Missing NATS JetStream telemetry: Older hub firmware streams sensor data exclusively through legacy .RAW files on disk. Modern Eight Sleep firmware publishes CBOR frames directly to a local nats-server JetStream message bus (raw.sens.* and raw.frz.*), including batched piezo samples, a 2 Hz capacitive presence grid, and bed surface temperatures.
  • Hub thermal controller features: Updating firmware-frozen.bbin to version v1.5.156 adds raw.frz.health and raw.frz.therm telemetry for pump flow rates, fan RPMs, and TEC thermal power.

Never flash a full .swu image to a MediaTek-based hub.

Official .swu firmware packages distributed by Eight Sleep contain complete root filesystem archives built for the NXP i.MX 8M Mini platform (imx8mm-var-dart-eight). This includes the pod3 update channel, so Pod 3 hubs exist on more than one SoC. Check your board before doing anything else:

ssh -p 8822 root@POD_IP "cat /proc/device-tree/model; echo"

If it prints MT8365 Pumpkin, your hub runs on a MediaTek MT8365 SoC. Flashing the entire .swu file with swupdate or writing it to the eMMC will corrupt the kernel, device tree, and drivers, permanently bricking the board. This guide was written and verified on an MT8365 Pod 3 hub; use the extraction method below.

The userspace ARM64 binaries (frankenfirmware, libnats, nats-server) run across 64-bit ARM Linux platforms. However, microcontroller firmware images (.bbin) target specific hardware revisions: firmware-sensor-g0.bbin targets the STM32G0 microcontroller on Pod 4 covers, and firmware-frozen.bbin v1.5.156 has been verified on an MT8365 Pod 3 hub (pn 20500, hardware revision 0504). Compatibility with other hub controller hardware revisions has not been tested.


Option 1: Factory reset and official OTA (safest)

If you are using matching hardware (such as a Pod 3 hub with a Pod 3 cover, or a Pod 4 hub with a Pod 4 cover) and want the safest path to the latest vendor firmware, use the official factory reset procedure.

  1. Perform a hardware factory reset: Follow the firmware reset photos for your model in free-sleep’s installation guide . The hub boots from its factory backup partition and resets network settings.
  2. Pair with the official Eight Sleep app: Temporarily pair the Pod to the official mobile app over Wi-Fi. Allow the hub to connect to Eight Sleep’s servers and download official over-the-air (OTA) updates. Wait until all firmware and subsystem updates finish applying.
  3. Re-gain root access and reinstall sleepypod: Once the official firmware is up to date, re-open the root shell using the hardware serial procedure described in Open your Pod and get root, then install sleepypod following Install and update Core.

Limitation: Official OTA will not resolve cross-generation hardware pairings (for example, official servers will not push STM32G0 Pod 4 cover firmware to a registered Pod 3 hub). For mismatched hardware or offline setups, use Option 2 below.


Option 2: Manual subsystem update (surgical extraction)

This method extracts universal 64-bit ARM binaries and STM32 microcontroller firmware from an official .swu release and stages them directly on your rooted Pod.

Step 1: Back up the existing pod state

Connect to your Pod over SSH as root (port 8822) and back up the current daemon and firmware directory:

ssh -p 8822 root@POD_IP " if [ ! -e /opt/eight/bin/frankenfirmware.bak ]; then cp -a /opt/eight/bin/frankenfirmware /opt/eight/bin/frankenfirmware.bak; fi && \ if [ ! -e /opt/eight/lib/subsystem_updates.bak ]; then cp -a /opt/eight/lib/subsystem_updates /opt/eight/lib/subsystem_updates.bak; fi && \ if [ -f /opt/eight/config/machine.json ] && [ ! -e /opt/eight/config/machine.json.bak ]; then cp -a /opt/eight/config/machine.json /opt/eight/config/machine.json.bak; fi && \ mkdir -p /opt/eight/backup_nats && \ for f in /usr/bin/nats-server /usr/bin/nats /usr/lib64/libnats.so.3.11.0 /etc/nats.conf /etc/systemd/system/nats-server.service; do if [ -e \"\$f\" ] && [ ! -e \"/opt/eight/backup_nats/\$(basename \"\$f\")\" ]; then cp -a \"\$f\" /opt/eight/backup_nats/; fi done && \ if [ ! -e /opt/eight/backup_nats/was-enabled ]; then systemctl is-enabled nats-server.service > /opt/eight/backup_nats/was-enabled 2>/dev/null || true; fi "

Keep these backups available on the Pod. If you need to revert any changes, see Roll back to stock.

Step 2: Acquire the update archive

Firmware updates are distributed as .swu packages through Eight Sleep’s update API (update-api.8slp.net).

You can check the API directly using your device ID and current revision hash:

curl -is "https://update-api.8slp.net/v1/updates/pod3/1?deviceId=<id>&currentRev=<rev>"
  • When an update is available, the API returns HTTP/1.1 302 Found with a signed AWS CloudFront/S3 download URL in the Location: header pointing to https://fw.8slp.net/pod3-updates/pod3/releases/<hash>.swu.
  • Alternatively, public releases are indexed on the Wayback Machine . For example, 77af88bd8b941fed81786c09a9ac3cdb1e97b126.swu contains ARM64 daemons with NATS JetStream support, STM32G0 cover firmware (v5.5.9), and hub thermal firmware (v1.5.156).

Step 3: Extract universal artifacts on your computer

Download the .swu file to your computer and extract the root filesystem archive:

mkdir -p swu_extracted && cd swu_extracted # The .swu file is a standard cpio archive cpio -idmv < ../77af88bd8b941fed81786c09a9ac3cdb1e97b126.swu # Extract the rootfs tarball tar -xzf eightsleep-nxp-image-*.tar.gz

Locate the required universal artifacts:

Path in archiveArtifact description
opt/eight/bin/frankenfirmwareARM64 daemon with NATS JetStream and STM32G0 support
opt/eight/lib/subsystem_updates/firmware-sensor-g0.bbinSTM32G0 Pod 4 cover firmware (v5.5.9, ~136 KB)
opt/eight/lib/subsystem_updates/firmware-frozen.bbinHub thermal controller firmware (v1.5.156, ~120 KB)
usr/lib64/libnats.so.3.11.0C NATS shared library
usr/bin/nats-server & usr/bin/natsStatic ARM64 NATS server and management CLI
etc/nats.conf & lib/systemd/system/nats-server.serviceNATS service configuration and systemd unit

Step 4: Transfer artifacts to the Pod

From your computer within the swu_extracted directory, transfer the extracted binaries, libraries, firmware images, and service units to their target paths on the Pod over port 8822.

If you are re-running this step and nats-server is already running, stop it first (ssh -p 8822 root@POD_IP "systemctl stop nats-server.service"). Otherwise scp cannot overwrite the running binary and fails with Text file busy.

# Transfer the updated frankenfirmware daemon to staging in /tmp/ scp -P 8822 opt/eight/bin/frankenfirmware root@POD_IP:/tmp/frankenfirmware # Transfer the microcontroller cover firmware image to subsystem updates scp -P 8822 opt/eight/lib/subsystem_updates/firmware-sensor-g0.bbin \ root@POD_IP:/opt/eight/lib/subsystem_updates/ # Optional: transfer the hub thermal controller firmware (reflashes hub MCU on restart) scp -P 8822 opt/eight/lib/subsystem_updates/firmware-frozen.bbin \ root@POD_IP:/opt/eight/lib/subsystem_updates/ # Transfer the C NATS shared library to /usr/lib64/ scp -P 8822 usr/lib64/libnats.so.3.11.0 root@POD_IP:/usr/lib64/ # Transfer the NATS server and management CLI to /usr/bin/ scp -P 8822 usr/bin/nats-server usr/bin/nats root@POD_IP:/usr/bin/ # Transfer NATS configuration and systemd service unit scp -P 8822 etc/nats.conf root@POD_IP:/etc/nats.conf scp -P 8822 lib/systemd/system/nats-server.service root@POD_IP:/etc/systemd/system/nats-server.service

Hub controller firmware: Staging firmware-frozen.bbin in /opt/eight/lib/subsystem_updates/ causes frank to reflash the hub’s onboard thermal controller MCU upon restarting. This has been tested and verified on a Pod 3 hub (pn 20500, hardware revision 0504). If you only want to update cover support or NATS telemetry without reflashing the hub controller, omit copying firmware-frozen.bbin.

Step 5: Install and start NATS JetStream

On the Pod, configure the library loader, start the NATS service, and provision the raw JetStream stream:

# Link the shared library and update loader cache ssh -p 8822 root@POD_IP " ln -sf /usr/lib64/libnats.so.3.11.0 /usr/lib64/libnats.so.3.11 && \ ldconfig " # Set permissions and start nats-server ssh -p 8822 root@POD_IP " chmod +x /usr/bin/nats-server /usr/bin/nats && \ mkdir -p /persistent/jetstream && \ systemctl daemon-reload && \ systemctl enable --now nats-server.service " # Wait for the server, then provision the 'raw' stream frankenfirmware publishes to (skipped if it already exists) ssh -p 8822 root@POD_IP " for i in 1 2 3 4 5 6 7 8 9 10; do nats account info >/dev/null 2>&1 && break; sleep 1; done nats stream info raw >/dev/null 2>&1 || \ nats stream add raw --subjects 'raw.>' --storage file --retention limits --max-age 24h --max-bytes 512MB --discard old --defaults "

Step 6: Configure UART mapping and stage cover firmware (Pod 3 hub + Pod 4 cover)

Hardware scope: This step applies specifically when pairing a Pod 3 hub with a Pod 4 cover.

If you are updating a Pod 3 hub paired with its original Pod 3 cover (STM32F0/F1), do not overwrite firmware-sensor.bbin with the G0 binary or change machine.json—retain the stock port mapping and cover firmware so the original microcontroller can initialize normally.

When connecting a Pod 4 cover to a Pod 3 MediaTek Pumpkin board, verify the hardware serial port routing in /opt/eight/config/machine.json:

  • /dev/ttyS2 connects to the cover sensor port (pn 20600, Pod 4 cover).
  • /dev/ttyS1 connects to the hub thermal controller (pn 20500, water/TEC/pump controller).

Write the configuration and stage firmware-sensor-g0.bbin into the fallback locations so that uninitialized or blank cover bootloaders boot the STM32G0 image. set -e stops the script if any write fails:

ssh -p 8822 root@POD_IP " set -e mkdir -p /opt/eight/config cat > /opt/eight/config/machine.json << 'EOF' { \"F04\": { \"sensorPort\": \"/dev/ttyS2\", \"frozenPort\": \"/dev/ttyS1\" } } EOF # Copy the G0 firmware into the fallback locations for the Pod 4 cover cp /opt/eight/lib/subsystem_updates/firmware-sensor-g0.bbin /opt/eight/lib/subsystem_updates/firmware-sensor-legacy.bbin cp /opt/eight/lib/subsystem_updates/firmware-sensor-g0.bbin /opt/eight/lib/subsystem_updates/firmware-sensor.bbin "

Step 7: Deploy updated frankenfirmware

Stop the background service, place the new binary, and restart. /tmp is cleared on reboot, so if the Pod rebooted since Step 4, re-run the first scp in Step 4 before this step:

ssh -p 8822 root@POD_IP " if [ ! -f /tmp/frankenfirmware ]; then echo 'Error: /tmp/frankenfirmware missing; re-run the Step 4 scp' >&2; exit 1; fi && \ systemctl stop frank.service && \ cp /tmp/frankenfirmware /opt/eight/bin/frankenfirmware && \ chmod +x /opt/eight/bin/frankenfirmware && \ systemctl start frank.service "

Monitor the firmware log with journalctl -u frank -f. You should see frank recognize the bootloader, stage the firmware, and jump to the application:

frozen.cpp: handleCommand|[frozen] -> FW: Firmware initialized v1.5.156 Sensor.cpp: handleCommand|[sensor] -> FW: Firmware initialized v5.5.9

Step 8: Restart sleepypod biometrics services

Once the microcontrollers boot their new application firmwares, restart the sleepypod processing stack to connect to NATS:

ssh -p 8822 root@POD_IP " systemctl restart \ sleepypod-piezo-processor.service \ sleepypod-sleep-detector.service \ sleepypod-environment-monitor.service \ sleepypod-cover-buttons.service \ sleepypod-calibrator.service \ sleepypod.service "

Roll back to stock

If you encounter issues or wish to revert to stock daemons:

ssh -p 8822 root@POD_IP " set -e # Verify required backups exist before changing services if [ ! -f /opt/eight/bin/frankenfirmware.bak ] || [ ! -d /opt/eight/lib/subsystem_updates.bak ]; then echo 'Error: backups missing; aborting rollback' >&2 exit 1 fi # Stop the firmware daemon systemctl stop frank.service # Disable NATS service if installed if systemctl list-unit-files nats-server.service >/dev/null 2>&1 || [ -f /etc/systemd/system/nats-server.service ]; then systemctl disable --now nats-server.service fi # Restore frankenfirmware cp -a /opt/eight/bin/frankenfirmware.bak /opt/eight/bin/frankenfirmware # Safely stage and restore subsystem_updates rm -rf /opt/eight/lib/subsystem_updates.restoring cp -a /opt/eight/lib/subsystem_updates.bak /opt/eight/lib/subsystem_updates.restoring rm -rf /opt/eight/lib/subsystem_updates mv /opt/eight/lib/subsystem_updates.restoring /opt/eight/lib/subsystem_updates # Restore machine.json if backup exists if [ -f /opt/eight/config/machine.json.bak ]; then cp -a /opt/eight/config/machine.json.bak /opt/eight/config/machine.json else rm -f /opt/eight/config/machine.json fi # Clean up installed NATS files and restore pre-existing NATS files if any existed rm -f /usr/bin/nats-server /usr/bin/nats /usr/lib64/libnats.so.3.11.0 /usr/lib64/libnats.so.3.11 /etc/nats.conf /etc/systemd/system/nats-server.service if [ -d /opt/eight/backup_nats ]; then if [ -f /opt/eight/backup_nats/nats-server ]; then cp -a /opt/eight/backup_nats/nats-server /usr/bin/ fi if [ -f /opt/eight/backup_nats/nats ]; then cp -a /opt/eight/backup_nats/nats /usr/bin/ fi if [ -f /opt/eight/backup_nats/libnats.so.3.11.0 ]; then cp -a /opt/eight/backup_nats/libnats.so.3.11.0 /usr/lib64/ ldconfig fi if [ -f /opt/eight/backup_nats/nats.conf ]; then cp -a /opt/eight/backup_nats/nats.conf /etc/nats.conf fi if [ -f /opt/eight/backup_nats/nats-server.service ]; then cp -a /opt/eight/backup_nats/nats-server.service /etc/systemd/system/ fi fi ldconfig systemctl daemon-reload # Re-enable nats-server if it was enabled before Step 1 if [ \"\$(cat /opt/eight/backup_nats/was-enabled 2>/dev/null)\" = enabled ]; then systemctl enable --now nats-server.service fi # Restart frank to restore stock behavior systemctl start frank.service "

Microcontroller rollback behavior (untested): Restoring the old frankenfirmware and /opt/eight/lib/subsystem_updates/ does not by itself revert firmware already running on the microcontrollers. frank may reflash a microcontroller with the restored .bbin images when it starts, but this downgrade path has not been verified. An STM32G0 Pod 4 cover cannot boot stock STM32F0/F1 firmware, so after a rollback expect the cover to return to its bootloader loop unless you replace it with a native Pod 3 cover.


Verification

Check the system status on the Pod:

sp-status

Confirm that the sensor pipeline reports NATS JetStream:

pipeline: NATS JetStream (new firmware, April 2026+) nats-server: active (port 4222 open) jetstream: /persistent/jetstream present (<size>) jetstream-uploader.service: <state> raw stream: present (subject raw.>)

Confirm messages are arriving with the NATS CLI:

nats stream subjects raw

You should see these subjects. Rates were measured on a working Pod 3 hub with a Pod 4 cover:

  • raw.sens.piezo: about 1 message per second, each carrying a batch of piezo samples
  • raw.sens.capsense: capacitive presence grid, 2 messages per second
  • raw.sens.bedtemp: bed surface temperatures, roughly every 10 seconds
  • raw.frz.temp, raw.frz.water, raw.frz.health, raw.frz.therm: hub cooling loop, reservoir, and thermal controller status, roughly every 10 seconds

raw is capped at 512MB (--max-bytes), so once it fills, old messages are discarded and the per-subject counts stop growing. To check that data is still arriving, watch a subject live with nats sub raw.sens.capsense.

Finally, check /persistent/sleepypod-data/biometrics.db to confirm that cap_sense_frames and bed_temp rows are incrementing in real time.


Optional: Synchronizing the backup partition (Slot B)

Advanced and high risk.

This procedure is strictly limited to boards running on the verified Slot A eMMC boot path (/dev/mmcblk0p5, rootfs_a) described in the root access guide. Do not run this on SD-card installations (such as Pod 3 with an SD card), systems booted from Slot B, or unknown partition layouts.

Leaving Slot B untouched is recommended. If Slot B retains its original factory installation, a hardware factory reset will safely boot into a pristine stock environment. If you overwrite Slot B, factory reset will boot into this modified environment instead.

Only synchronize Slot B if you are completely confident in your installation and want to prevent a lockout or firmware mismatch if the hardware ever fails over to Slot B.

If you choose to synchronize Slot B:

ssh -p 8822 root@POD_IP " set -e trap 'umount /mnt/slot_b 2>/dev/null || true' EXIT # 1. Verify board variant and active boot slot (Slot A eMMC layout only) ACTIVE_ROOT=\"\$(findmnt -n -o SOURCE / 2>/dev/null || awk '\$2==\"/\" {print \$1}' /proc/mounts)\" CMDLINE=\"\$(cat /proc/cmdline 2>/dev/null || true)\" case \"\$CMDLINE \$ACTIVE_ROOT\" in *rootfs_a*|*mmcblk0p5*) ;; *) echo 'Error: Active system is not on the verified Slot A eMMC boot path (/dev/mmcblk0p5).' >&2 exit 1 ;; esac TARGET_DEV='/dev/mmcblk0p7' if [ ! -b \"\$TARGET_DEV\" ]; then echo \"Error: Inactive Slot B partition \$TARGET_DEV does not exist.\" >&2 exit 1 fi if [ \"\$ACTIVE_ROOT\" = \"\$TARGET_DEV\" ]; then echo \"Error: Target partition \$TARGET_DEV is currently active as root!\" >&2 exit 1 fi # 2. Mount Slot B and verify mount target mkdir -p /mnt/slot_b mount -o rw \"\$TARGET_DEV\" /mnt/slot_b MOUNTED_DEV=\"\$(findmnt -n -o SOURCE /mnt/slot_b 2>/dev/null || awk '\$2==\"/mnt/slot_b\" {print \$1}' /proc/mounts)\" if [ \"\$MOUNTED_DEV\" != \"\$TARGET_DEV\" ]; then echo \"Error: Mount mismatch: /mnt/slot_b is \$MOUNTED_DEV, expected \$TARGET_DEV.\" >&2 exit 1 fi # 3. Resolve effective authorized_keys path used by sshd for root on Slot A ROOT_HOME=\"\$(awk -F: '\$1==\"root\" {print \$6}' /etc/passwd 2>/dev/null || true)\" ROOT_HOME=\"\${ROOT_HOME:-/home/root}\" KEY_PATH='' ENTRIES=\"\$(sshd -T -C 'user=root,host=localhost,addr=127.0.0.1' 2>/dev/null | awk 'tolower(\$1)==\"authorizedkeysfile\" {\$1=\"\"; print \$0}')\" for entry in \$ENTRIES; do case \"\$entry\" in *%h*) cand=\"\${entry//%h/\$ROOT_HOME}\" ;; /*) cand=\"\$entry\" ;; *) cand=\"\$ROOT_HOME/\$entry\" ;; esac if [ -s \"\$cand\" ]; then KEY_PATH=\"\$cand\" break fi done if [ -z \"\$KEY_PATH\" ]; then for cand in \"\$ROOT_HOME/.ssh/authorized_keys\" \"\$ROOT_HOME/ssh/authorized_keys\" /etc/ssh/authorized_keys; do if [ -s \"\$cand\" ]; then KEY_PATH=\"\$cand\"; break; fi done fi if [ ! -s \"\$KEY_PATH\" ]; then echo 'Error: No valid root authorized_keys file found on Slot A.' >&2 exit 1 fi # 4. Copy authorized_keys to effective Slot B path and verify write DEST_KEY=\"/mnt/slot_b\$KEY_PATH\" mkdir -p \"\$(dirname \"\$DEST_KEY\")\" cp -a \"\$KEY_PATH\" \"\$DEST_KEY\" chmod 600 \"\$DEST_KEY\" # Verify destination copy succeeded and content matches before proceeding if [ ! -s \"\$DEST_KEY\" ] || ! cmp -s \"\$KEY_PATH\" \"\$DEST_KEY\"; then echo \"Error: Failed to verify authorized_keys write at \$DEST_KEY.\" >&2 exit 1 fi # Also populate root's home key locations on Slot B for recovery resilience for dir in \"/mnt/slot_b\$ROOT_HOME/.ssh\" \"/mnt/slot_b\$ROOT_HOME/ssh\"; do mkdir -p \"\$dir\" cp -a \"\$KEY_PATH\" \"\$dir/authorized_keys\" chmod 700 \"\$dir\" chmod 600 \"\$dir/authorized_keys\" done # Stock sshd_config_readonly reads /etc/ssh/authorized_keys as the login user (rewt), # so append root's keys there instead of overwriting, and leave /etc/ssh at its stock mode. mkdir -p /mnt/slot_b/etc/ssh touch /mnt/slot_b/etc/ssh/authorized_keys while IFS= read -r key || [ -n \"\$key\" ]; do [ -n \"\$key\" ] || continue grep -qxF -- \"\$key\" /mnt/slot_b/etc/ssh/authorized_keys || echo \"\$key\" >> /mnt/slot_b/etc/ssh/authorized_keys done < \"\$KEY_PATH\" # Stock Slot B ships 'AllowUsers rewt', which refuses root even with a valid key. # Allow key-only root login and add root to AllowUsers in both sshd configs. for cfg in /mnt/slot_b/etc/ssh/sshd_config /mnt/slot_b/etc/ssh/sshd_config_readonly; do [ -f \"\$cfg\" ] || continue sed -i -E 's/^#?[[:space:]]*PermitRootLogin[[:space:]]+.*/PermitRootLogin prohibit-password/' \"\$cfg\" if grep -qE '^[[:space:]]*AllowUsers[[:space:]]' \"\$cfg\" && ! grep -qE '^[[:space:]]*AllowUsers([[:space:]].*)?[[:space:]]root([[:space:]]|\$)' \"\$cfg\"; then sed -i -E 's/^([[:space:]]*AllowUsers[[:space:]].*)\$/\1 root/' \"\$cfg\" fi done # 5. Sync updated binaries, configurations, and NATS service cp -a /opt/eight/bin/frankenfirmware /mnt/slot_b/opt/eight/bin/frankenfirmware cp -a /opt/eight/lib/subsystem_updates/* /mnt/slot_b/opt/eight/lib/subsystem_updates/ mkdir -p /mnt/slot_b/opt/eight/config /mnt/slot_b/etc/systemd/system/multi-user.target.wants if [ -f /opt/eight/config/machine.json ]; then cp -a /opt/eight/config/machine.json /mnt/slot_b/opt/eight/config/machine.json else rm -f /mnt/slot_b/opt/eight/config/machine.json fi cp -a /usr/lib64/libnats.so.3.11* /mnt/slot_b/usr/lib64/ cp -a /usr/bin/nats* /mnt/slot_b/usr/bin/ cp -a /etc/nats.conf /mnt/slot_b/etc/nats.conf cp -a /etc/systemd/system/nats-server.service /mnt/slot_b/etc/systemd/system/nats-server.service ln -sf /etc/systemd/system/nats-server.service /mnt/slot_b/etc/systemd/system/multi-user.target.wants/nats-server.service # 6. Flush changes and safely unmount sync trap - EXIT umount /mnt/slot_b "

Source reference: sp-status output format · Root SSH key resolution in the Core installer  · free-sleep firmware reset and slot check  · Archived Pod 3 .swu releases. Stream limits, subject rates, serial port mapping, and the Slot B sshd configuration were checked on an MT8365 Pod 3 hub (pn 20500, revision 0504) with a Pod 4 cover, using artifacts extracted from release 77af88bd8b941fed81786c09a9ac3cdb1e97b126.

Last updated on