🔥 Mein Krypto-Tipp für deinen Homescreen
Du willst deine Krypto-Kurse auf einen Blick auf deinem Homescreen haben – ohne lästige Werbung oder Datenkraken im Hintergrund? Lade dir jetzt meine App «DBH Crypto Watcher» herunter!
In dieser ausführlichen Anleitung zeige ich dir Schritt für Schritt, wie du einen Raspberry Pi 4 in einen autarken Monero-Miner verwandelst. Als Bonus bauen wir ein stylisches Web-Dashboard, das sich im Hintergrund selbst aktualisiert und – dank eines lokalen RPC-Nodes – sogar dein verschlüsseltes Monero-Guthaben anzeigt.
Die Voraussetzungen: Hardware & Betriebssystem
Für dieses Projekt benötigen wir Hardware, die für den Dauerbetrieb unter Volllast ausgelegt ist:
- Raspberry Pi 4 (ab 4GB RAM empfohlen, um später die View-Only Wallet laufen zu lassen).
- Aktive Kühlung: Ein absolutes Muss! Beim Mining läuft die CPU konstant auf 100%. Ohne guten Lüfter drosselt der Pi bei 80°C sofort die Leistung (Thermal Throttling). Mit einem guten Aktivkühler bleiben wir bei angenehmen 44°C.
- MicroSD-Karte: Mindestens 64 GB, besser 128 GB für ausreichend Platz.
Das Betriebssystem: Warum 64-Bit zwingend erforderlich ist
Installiere über den offiziellen Raspberry Pi Imager das Raspberry Pi OS Lite (64-bit). Die Lite-Version kommt ohne ressourcenfressende Desktop-Umgebung (GUI). Wichtig ist hier der Zusatz «64-bit». Der Mining-Algorithmus von Monero (RandomX) ist extrem speicherintensiv und verlässt sich auf 64-Bit-Adressierung. Ein 32-Bit-System würde die Hashrate (Rechenleistung) drastisch einbrechen lassen.
Tipp: Aktiviere im Imager direkt SSH und lege deinen Benutzer (z.B. pi oder dblake) an, damit wir den Rechner komplett «headless» (ohne Monitor) betreiben können.
Schritt 1: System aktualisieren und Abhängigkeiten installieren
Verbinde dich per SSH mit deinem Raspberry Pi. Bevor wir eigene Software kompilieren, bringen wir das System auf den neuesten Stand und installieren alle nötigen Entwickler-Werkzeuge.
sudo apt update
sudo apt upgrade -y
sudo apt install git build-essential cmake libuv1-dev libssl-dev libhwloc-dev jq -y
Info: Das Paket jq benötigen wir später, um die API-Daten für unser Web-Dashboard auszulesen.
Schritt 2: XMRig herunterladen und kompilieren
Der absolute Standard-Miner für Monero ist XMRig. Anstatt eine fertige Datei herunterzuladen, kompilieren wir die Software direkt auf dem Raspberry Pi. So ist sie perfekt auf die ARM-Architektur unseres Prozessors abgestimmt.
git clone https://github.com/xmrig/xmrig.git
mkdir xmrig/build
cd xmrig/build
cmake ..
make -j4
Der Parameter -j4 teilt dem Pi mit, dass er alle vier CPU-Kerne für den Bauprozess nutzen soll. Das dauert einige Minuten – der perfekte Moment, um sich einen Kaffee zu holen.
Monero-Miner profitieren enorm von großen Speicherseiten. Auf Standard-Linux aktiviert man diese über
sudo sysctl -w vm.nr_hugepages=1280. Auf dem Raspberry Pi OS wird dir dieser Befehl allerdings einen Fehler ausgeben («Datei oder Verzeichnis nicht gefunden»). Der Kernel des Pi OS hat diese Funktion standardmäßig deaktiviert. Du kannst diesen Fehler ignorieren – XMRig läuft auch so!
Schritt 3: Der erste Testlauf und die TLS-Falle
Bevor wir alles automatisieren, müssen wir testen, ob der Miner funktioniert. Wir nutzen in diesem Beispiel Nanopool als Mining-Pool. Ersetze die Wallet-Adresse hinter dem Parameter -u zwingend durch deine eigene Monero-Adresse!
Wenn du dich mit einem Port verbindest, der SSL/TLS-Verschlüsselung erfordert (wie Port 14433 bei Nanopool), musst du XMRig zwingend den Parameter
--tls mitgeben. Andernfalls wirft dich der Pool-Server sofort raus.
./xmrig -o xmr-eu1.nanopool.org:14433 -u DEINE_WALLET_ADRESSE_HIER -k --tls --coin monero --http-port 19999
Mit --http-port 19999 aktivieren wir direkt die lokale API von XMRig, die wir später für unser Dashboard brauchen. Nach dem Start reserviert der Pi etwa 2,3 GB Arbeitsspeicher für das RandomX-Datenset. Dieser Vorgang dauert auf einem Pi 4 etwa 2 bis 3 Minuten. Hab Geduld! Sobald Meldungen wie «new job» und «accepted» erscheinen, läuft das Mining. Brich den Vorgang dann mit STRG+C ab.
Schritt 4: XMRig als Systemdienst (Autostart) einrichten
Wir wollen nicht jedes Mal das Terminal geöffnet lassen. Der Miner soll bei jedem Neustart unsichtbar im Hintergrund anlaufen.
sudo nano /etc/systemd/system/xmrig.service
Füge folgenden Inhalt ein (Passe den Usernamen pi und deine Wallet-Adresse entsprechend an):
[Unit]
Description=XMRig Monero Miner
After=network.target
[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/xmrig/build
ExecStart=/home/pi/xmrig/build/xmrig -o xmr-eu1.nanopool.org:14433 -u DEINE_WALLET_ADRESSE -k --tls --coin monero --http-port 19999
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Dienst aktivieren und starten:
sudo systemctl daemon-reload
sudo systemctl enable xmrig.service --now
Schritt 5: Monero-Privacy knacken (View-Only Wallet)
Monero ist eine Privacy-Coin. Die Blockchain ist verschlüsselt, weshalb niemand deinen Kontostand abfragen kann. Um dies zu lösen, richten wir die offizielle Monero-CLI als lokalen RPC-Server ein und füttern sie ausschließlich mit deinem Private View Key (Ansichtsschlüssel).
So kann das System eingehende Zahlungen auf der Blockchain sehen, aber kein Geld ausgeben (absolut sicher!).
cd ~
wget -O monero-linux-armv8.tar.bz2 https://downloads.getmonero.org/cli/linuxarm8
tar -xjvf monero-linux-armv8.tar.bz2
mv monero-aarch64-linux-gnu-* monero-cli
cd monero-cli
Wallet generieren:
./monero-wallet-cli --generate-from-view-key /home/pi/mining_view_wallet --daemon-address node.moneroworld.com:18089
Das Programm fragt dich nach deiner Adresse, deinem geheimen View-Key, einem Passwort (wir nutzen «dashboard») und der «Restore height». Wichtig: Gib bei «Restore height» die Blocknummer ein, ab der gesucht werden soll (z.B. 3700000), sonst dauert der Scan Wochen!
Nachdem du mit exit das Tool verlassen hast, speichern wir das Passwort für den automatischen Start:
echo "dashboard" > /home/pi/mining_view_wallet.pass
Nun erstellen wir den passenden Systemdienst für die Wallet:
sudo nano /etc/systemd/system/monero-rpc.service
[Unit]
Description=Monero View-Only RPC Node
After=network.target
[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/monero-cli
ExecStart=/home/pi/monero-cli/monero-wallet-rpc --wallet-file /home/pi/mining_view_wallet --password-file /home/pi/mining_view_wallet.pass --rpc-bind-port 18082 --disable-rpc-login --daemon-address node.moneroworld.com:18089 --trusted-daemon
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Dienst aktivieren und starten:
sudo systemctl daemon-reload
sudo systemctl enable monero-rpc.service --now
Schritt 6: Das ultimative Web-Dashboard
Nun bringen wir alles zusammen! Wir schreiben ein Skript, das die Hardware-Daten (CPU, Temperatur, RAM), die XMRig-Hashrate, die Pool-Statistiken von Nanopool und den echten Wallet-Kontostand aus unserer View-Wallet zusammenführt und eine schicke HTML-Webseite generiert.
sudo mkdir -p /opt/mining-web
sudo nano /opt/mining-web/dashboard_server.sh
Viele Skripte nutzen
awk '/^Mem:/', um den RAM auszulesen. Ist dein Pi auf Deutsch gestellt, heißt die Zeile «Speicher:» und das Skript scheitert. Die Lösung? Wir lesen einfach immer die zweite Zeile aus, egal welche Sprache eingestellt ist: awk 'NR==2{print $2}'.
Füge dieses mächtige Skript ein (vergiss nicht, ganz oben deine Wallet-Adresse einzutragen!):
#!/bin/bash
# ==========================================
# KONFIGURATION
# ==========================================
WALLET="DEINE_WALLET_ADRESSE_HIER_EINTRAGEN"
WWW_DIR="/opt/mining-web/www"
LOGFILE="/opt/mining-web/mining_dashboard.log"
mkdir -p "$WWW_DIR"
# Python Webserver starten
if ! pgrep -f "python3 -m http.server 80" > /dev/null; then
cd "$WWW_DIR"
python3 -m http.server 80 &
SERVER_PID=$!
fi
cleanup() {
if [ ! -z "$SERVER_PID" ]; then
kill "$SERVER_PID"
fi
exit 0
}
trap cleanup SIGINT SIGTERM
while true; do
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
# 1. Lokale Hashrate von XMRig abfragen
HASHRATE=$(curl -s http://127.0.0.1:19999/2/summary | jq -r '.hashrate.total[0]')
if [ -z "$HASHRATE" ] || [ "$HASHRATE" == "null" ]; then HASHRATE="0.0"; fi
# 2. Pool-Daten abfragen
POOL_DATA=$(curl -s "https://api.nanopool.org/v1/xmr/user/$WALLET")
STATUS=$(echo "$POOL_DATA" | jq -r '.status')
if [ "$STATUS" == "true" ]; then
BALANCE=$(echo "$POOL_DATA" | jq -r '.data.balance')
UNCONFIRMED=$(echo "$POOL_DATA" | jq -r '.data.unconfirmed_balance')
else
BALANCE="0.00000000"; UNCONFIRMED="0.00000000"
fi
# 3. System-Statistiken abfragen (Sprachunabhängig!)
CPU_TEMP=$(vcgencmd measure_temp | grep -o -E '[0-9.]+')
CPU_USAGE=$(vmstat 1 2 | tail -1 | awk '{print 100 - $15}')
RAM_TOTAL=$(free -m | awk 'NR==2{print $2}')
RAM_USED=$(free -m | awk 'NR==2{print $3}')
RAM_PERCENT=$(awk "BEGIN {printf \"%.1f\", ($RAM_USED/$RAM_TOTAL)*100}")
# 4. Echtes Wallet-Guthaben über RPC abfragen
RPC_RESPONSE=$(curl -s -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_balance"}' -H 'Content-Type: application/json')
if [ -z "$RPC_RESPONSE" ] || echo "$RPC_RESPONSE" | grep -q "error"; then
WALLET_BALANCE_XMR="0.00000000"
WALLET_STATUS="Synchronisiert noch..."
else
BALANCE_ATOMIC=$(echo "$RPC_RESPONSE" | jq -r '.result.balance')
if [ "$BALANCE_ATOMIC" != "null" ] && [ -n "$BALANCE_ATOMIC" ]; then
WALLET_BALANCE_XMR=$(awk "BEGIN {printf \"%.8f\", $BALANCE_ATOMIC / 1000000000000}")
WALLET_STATUS="Live (RPC Node)"
else
WALLET_BALANCE_XMR="0.00000000"
WALLET_STATUS="Starte Scan..."
fi
fi
# 5. Log schreiben
echo "[$TIMESTAMP] Hashrate: $HASHRATE H/s | CPU: $CPU_USAGE% ($CPU_TEMP C) | Pool: $BALANCE XMR | Wallet: $WALLET_BALANCE_XMR XMR" >> "$LOGFILE"
# 6. HTML generieren
cat <<EOF > "$WWW_DIR/index.html"
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Monero Mining Dashboard</title>
<style>
body { font-family: 'Segoe UI', Tahoma, sans-serif; background-color: #121212; color: #e0e0e0; margin: 0; padding: 20px; display: flex; flex-direction: column; align-items: center; }
.container { max-width: 900px; width: 100%; }
header { text-align: center; margin-bottom: 30px; border-bottom: 3px solid #f37021; padding-bottom: 15px; }
h1 { color: #f37021; margin: 0; font-size: 2.8rem; }
.subtitle { color: #a0a0a0; font-size: 1rem; margin-top: 8px; }
.grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 20px; margin-bottom: 25px; }
.card { background-color: #1e1e1e; border-radius: 10px; padding: 25px; box-shadow: 0 4px 10px rgba(0,0,0,0.5); border-left: 5px solid #f37021; }
.card.wallet { border-left-color: #0088cc; background-color: #1a2228; }
.card.system { border-left-color: #00cc66; }
.card-title { font-size: 0.85rem; text-transform: uppercase; color: #a0a0a0; margin-bottom: 12px; font-weight: bold; }
.card-value { font-size: 2rem; font-weight: bold; color: #ffffff; }
.card-unit { font-size: 1.1rem; color: #a0a0a0; font-weight: normal; }
.info-box { background-color: #1e1e1e; border-radius: 10px; padding: 20px; margin-bottom: 25px; border-left: 5px solid #444; }
.wallet-addr { font-family: monospace; word-break: break-all; font-size: 0.9rem; background-color: #2b2b2b; padding: 12px; border-radius: 6px; color: #00ffcc; margin-top: 8px; }
.footer { text-align: center; color: #555; font-size: 0.85rem; margin-top: 30px; border-top: 1px solid #222; padding-top: 15px; }
</style>
<meta http-equiv="refresh" content="60">
</head>
<body>
<div class="container">
<header>
<h1>MONERO MINING NODE</h1>
<div class="subtitle">Live-Status • Letztes Update: $TIMESTAMP</div>
</header>
<div class="grid">
<div class="card">
<div class="card-title">Aktuelle Rechenleistung</div>
<div class="card-value">$HASHRATE <span class="card-unit">H/s</span></div>
</div>
<div class="card system">
<div class="card-title">System-CPU Auslastung</div>
<div class="card-value">$CPU_USAGE <span class="card-unit">%</span></div>
<div class="subtitle" style="color: #00cc66; font-weight: bold;">Temperatur: $CPU_TEMP °C</div>
</div>
<div class="card system">
<div class="card-title">Arbeitsspeicher (RAM)</div>
<div class="card-value">$RAM_PERCENT <span class="card-unit">%</span></div>
<div class="subtitle">Belegt: $RAM_USED MB / $RAM_TOTAL MB</div>
</div>
<div class="card">
<div class="card-title">Pool Guthaben (Bestätigt)</div>
<div class="card-value">$BALANCE <span class="card-unit">XMR</span></div>
</div>
<div class="card">
<div class="card-title">Pool Guthaben (Unbestätigt)</div>
<div class="card-value">$UNCONFIRMED <span class="card-unit">XMR</span></div>
</div>
<div class="card wallet">
<div class="card-title">Echtes Wallet Guthaben</div>
<div class="card-value" style="color: #00ffcc;">$WALLET_BALANCE_XMR <span class="card-unit" style="color: #00ffcc;">XMR</span></div>
<div class="subtitle">Status: $WALLET_STATUS</div>
</div>
</div>
<div class="info-box">
<div class="card-title">Aktive Mining Wallet Adresse</div>
<div class="wallet-addr">$WALLET</div>
</div>
<div class="footer">
Raspberry Pi 4 Terminal Web-System • Logfile: /opt/mining-web/mining_dashboard.log
</div>
</div>
</body>
</html>
EOF
sleep 59
done
Skript ausführbar machen:
sudo chmod +x /opt/mining-web/dashboard_server.sh
Und als letzten Schritt den Systemdienst dafür erstellen:
sudo nano /etc/systemd/system/mining-dashboard.service
[Unit]
Description=Monero Mining Web Dashboard
After=network.target xmrig.service monero-rpc.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/mining-web
ExecStart=/bin/bash /opt/mining-web/dashboard_server.sh
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Aktiviere das Dashboard:
sudo systemctl daemon-reload
sudo systemctl enable mining-dashboard.service --now
🔥 Mein Krypto-Tipp für deinen Homescreen
Du willst deine Krypto-Kurse auf einen Blick auf deinem Homescreen haben – ohne lästige Werbung oder Datenkraken im Hintergrund? Lade dir jetzt meine App «DBH Crypto Watcher» herunter!
Fazit & Ergebnis
Das war’s! Du kannst nun an jedem Gerät in deinem Heimnetzwerk einfach die IP-Adresse deines Raspberry Pi (z.B. http://192.168.1.50) in den Browser eingeben. Dort erwartet dich dein eigenes, dunkel designtes Dashboard im Monero-Style.
Die Seite lädt sich automatisch alle 60 Sekunden neu. Wundere dich nicht, wenn die Hashrate nach einem Neustart des Pi kurz bei 0.0 H/s steht – der Pi benötigt stets rund 3 Minuten, um das RandomX-Datenset in den RAM zu laden, bevor er Vollgas gibt. Genauso kann es nach dem ersten Start dauern, bis dein echtes Wallet-Guthaben erscheint, da der RPC-Node im Hintergrund erst die neuesten Blöcke der Blockchain scannen muss.
Ein Raspberry Pi 4 liefert beim Monero-Mining rund 100 bis 120 Hashes pro Sekunde. Finanziell ist das nur bei kostenlosem Strom rentabel, aber als autarkes, lautloses Stück Technik an der eigenen Wand, das kontinuierlich Kryptowährung generiert und dir jederzeit tiefe Systemeinblicke gewährt, ist es unbezahlbar.