crabSDR

crabSDR mit Docker eigene Station einrichten

Das Image gibt es nur mit Konto von DO1XX.

Nach der Installation geht es im Sysop-Handbuch weiter: Admin-Seite, Bänder, Decoder, Relais, Verzeichnis, Probleme.

Was man braucht

Einen Rechner mit Linux (PC, Laptop oder Raspberry Pi 4/5 mit 64-Bit-System), einen RTL-SDR-Stick und eine Antenne. Docker oder Podman. Das Image gibt es für amd64 und arm64; Docker nimmt automatisch das passende.

crabSDR with Docker setting up your own station

The image is only available with an account from DO1XX.

After the installation, continue with the sysop guide: admin page, bands, decoders, relay, directory, troubleshooting.

What you need

A computer running Linux (PC, laptop, or Raspberry Pi 4/5 with a 64-bit system), an RTL-SDR dongle, and an antenna. Docker or Podman. The image is available for amd64 and arm64; Docker picks the right one automatically.

1 · Einmalig vorbereiten

curl -fsSL https://get.docker.com | sh          # falls Docker fehlt (Debian, Ubuntu, Raspberry Pi OS)
echo 'blacklist dvb_usb_rtl28xxu' | sudo tee /etc/modprobe.d/rtl-sdr-blacklist.conf
sudo modprobe -r dvb_usb_rtl28xxu               # sonst belegt der DVB-Treiber den Stick

2 · Anmelden

docker login registry.crabsdr.de

Name und Passwort kommen von DO1XX. registry.crabsdr.de ist keine Webseite, Docker holt das Image von dort.

3 · Compose-Datei

Ordner anlegen, z. B. ~/crabsdr, und darin docker-compose.yml speichern:

services:
  crabsdr:
    image: registry.crabsdr.de/crabsdr:latest
    restart: unless-stopped
    init: true
    ports: ["8080:8080"]
    volumes: ["./data:/data"]
    devices: ["/dev/bus/usb:/dev/bus/usb"]

Das Image enthält alle Betriebsarten einschließlich T; crabsdr-t ist ein älterer Name für dasselbe Image.

RX888 oder USRP: Beide melden sich nach dem Firmware-Laden unter neuer USB-Adresse an. Statt der Zeile devices: den USB-Ordner einbinden und USB-Geräte erlauben:

    volumes: ["./data:/data", "/dev/bus/usb:/dev/bus/usb"]
    device_cgroup_rules: ["c 189:* rmw"]

4 · Starten

cd ~/crabsdr
docker compose up -d
docker compose logs | grep Passwort              # Admin-Passwort vom ersten Start

Die Seite: http://<rechner>:8080, Admin: http://<rechner>:8080/admin/. Beim ersten Start entsteht ./data/config.toml, ein Beispiel für einen Stick auf 2 m.

5 · Anpassen

In ./data/config.toml Stationsname, Locator, Frequenz und Verstärkung eintragen (jede Zeile ist kommentiert). Dann:

docker compose run --rm --entrypoint crabsdr-server crabsdr --check /data/config.toml
docker compose restart

1 · One-time preparation

curl -fsSL https://get.docker.com | sh          # if Docker is missing (Debian, Ubuntu, Raspberry Pi OS)
echo 'blacklist dvb_usb_rtl28xxu' | sudo tee /etc/modprobe.d/rtl-sdr-blacklist.conf
sudo modprobe -r dvb_usb_rtl28xxu               # otherwise the DVB driver grabs the dongle

2 · Sign in

docker login registry.crabsdr.de

Name and password come from DO1XX. registry.crabsdr.de is not a website; Docker fetches the image from there.

3 · Compose file

Create a folder, e.g. ~/crabsdr, and save docker-compose.yml in it:

services:
  crabsdr:
    image: registry.crabsdr.de/crabsdr:latest
    restart: unless-stopped
    init: true
    ports: ["8080:8080"]
    volumes: ["./data:/data"]
    devices: ["/dev/bus/usb:/dev/bus/usb"]

The image contains all modes including T; crabsdr-t is an older name for the same image.

RX888 or USRP: Both re-enumerate under a new USB address after loading their firmware. Instead of the devices: line, mount the USB folder and allow USB devices:

    volumes: ["./data:/data", "/dev/bus/usb:/dev/bus/usb"]
    device_cgroup_rules: ["c 189:* rmw"]

4 · Start

cd ~/crabsdr
docker compose up -d
docker compose logs | grep Passwort              # admin password from the first start

The page: http://<computer>:8080, admin: http://<computer>:8080/admin/. The first start creates ./data/config.toml, an example for one dongle on 2 m.

5 · Adjust

In ./data/config.toml, enter the station name, locator, frequency, and gain (every line is commented). Then:

docker compose run --rm --entrypoint crabsdr-server crabsdr --check /data/config.toml
docker compose restart

Mirics MSi2500 („MSI SDR“)

Auf dem Rechner zusätzlich die Kernel-Treiber sperren und den Stick danach neu einstecken:

printf 'blacklist msi2500\nblacklist msi001\n' | sudo tee /etc/modprobe.d/msi2500.conf
sudo modprobe -r msi2500 msi001

Dann im Admin-Bereich unter Konfiguration (Textansicht) dieses Band einfügen bzw. das RTL-Band ersetzen und speichern. Die Werte laufen so an DF0HHH; ein fertiger Block steht auch auskommentiert in ./data/config.toml.

[[bands]]
id = "2m-msi"
label = "2 m MSI"
driver = "rx_sdr"
device = "driver=soapyMiri"
center_freq = 145000000
sample_rate = 2048000
gain = 54
gain_elements = { LNA = 0, Mixer = 19, Mixbuffer = 0, Baseband = 35 }
settings = "transfer=BULK,bandwidth=1536000"
mode = "fm"

Übersteuert es (Rauschteppich hoch, Geisterträger), Baseband kleiner; ist alles zu leise, LNA = 24 probieren. Bei zwei MSi am selben Rechner braucht jedes Band die Angabe aus docker compose exec crabsdr SoapySDRUtil --find.

Mirics MSi2500 (“MSI SDR”)

On the computer, additionally block the kernel drivers and then plug the dongle in again:

printf 'blacklist msi2500\nblacklist msi001\n' | sudo tee /etc/modprobe.d/msi2500.conf
sudo modprobe -r msi2500 msi001

Then, in the admin area under Configuration (text view), insert this band or replace the RTL band, and save. These values are in use at DF0HHH; a ready-made block is also included, commented out, in ./data/config.toml.

[[bands]]
id = "2m-msi"
label = "2 m MSI"
driver = "rx_sdr"
device = "driver=soapyMiri"
center_freq = 145000000
sample_rate = 2048000
gain = 54
gain_elements = { LNA = 0, Mixer = 19, Mixbuffer = 0, Baseband = 35 }
settings = "transfer=BULK,bandwidth=1536000"
mode = "fm"

If it overloads (high noise floor, ghost carriers), lower Baseband; if everything is too quiet, try LNA = 24. With two MSi on the same computer, each band needs the device string from docker compose exec crabsdr SoapySDRUtil --find.

Aktualisieren

docker compose pull && docker compose up -d

Konfiguration und Datenbank in ./data bleiben. Eine feste Version statt latest: image: registry.crabsdr.de/crabsdr:1.6.0-52.

Mit Podman

podman login registry.crabsdr.de
podman run -d --name crabsdr --init --restart unless-stopped -p 8080:8080 \
  -v ~/crabsdr/data:/data:Z --device /dev/bus/usb registry.crabsdr.de/crabsdr:latest
podman pull registry.crabsdr.de/crabsdr:latest   # Aktualisieren: danach Container löschen und neu anlegen

Update

docker compose pull && docker compose up -d

Configuration and database in ./data are kept. A fixed version instead of latest: image: registry.crabsdr.de/crabsdr:1.6.0-52.

With Podman

podman login registry.crabsdr.de
podman run -d --name crabsdr --init --restart unless-stopped -p 8080:8080 \
  -v ~/crabsdr/data:/data:Z --device /dev/bus/usb registry.crabsdr.de/crabsdr:latest
podman pull registry.crabsdr.de/crabsdr:latest   # update: then remove the container and create it again

Probleme

Band „gestört“: Stick steckt nicht, DVB-Treiber nicht gesperrt (Schritt 1, danach Stick neu einstecken) oder ein anderes Programm nutzt ihn. Übersteuerung (Geisterträger, Rauschteppich springt): gain kleiner. Fragen an info@crabsdr.de.

Troubleshooting

Band “faulty”: dongle not plugged in, DVB driver not blocked (step 1, then plug the dongle in again), or another program is using it. Overload (ghost carriers, jumping noise floor): lower gain. Questions to info@crabsdr.de.