...
Connecting the header cables to the PiSugar and RaspberryPi
Flashing the PiKVM image
Download the latest DIY PiKVM image for the HDMI-CSI bridge for the RaspberryPi Zero 2W and sha hash.
Validate the download image:
Code Block PiKVM % shasum v2-hdmi-zero2w-latest.img.xz cdb1bb899a72351a2da924ceb0675130d01e46ed v2-hdmi-zero2w-latest.img.xz PiKVM % cat v2-hdmi-zero2w-latest.img.xz.sha1 cdb1bb899a72351a2da924ceb0675130d01e46ed%
Download the latest version of the DappNode ISO for Debian, attended, and note the sha1 hash.
Download and install the Raspberry Pi imager.
Run RPi Imager:
Press NO FILTERING then CHOOSE OS and select Use custom image at bottom of the list:
After clicking on this item, select the image file for PiKVM that you downloaded earlier then click CHOOSE STORAGE:
Insert the memory card into the card reader. Choose the card reader from this list. Be careful and choose the right device:
After choosing the memory card, press the WRITE button. Confirm the operation when you are asked about it:
Mount the PiKVM memory card, and edit the file
pikvm.txt
. If you haven't enabled PiKVM yet, this file will contain a single lineFIRST_BOOT=1
.
...
Install and configure Lets Encrypt Certificates for the PiKVM
Configuring PiSugar
Add a pisugar user to the PiKVM (Raspberry Pi):
Connect via ssh to the PiKVM device.
Add a pisugar user:
Code Block |
---|
[root@pikvm ~]# rw
+ mount -o remount,rw /
+ mount -o remount,rw /boot
+ set +x
=== PiKVM is in Read-Write mode ===
useradd --system -s /usr/bin/bash pisugar
usermod -d /opt/pisugar -m pisugar
passwd pisugar |
Add pisugar to /etc/sudoers
Download latest
pisugar-archlinux_<version>_all.tar.gz
from https://github.com/PiSugar/pisugar-power-manager-rs/releases
Code Block |
---|
su - pisugar
tar -xvf pisugar-archlinux_<version>_all.tar.gz |
Edit the PKBUILD to support the RPi Zero 2W:
Code Block |
---|
arch=('arm' 'armhf' 'aarch64' 'x86_64') |
Attaching the lid and connecting external cables
NUC - Netrabrick NUClid cabling
...
Identifier
...
Header
...
8
...
COM Header
...
9
...
USB2 Header
...
10
...
Front Panel Header
COM header
Use of this header is not really necessary, but it could be connected to the Raspberry Pi used by PiKVM to provide a serial terminal login access to the server.
...
Pin
...
RS232 signal
...
Connection
...
1
...
DCD
...
Empty
...
2
...
RXD
...
RPi GPIO14 (UART TX)
...
3
...
TXD
...
RPi GPIO15 (UART RX)
...
4
...
DTR
...
Empty
...
5
...
GND
...
Rpi GND
...
6
...
DSR
...
Empty
...
7
...
RTS
...
Empty
...
8
...
CTS
...
Empty
...
9
...
RI#
...
Empty
...
10
...
Empty
...
Empty
NUC USB2.0 header
The USB2.0 header is essential for providing keyboard and mouse HID access from the PiKVM instance on the Raspberry Pi to the server. Also, this header provides power to the SugarPi3, which in turn, powers the PiKVM Raspberry Pi.
Notice that VCC (5v) is NOT provided to the MicroUSB connection on the Raspberry Pi. This is the equivalent of blocking the VCC pin, as described here.
...
Pin
...
USB Signal
...
Connection
...
1
...
VCC
...
Pin 8 (5v in) on SugarPi3
...
2
...
VCC
...
Current connector to power fan?
...
3
...
USB0-
...
MicroUSB cable USB- (green)
...
4
...
USB1-
...
Empty
...
5
...
USB0+
...
MicroUSB cable USB+ (white)
...
6
...
USB1+
...
Empty
...
7
...
GND
...
Pin 1 on SugarPi 3 (next to Pin 8) AND USB ground (black)
...
8
...
GND
...
Current ground connector to fan?
...
9
...
No Connect
...
Empty
...
10
...
Empty
...
Empty
Info |
---|
Check dmesg and lsusb on both the Netrabrick and the Raspberry Pi to see if the USB connection is working. From lsusb on the Netrabrick you should see something similar to: Bus 004 Device 005: ID 1d6b:0104 Linux Foundation Multifunction Composite Gadget |
NUC Front Panel header
Connecting the NUC Front Panel header to the Raspberry Pi is necessary if want ATX power control from PiKVM.
...
Pin
...
Header
...
Function
...
Connection
...
1
...
HD_LED
...
HD_PWR
...
Connect to RPi, pin (red)
...
3
...
HD_Active
...
Connect to RPi, pin 22 (red)
...
2
...
PWR_LED
...
PWR LED+
...
Connect to Front Panel LED
...
4
...
PWR LED-
...
5
...
RESET
...
GND
...
Connect to RPi, pin (red)
...
7
...
RST BTN
...
Connect to RPi, pin 27 (red)
...
6
...
PW_ON
...
PWR BTN
...
Connect to Front Panel Button
...
8
...
GND
...
9
...
No Connect
...
+5V
...
No connect
...
10
...
Empty
...
Empty
...
Empty
This is how ATX wiring between the server and Raspberry Pi are instrumented:
As described here:
With this part, you will be able to remotely turn on, turn off and restart your computer!
x4 MOSFET relays OMRON G3VM-61A1 or OMRON G3VM-61AY1.
Don't use random relay modules or random optocouplers! Some of these may not be sensitive enough for the Raspberry Pi, some others may be low-level controlled. Either use relays that are activated by a high logic level, or follow the design provided and buy an OMRON. See details here.x4 390 Ohm resistors (see here for alternatives).
2x 4.7 kOhm resistors.
x10+ dupont wires male-male.
x1 a breadboard.
various wires for the breadboard.
USB connections
The lsusb command should report the different connected USB devices:
...
Device
...
lsusb report
...
LoRA dongle (connection to Vinduino)
...
Cypress Semiconductor Corp. USB-UART LP
...
RT-SDR (connection to weather station)
...
Realtek Semiconductor Corp. RTL2838 DVB-T
...
PiKVM
...
Linux Foundation Multifunction Composite Gadget
...
By installing and configuring a Let’s Encrypt Certificate, we can enable validated SSL connections to the PiKVM web interface. To do this, we need a valid domain name. For this, we will register the following names:
Code Block |
---|
netrabrick.(bodega).openvino.org
pikvm.(bodega).openvino.org |
Replacing (bodega) with the name of the winery…in this example Costaflores.
Currently, the registration of the DNS records for these domain entries is done manually, but eventually, the decentralized OpenVino Netrabricks will assume the DNS functions for the openvino.org domain and subdomains (and openvino.exchange).
1. Configure PST storage.
Code Block |
---|
[root@pikvm ~]# kvmd-pstrun -- true
-- INFO -- Opening PST session ...
-- INFO -- PST write is allowed: /var/lib/kvmd/pst/data
-- INFO -- Running the process ...
-- INFO -- Process finished: returncode=0 |
Enable ports 80 and 443 from the internet to PiKVM (192.168.0.86 in this example).
Request a new certificate
Code Block [root@pikvm ~]# kvmd-certbot certonly_webroot --agree-tos -n --email cert@openvino.org -d pikvm.costaflores.openvino.org -- INFO -- Opening PST session ... -- INFO -- PST write is allowed: /var/lib/kvmd/pst/data -- INFO -- Running the process ... + mkdir -p /var/lib/kvmd/pst/data/certbot/runroot + chown -R kvmd-certbot: /var/lib/kvmd/pst/data/certbot/runroot/.. -- INFO -- Process finished: returncode=0 -- INFO -- Opening PST session ... -- INFO -- PST write is allowed: /var/lib/kvmd/pst/data -- INFO -- Running the process ... Saving debug log to /var/lib/kvmd/pst/data/certbot/runroot/logs/letsencrypt.log Requesting a certificate for pikvm.costaflores.openvino.org Hook 'deploy-hook' ran with error output: + chmod 755 /var/lib/kvmd/pst/data/certbot/runroot/config/archive /var/lib/kvmd/pst/data/certbot/runroot/config/live + chmod 640 /var/lib/kvmd/pst/data/certbot/runroot/config/live/pikvm.costaflores.openvino.org/privkey.pem Successfully received certificate. Certificate is saved at: /var/lib/kvmd/pst/data/certbot/runroot/config/live/pikvm.costaflores.openvino.org/fullchain.pem Key is saved at: /var/lib/kvmd/pst/data/certbot/runroot/config/live/pikvm.costaflores.openvino.org/privkey.pem This certificate expires on 2024-07-14. These files will be updated when the certificate renews. NEXT STEPS: - The certificate will need to be renewed before it expires. Certbot can automatically renew the certificate in the background, but you may need to take steps to enable that functionality. See https://certbot.org/renewal-setup for instructions. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If you like Certbot, please consider supporting our work by: * Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate * Donating to EFF: https://eff.org/donate-le - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- INFO -- Process finished: returncode=0
Deactive port mapping from the internet to PiVKM on :80 and :443
Test renewing certs
Code Block [root@pikvm ~]# kvmd-certbot renew --force-renewal Saving debug log to /tmp/kvmd-certbot/runroot/logs/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /tmp/kvmd-certbot/runroot/config/renewal/pikvm.costaflores.openvino.org.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Renewing an existing certificate for pikvm.costaflores.openvino.org - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations, all renewals succeeded: /tmp/kvmd-certbot/runroot/config/live/pikvm.costaflores.openvino.org/fullchain.pem (success) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- INFO -- Opening PST session ... -- INFO -- PST write is allowed: /var/lib/kvmd/pst/data -- INFO -- Running the process ... + rm -rf /var/lib/kvmd/pst/data/certbot/runroot.new + cp -a /tmp/kvmd-certbot/runroot/. /var/lib/kvmd/pst/data/certbot/runroot.new + rm /var/lib/kvmd/pst/data/certbot/runroot.new/updated + chmod 755 /var/lib/kvmd/pst/data/certbot/runroot.new/config/archive /var/lib/kvmd/pst/data/certbot/runroot.new/config/live + chmod 640 /var/lib/kvmd/pst/data/certbot/runroot.new/config/archive/pikvm.costaflores.openvino.org/privkey1.pem /var/lib/kvmd/pst/data/certbot/runroot.new/config/archive/pikvm.costaflores.openvino.org/privkey2.pem /var/lib/kvmd/pst/data/certbot/runroot.new/config/archive/pikvm.costaflores.openvino.org/privkey3.pem + sed -s -i -e 's| = /tmp/kvmd-certbot/runroot/| = /var/lib/kvmd/pst/data/certbot/runroot/|g' /var/lib/kvmd/pst/data/certbot/runroot.new/config/renewal/pikvm.costaflores.openvino.org.conf + rm -rf /var/lib/kvmd/pst/data/certbot/runroot.new/logs/letsencrypt.log.1 /var/lib/kvmd/pst/data/certbot/runroot.new/config/csr /var/lib/kvmd/pst/data/certbot/runroot.new/config/keys + sync + kvmd-helper-swapfiles /var/lib/kvmd/pst/data/certbot/runroot.new /var/lib/kvmd/pst/data/certbot/runroot + rm -rf /var/lib/kvmd/pst/data/certbot/runroot.new -- INFO -- Process finished: returncode=0
Automate cert renewal
Code Block [root@pikvm ~]# systemctl enable --now kvmd-certbot.timer Created symlink /etc/systemd/system/timers.target.wants/kvmd-certbot.timer -> /usr/lib/systemd/system/kvmd-certbot.timer.
Configuring PiSugar
Add a pisugar user to the PiKVM (Raspberry Pi):
Connect via ssh to the PiKVM device.
Add a pisugar user:
Code Block |
---|
[root@pikvm ~]# rw
+ mount -o remount,rw /
+ mount -o remount,rw /boot
+ set +x
=== PiKVM is in Read-Write mode ===
useradd --system -s /usr/bin/bash pisugar
usermod -d /opt/pisugar -m pisugar
passwd pisugar |
Add pisugar to /etc/sudoers
Download latest
pisugar-archlinux_<version>_all.tar.gz
from https://github.com/PiSugar/pisugar-power-manager-rs/releases
Code Block |
---|
su - pisugar
tar -xvf pisugar-archlinux_<version>_all.tar.gz |
Edit the PKBUILD to support the RPi Zero 2W:
Code Block arch=('arm' 'armhf' 'aarch64' 'x86_64')
Attaching the lid and connecting external cables
NUC - Netrabrick NUClid cabling
...
Identifier | Header |
---|---|
8 | COM Header |
9 | USB2 Header |
10 | Front Panel Header |
COM header
Use of this header is not really necessary, but it could be connected to the Raspberry Pi used by PiKVM to provide a serial terminal login access to the server.
...
Pin | RS232 signal | Connection |
---|---|---|
1 | DCD | Empty |
2 | RXD | RPi GPIO14 (UART TX) |
3 | TXD | RPi GPIO15 (UART RX) |
4 | DTR | Empty |
5 | GND | Rpi GND |
6 | DSR | Empty |
7 | RTS | Empty |
8 | CTS | Empty |
9 | RI# | Empty |
10 | Empty | Empty |
NUC USB2.0 header
The USB2.0 header is essential for providing keyboard and mouse HID access from the PiKVM instance on the Raspberry Pi to the server. Also, this header provides power to the SugarPi3, which in turn, powers the PiKVM Raspberry Pi.
Notice that VCC (5v) is NOT provided to the MicroUSB connection on the Raspberry Pi. This is the equivalent of blocking the VCC pin, as described here.
...
Pin | USB Signal | Connection |
---|---|---|
1 | VCC | Pin 8 (5v in) on SugarPi3 |
2 | VCC | Current connector to power fan? |
3 | USB0- | MicroUSB cable USB- (green) |
4 | USB1- | Empty |
5 | USB0+ | MicroUSB cable USB+ (white) |
6 | USB1+ | Empty |
7 | GND | Pin 1 on SugarPi 3 (next to Pin 8) AND USB ground (black) |
8 | GND | Current ground connector to fan? |
9 | No Connect | Empty |
10 | Empty | Empty |
Info |
---|
Check dmesg and lsusb on both the Netrabrick and the Raspberry Pi to see if the USB connection is working. From lsusb on the Netrabrick you should see something similar to: Bus 004 Device 005: ID 1d6b:0104 Linux Foundation Multifunction Composite Gadget |
NUC Front Panel header
Connecting the NUC Front Panel header to the Raspberry Pi is necessary if want ATX power control from PiKVM.
...
Pin | Header | Function | Connection |
---|---|---|---|
1 | HD_LED | HD_PWR | Connect to RPi, pin (red) |
3 | HD_Active | Connect to RPi, pin 22 (red) | |
2 | PWR_LED | PWR LED+ | Connect to Front Panel LED |
4 | PWR LED- | ||
5 | RESET | GND | Connect to RPi, pin (red) |
7 | RST BTN | Connect to RPi, pin 27 (red) | |
6 | PW_ON | PWR BTN | Connect to Front Panel Button |
8 | GND | ||
9 | No Connect | +5V | No connect |
10 | Empty | Empty | Empty |
This is how ATX wiring between the server and Raspberry Pi are instrumented:
As described here:
With this part, you will be able to remotely turn on, turn off and restart your computer!
x4 MOSFET relays OMRON G3VM-61A1 or OMRON G3VM-61AY1.
Don't use random relay modules or random optocouplers! Some of these may not be sensitive enough for the Raspberry Pi, some others may be low-level controlled. Either use relays that are activated by a high logic level, or follow the design provided and buy an OMRON. See details here.x4 390 Ohm resistors (see here for alternatives).
2x 4.7 kOhm resistors.
x10+ dupont wires male-male.
x1 a breadboard.
various wires for the breadboard.
USB connections
The lsusb command should report the different connected USB devices:
Device | lsusb report |
---|---|
LoRA dongle (connection to Vinduino) |
|
RT-SDR (connection to weather station) |
|
PiKVM |
|
Code Block |
---|
mtb@netrabrick:~$ lsusb Bus 005 Device 001: ID 1d6b:00020003 Linux Foundation 23.0 root hub |
Dappnode base instance
This section describes the steps involved for installing the Dappnode Linux base instance (bare metal install).
backup NAS
Time machine backup for MacOS devices
First we'll install samba
Code Block |
---|
sudo apt install samba |
Add a samba user
Code Block |
---|
sudo smbpasswd -a mtb
sudo usermod -g users mtb
vi /etc/samba/smb.conf |
Configure samba
Code Block |
---|
[global]
workgroup = openvino
min protocol = SMB2
# security
security = user
passdb backend = tdbsam
map to guest = Bad User
# mac Support
spotlight = yes
vfs objects = acl_xattr catia fruit streams_xattr
fruit:aapl = yes
fruit:time machine = yes
#NetShares
[volumes]
comment = Time Machine
path = /timecapsule
valid users = @users
browsable = yes
writable = yes
read only = no
create mask = 0644
directory mask = 0755 |
Adjust permissions
Code Block |
---|
chmod 777 /timecapsule
chown root:users /timecapsule/ |
Restart samba
Code Block |
---|
service smbd restart |
Connect to the samba server from MacOS finder
Go > Connect to server...
.
...
Bus 004 Device 004: ID 1d6b:0104 Linux Foundation Multifunction Composite Gadget
Bus 004 Device 003: ID 05e3:0610 Genesys Logic, Inc. Hub
Bus 004 Device 002: ID 8087:0029 Intel Corp. AX200 Bluetooth
Bus 004 Device 005: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 008: ID 04b4:0003 Cypress Semiconductor Corp. USB-UART LP
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub |
Dappnode base instance
This section describes the steps involved for installing the Dappnode Linux base instance (bare metal install).
backup NAS
Use the Netrabrick as a local backup device.
Time machine backup for MacOS devices
FOAM.space anchor node
Dappnode
...