<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Code-Schnipsel, Gedanken, Geschichten und Ideen]]></title><description><![CDATA[Code-Schnipsel, Gedanken, Geschichten und Ideen]]></description><link>https://snippets.straessle.eu/</link><image><url>https://snippets.straessle.eu/favicon.png</url><title>Code-Schnipsel, Gedanken, Geschichten und Ideen</title><link>https://snippets.straessle.eu/</link></image><generator>Ghost 4.37</generator><lastBuildDate>Sat, 22 Nov 2025 18:35:20 GMT</lastBuildDate><atom:link href="https://snippets.straessle.eu/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[CPU Temperatur via MQTT versenden]]></title><description><![CDATA[<p>Nichts einfacher als :</p><pre><code class="language-bash"># vi /usr/local/bin/cpu-temp-mqtt.sh</code></pre><pre><code class="language-code">!/usr/bin/env bash
MQTT_SVR=&quot;IP.OF.THE.SRV&quot;
TOPIC=&quot;server/status/${HOSTNAME}/cpu&quot;
CPU=$(&lt;/sys/class/thermal/thermal_zone1/temp)
CPU=$((CPU/1000))
MESSAGE=&quot;${CPU}&quot;
mosquitto_pub -h $MQTT_SVR -t $TOPIC</code></pre>]]></description><link>https://snippets.straessle.eu/cpu-temperatur-via-mqtt-versenden/</link><guid isPermaLink="false">66f032c9e1a9aa000192760a</guid><dc:creator><![CDATA[Chris]]></dc:creator><pubDate>Sun, 22 Sep 2024 15:24:05 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1709293185602-0bb6f936d97d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE4fHx0ZW1wZXJhdHVyZXxlbnwwfHx8fDE3MjcwMTg1OTZ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1709293185602-0bb6f936d97d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE4fHx0ZW1wZXJhdHVyZXxlbnwwfHx8fDE3MjcwMTg1OTZ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="CPU Temperatur via MQTT versenden"><p>Nichts einfacher als :</p><pre><code class="language-bash"># vi /usr/local/bin/cpu-temp-mqtt.sh</code></pre><pre><code class="language-code">!/usr/bin/env bash
MQTT_SVR=&quot;IP.OF.THE.SRV&quot;
TOPIC=&quot;server/status/${HOSTNAME}/cpu&quot;
CPU=$(&lt;/sys/class/thermal/thermal_zone1/temp)
CPU=$((CPU/1000))
MESSAGE=&quot;${CPU}&quot;
mosquitto_pub -h $MQTT_SVR -t $TOPIC -m $MESSAGE -q 1
exit 0</code></pre><h3></h3><p>Dann noch die Datei ausf&#xFC;hrbar machen und via crontab regelm&#xE4;&#xDF;ig aufrufen: </p><pre><code class="language-bash"># chmod +x /usr/local/bin/cpu-temp-mqtt.sh
# crontab -e</code></pre><pre><code class="language-code"># m h  dom mon dow   command
*/10 * *   *   *     /usr/local/bin/cpu-temp-mqtt.sh</code></pre><p>... und den Service neu starten:</p><pre><code class="language-bash">#service cron restart</code></pre>]]></content:encoded></item><item><title><![CDATA[RPI - Log-Flut und die Folgen ...]]></title><description><![CDATA[<p>... SD-Karte kaputt geschrieben - Crash - und was dagegen tun?</p><p>Ein Jeder, der seinen Home-Server mittels Raspberry Pi in Betrieb hat und dieser dann (hoffentlich) seit einiger Zeit st&#xF6;rungsfrei in Betrieb ist, wird irgendwann vom Schicksal eingeholt:</p><p><strong>CRASH !! </strong></p><p>Man/frau wird den Pi noch einmal starten und gl&</p>]]></description><link>https://snippets.straessle.eu/rpi-log-flut-und-die-folgen/</link><guid isPermaLink="false">621d26d035e0970001e0779f</guid><category><![CDATA[Raspberry Pi RPI SD Karte Card storage bytes destroyed crash]]></category><dc:creator><![CDATA[Chris]]></dc:creator><pubDate>Wed, 04 Aug 2021 17:16:32 GMT</pubDate><media:content url="https://snippets.straessle.eu/content/images/2021/08/sd-karte.png" medium="image"/><content:encoded><![CDATA[<img src="https://snippets.straessle.eu/content/images/2021/08/sd-karte.png" alt="RPI - Log-Flut und die Folgen ..."><p>... SD-Karte kaputt geschrieben - Crash - und was dagegen tun?</p><p>Ein Jeder, der seinen Home-Server mittels Raspberry Pi in Betrieb hat und dieser dann (hoffentlich) seit einiger Zeit st&#xF6;rungsfrei in Betrieb ist, wird irgendwann vom Schicksal eingeholt:</p><p><strong>CRASH !! </strong></p><p>Man/frau wird den Pi noch einmal starten und gl&#xFC;cklich sein, dass er wieder hochl&#xE4;uft. Aber ein ungutes Gef&#xFC;hl bleibt zur&#xFC;ck. Warum ist er abgest&#xFC;rzt? Kann dies wieder passieren? Was, wenn die Daten verloren gehen? Liegt es wirklich daran, dass die SD-Karten kaputt-geschrieben werden?</p><p>Ursachenforschung:</p><p>Wir schauen uns zun&#xE4;chst einmal ein paar Daten an, dann entscheiden wir: Bedauerlicherweise gibt es kein allgemein g&#xFC;ltiges Tool, mit dem man die Lebensparameter einer SD-Karte auslesen k&#xF6;nnte, &#xE4;hnlich dem SMART-System einer SSD.</p><p>Mit dem Tool dumpe2fs k&#xF6;nnen wir uns aber vom Root-Dateisystem ein paar Informationen einholen:</p><pre><code># dumpe2fs /dev/mmcblk0p2 | grep Lifetime
dumpe2fs 1.44.5 (15-Dec-2018)
Lifetime writes:          35 GB
</code></pre><p>OK !!! Das ist eine Aussage! Innerhalb des &quot;Lebenszyklus&quot; dieses Dateisystem wurden bereits 35 GB geschrieben. Das ist viel, zu viel? Und, wie alt ist dieses Dateisystem eigentlich?</p><pre><code># dumpe2fs /dev/mmcblk0p2 | grep created
dumpe2fs 1.44.5 (15-Dec-2018)
Filesystem created:       Wed Dec  2 13:55:23 2020

# dumpe2fs /dev/mmcblk0p2 | grep &quot;Last mount&quot;
dumpe2fs 1.44.5 (15-Dec-2018)
Last mounted on:          /
Last mount time:          Wed Aug  4 17:17:01 2021</code></pre><p>Entscheidend sind hier also die Differenz zwischen der &quot;created&quot;-Zeit und &quot;Last mounted&quot;-Zeitpunkt. Dies sind hier gerade einmal acht Monate. Definitiv zu viele GB pro Monat !!!</p><p>Frage also: Wer schreibt und warum so viel? Nun, hier hilft uns ein Programm iotop:</p><pre><code># iotop -aok
</code></pre><p> Dies lassen wir dann mal f&#xFC;r einige Minuten laufen und kontrollieren:</p><pre><code>Total DISK READ:         0.00 K/s | Total DISK WRITE:         0.00 K/s
Current DISK READ:       0.00 K/s | Current DISK WRITE:       0.00 K/s
TID  PRIO  USER   DISK READ  DISK WRITE  SWAPIN     IO&gt;    COMMAND
1674 be/4 root      0.00 K     28.00 K  0.00 %  0.21 % portainer
83 be/3 root        0.00 K    172.00 K  0.00 %  0.13 % [jbd2/mmcblk0p2-]
591 be/4 root       0.00 K      4.00 K  0.00 %  0.00 % nmbd --fo~cess-g
643 be/4 root       0.00 K     16.00 K  0.00 %  0.00 % svlogd -t~/log/
887 be/4 root       0.00 K     24.00 K  0.00 %  0.00 % gammu-sms~d --dae
13062 be/4 roo      0.00 K     44.00 K  0.00 %  0.00 % rsyslogd ~ain Q
</code></pre><p>Hier wird also reichlich geschrieben. Nun, das Logging ist eine gute L&#xF6;sung zur Fehlersuche, aber wenn das System erst mal l&#xE4;uft, wer kontrolliert dann permant die Logs? Ich nicht, dienstlich ja, meistens, aber privat? Also m&#xF6;chte ich, dass so wenig wie m&#xF6;glich geloggt wird. Die gro&#xDF;e Keule schwingen wir in der Datei:</p><pre><code># vi /etc/rsyslog.conf

###############
#### RULES ####
###############

*.*         ~           # keine LOGS MEHR SCHREIBEN
</code></pre><p>Also direkt unter der Rubrik RULES setzen wir den Filter, der dann alles erst einmal killt. Dann noch den rsyslogd neustarten und es herscht erstmal Ruhe. </p><pre><code># service rsyslog stop
# service rsyslog start
</code></pre><p>Sollte man das Logging zur Fehlersuche wieder ben&#xF6;tigen, kann man die Schritte leicht wieder r&#xFC;ckg&#xE4;ngig machen. </p><p>Und so sollte die SD-Karte DEUTLICH l&#xE4;nger halten, bis zum n&#xE4;chsten Crash.</p>]]></content:encoded></item><item><title><![CDATA[OpenVPN Routing mit IPTables]]></title><description><![CDATA[<p></p><p>Einfaches HOWTO zur Einrichtung des lokalen Netzwerk-Routing nach der<br>Installation von OpenVPN</p><p>Damit nach der erfolgreichen Installation von OpenVPN nicht nur der (OpenVPN)<br>Server erreichbar ist, sondern auch andere Hosts im Netzwerk erreicht werden<br>k&#xF6;nnen, muss</p><p>(1) das Routing freigeschaltet werden<br>(2) die Firewall-Regeln erg&#xE4;nzt werden<br></p>]]></description><link>https://snippets.straessle.eu/openvpn-routing-mit-iptables/</link><guid isPermaLink="false">621d26d035e0970001e0779e</guid><dc:creator><![CDATA[Chris]]></dc:creator><pubDate>Wed, 09 Jun 2021 18:46:27 GMT</pubDate><media:content url="https://snippets.straessle.eu/content/images/2021/06/openvpn-2.png" medium="image"/><content:encoded><![CDATA[<img src="https://snippets.straessle.eu/content/images/2021/06/openvpn-2.png" alt="OpenVPN Routing mit IPTables"><p></p><p>Einfaches HOWTO zur Einrichtung des lokalen Netzwerk-Routing nach der<br>Installation von OpenVPN</p><p>Damit nach der erfolgreichen Installation von OpenVPN nicht nur der (OpenVPN)<br>Server erreichbar ist, sondern auch andere Hosts im Netzwerk erreicht werden<br>k&#xF6;nnen, muss</p><p>(1) das Routing freigeschaltet werden<br>(2) die Firewall-Regeln erg&#xE4;nzt werden<br>(3) die neuen, nicht gespeicherten Regeln f&#xFC;r den n&#xE4;chsten Reboot gesichert<br>werden</p><hr><p>(1) generelles Routing freischalten:</p><pre><code>vi /etc/sysctl.conf</code></pre><p>In dieser Datei das Kommentarzeichen f&#xFC;r diese Zeile entfernen, um die<br>Paketweiterleitung f&#xFC;r IPv4 zu erm&#xF6;glichen:<br></p><pre><code>net.ipv4.ip_forward=1</code></pre><pre><code>service networking restart</code></pre><p>(2) Firewall-Regeln erg&#xE4;nzen:<br>(ggfls. in den folgenden Anweisungen eth0 durch wlan0 ersetzen)</p><pre><code>iptables -t nat -A  POSTROUTING -o eth0 -j MASQUERADEiptables -A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -A FORWARD -i tun0 -o eth0 -j ACCEPT</code></pre><p>(3) Firewall-Regeln permanent speichern:</p><pre><code>apt-get install iptables-persistent</code></pre><p>...oder, falls das Paket schon installiert war ...</p><pre><code>dpkg-reconfigure iptables-persistent
reboot</code></pre>]]></content:encoded></item><item><title><![CDATA[PDF's durchsuchbar machen - mit OCRmyPDF und Automator]]></title><description><![CDATA[<!--kg-card-begin: markdown--><pre><code>KISS - &quot;keep it simple, stupid&quot;
</code></pre>
<p>Der Dateityp <strong>PDF/A</strong> ist perfekt f&#xFC;r die Archivierung von Schriftst&#xFC;cken aller Art. Somit gelangt bei mir seit Jahren alle Briefpost zun&#xE4;chst auf den Scanner, der dann brav aus vielen Seiten handliche PDF-Dateien zaubert.<br>
Soweit, so</p>]]></description><link>https://snippets.straessle.eu/pdfs-durchsuchbar-machen-mit-ocrmypdf/</link><guid isPermaLink="false">621d26d035e0970001e0779d</guid><category><![CDATA[PDF ocrmypdf tesseract automator]]></category><dc:creator><![CDATA[Chris]]></dc:creator><pubDate>Thu, 16 Jul 2020 21:01:22 GMT</pubDate><media:content url="https://snippets.straessle.eu/content/images/2020/07/ken-suarez-4IxPVkFGJGI-unsplash.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><pre><code>KISS - &quot;keep it simple, stupid&quot;
</code></pre>
<img src="https://snippets.straessle.eu/content/images/2020/07/ken-suarez-4IxPVkFGJGI-unsplash.jpg" alt="PDF&apos;s durchsuchbar machen - mit OCRmyPDF und Automator"><p>Der Dateityp <strong>PDF/A</strong> ist perfekt f&#xFC;r die Archivierung von Schriftst&#xFC;cken aller Art. Somit gelangt bei mir seit Jahren alle Briefpost zun&#xE4;chst auf den Scanner, der dann brav aus vielen Seiten handliche PDF-Dateien zaubert.<br>
Soweit, so gut. Doch es sei angemerkt, dass es sich hierbei um SCAN&apos;s handelt, also nicht um maschinenlesbare und somit auswertbare, durchsuchbare PDF-Dateien. Doch dieses Manko l&#xE4;sst sich dank der Arbeit von OCR-Software schnell und einfach l&#xF6;sen. Genutzt wurde hier das Framework <strong>tesseract</strong>, welches aber bedauerlicherweise <strong>keine</strong> PDF-Dateien als Eingaben mag. Somit hat <em>jbarlow83</em> sich die M&#xFC;he gemacht, dies zu verbessern. Und diesmal so, dass PDF-Dateien gelesen werden k&#xF6;nnen, die Texterkennung gestartet wird und anschlie&#xDF;end der erkannte Text als durchsichtige Maske &#xFC;ber den Scan gelegt wird. Die Dateigr&#xF6;&#xDF;e &#xE4;ndert sich nur minimal, es werden automatisch zukunftssichere PDF/A-Dateien erzeugt und somit eignet sich diese L&#xF6;sung perfekt f&#xFC;r ein Langzeitarchiv.<br>
Die Installation ist dank <em>brew</em> auch denkbar einfach:</p>
<pre><code># brew install ocrmypdf
</code></pre>
<p>Nun kann man testweise einmal eine Datei umwandeln lassen:</p>
<pre><code># ocrmypdf input.pdf output.pdf -l deu+eng
</code></pre>
<p>wandelt das input.pdf nach output.pdf und verwendet f&#xFC;r die Texterkennung die Sprachen Deutsch und Englisch.</p>
<p>Je nach Seitenanzahl und CPU-Power dauert dies pro Dokument einige Sekunden.<br>
Hiernach wird man zun&#xE4;chst keinen Unterschied feststellen. Wenn das nun gewonnene Dokument in &quot;Vorschau&quot; &#xF6;ffnet, kann man mit gedr&#xFC;ckter Maustaste den Text markieren und per Zwischenablage in ein anderes Dokument &#xFC;bertragen.</p>
<p><strong>PERFEKT - Oder doch noch nicht vollst&#xE4;ndig?</strong></p>
<p>Nein, nicht ganz. Denn es haben sich um Laufe der Zeit hunderte Dokumente angesammelt. Und zu allem &#xDC;berfluss wurde hier eine <em>neue</em> Datei erschaffen und die Zeit-/Datumsinformationen der Ursprungsdatei gingen verloren.</p>
<p>Also noch einmal zur&#xFC;ck an Reissbrett:<br>
<img src="https://snippets.straessle.eu/content/images/2020/07/Bildschirmfoto-2020-07-16-um-23.41.07.png" alt="PDF&apos;s durchsuchbar machen - mit OCRmyPDF und Automator" loading="lazy"></p>
<p>Und nun zeigt sich die St&#xE4;rke von Mac OS X: mit Automator wird die Sache hier rund, und zwar wirklich einfach.<br>
<em>Automator kennen Sie nicht? Sie arbeiten seit Jahren mit Apple-Rechnern? Gut, die wenigsten kennen die echte Power unter der Haube</em></p>
<p>Wir klicken auf <strong>Launchpad</strong>, suchen den grauen Kasten <strong>Andere</strong> und finden darin <strong>Automator</strong><br>
<img src="https://snippets.straessle.eu/content/images/2020/07/Bildschirmfoto-2020-07-16-um-23.45.47.png" alt="PDF&apos;s durchsuchbar machen - mit OCRmyPDF und Automator" loading="lazy"><br>
Dort w&#xE4;hlen wir links unten <strong>Neues Dokument</strong> und anschlie&#xDF;end <strong>Schnellaktion</strong>.<br>
In das Suchfeld (Lupe, blinkender Cursor) geben wir <em>shell</em> ein und best&#xE4;tigen das Ergebnis <strong>shell-Skript ausf&#xFC;hren</strong> mit Enter.</p>
<p>In dem gro&#xDF;en grauen Feld geben wir das folgende Script ein:</p>
<pre><code>export PATH=/usr/local/bin:$PATH
for f in &quot;$@&quot;
do
    t=&quot;$(/usr/bin/GetFileInfo -d &quot;$f&quot;)&quot;
	ocrmypdf &quot;$f&quot; &quot;$f&quot; -l &quot;deu+eng&quot; --skip-text
    /usr/bin/SetFile -m &quot;$t&quot; -d &quot;$t&quot; &quot;$f&quot;
done
</code></pre>
<p>Erkl&#xE4;rung:<br>
Die erste Zeile Zeile erweitert den Suchpfad f&#xFC;r das Programm um den Pfad /usr/local/bin, dann beginnt die Abarbeitung der Dateien:</p>
<ol>
<li>Der Timestamp wird in die Variable <strong>t</strong> gerettet</li>
<li>Das Script <strong>ocrmypdf</strong> wird ausgef&#xFC;hrt, die Originaldatei hierbei &#xFC;berschrieben. Sollte diese bereits bearbeitet worden sein, sorgt --skip-text daf&#xFC;r, dass keine Fehlermeldung den Vorgang abbricht:</li>
<li>Die gerettete Zeit-/Datumsinformation wird mit SetFile zur&#xFC;ckgesichert.</li>
</ol>
<p>WICHTIG: Beachten Sie die Gro&#xDF;-/Kleinschreibung in Zeilen 1. und 3.</p>
<p>Die Men&#xFC;punkte der Pull-Down-Men&#xFC;s oben entsprechend einstellen:<br>
<img src="https://snippets.straessle.eu/content/images/2020/07/Bildschirmfoto-2020-07-16-um-23.54.41.png" alt="PDF&apos;s durchsuchbar machen - mit OCRmyPDF und Automator" loading="lazy"></p>
<p>Abschlie&#xDF;end in <strong>Ablage - Sichern</strong> noch einen sprechenden Namen eintragen, unter dem das Script zuk&#xFC;nftig erreichbar sein soll.</p>
<p>Alle Finder-Fenster nun schlie&#xDF;en, Finder &#xF6;ffnen und mit einem Rechtsklick auf dem/den PDF&apos;s die Schnellaktion mit dem oben vergebenen Namen ausw&#xE4;hlen.</p>
<p>Ein sich drehendes Zahnrad ganz oben neben der Uhr/WLAN-Anzeige zeigt an, dass der Automator arbeitet. Etwas Geduld, dann sind auch viele Dateien einfach konvertiert.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[RPI mit SSD -- schneller und sicherer ohne Crash]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Howto: Umzug eines konfigurierten Raspberry PI-Systems auf eine USB-SSD</p>
<p><em>Hier wird der Einsatz einer SSD als <strong>Root</strong>-Dateisystem zusammen mit einer SD-Karte als <strong>Boot</strong>-Medium beschrieben. Diese Vorgehensweise ist f&#xFC;r alle RPI&apos;s m&#xF6;glich. Das native Booten von USB mit einem RPI3 wird <a href="https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/msd.md">hier</a> beschrieben.</em></p>]]></description><link>https://snippets.straessle.eu/rpi-mit-ssd-schneller-und-sicherer/</link><guid isPermaLink="false">621d26d035e0970001e0779a</guid><category><![CDATA[Raspberry PI faster  - disaster recovery]]></category><dc:creator><![CDATA[Chris]]></dc:creator><pubDate>Sat, 18 Aug 2018 09:16:41 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1438109954014-21b3cf55a0d0?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ&amp;s=0724442af55cbf59bf4fa3a2253c329b" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://images.unsplash.com/photo-1438109954014-21b3cf55a0d0?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ&amp;s=0724442af55cbf59bf4fa3a2253c329b" alt="RPI mit SSD -- schneller und sicherer ohne Crash"><p>Howto: Umzug eines konfigurierten Raspberry PI-Systems auf eine USB-SSD</p>
<p><em>Hier wird der Einsatz einer SSD als <strong>Root</strong>-Dateisystem zusammen mit einer SD-Karte als <strong>Boot</strong>-Medium beschrieben. Diese Vorgehensweise ist f&#xFC;r alle RPI&apos;s m&#xF6;glich. Das native Booten von USB mit einem RPI3 wird <a href="https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/msd.md">hier</a> beschrieben.</em></p>
<p>Der Raspberry Pi wird standardm&#xE4;&#xDF;ig mit einer SD-Karte als Massenspeicher ausgeliefert. An diesem Ansatz ist prinzipiell nichts auszusetzen. Allerdings setzen viele Schreibzugriffe auf dieses Medium der Freude an der Stabilit&#xE4;t schnell Grenzen, und auch ich habe bereits SD-Karten <em>zerschrieben</em>. Gerade mit dem Einsatz vieler Docker-Container ist die Gefahr gestiegen.</p>
<p>Ben&#xF6;tigt werden:</p>
<ul>
<li>SD-Karte (bereits vorhanden, System bereits eingerichtet)</li>
<li>SSD, 2,5&quot;, SATA (m&#xF6;glichst keine Harddisk, Stichwort Stromaufnahme)</li>
<li>USB nach SATA-Adapter oder kleines Leer-Geh&#xE4;use f&#xFC;r externe USB-Laufwerke</li>
</ul>
<p>Die nachfolgenden Schritte werden hier unter macOS beschrieben und sind unter Linux &#xE4;hnlich:</p>
<ul>
<li>(1) ein Image der SD-Karte erstellen</li>
<li>(2) dieses Image auf die SSD schreiben</li>
<li>(3) einen Eintrag in der cmdline.txt &#xE4;ndern</li>
<li>(4) Neustart -&gt; Fertig!</li>
</ul>
<p>(1) Zun&#xE4;chst wird der RPI heruntergefahren und von der SD-Karte ein Image erstellt, welches als Backup dann auf die SSD geschrieben wird.<br>
Also die SD-Karte in den Slot des Mac&apos;s gesteckt, kurz gewartet und auf dem Mac ein Terminal ge&#xF6;ffnet (Strg-Leertaste und dann <em>terminal</em> eingeben)</p>
<pre><code># diskutil list&#xA0;
...
/dev/disk3 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *8.0 GB     disk3
   1:             Windows_FAT_32 boot                    66.1 MB    disk3s1
   2:                      Linux                         7.9 GB     disk3s2
...
</code></pre>
<p>Hier werden nun die einzelnen Speichermedien des Mac&apos;s aufgelistet<br>
ACHTUNG: WICHTIG: Hier nun das richtige Medium ausw&#xE4;hlen und sich merken ( in diesem Beispiel ist es die Platte /dev/disk3, erkennbar an zwei Partitionen FAT32 und Linux und der Gr&#xF6;&#xDF;e 8GB.<br>
Diese Bezeichnung gilt nun f&#xFC;r alle nachfolgenden Schritte. Sollte es bei Ihnen also die /dev/disk2 verweisen, so gilt dies als &quot;2&quot; f&#xFC;r alle Schritte.</p>
<p>Damit MacOS die Partitionen freigibt, werden diese zun&#xE4;chst ungemounted:</p>
<pre><code># diskutil umount /dev/disk3&#xA0;
</code></pre>
<p>Dann kann ein Image der SD-Karte gezogen werden. ACHTUNG: Damit es schneller geht, werden wir nun auf das <em>RAW Device</em> zugreifen, d.h. aus disk3 wird nun rdisk3!!</p>
<pre><code># sudo dd if=/dev/rdisk3 of=raspi.img bs=8m&#xA0;
</code></pre>
<p>Dies wird nun etwas dauern, Ungeduldige d&#xFC;rfen mit CTRL+t &quot;nachschauen&quot;, wie viele Bytes denn schon geschrieben sind.</p>
<pre><code>load: 1.04  cmd: dd 962 uninterruptible 0.00u 4.54s
723+0 records in
722+0 records out
6056574976 bytes transferred in 314.570090 secs (19253499 bytes/sec)

950+0 records in
950+0 records out
7969177600 bytes transferred in 440.643784 secs (18085306 bytes/sec)
</code></pre>
<p>Nach Beendigung liegt im Benutzerverzeichnis des Mac&apos;s eine Datei mit dem Namen raspi.img als Sicherheitskopie vor. Die SD-Karte kann nun ausgeworfen werden.</p>
<pre><code># diskutil umountDisk /dev/disk3&#xA0;
</code></pre>
<p>Haben Sie den unterschied gesehen? Auch hier ist der Befehl &#xE4;hnlich dem ersten Befehl &quot;umount&quot;, allerdings wird hier mit &quot;umount<em>Disk</em>&quot; nun der <strong>gesamte</strong> Datentr&#xE4;ger ausgeworfen, &#xE4;hnlich dem &quot;Rechtsklick - Datentr&#xE4;ger auswerfen&quot; auf dem Desktop.</p>
<p>(2) Nun wird dieses Image auf die SSD geschrieben. ACHTUNG: die Eintr&#xE4;ge von InputFile <em>if</em> und OutputFile <em>of</em> werden nun vertauscht.</p>
<p>SSD per USB verbinden und auch zun&#xE4;chst unmounten:</p>
<pre><code># diskutil umount /dev/disk3&#xA0;
</code></pre>
<p>und zur&#xFC;cksichern:</p>
<pre><code># sudo dd if=raspi.img of=/dev/rdisk3 bs=8m&#xA0;
</code></pre>
<p>(3) Abschlie&#xDF;end muss dem Raspberry Pi nun noch mitgeteilt werden, dass er nach dem Einschalten und Booten von der SSD nach dem Laden des Kernels auf die SSD zugreifen soll. Dies passiert in der Datei <em>cmdline.txt</em>.<br>
Die k&#xF6;nnen wir &#xFC;ber den Desktop editieren. Auf dem Desktop den Datentr&#xE4;ger &quot;Boot&quot; &#xF6;ffnen, die Datei &quot;cmdline.txt&quot; mit Doppelklick &#xF6;ffnen und den Eintrag</p>
<pre><code>root=/dev/mmcblk0p2 
</code></pre>
<p>durch</p>
<pre><code>root=/dev/sda2
</code></pre>
<p>ersetzen. Ersteres war der Eintrag auf die zweite Partion der SD-Karte (MMC-Block-Device), zweiteres ist der neue Eintrag auf die zweite Partition der SSD.</p>
<p>(4) Nun die SSD auswerfen (Rechtsklick - &quot;boot&quot; auswerfen), alles an RasPi anschlie&#xDF;en (SD-Karte <strong>und</strong> SSD via USB), f&#xFC;ran startet der RasPi nach dem Boot von der SD mit dem Root-Dateisystem von der SSD schneller und sicherer. Und im &quot;Fall des Knalls&quot; hat man eine Datensicherung, die man einfach auf die SSD wieder zur&#xFC;cksichert.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[RPI-Monitor -- Docker-Überwachung für den Host]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Wie sind die Vital-Werte des Host? Laufen Container wild? Wie sind Netzwerk-Auslastung? Oder die Speicherplatzbelegung?</p>
<p>Viele Fragen ergeben sich beim Einsatz von Docker-Container, gerade beim Einsatz von vielen Container auf kleiner Hardware.<br>
Um hier den &#xDC;berblick zur&#xFC;ckzugewinnen, empfiehlt sich der Einsatz eines Monitoring-Tools, examplarisch wird nun <a href="https://github.com/michaelmiklis/docker-rpi-monitor/">rpi-monitor</a></p>]]></description><link>https://snippets.straessle.eu/rpi-monitor-docker-uberwachung-fur-den-host/</link><guid isPermaLink="false">621d26d035e0970001e07799</guid><category><![CDATA[rpi-monitor monitoring docker host raspberry pi]]></category><dc:creator><![CDATA[Chris]]></dc:creator><pubDate>Thu, 10 May 2018 12:10:11 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1517077304055-6e89abbf09b0?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ&amp;s=c8390e0323921075d83d147a850aab6a" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://images.unsplash.com/photo-1517077304055-6e89abbf09b0?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ&amp;s=c8390e0323921075d83d147a850aab6a" alt="RPI-Monitor -- Docker-&#xDC;berwachung f&#xFC;r den Host"><p>Wie sind die Vital-Werte des Host? Laufen Container wild? Wie sind Netzwerk-Auslastung? Oder die Speicherplatzbelegung?</p>
<p>Viele Fragen ergeben sich beim Einsatz von Docker-Container, gerade beim Einsatz von vielen Container auf kleiner Hardware.<br>
Um hier den &#xDC;berblick zur&#xFC;ckzugewinnen, empfiehlt sich der Einsatz eines Monitoring-Tools, examplarisch wird nun <a href="https://github.com/michaelmiklis/docker-rpi-monitor/">rpi-monitor</a> vorgestellt.</p>
<p><img src="https://snippets.straessle.eu/content/images/2018/05/rpi-monitor.png" alt="RPI-Monitor -- Docker-&#xDC;berwachung f&#xFC;r den Host" loading="lazy"></p>
<pre><code># mkdir /docker/rpi-mon
# mkdir /docker/rpi-mon/usr-lib
# cd /docker/rpi-mon
</code></pre>
<p>In diesem Verzeichnis werden drei Dateien angelegt: <em>Dockerfile, docker-compose.yaml</em> und <em>run.sh</em>. Diese habe ich angepasst, um z.B. das persistente Speichern der Statistik-Daten RRD auch nach Neu-Build zu gew&#xE4;hrleisten.</p>
<p>Dockerfile</p>
<pre><code># https://github.com/michaelmiklis/docker-rpi-monitor/blob/master/Dockerfile
FROM resin/rpi-raspbian:latest

LABEL maintainer=&quot;Michael Miklis / &lt;info@michaelmiklis.de&gt;&quot;

RUN [ &quot;cross-build-start&quot; ]

ENV  DEBIAN_FRONTEND noninteractive

# Install RPI-Monitor form Xavier Berger&apos;s repository
RUN apt-get -y update &amp;&amp; \
    apt-get install -y --no-install-recommends dirmngr apt-transport-https ca-certificates  &amp;&amp; \
    apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 2C0D3C0F &amp;&amp; \
    echo deb http://giteduberger.fr rpimonitor/ &gt; /etc/apt/sources.list.d/rpimonitor.list &amp;&amp; \
    apt-get -y update &amp;&amp; \
    apt-get install -y rpimonitor &amp;&amp; \
    apt-get clean &amp;&amp; \
    apt-get autoclean &amp;&amp; \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* &amp;&amp; \
    sed -i &apos;s/\/sys\//\/dockerhost\/sys\//g&apos; /etc/rpimonitor/template/* &amp;&amp; \ 
    sed -i &apos;s/\/etc\/os-release/\/dockerhost\/usr\/lib\/os-release/g&apos; /etc/rpimonitor/template/version.conf &amp;&amp; \
    sed -i &apos;s/\/proc\//\/dockerhost\/proc\//g&apos; /etc/rpimonitor/template/* &amp;&amp; \
    echo include=/etc/rpimonitor/template/wlan.conf &gt;&gt; /etc/rpimonitor/data.conf &amp;&amp; \
    sed -i &apos;/^web.status.1.content.8.line/ d&apos; /etc/rpimonitor/template/network.conf &amp;&amp; \
    sed -i &apos;/^#web.status.1.content.8.line/s/^#//g&apos; /etc/rpimonitor/template/network.conf &amp;&amp; \
    sed -i &apos;s/\#dynamic/dynamic/g&apos; /etc/rpimonitor/template/network.conf &amp;&amp; \
    sed -i &apos;s/\#web.statistics/web.statistics/g&apos; /etc/rpimonitor/template/network.conf  
    
# Allow access to port 8888
EXPOSE 8888

# persistente Daten in den Container-Build kopieren
COPY ./usr-lib/ /var/lib/rpimonitor/stat/

# Start rpimonitord using run.sh wrapper script
ADD run.sh /run.sh
RUN chmod +x /run.sh
CMD bash -C &apos;/run.sh&apos;;&apos;bash&apos;

RUN [ &quot;cross-build-end&quot; ]
</code></pre>
<p>docker-compose.yaml</p>
<pre><code>rpi-monitor:
# https://rpi-experiences.blogspot.de/2018/02/rpi-monitor-docker-container.html
# https://github.com/michaelmiklis/docker-rpi-monitor/issues/1

  container_name: rpimon
  image: michaelmiklis/rpi-monitor
  restart: unless-stopped
  ports:
    - &quot;8888:8888&quot;
  devices:
    - &quot;/dev/vchiq&quot;
    - &quot;/dev/vcs&quot;
  volumes:
    - /opt/vc:/opt/vc/
    - /boot/:/boot/
    - /sys/:/dockerhost/sys/:ro
    - /etc/:/dockerhost/etc/:ro
    - /proc/:/dockerhost/proc/:ro
    - /usr/lib/:/dockerhost/usr/lib/:ro
    - ./usr-lib:/var/lib/rpimonitor/stat/
</code></pre>
<p>run.sh</p>
<pre><code>#!/bin/bash

# Load shared libraries from /opt/vc/lib
echo /opt/vc/lib &gt; /etc/ld.so.conf.d/00-vmcs.conf
ldconfig

# Link /opt/vc/bin binaries to /usr/bin
ln -s /opt/vc/bin/raspividyuv /usr/bin/raspividyuv
ln -s /opt/vc/bin/dtmerge /usr/bin/dtmerge
ln -s /opt/vc/bin/raspistill /usr/bin/raspistill
ln -s /opt/vc/bin/vcgencmd /usr/bin/vcgencmd
ln -s /opt/vc/bin/vcdbg /usr/bin/vcdbg
ln -s /opt/vc/bin/dtoverlay-pre /usr/bin/dtoverlay-pre
ln -s /opt/vc/bin/raspiyuv /usr/bin/raspiyuv
ln -s /opt/vc/bin/vchiq_test /usr/bin/vchiq_test
ln -s /opt/vc/bin/tvservice /usr/bin/tvservice
ln -s /opt/vc/bin/edidparser /usr/bin/edidparser
ln -s /opt/vc/bin/raspivid /usr/bin/raspivid
ln -s /opt/vc/bin/dtoverlay-post /usr/bin/dtoverlay-post
ln -s /opt/vc/bin/dtoverlay /usr/bin/dtoverlay
ln -s /opt/vc/bin/dtparam /usr/bin/dtparam

# Insert Docker Host hostname into raspbian.conf
DOCKERHOST=$(cat /dockerhost/etc/hostname)
sed -i &quot;s/&apos;+data.hostname+&apos;/$DOCKERHOST/g&quot; /etc/rpimonitor/template/raspbian.conf

# Update RPI Monitor Package Status
/etc/init.d/rpimonitor install_auto_package_status_update
/usr/share/rpimonitor/scripts/updatePackagesStatus.pl

# Start RPI Monitor
/usr/bin/rpimonitord -v
</code></pre>
<p>HINT:<br>
Bei Testen wollte ich zun&#xE4;chst alle entstandenen Statistikdaten aus dem Container in den Host kopieren. In der Shell werden mit * alle Dateien eines Ordners angesprochen. Dies gilt NICHT f&#xFC;r den <em>docker cp</em>-Befehl! Der &quot;.&quot;-Punkt ist richtig.</p>
<pre><code># cd /docker/rpi-mon/usr-lib
# docker cp rpimon:/var/lib/rpimonitor/stat/. .  # KORREKT !!
# docker cp rpimon:/var/lib/rpimonitor/stat/* .  # FALSCH !!
</code></pre>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[PORTAINER -- alle Docker-Container im Blick]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p><strong>Best Practice</strong> im Docker-Umfeld bedeutet, dass sinnvollerweise pro Service ein eigener Container benutzt wird. Da kommen schnell mehrere H&#xE4;nde voll Container zusammen. Auf der Kommandozeile sind die mit</p>
<pre><code># docker ps
</code></pre>
<p>schnell aufgelistet. Allerdings ist eine Weboberfl&#xE4;che, mit deren Hilfe Images, Container und die Netzwerke wenigstens rudiment&</p>]]></description><link>https://snippets.straessle.eu/raspberry-pi-monitoring-mit-docker/</link><guid isPermaLink="false">621d26d035e0970001e07798</guid><category><![CDATA[PORTAINER Docker RPI Raspberry Pi]]></category><dc:creator><![CDATA[Chris]]></dc:creator><pubDate>Thu, 10 May 2018 09:18:16 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1493946740644-2d8a1f1a6aff?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ&amp;s=2a42149bdadb9808b62d87f71f08dab1" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://images.unsplash.com/photo-1493946740644-2d8a1f1a6aff?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ&amp;s=2a42149bdadb9808b62d87f71f08dab1" alt="PORTAINER -- alle Docker-Container im Blick"><p><strong>Best Practice</strong> im Docker-Umfeld bedeutet, dass sinnvollerweise pro Service ein eigener Container benutzt wird. Da kommen schnell mehrere H&#xE4;nde voll Container zusammen. Auf der Kommandozeile sind die mit</p>
<pre><code># docker ps
</code></pre>
<p>schnell aufgelistet. Allerdings ist eine Weboberfl&#xE4;che, mit deren Hilfe Images, Container und die Netzwerke wenigstens rudiment&#xE4;r administriert werden k&#xF6;nnen, schnell auf der Wunschliste. Hier kommt PORTAINER ins Spiel.</p>
<p><img src="https://snippets.straessle.eu/content/images/2018/05/portainer.png" alt="PORTAINER -- alle Docker-Container im Blick" loading="lazy"></p>
<p>Hier sind alle Aktivit&#xE4;ten im &#xDC;berblick verf&#xFC;gbar. Auch die Installation ist denkbar einfach:</p>
<pre><code># mkdir /docker/portainer
# mkdir /docker/portainer/data
# vi /docker/portainer/docker-compose.yaml
</code></pre>
<p>docker-compose.yaml:</p>
<pre><code>version: &apos;2&apos;

services:
    portainer:
        image: portainer/portainer
        container_name: &quot;portainer&quot;
        restart: always
        expose:
            - &quot;9000&quot;
        ports:
          - &quot;9000:9000&quot;
        volumes:
          - ./data:/data
          - /var/run/docker.sock:/var/run/docker.sock
          # Automatically choose &apos;Manage the Docker instance where Portainer is running&apos; by adding &lt;--host=unix:///var/run/docker.sock&gt; to the command
          #    command: --templates http://templates/templates.json
</code></pre>
<p>Das Image wird direkt aus dem Hub bezogen und per Browser &#xFC;ber den Port 9000 administriert. Weitere Informationen sind unter <a href="https://hub.docker.com/r/portainer/portainer/">https://hub.docker.com/r/portainer/portainer/</a> erreichbar.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Ghost im Docker-Container]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>... und nat&#xFC;rlich alles auf einem Raspberry PI !</p>
<p>UPDATE 2020/2021 s. unten</p>
<p>Eigentlich war es anders geplant, lediglich ein paar statische HTML-Seiten auf meiner Webpr&#xE4;senz, kein CMS, keine Datenbank ... nur Apache und gut.</p>
<p>Aber wenn ich schnell mal ein paar Gedanken zu Papier bringen m&#xF6;</p>]]></description><link>https://snippets.straessle.eu/ghost-im-docker-container/</link><guid isPermaLink="false">621d26d035e0970001e07795</guid><dc:creator><![CDATA[Chris]]></dc:creator><pubDate>Wed, 02 May 2018 18:55:47 GMT</pubDate><media:content url="https://snippets.straessle.eu/content/images/2018/05/Container-str-eu-ghost.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://snippets.straessle.eu/content/images/2018/05/Container-str-eu-ghost.png" alt="Ghost im Docker-Container"><p>... und nat&#xFC;rlich alles auf einem Raspberry PI !</p>
<p>UPDATE 2020/2021 s. unten</p>
<p>Eigentlich war es anders geplant, lediglich ein paar statische HTML-Seiten auf meiner Webpr&#xE4;senz, kein CMS, keine Datenbank ... nur Apache und gut.</p>
<p>Aber wenn ich schnell mal ein paar Gedanken zu Papier bringen m&#xF6;chte? Rein nur statisches HTML? Nein, das ist zu komplex!</p>
<p>Dann las ich etwas &#xFC;ber Ghost, im Docker-Container, OK? Als Einzeiler auf meinem Raspberry Pi 2 getestet ... und begeistert ;-)</p>
<pre><code># mkdir /docker/ghost
# mkdir /docker/ghost/blog
# cd /docker/ghost
# docker run -d --name my-ghost \
  -v /docker/ghost/blog:/var/lib/ghost/content \
  -p 2368:2368  arm32v7/ghost:1
</code></pre>
<p>Es ist Magie, nach wenigen Sekunden steht unter <a href="http://IP-Raspberry:2368">http://IP-Raspberry:2368</a> eine erste Testseite des Ghost-Systems zur Verf&#xFC;gung. Ein paar erste Eintr&#xE4;ge, die den Eindruck vermitteln, was das System leisten kann.<br>
Administriert wird alles via <a href="http://IP-Raspberry:2368/ghost">http://IP-Raspberry:2368/ghost</a> , dort kann man den Default-User und die Test-Blogs l&#xF6;schen und seinen eigenen User anlegen.<br>
Text einf&#xFC;gen, oben rechts auf das Zahnrad klicken, dort noch ein Bild hochladen und ein paar Erg&#xE4;nzungen .... Publish - Fertig!</p>
<p><img src="https://images.unsplash.com/photo-1585776245991-cf89dd7fc73a?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MXwxMTc3M3wwfDF8c2VhcmNofDF8fHVwZGF0ZXxlbnwwfHx8&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=1080" alt="Ghost im Docker-Container" loading="lazy"><br>
<small><a href="https://unsplash.com/@markuswinkler?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"><br>
</a></small></p>
<p>UPDATE 2020/2021:</p>
<p>... und wenn man noch einen Ghost anlegen m&#xF6;chte, der als getrennte (Sub-)-Domain erreichbar sein soll? Und dann bitte auch die aktuelle Version?</p>
<p>Nun, die &#xC4;nderungen sind marginal:</p>
<pre><code># mkdir /docker/ghost2
# mkdir /docker/ghost2/blog
# cd /docker/ghost2
# docker run -d --name my-ghost2 \
  -v /docker/ghost2/blog:/var/lib/ghost/content \
  -p 2369:2368 arm32v7/ghost
</code></pre>
<p>Derart marginal, dass sie fast nicht auffallen:</p>
<ol>
<li>ein neues Unterverzeichnis (ghost2) und dessen Unterverzeichnis blog anlegen</li>
<li>mit dem docker run wird nun auch der neue Name und das neue Volume mitgeteilt</li>
<li>WICHTIG! Die Ports m&#xFC;ssen nun umgebogen werden 2369 -&gt; 2368 f&#xFC;r die Administration und die Darstellung des Content f&#xFC;r die ganze Welt</li>
<li>...und wenn das &quot;:1&quot; hinter dem arm32v7/ghost weggelassen wird, dann zieht sich der RPI gleich das aktuellste Ghost</li>
</ol>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[OpenVPN <-> TUNNELBLICK  #DNS?]]></title><description><![CDATA[<!--kg-card-begin: markdown--><ul>
<li>DNS-Problem</li>
</ul>
<p>Das VPN mit OpenVPN auf meinen OpenVPN-Server in der DMZ l&#xE4;uft problemlos, allerdings werden DNS-Anfragen mit Tunnelblick (MacBook mit macOS) NICHT getunnelt. Dies ist insbesondere vor dem Gesichtspunkt meines lokalen Werbeblockers PI-HOLE eines echtes Minus. Ich m&#xF6;chte, auch wenn ich nicht zuhause bin, mit dem</p>]]></description><link>https://snippets.straessle.eu/openvpn-tunnelblick-dns-problem/</link><guid isPermaLink="false">621d26d035e0970001e07797</guid><category><![CDATA[VPN - OpenVPN - Tunnelblick - push - dhcp - dns]]></category><dc:creator><![CDATA[Chris]]></dc:creator><pubDate>Mon, 30 Apr 2018 10:36:00 GMT</pubDate><media:content url="https://snippets.straessle.eu/content/images/2018/05/tunnelblick.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><ul>
<li>DNS-Problem</li>
</ul>
<img src="https://snippets.straessle.eu/content/images/2018/05/tunnelblick.png" alt="OpenVPN &lt;-&gt; TUNNELBLICK  #DNS?"><p>Das VPN mit OpenVPN auf meinen OpenVPN-Server in der DMZ l&#xE4;uft problemlos, allerdings werden DNS-Anfragen mit Tunnelblick (MacBook mit macOS) NICHT getunnelt. Dies ist insbesondere vor dem Gesichtspunkt meines lokalen Werbeblockers PI-HOLE eines echtes Minus. Ich m&#xF6;chte, auch wenn ich nicht zuhause bin, mit dem Werbeblocker surfen.</p>
<p>L&#xF6;sung:</p>
<p>Serverseitig in der /etc/openvpn/openvpn.conf den/die PUSHes eintragen:</p>
<pre><code>push &quot;dhcp-option DNS IP-des-PI-Hole&quot;  &lt;- hier die IP-Adresse eintragen

</code></pre>
<p>Client-seitig ist anzumerken, dass diese allerdings auf der &#xE4;lteren Version Tunnelblick 3.7.0 nicht aktiv wird. Ein Update auf die Version 3.7.5 gibt unter<br>
<em>- Einstellungen - Erweitert - Verbinden &amp; Trennen -</em><br>
den neuen Men&#xFC;punkt &quot;&#xC4;nderungen an manuell ver&#xE4;nderten Netzwerkeinstellungen erlauben&quot;. Anklicken, verbinden und nun auch aus der Ferne mit dem heimischen Werbeblocker surfen ...</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Pi-hole - Das schwarze Loch für Werbung #Docker]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Pi-hole - Werbeblocker</p>
<p>F&#xFC;r die Docker-Umgebung wird das <a href="https://hub.docker.com/r/diginc/pi-hole/">&#x2FFB;Image von diginc</a> benutzt. Da sich hier in der Vergangenheit &#xC4;nderungen ergeben haben (kein alpine mehr, stattdessen debian), wurde die URL auf die neue MultiArchitecture angepasst:</p>
<p>docker-compose.yaml:</p>
<pre><code>version: &apos;2&apos;
services:
pihole:
container_name: pihole
restart:</code></pre>]]></description><link>https://snippets.straessle.eu/p/</link><guid isPermaLink="false">621d26d035e0970001e07796</guid><category><![CDATA[Pi-hole pihole docker container werbeblocker]]></category><dc:creator><![CDATA[Chris]]></dc:creator><pubDate>Sun, 29 Apr 2018 08:40:00 GMT</pubDate><media:content url="https://snippets.straessle.eu/content/images/2018/05/Bildschirmfoto-2018-05-03-um-10.58.17.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://snippets.straessle.eu/content/images/2018/05/Bildschirmfoto-2018-05-03-um-10.58.17.png" alt="Pi-hole - Das schwarze Loch f&#xFC;r Werbung #Docker"><p>Pi-hole - Werbeblocker</p>
<p>F&#xFC;r die Docker-Umgebung wird das <a href="https://hub.docker.com/r/diginc/pi-hole/">&#x2FFB;Image von diginc</a> benutzt. Da sich hier in der Vergangenheit &#xC4;nderungen ergeben haben (kein alpine mehr, stattdessen debian), wurde die URL auf die neue MultiArchitecture angepasst:</p>
<p>docker-compose.yaml:</p>
<pre><code>version: &apos;2&apos;
services:
pihole:
container_name: pihole
restart: unless-stopped
image: diginc/pi-hole-multiarch:debian_armhf
environment:
- ServerIP=192.168.x.y  #&lt;- IP des Docker-Servers !!!
- TZ=Europe/Berlin
- WEBPASSWORD=*leer*
- DNS1=1.1.1.1         #   &lt;- DNS-Server Cloudflare
- DNS2=8.8.8.8         #   &lt;- DNS-Server Google
volumes:
- ./pihole/:/etc/pihole/  # &lt;- Konfiguration persistent 
- ./dnsmasq.d/:/etc/dnsmasq.d/
ports:
- &quot;80:80&quot;   # &lt;-  kein anderer Webserver parallel !!
- &quot;53:53/tcp&quot;
- &quot;53:53/udp&quot;
</code></pre>
<p>Die Administration erfolgt via <a href="http://IP-Raspberry/admin">http://IP-Raspberry/admin</a> , dort mit dem oben gesetzten Passwort einloggen und ggfls. hier noch weitere Config-&#xC4;nderungen einpflegen.</p>
<p>Dann im DSL-Router den DNS-Server manuell eintragen, hier also die IP des Raspberry Pi. Dort antwortet dann Pi-hole auf Port 53 auf die DNS-Queries, pr&#xFC;ft gegen die Block-/Black-/Whitelists ab und stellt die Anfragen an einen der beiden in der YAML eingetragenen DNS-Server von Cloudflare oder Google.</p>
<p>Werbung ade ;-) .....</p>
<!--kg-card-end: markdown-->]]></content:encoded></item></channel></rss>