<?xml version="1.0" encoding="UTF-8" ?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/">
	<channel>
		<title>Nerdmind&#039;s Blog</title>
		<link>https://blog.nerdmind.de/</link>
		<language>de</language>
		<description>Blog eines Technikinteressierten in den unendlichen Weiten des Internet.</description>

		<atom:link href="https://blog.nerdmind.de/feed/" rel="self" type="application/rss+xml" />

		<image>
			<title>Nerdmind&#039;s Blog</title>
			<url>https://blog.nerdmind.de/theme/nerdmind-rgb/static/logo.png</url>
			<link>https://blog.nerdmind.de/</link>
		</image>

					<item>
	<title>Searx: Suchmaschinen-Traffic durch das Tor-Netzwerk leiten</title>
	<link>https://blog.nerdmind.de/post/searx-suchmaschinen-traffic-durch-tor-proxy-leiten/</link>
	<guid isPermaLink="false">3d0d5e962716ca3b9787657149f8b251341faad7</guid>
	<pubDate>Thu, 24 Mar 2022 11:40:00 +0100</pubDate>
	<dc:creator>Thomas Lange</dc:creator>
	<description>Nach der Installation einer Searx-Instanz wird der Datenverkehr zwischen Searx und den Suchmaschinen standardmäßig auf normalem Weg durch die unendlichen Weiten des Internets geleitet. Wer seine Searx […]</description>
	<content:encoded>
		<![CDATA[
			<p>Nach der <a href="https://blog.nerdmind.de/post/eigene-searx-instanz-unter-debian-aufsetzen-basis-installation/" title="Beitrag »Eigene Searx-Instanz unter Debian – Die Basis-Installation (Teil 1/2)«">Installation einer Searx-Instanz</a> wird der Datenverkehr zwischen Searx und den Suchmaschinen standardmäßig auf normalem Weg durch die unendlichen Weiten des Internets geleitet. Wer seine Searx-Instanz also in einem Netzwerk betreibt, dessen WAN-Adresse auf euch als Person schließen lassen könnte, der möchte den Datenverkehr vermutlich durch das Tor-Netzwerk leiten. Da Searx sowohl SOCKS- als auch HTTP-Proxys unterstützt, ist das kein Problem.</p>
<p>Bei der Verwendung des <a href="https://www.torproject.org/">Tor-Netzwerks</a> für ausgehenden Datenverkehr der Searx-Instanz  besteht der Vorteil darin, dass die Suchmaschinen nicht immer die selbe IP-Adresse (z.B. von eurem VPS) sehen und somit keine Rückschlüsse wie „Ah, von der IP-Adresse kommen immer solche und solche Suchanfragen; das ist bestimmt die selbe Person“ ziehen können. Oder: „Ah! Diese IP-Adresse hat diesen PTR-Record (<code>02.nmnd.de</code>). Das ist dieser Kerl mit seinem Blog.“</p>
<p>Meiner Einschätzung nach wäre das schlimmer, als wenn man die Suchmaschinen direkt über ihre URL vom privaten Internetanschluss aus besucht. Dann sehen die Suchmaschinen zwar die IP-Adresse des Anschlusses, aber diese ist „von außen“ erst einmal keiner bestimmten Person zuordenbar. Wenn ich aber von meinem VPS – auf dem der Blog läuft und dessen IP-Adresse mit der Domain <code>nerdmind.de</code> in Verbindung steht – eine Suchanfrage tätige, dann ist das Mapping von IP-Adresse auf Person viel einfacher, als wenn ich mit meiner „anonymen“ Vodafone-IP unterwegs bin.</p>
<p>Andererseits wäre die Verwendung einer Searx-Instanz ohne Tor-Proxy pauschal aber immer noch besser, als die Suchmaschinen direkt im Webbrowser aufzurufen, wenn man das Problem des Browser-Fingerprintings bedenkt. Vermutlich wird der Nutzer eher automatisiert über Javascript und Tracking-URLs (wie z.B. bei Google) im Browser getrackt, als dass geguckt wird, ob die IP-Adresse zu einem VPS gehört und welche Domains diesem zugeordnet sind.</p>
<p>Es kommt also für die Entscheidung auf das <em>„Threat-Model“</em> an, also gegen was man sich schützen möchte. Für mein Setup (Searx-Instanz auf VPS, dessen IP auf mich als Person schließen lässt) ist die Lösung mit dem Tor-Proxy ideal.</p>
<p><em>Das wären meine Überlegungen zu der Thematik. Falls ich da einen Denkfehler drin habe oder jemand noch Anregungen hat, kann er es mir gerne per Mail mitteilen. Nun geht es aber weiter mit der Anleitung!</em></p>
<h2>Tor installieren und Searx-Konfiguration anpassen</h2>
<p>Zur Installation des Tor-Clients muss unter Debian-artigen Linux-Distributionen lediglich das Paket <code>tor</code> installiert werden (wer möchte, kann vorher auch noch <a href="https://support.torproject.org/apt/#tor-deb-repo">das eigene Package-Repository vom Tor-Projekt</a> aktivieren):</p>
<pre><code class="language-bash">sudo apt install tor</code></pre>
<p>Der Tor-Dienst ist danach automatisch gestartet und aktiviert. An der Konfiguration von Tor muss nichts geändert werden, da Tor mit vernünftigen Standard-Einstellungen daherkommt. Standardmäßig startet der Tor-Dienst einen SOCKS5-Proxy auf <code>localhost:9050</code>, den wir nun in der Searx-Konfiguration (<code>settings.yml</code>) wie folgt ansprechen:</p>
<pre><code class="language-yaml">outgoing:
    proxies:
      http:
        - 'socks5h://localhost:9050'
      https:
        - 'socks5h://localhost:9050'
    extra_request_timeout: 5.0</code></pre>
<p>Nun sollte der Datenverkehr zwischen Searx und den Suchmaschinen durch das Tor-Netzwerk fließen. In Ergänzung hierzu empfiehlt es sich noch, den Bilder-Proxy in der Searx-Konfiguration standardmäßig einzuschalten, damit auch die in den Suchergebnissen eingebundenen Bilder über die Searx-Instanz (und somit über Tor) geladen werden:</p>
<pre><code class="language-bash">sed -i 's/image_proxy : False/image_proxy : True/' ~/settings.yml</code></pre>
<h2>Nachteile bei der Verwendung des Tor-Proxys</h2>
<p>Ein Nachteil bei der Verwendung des Tor-Proxys ist, dass manche Suchmaschinen absichtlich oder unabsichtlich Tor-Exit-Nodes blockieren und die Searx-Instanz dann keine Ergebnisse von diesen Suchmaschinen zurückliefert. Daher ist hier noch ein bisschen Feintuning in den Einstellungen angesagt. Meine Konfiguration der Suchmaschinen sieht momentan wie folgt aus und liefert zuverlässig Ergebnisse (zumindest für die Kategorien „Allgemein“ und „Bilder“):</p>
<pre><code class="language-yaml">engines:
    - name: google
      disabled: True
    - name: yahoo
      disabled: False
    - name: qwant
      disabled: False
    - name: duckduckgo
      disabled: False
    - name: startpage
      disabled: False
    - name: reddit
      disabled: False
    - name: dictzone
      disabled: True
    - name: openverse
      disabled: True
    - name: qwant images
      disabled: False
    - name: library of congress
      disabled: True
    - name: duckduckgo images
      disabled: False</code></pre>		]]>
	</content:encoded>
	</item>
					<item>
	<title>Eigene Searx-Instanz unter Debian – uWSGI/Webserver einrichten (Teil 2/2)</title>
	<link>https://blog.nerdmind.de/post/eigene-searx-instanz-unter-debian-aufsetzen-uwsgi-webserver/</link>
	<guid isPermaLink="false">3bf410b7b4f245b9b643b00e5af70b128aabbefe</guid>
	<pubDate>Fri, 18 Mar 2022 14:20:00 +0100</pubDate>
	<dc:creator>Thomas Lange</dc:creator>
	<description>Im vorherigen Beitrag zum Thema wurde die Basis-Installation von Searx auf einem Debian-artigen Linux-System demonstriert. In diesem Beitrag wird gezeigt, wie man die Searx-Instanz für den […]</description>
	<content:encoded>
		<![CDATA[
			<p>Im vorherigen Beitrag zum Thema wurde <a href="https://blog.nerdmind.de/post/eigene-searx-instanz-unter-debian-aufsetzen-basis-installation/" title="Beitrag »Eigene Searx-Instanz unter Debian – Die Basis-Installation (Teil 1/2)«">die Basis-Installation von Searx auf einem Debian-artigen Linux-System</a> demonstriert. In diesem Beitrag wird gezeigt, wie man die Searx-Instanz für den Produktiveinsatz einrichtet und über den uWSGI-Server mit einem WSGI-Proxy-fähigen Webserver wie Apache oder nginx als Reverse-Proxy verbindet. Die Installation und Basis-Konfiguration des Webservers sowie das Ausstellen der TLS-Zertifikate sind <em>nicht</em> Teil des Beitrags.</p>
<p><img src="https://blog.nerdmind.de/static/image/content/searx/searx-suchmaske.jpg" alt="Beispiel: Searx-Suchmaske im dunklen Design" /></p>
<h2>Schritt 1: Abhängigkeiten/Pakete installieren</h2>
<p>Zur Installation des uWSGI-Servers müssen folgende Abhängigkeiten/Pakete installiert werden:</p>
<pre><code class="language-bash">sudo apt install uwsgi uwsgi-plugin-python3</code></pre>
<h2>Schritt 2: uWSGI-Konfiguration erstellen</h2>
<p>Nach der Installation des uWSGI-Servers muss eine neue Konfigurationsdatei für die Searx-Instanz mit nachfolgendem Inhalt im Verzeichnis <code>/etc/uwsgi/apps-available/</code> erstellt werden. Ich benenne die Datei <code>searx.ini</code>:</p>
<pre><code class="language-ini">[uwsgi]
uid = searx
gid = searx

processes = 20
workers = 4

env = LANG=C.UTF-8
env = LANGUAGE=C.UTF-8
env = LC_ALL=C.UTF-8
env = SEARX_SETTINGS_PATH=/opt/searx/settings.yml

chdir = /opt/searx/src/searx
virtualenv = /opt/searx/env
pythonpath = /opt/searx/src

disable-logging = true
enable-threads = true
single-interpreter = true
master = true
lazy-apps = true

module = searx.webapp
plugin = python3,http
cache2 = name=searxcache,items=2000,blocks=2000,blocksize=4096,bitmap=1
listen = 128 # Darf nicht größer als /proc/sys/net/core/somaxconn sein!</code></pre>
<h2>Schritt 3: uWSGI-Konfiguration aktivieren</h2>
<p>Jetzt muss die soeben erstelle Konfigurationsdatei noch aktiviert werden. Dazu muss ein Symlink im Verzeichnis <code>apps-enabled</code> zur <code>searx.ini</code>  im <code>apps-available</code>-Verzeichnis angelegt werden:</p>
<pre><code class="language-bash">sudo ln -s ../apps-available/searx.ini /etc/uwsgi/apps-enabled</code></pre>
<p>Danach kann der uWSGI-Daemon wie folgt neu gestartet und die Logdatei beobachtet werden:</p>
<pre><code class="language-bash">sudo systemctl restart uwsgi &amp; sudo tail -fn0 --retry /var/log/uwsgi/app/searx.log</code></pre>
<p>Wenn alle Schritte erfolgreich durchgeführt wurden und es keine Fehlermeldungen in der Logdatei hagelt, kann der Webserver konfiguriert werden. Nachfolgend zwei Beispiele für die Platzhirschen Apache und nginx.</p>
<h2>Schritt 4: Webserver als Reverse-Proxy konfigurieren</h2>
<p>Der uWSGI-Daemon erzeugt standardmäßig das UNIX-Socket <code>/run/uwsgi/app/searx/socket</code> für die Searx-App. Auf dieses können wir nun von unserem Webserver aus zugreifen. Die folgenden Beispiele sind Minimal-Konfigurationen für Apache und nginx, die von euch noch angepasst werden müssen (TLS, Basic-Authentication, usw.).</p>
<p><strong>Hinweis:</strong> Für die Verwendung von Apache muss zuerst noch das <a href="https://httpd.apache.org/docs/2.4/mod/mod_proxy_uwsgi.html">uWSGI-Proxy-Modul</a> installiert und anschließend die beiden Module <code>proxy</code> und <code>proxy_uwsgi</code> über <code>a2enmod</code> in der Apache-Konfiguration aktiviert werden:</p>
<pre><code class="language-bash">sudo apt install libapache2-mod-proxy-uwsgi
sudo a2enmod proxy proxy_uwsgi</code></pre>
<p><strong>Hinweis:</strong> Um die Searx-Instanz über eine Sub-URL verfügbar zu machen, bitte zusätzlich Schritt 5 befolgen!</p>
<h3>Beispiel: Virtualhost-Konfiguration für Apache</h3>
<pre><code>&lt;VirtualHost *:80&gt;
	ServerName sx.example.org

	ProxyPass /static/ !
	ProxyPass / unix:/run/uwsgi/app/searx/socket|uwsgi://localhost

	Alias /static/ /opt/searx/src/searx/static/

	&lt;Location /static/&gt;
		Require all granted
	&lt;/Location&gt;
&lt;/VirtualHost&gt;</code></pre>
<h3>Beispiel: Virtualhost-Konfiguration für nginx</h3>
<pre><code>server {
	listen [::]:80 ipv6only=off;
	server_name sx.example.org;

	location / {
		include uwsgi_params;
		uwsgi_pass unix:/run/uwsgi/app/searx/socket;
	}

	location /static/ {
		alias /opt/searx/src/searx/static/;
	}
}</code></pre>
<h2>Schritt 5: Searx-Instanz über Sub-URL verfügbar machen (optional)</h2>
<p>Falls man die Searx-Instanz nicht im Wurzelverzeichnis (<code>/</code>), sondern einem Unterverzeichnis (<code>/custom/</code>) erreichbar machen möchte, muss in der Searx-Konfigurationsdatei die Option <code>server.base_url</code> angepasst werden:</p>
<pre><code class="language-bash">sed -i 's#base_url : False#base_url : "/custom/"#' ~searx/settings.yml</code></pre>
<p>Außerdem müssen noch die Pfade in den Virtualhost-Konfigurationen angepasst werden:</p>
<h3>Änderungen für Apache-Konfiguration</h3>
<pre><code class="language-bash">sed -i 's#ProxyPass /#ProxyPass /custom/#' apache-vhost.conf
sed -i 's#/static/#/custom/static/#' apache-vhost.conf</code></pre>
<h3>Änderungen für nginx-Konfiguration</h3>
<pre><code class="language-bash">sed -i 's#location /#location /custom/#' nginx-vhost.conf</code></pre>
<h2>Fertig!</h2>
<p>Nachdem der Webserver und uWSGI-Daemon neu gestartet wurde, sollte alles wie erhofft funktionieren.</p>		]]>
	</content:encoded>
			<media:content url="https://blog.nerdmind.de/static/image/content/searx/searx-suchmaske.jpg" medium="image"></media:content>
	</item>
					<item>
	<title>Eigene Searx-Instanz unter Debian – Die Basis-Installation (Teil 1/2)</title>
	<link>https://blog.nerdmind.de/post/eigene-searx-instanz-unter-debian-aufsetzen-basis-installation/</link>
	<guid isPermaLink="false">003ad4631a833b8feb497d5c038fa43ad51f0fa0</guid>
	<pubDate>Wed, 16 Mar 2022 12:10:00 +0100</pubDate>
	<dc:creator>Thomas Lange</dc:creator>
	<description>Searx ist eine in Python geschriebene „Privatsphären-respektierende, hackbare Metasuchmaschine“, die die Suchanfragen des Benutzers an eine Vielzahl von selbst definierbaren Suchmaschinen (z.B. Google […]</description>
	<content:encoded>
		<![CDATA[
			<p>Searx ist eine in Python geschriebene <a href="https://searx.me/">„Privatsphären-respektierende, hackbare Metasuchmaschine“</a>, die die Suchanfragen des Benutzers an eine Vielzahl von selbst definierbaren Suchmaschinen (z.B. Google, Reddit, <a href="https://bandcamp.com">Bandcamp</a>, StartPage, Wikipedia, Duden, …) weiterleitet und die Ergebnisse dann für den Benutzer aufbereitet. Man bekommt mit einer Searx-Suchanfrage also nicht nur die Ergebnisse einer <em>bestimmten</em> Suchmaschine, sondern gleich von <em>mehreren</em>.</p>
<p>Im Gegensatz zu einer  selbstgehosteten P2P-Suchmaschine wie <a href="https://yacy.net/"><em>Yacy</em></a> crawlt Searx nicht selbst das Web und baut auch keinen eigenen Index auf Peer-to-Peer-Basis auf, sondern leitet die Suchanfragen des Benutzers einfach nur – wie oben beschrieben – an die vorher eingestellten Suchmaschinen weiter und bezieht von dort die Ergebnisse.</p>
<p>Ein Vorteil ist, dass die Links aus den Ergebnissen von z.B. Google keine Tracking-Parameter mehr enthalten, mit denen Google bei direkter Verwendung ihrer Suchmaschine im Webbrowser über JavaScript normalerweise jeden Klick auf ein Suchergebnis trackt. Anstatt dass der Webbrowser des Benutzers die Suchanfrage direkt an die Suchmaschine sendet, fungiert Searx hier als Proxy und sorgt dafür, dass auch keine Cookies mitgeschickt bzw. gespeichert werden.</p>
<p><img src="https://blog.nerdmind.de/static/image/content/searx/searx-suchmaske.jpg" alt="Beispiel: Searx-Suchmaske im dunklen Design" /></p>
<p>Ein weiterer Vorteil ist, dass mehrere Benutzer die selbe Instanz verwenden <em>können</em> und eine Suchanfrage so aus Sicht der einzelnen Suchmaschinen nicht mehr so einfach einem bestimmten Nutzer zugeordnet werden kann.</p>
<p>Obwohl man durch die Benutzung einer selbstgehosteten Searx-Instanz schon einen großen Schritt in Richtung <a href="https://searx.github.io/searx/user/own-instance.html">mehr Kontrolle über seine Daten</a> erzielt hat, sehen die Suchmaschinen allerdings immer noch die IP-Adresse von dem Host, auf dem Searx installiert ist. Sollte man sich also dafür entscheiden, seine Searx-Instanz ausschließlich selbst zu nutzen und nicht mit einer Gruppe an Nutzern zu teilen, ist es empfehlenswert, den Datenverkehr zwischen der Searx-Instanz und den einzelnen Suchmaschinen zum Beispiel via SOCKS-Proxy durch das <a href="https://www.torproject.org/">Tor-Netzwerk</a> zu leiten.</p>
<p>In diesem Beitrag wird gezeigt, wie man eine Searx-Instanz zur Eigennutzung auf einem Debian-artigen Linux-System installieren und ausgiebig testen kann. Verzichten werde ich auf die Einrichtung von <a href="https://github.com/asciimoo/filtron"><em>Filtron</em></a>, einem Reverse-Proxy mit Filterregeln, der für den Betrieb öffentlicher Instanzen gedacht ist und unter anderem verhindern soll, dass zu viele Suchanfragen an die Suchmaschinen gestellt werden, was eine Blockierung der Searx-Instanz zur Folge haben kann.</p>
<p>In einem weiteren Beitrag wird gezeigt, wie man die Searx-Instanz für den Produktiveinsatz einrichtet und diese über den <em>uWSGI</em>-Daemon mit einem <em>WSGI</em>-Proxy-fähigen Webserver (Apache, nginx, ...) als Reverse-Proxy verbindet.</p>
<h2>Schritt 1: Abhängigkeiten/Pakete installieren</h2>
<p>Vor der Installation von Searx müssen folgende Abhängigkeiten/Pakete installiert werden:</p>
<pre><code class="language-bash">sudo apt install python3-dev python3-babel python3-venv git build-essential libxslt-dev zlib1g-dev libffi-dev libssl-dev shellcheck</code></pre>
<h2>Schritt 2: Neuen Benutzer für Searx erstellen</h2>
<p>Nachdem alle Abhängigkeiten installiert wurden, erstellt ihr einen neuen Benutzer, unter dem Searx ausgeführt werden soll. Ich nenne den Benutzer <code>searx</code> und nehme als Home-Verzeichnis <code>/opt/searx</code>. Als Login-Shell nehme ich Bash, damit wir uns für die Installation (und später für Debugging/Wartung) ganz normal mit <code>su - searx</code> einloggen, in das <em>virtuelenv</em> wechseln und die Searx-Instanz ohne <em>uWSGI</em> starten können.</p>
<pre><code class="language-bash">sudo useradd --system --home-dir /opt/searx --shell /usr/bin/bash searx
sudo install -o searx -g searx -m 0755 -d /opt/searx</code></pre>
<p>Nun loggt ihr euch für die Installation von Searx als <code>searx</code> auf dem System ein:</p>
<pre><code class="language-bash">sudo su - searx</code></pre>
<h2>Schritt 3: Searx-Repository herunterladen</h2>
<p>Nun klont ihr das Git-Repository mit dem Searx-Quellcode ins Verzeichnis <code>~/src</code>:</p>
<pre><code class="language-bash">git clone https://github.com/searx/searx.git src</code></pre>
<h2>Schritt 4: Python-Umgebung einrichten</h2>
<p>Jetzt erstellt ihr über Python im Home-Verzeichnis von <code>searx</code> das <a href="https://pypi.org/project/virtualenv/" title="PyPI: virtualenv"><em>Virtual Environment</em></a> im Verzeichnis <code>~/env</code> und richtet die Shell so ein, dass ihr bei der nächsten Anmeldung  mit <code>su - searx</code> im <em>Virtual Environment</em> landet. In dieses <em>Virtual Environment</em> werden dann im nächsten Schritt die für die Searx-Instanz benötigten Python-Module installiert.</p>
<pre><code class="language-bash">python3 -m venv env
echo ". ~/env/bin/activate" &gt; .profile</code></pre>
<p>Wenn ihr euch nun von dem <code>searx</code>-Konto ab- und wieder anmeldet, dann solltet ihr euch erfolgreich in der virtuellen Python-Umgebung befinden, die sich an dem veränderten Shell-Prompt erkennen lässt:</p>
<pre><code>(env) searx@hostname:~$</code></pre>
<p>Um die Umgebung wieder zu verlassen, müsst ihr lediglich <code>deactivate</code> im Terminal ausführen, welches eine vom <code>activate</code>-Skript definierte Shell-Funktion ist, die eure „normale“ Shell-Umgebung wiederherstellt.</p>
<p>Falls ihr nicht automatisch nach dem Anmelden in die virtuelle Umgebung wechseln wollt, könnt ihr den Schritt mit der <code>.profile</code> auch weglassen und immer manuell <code>. ~/env/bin/activate</code> aufrufen.</p>
<h2>Schritt 5: Erforderliche Python-Module installieren</h2>
<p>Aus dem zuvor erstellten <em>Virtual Environment</em> ruft ihr nun <code>pip</code> auf, um die für die Searx-Umgebung erforderlichen Module zu installieren (bzw. bereits vorhandene Module wie <code>pip</code> zu aktualisieren). Kombiniert geht das so:</p>
<pre><code class="language-bash">pip install -U pip setuptools wheel pyyaml</code></pre>
<p>Jetzt müssen noch die projektspezifischen Python-Module von Searx aus der <code>src/requirements.txt</code>  installiert werden. Wechselt dazu ins <code>~/src</code>-Verzeichnis mit dem Searx-Quellcode und führt folgendes <code>pip</code>-Kommando aus:</p>
<pre><code class="language-bash">pip install -e .</code></pre>
<p><strong>Hinweis</strong>: Wenn ihr den Quellcode eurer Searx-Instanz regelmäßig mit <code>git pull</code> aktualisiert und es Änderungen an den projektspezifischen Modulen (<code>requirements.txt</code>) gegeben hat, dann müsst ihr das vorherige <code>pip</code>-Kommando erneut ausführen, damit die zuvor installierten Python-Module in eurem <em>Virtual Environment</em> aktualisiert werden!</p>
<h2>Schritt 6: Searx-Konfiguration erstellen</h2>
<p>Searx ist nun fast startbereit! Jetzt muss lediglich noch eine Konfigurationsdatei erstellt werden. Dazu wechselt ihr wieder in das Home-Verzeichnis und kopiert euch die Template-Konfigurationsdatei nach <code>~/settings.yml</code>:</p>
<pre><code class="language-bash">cp src/utils/templates/etc/searx/use_default_settings.yml settings.yml</code></pre>
<p>Aus „kryptographischen Gründen“ müsst ihr vor dem Starten der Searx-Instanz den in der Template-Konfigurationsdatei enthaltenen Platzhalter-Secret-Key durch einen eigenen ersetzen. Dazu führt ihr folgendes Kommando aus (oder ihr bearbeitet die Datei von Hand und fügt etwas Zufälliges an entsprechender Stelle ein):</p>
<pre><code class="language-bash">sed -i "s/ultrasecretkey/$(openssl rand -hex 16)/" settings.yml</code></pre>
<p>Im letzten Schritt vor dem Starten von Searx müssen wir Searx über die Umgebungsvariable <code>SEARX_SETTINGS_PATH</code> noch mitteilen, wo denn die soeben erstellte Konfigurationsdatei zu finden ist. Aus Gründen der Einfachheit würde ich empfehlen, die Umgebungsvariable einfach direkt in der <code>~/.profile</code> zu exportieren:</p>
<pre><code class="language-bash">echo "export SEARX_SETTINGS_PATH=~/settings.yml" &gt;&gt; .profile</code></pre>
<p>Nach einer erneuten Anmeldung im <code>searx</code>-Konto ist die Umgebungsvariable automatisch gesetzt und muss somit nicht jedes Mal manuell exportiert werden, wenn ihr Searx über die  Shell aus dem <em>virtualenv</em> starten wollt.</p>
<h2>Schritt 7: Searx-Instanz starten und ausprobieren</h2>
<p>Nachdem alles erfolgreich durchführt wurde, kann Searx nun aus der Python-Umgebung gestartet werden.</p>
<pre><code class="language-bash">python src/searx/webapp.py</code></pre>
<p>Im Terminal solltet ihr jetzt sehen, dass Searx gestartet wurde und der Webserver auf <code>127.0.0.1:8888</code> lauscht. Als Development-Server kommt <a href="https://pypi.org/project/Werkzeug/" title="PyPI: Werkzeug"><em>Werkzeug</em></a> zum Einsatz, der hier nur dazu dient, die Installation zu testen.</p>
<pre><code> * Serving Flask app 'webapp' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
INFO:werkzeug: * Running on http://127.0.0.1:8888/ (Press CTRL+C to quit)</code></pre>
<p>Falls ihr Searx auf einem Remote-Server installiert habt und von eurem Desktop aus schnell die Installation testen wollt, ohne <code>server.bind_address</code> auf <code>0.0.0.0</code> setzen zu müssen und/oder in der Server-Firewall den Port zu öffnen, dann könnt ihr wie folgt ganz einfach eine Port-Weiterleitung über SSH von eurem Desktop zum Server aufmachen:</p>
<pre><code class="language-bash">ssh -L 8888:127.0.0.1:8888 -N [...]</code></pre>
<p>… und dann <code>http://localhost:8888</code> im Webbrowser auf dem Desktop aufrufen.</p>
<p>Im nächsten Beitrag zum Thema geht es dann um die <a href="https://blog.nerdmind.de/post/eigene-searx-instanz-unter-debian-aufsetzen-uwsgi-webserver/" title="Beitrag »Eigene Searx-Instanz unter Debian – uWSGI/Webserver einrichten (Teil 2/2)«">Installation und Konfiguration des uWSGI-Servers</a> für den „Produktiveinsatz“ und wie man diesen über Apache und nginx als Reverse-Proxy anspricht.</p>		]]>
	</content:encoded>
			<media:content url="https://blog.nerdmind.de/static/image/content/searx/searx-suchmaske.jpg" medium="image"></media:content>
	</item>
					<item>
	<title>Flashpoint – Das Spezialkommando</title>
	<link>https://blog.nerdmind.de/post/flashpoint-das-spezialkommando/</link>
	<guid isPermaLink="false">45e804e25547059e62bb9df757c9859526c989cb</guid>
	<pubDate>Fri, 22 Dec 2017 02:20:00 +0100</pubDate>
	<dc:creator>Thomas Lange</dc:creator>
	<description>Ich muss euch mal die kanadische Serie Flashpoint – Das Spezialkommando empfehlen, die eine meiner Lieblingsserien ist und die ich schon vor 7 - 8 Jahren im Fernsehen geguckt hatte. Nun habe ich mir […]</description>
	<content:encoded>
		<![CDATA[
			<p>Ich muss euch mal die kanadische Serie <a href="https://www.imdb.com/title/tt1059475/"><em>Flashpoint – Das Spezialkommando</em></a> empfehlen, die eine meiner Lieblingsserien ist und die ich schon vor 7 - 8 Jahren im Fernsehen geguckt hatte. Nun habe ich mir die im Jahr 2016 erschienene <a href="https://www.amazon.de/Flashpoint-Spezialkommando-komplette-Serie-Blu-ray/dp/B00JKAJGII/">Komplettbox auf Blu-ray</a> bei Amazon gekauft (ich mag die Komplettboxen von Serien. Es fühlt sich einfach toll an, wenn man die Komplettbox einer Lieblingsserie in den Händen halten kann). <span title="Lächelndes Gesicht mit lächelnden Augen">😊</span></p>
<p><img src="https://blog.nerdmind.de/static/image/content/flashpoint-bluray-komplettbox.jpg" alt="Flashpoint-Komplettbox auf Blu-ray von Amazon" /></p>
<h2>Die Strategic Response Unit (SRU)</h2>
<p>Es geht um ein Team der <em>Strategic Response Unit (SRU)</em>, eine Spezialeinheit der kanadischen Polizei von Toronto, die gerufen wird, wenn <em>normale</em> Polizisten in brenzligen Situationen nicht mehr weiter wissen. Das können Bombendrohungen, Geiselnahmen, Banküberfälle und ähnliche Dinge sein. Im Gegensatz zu anderen Polizeiserien auf diesem Gebiet geht es bei Flashpoint aber nicht immer nur darum, die Zielperson mit möglichst viel Action abzuknallen. Action kommt bei Flashpoint zwar auf jeden Fall reichlich vor, allerdings können viele Situationen auch durch Reden, Zuhören und Verhandlungsgeschick gelöst werden, ohne dass jemand durch einen tödlichen <a href="https://flashpoint.wikia.com/wiki/SRU_Terminology"><em>Sierra</em></a>-Schuss sterben muss, der von einem der Scharfschützen im Team abgegeben wird, wenn der <a href="https://flashpoint.wikia.com/wiki/Scorpio"><em>Skorpion</em></a>-Befehl kommt.</p>
<p><img src="https://blog.nerdmind.de/static/image/content/flashpoint-enrico-colantoni-als-gregory-parker.jpg" alt="Enrico Colantoni als Sgt. Greg Parker" />
<strong><small><a href="https://de.wikipedia.org/wiki/Enrico_Colantoni">Enrico Colantoni</a> (auch bekannt aus seiner späteren Rolle in der Serie <a href="https://blog.marvin-menzerath.de/artikel/serientipp-person-of-interest/"><em>Person of Interest</em></a>) spielt den Teamchef Sgt. Greg Parker. <span title="Lächelndes Gesicht mit Sonnenbrille">😎</span></small></strong></p>
<p>Flashpoint hebt besonders die menschliche Seite von sowohl den Teammitgliedern als auch den <em>Zielpersonen</em> hervor. Als Zuschauer kann man oft nachvollziehen, warum die <em>Zielperson</em> überhaupt in eine solch missliche Lage wie zum Beispiel eine Geiselnahme geraten ist, was diesen Menschen dazu getrieben hat. Denn nicht immer ist die <em>Zielperson</em> eine böse Person (es gibt auch wirklich böse Arschlöcher, aber meistens ist es dann doch nicht so einfach).</p>
<p>Man bekommt hier keine bestimmte Sichtweise eingetrichtert, sondern kann sich selbst ein Bild von beiden Seiten machen. Der Schusswaffengebrauch ist für die Teammitglieder lediglich die letzte Option, wenn alles andere ausgeschöpft ist. Und wenn dies passiert, dann geht dies auch nicht einfach so an den Charakteren vorbei als wenn sie gefühlslose Killermaschinen wären. Das macht diese Serie für mich jedenfalls so besonders und authentisch.</p>
<h2>Die echte Emergency Task Force (ETF)</h2>
<p>Das fiktive Team von Flashpoint basiert auf einem Team der real existierenden <a href="https://en.wikipedia.org/wiki/Emergency_Task_Force_(TPS)"><em>Emergency Task Force (ETF)</em></a> von Toronto, bei denen die Flashpoint-Darsteller auch ein Training absolviert haben, um deren Vorgehensweisen besser zu verstehen. So konnten sie lernen, wie das echte Team der ETF von Toronto sich in bestimmten Situationen verhält; wie sie verhandeln, die Situation unter Kontrolle bringen oder ein gefährliches Objekt wie ein Haus einnehmen und sichern.</p>
<p>Am Set ist außerdem immer der im Ruhestand befindliche Barney McNeily mit dabei, der 17 Jahre in der echten ETF war. Er achtet darauf, dass es weitestgehend realistisch und authentisch zugeht.</p>
<p><em><strong>Anmerkung:</strong> Diese Informationen habe ich aus einem fast einstündigen Interview (Extras von Staffel 1) mit den Darstellern aus dem Team und weiteren beteiligten Personen (darunter auch die Autoren von Flashpoint: Mark Ellis und Stephanie Morgenstern). Außerdem kann ich noch das Video <a href="https://www.youtube.com/watch?v=RuZfuWqzWZA">The creation of Flashpoint</a> empfehlen, in dem noch weitere Informationen enthalten sind. <span title="Zwinkerndes Gesicht">😉</span></em></p>		]]>
	</content:encoded>
			<media:content url="https://blog.nerdmind.de/static/image/content/flashpoint-bluray-komplettbox.jpg" medium="image"></media:content>
			<media:content url="https://blog.nerdmind.de/static/image/content/flashpoint-enrico-colantoni-als-gregory-parker.jpg" medium="image"></media:content>
	</item>
					<item>
	<title>MariaDB: Die Sache mit dem root-Passwort</title>
	<link>https://blog.nerdmind.de/post/mariadb-die-sache-mit-dem-root-passwort/</link>
	<guid isPermaLink="false">832faf62cfd44ea0ff93892d79719e6ef363ae75</guid>
	<pubDate>Sun, 15 Oct 2017 17:00:00 +0200</pubDate>
	<dc:creator>Thomas Lange</dc:creator>
	<description>Bei der aktuellen Debian-Version Stretch wird anstatt MySQL nun MariaDB verwendet. Manche wundert es vielleicht, dass bei der Installation von MariaDB nicht nach einem Passwort für den […]</description>
	<content:encoded>
		<![CDATA[
			<p>Bei der aktuellen Debian-Version <em>Stretch</em> wird  <a href="https://privatstrand.dirkschmidtke.de/2017/06/21/mariadb-statt-mysql/">anstatt MySQL nun MariaDB verwendet</a>. Manche wundert es vielleicht, dass bei der Installation von MariaDB nicht nach einem Passwort für den Datenbankbenutzer <code>root</code> gefragt wird, wie es sonst bei der Installation von MySQL der Fall war. Das liegt daran, dass sich der Linux-Benutzer <code>root</code> bei MariaDB direkt über das <a href="https://de.wikipedia.org/wiki/POSIX_local_inter-process_communication_socket">Unix-Domain-Socket</a> als MySQL-Root ohne Passwort authentifizieren kann:</p>
<pre><code class="language-shell">sudo mysql -u root</code></pre>
<p>Das hat den Vorteill, dass Dienste und Skripte, die als <code>root</code> laufen, kein Passwort mehr benötigen um sich als MySQL-Root anzumelden (zum Beispiel <a href="https://github.com/Nerdmind/Snippets/blob/master/Bash/mysql-database-backup.sh">Backup-Skripte</a>, in die man ansonsten immer das MySQL-Root-Passwort eingetragen hätte).</p>
<h2>&quot;dann setze ich halt ein MySQL-Root-Passwort&quot;</h2>
<p>Aus Gewohnheit möchte man jetzt ein Passwort für den <code>root</code>-Benutzer vergeben, damit man sich auch über eine Schnittstelle wie <a href="https://www.phpmyadmin.net/"><em>phpMyAdmin</em></a> einloggen und den Server administrieren kann (sofern man nicht auf der Kommandozeile arbeitet). Das kann ich aber nicht empfehlen, da andere Dienste davon ausgehen, dass sie sich direkt über das Socket mit <code>root</code>-Rechten (Linux Root) ohne Passwort authentifizieren können. Wenn man nun einfach ein Passwort für den Benutzer definiert, dann funktionieren diese Dienste eventuell nicht mehr und man erhält am nächsten Morgen eine Mail vom Cron Daemon mit einer Fehlermeldung wie zum Beispiel:</p>
<pre><code>/etc/cron.daily/logrotate:
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
error: error running shared postrotate script for '[…]'
run-parts: /etc/cron.daily/logrotate exited with return code 1</code></pre>
<p>Dort kann man erkennen, dass versucht wurde, sich ohne Passwort zu authentifizieren, was dann aber aufgrund eines gesetzten Passworts fehlgeschlagen ist. Also,  anstatt den Datenbankbenutzer <code>root</code> anzufassen, empfehle ich, einfach einen neuen Benutzer zur Administration anzulegen, mit dem man sich auch über <em>phpMyAdmin</em> einloggen kann.</p>
<h2>Einen neuen Administrations-Benutzer anlegen</h2>
<pre><code class="language-shell">sudo mysql -u root</code></pre>
<pre><code class="language-sql">CREATE USER 'admin'@'localhost' IDENTIFIED BY 'password_here';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;</code></pre>
<p>Es gibt übrigens auch noch ein Skript namens <code>mysql_secure_installation</code>, aber das definiert auch wieder ein Passwort für den <code>root</code>-Benutzer, was doof ist.</p>		]]>
	</content:encoded>
	</item>
					<item>
	<title>Zu verkaufen: Lötstation-Bundle</title>
	<link>https://blog.nerdmind.de/post/zu-verkaufen-loetstation-bundle/</link>
	<guid isPermaLink="false">81295497e17b479f31ff4f917359bf2230e885e0</guid>
	<pubDate>Mon, 09 Oct 2017 01:20:00 +0200</pubDate>
	<dc:creator>Thomas Lange</dc:creator>
	<description>Ich hatte mir vor einigen Monaten aus Interesse am Löten eine Lötstation zugelegt, die ich allerdings dann doch nur ca. eine Woche (und das auch nicht besonders intensiv) genutzt habe, weil ich merkte […]</description>
	<content:encoded>
		<![CDATA[
			<p>Ich hatte mir vor einigen Monaten aus Interesse am Löten <a href="https://blog.nerdmind.de/post/erste-loetstation/" title="Beitrag »ZD-931: Meine erste Lötstation«">eine Lötstation zugelegt</a>, die ich allerdings dann doch nur ca. eine Woche (und das auch nicht besonders intensiv) genutzt habe, weil ich merkte, dass es mir doch nicht so viel Spaß macht. Deshalb biete ich die Lötstation in einem Bundle zusammen mit einer Entlötpumpe, Lötzinn und Ersatzspitzen <a href="https://www.ebay.de/itm/122745446593">auf eBay zum Verkauf</a> an. Vielleicht kann hier zufällig jemand genau so etwas gebrauchen und hat Interesse an dem Bundle. Weitere Informationen findet ihr in der Produktbeschreibung bei eBay. <span title="Zwinkerndes Gesicht">😉</span></p>
<p><em><strong>Nachtrag vom 09.10.2017:</strong> Der Artikel wurde verkauft und ist nicht mehr verfügbar.</em></p>		]]>
	</content:encoded>
	</item>
					<item>
	<title>Video: A Modern Dating Horror Story</title>
	<link>https://blog.nerdmind.de/post/modern-dating-horror-story/</link>
	<guid isPermaLink="false">27d5fc9c0b445c8ae3cc626f3962866f43334b4d</guid>
	<pubDate>Sun, 08 Oct 2017 12:30:00 +0200</pubDate>
	<dc:creator>Thomas Lange</dc:creator>
	<description>Hahaha: A Modern Dating Horror Story (via Fefe)! Er ist auf keinen Social-Media-Webseiten präsent und hat nur ein uraltes Smartphone, äh Handy (diese Geräte, die sich nur zum Telefonieren und Simsen […]</description>
	<content:encoded>
		<![CDATA[
			<p><strong>Hahaha:</strong> <em>A Modern Dating Horror Story</em> (via <a href="https://blog.fefe.de/?ts=a727036f">Fefe</a>)! Er ist auf keinen Social-Media-Webseiten präsent und hat <em>nur</em> ein uraltes Smartphone, äh Handy (diese Geräte, die sich nur zum Telefonieren und Simsen eignen). Und ein analoges Fotoalbum ohne Kommentarfunktion! Wie weiß dieser Mensch denn, ob andere ihn geil finden? Existiert dieser Mensch überhaupt? Wie kann denn so etwas sein?! Das ist doch nicht normal – <a href="https://www.der-postillon.com/2012/03/junger-mann-in-psychiatrie-eingewiesen.html">der gehört in die Psychiatrie</a>!!1! <span title="Gesicht mit Freudentränen">😂</span></p>
<blockquote style="text-align:center;">
		<p><strong>Eingebettetes Video</strong><br>
			<a href="https://www.youtube.com/watch?v=xMtbGy3BThc">https://www.youtube.com/watch?v=xMtbGy3BThc</a></p>
		<p><small>Hier war ein YT-Video über eine <a href="https://invidious.io/">Invidious</a>-Instanz eingebunden. Wegen <a href="https://github.com/iv-org/invidious/issues/4734">technischen Maßnahmen von Google</a>,
		mit denen das Invidious-Projekt gerade zu kämpfen hat, können hier momentan keine YT-Videos via Invidious eingebunden werden.</small></p>
	</blockquote>		]]>
	</content:encoded>
	</item>
					<item>
	<title>Metallischer Geschmack im Tröpfelverdampfer?</title>
	<link>https://blog.nerdmind.de/post/metallischer-geschmack-im-troepfelverdampfer/</link>
	<guid isPermaLink="false">929a0470ca46856bc73dbf0aaea446d1d6e9beaf</guid>
	<pubDate>Thu, 21 Sep 2017 01:30:00 +0200</pubDate>
	<dc:creator>Thomas Lange</dc:creator>
	<description>Ich hatte in den letzten Tagen von der einen auf die andere Wicklung (nachdem ich eine neue Microcoil mit demselben Kanthal-Draht wie immer eingebaut habe) urplötzlich einen extrem ekelhaften, […]</description>
	<content:encoded>
		<![CDATA[
			<p>Ich hatte in den letzten Tagen von der einen auf die andere Wicklung (nachdem ich eine neue Microcoil mit demselben Kanthal-Draht wie immer eingebaut habe) urplötzlich einen extrem ekelhaften, metallischen Geschmack aus meinem <em>Lush</em>-Tröpfler von Wotofo bekommen.</p>
<p>Ein metallischer Geschmack kann laut meinen Recherchen nur durch <a href="https://www.wolke101.de/gluehende-freistrecken/">Freistrecken</a> bzw. <em>Hotspots</em> entstehen, aber auch durch Verunreinigungen an den Polen, in die man die Drähte schraubt.</p>
<p>Ich habe mehrere neue Wicklungen gemacht, aber der Geschmack ging einfach nicht weg. Letztendlich habe ich den Lush komplett auseinander genommen und in heißes Wasser eingelegt. Danach habe ich mir die Löcher mal <em>ganz genau</em> angeguckt und auch das Problem gefunden.</p>
<p><img src="https://blog.nerdmind.de/static/image/content/evic-vtc-mini-mit-lush.jpg" alt="Evic VTC Mini mit Lush-Tröpfelverdampfer" title="Meine Evic VTC Mini mit dem Lush-Tröpfelverdampfer" /></p>
<p>In zwei von vier Löchern befanden sich winzige Drahtstückchen (maximal einen Millimeter lang), die sehr schwer zu erkennen waren. Ich war mir ziemlich sicher, dass dies das Problem sein muss und habe dann wieder eine neue Microcoil eingebaut. Und schon schmeckt man nur noch den typischen &quot;Neue-Watte-Geschmack&quot; und nicht mehr diesen ekligen metallischen Geschmack.</p>
<p>Ich hätte mir die Pole mal viel früher schon anschauen sollen. Im Nachhinein wird mir auch klar, warum manche Schrauben nicht ganz so weit rein gingen wie andere. Merken! <span title="Erstauntes Gesicht">😲</span></p>		]]>
	</content:encoded>
			<media:content url="https://blog.nerdmind.de/static/image/content/evic-vtc-mini-mit-lush.jpg" medium="image"></media:content>
	</item>
					<item>
	<title>E-Books: Vermehrt Wasserzeichen gesichtet</title>
	<link>https://blog.nerdmind.de/post/e-books-vermehrt-wasserzeichen/</link>
	<guid isPermaLink="false">0428cc48ef31cc04c88055f050e5cf4b03705cef</guid>
	<pubDate>Wed, 09 Aug 2017 08:50:00 +0200</pubDate>
	<dc:creator>Thomas Lange</dc:creator>
	<description>Ich konnte in letzter Zeit feststellen, dass ich immer mehr E-Books, die ich bereits aus anderen Quellen in meinem Besitz hatte und auch schon gelesen habe, endlich offiziell bei Thalia nachkaufen […]</description>
	<content:encoded>
		<![CDATA[
			<p>Ich konnte in letzter Zeit feststellen, dass ich immer mehr E-Books, die ich bereits aus <a href="https://blog.nerdmind.de/post/ebook-kopierschutz/" title="Beitrag »Kopierschutz bei E-Books«"><em>anderen Quellen</em></a> in meinem Besitz hatte und auch schon gelesen habe, endlich offiziell bei <em>Thalia</em> nachkaufen konnte, da es sie nun endlich mit Wasserzeichen anstatt hartem DRM-Kopierschutz gibt, <a href="https://www.youtube.com/watch?v=wCpSq536YLs">der nur die ehrlichen Käufer vergrault</a>.</p>
<p>So konnte ich die drei Romane aus der <a href="https://metro2033.org/metrouniversum.html"><em>Metro</em>-Reihe von Dmitry Glukhovsky</a> nachkaufen (ich überprüfe zwischendurch immer mal manche Titel, ob es diese endlich ohne DRM gibt).</p>
<p>Das ist doch eine positive Entwicklung! <span title="Lächelndes Gesicht mit lächelnden Augen">😊</span></p>		]]>
	</content:encoded>
	</item>
					<item>
	<title>Crowdfunding-Projekt: „Mein Grundeinkommen“</title>
	<link>https://blog.nerdmind.de/post/mein-grundeinkommen/</link>
	<guid isPermaLink="false">d40e75ee6c7dc95bec5301264c6b348c2b1e7d34</guid>
	<pubDate>Thu, 27 Jul 2017 21:10:00 +0200</pubDate>
	<dc:creator>Thomas Lange</dc:creator>
	<description>Ich wurde heute auf das Crowdfunding-Projekt Mein Grundeinkommen aufmerksam gemacht. Dort kann man sich registrieren und bekommt dann (sofern man ausgelost wurde) ein Jahr lang jeden Monat 1.000 EUR […]</description>
	<content:encoded>
		<![CDATA[
			<p>Ich wurde heute auf das <a href="https://de.wikipedia.org/wiki/Crowdfunding" title="Wikipedia: Crowdfunding">Crowdfunding</a>-Projekt <a href="https://www.mein-grundeinkommen.de/"><em>Mein Grundeinkommen</em></a> aufmerksam gemacht.</p>
<p>Dort kann man sich registrieren und bekommt dann (sofern man ausgelost wurde) ein Jahr lang jeden Monat 1.000 EUR <a href="https://de.wikipedia.org/wiki/Bedingungsloses_Grundeinkommen" title="Wikipedia: Bedingungsloses Grundeinkommen">bedingungsloses Grundeinkommen</a>, das über Crowdfunding finanziert wird.</p>
<p>Jeder kann einfach mitmachen, und sobald 12.000 EUR via Crowdfunding eingenommen wurden, wird das nächste Grundeinkommen ausgelost. Ich habe mich heute auch dort registriert und mit zwei anderen Bekanntschaften an der Verlosung teilgenommen, aber wir hatten kein Glück (bei der Vielzahl an Teilnehmern, die sich dort registrieren aber vorhersehbar). <span title="Zwinkerndes Gesicht">😉</span></p>		]]>
	</content:encoded>
	</item>
			</channel>
</rss>
