All You Need To Get On Brandmeister! - baremetalDMR is a lightweight, fully open-source Brandmeister DMR hotspot stack for Linux SBCs. Built to run efficiently on hardware as small as the Raspberry Pi Zero, baremetalDMR installs on standard Linux distributions to avoid bloat and give you full control. https://dmr.nq4t.com
  • Go 48.2%
  • JavaScript 15.9%
  • Shell 14.6%
  • C 12%
  • CSS 4.3%
  • Other 5%
Find a file
2026-07-01 12:46:27 -04:00
baremetaldmr-dashboard first alpha 2026-06-22 21:22:20 -04:00
etc add tempates. update readme. it's been verified to work. 2026-06-24 15:17:04 -04:00
gridapi first alpha 2026-06-22 21:22:20 -04:00
htpasswd-portable add htpasswd 2026-07-01 12:21:07 -04:00
installbaremetalDMR.sh don't ask for master twice 2026-07-01 12:46:27 -04:00
LICENSE first alpha 2026-06-22 21:22:20 -04:00
logo.svg add logo 2026-06-25 14:44:46 -04:00
originalrecipe.txt add logo 2026-06-25 14:44:46 -04:00
README.md add htpasswd 2026-07-01 12:21:07 -04:00

baremetalDMR

All You Need To Get On Brandmeister!

About

baremetalDMR is a lightweight, fully open-source dashboard and installation script for Linux SBCs that make a Brandmeister DMR hotspot. Designed to run efficiently on hardware as small as the Raspberry Pi Zero while remaining hardware- and distribution-agnostic. It installs on your existing distribution, rather than being a distribution. The dashboard uses Javascript, websockets, MQTT, and the Brandmeister API to bring you all the features you need for basic management; while also being lightweight enough to be responsive on slower boards.

The installation script eases configuration by asking you only the information required. It will look up your DMR ID, convert grid suqare to lat and long, and even automatically find and verify your MMDVM device.

This software is primarily intended for amateur and educational use.

Requirements

- armv6, armv7, or aarch64 (arm64) SBC
- Debian/Armbian based Linux
- MMDVM connected to UART or via USB

While our provided binaries may run on other distributions; our installation script currently only supports *bian.

Installation

Pre-Install

Tip

We recommend DietPi on lower-power SBC's.

You will need to prepare an SD card (or your SBC's storage device) with Linux; and configure it to allow hardware UART access.

Installation

Just download the script, make it executable, and run it!

wget https://dmr.nq4t.com/installbaremetalDMR.sh
chmod +x installbaremetalDMR.sh
sudo ./installbaremetalDMR.sh

The script will guide you through the rest of the setup process.

Manual Installation

You can look at the baremetalDMR's Original Recipe. However, it's basically this:

- `wget https://dmr.nq4t.com/dist/baremetalDMR-"$(uname -m)"-full.tar.gz`
- `sudo tar -zxvf baremetalDMR-"$(uname -m)"-full.tar.gz -C`
- Edit /etc/baremetaldash.yaml, /etc/MMDVM-Host.ini, /etc/DMRGAteway.ini
- enable systemd services: baremetaldmr, mmdvmhost, dmrgateway

Obviously, if you don't have systemd; you'll need to write scripts for whatever init system you're using. Thankfully, the binaries don't require anything crazy:

path/to/binary /path/to/config

MMDVM-Host ships with it's "daemon" mode enabled. DMRGateway does not. This was the conbination I needed for systemd. Please be aware of this if your init system doesn't expect the application to background automatically or something.

baremetalDMR Dashboard

The baremetalDMR dashboard is a lightweight application written in go. It provides all the usual information and control you need, without requiring the bloat of PHP rendering. Rather than parse log files; it subscribes to MMDVM-Host's and DMRGateway's MQTT topics. You don't need a full webserver and PHP install; the dashboard uses Javascript, websockets, and is a single self contained binary.

It features all the usual information you'd want; tx/rx status, last heard, system temperature, and system load. Brandmeister API integration allows you to control your static groups, drop all dynamic groups, and drop the active call...for those long-winded OM. You can specify a specific IP or entire sub-net to not requrire authentication; or always require authentication for specific IPs or sub-nets.

The dashboard was built to be lightweight. You won't find a full httpd stack with PHP here. Our single Go application ingrates everything in to one binary, optimized to run on even the Pi0W! It uses Javascript, Websockets, and takes advantage of the new MQTT architecture MMDVM-Host and DMRGateway have swtiched to.

Build instructions are in it's README.md

Live Demo

You can check out what the dashboard looks like, and possibly see it in action; by trying one of the following:

Tip

The Login and Control API paths are disabled. Clicking things does nothing!

Zumspot on Pi0W

OpenGD77 on ASL3

Caution

Gateway errors means the hotspots are offline, for some reason. Check back later.

gridify API

The gridify API is actually an API service I host for baremetalDMR. It is literally just a go application that takes a 4 - 10 character grid square and spits out lat long. It's source code is included as part of the baremetalDMR project; you do not need to build it for installation. You may even use my hosted API for your own projects (you get what you pay for) if you have a need for it:

$ curl https://grid.nq4t.com/FM18BH33JJ                                                                                                                                                    
38.305816 -77.888368

htpasswd-portable

Since htpasswd is required for the dashboard configuration and it's often part of full apache; we provide a static build of the OpenBSD version. It was originally ported to Linux by shtrophic. Our modification was to make it behave just enough like Apache's for the install script.

MMDVM-Host & DMRGateway

This project makes use of and distributes binaries for MMDVM-Host and DMRGateway by Jonathan Naylor/G4KLX. Source code for each are in their respecitive repositories.

Notes/Troubleshooting

"It can't find my MMDVM device"

This can be a difficult thing to answer depending on the SBC you're using. Just because it has a 40pin GPIO port doesn't mean it's 100% compatible with the Pi. Naturally...make sure the pinout of the MMDVM hat matches whatever your SBC has.

The next thing is to make sure the port is enabled and available for use. Due to the number of different SBCs out there; this will take some time for me to look up and document...if I can even do such a thing. I'm hoping if you're the oddball out there running it on something like VisionFive 2...you don't need my help given I don't even offer RISC-V builds of anything....yet.

"TX/RX status and last heard aren't working."

Check the configs to make sure the dashboard is subscribed to the same topics MMDVM-Host and DMRGateway are using.

Make sure Mosquitto is running. sudo systemctl status mosquitto

Check the systemd status of everything and look for MQTT errors. Restart affected services.

"DMR Never Connects"

This is usually caused by one of a few things:

- MMDVMHost can't open the modem
- DMRGateway configuration is bad
- MMDVM-Host.ini doesn't have DMR Network Enabled

That last one caught me during beta testing...and I guess it's possible I totally missed one of the distribution sets; but that shouldn't be a problem anymore. The problem would either be in DMRGateway not being happy or MMDVMHost not being able to open the modem for some reason.

The most reliable way won't be looking at systemd status; it'll be running them directly on the console. DMRGateway can do this; MMDVM-Host will require a temporary change.

sudo systemctl stop mmdvmhost
sudo /usr/local/bin/MMDVM-Host.ini /usr/share/lib/mmdvm/MMDVM-Host.debug.ini

This will launch MMDVM-Host in the current console and show you all the debug output. If it doesn't throw any errors and doesn't exit out...then proceed to the next step. Launch a second shell/terminal connection so we can run DMRGateway:

sudo systemctp stop dmrgateway
sudo /usr/local/bin/DMRGateway /etc/DMRGateway.ini

You should see it say "Waiting for MMDVM..." I don't know what the delay is for MMDVMHost to attempt to talk to DMRGateway. If you're impatient; then you can go back to MMDVM-Host, kill the process (Ctrl-C), and start it again. However it's not an instant process and sometimes just letting it sit for 5 to 10 seconds is all it needs.

If both boot...and never talk; then open a ticket/issue/email me.

History/Changelog

??-JUN-2026: Started as just dashboard and just instructions.
22-JUN-2026: Initial Installer and Alpha Commit.
26-JUN-2026: Installer tweaks. Wrote README.
01-JUL-2026: Added static htpasswd binary. Modified installer to use.