From c3a7626361a9bf0481e10d63c1a1e23a55bf2b57 Mon Sep 17 00:00:00 2001 From: forksand Date: Wed, 3 Mar 2021 16:47:27 -0700 Subject: [PATCH] Notes, BoM updates/re-org --- hardware/cables/README.md | 20 +++++++++++++ hardware/clock/README.md | 57 ++++++++++++++++++++++++++++++++++++ hardware/cubolibre-bom.ods | Bin 19746 -> 25199 bytes hardware/keyboard/README.md | 0 hardware/monitor/README.md | 16 ++++++++++ hardware/mouse/README.md | 0 hardware/network/README.md | 15 ++++++++++ hardware/random/README.md | 7 +++++ hardware/usb/README.md | 23 +++++++++++++++ hardware/video/README.md | 14 +++++++++ software/apps/README.md | 11 +++++++ software/os/README.md | 33 +++++++++++++++++++++ 12 files changed, 196 insertions(+) create mode 100644 hardware/cables/README.md create mode 100644 hardware/clock/README.md create mode 100644 hardware/keyboard/README.md create mode 100644 hardware/monitor/README.md create mode 100644 hardware/mouse/README.md create mode 100644 hardware/random/README.md create mode 100644 hardware/usb/README.md create mode 100644 hardware/video/README.md diff --git a/hardware/cables/README.md b/hardware/cables/README.md new file mode 100644 index 0000000..57d9d5f --- /dev/null +++ b/hardware/cables/README.md @@ -0,0 +1,20 @@ +# Cubo Libre Cables + +* RF secure keyboard cable. + +* RF secure mouse cable. + +* RF secure video cable. + +* RF secure power cable. + +* RF secure GPS cable. + +* RF secure microphone cable. + +* RF secure speaker cable. + +* RF secure misc cabling (e.g. USB webcam). + +* Hardware cut off of cables. + diff --git a/hardware/clock/README.md b/hardware/clock/README.md new file mode 100644 index 0000000..fbd6341 --- /dev/null +++ b/hardware/clock/README.md @@ -0,0 +1,57 @@ +# Cubo Libre Clock + +Time source will come from Internet NTP and external GPS antenna for +confirmation. Other external time sources will be considered. + +## Precision Time Protocol (PTP) + +Use precision time protocol within the cluster. + +* Mellanox SN2100 / SN2700 (Spectrum silicon) switches with MLNX-OS/ONYX (in GA since 3.6.5011) for PTP IEEE-1588 (SMPTE ST2059-2 profile)[41] or with Cumulus Linux (from version 3.6) with the ptp4l Linux package.[42] + +## Network Time Protocol (NTP) + +Network Time Protocol is used for time sync from the Internet. + +* Run time server on cluster firewall. + +## GPS + +* External GPS with serial connection to cluster firewall. + +## WWVB + +* WWVB +https://en.wikipedia.org/wiki/WWVB +303-499-7111 +https://www.nist.gov/time-distribution/radio-station-wwvb +https://github.com/TaaviE/radioclkd2 + +BPSK new signal on WWVB since 2012 (?) +http://everset-tech.com/signal/ +http://everset-tech.com/wp-content/uploads/2014/11/CMOSBPSKReceiver.pdf + + +## CDMA + +* CDMA time server + http://beaglesoft.com/celsynhome.htm + Garmin CDMA35 + Multitech CDMA + +## ACTS + +* The NIST transmits in its own standard Automated Computer Timer Service (ACTS). It is contacted via TCP/IP on port 13 + + +## Misc + +* Explore SDR/FPGA possibilities. + +* Very particular about very good computer time: +"The International Occultation Timing Association" +http://www.lunar-occultations.com/iota/iotandx.htm +http://beaglesoft.com/radsynreceiver.htm + +* IRIG-B + diff --git a/hardware/cubolibre-bom.ods b/hardware/cubolibre-bom.ods index 10e4ca4d2c3d40761bdb4e83b1d6ce98a21da32f..88bb7e1ccb1e514028b1a496c671ca60e0dce543 100644 GIT binary patch delta 21619 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 Ql_U0CjfL>w$>rSt08r6;?*IS* delta 16099 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 diff --git a/hardware/keyboard/README.md b/hardware/keyboard/README.md new file mode 100644 index 0000000..e69de29 diff --git a/hardware/monitor/README.md b/hardware/monitor/README.md new file mode 100644 index 0000000..a5bd9ec --- /dev/null +++ b/hardware/monitor/README.md @@ -0,0 +1,16 @@ +# Cubo Libre Monitor + +* XXX Not libre hardware XXX + +* RF/EMI secure monitor. + +* 1920 x 1080 pixels. + +* Secure cables. + +* No microphone. + +* No speakers. + +* Make sure GPDI behaves. + diff --git a/hardware/mouse/README.md b/hardware/mouse/README.md new file mode 100644 index 0000000..e69de29 diff --git a/hardware/network/README.md b/hardware/network/README.md index e69de29..a76ae94 100644 --- a/hardware/network/README.md +++ b/hardware/network/README.md @@ -0,0 +1,15 @@ +# Cubo Libre Network + +The Cubo Libre mini-cluster will have a simple network design. + +* Each motherboard has one 1 gig copper ethernet port. + +* Each motherboard plugs into copper ethernet switch. + +* Firewall has only external network connection, using 10G fiber. + +* RF from internal copper network communication will be contained in the cabinet. + +* Network switch will likely be non-free hardware with ARM processor +running free software. + diff --git a/hardware/random/README.md b/hardware/random/README.md new file mode 100644 index 0000000..5accbf3 --- /dev/null +++ b/hardware/random/README.md @@ -0,0 +1,7 @@ +# Cubo Libre Hardware Random Numbers + +How random numbers are generated on Cubo Libre. + +## Entropy + +Entropy sources. diff --git a/hardware/usb/README.md b/hardware/usb/README.md new file mode 100644 index 0000000..df4437e --- /dev/null +++ b/hardware/usb/README.md @@ -0,0 +1,23 @@ +# Cubo Libre USB + +## Hardware Firewall + +See: + +* https://code.forksand.com/forksand/usb-firewall + +* Provide mechanical port blockers for unused ports. + +* Device only pass certain USB IDs, HID, etc. + +## Authentication + +* Nitrokey +https://www.nitrokey.com/ + +* Yubi. + +* Purism key. + +* Ledger. + diff --git a/hardware/video/README.md b/hardware/video/README.md new file mode 100644 index 0000000..4e7b65c --- /dev/null +++ b/hardware/video/README.md @@ -0,0 +1,14 @@ +# Cubo Libre Video + +* XXX Not libre hardware XXX + +* Radeon RX550. + +* GPDI (HDMI) video out. + +* DVI video out. + +* DP video out. + +* Confirm libre stack. + diff --git a/software/apps/README.md b/software/apps/README.md index e69de29..f578957 100644 --- a/software/apps/README.md +++ b/software/apps/README.md @@ -0,0 +1,11 @@ +# Cubo Libre Applications + +Secure applications. + +* User applications will run on the Debian GNU/Linux operating +system GUI and compute nodes. + +* Application load processing will be spread out in the cluster. + +* Possibly pre-seed with requested blockchains. + diff --git a/software/os/README.md b/software/os/README.md index e69de29..1397e8c 100644 --- a/software/os/README.md +++ b/software/os/README.md @@ -0,0 +1,33 @@ +# Cubo Libre Operating Systems +The main operating systems for the Cubo Libre mini-cluster +are Debian and OpenBSD. Debian is used for compute and +GUI nodes. OpenBSD is used for the firewall. + +## Debian +Debian has a well advanced port of 64-bit RISC-V already. + +* https://www.debian.org + +## OpenBSD +OpenBSD is known for being "the most" secure. +It will be used for the firewall. + +* https://www.openbsd.org + +* All network traffic in and out of the cluster passes through +the firewall. + +* Time source. +Network Time Protocol (NTP) and/or +Precision Time Protocol (PTP) server. + +* Random number generation seeds. + +* PF firewall. + +* Openbsd-current. + +* Proxy all traffic to external data center. + +* Generate entropy for other systems. +