<?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[OSS - Würmkanal, der Blog]]></title><description><![CDATA[Denn zu jeder ordentlichen Domain gehört ein Blog.]]></description><link>https://blog.wuermkanal.de/</link><image><url>https://blog.wuermkanal.de/favicon.png</url><title>OSS - Würmkanal, der Blog</title><link>https://blog.wuermkanal.de/</link></image><generator>Ghost 5.82</generator><lastBuildDate>Mon, 20 Apr 2026 12:18:53 GMT</lastBuildDate><atom:link href="https://blog.wuermkanal.de/tag/oss/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Kommentare mit Isso in Ghost integrieren auf Uberspace 7]]></title><description><![CDATA[Aktuelle Version der Python-basierten Disqus-Alternative "Isso" auf Uberspace 7 betreiben, mit Ghost und evtl. auch anderem]]></description><link>https://blog.wuermkanal.de/kommentare-mit-isso/</link><guid isPermaLink="false">6294e8e68e5e216528a5f594</guid><category><![CDATA[Kommentare]]></category><category><![CDATA[OSS]]></category><category><![CDATA[Ghost]]></category><category><![CDATA[Isso]]></category><dc:creator><![CDATA[Lothar Neumann]]></dc:creator><pubDate>Mon, 01 Jul 2019 12:28:16 GMT</pubDate><media:content url="https://blog.wuermkanal.de/content/images/2021/02/steve-johnson-y-mB90P-6DY-unsplash.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.wuermkanal.de/content/images/2021/02/steve-johnson-y-mB90P-6DY-unsplash.jpg" alt="Kommentare mit Isso in Ghost integrieren auf Uberspace 7"><p>Die <em><a href="https://ghost.org/?ref=blog.wuermkanal.de">Ghost</a></em>-Software, die diesen Blog betreibt, hat leider keine integrierte Kommentarfunktion. Dieser Beitrag beschreibt, wie man die aktuelle Version der netten, kleinen L&#xF6;sung &#x201E;<a href="https://posativ.org/isso/?ref=blog.wuermkanal.de">Isso</a>&#x201C; auf einem <a href="https://uberspace.de/?ref=blog.wuermkanal.de">Uberspace 7</a> einbindet. </p><p><em>Anmerkung: </em>Das meiste gilt grunds&#xE4;tzlich auch bei auf andere Weise erzeugten statischen Webseiten, nehme ich stark an. Au&#xDF;er Isso mit Python laufen zu lassen, muss letztlich nur irgendwie etwas JavaScript eingebunden werden k&#xF6;nnen.</p><p>Alternativ gibt es nat&#xFC;rlich allerlei <s>Rechner-anderer-Leute</s> <em>Cloud-</em>basierte L&#xF6;sungen (<a href="https://help.disqus.com/articles/1717103-disqus-privacy-policy?ref=blog.wuermkanal.de">Disqus</a> w&#xE4;re ein prominentes Beispiel, das auch von den Ghost-Leuten vorgeschlagen wird), aber so etwas scheidet aus, weil Datenschutz.</p><p>In meinem Fall lief Ghost nebst Isso vorher auf einem Uberspace 6, was ich aber unter anderem wegen der Node.js-Version &#xE4;ndern wollte. Im gleichen Zug wollte ich auch auf die neueste Isso-Version upgraden. Die hat n&#xE4;mlich sch&#xF6;ne Features bekommen, zum Beispiel ist so ein Admin-Interface netter als die Verwaltung nur &#xFC;ber E-Mails. Der Umzug von Ghost ist im Wesentlichen Flei&#xDF;arbeit &#x2013; alte Daten (Inhalt, Theme) exportieren, <a href="https://lab.uberspace.de/guide_ghost.html?ref=blog.wuermkanal.de">neue Instanz aufsetzen</a>, Daten importieren, bisschen Links korrigieren usw., am Ende A- und AAAA-Records der Domain auf die neuen Server-Adressen &#xE4;ndern.</p><p>Zu (aktuellem) Isso auf (aktuellem) Uberspace habe ich dagegen im Netz nichts gefunden, bzw. nichts, das hinreichend half, daher habe ich im Folgenden die einzelnen Schritte aufgeschrieben:</p><hr><!--kg-card-begin: markdown--><p>Im Einzelnen braucht es folgende nicht sehr &#xFC;berraschende Zutaten:</p>
<ul>
<li><a href="https://lab.uberspace.de/guide_ghost.html?ref=blog.wuermkanal.de">Ghost auf Uberspace 7</a></li>
<li>Eine (Sub-) Domain f&#xFC;r den Blog</li>
<li>Eine Subdomain f&#xFC;r Isso<br>
<small>Eine andere Domain w&#xFC;rde wegen der <a href="https://de.wikipedia.org/wiki/Same-Origin-Policy?ref=blog.wuermkanal.de">Same-Origin-Policy</a> Schwierigkeiten machen; <a href="https://de.wikipedia.org/wiki/CORS?ref=blog.wuermkanal.de">CORS</a> ist bei Uberspace (noch) nicht vorgesehen. Alternativ kann man einen Teilpfad wie <code>example.org/isso</code> &#xFC;ber ein eigenes Web Backend der Macht von Ghost entrei&#xDF;en. Habe ich aber auf U7 nicht probiert.</small></li>
</ul>
<!--kg-card-end: markdown--><h2 id="installieren-von-isso">Installieren von Isso</h2><p>Ich benutze die Version 3.6 von Python. </p><pre><code class="language-bash">pip3.6 install isso --user</code></pre><p>Damit sollte die Installation durchlaufen. <code>--user</code> ist <a href="https://manual.uberspace.de/lang-python.html?ref=blog.wuermkanal.de#pip">wichtig, weil wir keine Admin-Rechte haben</a>.</p><h2 id="anpassen-der-konfiguration-von-isso">Anpassen der Konfiguration von Isso</h2><p>Die Datei unter &#xA0;<code>~/etc/isso/user.cfg</code> wie folgt editieren. Dabei mindestens <code>dbpath</code> und <code>host</code> anpassen. &#xA0;<br>Die IP f&#xFC;r den <code>listen</code>-Parameter <em><a href="https://manual.uberspace.de/web-backends.html?ref=blog.wuermkanal.de#web-backends">muss </a></em><a href="https://manual.uberspace.de/web-backends.html?ref=blog.wuermkanal.de#web-backends">bei Uberspace </a><code><a href="https://manual.uberspace.de/web-backends.html?ref=blog.wuermkanal.de#web-backends">0.0.0.0</a></code><a href="https://manual.uberspace.de/web-backends.html?ref=blog.wuermkanal.de#web-backends"> sein</a>. Den Port (hier: <code>9000</code>) kann man zwischen 1024 und 65535 frei w&#xE4;hlen, er sollte halt unbelegt sein. F&#xFC;r alles Weitere sei auf die <a href="https://posativ.org/isso/docs/configuration/server/?ref=blog.wuermkanal.de">Isso-Doku</a> verwiesen.</p><figure class="kg-card kg-code-card"><pre><code class="language-ini">[general]
dbpath = /home/&lt;user&gt;/etc/isso/comments.db
host = https://example.org/
notify = smtp

[server]
listen = http://0.0.0.0:9000

[smtp]
username = &lt;user&gt;
password = ...
host = localhost
port = 587
security = starttls
to = isso@example.org
from = blog@example.org

[guard]
enabled = true
ratelimit = 2
direct-reply = 3
reply-to-self = false
require-email = false

[hash]
salt = Eech7co8Ohloopo9Ol6baimi
algorithm = pbkdf2

[admin]
enabled = true
password = ...</code></pre><figcaption><code>~/etc/isso/user.cfg&#xA0;</code></figcaption></figure><p>Testen ob es geht mit diesem Befehl:</p><pre><code class="language-bash"> isso -c ~/etc/isso/user.cfg run</code></pre><p>Erfreulicherweise hat meine &#x201E;Datenmigration&#x201C; funktioniert, indem ich die <code>comments.db</code>-Datei der alten Isso-Instanz einfach an die neue Stelle laut <code>dbpath</code> kopiert habe. Schlichtes <a href="https://de.wikipedia.org/wiki/SQLite?ref=blog.wuermkanal.de">SQLite</a> hat durchaus Vorteile.</p><h2 id="subdomain-f-r-isso-verbinden">Subdomain f&#xFC;r Isso verbinden</h2><p>Die Adresse und gegebenenfalls den Port entsprechend anpassen:</p><pre><code class="language-bash">uberspace web domain add comments.example.org</code></pre><pre><code class="language-bash">uberspace web backend set comments.example.org --http --port 9000
</code></pre><!--kg-card-begin: markdown--><p><small>Alternativ f&#xFC;r die L&#xF6;sung ohne Subdomain (<code>example.org/isso</code>):<br>
<code>uberspace web backend set /isso --http --port 9000</code> (<em>Ungetestet!</em> Ich wei&#xDF; nicht, ob das gleichzeitig mit Ghost gescheit geht. Auf U6 mit <code>RewriteCond</code>/<code>RewriteRule</code>-Eintr&#xE4;gen in der <code>.htaccess</code> ging es jedenfalls&#x2026;)</small></p>
<!--kg-card-end: markdown--><h2 id="test-der-admin-oberfl-che">Test der Admin-Oberfl&#xE4;che</h2><p>Falls die Administrationsfunktion benutzt werden soll (also die Parameter unter &#xA0;<code>[admin]</code> entsprechend gesetzt sind):<br>Im Browser sollte die URL analog zu &#x201E;comments.example.org/admin&#x201C; eine Login-Seite zeigen; Aufruf von &#x201E;comments.example.org&#x201C; allein sollte ein &#x201E;Bad Request &#x2013; missing uri query&#x201C; liefern. (F&#xFC;r die Admin-Seite in ganzer Pracht muss man leider im Browser gemischte Inhalte zulassen.)</p><h2 id="konfigurieren-von-supervisor">Konfigurieren von Supervisor</h2><p>Wenn Isso funktioniert, eine Datei unter <code>~/etc/services.d/</code> mit Namen <code>isso.ini</code> und diesen Inhalts erstellen (<code>&lt;user&gt;</code> anpassen!):</p><figure class="kg-card kg-code-card"><pre><code class="language-ini">[program:isso]
command = /home/&lt;user&gt;/.local/bin/isso -c /home/&lt;user&gt;/etc/isso/user.cfg run
autostart = true
autorestart = true</code></pre><figcaption><code>~/etc/services.d/isso.ini</code></figcaption></figure><p>Danach den <a href="https://manual.uberspace.de/daemons-supervisord.html?ref=blog.wuermkanal.de#create-a-service">Service mit diesen beiden Befehlen</a> zum Laufen bringen:</p><pre><code class="language-bash">supervisorctl reread
supervisorctl update</code></pre><h2 id="-nderungen-im-ghost-theme">&#xC4;nderungen im Ghost-Theme</h2><p>Die Kommentarfunktion muss jetzt nur noch an der gew&#xFC;nschten Stelle in der Webseite eingebunden werden. Ich m&#xF6;chte sie nur auf den &#x201E;Post&#x201C;-Seiten zur Verf&#xFC;gung stellen, nicht auch auf den &#x201E;Pages&#x201C; (also nicht beim Impressum und &#xE4;hnlichem). In dem Fall die <code>posts.hbs</code>-Datei des Themes wie folgt &#xE4;ndern oder eben entsprechende andere Seiten. Alternativ l&#xE4;sst sich der <code>&lt;script ... &lt;/script&gt;</code>-Teil auch mit der &#x201E;Code Injection&#x201C;-Funktion in der Ghost-Adminoberfl&#xE4;che einbinden.<br>Die Bedeutung des Parameters und weitere Optionen stehen in der <a href="https://posativ.org/isso/docs/configuration/client/?ref=blog.wuermkanal.de">Isso-Dokumentation</a>.</p><figure class="kg-card kg-code-card"><pre><code class="language-html">    (...)						  
            &lt;/footer&gt;
            &lt;script data-isso=&quot;https://comments.example.org/&quot; src=&quot;https://comments.example.org/js/embed.min.js&quot;&gt;&lt;/script&gt;
            &lt;section class=&quot;post-full-comments&quot;&gt;
                &lt;div id=&quot;isso-thread&quot;&gt;&lt;/div&gt;
            &lt;/section&gt;
        &lt;/article&gt;</code></pre><figcaption><code>post.hbs</code></figcaption></figure><p><em>Anmerkung:</em> Die eine Script-Zeile und das leere div sind in der Tat alles, was n&#xF6;tig ist. Den restlichen Inhalt liefert Isso, also das Python-Backend! &#xA0;</p><!--kg-card-begin: markdown--><p><small class="footnotes">Titelfoto: <a href="https://unsplash.com/@steve_j?ref=blog.wuermkanal.de">Steve Johnson</a> / <a href="https://unsplash.com/?ref=blog.wuermkanal.de">Unsplash</a></small></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Syntax-Highlighting mit prism.js bei Ghost-Blogs]]></title><description><![CDATA[Code-Schnipsel in einem Ghost-basierten Blog sollen möglichst schön dargestellt werden. Und alles per Klick in die Zwischenablage kopieren ist auch nett.]]></description><link>https://blog.wuermkanal.de/syntax-highlighting-mit-prism-js/</link><guid isPermaLink="false">6294e8e68e5e216528a5f593</guid><category><![CDATA[Ghost]]></category><category><![CDATA[OSS]]></category><category><![CDATA[CSS]]></category><category><![CDATA[Syntax-Highlighting]]></category><category><![CDATA[IT]]></category><dc:creator><![CDATA[Lothar Neumann]]></dc:creator><pubDate>Mon, 03 Jun 2019 15:13:41 GMT</pubDate><media:content url="https://blog.wuermkanal.de/content/images/2021/02/markus-spiske-cvBBO4PzWPg-unsplash.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.wuermkanal.de/content/images/2021/02/markus-spiske-cvBBO4PzWPg-unsplash.jpg" alt="Syntax-Highlighting mit prism.js bei Ghost-Blogs"><p>Und zwar so, dass es sch&#xF6;n(er) aussieht und gut zu benutzen ist. &#xA0;</p><p>Ein recht spezieller Beitrag in eigener Sache, sozusagen. Aber ich hatte wegen unsch&#xF6;nen Kleinigkeiten l&#xE4;nger in den Style Sheet-Dateien herumsuchen m&#xFC;ssen &#x2013; das kann ich vielleicht anderen ersparen.</p><hr><!--kg-card-begin: markdown--><h1 id="motivation">Motivation</h1>
<p>Wenn man wie ich hin und wieder Code-Schnipsel in seinem Ghost-basierten Blog hat, sollen die m&#xF6;glichst sch&#xF6;n dargestellt werden, mit Hervorhebungen passend zur benutzten Sprache (bei mir zum Beispiel gern Bash-Skripte). Au&#xDF;erdem w&#xE4;re auch eine Option f&#xFC;r die Leser nett, alles per Klick in die Zwischenablage zu kopieren&#x2026; bitte sehr: <a href="https://prismjs.com/?ref=blog.wuermkanal.de">prism.js</a>.<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup></p>
<h1 id="problem">Problem</h1>
<p>Leider passte die L&#xF6;sung von der Stange nicht ganz perfekt zu meinem (leicht angepassten) &#x201E;<a href="https://github.com/TryGhost/Casper?ref=blog.wuermkanal.de">Casper</a>&#x201C;-Theme: Die Boxen ragten links und rechts &#xFC;ber die Seiten, passten sich nicht der Seitenbreite an &#x2013; sie waren auf kleineren Bildschirmen also nicht wirklich benutzbar, und von responsivem Design konnte keine Rede sein.</p>
<h1 id="lsung">L&#xF6;sung</h1>
<p>Aber von vorn: Zun&#xE4;chst muss <a href="https://prismjs.com/download.html?ref=blog.wuermkanal.de#themes=prism-coy&amp;languages=markup+css+clike+javascript+bash+markdown&amp;plugins=toolbar+copy-to-clipboard">hier</a> die gew&#xFC;nschte Variante heruntergeladen werden. (Das ist aus Datenschutzsicht gegen&#xFC;ber dem Einbinden von Drittquellen eh vorzuziehen.) Der Link liefert gleich meine Auswahl &#x2013; das gut passende &#x201E;Coy&#x201C;-Thema mit zus&#xE4;tzlicher Sprachunterst&#xFC;tzung f&#xFC;r Bash und Markdown, sowie der Copy-to-clipboard-Erweiterung. Nach Bedarf anpassen. Man bekommt zwei Dateien: <code>prism.css</code> und <code>prism.js</code>.</p>
<h2 id="nderungeninprismcss">&#xC4;nderungen in <code>prism.css</code></h2>
<p>Damit die Code-Boxen sich sch&#xF6;n in die Textbreite einf&#xFC;gen, reichen die beiden folgenden zus&#xE4;tzlichen Zeilen f&#xFC;r <code>max-width</code> und <code>min-width</code>. Weiterhin fand ich die Schriftgr&#xF6;&#xDF;e f&#xFC;r den Code zu gro&#xDF;:</p>
<pre><code class="language-css">div.code-toolbar {
	position: relative;
    max-width: 100%;
    min-width: 100%;
    font-size: 75%;
}
</code></pre>
<p>Die folgende Erg&#xE4;nzung ist optional, falls man eine eigene, zum Design passende Schriftart f&#xFC;r den &#x201E;Kopieren&#x201C;-Button benutzen m&#xF6;chte (das muss nat&#xFC;rlich nicht Alegreya Sans sein):</p>
<pre><code class="language-css">div.code-toolbar &gt; .toolbar .toolbar-item {
	display: inline-block;
    font-family: &quot;Alegreya Sans&quot;,-apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Oxygen,Ubuntu,Cantarell,&quot;Open Sans&quot;,&quot;Helvetica Neue&quot;,sans-serif;
}
</code></pre>
<h2 id="nderungeninprismjs">&#xC4;nderungen in <code>prism.js</code></h2>
<p>Wie erw&#xE4;hnt, versuche ich auf unn&#xF6;tiges Einbinden von Drittquellen zu verzichten (weil Datenschutz, wissenschon). Deshalb habe ich auch die Abh&#xE4;ngigkeit <code>clipboard.js</code> heruntergeladen und in Ghost unter <code>assets/js</code> gespeichert. Damit nicht mehr Cloudflare benutzt wird, diese Zeile in der <code>prism.js</code>-Datei</p>
<pre><code class="language-js">script.src = &apos;https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js&apos;;
</code></pre>
<p>durch diese ersetzen:</p>
<pre><code class="language-js">script.src = &apos;/assets/js/clipboard.min.js&apos;;
</code></pre>
<p>Bzw. den entsprechenden Teil in der Minified-Version</p>
<pre><code class="language-js">o.src=&quot;https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js&quot;,&apos;
</code></pre>
<p>ersetzen durch:</p>
<pre><code class="language-js">o.src=&quot;/assets/js/clipboard.min.js&quot;,
</code></pre>
<p>Schlie&#xDF;lich habe ich auch noch die Texte f&#xFC;r die Kopier-Buttons &#xFC;bersetzt, also</p>
<pre><code class="language-js">  linkCopy.textContent = &apos;Copy&apos;;
(&#x2026;)
  linkCopy.textContent = &apos;Copied!&apos;;
(&#x2026;)
 linkCopy.textContent = &apos;Press Ctrl+C to copy&apos;;
(&#x2026;)
  linkCopy.textContent = &apos;Copy&apos;;
</code></pre>
<p>jeweils durch <code>&apos;Kopieren&apos;</code>, <code>&apos;Kopiert!&apos;</code>, etc. ersetzt. In der Minified-Version:</p>
<pre><code class="language-js">(&#x2026;)
return t.textContent=&quot;Kopieren&quot;,r?o():i.push(o),t;function o(){var o=new r(t,{text:function(){return e.code}});o.on(&quot;success&quot;,function(){t.textContent=&quot;Kopiert!&quot;,n()}),o.on(&quot;error&quot;,function(){t.textContent=&quot;Strg+C zum Kopieren&quot;,n()})}function n(){setTimeout(function(){t.textContent=&quot;Kopieren&quot;},5e3)}})}else console.warn(&quot;Copy to Clipboard plugin loaded before Toolbar plugin.&quot;)}();
</code></pre>
<h2 id="upload">Upload</h2>
<p>Dann blo&#xDF; noch die beiden fertigen Dateien auf den Webspace in die Ordner<br>
<code>&lt;Ghost Installation&gt;/content/themes/&lt;aktives Theme&gt;/assets/css</code> bzw. <code>&#x2026;/js</code> hochladen.</p>
<h2 id="codeinjectionindenghosteinstellungen">Code Injection in den Ghost-Einstellungen</h2>
<p>Um die neuen Script- und Stylesheet-Dateien einzubinden, kann man die &#x201E;Code Injection&#x201C;-Funktionalit&#xE4;t im Ghost-Editor benutzen. Dazu die beiden Zeilen ins globale <strong>Site Footer</strong>-Feld oder ins <strong>Post Footer</strong>-Feld des jeweiligen Beitrags kopieren, je nachdem, ob man die Dateien <em>immer</em> ausliefern will (einfacher) oder nur, wenn&apos;s n&#xF6;tig ist (eleganter, aber man muss auch dran denken&#x2026;):</p>
<pre><code class="language-html">&lt;script src=&quot;/assets/js/prism.js&quot;&gt;&lt;/script&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/assets/css/prism.css&quot; /&gt;
</code></pre>
<p><small class="footnotes">Titelfoto: <a href="https://unsplash.com/@markusspiske?ref=blog.wuermkanal.de">Markus Spiske</a> / <a href="https://unsplash.com/?ref=blog.wuermkanal.de">Unsplash</a></small></p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>Gibt auch noch andere, beispielsweise <a href="https://highlightjs.org/?ref=blog.wuermkanal.de">highlight.js</a>. Habe ich bisher nicht probiert. <a href="#fnref1" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
</ol>
</section>
<!--kg-card-end: markdown--><p></p>]]></content:encoded></item><item><title><![CDATA[Pi-Hole: Tipps & Tricks & Troubleshooting]]></title><description><![CDATA[Notizen zu Verbesserungen, hilfreichen Tricks und Tipps bei einer Installation von Pi-Hole auf einem Raspberry Pi mit einer FritzBox als Router]]></description><link>https://blog.wuermkanal.de/pi-hole-tipps/</link><guid isPermaLink="false">6294e8e68e5e216528a5f57d</guid><category><![CDATA[Pi-Hole]]></category><category><![CDATA[Raspberry Pi]]></category><category><![CDATA[DNS]]></category><category><![CDATA[FritzBox]]></category><category><![CDATA[Heimnetz]]></category><category><![CDATA[Domain Name System]]></category><category><![CDATA[Adblocking]]></category><category><![CDATA[OSS]]></category><category><![CDATA[IT]]></category><category><![CDATA[Malware]]></category><dc:creator><![CDATA[Lothar Neumann]]></dc:creator><pubDate>Mon, 09 Jul 2018 14:20:49 GMT</pubDate><media:content url="https://blog.wuermkanal.de/content/images/2021/02/paul-shore-QSc5vyEGOpE-unsplash-3.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://blog.wuermkanal.de/content/images/2021/02/paul-shore-QSc5vyEGOpE-unsplash-3.jpg" alt="Pi-Hole: Tipps &amp; Tricks &amp; Troubleshooting"><p>Mittlerweile sind zwei Jahre seit dem letzten Beitrag zum Pi-Hole vergangen (<em>krass!</em>). Da wird es Zeit, ein paar Notizen zu Verbesserungen, hilfreichen Tricks und Tipps zur Fehlerbehebung aufzuschreiben.</p>
<p>F&#xFC;r mich selbst als Referenz, weil ich dazu tendiere, soche Sachen wieder zu vergessen, und nat&#xFC;rlich f&#xFC;r alle anderen auch. &#x263A;<br>
<em>Die folgenden Informationen habe ich mir nicht selbst ausgedacht, sondern an verschiedenen Stellen zusammensuchen m&#xFC;ssen, haupts&#xE4;chlich stammen sie aus dem <a href="https://discourse.pi-hole.net/?ref=blog.wuermkanal.de">Pi-Hole-Forum</a>.</em></p>
<hr>
<h2 id="anametocainhalt"><a name="TOC"></a>Inhalt</h2>
<ul>
<li><a href="#https">HTTPS schneller machen</a></li>
<li><a href="#dns">DNS-Einstellungen</a>
<ul>
<li><a href="#topoldns">Topologie</a></li>
<li><a href="#fritzdns">Empfehlungen zu FritzBox-Einstellungen</a></li>
<li><a href="#fritzipv6">Noch mehr IPv6-Einstellungen</a></li>
</ul>
</li>
<li><a href="#dnsmasq">Fehler bei dnsmasq beheben</a>
<ul>
<li><a href="#dnsmasq1">Fehlerhafte Startkonfiguration</a></li>
<li><a href="#dnsmasq2">Inkompatible Versionen</a></li>
</ul>
</li>
<li><a href="#backup">Backup der Pi-Hole-Konfiguration machen</a></li>
</ul>
<hr>
<h1 id="anamehttpsahttpsschnellermachen"><a name="https"></a>HTTPS schneller machen</h1>
<p>Es ist sinnvoll Regeln f&#xFC;r die Firewall auf dem Raspi einzutragen, damit der HTTPS-Seitenaufbau schneller geht. Das Blockieren von HTTPS-Verbindungen dauert l&#xE4;nger, weil nur gewartet werden kann, dass die Verbindung in einen Timeout l&#xE4;uft, w&#xE4;hrend beim unverschl&#xFC;sselten HTTP der Pi-Hole einfach selbst Zieladresse spielt und eine eigene HTML-Seite zur&#xFC;ckschickt.<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup></p>
<p>Dazu die folgenden Befehle absetzen (einmal f&#xFC;r <a href="https://de.wikipedia.org/wiki/IPv4?ref=blog.wuermkanal.de">IPv4</a>, einmal f&#xFC;r <a href="https://de.wikipedia.org/wiki/IPv6?ref=blog.wuermkanal.de">IPv6</a>):</p>
<pre><code class="language-bash">sudo iptables -A INPUT -p tcp --destination-port 443 -j REJECT --reject-with tcp-reset
sudo iptables -A INPUT -p udp --destination-port 80 -j REJECT --reject-with icmp-port-unreachable
sudo iptables -A INPUT -p udp --destination-port 443 -j REJECT --reject-with icmp-port-unreachable
sudo ip6tables -A INPUT -p tcp --destination-port 443 -j REJECT --reject-with tcp-reset
sudo ip6tables -A INPUT -p udp --destination-port 80 -j REJECT --reject-with icmp6-port-unreachable
sudo ip6tables -A INPUT -p udp --destination-port 443 -j REJECT --reject-with icmp6-port-unreachable
sudo apt install iptables-persistent
</code></pre>
<p>Der letzte Befehl sorgt daf&#xFC;r, dass die Eintr&#xE4;ge dauerhaft gespeichert werden und nach einem Reboot noch vorhanden sind. Beide Male mit &#x201E;Ja&#x201C; antworten. <a href="#TOC" class="footnote-backref">  &#x21A9;&#xFE0E;</a></p>
<h1 id="anamednsadnseinstellungen"><a name="dns"></a>DNS-Einstellungen</h1>
<p>Die Angaben im <a href="https://blog.wuermkanal.de/das-vielleicht-nutzlichste-raspi-projekt-von-allen-3/">letzten Beitrag zum Pi-Hole</a> sind teilweise &#xFC;berholt &#x2013; weil das FritzOS inzwischen mehr kann und vor allem, weil ich was dazugelernt habe.</p>
<h3 id="anametopoldnsatopologie"><a name="topoldns"></a>Topologie</h3>
<p>Ich habe zwei Netzwerk-Topologien ausprobiert &#x2013; die eine ist eleganter, aber die andere tut besser. Die jeweilige Namensaufl&#xF6;sung funktioniert wie folgt:</p>
<ol>
<li>FritzBox sagt Clients, dass Pi-Hole der zust&#xE4;ndige (lokale) DNS-Server ist.<br>
Client fragt Pi-Hole nach Namensaufl&#xF6;sung &gt; Pi-Hole (benutzt den Cache oder) fragt externen DNS-Server &gt; Pi-Hole gibt Client Ergebnis bekannt (oder blockiert) &gt; Client baut Verbindung &#xFC;ber FritzBox auf.</li>
<li>FritzBox sagt Clients, dass Pi-Hole der zust&#xE4;ndige (lokale) DNS-Server ist.<br>
Client fragt Pi-Hole nach Namensaufl&#xF6;sung &gt; Pi-Hole (benutzt den Cache oder) fragt FritzBox &gt; FritzBox fragt externen DNS-Server &gt; FritzBox gibt Pi-Hole Ergebnis bekannt &gt; Pi-Hole gibt Client Ergebnis bekannt (oder blockiert) &gt; Client baut Verbindung &#xFC;ber FritzBox auf.</li>
</ol>
<p>Auch wenn L&#xF6;sung 2 etwas umst&#xE4;ndlicher ist (wobei ich keinen Unterschied durch den zus&#xE4;tzlich zur&#xFC;ckgelegten Weg bemerken konnte) &#x2013; auf diese Weise funktioniert die Aufl&#xF6;sung der internen Namen (<code>fritz.box</code>, <code>fritz.nas</code>) problemlos. F&#xFC;r die Pi-Hole-IPs und -Namen sollte man trotzdem Ausnahmen beim DNS-Rebind-Schutz der FritzBox eintragen (<strong>Netzwerk</strong> &gt; <strong>Netzwerkeinstellungen</strong> &gt; <strong>DNS-Rebind-Schutz</strong>).</p>
<ul>
<li>Um L&#xF6;sung 1 zu realisieren, w&#xE4;hlt man in den Pi-Hole-Einstellungen die bevorzugten (externen) DNS-Server aus.</li>
<li>Um die von mir favorisierte L&#xF6;sung 2 zu realisieren, gibt man im Pi-Hole die <em>IP der FritzBox</em> als DNS-Server ein.</li>
</ul>
<p>In der FritzBox stellt man beide Male die IP des Pi-Hole als lokalen DNS-Server ein, wie im <a href="#fritzdns">n&#xE4;chsten Abschnitt</a> erl&#xE4;utert.<br>
Empfehlungen zu Privatsph&#xE4;re-vertr&#xE4;glichen DNS-Servern gibt es zum Beispiel in der <a href="https://www.kuketz-blog.de/empfehlungsecke/?ref=blog.wuermkanal.de#dns">Empfehlungsecke vom Kuketz-Blog</a>.</p>
<h3 id="anamefritzdnsaempfehlungenzufritzboxeinstellungen"><a name="fritzdns"></a>Empfehlungen zu FritzBox-Einstellungen</h3>
<p>Die FritzBox erlaubt es (ab FritzOS 6.50), f&#xFC;r das Heimnetz einen eigenen DNS-Server anzugeben. Das ist nat&#xFC;rlich genau, was wir wollen.</p>
<ol>
<li>Falls nicht schon bekannt, sollten vorher wir noch herausfinden, wie die IPv4- und die IPv6-Adresse des Pi-Hole lauten. Das geht zum Beispiel per <code>ip -4 a</code> bzw. <code>ip -6 a</code> Befehl, oder auch &#xFC;ber <code>nslookup pi.hole</code>. Wenn es nur darum geht herauszufinden, wie die im Pi-Hole konfigurierte IP-Adresse lautet, bietet dessen Weboberfl&#xE4;che den einfachsten Weg: Unter <strong>Settings</strong> &gt; <strong>System</strong> werden diese und weitere Informationen pr&#xE4;sentiert.</li>
<li>Die Einstellung in der FritzBox ist dagegen etwas versteckt (und nur in der <strong>Erweiterten Ansicht</strong> m&#xF6;glich):<br>
Unter <strong>Heimnetz</strong> &gt; <strong>Netzwerk</strong> den Reiter <strong>Netzwerkeinstellungen</strong> w&#xE4;hlen. Weiter unten auf der Seite sind dann die Kn&#xF6;pfe <strong>IPv4-Adressen</strong> und <strong>IPv6-Adressen</strong> zu finden.<br>
<img src="https://blog.wuermkanal.de/content/images/2019/06/pihole-fritz-lokaldns.png" alt="Pi-Hole: Tipps &amp; Tricks &amp; Troubleshooting" loading="lazy"></li>
<li>In den IPv4-Einstellungen die IP-Adresse des Pi-Hole als <strong>Lokaler DNS-Server</strong> eintragen.<br>
<img src="https://blog.wuermkanal.de/content/images/2019/06/pihole-fritz-lokaldns-ipv4.png" alt="Pi-Hole: Tipps &amp; Tricks &amp; Troubleshooting" loading="lazy"></li>
<li>F&#xFC;r die IPv6-Einstellungen ist etwas mehr zu tun:<br>
<strong>DNSv6-Server auch &#xFC;ber Router Advertisement bekanntgeben (RFC 5006)</strong> aktivieren und die Adresse als <strong>Lokaler DNSv6-Server</strong> eintragen.<br>
Darunter <strong>DHCPv6-Server in der FRITZ!Box f&#xFC;r das Heimnetz aktivieren</strong> &gt; <strong>Nur DNS-Server zuweisen</strong> ausw&#xE4;hlen.<br>
<img src="https://blog.wuermkanal.de/content/images/2019/06/pihole-fritz-lokaldns-ipv6.png" alt="Pi-Hole: Tipps &amp; Tricks &amp; Troubleshooting" loading="lazy"></li>
</ol>
<h3 id="anamefritzipv6anochmehripv6einstellungen"><a name="fritzipv6"></a>Noch mehr IPv6-Einstellungen</h3>
<p>Wo wir gerade schon dabei sind, sollten wir sicherstellen, dass immer die gleiche, lokale IPv6-Adresse zugewiesen wird:</p>
<ol>
<li>Weiter oben auf der <strong>Netzwerk</strong> &gt; <strong>Netzwerkeinstellungen</strong> &gt; <strong>IPv6-Adressen</strong>-Seite der FritzBox sollte <strong>Unique Local Addresses (ULA) immer zuweisen</strong> ausgew&#xE4;hlt sein, sowie <strong>ULA-Pr&#xE4;fix manuell festlegen</strong> (<strong>fd</strong><code>00</code> sollte reichen). <img src="https://blog.wuermkanal.de/content/images/2019/06/pihole-fritz-ipv6-ula.png" alt="Pi-Hole: Tipps &amp; Tricks &amp; Troubleshooting" loading="lazy"></li>
<li>Wird hier etwas ge&#xE4;ndert, ist es sinnvoll danach den Raspi neu zu starten und dann zu &#xFC;berpr&#xFC;fen, ob er eventuell eine andere IPv6-Adresse bekommen hat. (In dem Fall dann wie oben beschrieben auch den DNS-Server anpassen.)<br>
Weil IPv6-Adressen so &#xFC;berreich vorhanden sind, bleibt es aber normalerweise bei der einmal festgelegten Adresse. (Deshalb gibt es hier auch keine Option analog zu &#x201E;Diesem Netzwerkger&#xE4;t immer die gleiche IPv4-Adresse zuweisen.&#x201C;) <a href="#TOC" class="footnote-backref">  &#x21A9;&#xFE0E;</a></li>
</ol>
<h1 id="anamednsmasqafehlerbeidnsmasqbeheben"><a name="dnsmasq"></a>Fehler bei dnsmasq beheben</h1>
<p>Aufgrund von Inkompatibilit&#xE4;ten gibt es leider mehrere m&#xF6;gliche Gr&#xFC;nde, warum der &#x201E;dnsmasq&#x201C;-Service, also ein zentraler Bestandteile unseres DNS-Filtersystems, nicht startet.</p>
<h3 id="anamednsmasq1afehlerhaftestartkonfiguration"><a name="dnsmasq1"></a>Fehlerhafte Startkonfiguration</h3>
<p>Eine &#xC4;nderung im Paket &#x201E;dns-root-data&#x201C; f&#xFC;hrte bei mir dazu, dass nach einem Reboot dnsmasq nicht mehr startet. Das &#xE4;u&#xDF;ert sich in der folgenden Reihenfolge von Erkenntnissen:</p>
<ul>
<li>Pi-Hole funktioniert nicht, denn</li>
<li>das <code>pihole status</code> Kommando ergibt <code>DNS service is not running</code>, denn</li>
<li>das <code>sudo systemctl status dnsmasq.service</code> Kommando ergibt<br>
<code> (...) dnsmasq: Mist in der Kommandozeile (...)</code>.<br>
(Da steht wirklich &#x201E;Mist&#x201C;, bzw. englisch <code>dnsmasq: junk found in command line</code>.)</li>
</ul>
<p>Das Problem l&#xE4;sst sich beheben (es ist ein <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=858506&amp;ref=blog.wuermkanal.de">bekannter Bug</a>):</p>
<ol>
<li>In der Datei <code>/etc/init.d/dnsmasq</code> die folgende Zeile suchen<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup><br>
<code>DNSMASQ_OPTS=&quot;$DNSMASQ_OPTS sed -e s/&quot;. IN DS &quot;/--trust-anchor=.,/ -e s/&quot; &quot;/,/g $ROOT_DS | tr &apos;\n&apos; &apos; &apos;&quot;</code></li>
<li>Die Zeile durch diese ersetzen:<br>
<code>DNSMASQ_OPTS=&quot;$DNSMASQ_OPTS sed -e s/&apos;.*IN[[:space:]]DS[[:space:]]&apos;/--trust-anchor=.,/ -e s/&apos;[[:space:]]&apos;/,/g $ROOT_DS | tr &apos;\n&apos; &apos; &apos;&quot;</code><br>
Am Ende soll der Abschnitt in der Datei so aussehen:</li>
</ol>
<pre><code class="language-bash"># If the dns-root-data package is installed, then the trust anchors 
# will be available in $ROOT_DS, in BIND zone-file format. 
# Reformat as dnsmasq --trust-anchor options.

ROOT_DS=&quot;/usr/share/dns/root.ds&quot;

if [ -f $ROOT_DS ]; then
 DNSMASQ_OPTS=&quot;$DNSMASQ_OPTS `sed -e s/&apos;.*IN[[:space:]]DS[[:space:]]&apos;/--trust-anchor=.,/ -e s/&apos;[[:space:]]&apos;/,/g $ROOT_DS | tr &apos;\n&apos; &apos; &apos;`&quot;
fi
</code></pre>
<ol start="3">
<li>Danach dnsmasq starten mit <code>sudo service dnsmasq start</code> und alles m&#xFC;sste wieder laufen.</li>
</ol>
<h3 id="anamednsmasq2ainkompatibleversionenvondnsmasqundpihole"><a name="dnsmasq2"></a>Inkompatible Versionen von dnsmasq und Pi-Hole</h3>
<p>Bei Debian/Raspbian 8 &#x201E;Jessy&#x201C; ist die enthaltene Version von dnsmasq zu alt und unterst&#xFC;tzt eine neue Option nicht, die ab <a href="https://pi-hole.net/2018/02/14/pi-hole-v3-3-released-its-extra-special/?ref=blog.wuermkanal.de">Pi-Hole 3.3 benutzt wird</a>.<br>
Die L&#xF6;sung, die ich gew&#xE4;hlt habe (und die funktioniert), besteht im manuellen Upgrade von dnsmasq. Alternativ kann man auf eine <a href="https://discourse.pi-hole.net/t/how-do-i-revert-to-a-previous-version-of-pi-hole/7168?ref=blog.wuermkanal.de">fr&#xFC;here Version von Pi-Hole zur&#xFC;ckgehen</a>. Bei einem neuen System sollte man dagegen eh nicht mehr Jessy nehmen, sondern Raspbian 9 &#x201E;Stretch&#x201C;, da taucht das Problem nicht auf.<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup></p>
<ol>
<li>Neue Setups herunterladen:<br>
<code>wget https://archive.raspberrypi.org/debian/pool/main/d/dnsmasq/dnsmasq-base_2.76-5+rpi1_armhf.deb</code><br>
<code>wget https://archive.raspberrypi.org/debian/pool/main/d/dnsmasq/dnsmasq_2.76-5+rpi1_all.deb</code></li>
<li>Sicherstellen, dass zwei Abh&#xE4;ngigkeiten vorhanden sind:<br>
<code>sudo apt install libnetfilter-conntrack3 libmnl0</code></li>
<li>Neue Version installieren:<br>
<code>sudo dpkg -i dnsmasq-base_2.76-5+rpi1_armhf.deb</code><br>
<code>sudo dpkg -i dnsmasq_2.76-5+rpi1_all.deb</code></li>
<li>Pr&#xFC;fen, dass <code>dnsmasq -v</code> als Version <code>Dnsmasq version 2.76 ...</code> ausgibt. <a href="#TOC" class="footnote-backref"> &#x21A9;&#xFE0E;</a></li>
</ol>
<h1 id="anamebackupabackupderpiholekonfigurationmachen"><a name="backup"></a>Backup der Pi-Hole-Konfiguration machen</h1>
<p>Die &#x201E;Teleporter&#x201C; genannte Export- und Importfunktion der Pi-Hole-Weboberfl&#xE4;che (<strong>Settings</strong> &gt; <strong>Teleporter</strong>) erleichtert das Wiederherstellen der Konfiguration nach einem Neuaufsetzen oder anderen Problemen sehr. Zum Beispiel muss man nicht die Blockierlisten umst&#xE4;ndlich einzeln (wieder) eingeben. Per Klick wird dabei eine TAR.GZ-Datei zum Herunterladen exportiert mit dem folgenden Inhalt:<br>
<code>01-pihole.conf</code>, <code>adlists.lists</code>, <code>auditlog.list</code>, <code>blacklist.txt</code>, <code>setupVars.conf</code>, <code>whitellist.txt</code>, <code>wildcardblocking.txt</code>.<br>
Dieselbe Datei l&#xE4;sst sich dann sp&#xE4;ter wieder genauso importieren. <a href="#TOC" class="footnote-backref"> &#x21A9;&#xFE0E;</a></p>
<p><small class="footnotes">Titelfoto: <a href="https://unsplash.com/@benmoore?ref=blog.wuermkanal.de">Ben Moore</a> / <a href="https://unsplash.com/?ref=blog.wuermkanal.de">Unsplash</a><br>
Pi-hole&#xAE; is a registered trademark of Pi-hole LLC</small></p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>Alternativ k&#xF6;nnte die HTTPS-Verbindung auch mit einem eigenen Zertifikat &#x201E;aufgebrochen&#x201C; werden. Das ist aber aufwendig und auch sicherheitsm&#xE4;&#xDF;ig ziemlich zweifelhaft. <a href="#fnref1" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
<li id="fn2" class="footnote-item"><p>Zum Beispiel mittels <code>sudo nano /etc/init.d/dnsmasq</code> &gt; <kbd>STRG+W</kbd> &gt; <code>DNSMASQ_OPTS</code> &gt; <kbd>RETURN</kbd>. <a href="#fnref2" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
<li id="fn3" class="footnote-item"><p>Man kann freilich auch einen <a href="https://linuxconfig.org/raspbian-gnu-linux-upgrade-from-jessie-to-raspbian-stretch-9?ref=blog.wuermkanal.de">Upgrade des ganzen Systems</a> machen. Bei einem Raspi, der nur als Pi-Hole dient, scheint mir das aber aufw&#xE4;ndiger als einfach die SD-Karte neu zu flashen und noch einmal den Pi-Hole zu installieren. <a href="#fnref3" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
</ol>
</section>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Heute ist World Backup Day!]]></title><description><![CDATA[Sichere deine Daten, jetzt! Bonus: Eine lustige Anekdote, warum das gut ist.]]></description><link>https://blog.wuermkanal.de/heute-ist-2/</link><guid isPermaLink="false">6294e8e68e5e216528a5f58b</guid><category><![CDATA[IT]]></category><category><![CDATA[OSS]]></category><category><![CDATA[Malware]]></category><category><![CDATA[FritzBox]]></category><category><![CDATA[Backup]]></category><category><![CDATA[IT-Sicherheit]]></category><dc:creator><![CDATA[Lothar Neumann]]></dc:creator><pubDate>Fri, 31 Mar 2017 13:00:45 GMT</pubDate><media:content url="https://blog.wuermkanal.de/content/images/2021/02/piotr-chrobot-M0WbGFRTXqU-unsplash.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://blog.wuermkanal.de/content/images/2021/02/piotr-chrobot-M0WbGFRTXqU-unsplash.jpg" alt="Heute ist World Backup Day!"><p>Irgendwer hat sich den 31.3. als &#x201E;Weltweiten Backup-Tag&#x201C; ausgesucht. Je nun, solche Thementage gibt es bekanntlich <a href="https://de.wikipedia.org/wiki/Liste_von_Gedenk-_und_Aktionstagen?ref=blog.wuermkanal.de">mehr als t&#xE4;glich</a>, aber wie auch immer: Es ist ein ehrbares, wichtiges Anliegen und alle Nutzer datenverarbeitender Ger&#xE4;tschaften sollten Backups ihrer Daten machen. Denn: Backups braucht man fast nie. <mark>Aber wenn du ein Backup brauchst, und du hast keins, ist es zu sp&#xE4;t.</mark></p>
<h3 id="usbfestplatteundalleswirdgut">USB-Festplatte und alles wird gut</h3>
<p>Selbstverst&#xE4;ndlich gibt es auch <a href="http://www.worldbackupday.com/de/?ref=blog.wuermkanal.de">eine eigene Website zum Tag </a>.  Auf ihr finden sich schon die wesentlichen Tipps (f&#xFC;r Einsteiger). Es l&#xE4;uft darauf hinaus, die Bordmittel des jeweiligen PCs zu nutzen um auf einer USB-Festplatte automatisch Backups abzulegen.</p>
<p>Der Empfehlung, die USB-Platte <em>immer</em> angesteckt zu lassen, kann ich allerdings nur bedingt folgen:<br>
Vor allem bei den besonders durch <a href="https://de.wikipedia.org/wiki/Ransomware?ref=blog.wuermkanal.de"><abbr title="Ransomware/Kryptotrojaner">Erpressungstrojaner</abbr></a> gef&#xE4;hrdeten Windows-Rechnern kann es da passieren, dass die Sicherungskopie gleich mit verschl&#xFC;sselt wird.<br>
Dagegen hilft, entweder (zus&#xE4;tzlich) hin und wieder eine DVD oder CD mit den wichtigsten Daten zu brennen, die USB-Platte nur einmal die Woche oder so anzuh&#xE4;ngen (das dann aber wirklich!) oder daf&#xFC;r zu sorgen, dass die Platte nicht wie ein Laufwerk vom normalen Benutzer erreicht werden kann, sondern nur vom Backup-Programm.<br>
Oder halt kein Windows zu benutzen. Was uns zu meiner pers&#xF6;nlichen Anekdote f&#xFC;hrt</p>
<h3 id="warumeswirklichgutisteinaktuellesbackupzubesitzen">Warum es wirklich gut ist ein aktuelles Backup zu besitzen</h3>
<ol>
<li>Paar sitzt so abends auf dem Sofa. Sie will noch Fotos bearbeiten, aber das Programm befindet sich noch nicht wieder auf dem relativ neuen Linux-Rechner.</li>
<li>Deshalb will er &#x201E;noch eben schnell&#x201C; das Programm installieren.<br>
<em>Erw&#xE4;hnte ich, dass die beiden schon zwei Gl&#xE4;schen Wein getrunken haben?</em></li>
<li>Gesagt, getan. Das Skript fragt nach dem Installationsort, er &#xE4;ndert ihn.</li>
<li>Das Programm ist jetzt in <code>/op /&lt;programmname&gt;</code> installiert.<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup></li>
<li>Er merkt, dass der Installationsort nicht der ist, den er haben wollte. Mist.</li>
<li>Na gut, wieder l&#xF6;schen: <code>sudo rm -r /op /</code><sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup><br>
<em>Die zwei Gl&#xE4;ser Wein hatte ich erw&#xE4;hnt, oder?</em></li>
<li>Diese SSD-Festplatten sind schon verdammt schnell. Zum Beispiel, wenn sie wie gew&#xFC;nscht <code>/op</code> l&#xF6;schen. Oder, wie meist eher nicht erw&#xFC;nscht, wenn sie au&#xDF;erdem auch <code>/</code> l&#xF6;schen, also <strong>alles</strong>&#x2026;<br>
Ein hektisches, viel zu sp&#xE4;tes <kbd>Strg</kbd>+<kbd>C</kbd> rettet auch nichts mehr.</li>
<li><em>*beeeeeeeeeeeeeeeeeeeeeep*</em></li>
<li>Am n&#xE4;chsten Tag: Wiederaufsetzen des Betriebssystems gelingt dank des <a href="https://www.tuxedocomputers.com/TUXEDO-WebFAI.geek?ref=blog.wuermkanal.de">vom Hersteller bereitgestellten Skripts</a> z&#xFC;gig und schmerzfrei.</li>
<li>Es <strong>gibt ein Backup</strong> der pers&#xF6;nlichen Daten und Einstellungen auf der an der FritzBox angeschlossenen USB-Festplatte!<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup> Und das Zur&#xFC;ckspielen klappt sogar problemlos.</li>
<li>Alles wieder gut.<br>
Und er hat gelernt: Anf&#xFC;hrungszeichen sind wichtig. (<code>sudo rm -r &quot;/op /&quot;</code> w&#xE4;re gut gegangen. Trotzdem zu riskant.)<br>
Und vor allem: <em>Don&apos;t drink and mess with your drives!</em></li>
</ol>
<p>Merke: Ein Backup hilft nicht nur im Fall von abrauchender Hardware oder fiesen Dingen, die b&#xF6;se Menschen tun, sondern auch und vor allem bei Taten, die aus eigener Bl&#xF6;dheit entspringen.<br>
In diesem Sinn: Frohes Backup-en!</p>
<p><small class="footnotes">Titelfoto: <a href="https://unsplash.com/@chrumo?ref=blog.wuermkanal.de">Piotr Chrobot</a> / <a href="https://unsplash.com/?ref=blog.wuermkanal.de">Unsplash</a></small></p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>Erstaunlicherweise akzeptiert Linux ein Leerzeichen als letztes Zeichen eines Ordnernamens. <a href="#fnref1" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
<li id="fn2" class="footnote-item"><p>Das &#x201E;/&#x201C; am Ende passiert ganz schnell, wenn man Pfade mit <kbd>TAB</kbd> vervollst&#xE4;ndigt. <a href="#fnref2" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
<li id="fn3" class="footnote-item"><p>Mit <a href="https://wiki.ubuntuusers.de/D%C3%A9j%C3%A0_Dup/?ref=blog.wuermkanal.de">D&#xE9;j&#xE0; Dup</a> war das schnell eingerichtet. <a href="#fnref3" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
</ol>
</section>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Das vielleicht nützlichste Raspi-Projekt von allen (3)]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>So, heute kommen wir zum Ende der kleinen Reihe zum Thema<br>
&#x201E;Malware- und Adblocking mit Pi-Hole&#x201C;.</p>
<p>Im <a href="https://blog.wuermkanal.de/das-vielleicht-nutzlichste-raspi-projekt-von-allen/">ersten Teil</a> ging es um die Grundlagen (warum das ein tolles Projekt ist und was man daf&#xFC;r braucht), im <a href="https://blog.wuermkanal.de/das-vielleicht-nutzlichste-raspi-projekt-von-allen-2/">zweiten</a> um die Installation der <a href="https://pi-hole.net/?ref=blog.wuermkanal.de">&#x201E;Pi-Hole&#x201C;-Software</a> auf</p>]]></description><link>https://blog.wuermkanal.de/das-vielleicht-nutzlichste-raspi-projekt-von-allen-3/</link><guid isPermaLink="false">6294e8e68e5e216528a5f57e</guid><category><![CDATA[Raspberry Pi]]></category><category><![CDATA[IT-Sicherheit]]></category><category><![CDATA[Domain Name System]]></category><category><![CDATA[Heimnetz]]></category><category><![CDATA[Adblocking]]></category><category><![CDATA[Malware]]></category><category><![CDATA[Pi-Hole]]></category><category><![CDATA[FritzBox]]></category><category><![CDATA[OSS]]></category><dc:creator><![CDATA[Lothar Neumann]]></dc:creator><pubDate>Wed, 26 Oct 2016 16:24:01 GMT</pubDate><media:content url="https://blog.wuermkanal.de/content/images/2021/02/paul-shore-QSc5vyEGOpE-unsplash-2.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://blog.wuermkanal.de/content/images/2021/02/paul-shore-QSc5vyEGOpE-unsplash-2.jpg" alt="Das vielleicht n&#xFC;tzlichste Raspi-Projekt von allen (3)"><p>So, heute kommen wir zum Ende der kleinen Reihe zum Thema<br>
&#x201E;Malware- und Adblocking mit Pi-Hole&#x201C;.</p>
<p>Im <a href="https://blog.wuermkanal.de/das-vielleicht-nutzlichste-raspi-projekt-von-allen/">ersten Teil</a> ging es um die Grundlagen (warum das ein tolles Projekt ist und was man daf&#xFC;r braucht), im <a href="https://blog.wuermkanal.de/das-vielleicht-nutzlichste-raspi-projekt-von-allen-2/">zweiten</a> um die Installation der <a href="https://pi-hole.net/?ref=blog.wuermkanal.de">&#x201E;Pi-Hole&#x201C;-Software</a> auf dem Raspberry Pi.</p>
<hr>
<p><strong>Hinweis</strong> (16.1.2019):<br>
<em>Inzwischen gibt es einen neueren Artikel mit Erg&#xE4;nzungen und Tipps: <a href="https://blog.wuermkanal.de/pi-hole-tipps/">Pi-Hole: Tipps &amp; Tricks &amp; Troubleshooting</a> &#x2013; bitte auch lesen.</em></p>
<hr>
<p>Was jetzt noch fehlt, ist die Einrichtung des Heimnetzes, damit die angeschlossenen Ger&#xE4;te auch nur die gefilterten Webseiten erhalten.<br>
Die folgende Beschreibung geht von einer FritzBox 7490 aus, das ist halt mein Router (also eigentlich DSL-Modem/Router/WLAN-Access Point/NAS/Medienstreamdienst, und was diese eierlegenden Wollmilchs&#xE4;ue noch so alles k&#xF6;nnen). <center><sub><em>FritzBox (Symbolbild)</em></sub></center><a title="By Georg Mittenecker [CC BY-SA 2.5 (http://creativecommons.org/licenses/by-sa/2.5)], via Wikimedia Commons" href="https://commons.wikimedia.org/wiki/File%3AWollmilchsau.jpg?ref=blog.wuermkanal.de" style="box-shadow: none"><img width="256" alt="Das vielleicht n&#xFC;tzlichste Raspi-Projekt von allen (3)" src="https://upload.wikimedia.org/wikipedia/commons/f/f3/Wollmilchsau.jpg"></a></p>
<p>Andere Ger&#xE4;te haben andere Bedienoberfl&#xE4;chen, aber die Funktion sollte mehr oder weniger bei allen &#xE4;hnlich sein.</p>
<ol>
<li>
<p>Als Erstes an der Administrationsoberfl&#xE4;che anmelden.</p>
</li>
<li>
<p>Dem Raspi eine statische IP-Adresse zuweisen bzw. den DHCP-Dienst immer die gleiche IP-Adresse zuweisen lassen. <strong>Das ist wichtig</strong>, sonst bekommt der Raspi  wom&#xF6;glich irgendwann eine neue und die Namensaufl&#xF6;sung geht nicht mehr. <img src="https://blog.wuermkanal.de/content/images/2019/06/pihole-fritz-ip.png" alt="Das vielleicht n&#xFC;tzlichste Raspi-Projekt von allen (3)" loading="lazy"></p>
</li>
<li>
<p>Unseren Pi-Hole-Raspi als neuen (und einzigen) DNS-Server konfigurieren. Die IP-Adresse haben wir im <a href="https://blog.wuermkanal.de/das-vielleicht-nutzlichste-raspi-projekt-von-allen-2/">letzten Teil</a> bestimmt. Ersatzweise kann man sie in der Ger&#xE4;teliste der Router-Administration nachschauen. <img src="https://blog.wuermkanal.de/content/images/2019/06/pihole-fritz-dns-setzen.png" alt="Das vielleicht n&#xFC;tzlichste Raspi-Projekt von allen (3)" loading="lazy"></p>
</li>
</ol>
<p>Wenn alles stimmt, wird jetzt viel der unerw&#xFC;nschten Werbung (und Schadsoftware) gefiltert und durch harmlose, leere HTML-Seiten ersetzt. Und zwar bei allen Ger&#xE4;ten, die sich &#xFC;ber dieses Netzwerk verbinden, sei es per Kabel oder WLAN.</p>
<p>Pi-Hole bietet auch eine nette Oberfl&#xE4;che, auf der man sich Statistiken sowie den Filterverlauf anschauen kann. Au&#xDF;erdem kann man auch eine White- und Blacklist pflegen, falls man bestimmten Seiten doch Zugriff erlauben bzw. verwehren m&#xF6;chte.<br>
<img src="https://blog.wuermkanal.de/content/images/2019/06/pihole-admin.png" alt="Das vielleicht n&#xFC;tzlichste Raspi-Projekt von allen (3)" loading="lazy">Erreichen kann man die Seite &#xFC;ber <code>http://&lt;IP-Adresse des Pi-Hole-Raspis&gt;/admin</code>.</p>
<p>Sollte die Seite auf ein vorhandenes Update hinweisen, so kann man selbiges leicht installieren, indem man sich beim Raspi anmeldet (PuTTY, <code>ssh</code> oder direkt) und folgenden Befehl ausf&#xFC;hrt: <code>pihole -up</code>.</p>
<p><small class="footnotes">Titelfoto: <a href="https://unsplash.com/@paulshore?ref=blog.wuermkanal.de">Paul  Shore</a> / <a href="https://unsplash.com/?ref=blog.wuermkanal.de">Unsplash</a></small></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Das vielleicht nützlichste Raspi-Projekt von allen (2)]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Weiter geht&apos;s mit der Einrichtung von <a href="https://pi-hole.net/?ref=blog.wuermkanal.de">Pi-Hole</a> auf einem Raspberry Pi. Der erste Teil ist <a href="https://blog.wuermkanal.de/das-vielleicht-nutzlichste-raspi-projekt-von-allen/">hier</a> zu finden. Dort steht auch, warum das eine gute Idee ist. (Ist es, echt!)</p>
<hr>
<p><strong>Hinweis</strong> (16.1.2019):<br>
<em>Inzwischen gibt es einen neueren Artikel mit Erg&#xE4;nzungen und Tipps: <a href="https://blog.wuermkanal.de/pi-hole-tipps/">Pi-Hole: Tipps</a></em></p>]]></description><link>https://blog.wuermkanal.de/das-vielleicht-nutzlichste-raspi-projekt-von-allen-2/</link><guid isPermaLink="false">6294e8e68e5e216528a5f581</guid><category><![CDATA[Raspberry Pi]]></category><category><![CDATA[IT-Sicherheit]]></category><category><![CDATA[IT]]></category><category><![CDATA[Malware]]></category><category><![CDATA[Adblocking]]></category><category><![CDATA[Domain Name System]]></category><category><![CDATA[Heimnetz]]></category><category><![CDATA[Pi-Hole]]></category><category><![CDATA[OSS]]></category><dc:creator><![CDATA[Lothar Neumann]]></dc:creator><pubDate>Mon, 17 Oct 2016 13:35:50 GMT</pubDate><media:content url="https://blog.wuermkanal.de/content/images/2021/02/paul-shore-QSc5vyEGOpE-unsplash-1.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://blog.wuermkanal.de/content/images/2021/02/paul-shore-QSc5vyEGOpE-unsplash-1.jpg" alt="Das vielleicht n&#xFC;tzlichste Raspi-Projekt von allen (2)"><p>Weiter geht&apos;s mit der Einrichtung von <a href="https://pi-hole.net/?ref=blog.wuermkanal.de">Pi-Hole</a> auf einem Raspberry Pi. Der erste Teil ist <a href="https://blog.wuermkanal.de/das-vielleicht-nutzlichste-raspi-projekt-von-allen/">hier</a> zu finden. Dort steht auch, warum das eine gute Idee ist. (Ist es, echt!)</p>
<hr>
<p><strong>Hinweis</strong> (16.1.2019):<br>
<em>Inzwischen gibt es einen neueren Artikel mit Erg&#xE4;nzungen und Tipps: <a href="https://blog.wuermkanal.de/pi-hole-tipps/">Pi-Hole: Tipps &amp; Tricks &amp; Troubleshooting</a> &#x2013; bitte auch lesen.</em></p>
<hr>
<h2 id="anameinstainstallationhardware"><a name="inst"></a>Installation &#x2013; Hardware</h2>
<p>F&#xFC;r Fragen zur Beschaffung und Ersteinrichtung sei auf die wirklich umfangreiche und hilfreiche, deutschsprachige Seite <a href="http://raspberry.tips/?ref=blog.wuermkanal.de">raspberry.tips</a> verwiesen. (Es gibt auch noch jede Menge andere Webseiten zum Thema, einfach mal die Suchmaschine der Wahl anwerfen.<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>)</p>
<p>Seit kurzem ist auch <a href="http://www.pibakery.org/?ref=blog.wuermkanal.de">PiBakery</a> am Start, das sieht sehr vielversprechend aus. Es handelt sich um ein fertiges Programm (bisher leider nur f&#xFC;r Windows und Mac), das man runterl&#xE4;dt, ausf&#xFC;hrt und das dann die SD-Karte beschreibt. Der besondere Clou ist, dass man vorher noch mit einem simplen grafischen Editor festlegen kann, welche T&#xE4;tigkeiten beim ersten oder bei jedem Start des Raspberrys ausgef&#xFC;hrt werden sollen.<br>
Sobald ich Zeit habe, werde ich das mal testen. Die Konfiguration von Pi-Hole sollte damit auch gleich mit erledigt werden k&#xF6;nnen.</p>
<h2 id="anameconfainstallationundkonfigurationsoftware"><a name="conf"></a>Installation und Konfiguration &#x2013; Software</h2>
<p>Der Raspberry l&#xE4;uft, auf dem Bildschirm ist was zu sehen, Tastatureingaben sind m&#xF6;glich und er kommt sogar ins Internet? Gut, dann geht es jetzt so weiter:</p>
<ul>
<li>
<p>Folgenden Befehl eingeben:<br>
<code>curl -L https://install.pi-hole.net | bash</code><br>
<em>Erkl&#xE4;rung:</em>  Mit <code>curl</code> wird das Installationsscript von der Adresse <a href="https://install.pi-hole.net/?ref=blog.wuermkanal.de">https://install.pi-hole.net</a> geholt und per Pipe (<code>|</code>) an die Bash (eine Shell, also ein Kommandozeileninterpreter) &#xFC;bergeben, die das Script dann ausf&#xFC;hrt.<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup><br>
Alternativ kann man das Script auch erst einmal herunterladen und in eine Datei speichern:<br>
<code>curl -L https://install.pi-hole.net &gt; script.sh</code><br>
Anschauen mit <code>nano script.sh</code>, ausf&#xFC;hren dann mittels  <code>bash script.sh</code>.<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup></p>
</li>
<li>
<p>Den Anweisungen folgen:</p>
<ol>
<li>
<p><kbd>Enter</kbd> dr&#xFC;cken. <img src="https://blog.wuermkanal.de/content/images/2019/06/pihole-1.png" alt="Das vielleicht n&#xFC;tzlichste Raspi-Projekt von allen (2)" loading="lazy"></p>
</li>
<li>
<p>Lesen, und dann <kbd>Enter</kbd> dr&#xFC;cken. <img src="https://blog.wuermkanal.de/content/images/2019/06/pihole-2.png" alt="Das vielleicht n&#xFC;tzlichste Raspi-Projekt von allen (2)" loading="lazy"></p>
</li>
<li>
<p>Die zu benutzende Netzwerk-Schnittstelle ausw&#xE4;hlen. Da gibt bei Raspis nicht <em>so</em> viele Optionen. <code>eth0</code> ist die erste (und einzige) Ethernet-Schnittstelle, das sollte gew&#xE4;hlt werden. (Oder <code>wlan0</code>, wenn &#xFC;ber WLAN verbunden wird. Ich rate eher ab.)<br>
Aus- oder abw&#xE4;hlen kann man mit <kbd>Leertaste</kbd>, navigieren mit <kbd>Tab</kbd>. <img src="https://blog.wuermkanal.de/content/images/2019/06/pihole-3.png" alt="Das vielleicht n&#xFC;tzlichste Raspi-Projekt von allen (2)" loading="lazy"></p>
</li>
<li>
<p>W&#xE4;hlen, welches Protokoll unterst&#xFC;tzt werden soll: <a href="https://de.wikipedia.org/wiki/IPv4?ref=blog.wuermkanal.de">IPv4</a> und/oder <a href="https://de.wikipedia.org/wiki/IPv6?ref=blog.wuermkanal.de">IPv6</a>. IPv4 ist aller-h&#xF6;chstwahrscheinlich im Einsatz; IPv6 ist sicher auch sinnvoll. Ich rate dazu beide zu w&#xE4;hlen. Also beide M&#xF6;glichkeiten mit Sternchen versehen (<kbd>Leertaste</kbd>) und dann <code>Ok</code>, <kbd>Enter</kbd>. <img src="https://blog.wuermkanal.de/content/images/2019/06/pihole-4.png" alt="Das vielleicht n&#xFC;tzlichste Raspi-Projekt von allen (2)" loading="lazy"></p>
</li>
<li>
<p>Als n&#xE4;chstes wird die derzeitige IP-Adresse des Raspis angezeigt. Die brauchen wir sp&#xE4;ter, denn unter dieser Adresse konfigurieren wir den &#x201E;DNS-Server&#x201C; im Router. Also, besser aufschreiben!<sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup> <img src="https://blog.wuermkanal.de/content/images/2019/06/pihole-5.png" alt="Das vielleicht n&#xFC;tzlichste Raspi-Projekt von allen (2)" loading="lazy"></p>
</li>
<li>
<p>Es kommt noch einmal ein Hinweis, dass die IP-Adresse f&#xFC;r unseren neuen &#x201E;DNS-Server&#x201C; (d. h. Raspi) immer dieselbe blieben muss. Das legen wir sp&#xE4;ter im Router fest. <kbd>Enter</kbd> dr&#xFC;cken.<img src="https://blog.wuermkanal.de/content/images/2019/06/pihole-6.png" alt="Das vielleicht n&#xFC;tzlichste Raspi-Projekt von allen (2)" loading="lazy"></p>
</li>
<li>
<p>Falls IPv6 auch gew&#xE4;hlt wurde, sieht man die IPv6-Adresse. Die brauchen wir sp&#xE4;ter, denn unter dieser Adresse konfigurieren wir den DNS-Server f&#xFC;r IPv6 im Router. Also, besser notieren!<sup class="footnote-ref"><a href="#fn5" id="fnref5">[5]</a></sup><br>
<kbd>Enter</kbd> dr&#xFC;cken. <img src="https://blog.wuermkanal.de/content/images/2019/06/pihole-7.png" alt="Das vielleicht n&#xFC;tzlichste Raspi-Projekt von allen (2)" loading="lazy"></p>
</li>
<li>
<p>Jetzt m&#xFC;ssen wir festlegen, welche (echten) DNS-Server benutzt werden sollen. Die Google-Server z. B. (8.8.8.8, 8.8.4.4) sind zwar schnell, aber eigentlich wollen wir ja weg von diesen ganzen b&#xF6;sen Trackern. Ich habe daher <code>Custom</code> gew&#xE4;hlt und auf der n&#xE4;chsten Seite die Server meines DSL-Anbieters eingegeben (der wei&#xDF; notgedrungen eh immer, was ich im Netz tue...). <img src="https://blog.wuermkanal.de/content/images/2019/06/pihole-8.png" alt="Das vielleicht n&#xFC;tzlichste Raspi-Projekt von allen (2)" loading="lazy"></p>
</li>
<li>
<p>In meinem Fall, 1&amp;1, sind die DNS-Adressen <code>217.237.151.115, 217.237.148.102</code>. Leider kann sich das &#xE4;ndern und so richtig leicht machen sie&apos;s einem auch nicht, die Adressen herauszufinden. F&#xFC;r mich am einfachsten ist der Blick in das Verbindungsprotokoll des Routers: Bei jeder neuen DSL-Verbindung (einmal am Tag wird ja zwangsgetrennt) schreibt der Router auch die aktuellen DNS-Daten ins Log.<sup class="footnote-ref"><a href="#fn6" id="fnref6">[6]</a></sup> <img src="https://blog.wuermkanal.de/content/images/2019/06/pihole-9.png" alt="Das vielleicht n&#xFC;tzlichste Raspi-Projekt von allen (2)" loading="lazy"></p>
</li>
<li>
<p>Eingaben kontrollieren und dann <kbd>Enter</kbd> dr&#xFC;cken. <img src="https://blog.wuermkanal.de/content/images/2019/06/pihole-10.png" alt="Das vielleicht n&#xFC;tzlichste Raspi-Projekt von allen (2)" loading="lazy"></p>
</li>
<li>
<p>Noch einmal pr&#xFC;fen, ob alles stimmt und dann <kbd>Enter</kbd> dr&#xFC;cken. Es folgen einige Aktionen im Terminal und dann ist die Einrichtung des Raspis vollbracht. <img src="https://blog.wuermkanal.de/content/images/2019/06/pihole-11.png" alt="Das vielleicht n&#xFC;tzlichste Raspi-Projekt von allen (2)" loading="lazy"></p>
</li>
</ol>
</li>
</ul>
<p>Das wurde jetzt ein etwas l&#xE4;ngerer Beitrag. Der letzte Schritt &#x2013; Konfiguration des Routers &#x2013; folgt <a href="https://blog.wuermkanal.de/das-vielleicht-nutzlichste-raspi-projekt-von-allen-3/">hier</a>.</p>
<p><small class="footnotes">Titelfoto: <a href="https://unsplash.com/@paulshore?ref=blog.wuermkanal.de">Paul Shore</a> / <a href="https://unsplash.com/?ref=blog.wuermkanal.de">Unsplash</a></small></p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>Es gibt tats&#xE4;chlich <em>brauchbare</em> andere als immer nur Google: <a href="https://www.startpage.com/?ref=blog.wuermkanal.de">Startpage</a> und <a href="https://duckduckgo.com/?ref=blog.wuermkanal.de">DuckDuckGo</a> sind wohl die bekanntesten. Bei (u. a.) diesen beiden m&#xFC;ssen sich die Nutzer nicht komplett nackig machen, Privatsph&#xE4;re-m&#xE4;&#xDF;ig gesehen. <a href="#fnref1" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
<li id="fn2" class="footnote-item"><p>Wer da jetzt denkt: &#x201E;Na, das klingt aber nach viel Vertrauen!&#x201C; &#x2013; Stimmt, es ist generell keine gute Idee, einfach so irgendwelche Programme aus dem Internet auszuf&#xFC;hren. Andererseits: Bei z. B. Windows machen das letztlich alle so. (Die Vorsichtigeren pr&#xFC;fen vielleicht vorher noch Checksummen.) <a href="#fnref2" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
<li id="fn3" class="footnote-item"><p>Ein &#x201E;sudo&#x201C; davor ist nicht n&#xF6;tig, schadet allerdings auch nicht. Das Skript nimmt sich dieses Recht selbst. <a href="#fnref3" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
<li id="fn4" class="footnote-item"><p>Das kann man aber auch in der Router-Verwaltung nachsehen, oder sp&#xE4;ter in der Pihole-Konfigurationsdatei. ;-) <a href="#fnref4" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
<li id="fn5" class="footnote-item"><p>Siehe <a href="#fn:4">vorige Fu&#xDF;note</a>. <a href="#fnref5" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
<li id="fn6" class="footnote-item"><p>Bei meiner FritzBox sieht das so aus: <img src="https://blog.wuermkanal.de/content/images/2019/06/pihole-fritz-dns.png" alt="Das vielleicht n&#xFC;tzlichste Raspi-Projekt von allen (2)" loading="lazy"> <a href="#fnref6" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
</ol>
</section>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Das vielleicht nützlichste Raspi-Projekt von allen]]></title><description><![CDATA[Das vielleicht nützlichste Raspi-Projekt von allen, das man zumal nur einmal hinstellen muss und um das man sich danach kaum noch kümmern muss.]]></description><link>https://blog.wuermkanal.de/das-vielleicht-nutzlichste-raspi-projekt-von-allen/</link><guid isPermaLink="false">6294e8e68e5e216528a5f584</guid><category><![CDATA[Raspberry Pi]]></category><category><![CDATA[IT-Sicherheit]]></category><category><![CDATA[Pi-Hole]]></category><category><![CDATA[Malware]]></category><category><![CDATA[Adblocking]]></category><category><![CDATA[Domain Name System]]></category><category><![CDATA[OSS]]></category><category><![CDATA[IT]]></category><dc:creator><![CDATA[Lothar Neumann]]></dc:creator><pubDate>Mon, 29 Aug 2016 13:00:45 GMT</pubDate><media:content url="https://blog.wuermkanal.de/content/images/2021/02/paul-shore-QSc5vyEGOpE-unsplash.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://blog.wuermkanal.de/content/images/2021/02/paul-shore-QSc5vyEGOpE-unsplash.jpg" alt="Das vielleicht n&#xFC;tzlichste Raspi-Projekt von allen"><p>..., das man zumal nur einmal hinstellen muss und um das man sich danach kaum noch k&#xFC;mmern muss (klingt gut, oder?):</p>
<h1 id="malwareundadblockingmitpihole">Malware- und Adblocking mit Pi-Hole</h1>
<p>Die Struktur dieses Beitrags ist wie folgt. Abk&#xFC;rzungen nehmen ist selbstverst&#xE4;ndlich erlaubt:</p>
<ol>
<li><a href="#was">Worum geht&apos;s?</a></li>
<li><a href="#prereq">Voraussetzungen</a><br>
<em>Im n&#xE4;chsten Blogbeitrag:</em></li>
<li><a href="https://blog.wuermkanal.de/das-vielleicht-nutzlichste-raspi-projekt-von-allen-2#inst">Installation &#x2013; Hardware</a></li>
<li><a href="https://blog.wuermkanal.de/das-vielleicht-nutzlichste-raspi-projekt-von-allen-2#conf">Installation und Konfiguration &#x2013; Software</a><br>
<em>Im letzten Blogbeitrag:</em></li>
<li><a href="https://blog.wuermkanal.de/das-vielleicht-nutzlichste-raspi-projekt-von-allen-3/">Router-Konfiguration am Beispiel FritzBox</a></li>
</ol>
<hr>
<p><strong>Hinweis</strong> (16.1.2019):<br>
<em>Inzwischen gibt es einen neueren Artikel mit Erg&#xE4;nzungen und Tipps: <a href="https://blog.wuermkanal.de/pi-hole-tipps/">Pi-Hole: Tipps &amp; Tricks &amp; Troubleshooting</a> &#x2013; bitte auch lesen.</em></p>
<hr>
<h2 id="anamewasaworumgehts"><a name="was"></a>Worum geht&apos;s?</h2>
<p>Add-ons f&#xFC;r Browser, die unerw&#xFC;nschte Werbung blockieren, sind ja bekannt und d&#xFC;rften bei vielen Nutzern zum Standard geh&#xF6;ren.<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup><br>
(Ich selbst bin inzwischen geradezu schockiert, wenn ich, selten einmal, mit einem derart ungesch&#xFC;tzten Browser das Internet besuche &#x2013; pl&#xF6;tzlich ist alles voll mit nervigem Kram.)</p>
<p>Es gibt aber noch einen anderen Grund Werbung zu blockieren: &#xDC;ber die Werbenetzwerke wird in unerfreulich nennenswertem Umfang Schadsoftware verteilt, vor allem einfach deshalb, weil sie sich einen Sch... um die Sicherheit des von ihnen ausgelieferten &#x201E;Produkts&#x201C; scheren. Das sehr sehenswerte Video unten zeigt das &#xFC;berdeutlich. Nach den relevanten Informationen zum Thema f&#xFC;hren die zwei Jungs vom <a href="https://ccc.de/?ref=blog.wuermkanal.de">Chaos Computer Club</a> darin live vor, wie leicht es f&#xFC;r sie war, selbstgebaute (harmlose) Malware &#xFC;ber Standardwege der Ad-Netzwerke auszuliefern.</p>
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/zJUmjtjCtY8?rel=0" frameborder="0" allowfullscreen></iframe>
<p>Wenn man nun daheim mit einem Browser im Internet unterwegs ist, kann man so ein Add-on benutzen und gut. Was ist aber mit den ganzen anderen internetf&#xE4;higen Ger&#xE4;ten, zuv&#xF6;rderst Smartphones im WLAN, aber auch <a href="http://www.faz.net/aktuell/feuilleton/medien/smart-tv-wenn-der-fernseher-zum-datensammler-wird-13648552.html?printPagedArticle=true&amp;ref=blog.wuermkanal.de">Smart-TVs</a>, von den omin&#xF6;sen &#x201E;smarten&#x201C; K&#xFC;hlschr&#xE4;nken (die, die immer mit dem Joghurt reden) ganz zu schweigen?<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup></p>
<p>Man k&#xF6;nnte im DSL-Router eine Blacklist (oder Whitelist) pflegen, was aber meines Wissens immer einen Haufen immer wiederkehrende Handarbeit nach sich zieht.</p>
<p>Hier kommt das wirklich schlaue <a href="https://pi-hole.net/?ref=blog.wuermkanal.de">&#x201E;Pi-Hole&#x201C;-Projekt</a> zum Einsatz.</p>
<h3 id="technischerhintergrundwensinteressiert">Technischer Hintergrund (wen&apos;s interessiert)</h3>
<p>Anstatt die Inhalte zu filtern, wie es Browser-Add-ons tun, basiert Pi-Hole auf dem System der Namensaufl&#xF6;sung (<a href="https://de.wikipedia.org/wiki/Domain_Name_System?ref=blog.wuermkanal.de"><abbr title="Domain Name System">DNS</abbr></a>). Der Pi-Hole-Rechner holt sich aus dem Netz Listen mit Servern, von denen Tracking und Werbung geliefert wird, und liefert bei Anfragen nach denselben nur eine leere Seite zur&#xFC;ck. Man muss dann nur diesen Rechner als (Pseudo-) Namensserver f&#xFC;r das eigene Netzwerk einrichten (das ist leicht; siehe &#x201E;Installation und Konfiguration &#x2013; Software&#x201C; im n&#xE4;chsten Beitrag), und fertig.</p>
<p><em>Und hier noch ein Hinweis meines imagin&#xE4;ren Rechtsberaters:</em><br>
Nein, daraus folgt <strong>nicht</strong> die Garantie, niemals wieder mit Werbung oder Schlimmerem behelligt zu werden. Es wird nur deutlich weniger.</p>
<h2 id="anameprereqavoraussetzungen"><a name="prereq"></a>Voraussetzungen</h2>
<p>Was braucht&apos;s daf&#xFC;r &#x2013; an Hardware, Vorwissen, etc.?</p>
<h3 id="ntigeswissen">N&#xF6;tiges Wissen</h3>
<p>Wer jemals ein Linux-Terminal (oder auch einen Command Prompt bei DOS) gesehen und ein <em>bisschen</em> benutzt hat, kann sich eigentlich getrost zur&#xFC;cklehnen. Wer nicht: keine Sorge, Copy&amp;Paste reichen.</p>
<h3 id="gertschaft">Ger&#xE4;tschaft</h3>
<ul>
<li>Einen Raspberry Pi, logisch. Es geht mit dem Raspberry Pi B/B+, aber wenn man eh einen neuen besorgt, sollte es besser Variante 2 oder 3 sein. Wenn die Netzanbindung &#xFC;ber WLAN sein soll/muss: 3, der kann das von Haus aus. Kostenpunkt: unter 40 &#x20AC;.<br>
Ein Geh&#xE4;use ist nett, l&#xE4;sst sich auch selbst basteln; K&#xFC;hlk&#xF6;rper oder gar L&#xFC;fter braucht es nicht (f&#xFC;r dieses Projekt schon mal gar nicht und auch sonst eher weniger).</li>
<li>Stromversorgung. Da reicht ein USB-Netzteil wie f&#xFC;r jedes Handy, es sollte allerdings genug Strom liefern k&#xF6;nnen (&#x2265; 500 mA). Die ganz billigen d&#xFC;rften wegen schlechteren Wirkungsgrads auch mehr Energie in unn&#xFC;tze W&#xE4;rme transformieren. Apropos:<br>
So ein Raspberry ist &#xFC;brigens sehr gen&#xFC;gsam &#x2013; die Leistungsaufnahme steigt nie &#xFC;ber 4 Watt, es kostet also auch bei Dauerbetrieb nur eine Handvoll Euro pro Jahr.</li>
<li>Kabel. Eins f&#xFC;rs Netzwerk (es sei denn, man benutzt nur WLAN); optional: ein HDMI-Kabel um den Monitor anzuschlie&#xDF;en. Die Alternative ist, sich nur per Fernverbindung &#xFC;ber einen anderen Rechner anzumelden (z. B. mit <a href="http://www.putty.org/?ref=blog.wuermkanal.de">PuTTY</a> unter Windows, <a href="https://de.wikipedia.org/wiki/Secure_Shell?ref=blog.wuermkanal.de"><code>ssh</code></a> unter Linux).</li>
<li>Einen Monitor und einen Rechner. Falls dieser Text gerade an einem solchen gelesen wird: der tut&apos;s (Windows, Linux; Apple sicher auch; Smartphone... k&#xF6;nnte herausfordernd werden).</li>
<li>Eine SD-Karte. Bei besserer Qualit&#xE4;t bleibt die Freude l&#xE4;nger erhalten, immerhin ist sie das Analogon zur Systempartition bei PCs.</li>
<li>Ein Betriebssystem, &#xFC;blicherweise <a href="https://www.raspberrypi.org/downloads/?ref=blog.wuermkanal.de">Raspbian</a>. Die ganz Faulen k&#xF6;nnen den Raspi gleich mit fertig bespielter SD-Karte kaufen. Alternativ l&#xE4;dt man sich das &#x201E;Image&#x201C; herunter und schreibt es mit einem geeigneten Tool auf der Karte.</li>
<li>Einen Router. F&#xFC;r die hier vorgestellte Variante muss man die DNS-Einstellungen &#xE4;ndern k&#xF6;nnen. (Sonst hat man nicht die elegante L&#xF6;sung, sondern muss jedes Internet-nutzende Ger&#xE4;t einzeln konfigurieren. &#x2013; Keine Ahnung, ob z. B. die Telekom-Speedports die Kunden dahingehend bevormunden. Internet &#xFC;ber Kabel k&#xF6;nnte auch schwieriger sein, da kenne ich mich aber nicht aus.)</li>
</ul>
<p>F&#xFC;r alle obige Punkte gibt es reichlich Informationen im Netz, die sind kaum zu verfehlen.<br>
Also, alles besorgen und sch&#xF6;n herrichten. In der Zwischenzeit schreibe ich den Folgebeitrag und dann machen wir weiter.</p>
<p><small class="footnotes">Titelfoto: <a href="https://unsplash.com/@paulshore?ref=blog.wuermkanal.de">Paul  Shore</a> / <a href="https://unsplash.com/?ref=blog.wuermkanal.de">Unsplash</a></small></p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>Empfehlung: <a href="https://github.com/gorhill/uBlock?ref=blog.wuermkanal.de">uBlock Origin</a> <a href="#fnref1" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
<li id="fn2" class="footnote-item"><p>&#xDC;brigens, das hier ist auch ganz sch&#xF6;n &#xFC;bel: <a href="https://medium.com/art-marketing/browsing-your-website-does-not-mean-i-want-your-spam-3821267e902?ref=blog.wuermkanal.de">Browsing your website does not mean I want your spam</a>. Bestimmt total illegal in Deutschland, und deshalb kann das hier auch niemals nicht passieren... Ehrenwort! <a href="#fnref2" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
</ol>
</section>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Ein Skript zum Upgraden von ownCloud]]></title><description><![CDATA[Ein Skript wie hier präsentiert hat mir schon ein paarmal viel lästige Arbeit abgenommen. Vielleicht findet es jemand nützlich?]]></description><link>https://blog.wuermkanal.de/ein-skript-zum-upgraden-von-owncloud/</link><guid isPermaLink="false">6294e8e68e5e216528a5f582</guid><category><![CDATA[ownCloud]]></category><category><![CDATA[Raspberry Pi]]></category><category><![CDATA[OSS]]></category><dc:creator><![CDATA[Lothar Neumann]]></dc:creator><pubDate>Tue, 09 Aug 2016 15:01:25 GMT</pubDate><media:content url="https://blog.wuermkanal.de/content/images/2021/02/lim-changwon-Ez5V2THOpDo-unsplash.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://blog.wuermkanal.de/content/images/2021/02/lim-changwon-Ez5V2THOpDo-unsplash.jpg" alt="Ein Skript zum Upgraden von ownCloud"><p>Ein Skript wie hier pr&#xE4;sentiert hat mir schon ein paarmal viel l&#xE4;stige Arbeit abgenommen. Vielleicht findet es jemand n&#xFC;tzlich?</p>
<h2 id="wasistdasjetztwiederbrauchichdas">Was ist das jetzt wieder... brauch&apos; ich das?</h2>
<p>Nun, nur, wenn folgende Bedingungen erf&#xFC;llt sind:</p>
<ul>
<li>Es wird eine <a href="https://owncloud.org/?ref=blog.wuermkanal.de">ownCloud</a>-Instanz betrieben.<br>
Bei mir ist das ein <a href="https://www.raspberrypi.org/products/raspberry-pi-2-model-b/?ref=blog.wuermkanal.de">Raspberry Pi 2</a>, aber vermutlich gilt das so &#xE4;hnlich auf anderen Linux-Systemen auch.</li>
<li>Es ist n&#xF6;tig oder erw&#xFC;nscht, manuelle Upgrades durchzuf&#xFC;hren.<br>
Wer z.B.  ein Repository benutzt, das immer die aktuelle ownCloud-Version vorh&#xE4;lt (<em>gibt&apos;s sowas??</em>), braucht sich freilich nicht plagen: <code>sudo yum update</code> o.&#xE4;. reicht dann (vielleicht &#x2013; wir reden hier immerhin von ownCloud...).<br>
Ich finde das so inzwischen bequemer als den eingebauten Updater, dem traue ich nicht so ganz, au&#xDF;erdem muss man da auch mit den Zugriffsrechten vorher/nachher jonglieren.</li>
</ul>
<p>Wem das jetzt alles gar nichts sagt &#x2013; dann ist das kein Problem, sondern nur ein Fall von &#x201E;falsche Zielgruppe erwischt&#x201C;. In dem Fall gilt:</p>
<blockquote>
<p>&#x201E;<a href="https://www.startpage.com/do/search?lui=deutsch&amp;language=deutsch&amp;cat=pics&amp;query=katzenbilder&amp;nj=0&amp;ref=blog.wuermkanal.de">Bitte gehen Sie weiter, es gibt hier nichts zu sehen.</a>&#x201C;</p>
</blockquote>
<p>Weil ich selbst kein fertiges Skript im Netz <s>klauen</s>finden konnte, musste ich mir doch tats&#xE4;chlich selbst eines schreiben. Damit dem geneigten Leser/der geneigten Leserin<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> dieses schr&#xF6;ckliche Schicksal erspart bleiben m&#xF6;ge, stelle ich das Skript hier zur Verf&#xFC;gung. Das Skript versucht zwar, erst mal Backups von der Datenbank und dem Installationsverzeichnis zu machen, jedoch: Alles ohne Gew&#xE4;hr, wie man sich wohl denken kann. Deshalb an dieser Stelle der <em>Profi-Tipp:</em></p>
<blockquote>
<p>F&#xFC;hre keine Skripte aus, die du nicht (zumindest grob) verstanden hast!</p>
</blockquote>
<h4 id="auerdemwichtig">Au&#xDF;erdem wichtig:</h4>
<ul>
<li>ownCloud mag es nicht, wenn man &#xFC;ber mehrere Versionen hinweg Upgrades macht. &#xDC;ber Major Releases eh nicht (also z. B. 7 &gt; 9), aber auch bei den Minor Releases sollte man sich an die <a href="https://owncloud.org/release-channels/?ref=blog.wuermkanal.de">empfohlene Reihenfolge</a> halten, also: 7.0.x &gt; 7.0.14 &gt; 8.0.13 &gt; 8.1.8 &gt; 8.2.7 &gt; 9.0.2.</li>
<li>Apps sollten vorher <a href="https://doc.owncloud.org/server/9.1/admin_manual/configuration_server/occ_command.html?ref=blog.wuermkanal.de#apps-commands-label">deaktiviert werden</a> (und hinterher wieder aktiviert).</li>
</ul>
<h2 id="dasupgradeskript">Das Upgrade-Skript</h2>
<p>Das Skript sollte so  f&#xFC;r <a href="http://nginx.org/?ref=blog.wuermkanal.de">Nginx</a>  funktionieren; f&#xFC;r <a href="https://httpd.apache.org/?ref=blog.wuermkanal.de">Apache</a> oder <a href="https://www.lighttpd.net/?ref=blog.wuermkanal.de">lighttpd</a> sollte es genauso gehen, man muss dann nur Start und Stopp des Services entsprechend anpassen.<br>
Weiterhin geht das Skript davon aus, dass</p>
<ul>
<li>ownCloud in <code>/var/www/owncloud</code> installiert wurde,</li>
<li>der Webserver mit dem User <code>www-data</code> l&#xE4;uft,<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup></li>
<li>eine USB-Festplatte unter <code>/media/usb-hd</code> gemounted wurde, mit einem existierenden Verzeichnis <code>raspberrypi_backups</code> f&#xFC;r Backups.</li>
</ul>
<p>Diese Einstellungen sind in den Variablen am Anfang konfiguriert, ebenso wie die herunterzuladende, neue ownCloud-Version.<br>
Das Skript l&#xE4;uft ohne Eingaben durch, mit der Ausnahme des Datenbank-Passworts und einiger Pausen, die mit <kbd>Return</kbd> best&#xE4;tigt werden m&#xFC;ssen. Sie sollen sicherstellen, dass bei etwaigen Fehlern abgebrochen werden kann.</p>
<pre><code class="language-bash">#!/usr/bin/env bash

# Hier die neue Version eintragen!
export VERSION_OWNCLOUD=8.2.7

# Download-Pfad, sollte sich nicht aendern
export SOURCE_OWNCLOUD=https://download.owncloud.org/community/owncloud- 

# Pfad zum Backup-Verzeichnis, Anpassen erforderlich!
export path2backup=&apos;/media/usb-hd/raspberrypi_backups&apos;

export htuser=&apos;www-data&apos; # User unter dem der Webserver laeuft  
export ocpath=&apos;/var/www/owncloud&apos; # Pfad zur ownCloud-Installation

ROOTUID=&quot;0&quot;
if [ &quot;$(id -u)&quot; -ne &quot;$ROOTUID&quot; ] ; then
    echo &quot;Dieses Skript braucht Root-Rechte.&quot;
    exit 1
fi

echo &quot;Schalte Maintenance Mode ein...&quot;
read -p &quot;Return druecken oder mit CTRL-C abbrechen&quot;
sudo -u ${htuser} php ${ocpath}/occ maintenance:mode --on
echo -e &quot;\nStoppe Nginx...&quot;
read -p &quot;Return druecken oder mit CTRL-C abbrechen&quot;
service nginx stop

echo -e &quot;\n Backup der DB... (du brauchst gleich das DB-Passwort!)&quot;
read -p &quot;Return druecken oder mit CTRL-C abbrechen&quot;
mysqldump --lock-tables -u root -p  owncloud &gt; ${path2backup}/owncloud-sqlbkp_`date +&quot;%Y%m%d&quot;`.bak
echo -e &quot;...erledigt.\n&quot;

echo &quot;Backup der Owncloud-Installation...&quot;
rsync -Aax ${ocpath}/ ${path2backup}/owncloud-dirbkp_`date +&quot;%Y%m%d&quot;`/
echo -e &quot;...erledigt.\n&quot;

echo &quot;Hole neue Version...&quot;
mkdir ~/owncloud-Download-$VERSION_OWNCLOUD
cd ~/owncloud-Download-$VERSION_OWNCLOUD
wget $SOURCE_OWNCLOUD$VERSION_OWNCLOUD.tar.bz2
echo &quot;...und entpacke sie...&quot;
tar xjf owncloud-$VERSION_OWNCLOUD.tar.bz2
echo -e &quot;...erledigt.\n&quot;
cd owncloud

echo &quot;Verschiebe altes Owncloud-Verzeichnis...&quot;
read -p &quot;Return druecken oder mit CTRL-C abbrechen&quot;
mv ${ocpath} ${ocpath}_before_$VERSION_OWNCLOUD
cp -r ~/owncloud-Download-$VERSION_OWNCLOUD/owncloud /var/www/

echo &quot;Kopiere neues Owncloud-Verzeichnis...&quot;
read -p &quot;Return druecken oder mit CTRL-C abbrechen&quot;
cp ${ocpath}_before_$VERSION_OWNCLOUD/config/config.php ${ocpath}/config/

echo &quot;Setze Rechte...&quot;
find ${ocpath}/ -type f -print0 | xargs -0 chmod 0640
find ${ocpath}/ -type d -print0 | xargs -0 chmod 0750
chown -R root:${htuser} ${ocpath}/
chown -R ${htuser}:${htuser} ${ocpath}/apps/
chown -R ${htuser}:${htuser} ${ocpath}/config/
# Dieses Verzeichnis ist oft ausgelagert, in dem Fall ggfs. anpassen:
# chown -R ${htuser}:${htuser} ${ocpath}/data/ 

echo &quot;Starte Nginx...&quot;
service nginx start

echo &quot;Schalte Maintenance Mode aus...&quot;
sudo -u ${htuser} php ${ocpath}/occ maintenance:mode --off
</code></pre>
<h2 id="skriptausfhren">Skript ausf&#xFC;hren</h2>
<p>Was jetzt noch zu tun ist:</p>
<ol>
<li>Skript von oben kopieren und in eine Datei speichern (z. B. <code>upgrade-oc.sh</code>).</li>
<li><strong>Mindestens</strong> die Variablen am Anfang anpassen.</li>
<li>Datei ausf&#xFC;hrbar machen: <code>chmod +x upgrade-oc.sh</code></li>
<li>Starten: <code>sudo ./upgrade-oc.sh</code></li>
<li>Hoffen...</li>
</ol>
<p>Wenn alles funktioniert hat, muss man jetzt noch das ownCloud-interne Update ausf&#xFC;hren, entweder im Browser oder mit dem <code>occ</code>-Tool und evtl. Apps aktivieren.</p>
<p><small class="footnotes">Titelfoto: <a href="https://unsplash.com/@rachadan?ref=blog.wuermkanal.de">Lim changwon</a> / <a href="https://unsplash.com/?ref=blog.wuermkanal.de">Unsplash</a></small></p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>Ich schreibe f&#xFC;rderhin meist generisches Maskulinum. Alle <i>Genders</i> sind aber von Herzen mit gemeint. <a href="#fnref1" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
<li id="fn2" class="footnote-item"><p>Das ist der Default unter Debian/Raspbian. <a href="#fnref2" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
</ol>
</section>
<!--kg-card-end: markdown-->]]></content:encoded></item></channel></rss>