Random bits of Week #43, 2023: Patching the Voyagers

Remote accessing a mini PC in the Western Indian Ocean

This week, I was given a task to configure an Intel NUC-like mini PC, which will be sent to a remote island country in the Western Indian Ocean. This mini PC has two Ethernet ports (both will be connected to different ISPs) and one wireless interface (which will not be used however).

lspci
...
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)
03:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8821CE 802.11ac PCIe Wireless Network Adapter

After it's been connected, it will act as a network probe for one of our ongoing network measurements. However, the liaison there who will help us host the mini PC is not a professional IT guy. We have to take every precaution possible to prevent losing the remote connection.

Here is what I have done so far:

1. Linux distribution of choice: Debian 12.2. It's the latest Debian stable as of writing and we are more familiar with Debian-based distributions. Why not Ubuntu? Previously we had some networking issues (possibly DHCP-related) on Ubuntu with another mini PC of the same specs. Although we didn't figure out whether that's Ubuntu to blame, we chose Debian anyway for the myth of the "stability" of Debian over Ubuntu.

2. For remote login, we installed Tailscale. Cloudflare Tunnel and Ngrok [2] are also configured as backups. Cloudflare Tunnel also supports `--edge-bind-address` [1] to bind the tunnel to specific network interfaces. So I started two `cloudflared` instances using different systemd unit files and bound them to two Ethernet cards respectively (Does that make any sense?).

3. Set up automatic recovery from power loss in BIOS.

4. Set up auto reboot from kernel panic after 5 seconds using `/proc/sys/kernel/panic` [3].

5. Set up syslog forwarding using syslog-ng and Telegraf [4] to a centralized InfluxDB instance back here in Canada. In case of kernel panic/system hang or any connection loss, we can still query the last available system log from Grafana dashboards.

6. Set up Grafana's No-data alerting. I didn't use any external alert manager but stick to Grafana's built-in alerting capabilities. It's the first time I used Grafana's built-in alerting functions. At least it works and meets our demands for now.

However, things will be much easier if the mini PC has Intel vPro or any other IPMI capabilities. Unfortunately, it doesn't. We also considered whether we should purchase a PiKVM. We haven't, yet. We still have a few days before the mini PC is sent out. Meanwhile, we are trying to conduct some stress testing (just using `stress`?) on the mini PC to see whether there are any issues.

Software patching the Voyagers

NASA wants the Voyagers to age gracefully, so it’s time for a software patch

It's fascinating to see NASA is still trying to push software patches to decades-old Voyagers!

Voyagers current locations: https://voyager.jpl.nasa.gov/mission/status/

Voyager 1 Voyager 2
One-Way Light Time (hh:mm:ss) 22:29:04 18:43:07
Launch Date Mon, 05 Sept 1977 12:56:00 UTC Sat, 20 Aug 1977 14:29:00 UTC

One way light time is 22 hours...I happened to come across an IETF draft (draft-many-deepspace-ip-assessment-00 [5]) recently on "Revisiting the Use of the IP Protocol Stack in Deep Space: Assessment and Possible Solutions" and also a new IETF mailing list on deepspace [6]. TCP/IP was invented and implemented in the late 70s, CCSDS was founded in the 80s, and NASA definitely used some very specific protocols to communicate with the Voyagers. But what about the future? NASA currently releases version 4 of "LunaNet Interoperability Specification" [7]. How will the existing networking stack work on an interplanetary scale?

Flash Player Emulator

> Ruffle is an Adobe Flash Player emulator written in the Rust programming language. Ruffle targets both the desktop and the web using WebAssembly.

https://github.com/ruffle-rs/ruffle

[1]: Cloudflare Tunnel run parameters
https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/configure-tunnels/tunnel-run-parameters/#edge-bind-address

[2]: Ngrok
https://ngrok.com/

[3]: proc(5) - Linux man page
https://linux.die.net/man/5/proc

[4]: Telegraf / InfluxDB / Grafana as syslog receiver
https://nwmichl.net/2020/03/15/telegraf-influxdb-grafana-as-syslog-receiver/

[5]: Revisiting the Use of the IP Protocol Stack in Deep Space: Assessment and Possible Solutions
https://datatracker.ietf.org/doc/draft-many-deepspace-ip-assessment/

[6]: IETF deepspace mail archive
https://mailarchive.ietf.org/arch/browse/deepspace/

[7]: LunaNet Interoperability Specification

LunaNet Interoperability Specification


Leave a Reply

Your email address will not be published. Required fields are marked *