Image: VibeServer-Soft66IP-OrangePiZero-DietPi-1.img.xz: 336,416,960 bytes compressed, 1.71 GiB written to the card
SHA-256: 8167e453feb5246f838f99469e954fb82feffdba0c83b8a11bf89e5a4028c2a8
A ready-to-flash SD card image that turns a Soft66IP (Kazunori Miura's RTL-SDR board with a 50 MHz
upconverter and an Orange Pi Zero) into a VibeServer. It is for the original Orange Pi Zero
(Allwinner H2+, 256 MB or 512 MB). It is not for the Orange Pi Zero 2, 2W, 3 or 3W.
⚠ Experimental, and untested on the hardware
- Nobody has booted this image on an Orange Pi Zero yet. It was built and checked on a Linux PC
(details at the end). The first person to flash it is the tester. Please tell us how it goes. - VibeServer's minimum confirmed spec is a Raspberry Pi 2 (quad-core ARMv7, 1 GB). The Orange Pi
Zero has the same kind of processor but only 256 MB of memory. Below a Pi 2, your mileage may vary
and we cannot guarantee that it will run. Narrow modes on HF with a handful of listeners is the
realistic target.
What is on the card
- DietPi (Debian 13 "Trixie", 32-bit ARM), set to finish its own setup by itself on the first boot.
DietPi publishes no image for the original Orange Pi Zero, so this one was made the way DietPi
documents for such boards. DietPi's own installer was run, as hardware model "Generic Allwinner H3",
on the board's official Armbian image. That keeps Armbian's kernel and boot loader for this board. - Nothing of VibeServer's yet. On the first boot a short script runs our ordinary one-line installer
(curl -fsSL https://apt.vibesdr.net/install.sh | bash). From then on it is an ordinary apt
VibeServer. It updates from the admin page's Install updates button, or withapt upgrade. No
re-flash is needed. - Settings chosen for 256 MB: the host name
vibeserver, Ethernet on, Wi-Fi off and SSH on (Dropbear).
Swap is zram, in RAM and never on the card. The CPU is capped at 1.008 GHz, because the board
runs hot in a closed box. The clock and the time zone are UTC, and DietPi's survey is off. - No passwords of ours. The login passwords are DietPi's defaults until you change them at the
first login (below). The VibeServer admin password is the one you type in the setup wizard.
Flash it
- Download
VibeServer-Soft66IP-OrangePiZero-DietPi-1.img.xzand check it against its.sha256:- Linux:
sha256sum -c VibeServer-Soft66IP-OrangePiZero-DietPi-1.img.xz.sha256 - Mac:
shasum -a 256 -c VibeServer-Soft66IP-OrangePiZero-DietPi-1.img.xz.sha256
- Linux:
- Write it to a microSD card of 4 GB or more. balenaEtcher takes the
.img.xzas it is. In
Raspberry Pi Imager, choose Choose OS → Use custom and pick the.img.xz. Skip Imager's OS
customisation, which is for Raspberry Pi OS only. - Optional, for Wi-Fi instead of Ethernet: before the first boot, open the card's root partition.
In/boot/dietpi.txt, setAUTO_SETUP_NET_WIFI_ENABLED=1, and put your network in
/boot/dietpi-wifi.txt. The Orange Pi Zero's XR819 Wi-Fi is weak, so Ethernet is the recommended
way.
First boot
-
Put the card in the Soft66IP. Connect Ethernet to a network with internet access, then power it
up. The RTL-SDR can stay plugged in. -
Wait 10–20 minutes, or longer on a slow connection. On its own, DietPi updates the system,
grows the filesystem to fill the card, sets itself up, then installs VibeServer. Leave the power on. -
Find the box's address: look for
vibeserverin your router's list of devices. Then log in:ssh root@<address> (password: dietpi)If the first-boot setup is still running, the login says so. Let it finish, then log in again.
-
DietPi asks you to choose new passwords for
rootanddietpiat this first login. Do it. Any
password you choose is yours alone; none is stored in the image. -
Set up VibeServer:
vibeserverThe wizard asks for a name, the location, the radio (the RTL-SDR) and an admin password. When
you finish, it starts the server. -
Open
http://<address>:48000in a browser and finish setup there (48000 is VibeServer's first
port; the wizard prints the exact address). Once it has a name, the server also answers as
<name>.localon most networks.
If VibeServer did not install (no internet during the first boot, for example), run the installer
again by hand: curl -fsSL https://apt.vibesdr.net/install.sh | sudo bash. The first-boot log is
in /root/vibeserver-firstboot.log.
Recommended settings for 256 MB
In the browser setup page, for the RTL-SDR:
- Span (sample rate): 1.024 MS/s to start. Try 2.048 MS/s for FM stereo only once the board's
temperature is seen to settle. Rate costs CPU, and CPU makes heat. - Run benchmark. It tells you what this board can run.
- Tunnel / listing: off for the first run. It is off on a new server. The tunnel uses about
60 MB, which on this board decides what else fits. Listeners on your own network, or through a port
forward, need no tunnel. - DAB+: leave it off. Untick it under Modes and decoders. This image does not install
ffmpeg,
which DAB+ audio needs, because DietPi does not install "recommended" packages. Add it later with
sudo apt install ffmpegif you want to try DAB+ and can spare the ~40 MB. - Advanced RDS: off. It is a CPU cost that a Pi 2 also runs without. It only runs while a
listener has its panel (ADV RDS) open. - CPU governor: VibeServer holds the clock at its top, which is 1.008 GHz here. If the box runs
too hot, choose default to let it slow down when idle. - Keep cooling in mind: a heatsink on the H2+ and some vents in the case. Check the temperature with
cat /sys/class/thermal/thermal_zone0/temp(in thousandths of °C).
HF through the upconverter
The Soft66IP's HF path is described as a 50 MHz upconverter: an HF signal at f reaches the
RTL-SDR at 50 MHz + f. We have not confirmed this, nor which antenna socket feeds which path,
nor whether the board switches or sums the two. If you can, please tell us.
- In setup, set Converter LO (MHz) = 50 and Highest frequency it passes (MHz) = 30. The dial
then shows true HF frequencies, everywhere: to listeners, in bookmarks, in the band plan and in the
directory. - Calibrate: tune a known carrier, such as a time signal on 10.000 MHz or a broadcaster on a
published frequency. Correct the LO by the error you see. The board's oscillator will not be
exactly 50.000 MHz. - If HF only sounds right with the converter at 0 and Automatic direct sampling on, the board feeds
HF to the RTL's direct-sampling input instead. Tell us either way. - The converter setting applies to the whole radio. To use the VHF/UHF socket, set the LO back to 0.
Please send us
From an ssh login, once it is running:
uname -m; dpkg --print-architecture; . /etc/os-release; echo "$PRETTY_NAME"
grep -m1 -ow neon /proc/cpuinfo; free -m; zramctl
cat /sys/class/thermal/thermal_zone0/temp
ps -eo rss,comm --sort=-rss | head -15Run it once idle, and again while listening (and with DAB+ playing, if you tried it). These
numbers replace our estimates. Post them in the VibeSDR Discord or in an issue at
https://github.com/Stuey3D/VibeSDR/issues.
Credits, licences and source code
This image is built from other people's free software. It is not made or endorsed by DietPi or by
Armbian.
- DietPi — https://dietpi.com, licensed GPLv2. Source: https://github.com/MichaIng/DietPi.
This image used DietPi v10.8.2, installed bydietpi-installerfrom branchmasterat
commit65a12a6442f8b41f5de1a982a4c271cd50f85fcf. - Armbian — https://www.armbian.com. The base image was
Armbian_community_26.11.0-trunk.108_Orangepizero_trixie_current_6.18.57_minimal.img.xz, verified against Armbian's checksum and its signature by key
DF00 FAF1 C577 104B 50BF 1D00 93D6 889F 9F0E 78D5. Armbian's build framework (GPLv2) is
https://github.com/armbian/build. This image was built from commitfac57a02f1c6ff2221a3f3099a1094dcdf41be26(recorded in its/etc/armbian-release). It is a community-maintained nightly build, "trunk", and is the only current Armbian image for this board. - Linux kernel (GPLv2): Armbian package
linux-image-current-sunxi26.11.0-trunk.108. Source: Linux 6.18.57 from https://kernel.org,
with Armbian's sunxi patches from the armbian/build repository above (patch/kernel/archive/sunxi-6.18at that commit). - U-Boot (GPLv2): Armbian package
linux-u-boot-orangepizero-current26.11.0-trunk.108, U-Boot 2026.07. Source: https://source.denx.de/u-boot/u-boot,
with Armbian's patches from armbian/build. - Debian packages (various free licences, many GPL). Source for every package:
https://deb.debian.org/debian (apt source <package>), or https://snapshot.debian.org for the
exact version. - VibeServer is installed from https://apt.vibesdr.net at first boot. It is not part of this
image.
If you cannot find the corresponding source for any GPL component of this image at those links, ask
in an issue at https://github.com/Stuey3D/VibeSDR/issues and we will provide it.
The build script, the dietpi.txt values and the first-boot script are in the VibeSDR repository,
under image/soft66ip-dietpi/, on the v12-soft66ip-image branch.
What was checked, and what was not
Checked on the build machine:
- The Armbian base image matched its published checksum and Armbian's signature.
- After DietPi's installer had run, the area outside the partition, which holds the boot loader, was
byte-for-byte the same as Armbian's. That area is the MBR boot code and U-Boot. Only the
partition's size entry changed. - Every
dietpi.txtvalue was read back. The first-boot script passesbash -nand ShellCheck. - On a throwaway copy of the finished image, booted as an emulated ARM container, the first-boot script
ran for real. It installed VibeServer 11.0.10-5 (armhf) from the stable channel, and the
installed binary started under emulation, then stopped as expected at "no SDR found".
Not checked: booting on a real Orange Pi Zero; DietPi's first boot on the board; the RTL-SDR,
Ethernet, Wi-Fi, temperatures and memory use on the board; the Soft66IP's converter and ports.