<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de"><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://www.boone-schulz.de/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.boone-schulz.de/" rel="alternate" type="text/html" hreflang="de" /><updated>2025-08-16T09:34:09+00:00</updated><id>https://www.boone-schulz.de/feed.xml</id><title type="html">boone-schulz.de</title><subtitle>Willkommen bei der Fledermausfamilie</subtitle><entry><title type="html">shutdown mit plasma6</title><link href="https://www.boone-schulz.de/2025/08/shutdown-mit-plasma6/" rel="alternate" type="text/html" title="shutdown mit plasma6" /><published>2025-08-16T11:00:00+00:00</published><updated>2025-08-16T11:00:00+00:00</updated><id>https://www.boone-schulz.de/2025/08/shutdown-mit-plasma6</id><content type="html" xml:base="https://www.boone-schulz.de/2025/08/shutdown-mit-plasma6/"><![CDATA[<p>Es gibt immer mal wieder Tage, da muss man (also ich) seinen Rechner neu starten.<br />
Gern auch mal remote.</p>

<h2 id="vergangenheit">Vergangenheit</h2>

<h3 id="kde3">KDE3</h3>

<p>Bei KDE3 lief das ganze noch mittels <code class="language-plaintext highlighter-rouge">dcop</code>:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="rouge-code"><pre>shutdown.kde.sh
<span class="c">#!/bin/bash</span>

<span class="nv">DCOP</span><span class="o">=</span><span class="sb">`</span>which dcop<span class="sb">`</span>

<span class="k">${</span><span class="nv">DCOP</span><span class="k">}</span> <span class="nt">--all-sessions</span> <span class="nt">--all-users</span> ksmserver ksmserver <span class="nb">logout </span>0 0 0 <span class="o">&amp;&amp;</span> <span class="nb">exit </span>0

<span class="c"># parameter</span>
<span class="c">#  1. ShutdownConfirm</span>
<span class="c">#     -1  ==  Obey the user's confirmation setting.</span>
<span class="c">#     0   ==  Don't confirm, shutdown without asking.</span>
<span class="c">#     1   ==  Always confirm, ask even if the user turned it off.</span>
<span class="c">#  2. ShutdownType</span>
<span class="c">#     -1  ==  Select previous action or the default if it's the first time.</span>
<span class="c">#     0   ==  Only log out.</span>
<span class="c">#     1   ==  Log out and reboot the machine.</span>
<span class="c">#     2   ==  Log out and halt the machine.</span>
<span class="c">#  3. ShutdownMode</span>
<span class="c">#     -1  ==  Select previous mode or the default if it's the first time.</span>
<span class="c">#     0   ==  Schedule a shutdown (halt or reboot) for the time all active sessions have exited.</span>
<span class="c">#     1   ==  Shut down, if no sessions are active. Otherwise do nothing.</span>
<span class="c">#     2   ==  Force shutdown. Kill any possibly active sessions.</span>
<span class="c">#     3   ==  Pop up a dialog asking the user what to do if sessions are still active.</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<h3 id="kde4">KDE4</h3>

<p>KDE4 wechselte dann in Richtung DBus. Und damit konnte man einfach das ganze mit <code class="language-plaintext highlighter-rouge">qdbus</code> erledigen.
Dafür hatte ich mein altes Script entsprechend umgebaut:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="rouge-code"><pre>shutdown.kde.sh

<span class="c">#!/bin/bash</span>

<span class="c"># well, this is used more than once</span>
<span class="nv">desktop_user</span><span class="o">=</span><span class="s2">"</span><span class="k">${</span><span class="nv">1</span><span class="k">}</span><span class="s2">"</span>

su <span class="nt">-c</span> <span class="s2">". ~/.dbus/session-bus/</span><span class="si">$(</span><span class="nb">cat</span> /var/lib/dbus/machine-id<span class="si">)</span><span class="s2">-0 ;
  export DBUS_SESSION_BUS_ADDRESS ;
  /usr/bin/qdbus org.kde.ksmserver /KSMServer logout 0 0 -1"</span> <span class="se">\</span>
   - <span class="nv">$desktop_user</span>
</pre></td></tr></tbody></table></code></pre></div></div>

<p>Fertig.
KDE interpretiere das so, dass man sich abmelden möchte und die aktuelle Sitzung sollte gespeichert werden.<br />
Perfekt.</p>

<h3 id="plasma5">Plasma5</h3>

<p>Bei der Umstellung in Richtung Plasma ging dieses Feature verloren. Ich kann mich jedenfalls nicht daran erinnern,
dass es bei Plasma 5 so etwas in einer ähnlichen Form gab.</p>

<h2 id="gegenwart">Gegenwart</h2>

<p>Aber Plasma 5 ist Geschichte, wir nutzen ja Plasma 6! :D</p>

<h3 id="plasma6">Plasma6</h3>

<p>In Plasma 6 wurde <code class="language-plaintext highlighter-rouge">org.kde.ksmserver</code> durch <code class="language-plaintext highlighter-rouge">org.kde.Shutdown</code> und <code class="language-plaintext highlighter-rouge">org.kde.LogoutPrompt</code> ersetzt.</p>

<p>Einen sofortigen Logout kann  man jetzt hierüber erreichen:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre></td><td class="rouge-code"><pre>qdbus org.kde.Shutdown /Shutdown org.kde.Shutdown.logout
</pre></td></tr></tbody></table></code></pre></div></div>

<p>Möchte man einen Prompt sehen, dann nimmt man lieber das folgende:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre></td><td class="rouge-code"><pre>qdbus org.kde.LogoutPrompt /LogoutPrompt org.kde.LogoutPrompt.promptLogout
</pre></td></tr></tbody></table></code></pre></div></div>

<p>Darüber hinaus geht das ganze auch für ein “logout and reboot” bzw. “logout and shutdown”.<br />
Hier muss man dann allerdings darauf achten, ob man das Sicherheitshalber noch einmal selber über einen Prompt bestätigen möchte:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
</pre></td><td class="rouge-code"><pre>qdbus org.kde.LogoutPrompt /LogoutPrompt promptReboot
qdbus org.kde.LogoutPrompt /LogoutPrompt promptShutDown
</pre></td></tr></tbody></table></code></pre></div></div>

<p>oder lieber alles dem Automatismus überlassen und auf den Prompt verzichten möchte:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
</pre></td><td class="rouge-code"><pre>qdbus org.kde.Shutdown /Shutdown org.kde.Shutdown.logoutAndReboot
qdbus org.kde.Shutdown /Shutdown org.kde.Shutdown.logoutAndShutdown
</pre></td></tr></tbody></table></code></pre></div></div>

<p>Sollte das <code class="language-plaintext highlighter-rouge">qdbus</code> binary nicht im Pfad einer Distribution liegen (so wie bei mir), lässt sich das mit <code class="language-plaintext highlighter-rouge">find</code> aufspüren.</p>]]></content><author><name>bodo</name></author><category term="Computer" /><category term="linux" /><category term="kde" /><category term="plasma6" /><summary type="html"><![CDATA[Es gibt immer mal wieder Tage, da muss man (also ich) seinen Rechner neu starten. Gern auch mal remote.]]></summary></entry><entry><title type="html">USBSID-Pico</title><link href="https://www.boone-schulz.de/2025/07/USBSID-Pico/" rel="alternate" type="text/html" title="USBSID-Pico" /><published>2025-07-20T21:00:00+00:00</published><updated>2025-07-20T21:00:00+00:00</updated><id>https://www.boone-schulz.de/2025/07/picousb</id><content type="html" xml:base="https://www.boone-schulz.de/2025/07/USBSID-Pico/"><![CDATA[Eine neue Kategorie muss her!  

Die Retro Szene ist in den letzten Jahren wieder erstärkt. Es gibt unheimlich viele, gute & neue Dinge zu entdecken.

Ich habe seit einigen Jahren mein Faible für die alten Retro Dinge wieder entdeckt und versuche diese
jetzt wieder mehr in meinen Tagesablauf zu integrieren.  
Was nicht einfach ist, weil es auch unheimlich viel Zeit in Anschpruch nimmt und ich die nicht immer
aufbringen kann.  
Und natürlich muss dann dieses Quentchen Lust auch noch dabei sein ...

## USBSID

Ich bin irgendwann im letzten Jahr LouDnL über den Weg gelaufen.  
Keine Ahnung, ob es bei [GitHub](https://github.com/LouDnl), bei [Mastodon](https://mastodon.social/@loudfpv) 
oder dem damaligen Twitter war. Ich bekomme es nicht mehr zusammen.

Aber ich fand sein Projekt ziemlich genial: Einen RaspBerry Pico mit 2 SIDs zusammen auf einem Board.
Mit dem entsprechenden Player kommt dann das gute Zeug in Stereo aus den Lautsprechern.

### Lieferzustand

Man kann das Board voll bestückt und getestet im [Retro8bitShop](https://www.retro8bitshop.com/product/usbsid-pico-by-loud/) 
erwerben. (Aufgrund von meinem Fanboygehabe, habe ich meines direkt von *Loudnl* erhalten :D)

<div id="gallery" class="post-meta mb-3">
  <a href="/static/2025/07/board-plain.jpg" class="swipebox" title="">
    <img class="lozad" data-src="/static/2025/07/board-plain-150x150.jpg" alt="usbsid 1" src="/static/2025/07/board-plain-150x150.jpg" data-loaded="true">
  </a>
</div>

Dazu fehlt noch ein Raspberry Pico ...

<div id="gallery" class="post-meta mb-3">
  <a href="/static/2025/07/rapberry-pico.jpg" class="swipebox" title="">
    <img class="lozad" data-src="/static/2025/07/rapberry-pico-150x150.jpg" alt="usbsid 1" src="/static/2025/07/rapberry-pico-150x150.jpg" data-loaded="true">
  </a>
</div>

... und - natürlich - die SID Chips.

Die Original sind kaum noch zu bekommen, daher bin ich auch Nachbauten ausgewichen und habe mich für 
[ARMSID](https://retrocomp.cz/produkt?id=2) entschieden.  
Diese sollen von allen Verfügbaren Nachbauten am Originalgetreuesten sein. Ob ich das überhaupt hören kann? Ich glaube nicht ...

Auf Grund einer Fehlinterpretation des Beschreibungstextes, habe ich 2 Stück geordert.  
Braucht man nicht! **Wenn ihr den [ARM2SID +FM](https://retrocomp.cz/produkt?id=20) kauft, bekommt ihr 2 Stück!**

<div id="gallery" class="post-meta mb-3">
  <a href="/static/2025/07/armsid.jpg" class="swipebox" title="">
    <img class="lozad" data-src="/static/2025/07/armsid-150x150.jpg" alt="usbsid 1" src="/static/2025/07/armsid-150x150.jpg" data-loaded="true">
  </a>
</div>


### Installation

Die Hardwareinstallation war einfach. Chipfs aufs Board  stecken, fertig.

Bei der Software ging es ähnlich flott. Ich benutze Linux (ein Arch Clone) und habe dementsprechend meine Freiheiten.  
Der folgende Part wird sich also eher mit Linux (und im speziellen mit Arch) beschäftigen.

#### udev

Als erstes müssen die `udev` Regeln erstellt werden.  
Ich habe hier 2 erstellt:

Die Regel mit Vendor `2e8a` und der ProductId `0003` entsprechend dem Gerät, welches am USB Port sichtbar wird, wenn man es 
blank und ohne Firmware an seinen Rechner anschließt. (Wer nicht weiß, wie man an die Daten kommt, führt ein `lsusb` aus!)
Damit bekomme ich den Pico immer unter dem gleichen Devicenamen im System zu fassen und muss nicht immer nachschauen, was sich 
der DeviceManager ausgewürfelt hat.

Die original Regel (vendor: `cafe` und product: `4011`) kommen erst nach der Installation der Firmware zum tragen.


```bash
cat /etc/udev/rules.d/69-usbsid-permissions.rules 
# Copy to /etc/udev/rules.d
# Reload udev with:
# sudo udevadm control --reload-rules && sudo udevadm trigger

ACTION=="*", KERNEL=="ttyUSB[0-9]*",MODE="0777", GROUP:="plugdev", TAG+="uaccess"
ACTION=="*", KERNEL=="ttyACM[0-9]*",MODE="0777", GROUP:="plugdev", TAG+="uaccess"

SUBSYSTEMS=="usb", ATTRS{idVendor}=="cafe", ATTRS{idProduct}=="4011", MODE="0777"
SUBSYSTEMS=="tty", ATTRS{idVendor}=="cafe", ATTRS{idProduct}=="4011", MODE="0777"
SUBSYSTEMS=="tty", ATTRS{idVendor}=="cafe", ATTRS{idProduct}=="4011", MODE="0777", SYMLINK+="usbsid%n"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="cafe", ATTRS{idProduct}=="4011", MODE="0777", SYMLINK+="usbsid%n"

SUBSYSTEMS=="usb", ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="0003", MODE="0777"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="0003", MODE="0777", SYMLINK+="usbsid-rasp%n"
```

Nach einem `udevadm control --reload-rules && udevadm trigger` konnte ich den Raspberry im System unter meinen gewählten Namen finden und mounten

```bash
ls -l /dev/usb*
lrwxrwxrwx 1 root root  3 20. Jul 16:23 /dev/usbsid-rasp -> sda
lrwxrwxrwx 1 root root  3 20. Jul 16:23 /dev/usbsid-rasp0 -> sg0
lrwxrwxrwx 1 root root  4 20. Jul 16:23 /dev/usbsid-rasp1 -> sda1
lrwxrwxrwx 1 root root 15 20. Jul 16:23 /dev/usbsid-rasp2 -> bus/usb/003/006

mount /dev/usbsid-rasp1 /mnt/usbsid
```

Soweit so gut, jetzt noch die ...

#### Firmware

Da wurde es etwas hakeliger.  
Von den Picos gibt es nämlich ein paar [Versionen](https://www.raspberrypi.com/documentation/microcontrollers/pico-series.html) mehr.  
Ich hatte mir einen [Raspberry Pico H](https://www.raspberrypi.com/documentation/microcontrollers/images/pico-1s.png?hash=37f90d0137e81859630d4f0943b6f3d5) 
organisiert, also musste ich hier die entsprechende Firmware heraussuchen.

Die findet man unter [GitHub](https://github.com/LouDnl/USBSID-Pico/releases/). Für meinen Pico war dann `usbsidpico-v1.3.uf2` die passende Version.

```bash
curl -L -o /mnt/usbsid/usbsidpico-v1.3.uf2 https://github.com/LouDnl/USBSID-Pico/releases/download/v0.5.0-BETA/usbsidpico-v1.3.uf2
```

Nach einem kleinen `sync` auf der Konsole startete der Pici automatisch neu. (Alternativ, hätte ich auch den Pico über seinen minimal Taster zurücksetzen können.)
Nach dem Neustart zeigt mir `lsusb` ein neues Device:

```bash
lsusb

Bus 003 Device 013: ID cafe:4011 LouD (v0.5.0-BETA.20250628) USBSID-Pico v1.3

ls -l /dev/usbsid*
lrwxrwxrwx 1 root root 12 22. Jul 19:01 /dev/usbsid0 -> snd/midiC2D0
lrwxrwxrwx 1 root root 15 22. Jul 19:01 /dev/usbsid2 -> bus/usb/003/013
```

Yes! \m/


#### Tests

Hier wurde es dann etwas hakliger.  
Laut Webseite kann man sich hier um einen Test seiner Hardware kümmern: [usbsid.loudai.nl](https://usbsid.loudai.nl/index.html).  
Mein Firefox konnte das neue Device aber nicht finden.

Ich habe daraufhin andere Firmwares probiert. Ohne nennensweite Änderung ...

Bis ich auf den Trichter kam mal einen anderen Browser zu testen!  
Und siehe da, it works! Also mit dem frisch installiertem Chromium funktionierte es auf Anhieb.

<div id="gallery" class="post-meta mb-3">
  <a href="/static/2025/07/usbsid_1.jpg" class="swipebox" title="">
    <img class="lozad" data-src="/static/2025/07/usbsid_1-150x150.jpg" alt="usbsid 1" src="/static/2025/07/usbsid_1-150x150.jpg" data-loaded="true">
  </a>
  <a href="/static/2025/07/usbsid_3.jpg" class="swipebox" title="">
    <img class="lozad" data-src="/static/2025/07/usbsid_3-150x150.jpg" alt="usbsid 3" src="/static/2025/07/usbsid_3-150x150.jpg" data-loaded="true">
  </a>
  <a href="/static/2025/07/running-board.jpg" class="swipebox" title="">
    <img class="lozad" data-src="/static/2025/07/running-board-150x150.jpg" alt="usbsid 3" src="/static/2025/07/running-board-150x150.jpg" data-loaded="true">
  </a>
</div>


#### Und wie weiter?

Aktuell teste ich die nötigen Clients.  
Ich habe mir den gepatchten [Vice](https://github.com/LouDnl/Vice-USBSID) aus dem Repo von LouDnl organistiert.  

Der Build war simple.  
Der alte Dreierschritt: `autogen.sh`, `configure` und `make` ...

Bei meinem Arch Linux musste ich nur noch `glib2-devel` und `xa` nachinstallieren, schon lief der Zauber und ich konnte eine kleine Runde Turrican mit fettem Sound spielen.]]></content><author><name>bodo</name></author><category term="Retro" /><category term="sid" /><category term="chiptunes" /><category term="retro" /><summary type="html"><![CDATA[Eine neue Kategorie muss her!]]></summary></entry><entry><title type="html">Lernen. Immer wieder und nicht aufgeben</title><link href="https://www.boone-schulz.de/2025/04/lernen-immer-wieder-und-nicht-aufgeben/" rel="alternate" type="text/html" title="Lernen. Immer wieder und nicht aufgeben" /><published>2025-04-20T21:35:00+00:00</published><updated>2025-04-20T21:35:00+00:00</updated><id>https://www.boone-schulz.de/2025/04/lernen-immer-wieder-und-nicht-aufgeben</id><content type="html" xml:base="https://www.boone-schulz.de/2025/04/lernen-immer-wieder-und-nicht-aufgeben/"><![CDATA[In der IT darf man nie aufhören zu lernen.  
Auch wenn das Thema manchmal sehr fragwürdig erscheint.

Also habe ich mich in den letzten zwei Tagen hingesetzt und habe begonnen, die Helm-Charts zu analysieren, die wir in 
den letzten Wochen für unser CoreMedia 12 Demo Deployment erstellt hatten.

Und wenn man sich tiefer mit dem Thema Helm-Charts beschäftigt, wird man feststellen, dass deren Dokumentation eine zweifelhafte Qualität besitzt.
Und wenn man dann noch die go Templates mit einbezieht, wird es sehr schnell wild, unübersichtlich und sehr anstrengend.  
Beides zusammen sind eine schlechte Kombination.

Dann werden Tests für die Helm-Charts schnell sehr wichtig.  
Neben einer eigenen Dokumentation.

## Ein aktueller Stand

Wir (meine Kollegen und ich) haben zusammen 16 Helm-Charts geschrieben.  
Sie sind alle ein bisschen „durcheinander“, aber das ist schließlich auch kein Wunder, wenn man zu dritt daran arbeitet.


Um die vielen copy'paste-Dinge zu reduzieren, habe ich in den letzten beiden Tagen begonnen, eine eigene Helm Chart Library 
zu erstellen. Gerade um wiederkehrende Dinge für alle Charts verfügbar zu machen.

Und jetzt ... jetzt steckt eine Menge Magie darin.
Jetzt genügt es, eine Zeile mit ‚include‘ in ein Chart zu schreiben und schon werden die richtigen Parameter für den Service eingefügt.
Umgebungsvariablen werden dynamisch korrekt gesetzt, die Containerprobes werden erstellt und die ServiceMonitore für das Monitoring 
erhalten die richtigen Ports und Portnamen.

Das ganze wird von vielen (sehr vielen) Tests begleitet ...

Die letzten zweieinhalb Tage hatten eine wirklich steile Lernkurve, aber ich bin ziemlich zufrieden mit den bisherigen Ergebnissen.

Und ich bin gespannt, was meine Kollegen zu dem ganzen Brocken sagen werden! :}]]></content><author><name>bodo</name></author><category term="Allgemein" /><category term="lernen" /><category term="helm-charts" /><category term="kubernetes" /><summary type="html"><![CDATA[In der IT darf man nie aufhören zu lernen. Auch wenn das Thema manchmal sehr fragwürdig erscheint.]]></summary></entry><entry><title type="html">Immer wieder die Bahn</title><link href="https://www.boone-schulz.de/2025/04/immer-wieder-die-bahn/" rel="alternate" type="text/html" title="Immer wieder die Bahn" /><published>2025-04-17T20:02:00+00:00</published><updated>2025-04-17T20:02:00+00:00</updated><id>https://www.boone-schulz.de/2025/04/immer-wieder-die-bahn</id><content type="html" xml:base="https://www.boone-schulz.de/2025/04/immer-wieder-die-bahn/"><![CDATA[Ich war diesen Monat 3x beruflich in Berlin.  
Und die Bahn hat es diese 3x nicht geschafft, pünktlich aus Spandau abzufahren.

Zug komplett gestrichen, verspätungen von ~90 Minuten, völlig überfüllte Züge.  
Das ist ein Witz, wenn man bedenkt, dass ich stellenweise einen monat im vorraus die Fahrkarten mit Sitzplatzreservierung für viel Geld organisiere.

So machen die Tage im Büro keinen Spaß.  
Falsch.  
Die machen schon Spaß, aber die Rückfahrten nach Hamburg sind um sehr vieles anstrengender.]]></content><author><name>bodo</name></author><category term="Allgemein" /><category term="rant" /><summary type="html"><![CDATA[Ich war diesen Monat 3x beruflich in Berlin. Und die Bahn hat es diese 3x nicht geschafft, pünktlich aus Spandau abzufahren.]]></summary></entry><entry><title type="html">nervende Web Crawler</title><link href="https://www.boone-schulz.de/2025/04/nervende-web-crawler/" rel="alternate" type="text/html" title="nervende Web Crawler" /><published>2025-04-11T21:31:00+00:00</published><updated>2025-04-11T21:31:00+00:00</updated><id>https://www.boone-schulz.de/2025/04/nervende-web-crawler</id><content type="html" xml:base="https://www.boone-schulz.de/2025/04/nervende-web-crawler/"><![CDATA[Ich vernachlässige seit Monaten meine eigenen Services.  
Das liegt durchaus auch daran, dass ich weniger Zeit finde mich mit denen mal wieder sinnvoll zu befassen.  
Funktionierende Beziehungen sind sehr ausfüllend.

Vor einigen Tagen habe ich bei meinem selbst gehosteten git Server eine ziemlich dumme Lücke geschlossen.  
Ich hatte einfach das selbst registrieren aktiviert gelassen. (Dafür könnte ich mir durchaus auch mal selber eine runterhauen.)
Nach dem ich die 2 Dutzend User aus der Datenbank gelöscht hatte, warf ich einen Blick in die Logs und da fielen mir 2 Dinge sehr unangenehm auf:

1. Da versuchte noch immer jemand sich zu registrieren, bzw. ein Bullshit User aufzurufen
2. Wiederkehrende Zugriffe auf Repositories. Sehr langsam, aber immer von einen bestimmten IP Kreis.

Da ich die Registrierung am Service bereits abgeschaltet hatte, wollte ich die Zugriffe möglichst früh blockieren.  
Daher erstellte ich mir einen `fail2ban` Filter, der mir die Arbeit reduzierte.

## Woher kommt der Dreck?

Bei den ständig wiederkehrenden Zugriffen wollte ich ersteinmal wissen, woher die IPs kamen.  
Eine große Anzahl der verdächtige IPs kamen aus diesem Bereich: `57.141.0.0/24`.  
[IPinfo](https://ipinfo.io/57.141.0.0) sagt mir, dass der gesamte Block zu Faceb**k gehört. 
Was suchen die auf meinem git Server!?  
Das war mir schon sehr suspekt.  
Daneben gab es auch nocht ein paar sehr seltsame User-Agents:

- paoalto
- censys
- MJ12bot

Alles Zugriffe, die ich nicht haben wollte!

## Kanone rausgeholt - Geo-Blocking freigeschaltet

In einem meiner letzten großen Projekte haben wir uns einmal mit Geo Blocking beschäftigen müssen.  
Das Wissen kam mir jetzt zu gute und ich versuchte das mit der heißen Nadel in meinen Webserver zu integrieren.  
Ersteinmal um zu sehen, woher die Zugriffe jetzt grob kamen.

Nachdem ich den manuellen Part fertig hatte, wollte ich das wenigsten so sauber bekommen, dass ich das auch mit Updates versorgen kann. 
Und natürlich automatisiert, damit ich das nicht immer wieder manuell hin zimmern muss.  
Herausgekommen ist (mal wieder) eine Ansible Rolle: [ansible-geoip](https://github.com/bodsch/ansible-geoip).
In dem Zuge habe ich auch meine [nginx](https://github.com/bodsch/ansible-nginx) Rolle aktualisiert, damit ich den geoip Part dort sauber
integrieren kann.

Und schon bekam ich Informationen, woher all die suspekten Zugriffe kamen.  
Und genau so schnell waren auch Blocker auf Basis dieser Informationen eingerichtet.  
Momentan blockiere ich mit einem Filter auf `geoip_country_code` ... bin aber wirklich kurz davor das auf `geoip_city_continent_code` auszudehnen.

(Entsprechende Beispielkonfigurationen findet man in den `molecule` Tests der Ansible Rollen.)

Ja, man könnte geo-blocking als "Wir ballern mit einer große Kanone auf Spatzen" bezeichnen ... aber wenn Bots anfangen die `robots.txt` 
auszulesen um anschließend - von der gleichen IP aus - den Content meiner Seiten abzuziehen, obwohl ich ein disallow hinterlegt habe, 
genehmige ich mir auch diese Kanone.

## Fazit

Der Traffic ist seit der Aktion um 95% reduziert worden.  
Ziet, das auch auch die anderen Server auszurollen!

Spart irgendwie auch Strom ...]]></content><author><name>bodo</name></author><category term="Computer" /><category term="linux" /><category term="self-hosting" /><summary type="html"><![CDATA[Ich vernachlässige seit Monaten meine eigenen Services. Das liegt durchaus auch daran, dass ich weniger Zeit finde mich mit denen mal wieder sinnvoll zu befassen. Funktionierende Beziehungen sind sehr ausfüllend.]]></summary></entry><entry><title type="html">Die CoreMedia Usergroup zu Gast bei Bitgrip</title><link href="https://www.boone-schulz.de/2025/04/die-coremedia-usergroup-zu-gast/" rel="alternate" type="text/html" title="Die CoreMedia Usergroup zu Gast bei Bitgrip" /><published>2025-04-08T17:30:00+00:00</published><updated>2025-04-08T17:30:00+00:00</updated><id>https://www.boone-schulz.de/2025/04/die-coremedia-usergroup-zu-gast</id><content type="html" xml:base="https://www.boone-schulz.de/2025/04/die-coremedia-usergroup-zu-gast/"><![CDATA[Heute ist die [CoreMedia Usergroup](https://coremedia-usergroup.com/) zu Gast bei Bitgrip.

Und aus diesem wunderbaren Grund, werde ich heute einmal unser Kubernetes Deployment für CoreMedia 12 vorführen.

Wir hatten uns in den letzten Tagen daran gemacht unsere alten Helm Charts in Richtung Alteisen zu schieben und haben begonnen alles neu zu machen.

Das alles einmal zeigen zu dürfen, mit einer Live-Demo, macht mich schon stolz.]]></content><author><name>bodo</name></author><category term="Computer" /><category term="job" /><category term="bitgrip" /><summary type="html"><![CDATA[Heute ist die CoreMedia Usergroup zu Gast bei Bitgrip.]]></summary></entry><entry><title type="html">Jetzt auch noch das</title><link href="https://www.boone-schulz.de/2025/04/jetzt-auch-noch-das/" rel="alternate" type="text/html" title="Jetzt auch noch das" /><published>2025-04-04T12:33:00+00:00</published><updated>2025-04-20T18:39:54+00:00</updated><id>https://www.boone-schulz.de/2025/04/jetzt-auch-noch-das</id><content type="html" xml:base="https://www.boone-schulz.de/2025/04/jetzt-auch-noch-das/"><![CDATA[Ich habe heute einen Anruf von Timmo bekommen.  
Überraschend.

Und er fragte mich, ob ich nicht auch die Bitgrip Plattform als Verantwortlicher vorantreiben möchte.

Nun ja ... ich treibe sie ja durchaus jetzt schon. ;)  
Aber jetzt noch mal im offiziellen Auftrag - als Product Owner / Manager! Also verdammt nochmal, JA!

Ich freue mich darauf.

Unsere Plattform ist ja jetzt schon ziemlich gut und die wird zum Ende des Jahres noch ein paar extra Sahnehäubchen bekommen.]]></content><author><name>bodo</name></author><category term="Computer" /><category term="job" /><category term="bitgrip" /><summary type="html"><![CDATA[Ich habe heute einen Anruf von Timmo bekommen. Überraschend.]]></summary></entry><entry><title type="html">Das Polykül fährt nach Dänemark</title><link href="https://www.boone-schulz.de/2024/12/das-polykuel-faehrt-nach-daenemark/" rel="alternate" type="text/html" title="Das Polykül fährt nach Dänemark" /><published>2024-12-14T19:00:00+00:00</published><updated>2024-12-14T19:00:00+00:00</updated><id>https://www.boone-schulz.de/2024/12/das-polykuel-faehrt-nach-daenemark</id><content type="html" xml:base="https://www.boone-schulz.de/2024/12/das-polykuel-faehrt-nach-daenemark/"><![CDATA[Das Jahr 2024 werden wir nicht ein Deutschland beenden.  
Wir fahren alle zusammen und über den Jahreswechsel nach Dänemark und gönnen uns ein paar Tage Ruhe ... vielleicht.

Auf jeden Fall gönnen wir uns einmal etwas anderes.  

2024 hat uns allen sehr viel neues gebracht oder gezeigt.  
Wir haben feststellen können, das wir alle nicht ganz neurotypisch sind und jeder von uns seinen besonderen Teil in sich trägt.

Angefangen von autistischen Zügen, bis hin zu ausgeprägten ADHS ... oder aber die Kombination von beiden.

Wir haben in den letzten 1,5 Jahren viel gelernt. Viel über uns, viel über andere.  
Und um uns allen einmal etwas gutes zu tun planen wir den ersten gemeinsamen Urlaub.

Es wird spannend .. 4 halbwegs erwachsene Menschen und 5 Abkömmlinge.  
Wie die 5 sich verstehen werden? So zwischendurch klappt das ja schon, aber weit weg von zu Hause? Wir werden sehen ...]]></content><author><name>bodo</name></author><category term="Allgemein" /><category term="privat" /><summary type="html"><![CDATA[Das Jahr 2024 werden wir nicht ein Deutschland beenden. Wir fahren alle zusammen und über den Jahreswechsel nach Dänemark und gönnen uns ein paar Tage Ruhe … vielleicht.]]></summary></entry><entry><title type="html">Auf ins Funkhaus - WELLE:ERDBALL - Das Experiment</title><link href="https://www.boone-schulz.de/2025/03/auf-ins-funkaus/" rel="alternate" type="text/html" title="Auf ins Funkhaus - WELLE:ERDBALL - Das Experiment" /><published>2024-12-14T19:00:00+00:00</published><updated>2024-12-14T19:00:00+00:00</updated><id>https://www.boone-schulz.de/2025/03/auf-ins-funkhaus</id><content type="html" xml:base="https://www.boone-schulz.de/2025/03/auf-ins-funkaus/"><![CDATA[Ich fand [Welle:Erdball](https://www.welle-erdball.info/) eigentlich schon immer nicht so schlecht. 
Und nach dem ich sie einmal (2023?) in Hannover live erlebt habe, mag ich sie doch eigentlich noch etwas mehr.

Und 2024 hatte ich gesehen, dass sie nach Hamburg kommen und in der Markthalle spielen werden.

Heute Abend ist es soweit, die Karte liegt bereit ... und ich bin es auch.

Auf zu **WELLE:ERDBALL - Das Experiment – Tour 2025**!]]></content><author><name>bodo</name></author><category term="Allgemein" /><category term="privat" /><summary type="html"><![CDATA[Ich fand Welle:Erdball eigentlich schon immer nicht so schlecht. Und nach dem ich sie einmal (2023?) in Hannover live erlebt habe, mag ich sie doch eigentlich noch etwas mehr.]]></summary></entry><entry><title type="html">Alles schmerzt</title><link href="https://www.boone-schulz.de/2024/10/alles-schmerzt/" rel="alternate" type="text/html" title="Alles schmerzt" /><published>2024-10-06T19:00:00+00:00</published><updated>2025-04-20T18:39:54+00:00</updated><id>https://www.boone-schulz.de/2024/10/alles-schmerzt</id><content type="html" xml:base="https://www.boone-schulz.de/2024/10/alles-schmerzt/"><![CDATA[Dieses "auf dem Pferd sitzen" hatte ich bedeutend leichter im Hinterkopf!

Oder ich werde zu alt für den Scheiß.

Aber wir hatten tolles Wetter & es war einfach eine schöne Zeit!

Ich kann den Hof ([WHAW](http://www.whaw.de)) übrigens sehr empfehlen!  
Denise ist wirklich sehr sympatisch.]]></content><author><name>bodo</name></author><category term="Allgemein" /><category term="privat" /><summary type="html"><![CDATA[Dieses “auf dem Pferd sitzen” hatte ich bedeutend leichter im Hinterkopf!]]></summary></entry></feed>