<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Bitblüten</title><link>https://mortzu.de/posts/</link><description>Recent content in Posts on Bitblüten</description><generator>Hugo -- gohugo.io</generator><language>de-DE</language><lastBuildDate>Fri, 19 Jun 2026 12:23:00 +0200</lastBuildDate><atom:link href="https://mortzu.de/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Servermonitoring mit Home Assistant</title><link>https://mortzu.de/posts/2026-06-19-nag4ha/</link><pubDate>Fri, 19 Jun 2026 12:23:00 +0200</pubDate><guid>https://mortzu.de/posts/2026-06-19-nag4ha/</guid><description>&lt;p>Vor und nach der Geburt unserer Tochter bin ich dem Gedanken verfallen, dass ich meine Infrastruktur vereinfachen und reduzieren muss.
In dem Zuge habe ich meine bis dahin laufende &lt;a href="https://de.wikipedia.org/wiki/Nagios" target="_blank">Nagios&lt;/a>-Instanz abgeschafft und durch eine
selbstgeschriebene PHP-Anwendung für die Darstellung ersetzt. Auf den Servern lief vorher schon ein Python-Script was die
Nagioschecks ausgeführt hat und die Ergebnisse an das Nagios geschickt hat.&lt;/p>
&lt;p>Dieses &lt;a href="https://codeberg.org/mortzu/corewatcher" target="_blank">Python-Script&lt;/a> habe ich angepasst, so dass es diese nun an die PHP-Anwendung geschickt hat.
In die PHP-Anwendung habe ich eine relativ simple Logik eingebaut, wann ich per XMPP informiert werden will, wenn ein Host offline geht
(also keine Daten mehr sendet) oder ein Service unzufrieden ist. Das senden der Nachricht habe ich mit &lt;a href="https://pkg.go.dev/salsa.debian.org/mdosch/go-sendxmpp" target="_blank">go-sendxmpp&lt;/a>
realisiert.&lt;/p>
&lt;p>Dann stand die Geburt unseres Sohnes an und ich hab mir wieder Gedanken darüber gemacht, ob ich wohl zukünftig noch Zeit
und Energie haben werde Infrastruktur zu betreuen. Also habe ich mir wieder Gedanken gemacht was ich an Anwendungen
abschaffen kann.&lt;/p>
&lt;p>Inzwischen läuft bei uns ohnehin ein &lt;a href="https://www.home-assistant.io/" target="_blank">Home Assistant&lt;/a> und ich stellte mir die Frage,
ob man damit nicht eigentlich sinnvoll Servermonitoring machen kann.&lt;/p>
&lt;p>Mein Gedanke war, dass Home Assistant ja Sensoren kennt und für die Werte dieser auch Graphen zeichnen kann.&lt;/p>
&lt;p>Also habe ich das Python-Script angepasst/neugeschrieben und daraus ist &lt;a href="https://codeberg.org/mortzu/nag2ha" target="_blank">nag2ha&lt;/a> entstanden.
nag2ha führt, genau wie das alte Python-Script, die konfigurierten Nagios-Plugins lokal aus und schickt deren Exit-Codes und Ausgaben
über die API an das Home Assistant, wobei für jeden Check ein eigener Sensor entsteht.&lt;/p>
&lt;p>Vorhandene Perfdata wird ebenfalls ausgewertet und als eigene Sensoren angelegt, wodurch Metriken als Graphen dargestellt werden können.&lt;/p>
&lt;p>Zusammen mit dem Skript liegt im &lt;a href="https://codeberg.org/mortzu/nag2ha" target="_blank">Repository&lt;/a> die dazugehörige Dashboard-Karte (&lt;code>nag2ha-card.js&lt;/code>), die sich optisch
an die Darstellung in Nagios anlehnt.&lt;/p>
&lt;p>Die XMPP-Benachrichtigungen habe ich mithilfe von Automations und der bereits existierenden &lt;a href="https://www.home-assistant.io/integrations/xmpp/" target="_blank">XMPP-Integration&lt;/a>
von Home Assistant umgesetzt.&lt;/p>
&lt;p>Die Alarm-Automation für Services reagiert im unten stehenden Beispiel bei CRITICAL, WARNING oder UNKNOWN,
schickt aber erst eine Nachricht, bis der im lokalen State-File hochgezählte &lt;code>failure_count&lt;/code> drei erreicht hat (Also der jeweilige Check drei mal nicht OK
zurück gegeben hat):&lt;/p>
&lt;pre tabindex="0">&lt;code>alias: &amp;#34;nag2ha: Service alert&amp;#34;
description: &amp;#34;Sends an XMPP notification when a service enters an alert state&amp;#34;
triggers:
- event_type: state_changed
trigger: event
conditions:
- condition: template
value_template: &amp;#34;{{ trigger.event.data.new_state is not none }}&amp;#34;
- condition: template
value_template: &amp;gt;-
{{ trigger.event.data.entity_id.startswith(&amp;#39;sensor.nag2ha_&amp;#39;) and
trigger.event.data.new_state.attributes.check is defined and
trigger.event.data.new_state.attributes.metric is not defined }}
- condition: template
value_template: &amp;#34;{{ trigger.event.data.new_state.state in [&amp;#39;CRITICAL&amp;#39;, &amp;#39;WARNING&amp;#39;, &amp;#39;UNKNOWN&amp;#39;] }}&amp;#34;
- condition: template
value_template: &amp;#34;{{ trigger.event.data.new_state.attributes.failure_count == 3 }}&amp;#34;
actions:
- action: notify.xmpp_notify
data:
target: jabberid@example.com
message: &amp;gt;-
[{{ trigger.event.data.new_state.state }}] {% if trigger.event.data.new_state.attributes.fqdn %}{{ trigger.event.data.new_state.attributes.fqdn }}{% else %}{{ trigger.event.data.new_state.attributes.host }}{% endif %} / {{ trigger.event.data.new_state.attributes.check }}
{{ trigger.event.data.new_state.attributes.output }}
mode: queued
&lt;/code>&lt;/pre>&lt;p>Die Recovery-Meldung wird gesendet, sobald das Attribut &lt;code>recovered == true&lt;/code> liefert und der Status wieder auf OK wechselt.&lt;/p>
&lt;pre tabindex="0">&lt;code>alias: &amp;#34;nag2ha: Service recovery&amp;#34;
description: &amp;#34;Sends an XMPP notification when a service recoveries back to OK&amp;#34;
triggers:
- event_type: state_changed
trigger: event
conditions:
- condition: template
value_template: &amp;#34;{{ trigger.event.data.new_state is not none }}&amp;#34;
- condition: template
value_template: &amp;#34;{{ trigger.event.data.new_state.state == &amp;#39;OK&amp;#39; }}&amp;#34;
- condition: template
value_template: &amp;gt;-
{{ trigger.event.data.entity_id.startswith(&amp;#39;sensor.nag2ha_&amp;#39;) and
trigger.event.data.new_state.attributes.check is defined and
trigger.event.data.new_state.attributes.recovered == true }}
actions:
- action: notify.xmpp_notify
data:
target: jabberid@example.com
message: &amp;gt;-
[RECOVERY] {% if trigger.event.data.new_state.attributes.fqdn %}{{ trigger.event.data.new_state.attributes.fqdn }}{% else %}{{ trigger.event.data.new_state.attributes.host }}{% endif %} / {{ trigger.event.data.new_state.attributes.check }}
{{ trigger.event.data.new_state.attributes.output }}
mode: queued
&lt;/code>&lt;/pre>&lt;p>Während die Services ihren Zustand senden (wenn der Host online ist), wird ein Host, wenn er offline ist,
nicht mitteilen können, dass er offline ist.&lt;/p>
&lt;p>Ich will aber nicht jedes Mal, wenn ein Host sein &lt;code>last_seen&lt;/code> updated, eine Nachricht bekommen, dass er online ist
und genauso will ich nur einmal eine Nachricht bekommen, wenn ein Host offline ist.&lt;/p>
&lt;p>Deswegen läuft die zuständige Automation einmal die Minute und guckt, ob das &lt;code>last_seen&lt;/code> eines Servers älter als 5 Minuten (300 Sekunden) ist.
Dann schickt die Automation eine DOWN-Meldung und trägt den Server in einen Helper ein. Beim nächsten Mal guckt die Automation, ob der Server
schon im Helper steht und da er das tut, wird keine weitere DOWN-Meldung geschickt.&lt;/p>
&lt;p>Bei der Meldung, dass ein Server wieder erreichbar ist, guckt die Automation, ob der Server im Helper steht, schickt dann
eine UP-Meldung und entfernt den Server aus dem Helper.&lt;/p>
&lt;p>Den Helper legen wir in den Einstellungen vom Home Assistant so an:&lt;/p>
&lt;ul>
&lt;li>Pfad: Einstellungen -&amp;gt; Geräte &amp;amp; Dienste -&amp;gt; Helfer -&amp;gt; Helfer erstellen -&amp;gt; Text (input_text)&lt;/li>
&lt;li>Name: &lt;code>nag2ha_alert_status&lt;/code>&lt;/li>
&lt;li>Maximale Länge: 255&lt;/li>
&lt;/ul>
&lt;pre tabindex="0">&lt;code>alias: &amp;#34;nag2ha: Host status&amp;#34;
description: &amp;gt;-
Checks host heartbeats every minute. Alerts once per host on failure and
recovery.
triggers:
- trigger: time_pattern
minutes: /1
conditions: []
actions:
- repeat:
for_each: &amp;gt;
{# Find all hosts that are overdue (&amp;gt;300s) AND not yet marked as down in
our helper #} {% set alert_list =
states(&amp;#39;input_text.nag2ha_alert_status&amp;#39;).split(&amp;#39;,&amp;#39;) | map(&amp;#39;trim&amp;#39;) | list
%} {% set now_ts = as_timestamp(now()) | int %} {% set hosts =
states.sensor
| selectattr(&amp;#39;entity_id&amp;#39;, &amp;#39;match&amp;#39;, &amp;#39;^sensor\.nag2ha_[^_]+$&amp;#39;)
| selectattr(&amp;#39;attributes.last_seen&amp;#39;, &amp;#39;defined&amp;#39;) | list %}
{% set ns = namespace(overdue=[]) %} {% for h in hosts %}
{% if now_ts - (h.attributes.last_seen | int) &amp;gt; 300 %}
{% set ns.overdue = ns.overdue + [h.entity_id] %}
{% endif %}
{% endfor %} {{ ns.overdue | reject(&amp;#39;in&amp;#39;, alert_list) | list }}
sequence:
- action: notify.xmpp_notify
data:
target: jabberid@example.com
message: &amp;gt;-
[DOWN] {{ state_attr(repeat.item, &amp;#39;fqdn&amp;#39;) or
state_attr(repeat.item, &amp;#39;host&amp;#39;) }}
- action: input_text.set_value
target:
entity_id: input_text.nag2ha_alert_status
data:
value: &amp;gt;
{% set current = states(&amp;#39;input_text.nag2ha_alert_status&amp;#39;) %} {{
(current + &amp;#39;,&amp;#39; + repeat.item) if current != &amp;#39;unknown&amp;#39; and current
!= &amp;#39;&amp;#39; else repeat.item }}
- repeat:
for_each: &amp;gt;
{# Find all hosts that are online again (&amp;lt;300s) BUT are still marked as
down in our helper #} {% set alert_list =
states(&amp;#39;input_text.nag2ha_alert_status&amp;#39;).split(&amp;#39;,&amp;#39;) | map(&amp;#39;trim&amp;#39;) | list
%} {% set now_ts = as_timestamp(now()) | int %} {% set hosts =
states.sensor
| selectattr(&amp;#39;entity_id&amp;#39;, &amp;#39;match&amp;#39;, &amp;#39;^sensor\.nag2ha_[^_]+$&amp;#39;)
| selectattr(&amp;#39;attributes.last_seen&amp;#39;, &amp;#39;defined&amp;#39;) | list %}
{% set ns = namespace(online=[]) %} {% for h in hosts %}
{% if now_ts - (h.attributes.last_seen | int) &amp;lt;= 300 %}
{% set ns.online = ns.online + [h.entity_id] %}
{% endif %}
{% endfor %} {{ ns.online | select(&amp;#39;in&amp;#39;, alert_list) | list }}
sequence:
- action: notify.xmpp_notify
data:
target: jabberid@example.com
message: &amp;gt;-
[UP] {{ state_attr(repeat.item, &amp;#39;fqdn&amp;#39;) or state_attr(repeat.item,
&amp;#39;host&amp;#39;) }}
- action: input_text.set_value
target:
entity_id: input_text.nag2ha_alert_status
data:
value: &amp;gt;
{% set alert_list =
states(&amp;#39;input_text.nag2ha_alert_status&amp;#39;).split(&amp;#39;,&amp;#39;) | map(&amp;#39;trim&amp;#39;)
| list %} {{ alert_list | reject(&amp;#39;eq&amp;#39;, repeat.item) | join(&amp;#39;,&amp;#39;) }}
mode: single
max_exceeded: silent
&lt;/code>&lt;/pre></description></item><item><title>Using GitHub from IPv6-only hosts</title><link>https://mortzu.de/posts/2026-01-24-github-ipv6/</link><pubDate>Sat, 24 Jan 2026 13:23:00 +0200</pubDate><guid>https://mortzu.de/posts/2026-01-24-github-ipv6/</guid><description>&lt;h2 id="or-living-in-the-present-trapped-in-the-past">(or: living in the present, trapped in the past)&lt;/h2>
&lt;p>IPv6 has been around for roughly forever™, yet in the year 2026 GitHub still behaves like the internet ends at 0.0.0.0/0.
If you are running an IPv6-only host (because you enjoy modern networking) you may have noticed that GitHub is practically unreachable.
&lt;code>git clone&lt;/code> fails and HTTPS goes nowhere.&lt;/p>
&lt;p>Here are two ways to deal with this time-travel issue.&lt;/p>
&lt;h2 id="option-1-the-etchosts--proxy-hack">Option 1: The /etc/hosts + proxy hack&lt;/h2>
&lt;p>One straightforward workaround is to route GitHub traffic through an IPv6-accessible proxy that speaks IPv4 on your behalf.
&lt;a href="https://danwin1210.de/" target="_blank">Daniel Winzen&lt;/a> provides a &lt;a href="https://danwin1210.de/github-ipv6-proxy.php" target="_blank">public proxy&lt;/a> thats exposes a public proxy that exposes GitHub services over IPv6.&lt;/p>
&lt;p>Because DNS is a suggestion and &lt;code>/etc/hosts&lt;/code> is the law, we simply override GitHub&amp;rsquo;s hostnames there:&lt;/p>
&lt;pre tabindex="0">&lt;code>2a01:4f8:c010:d56::2 github.com
2a01:4f8:c010:d56::3 api.github.com
2a01:4f8:c010:d56::4 codeload.github.com
2a01:4f8:c010:d56::6 ghcr.io
2a01:4f8:c010:d56::7 pkg.github.com npm.pkg.github.com maven.pkg.github.com nuget.pkg.github.com rubygems.pkg.github.com
2a01:4f8:c010:d56::8 uploads.github.com
2606:50c0:8000::133 objects.githubusercontent.com www.objects.githubusercontent.com release-assets.githubusercontent.com gist.githubusercontent.com repository-images.githubusercontent.com camo.githubusercontent.com private-user-images.githubusercontent.com avatars0.githubusercontent.com avatars1.githubusercontent.com avatars2.githubusercontent.com avatars3.githubusercontent.com cloud.githubusercontent.com desktop.githubusercontent.com support.github.com
2606:50c0:8000::154 support-assets.githubassets.com github.githubassets.com opengraph.githubassets.com github-registry-files.githubusercontent.com github-cloud.githubusercontent.com
&lt;/code>&lt;/pre>&lt;p>After that, you can use GitHub as usual.&lt;/p>
&lt;p>If you don&amp;rsquo;t want to touch your &lt;code>/etc/hosts&lt;/code> file, you can also use the proxy explicitly.&lt;/p>
&lt;p>Via HTTPS&lt;/p>
&lt;pre tabindex="0">&lt;code>git clone https://danwin1210.de:1443/DanWin/le-chat-php.git
&lt;/code>&lt;/pre>&lt;p>or via SSH&lt;/p>
&lt;pre tabindex="0">&lt;code>git clone git@github-ipv6-proxy.danwin1210.de:DanWin/le-chat-php.git
&lt;/code>&lt;/pre>&lt;p>&lt;strong>Fair warning:&lt;/strong> By using the HTTPS approach, you are man-in-the-middle&amp;rsquo;ing yourself on purpose (SSL is broken in the middle. Do not transfer any sensitive information over this! You&amp;rsquo;ve been warned!).&lt;/p>
&lt;h2 id="option-2-nat64--dns64">Option 2: NAT64 / DNS64&lt;/h2>
&lt;p>In short: your IPv6-only machine asks for a AAAA record, the DNS64 server makes one up based on the IPv4 address,
and NAT64 magically translates your IPv6 packets into IPv4 on the fly.&lt;/p>
&lt;p>It&amp;rsquo;s like sending a letter in Elvish and having a goblin deliver it in Klingon. Somehow, the message still arrives, but only if the magical translator
is awake and caffeinated. Not every network has this wizardry, but when it works, you can access
IPv4-only services without messing &lt;code>/etc/hosts&lt;/code>.&lt;/p>
&lt;p>If your network does not support NAT64/DNS64 (and you don&amp;rsquo;t feel like doing it yourself), you can use a public service like &lt;a href="https://nat64.net/" target="_blank">nat64.net&lt;/a>.&lt;/p>
&lt;p>The easy way is to throw their listed nameservers straight into your &lt;code>/etc/resolv.conf&lt;/code>.
However, this means all your DNS queries will now pass through their servers.&lt;/p>
&lt;p>If that is a dealbreaker, grab the first DNS server from their website (at the time of writing, it&amp;rsquo;s &lt;code>2a01:4f8:c2c:123f::1&lt;/code>)
and we&amp;rsquo;ll use the magic of &lt;code>/etc/hosts&lt;/code> again. We can query the fake AAAA entry for GitHub directly from their server and
append it to our configuration with a quick one-liner:&lt;/p>
&lt;pre tabindex="0">&lt;code>dig +short github.com AAAA @2a01:4f8:c2c:123f::1 | sed -e &amp;#39;s/$/ github.com/g&amp;#39; &amp;gt;&amp;gt; /etc/hosts
&lt;/code>&lt;/pre>&lt;p>Once that&amp;rsquo;s done, &lt;code>github.com&lt;/code> should be usable as normal.&lt;/p></description></item><item><title>Eine VM auf Uberspace betreiben</title><link>https://mortzu.de/posts/2025-10-07-uberspace-vm/</link><pubDate>Tue, 07 Oct 2025 13:23:00 +0200</pubDate><guid>https://mortzu.de/posts/2025-10-07-uberspace-vm/</guid><description>&lt;p>Zu Urzeiten, als es weder &lt;a href="https://de.wikipedia.org/wiki/Xen" target="_blank">Xen&lt;/a> noch &lt;a href="https://de.wikipedia.org/wiki/Kernel-based_Virtual_Machine" target="_blank">KVM&lt;/a> gab, hab ich
nach einem kurzen Intermezzo zu &lt;a href="https://de.wikipedia.org/wiki/Linux-VServer" target="_blank">Linux-VServer&lt;/a> &lt;a href="https://de.wikipedia.org/wiki/User_Mode_Linux" target="_blank">User Mode Linux&lt;/a> genutzt,
um virtuelle Server zu betreiben. Der Kernel wird hierbei als normaler Userspace-Prozess gestartet.&lt;/p>
&lt;p>Ich habe mir die Frage gestellt, ob ich so eine VM auf einem &lt;a href="https://uberspace.de/" target="_blank">Uberspace&lt;/a> betreiben kann. Spoiler: Ja.&lt;/p>
&lt;p>Die Kernelkonfiguration (.config) habe ich aus dem &lt;a href="http://deb.debian.org/debian/pool/main/u/user-mode-linux/user-mode-linux_6.12um1.tar.xz" target="_blank">debian-Paket&lt;/a> (config.amd64) genommen.&lt;/p>
&lt;p>Der Versuch den Kernel auf meinem Uberspace zu kompilieren ist wegen des betagten CentOS mit irgendwelchen obskuren Fehlern abgebrochen - nach
der dritten Datei, die ich anpassen musste, hatte ich keine Lust mehr. Also Plan B: Den Kernel auf meinem Rechner als statisches Programm kompilieren.&lt;/p>
&lt;p>Nur &lt;code>CONFIG_STATIC_LINK=y&lt;/code> zu setzen, reichte bei mir nicht. Ich musste in der &lt;code>arch/um/Kconfig&lt;/code> zwei Zeilen unter &lt;code>config STATIC_LINK&lt;/code> noch eine Zeile auskommentieren:&lt;/p>
&lt;pre tabindex="0">&lt;code># depends on CC_CAN_LINK_STATIC_NO_RUNTIME_DEPS || !MAY_HAVE_RUNTIME_DEPS
&lt;/code>&lt;/pre>&lt;p>Danach ein beherztes &lt;code>make ARCH=um&lt;/code> und nach ein bisschen Wartezeit hatte ich ein statisches &lt;code>linux&lt;/code>-Binary.&lt;/p>
&lt;p>Das Dateisystem bei User Mode Linux ist ein einfache Imagedatei. Da ich bei Uberspace kein root habe, musste ich das Image auf meinem Rechner vorbereiten:&lt;/p>
&lt;pre tabindex="0">&lt;code>dd if=/dev/zero of=debian.img bs=1M count=$((1024*5))
mkfs.ext4 debian.img
mount -o loop debian.img /mnt
debootstrap trixie /mnt
&lt;/code>&lt;/pre>&lt;p>Die erste Zeile erstellt eine Imagedatei, die 5 GB groß ist, die zweite erstellt ein ext4-System darin, die dritte mountet dieses nach &lt;code>/mnt&lt;/code> und die letzte Zeile
installiert ein Debian trixie darin.&lt;/p>
&lt;p>Danach bin ich per &lt;code>chroot /mnt /bin/bash&lt;/code> in das neue System gewechselt.
Es müssen alle Standard-Terminals deaktiviert (und maskiert) werden und stattdessen eins auf &lt;code>tty0&lt;/code> gestartet werden:&lt;/p>
&lt;pre tabindex="0">&lt;code>rm /etc/systemd/system/getty.target.wants/getty@*
for i in $(seq 2 6); do ln -sf /dev/null /etc/systemd/system/getty@tty$i.service; done
ln -sf /dev/null /etc/systemd/system/getty-static.service
ln -s /usr/lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@tty0.service
&lt;/code>&lt;/pre>&lt;p>Außerdem per &lt;code>passwd&lt;/code> ein root-Passwort setzen und die Netzwerkkonfiguration vorbereiten:&lt;/p>
&lt;pre tabindex="0">&lt;code>cat &amp;gt;&amp;gt; /etc/network/interfaces &amp;lt;&amp;lt;EOF
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 10.0.2.15/24
post-up ip route add default dev \$IFACE
EOF
&lt;/code>&lt;/pre>&lt;p>Zum Schluss die Chroot-Umgebung mit &lt;code>exit&lt;/code> verlassen, das Image mit &lt;code>umount /mnt&lt;/code> aushängen und per SCP auf meinen Uberspace kopieren.&lt;/p>
&lt;p>Früher habe ich die Netzwerkanbindung für UML immer mit &lt;a href="https://de.wikipedia.org/wiki/TUN/TAP" target="_blank">TAP&lt;/a>-Devices gelöst.
Das braucht aber root-Rechte - und die gibt&amp;rsquo;s bei Uberspace nicht. In der &lt;a href="https://user-mode-linux.sourceforge.net/old/networking.html" target="_blank">Netzwerkdoku&lt;/a>
von User Mode Linux stolperte ich dann aber über folgenden Satz:&lt;/p>
&lt;blockquote>
&lt;p>slirp - if you don&amp;rsquo;t have root access on the host to setup networking, or if you don&amp;rsquo;t want to allocate an IP to your UML&lt;/p>&lt;/blockquote>
&lt;p>Klingt genau nach dem, was ich gesucht habe. Also flugs die Quellen vom Debian-Mirror runterladen (zum Kompilieren brauchts sowieso die Patches
aus dem Debian-Paket):&lt;/p>
&lt;pre tabindex="0">&lt;code>mkdir ~/slirp
cd ~/slirp
wget http://deb.debian.org/debian/pool/main/s/slirp/slirp_1.0.17.orig.tar.gz
wget http://deb.debian.org/debian/pool/main/s/slirp/slirp_1.0.17-11.debian.tar.xz
tar xf slirp_1.0.17.orig.tar.gz
tar xf slirp_1.0.17-11.debian.tar.xz
cd slirp-1.0.17/
for i in ../debian/patches/*.patch; do patch -p1 -i &amp;#34;$i&amp;#34;; done
cd src/
./configure
make CFLAGS=&amp;#34;-I. -DUSE_PPP -DUSE_MS_DNS -fno-strict-aliasing -Wno-unused -std=gnu89 -DFULL_BOLT&amp;#34;
&lt;/code>&lt;/pre>&lt;p>Weil ich das User Mode Linux später per SSH erreichen wollte, musste ich einen Port in der Uberspace Firewall öffnen:&lt;/p>
&lt;pre tabindex="0">&lt;code>uberspace port add
&lt;/code>&lt;/pre>&lt;p>Damit das Portforwarding für SSH funktioniert, brauchte es zum Starten von Slirp ein Wrapperscript:&lt;/p>
&lt;pre tabindex="0">&lt;code>#! /usr/bin/env bash
exec /home/USERNAME/slirp/slirp-1.0.17/src/slirp &amp;#34;redir PORT 22&amp;#34; &amp;#34;host address 10.0.2.2&amp;#34;
&lt;/code>&lt;/pre>&lt;p>(&lt;code>USERNAME&lt;/code> und &lt;code>PORT&lt;/code> müsst ihr natürlich passend ersetzen)&lt;/p>
&lt;p>Jetzt konnte ich das erste Mal das UML starten:&lt;/p>
&lt;pre tabindex="0">&lt;code>/home/USERNAME/linux ubd0=/home/USERNAME/debian.img root=/dev/ubda rw mem=256M eth0=slirp,,/home/USERNAME/slirp.sh reboot=force
&lt;/code>&lt;/pre>&lt;p>Das &lt;code>mem=256M&lt;/code> sagt hierbei, dass das User Mode Linux maximal 256MB RAM nutzen darf, was okay sein sollte, da im &lt;a href="https://manual.uberspace.de/basics-resources/#ram" target="_blank">Uberspace Manual&lt;/a>
steht, dass ein Asteroid maximal 1.5 GB nutzen darf.&lt;/p>
&lt;p>Nachdem das UML sauber hochgebootet war, konnte ich mich mit meinem root-Passwort einloggen und einen OpenSSH-Server nachinstallieren:&lt;/p>
&lt;pre tabindex="0">&lt;code>apt-get --no-install-recommends install openssh-server
&lt;/code>&lt;/pre>&lt;p>Noch fix meinen SSH Public Key nach &lt;code>/root/.ssh/authorized_keys&lt;/code> geschoben und der Login von außen klappt:&lt;/p>
&lt;pre tabindex="0">&lt;code>ssh -pPORT USERSPACE-HOST
&lt;/code>&lt;/pre>&lt;p>Fazit: Man kann das machen, es ist aber nicht besonders schnell. Ich sehe das ganze nur als &lt;a href="https://de.wikipedia.org/wiki/Proof_of_Concept" target="_blank">PoC&lt;/a> und werde das
nicht produktiv betreiben.&lt;/p></description></item><item><title>Wo kommt denn der zweite gpg-agent her?</title><link>https://mortzu.de/posts/2025-08-25-gpg-agent-yubikey/</link><pubDate>Mon, 25 Aug 2025 13:23:00 +0200</pubDate><guid>https://mortzu.de/posts/2025-08-25-gpg-agent-yubikey/</guid><description>&lt;p>&lt;img src="https://mortzu.de/assets/images/gpg-agent-yubikey.jpg#floatleft" alt="">&lt;/p>
&lt;p>Ich hab vor einiger Zeit von &lt;a href="https://archlinux.org/" target="_blank">ArchLinux&lt;/a> auf &lt;a href="https://www.debian.org/" target="_blank">debian&lt;/a> gewechselt. Danach fiel mir auf, dass wenn ich &lt;a href="https://www.passwordstore.org/" target="_blank">pass&lt;/a> nutze und danach
&lt;a href="https://www.openssh.com/" target="_blank">SSH&lt;/a>, ich zweimal die PIN für den Yubikey eingeben muss.
Außerdem hat manchmal pass nicht funktioniert, wenn ich es nach SSH aufgerufen hab (da wurde dann die &amp;ldquo;GPG-Smartcard&amp;rdquo; (der Yubikey) gar nicht gefunden). Da war dann die Lösung den Yubikey einmal
neu zu stecken und danach pass vor SSH aufzurufen.&lt;/p>
&lt;p>Auffällig war, dass nach dem pass-Aufruf immer ein zweiter gpg-agent lief. Ich hab mir eine zeitlang damit beholfen in die &lt;code>~/.gnupg/scdaemon.conf&lt;/code> &lt;code>pcsc-shared&lt;/code> zu schreiben -
damit ist der Yubikey nicht exklusiv von einem der beiden gpg-agents blockiert, aber nach dem Update auf trixie ist noch irgendwas anderes schief (dazu in einem anderen Blogpost mehr),
so dass ich bei jedem Zugriff auf den Yubikey die PIN eingeben muss. Also musste ich mal das eigentliche Problem lösen.&lt;/p>
&lt;p>Also mal Yubikey angesteckt, eine SSH-Verbindung aufgebaut und danach pass aufgerufen. Es wird ein zweiter gpg-agent gestartet und der pass-Aufruf funktioniert nicht. Soweit kennen wir das ja schon.
Das googlen nach den Parametern, mit denen der gpg-agent gestartet wird (&lt;code>--use-standard-socket --daemon&lt;/code>) hat mich dann zumindest drauf gebracht, dass er wohl mittels &lt;code>gpgconf --launch gpg-agent&lt;/code> gestartet wird,
hat sonst aber wenig Erkenntnisse gebracht.&lt;/p>
&lt;p>Dann also mal strace auf den pass-Aufruf geschmissen und das große Wundern geht los: Wieso wird der gpg-agent-socket in &lt;code>/run/user/1000/gnupg/d.4wrkznjfxmhuw5861gsoydhj/S.gpg-agent&lt;/code> gesucht, wenn doch
die systemd-User-Unit &lt;code>%t/gnupg/S.gpg-agent&lt;/code> als Pfad vorgibt (was &lt;code>/run/user/1000/gnupg/S.gpg-agent&lt;/code> ist).&lt;/p>
&lt;p>Nach einigem Googlen nach der Frage wie man den Ort des Sockets anpassen kann, bin ich auf &lt;a href="https://gnupg-users.gnupg.narkive.com/1JY1lXWm/change-agent-socket-path" target="_blank">https://gnupg-users.gnupg.narkive.com/1JY1lXWm/change-agent-socket-path&lt;/a>
gestoßen wo ich folgenden Absatz fand:&lt;/p>
&lt;blockquote>
&lt;p>If you use a GNUPGHOME different from ~/.gnupg gpg will not connect&lt;br>
to /run/user/1000/gnupg but to /run/user/1000/gnupg/SOMEDIR/. That dir&lt;br>
is not created on the fly but requires that the user creates it in&lt;br>
advance. SOMEDIR is the hash of GNUPGHOME and gpgconf has a command to&lt;br>
compute that hash and create the directory.&lt;/p>&lt;/blockquote>
&lt;p>Ich hatte mir irgendwann im Rahmen von &lt;a href="https://www.youtube.com/watch?v=1QNR5T-nsQE" target="_blank">mein Homedir soll schöner werden&lt;/a> überlegt, dass ich &lt;code>~/.gnupg&lt;/code> lieber in &lt;code>~/.config/gnupg&lt;/code>
haben will und hab in meiner &lt;code>.xinitrc&lt;/code>, &lt;code>.xprofile&lt;/code> und &lt;code>.zshrc&lt;/code> &lt;code>export GNUPGHOME=&amp;quot;${XDG_CONFIG_HOME}/gnupg&amp;quot;&lt;/code> gesetzt.
Ich hatte außerdem einen Symlink gesetzt (von &lt;code>~/.gnupg&lt;/code> nach &lt;code>~/.config/gnupg&lt;/code>). D.h. eigentlich wäre die Umgebungsvariable auch gar nicht nötig gewesen&amp;hellip;&lt;/p>
&lt;p>Was ist also passiert: Der von systemd gestartete gpg-agent war für SSH zuständig (das hat auch funktioniert, da der SSH-agent über die Umgebungsvariable &lt;code>SSH_AUTH_SOCK&lt;/code> bekannt gemacht wird
(und nicht über komische Regeln)). Wenn ich aber gpg genutzt habe, hat es festgestellt, dass kein gpg-agent an dem angenommenen Unix-Socket lauscht und hat kurzerhand einen neuen gestartet
(weil es für Smartcards (Yubikey) nötig ist, dass einer läuft).&lt;/p>
&lt;p>Die Lösung: Ausgiebig ge-face-palmt, die &lt;code>GNUGPGHOME&lt;/code>-Einträge aus den Dateien entfernt und ein reboot später war alles tuffi und
funktioniert so wie es soll.&lt;/p></description></item><item><title>GPodder Sync</title><link>https://mortzu.de/posts/2025-07-31-gpoddersync/</link><pubDate>Thu, 31 Jul 2025 13:23:00 +0200</pubDate><guid>https://mortzu.de/posts/2025-07-31-gpoddersync/</guid><description>&lt;p>&lt;a href="https://blog.never-afk.de/" target="_blank">bitstacker&lt;/a> hatte mich neulich auf &lt;a href="https://www.audiobookshelf.org/" target="_blank">audiobookshelf&lt;/a> aufmerksam gemacht.
Damit kann man die aktuelle Abspielposition von Podcasts über mehrere Geräte (z.B. Smartphone und Notebook) synchron halten.
Klang cool, aber ich nehme aktuell aus Gründen, die ich in einem extra Post noch erläutern werde, Abstand davon, jeden Kram selber zu hosten.&lt;/p>
&lt;p>Die Funktionalität wollte ich aber trotzdem haben, also habe ich mich nach einer &lt;a href="https://nextcloud.com/" target="_blank">Nextcloud&lt;/a>-App umgeschaut.&lt;/p>
&lt;p>Dank meiner überragenden Google-Skills (&amp;ldquo;antennapod sync&amp;rdquo;) bin ich auf der &lt;a href="https://antennapod.org/de/documentation/general/synchronization" target="_blank">AntennaPod-Doku&lt;/a> gelandet.
Dort wird die Nextcloud-App &lt;a href="https://apps.nextcloud.com/apps/gpoddersync" target="_blank">GPodder Sync&lt;/a> als mögliches Sync-Ziel vorgestellt.&lt;/p>
&lt;p>Die App in der Nextcloud installiert, flugs im AntennaPod eingerichtet und fertig ists. Ein extra Anwendungspasswort muss man vorher übrigens nicht anlegen,
das passiert alles automatisch während der Einrichtung.&lt;/p>
&lt;p>Auf der &lt;a href="https://github.com/thrillfall/nextcloud-gpodder" target="_blank">GitHub-Seite&lt;/a> von &lt;em>GPodder Sync&lt;/em> gibts auch eine &lt;a href="https://github.com/thrillfall/nextcloud-gpodder?tab=readme-ov-file#clients-supporting-sync" target="_blank">Liste&lt;/a>
kompatibler Desktop-Clients. Meine Wahl ist auf &lt;a href="https://cardo-podcast.github.io/" target="_blank">Cardo&lt;/a> gefallen. Die Einrichtung ist ähnlich einfach wie bei AntennaPod:&lt;/p>
&lt;ol>
&lt;li>Cardo starten.&lt;/li>
&lt;li>Aufs Zahnrad (Einstellungen) klicken.&lt;/li>
&lt;li>Bei &lt;code>SYNCHRONIZATION&lt;/code> die eigene Nextcloud-URL eintragen und auf &lt;code>CONNECT&lt;/code> klicken.&lt;/li>
&lt;li>Im aufploppenden Browserfenster in der Nextcloud einloggen und der App den Zugriff erlauben.&lt;/li>
&lt;/ol>
&lt;p>Dauert einen Moment, bis der dann anfängt zu syncen.&lt;/p></description></item><item><title>Auffe Ohren</title><link>https://mortzu.de/posts/2025-07-04-podcasts/</link><pubDate>Fri, 04 Jul 2025 13:23:00 +0200</pubDate><guid>https://mortzu.de/posts/2025-07-04-podcasts/</guid><description>&lt;p>Der gute &lt;a href="https://blog.never-afk.de/" target="_blank">bitstacker&lt;/a> hat in seinem Blog geschrieben, welche &lt;a href="https://blog.never-afk.de/articles/2025/2025-04-14-13-37.html" target="_blank">Podcasts er so hört&lt;/a>.
Da wollte ich auch mal meinen Senf zu abgeben:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://focusonlinux.podigee.io/" target="_blank">FOCUS ON: Linux&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.fritz.de/programm/podcasts/okf-ortskontrollfahrt.html" target="_blank">OKF&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://alternativlos.org/" target="_blank">Alternativlos&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://faxinformatiker.de/" target="_blank">Faxinformatiker&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://pengutronix.de/en/tags/kernel-panic-podcast.html" target="_blank">Kernel Panic - Board on Fire&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://compendion.net/minutenweisematrix/" target="_blank">Minutenweise Matrix&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://techniktechnik.de/" target="_blank">TechnikTechnik&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.ardaudiothek.de/sendung/telekaddi-coldmirrors-kinderserien/urn:ard:show:c75413481c85bce9/" target="_blank">TELEKADDI&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://user.space/" target="_blank">Urlaub im Userspace&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://wartungsfenster.podigee.io/" target="_blank">Wartungsfenster&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Erdbeeren! Überall Erdbeeren!</title><link>https://mortzu.de/posts/2025-07-03-erdbeeren/</link><pubDate>Thu, 03 Jul 2025 13:23:00 +0200</pubDate><guid>https://mortzu.de/posts/2025-07-03-erdbeeren/</guid><description>&lt;p>&lt;img src="https://mortzu.de/assets/images/erdbeeren-in-waschbecken.jpg#floatleft" alt="Zu sehen ist ein Waschbecken voller Erdbeeren.">&lt;/p>
&lt;p>Letztens haben wir das wunderbare Wetter genutzt und einen kleinen Familienausflug zum &lt;a href="https://erdbeerhof-delmenhorst.de/" target="_blank">Erdbeerhof Delmenhorst&lt;/a> gemacht. Erdbeeren selbst pflücken stand auf dem Programm.&lt;/p>
&lt;p>Vorher hatte ich ein bisschen Sorge, dass unsere anderthalbjährige Tochter nicht davon abzuhalten ist durch die Pflanzen zu toben.
Aber Fehlanzeige: Sie saß tiefentspannt zwischen den Reihen, hat mit unserer Hilfe fleißig mitgepflückt und sich zwischendurch die Beeren genüsslich schmecken lassen.&lt;/p>
&lt;p>Am Ende hatten wir trotz ihrer kleinen Naschpausen mehrere Kilo zusammen. Zu Hause angekommen haben wir daraus direkt selbstgemachte Erdbeermarmelade eingekocht.&lt;/p>
&lt;p>Falls wer nachkochen will, das Setup ist simpel:&lt;/p>
&lt;ul>
&lt;li>1500g frische Erdbeeren&lt;/li>
&lt;li>500g 3-zu-1-Gelierzucker&lt;/li>
&lt;/ul>
&lt;p>Zuerst die Erdbeeren gründlich waschen, entstielen und klein schneiden.
Dann die Früchte zusammen mit dem Gelierzucker in einen ausreichend großen Topf schmeißen und unter ständigem Rühren zum Kochen bringen -
dabei aufpassen, dass nix überkocht. Das Ganze mindestens 4 Minuten sprudelnd weiterkochen lassen und das Rühren nicht vergessen.&lt;/p>
&lt;p>Anschließend &amp;rsquo;ne Gelierprobe machen: Einfach einen Klecks Marmelade auf einen kalten Teller geben.
Wenn es fest wird, passts. Die heiße Masse sofort randvoll in sterile Gläser füllen, fest verschließen und für ein paar Minuten auf den Kopf stellen. Fertig.&lt;/p></description></item><item><title>Debian auf einer Compute Instanz in der Oracle Cloud</title><link>https://mortzu.de/posts/2025-06-19-oracle-cloud/</link><pubDate>Thu, 19 Jun 2025 20:31:37 +0200</pubDate><guid>https://mortzu.de/posts/2025-06-19-oracle-cloud/</guid><description>&lt;p>&lt;img src="https://mortzu.de/assets/images/oracle-cloud.jpg#floatleft" alt="Zu sehen sind zwei sich gegenüberstehende Reihen Serverschränke. Die Farbstimmung ist rot.">&lt;/p>
&lt;p>Letztes Wochenende hab ich mir endlich mal die &lt;a href="https://www.oracle.com/cloud/free/" target="_blank">Free Tier&lt;/a> Instanz (AMD based Compute VMs with 1/8 OCPU and 1 GB memory each) in der &lt;a href="https://www.oracle.com/de/cloud/" target="_blank">Oracle Cloud&lt;/a> geklickt.
Das hab ich schon ewig vor mir her geschoben und jetzt hab ich mal ein bisschen Zeit gefunden.
Leider konnte ich nicht direkt &lt;a href="https://www.debian.org/" target="_blank">Debian&lt;/a> als Betriebssystem auswählen, aber als Community-Image gab es &lt;a href="https://ubuntu.com/" target="_blank">Ubuntu&lt;/a>.&lt;/p>
&lt;p>Nachdem ich ein bisschen damit rumgespielt habe, wollte ich aber doch lieber Debian haben (ich hab überall Debian installiert) - also hab ich angefangen zu suchen, ob das schon jemand gelöst hat.&lt;/p>
&lt;p>Im &lt;a href="https://pieterhollander.nl/post/oracle-free-tier-debian-install-amd64/" target="_blank">Blog von Pieter Hollander&lt;/a> wurde ich fündig.&lt;/p>
&lt;p>Ich hab auf Verschlüsselung und Swapfile verzichtet, weil ich auf der Box nicht mehr als 1GB RAM brauche und ich Dateisystemverschlüsselung in VMs für Blödsinn halte.&lt;/p>
&lt;p>Der Ablauf ist wie folgt:&lt;/p>
&lt;p>Eine SSH-Verbindung in das Ubuntu aufbauen, root werden und das Ubuntu mit &lt;a href="https://www.alpinelinux.org/" target="_blank">Alpine Linux&lt;/a> ersetzen:&lt;/p>
&lt;pre tabindex="0">&lt;code>ssh -o &amp;#34;StrictHostKeyChecking=no&amp;#34; -o &amp;#34;UserKnownHostsFile=/dev/null&amp;#34; ubuntu@REPLACE_WITH_YOUR_INSTANCES_PUBLIC_IP_ADDRESS
sudo -i
cd /
wget https://dl-cdn.alpinelinux.org/alpine/v3.21/releases/x86_64/alpine-virt-3.21.3-x86_64.iso
dd if=alpine-virt-3.21.3-x86_64.iso of=/dev/sda
sync
reboot
&lt;/code>&lt;/pre>&lt;p>Damit rebootet die Instanz in das Alpine Linux, wodurch der SSH-Zugriff verloren geht, da Alpine Linux standardmäßig keinen laufenden SSH-Server hat.&lt;/p>
&lt;p>Über die Oracle Cloud Console muss eine Konsolenverbindung erstellt werden.&lt;/p>
&lt;p>Dafür auf &lt;code>Compute&lt;/code>, &lt;code>Instances&lt;/code> und &lt;code>Instance details&lt;/code> klicken.&lt;/p>
&lt;p>Dann die Instanz auswählen, herunterscrollen und bei &lt;code>Console connection&lt;/code> auf &lt;code>Launch Cloud Shell connection&lt;/code> klicken.&lt;/p>
&lt;p>Wenn die Verbindung zu dem Cloudserver aufgebaut ist, steht im Fenster &lt;code>Instance Console Connection reached state: ACTIVE&lt;/code>.&lt;/p>
&lt;p>An dem erscheinenden Loginprompt mit dem Benutzernamen &lt;code>root&lt;/code> und ohne Passwort einloggen.&lt;/p>
&lt;p>Als erstes muss die Netzwerkkonfiguation gefixt werden:&lt;/p>
&lt;pre tabindex="0">&lt;code>vi /etc/network/interfaces
&lt;/code>&lt;/pre>&lt;p>&lt;code>i&lt;/code> drücken, um den Einfügemodus zu aktivieren.&lt;/p>
&lt;pre tabindex="0">&lt;code>auto eth0
iface eth0 inet dhcp
&lt;/code>&lt;/pre>&lt;p>Mit &lt;code>:wq&lt;/code> den vi verlassen und speichern. Danach das Netzwerk neustarten:&lt;/p>
&lt;pre tabindex="0">&lt;code>/etc/init.d/networking restart
&lt;/code>&lt;/pre>&lt;p>Um nicht alles in der - doch etwas anstrengenden - Konsole zu machen, richten wir uns den SSH-Server ein:&lt;/p>
&lt;pre tabindex="0">&lt;code>setup-sshd
Which ssh server? (&amp;#39;openssh&amp;#39;, &amp;#39;dropbear&amp;#39; or &amp;#39;none&amp;#39;) [openssh]
Allow root ssh login? (&amp;#39;?&amp;#39; for help) [prohibit-password]
Enter ssh key or URL for root (or &amp;#39;none&amp;#39;) [none]
* service sshd added to runlevel default
* Caching service dependencies ...
[ ok ]
ssh-keygen: generating new host keys: RSA ECDSA ED25519
* Starting sshd ...
[ ok ]
&lt;/code>&lt;/pre>&lt;p>Den öffentlichen SSH-Schlüssel ablegen:&lt;/p>
&lt;pre tabindex="0">&lt;code>mkdir /root/.ssh
vi /root/.ssh/authorized_keys
&lt;/code>&lt;/pre>&lt;p>Danach per SSH weitermachen:&lt;/p>
&lt;pre tabindex="0">&lt;code>ssh -o &amp;#34;StrictHostKeyChecking=no&amp;#34; -o &amp;#34;UserKnownHostsFile=/dev/null&amp;#34; root@REPLACE_WITH_YOUR_INSTANCES_PUBLIC_IP_ADDRESS
&lt;/code>&lt;/pre>&lt;p>Das Alpine Linux auf eine Ramdisk bewegen und von da weiterarbeiten:&lt;/p>
&lt;pre tabindex="0">&lt;code>mkdir /media/setup
cp -a /media/sda/* /media/setup
mkdir /lib/setup
cp -a /.modloop/* /lib/setup
/etc/init.d/modloop stop
umount /dev/sda
mv /media/setup/* /media/sda/
mv /lib/setup/* /.modloop/
&lt;/code>&lt;/pre>&lt;p>Paket-Repositories konfigurieren und benötigte Pakete installieren:&lt;/p>
&lt;pre tabindex="0">&lt;code>setup-apkrepos
apk update
apk add dosfstools e2fsprogs debootstrap cryptsetup nano gptfdisk partx btrfs-progs
&lt;/code>&lt;/pre>&lt;p>Die Festplatte partitionieren:&lt;/p>
&lt;pre tabindex="0">&lt;code>gdisk /dev/sda
&lt;/code>&lt;/pre>&lt;p>3 drücken, damit gdisk eine neue GPT-Partitionstabelle erstellt.&lt;/p>
&lt;pre tabindex="0">&lt;code>Command (? for help): n
Partition number (1-128, default 1):
First sector (34-104857566, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-104857566, default = 104855551) or {+-}size{KMGTP}: +1024M
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to &amp;#39;Linux filesystem&amp;#39;
Press n to create the EFI partition. Make it 512MB and set it to EFI.
Command (? for help): n
Partition number (2-128, default 2):
First sector (34-104857566, default = 2099200) or {+-}size{KMGTP}:
Last sector (2099200-104857566, default = 104855551) or {+-}size{KMGTP}: +512M
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): EF00
Changed type of partition to &amp;#39;EFI system partition&amp;#39;
Press n to create the root file system partition. Make it use all available remaining disk space.
Command (? for help): n
Partition number (3-128, default 3):
First sector (34-104857566, default = 3147776) or {+-}size{KMGTP}:
Last sector (3147776-104857566, default = 104855551) or {+-}size{KMGTP}:
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to &amp;#39;Linux filesystem&amp;#39;
Press p to display the partition table. It should give the following result:
Command (? for help): p
Disk /dev/sda: 104857600 sectors, 50.0 GiB
Model: BlockVolume
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): 57C983BB-7A42-4B74-BD69-F9A0AEFD5199
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 104857566
Partitions will be aligned on 2048-sector boundaries
Total free space is 4029 sectors (2.0 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 2099199 1024.0 MiB 8300 Linux filesystem
2 2099200 3147775 512.0 MiB EF00 EFI system partition
3 3147776 104855551 48.5 GiB 8300 Linux filesystem
&lt;/code>&lt;/pre>&lt;p>Mit &lt;code>w&lt;/code> speichern und beenden.&lt;/p>
&lt;p>Anschließend muss eine MBR-Partitionstabelle auf die Festplatte geschrieben.&lt;/p>
&lt;p>Dazu zunächst die alte MBR-Partitionstabelle löschen&amp;hellip;&lt;/p>
&lt;pre tabindex="0">&lt;code>partx -v -d /dev/sda
partition: none, disk: /dev/sda, lower: 0, upper: 0
/dev/sda: partition #1 removed
/dev/sda: partition #2 removed
/dev/sda: partition #3 removed
&lt;/code>&lt;/pre>&lt;p>&amp;hellip;und die neue schreiben:&lt;/p>
&lt;pre tabindex="0">&lt;code>partx -v -a /dev/sda
partition: none, disk: /dev/sda, lower: 0, upper: 0
/dev/sda: partition table type &amp;#39;gpt&amp;#39; detected
range recount: max partno=3, lower=0, upper=0
/dev/sda: partition #1 added
/dev/sda: partition #2 added
/dev/sda: partition #3 added
&lt;/code>&lt;/pre>&lt;p>Alle Partitionen formatieren&amp;hellip;&lt;/p>
&lt;pre tabindex="0">&lt;code>mkfs.ext4 /dev/sda1
mkfs.vfat /dev/sda2
mkfs.ext4 /dev/sda3
&lt;/code>&lt;/pre>&lt;p>&amp;hellip;und mounten:&lt;/p>
&lt;pre tabindex="0">&lt;code>mount -t ext4 /dev/sda3 /mnt
mkdir /mnt/boot
mount -t ext4 /dev/sda1 /mnt/boot
mkdir /mnt/boot/efi
mount -t vfat /dev/sda2 /mnt/boot/efi
&lt;/code>&lt;/pre>&lt;p>Debian herunterladen und installieren:&lt;/p>
&lt;pre tabindex="0">&lt;code>mkdir -p /mnt/var/tmp
chmod 1777 /mnt/var/tmp
debootstrap bookworm /mnt
&lt;/code>&lt;/pre>&lt;p>Hostnamen konfigurieren:&lt;/p>
&lt;pre tabindex="0">&lt;code>echo YOUR_PREFERRED_HOSTNAME &amp;gt; /mnt/etc/hostname
cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; /mnt/etc/hosts
127.0.1.1 YOUR_PREFERRED_HOSTNAME.YOUR_DOMAIN YOUR_PREFERRED_HOSTNAME
EOF
&lt;/code>&lt;/pre>&lt;p>Netzwerk konfigurieren:&lt;/p>
&lt;pre tabindex="0">&lt;code>rm -rf /mnt/etc/network
cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; /mnt/etc/systemd/network/ens3.network
[Match]
Name=ens3
[Network]
DHCP=yes
EOF
&lt;/code>&lt;/pre>&lt;p>Paketquellen konfigurieren:&lt;/p>
&lt;pre tabindex="0">&lt;code>cat &amp;lt;&amp;lt;EOF &amp;gt; /mnt/etc/apt/sources.list
deb http://deb.debian.org/debian/ bookworm main contrib non-free non-free-firmware
#deb-src http://deb.debian.org/debian/ bookworm main contrib non-free non-free-firmware
deb http://security.debian.org/ bookworm-security main contrib non-free non-free-firmware
#deb-src http://security.debian.org/ bookworm-security main contrib non-free non-free-firmware
# bookworm-updates, previously known as &amp;#39;volatile&amp;#39;
deb http://deb.debian.org/debian/ bookworm-updates main contrib non-free non-free-firmware
#deb-src http://deb.debian.org/debian/ bookworm-updates main contrib non-free non-free-firmware
# bookworm-backports, previously on backports.debian.org
deb http://deb.debian.org/debian/ bookworm-backports main contrib non-free non-free-firmware
#deb-src http://deb.debian.org/debian/ bookworm-backports main contrib non-free non-free-firmware
EOF
&lt;/code>&lt;/pre>&lt;p>In den root-Mountpoint chrooten:&lt;/p>
&lt;pre tabindex="0">&lt;code>mount --rbind /dev /mnt/dev
mount --rbind /proc /mnt/proc
mount --rbind /sys /mnt/sys
LANG=C chroot /mnt /bin/bash
&lt;/code>&lt;/pre>&lt;p>Paketquellen und System updaten:&lt;/p>
&lt;pre tabindex="0">&lt;code>apt update
apt dist-upgrade -y
&lt;/code>&lt;/pre>&lt;p>Die Systemsprache konfigurieren:&lt;/p>
&lt;pre tabindex="0">&lt;code>apt install locales -y
dpkg-reconfigure locales
&lt;/code>&lt;/pre>&lt;p>Zeitzone konfigurieren:&lt;/p>
&lt;pre tabindex="0">&lt;code>dpkg-reconfigure tzdata
&lt;/code>&lt;/pre>&lt;p>Und das Netzwerk konfigurieren:&lt;/p>
&lt;pre tabindex="0">&lt;code>apt purge ifupdown
systemctl enable systemd-networkd
&lt;/code>&lt;/pre>&lt;p>&lt;code>/etc/fstab&lt;/code> erstellen:&lt;/p>
&lt;pre tabindex="0">&lt;code>cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/fstab
# /etc/fstab: static file system information.
#
# Use &amp;#39;blkid&amp;#39; to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# &amp;lt;file system&amp;gt; &amp;lt;mount point&amp;gt; &amp;lt;type&amp;gt; &amp;lt;options&amp;gt; &amp;lt;dump&amp;gt; &amp;lt;pass&amp;gt;
# / partition
EOF
echo UUID=$(blkid -s UUID -o value \
/dev/sda3) \
/ ext4 defaults 0 2 &amp;gt;&amp;gt; /etc/fstab
cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; /etc/fstab
# /boot partition
EOF
echo UUID=$(blkid -s UUID -o value \
/dev/sda1) \
/boot ext4 defaults 0 2 &amp;gt;&amp;gt; /etc/fstab
cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; /etc/fstab
# UEFI /boot/efi partition (fat32)
EOF
echo PARTUUID=$(blkid -s PARTUUID -o value \
/dev/sda2) \
/boot/efi vfat defaults 0 1 &amp;gt;&amp;gt; /etc/fstab
&lt;/code>&lt;/pre>&lt;p>Bootloader installieren:&lt;/p>
&lt;pre tabindex="0">&lt;code>apt install -y grub-efi
grub-install --target=x86_64-efi --efi-directory=/boot/efi --recheck --no-floppy
&lt;/code>&lt;/pre>&lt;p>Die serielle Konsole im GRUB aktivieren, damit der Zugriff auf den Server über das Webportal noch geht:&lt;/p>
&lt;pre tabindex="0">&lt;code>cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; /etc/default/grub
GRUB_TERMINAL_INPUT=&amp;#34;console serial&amp;#34;
GRUB_TERMINAL_OUTPUT=&amp;#34;gfxterm serial&amp;#34;
GRUB_SERIAL_COMMAND=&amp;#34;serial --unit=0 --speed=115200&amp;#34;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;#34;\${GRUB_CMDLINE_LINUX_DEFAULT} console=tty0 console=ttyS0,115200&amp;#34;
EOF
update-grub2
&lt;/code>&lt;/pre>&lt;p>Den Kernel und benötigte Pakete installieren:&lt;/p>
&lt;pre tabindex="0">&lt;code>apt install -y linux-image-amd64 ssh systemd-timesyncd haveged wget curl net-tools git gpg build-essential dosfstools qemu-guest-agent
&lt;/code>&lt;/pre>&lt;p>Und wieder den öffentlichen SSH-Schlüssel ablegen:&lt;/p>
&lt;pre tabindex="0">&lt;code>mkdir ~/.ssh
vi ~/.ssh/authorized_keys
&lt;/code>&lt;/pre>&lt;p>Und am Ende aufräumen:&lt;/p>
&lt;pre tabindex="0">&lt;code>apt --purge autoremove
&lt;/code>&lt;/pre>&lt;p>Danach in das Debian rebooten und genießen:&lt;/p>
&lt;pre tabindex="0">&lt;code>exit
reboot
&lt;/code>&lt;/pre></description></item><item><title>Hallo Welt</title><link>https://mortzu.de/posts/2025-06-18-hallo-welt/</link><pubDate>Wed, 18 Jun 2025 13:23:00 +0200</pubDate><guid>https://mortzu.de/posts/2025-06-18-hallo-welt/</guid><description>&lt;p>&lt;img src="https://mortzu.de/assets/images/hello-world.jpg#floatleft" alt="Zu sehen ist ein Computerbildschirm in einem dunklen Raum. Auf dem Computerbildschirm ist der Quellcode für ein Hello-World-Programm in Basic zu sehen.">&lt;/p>
&lt;p>Moin.&lt;/p>
&lt;p>Ich bin mortzu oder &lt;a href="https://de.wikipedia.org/wiki/Momo_%28Roman%29" target="_blank">Momo&lt;/a> (weil das Mädchen in mir schon immer Stunk mit den grauen Herren hatte, die ihr die Zeit stehlen wollten).
Ich arbeite als Netzwerkadmin an der &lt;a href="https://www.uni-bremen.de/" target="_blank">Uni-Bremen&lt;/a>.&lt;/p>
&lt;p>Und weil man hier im Norden ja auch gern mal anpackt, hab ich den &lt;a href="https://www.hackerspace-bremen.de/" target="_blank">Hackerspace Bremen&lt;/a> und das &lt;a href="https://bremen.freifunk.net/" target="_blank">„Freifunk Bremen“-Projekt&lt;/a> mit angeschoben.&lt;/p>
&lt;p>Ich hab vor über Technik (Linux, Netzwerke, &amp;hellip;), ein bisschen Familie und Heimwerkerkrams zu schreiben. Mal sehen, was wird.&lt;/p>
&lt;p>Zum Maschinenraum: Das Blog ist ein &lt;a href="https://gohugo.io/" target="_blank">Hugoblog&lt;/a> in einem Git auf &lt;a href="https://codeberg.org/" target="_blank">codeberg&lt;/a>.
Eine CI-Pipeline war mir zu viel Gedöns, weswegen ich &lt;a href="https://codeberg.org/mortzu/hugo-webhook" target="_blank">hugo-webhook&lt;/a> gebaut hab.
Das wartet einfach darauf, dass der bei Codeberg hinterlegte Webhook angesprochen wird. Dann holt es sich das Git-Repository, baut das
Blog und schubst das Ergebnis per rsync in den richtigen Ordner.&lt;/p>
&lt;p>Wer vorbeischauen mag: Ich bin auf &lt;a href="https://codeberg.org/mortzu" target="_blank">codeberg&lt;/a> und &lt;a href="https://norden.social/@mortzu" target="_blank">Mastodon&lt;/a> unterwegs.&lt;/p></description></item><item><title>Enten Reloaded</title><link>https://mortzu.de/posts/2015-11-11-enten-reloaded/</link><pubDate>Wed, 11 Nov 2015 09:46:00 +0100</pubDate><guid>https://mortzu.de/posts/2015-11-11-enten-reloaded/</guid><description>&lt;p>&lt;a href="https://mortzu.de/assets/images/2015-11-11-122044.jpg">&lt;img src="https://mortzu.de/assets/images/2015-11-11-122044_small.jpg" alt="Zwei Enten nebeneinander">&lt;/a>&lt;/p>
&lt;p>Die erste &lt;a href="https://mortzu.de/2015/11/04/enten/">Ente&lt;/a> wurde mir zugespielt. Von &lt;a href="http://lena-rudert.de" target="_blank">Lena&lt;/a>. Dankeschön!&lt;/p></description></item><item><title>Enten</title><link>https://mortzu.de/posts/2015-11-04-enten/</link><pubDate>Wed, 04 Nov 2015 09:46:00 +0100</pubDate><guid>https://mortzu.de/posts/2015-11-04-enten/</guid><description>&lt;p>Ich hab mit eine neue Aktion überlegt: Wenn jemand toll findet, was ich blogge oder meinen Code nutzt und mir eine Freude
machen will (oder mir einfach so eine Freude machen will): Ich freue mich über kleine Gummienten.&lt;/p></description></item><item><title>Arbeitsplatz - Teil 1</title><link>https://mortzu.de/posts/2015-11-03-arbeitsplatz-teil-1/</link><pubDate>Tue, 03 Nov 2015 13:46:00 +0100</pubDate><guid>https://mortzu.de/posts/2015-11-03-arbeitsplatz-teil-1/</guid><description>&lt;p>Nach dem &lt;a href="https://mortzu.de/posts/2015-08-06-dinge-die-ich-bediene/">letzten Post&lt;/a> dachte ich mir, dass es nett wäre nicht nur vorzustellen mit was ich arbeite
sondern auch wo.&lt;/p>
&lt;p>&lt;a href="https://mortzu.de/assets/images/2015-11-03-113022.jpg">&lt;img src="https://mortzu.de/assets/images/2015-11-03-113022_small.jpg" alt="Heimarbeitsplatz mit sichtbarem Regal darunter">&lt;/a>&lt;/p>
&lt;p>Die Tischplatte ist an die Wand geschraubt, liegt aber auf einem 2x2 Kallax in schwarzbraun.
Die drei Monitore sind auf zwei Grafikkarten verteilt.&lt;/p>
&lt;p>Wenn ihr eure Karte an meiner Wand sehen wollt, schickt mir eine :). Ich würde mich freuen.&lt;/p>
&lt;p>Da ich diesen Post als Stöckchen sehe, werfe ich es &lt;a href="https://blog.jplitza.de" target="_blank">jplitza&lt;/a>, &lt;a href="https://fireorbit.de" target="_blank">genofire&lt;/a>, coderbyheart, &lt;a href="https://medium.com/@SimJoSt" target="_blank">SimJoSt&lt;/a>, &lt;a href="http://notrademark.de" target="_blank">msquare&lt;/a> und &lt;a href="https://cvigano.de/blog/" target="_blank">kritter&lt;/a> zu.&lt;/p></description></item><item><title>Dinge, die ich bediene</title><link>https://mortzu.de/posts/2015-08-06-dinge-die-ich-bediene/</link><pubDate>Thu, 06 Aug 2015 12:00:00 +0100</pubDate><guid>https://mortzu.de/posts/2015-08-06-dinge-die-ich-bediene/</guid><description>&lt;p>Frei nach &lt;a href="https://usesthis.com" target="_blank">usesthis.com&lt;/a> beschreibe ich mal was ich so benutze:&lt;/p>
&lt;p>Alle Rechner, an denen ich arbeite haben amerikanisches Tastaturlayout, identisch konfigurierte
Desktopumgebungen, teilen sich diverse Dateien über ein Cloudstorage (Seafile) und Git.&lt;/p>
&lt;h2 id="lenovo-thinkpad-x240-elwing">Lenovo Thinkpad X240 (elwing)&lt;/h2>
&lt;p>Mein Notebook, welches brandneu ist. Aktuell mit einer Samsung SSD und 4 GB RAM.&lt;/p>
&lt;p>Läuft mit Archlinux, XFCE, Chrome und Thunderbird.&lt;/p>
&lt;h2 id="lenovo-thinkcentre-m92z-kiya">Lenovo Thinkcentre M92z (kiya)&lt;/h2>
&lt;p>Ist so ein All-in-one-PC mit Core i3, 16 GB RAM und nachgerüsteter SSD.&lt;/p>
&lt;h2 id="selbstbau-pc-vana">Selbstbau PC (vana)&lt;/h2>
&lt;p>Besteht aus einem alten Gehäuse, welches die meiste Zeit offen in der Gegend rumsteht.
Darin ist ein altes Mainboard mit einem Intel Code2Duo, leider nur 4 GB RAM und zwei 1 TB Festplatten.&lt;/p>
&lt;p>Daran hängen zwei 15&amp;quot;-Monitore und ein 22&amp;quot;er.&lt;/p>
&lt;h2 id="hetzner-rootserver">Hetzner Rootserver&lt;/h2>
&lt;p>Den Hetzner Rootserver teile ich mir mit mehreren Leuten und betreibe u.A. eine Instanz für hostedinspace.de.&lt;/p>
&lt;h2 id="vms">VMs&lt;/h2>
&lt;p>In Bremen zwei, in Frankfurt eine. Nutze ich primär für DNS-Server.&lt;/p>
&lt;p>Da ich diesen Post als Stöckchen sehe, werfe ich es &lt;a href="https://blog.jplitza.de" target="_blank">jplitza&lt;/a>, &lt;a href="https://fireorbit.de" target="_blank">genofire&lt;/a>, coderbyheart, &lt;a href="https://medium.com/@SimJoSt" target="_blank">SimJoSt&lt;/a>, &lt;a href="http://notrademark.de" target="_blank">msquare&lt;/a> und &lt;a href="https://cvigano.de/blog/" target="_blank">kritter&lt;/a> zu.&lt;/p></description></item><item><title>Bandscheibe oder keine Bandscheibe? - das ist hier die Frage</title><link>https://mortzu.de/posts/2013-10-29-bandscheibe-oder-keine-bandscheibe-das-ist-hier-die-frage/</link><pubDate>Tue, 29 Oct 2013 11:40:45 +0100</pubDate><guid>https://mortzu.de/posts/2013-10-29-bandscheibe-oder-keine-bandscheibe-das-ist-hier-die-frage/</guid><description>&lt;p>Letzten Samstag mit extremen Rückenschmerzen und eingeschlafenen Beinen spontan ins Krankenhaus gefahren.&lt;/p>
&lt;p>Meine Hoffnung: Die renken mir die blockierten Wirbel wieder ein und alles ist tuffi.&lt;/p>
&lt;p>Erstmal kassenärztlicher Notdienst, der mich dann nach einiger Wartezeit und ein bisschen Untersuchen mit Zettel (ich konnte kein Wort lesen) in die Notaufnahme des Klinikum Bremen Mitte (gleich nebenan) weitergeschickt hat.&lt;/p>
&lt;p>Da hab ich dann erstmal im Stehen (sitzen ging nicht) ein bisschen gewartet.&lt;/p>
&lt;p>Irgendwann dann mal aufgerufen worden und nochmal eine halbe Ewigkeit gewartet.&lt;/p>
&lt;p>Dann kam tatsächlich irgendwann ein ziemlich kuhler Arzt, mit dem ich dann recht lange geredet hab.&lt;/p>
&lt;p>Ergebnis nach einiger Zeit und Ultraschall (um eine angeschwollene Bauchaorta auszuschließen) und so: Verdacht auf Bandscheibenvorfall - da wird nix gerenkt - da muss erst ein MRT gemacht werden, was aber Samstags nicht geht, da das Klinikum seine MRT-Abteilung irgendwann verkauft hat und die privatisierte Abteilung natürlich Samstags nicht arbeitet.&lt;/p>
&lt;p>Danach durfte ich nochmal wieder zurück zum kassenärztlichen Notdienst, da mir nur dort Medikamente verschrieben werden dürfen und irgendwas gegen die Schmerzen hielt ich für sinnvoll.&lt;/p>
&lt;p>Danach wurde ich dann netterweise von &lt;a href="http://weltheit.eu" target="_blank">mieke&lt;/a> und &lt;a href="http://notrademark.de" target="_blank">msquare&lt;/a> mitm Auto abgeholt und mussten dann, aufgrund der fortgeschrittenen Abendzeit noch bei einer Nachtapotheke vorbei.&lt;/p>
&lt;p>Danach hab ich dann was gegessen und mich aufs Bett gekrümmelt, dank allspark mit einem Wärmekissen im Rücken.&lt;/p>
&lt;p>Überhaupt haben sich alle ganz rührend gekümmert und gesorgt: Danke dafür.&lt;/p>
&lt;p>Samstag MRT - dann wissen wir mehr.&lt;/p></description></item><item><title>Angetestet: Energiedrinks</title><link>https://mortzu.de/posts/2013-10-16-angetestet-energiedrinks/</link><pubDate>Wed, 16 Oct 2013 07:54:05 +0200</pubDate><guid>https://mortzu.de/posts/2013-10-16-angetestet-energiedrinks/</guid><description>&lt;p>Weil ich sonst nix zu tun hab und sowieso immer Koffein brauche (zuviel Arbeit, zuwenig Zeit), hab ich mir mal die Mühe gemacht und habe diverse Energydrinks und andere Koffeinhaltige Getränke miteinander verglichen.&lt;/p>
&lt;p>Zunächst der gute alte &lt;strong>Kaffee&lt;/strong>. Man mag ihn oder man mag ihn nicht. Man mag ihn mit Milch oder halt nicht. Andere brauchen Zucker, viele eher nicht. Wenn man ihn stark macht (oder auch polnisch (soviel Pulver in die Tasse bis der Löffel steht)) hält er wach und ansonsten mag ich ihn in letzter Zeit auch nicht mehr so gerne.&lt;/p>
&lt;p>Der Klassiker: &lt;strong>Cola&lt;/strong>. Egal von welcher Marke. Bringt bei mir garnix, ausser nem Zuckerschock.&lt;/p>
&lt;p>&lt;strong>Matetee&lt;/strong> ist auch ne gute Alternative für kalte Wintertage (wie sie scheinbar jetzt auch wieder häufiger kommen). Er ist in jedem gut sortieren Supermarkt erhältlich, schmeckt gut, kostet nicht viel, hält warm und macht wach.&lt;/p>
&lt;p>&lt;strong>Club Mate&lt;/strong> ist dann die erfrischende Variante dazu. Auch hier gilt: Man mags oder halt nicht.&lt;/p>
&lt;p>&lt;strong>Red Bull&lt;/strong> ist wohl der Klassiker unter den Energydrinks. Schmeckt ein bisschen wie Gummibärchen, greift den Zahnschmelz an und macht definitiv wach.&lt;/p>
&lt;p>&lt;strong>Relentless&lt;/strong>, &lt;strong>MagicMan&lt;/strong>, &lt;strong>conrad energy&lt;/strong> und &lt;strong>Rhino&lt;/strong> schmecken und wirken für mich genauso wie Red Bull.&lt;/p>
&lt;p>Irgendwann kam mal jemand auf die Idee den Geschmack von Energydrinks zu verändern. Heraus kamen verschiedene Produkte, wie &lt;strong>quixx&lt;/strong>, &lt;strong>Schwarze Dose 28&lt;/strong> oder &lt;strong>Sexergy&lt;/strong>. Schmecken alle drei fruchtig, wobei ich SD28 immer noch am leckersten finde.&lt;/p>
&lt;p>So. Viel zu lange nicht mehr gebloggt. Zur Strafe ohne Hausschuhe ins Bett.&lt;/p></description></item><item><title>Ohrstöpsel halten besser Lärm ab als Cola</title><link>https://mortzu.de/posts/2013-10-16-ohrstoepsel-halten-besser-laerm-ab-als-cola/</link><pubDate>Wed, 16 Oct 2013 07:54:05 +0200</pubDate><guid>https://mortzu.de/posts/2013-10-16-ohrstoepsel-halten-besser-laerm-ab-als-cola/</guid><description>&lt;p>Guten Morgen.&lt;/p>
&lt;p>Über 11h geschlafen. War wohl nötig.&lt;/p>
&lt;p>Nach anhaltendem Krach unserer Nachbarn (die über uns wohnen) habe ich gestern um 14:00 die Apotheke meines Vertrauens
(in der Langemarkstr.) aufgesucht und stellte fest, dass diese um 14:00 schließen, was den freundlichen Apotheker (zum Glück)
nicht davon abgehalten hat seine Kasse wieder anzumachen und mir dennoch was zu verkaufen (danke, unbekannter Mann):
&lt;a href="https://www.hansaplast.de/produkte/sonstiges/ohrstoepsel" target="_blank">Hansaplast Ohrstöpsel&lt;/a>. Und ich muss sagen: Ich bin zufrieden.
Ich habe NIX gehört. Die ganze Nacht durch. Nix von oben. Keine Wiederkehr meiner Mitbewohner und nicht einmal mein Handy
(ist das gut oder schlecht sein Handy nicht zu hören?).&lt;/p></description></item><item><title>Server, Server, Server [Update #2]</title><link>https://mortzu.de/posts/2013-10-16-server-server-server/</link><pubDate>Wed, 16 Oct 2013 07:54:05 +0200</pubDate><guid>https://mortzu.de/posts/2013-10-16-server-server-server/</guid><description>&lt;p>So nun nach langer Zeit mal wieder was: Es ist August und damit laufen zwei Verträge unserer (bisher) treuen Server aus.&lt;/p>
&lt;p>Einer lief bei &lt;a href="http://www.hosteurope.de" target="_blank">Hosteurope&lt;/a>, die vom Support her sehr gut sind, aber leider weder &lt;a href="http://de.wikipedia.org/wiki/IPv6" target="_blank">IPv6&lt;/a>, noch mehrere IPs anbieten.&lt;/p>
&lt;p>Der andere lief bei &lt;a href="http://www.server4you.com" target="_blank">Server4You&lt;/a>, die einen hundsmieserablen Support anbieten (meiner Meinung nach), aber mehrere IPs, allerdings auch kein IPv6.&lt;/p>
&lt;p>Da wir aber IPv6 einsetzen und auch anbieten wollen, haben wir uns ja bei &lt;a href="http://hetzner.de" target="_blank">Hetzner&lt;/a> einen Rootserver geholt: &lt;em>goldstein&lt;/em>. Mithilfe von &lt;a href="http://xaranet.de" target="_blank">Xaranet&lt;/a> haben wir dort auch IPv6 für wenig Geld (3,49€/Monat). Auf Goldstein können wir nun machen was wir wollen und es läuft plötzlich auch alles wesentlich schneller und besser.&lt;/p>
&lt;p>Der Jabberserver läuft ohne mucken (wobei hier auch ein eine Änderung von &lt;a href="https://www.ejabberd.im/" target="_blank">ejabberd&lt;/a> auf &lt;a href="http://jabberd.org" target="_blank">jabberd 1.4&lt;/a> stattgefunden hat), die &lt;a href="http://www.cmsmadesimple.org" target="_blank">CMSMS&lt;/a>-Seiten sind viel schneller, wir haben 50% aller Seiten mit IPv6 angebunden und allgemein ist nicht so viel Chaos wie auf &lt;em>bastet&lt;/em> und &lt;em>fluff&lt;/em>, den alten Servern. Außerdem haben wir vieles von unseren Heimservern &lt;em>uni5&lt;/em>, &lt;em>cat&lt;/em> und &lt;em>gaia&lt;/em> auf goldstein verschoben, womit ein allgemeiner Anstieg von Sicherheit und Geschwindigkeit stattgefunden hat.&lt;/p>
&lt;p>Auch haben wir eine allgemeine Policy entworfen, nach der jeder, der bei uns irgendwas hat mindestens 1€/Monat zahlt (Er (oder sie) kann natürlich auch gerne mehr zahlen, aber wenigstens, als Zeichen des guten Willens, einen Euro). Damit verhindern wir, dass das Gefühl aufkommt, dass wir ausgenutzt werden. Unser Server kostet auch Geld. Und das nicht zu knapp. Außerdem kostet &lt;em>goldsteins&lt;/em> Wartung Zeit und die fehlt dann an anderer Stelle.&lt;/p>
&lt;p>Ansonsten pushen wir gerade unser BreKu-Projekt, räumen ein bißchen auf, schreiben Rechnungssysteme, machen Webseiten und Ferien (der Alkohol muss ja wech, nicht wahr?).&lt;/p>
&lt;p>Meine Webseite ist nun nach jahrelangem Laufen soweit, dass ich der Meinung war, dass ich sie vom 100%ig dynamischen auf einen halbdynamischen Betrieb umstellen kann. Der Code (übrigens zu 90% PHP) wurde so umstrukturiert, dass er sowohl (mithilfe eines &lt;a href="http://de.wikipedia.org/wiki/Wrapper" target="_blank">Wrappers&lt;/a>) statische Seiten (und Bilder) generieren kann, als auch dynamische. Dass die statische Seite wesentlich schneller ist, liegt auf der Hand. Ich lasse meine Homepage, sowie die &lt;a href="http://www.deviantart.com" target="_blank">deviantart&lt;/a>-&lt;a href="http://de.wikipedia.org/wiki/Feed" target="_blank">Feeds&lt;/a>, den Planet (der in meine Seite integriert wurde, dazu später mehr) alle 15min generieren und erhalte so eine recht schnelle Seite, wobei der nächste Schritt der Verbesserung darin besteht externe Bilder lokal zu &lt;a href="http://de.wikipedia.org/wiki/Cache" target="_blank">cachen&lt;/a>.&lt;/p>
&lt;p>Zu dem Planet, der jetzt schätzungsweise 4 Monate lief, dabei eine Umstellung von einem &lt;em>PlanetPlanet&lt;/em> zu Astros &lt;a href="https://wiki.c3d2.de/Harvester" target="_blank">Harvester&lt;/a> erfahren hat, sei nur soviel gesagt, dass sich seine Adresse von &lt;em>planet.helzilla.de&lt;/em>, bzw. &lt;em>planet.hellzilla.de&lt;/em> in &lt;em>chaosnase.de&lt;/em> (Update: Inzwischen läuft er unter &lt;a href="https://planet.moritzrudert.de/" target="_blank">https://planet.moritzrudert.de/&lt;/a>) geändert hat, somit also mithilfe eines selbstgeschriebenen &lt;a href="http://de.wikipedia.org/wiki/PHP" target="_blank">PHP&lt;/a>-Wrappers, der den von den Harvester Rubyscripten generierten HTML-Code aufräumt, strukturiert und in meine Homepage einpasst, in meine Seite perfekt integriert. Das deviantart-Feed-Script, welches aus den (kaputten) &lt;a href="http://de.wikipedia.org/wiki/RSS" target="_blank">RSS-Feeds&lt;/a> von deviantart saubere, und vor allem ein Bild enthaltende &lt;a href="https://de.wikipedia.org/wiki/Atom_%28Format%29" target="_blank">Atom-Feeds&lt;/a> macht wurde überarbeitet, läuft nun, wie schon erwähnt, alle 15min an, ändert aber nur etwas, wenn sich in den RSS-Feeds etwas geändert hat. Außerdem habe ich heute morgen lightbox integriert, so dass man nicht erst auf die deviantart-Seite gehen muss, um die Bilder zu sehen.&lt;/p>
&lt;p>Da &lt;a href="http://webkeks.org" target="_blank">js&lt;/a> einen &lt;a href="http://de.wikipedia.org/wiki/Multi-User_Chat" target="_blank">MUC&lt;/a> Channel hat und der einen sehr guten Eindruck auf mich machte (viel besser und vor allem sicherer als &lt;a href="http://de.wikipedia.org/wiki/IRC" target="_blank">IRC&lt;/a>) habe ich mir spontan auch einen eingerichtet.
Er ist unter &lt;em>&lt;a href="mailto:blackhole@muc.quasar-net.de">blackhole@muc.quasar-net.de&lt;/a>&lt;/em> erreichbar und sollte eigentlich von allen Jabberservern funktionieren (Ich hab ihn bisher allerdings nur Quasar-Netz-intern benutzt; deshalb keine Garantie).&lt;/p></description></item><item><title>Viertelfest und letzte Ferienwoche</title><link>https://mortzu.de/posts/2013-10-16-viertelfest-und-letzte-ferienwoche/</link><pubDate>Wed, 16 Oct 2013 07:54:05 +0200</pubDate><guid>https://mortzu.de/posts/2013-10-16-viertelfest-und-letzte-ferienwoche/</guid><description>&lt;p>Im Moment ist in Bremen das &lt;a href="http://viertelfest-bremen.de" target="_blank">Viertelfest&lt;/a> und natürlich muss man da hin :).
Am Freitag spielten &lt;a href="http://www.mellowmark.de" target="_blank">Mellow Mark&lt;/a>, Pale, Muff Potter und die Trashmonkeys.&lt;/p>
&lt;p>Aufgrund akuter Müdigkeit, des normalen biologischen Dranges nach einer &lt;a href="http://de.wikipedia.org/wiki/Toilette" target="_blank">Entleerungsanstalt&lt;/a> und des Erfordernisses zur &lt;a href="http://de.wikipedia.org/wiki/Sex" target="_blank">Ausübung beziehungstechnischer Tätigkeiten&lt;/a> bin ich, zusammen mit Cathy, vor Muff Potter gegangen. Am Samstag bin ich  relativ spontan um kurz vor fünf zu Konsul Schmidt, der Band von Timur, Marius, Marlon, Natalie und Tule, gefahren, die eigentlich um viertel vor anfangen wollten, allerdings stellte ich fest, dass ich wohl nicht viel verpasst hatte. Nachdem ich mir ein Bier gekauft hatte (für 2,50€) gings mir auch schon besser. Konsul Schmidt spielten gut, wiesen auch auf ihre Homepage hin. Leider durften sie keine Zugabe geben, so dass danach ein Mann die Bühne betrat, der einen 1/4 Hut trug und versuchte Stimmung zu machen. Bei Konsul Schmidt traf ich, allerdings 15min nachdem Konsul Schmidt angefangen hatten, Rebecca. Mit ihr &amp;ldquo;verbrachte&amp;rdquo; ich dann den weiteren Spätnachmittag/Abend.&lt;/p>
&lt;p>Vor dem Goetheplatz spielten Umanos, eine Afro Beat Funk HipHop Gruppe, die uns nicht so begeisterten. Auf dem Ulrichsplatz spielten &lt;a href="http://www.myspace.com/mermaidunion" target="_blank">Mermaid Union&lt;/a>, eine zwei Frauenband mit spanischem-countrykitsch-by-heart. Die waren Ansich ganz gut, nur hatten sie viele Spanischlieder im Programm, was mich nicht so begeisterte, da Spanisch nicht gerade meine Lieblingssprache ist. Auch Rebecca, die gerade als Au-Pair in Spanien war, wirkte nicht allzu begeistert. Auf der Bühne vor der &lt;a href="http://www.kunsthalle-bremen.de" target="_blank">Kunsthalle Bremen&lt;/a> spielten währenddessen S.O.L., eine &amp;ldquo;Sweet Punk Rock Band mit einem Hauch Garage&amp;rdquo;. Die waren eigentlich recht lustig. Ich verabschiedete mich hingegen von Rebecca und dem Viertelfest und fuhr nach Hause, weil ich der Meinung war, dass Cathy dort angekommen sein müsste, nur um festzustellen, dass dies nicht der Fall war. Um allem die Krone aufzusetzen rief sie mich 10min nach meinem Ankommen an und fragte, ob ich nicht nochmal aufs Viertelfest wollen würde. Auch hat mich auf dem Nachhauseweg die Polizei darauf hingewiesen, dass mein Vorderlicht nicht geht.&lt;/p>
&lt;p>Schön, dass einem das bei einem Fahrrad passiert, dass man einen Tag vorher wiederbekommen hat und einfach noch nicht die Zeit hatte eine neue Glühlampe zu kaufen…&lt;/p></description></item><item><title>Vorratsdatenspeicherung</title><link>https://mortzu.de/posts/2013-10-16-vorratsdatenspeicherung-stockchen/</link><pubDate>Wed, 16 Oct 2013 07:54:05 +0200</pubDate><guid>https://mortzu.de/posts/2013-10-16-vorratsdatenspeicherung-stockchen/</guid><description>&lt;p>&lt;strong>Wo befinden sich auf Dich angemeldete Telefone bei Benutzung (SMS und Telefonate per Handy, Festnetz, VoIP)?&lt;/strong>
Handy: In meiner Hosentasche (in der linken, um die Geschichte mit der Unfruchtbarkeit zu testen)
Festnetz: Zuhause (eins im Wohnzimer (ist aber mobil), eins in meinem Büro (im Keller und eins im Quasar-Büro (auch im Keller) Voip/SMS: Ich sach mal Fritzbox/Handy&lt;/p>
&lt;p>&lt;strong>Wann stehst Du in der früh auf und wann gehst Du ins Bett (bzw um welche Uhrzeit findet der erste/letzte Netzkontakt des Tages statt?)&lt;/strong>
Morgens gegen 7:00Uhr und Abends gegen 22:00Uhr
Der erste Netzkontakt ist meist entweder vor der Schule oder nach der Schule.&lt;/p>
&lt;p>&lt;strong>Mit wie vielen Handys, in denen eine auf dich angemeldete SIM-Karte steckt, wurde innerhalb der letzten sechs Monate telefoniert?&lt;/strong>
Eines (gibts tatsächlich Menschen mit mehreren Handys am Mann?!)&lt;/p>
&lt;p>&lt;strong>Von wie vielen Orten aus wurde in den letzten sechs Monaten auf ein auf deinen Namen angemeldetes Email-Konto zugegriffen?&lt;/strong>
Da ich einen eigenen Mailserver besitze, rufe ich die meist mit meinem Heimserver von dort ab. (There’s no place like 127.0.0.1)&lt;/p></description></item><item><title>Wieso weshalb warum</title><link>https://mortzu.de/posts/2013-10-16-wieso-weshalb-warum/</link><pubDate>Wed, 16 Oct 2013 07:54:05 +0200</pubDate><guid>https://mortzu.de/posts/2013-10-16-wieso-weshalb-warum/</guid><description>&lt;p>&lt;strong>Welchen Charakter aus der Sesamstraße fandest Du am coolsten?&lt;/strong>
&lt;a href="http://en.wikipedia.org/wiki/Lefty_the_Salesman" target="_blank">Lefty&lt;/a>, der Typ mit dem Trencoat, der immer allen Leuten Buchstaben andrehen will.&lt;/p>
&lt;p>&lt;strong>Wen konntest Du nicht leiden?&lt;/strong>
Die Menschen zwischen den Puppen haben mich immer genervt.&lt;/p>
&lt;p>&lt;strong>Kannst Du ein Lied aus der Sesamstraße auswendig? Welches?&lt;/strong>
Manamana&lt;/p>
&lt;p>&lt;strong>Was hat Dir die Sesamstraße (bei)gebracht?&lt;/strong>
Wir sind alle anders und jeder ist besonders und doch hält uns was zusammen.&lt;/p>
&lt;p>&lt;strong>Wann hast Du zum letzten Mal Sesamstraße gesehen?&lt;/strong>
Durch Zufall mal reingeschaltet. Ist aber nicht mehr dasselbe.&lt;/p></description></item><item><title>Neues Blogsystem</title><link>https://mortzu.de/posts/2013-10-16-neues-blogsystem/</link><pubDate>Wed, 16 Oct 2013 07:46:47 +0200</pubDate><guid>https://mortzu.de/posts/2013-10-16-neues-blogsystem/</guid><description>&lt;p>Nachdem ich nun seit vielen Jahren mit &lt;a href="https://wordpress.org" target="_blank">Wordpress&lt;/a> sehr glücklich war, wurde es mal wieder Zeit für was &lt;a href="http://ghost.org" target="_blank">neues&lt;/a>.&lt;/p>
&lt;p>Das ist ein auf &lt;a href="http://nodejs.org" target="_blank">node.js&lt;/a> basierendes Blogsystem, indem man mit &lt;a href="http://daringfireball.net/projects/markdown/" target="_blank">Markdown&lt;/a> postet. Das coole ist, dass es, genauso wie bei &lt;a href="https://github.com/gollum/gollum" target="_blank">gollum&lt;/a>, eine side-by-side-Vorschau gibt - man sieht also beim schreiben des Posts live neben dem Editor wie der Post aussehen wird.&lt;/p></description></item><item><title>Geburtstag</title><link>https://mortzu.de/posts/2012-04-08-geburtstag/</link><pubDate>Sun, 08 Apr 2012 01:20:36 +0200</pubDate><guid>https://mortzu.de/posts/2012-04-08-geburtstag/</guid><description>&lt;p>Fast vergessen: Unsere WG ist am 1.4.2012 drei Jahre alt geworden.&lt;/p></description></item><item><title>optimale Platznutzung</title><link>https://mortzu.de/posts/2012-04-07-optimale-platznutzung/</link><pubDate>Sat, 07 Apr 2012 13:00:34 +0200</pubDate><guid>https://mortzu.de/posts/2012-04-07-optimale-platznutzung/</guid><description>&lt;p>Irgendwann in den letzten Tagen fiel mir auf, dass dieser Spalt zwischen Hochbett,
Tuer und Tuerrahmen total ungenutzer Platz ist. Man(n) dachte und schnappte sich
die Stichsaege und es ward ein Buecherregal geboren.&lt;/p>
&lt;p>&lt;a href="https://mortzu.de/assets/images/2012-04-07-buecherregal.jpg">&lt;img src="https://mortzu.de/assets/images/2012-04-07-buecherregal_small.jpg" alt="Buecherregal im Tuerrahmen">&lt;/a>&lt;/p></description></item><item><title>RE: Ratespiel</title><link>https://mortzu.de/posts/2012-04-03-re-ratespiel/</link><pubDate>Tue, 03 Apr 2012 17:31:50 +0200</pubDate><guid>https://mortzu.de/posts/2012-04-03-re-ratespiel/</guid><description>&lt;p>Vor laengerer Zeit gabs mal ein &lt;a href="https://mortzu.de/posts/2012-01-21-ratespiel/">Ratespiel&lt;/a> und dies wollte ich mal aufloesen:&lt;/p>
&lt;p>&lt;a href="https://mortzu.de/assets/images/2012-04-03-oben_drauf.jpg">&lt;img src="https://mortzu.de/assets/images/2012-04-03-oben_drauf_small.jpg" alt="">&lt;/a>&lt;/p>
&lt;p>Es ist das Dach meines Hochbettes! Special Thanks goes to jp.
Denn ohne seine Planung haette das ganze Projekt garantiert nicht geklappt.&lt;/p></description></item><item><title>Ratespiel</title><link>https://mortzu.de/posts/2012-01-21-ratespiel/</link><pubDate>Sat, 21 Jan 2012 15:52:45 +0100</pubDate><guid>https://mortzu.de/posts/2012-01-21-ratespiel/</guid><description>&lt;p>Wir machen jetzt ein kleines Ratespiel: Was ist auf diesem Bild/Scan zu sehen?&lt;/p>
&lt;p>&lt;a href="https://mortzu.de/assets/images/2012-01-21-ratespiel.jpg">&lt;img src="https://mortzu.de/assets/images/2012-01-21-ratespiel_small.jpg" alt="Bauskizze">&lt;/a>&lt;/p></description></item><item><title>Kueche</title><link>https://mortzu.de/posts/2011-11-02-kueche/</link><pubDate>Wed, 02 Nov 2011 20:25:40 +0100</pubDate><guid>https://mortzu.de/posts/2011-11-02-kueche/</guid><description>&lt;p>Wir haben igwann mal unsere Kueche umgebaut und dies ist eigentlich
ein ziemlich gutes Bild davon, wie sie immer so aussieht:&lt;/p>
&lt;p>&lt;a href="https://mortzu.de/assets/images/2011-11-02-kueche.jpg">&lt;img src="https://mortzu.de/assets/images/2011-11-02-kueche_small.jpg" alt="Kueche im Milliways">&lt;/a>&lt;/p></description></item><item><title>Namensaenderung und andere Schweinereien</title><link>https://mortzu.de/posts/2011-09-11-namenaenderung-und-andere-schweinereien/</link><pubDate>Sun, 11 Sep 2011 01:44:18 +0200</pubDate><guid>https://mortzu.de/posts/2011-09-11-namenaenderung-und-andere-schweinereien/</guid><description>&lt;p>Lange nichts mehr von mir hoeren lassen.&lt;/p>
&lt;p>First of all: Unsere WG hat eine Namensaenderung hinter sich.
Der Hauptgrund hierfuer war die deutliche Abtrennung zwischen Firma und WG.&lt;/p>
&lt;p>Hinweis: Bis Jan-Philipp in die WG zog, waren zumindest zwei der drei Dauerbewohner
planet cyborg-Firmenangehoerige.&lt;/p>
&lt;p>Hinweis #2: Bis vor kurzem hiesz die WG &amp;ldquo;planet cyborg HQ&amp;rdquo;.&lt;/p>
&lt;p>Auch habe ich vor einigen Monaten alles was noch firmenartiges auf dem WG-Server
lag wegbewegt (Backups, einer der DNS-Server). Diese lagen dort, da ich in meiner
alten WG (in der Tietjenstr.) zusammen mit meinem damaligen Firmenkollegen Timur
gewohnt habe und sich der QSC-DSL-Anschluss mit der statischen IP-Adresse
(den wir auch noch recht lange hier in der Neustadt hatten) fuer einen DNS-Server
anbot (auszerdem hatten wir damals noch nicht so viel raeumlich getrennte Server
zur Verfuegung wie heute).&lt;/p>
&lt;p>Nun also heiszen wir nach intensiver Abstimmung &lt;a href="https://secure.wikimedia.org/wikipedia/de/wiki/Planeten_und_Orte_aus_dem_Roman_Per_Anhalter_durch_die_Galaxis#Milliways" target="_blank">Milliways&lt;/a>
(wie das Ding beim &lt;a href="https://secure.wikimedia.org/wikipedia/de/wiki/Per_Anhalter_durch_die_Galaxis" target="_blank">Anhalter&lt;/a>
von &lt;a href="https://secure.wikimedia.org/wikipedia/de/wiki/Douglas_Adams" target="_blank">Douglas Adams&lt;/a>).&lt;/p>
&lt;p>Da war natuerlich eine neue Domain noetig, die JP und ich nach ein wenig suchen auch
fanden: mw.vc. Damit sind jetzt (kuhlerweise) alle Rechner im Milliways (das zu
schreiben muss auch erstmal gewoehnt werden) unter $hostname.mw.vc erreichbar
(Teilweise (eigentlich groesztenteils) via IPv6, die IPv4-Adresse ist leider nur
intern erreichbar). Das sorgt natuerlich auch fuer Blog-URL-Aenderung von
&lt;a href="http://blog.hq.h-ix.net/" target="_blank">http://blog.hq.h-ix.net/&lt;/a> zu &lt;a href="http://mw.vc/" target="_blank">http://mw.vc/&lt;/a>.&lt;/p>
&lt;p>Ansonsten war ich die letzten Tage krank (Erkaeltung; Baeh!), wird aber schon wieder
besser und ich hab die Zeit genutzt und viel Serverkrams gemacht und mein Zimmer
aufgeraeumt und so krams.&lt;/p>
&lt;p>Und ich hab die letzten Tage die Haelfte der James Bond-Filme geguckt
(Ich mag &amp;ldquo;Sag Niemals Nie&amp;rdquo; immer noch am liebsten.)&lt;/p>
&lt;p>Und heute hab ich mit &lt;a href="https://secure.wikimedia.org/wikipedia/de/wiki/Kampfstern_Galactica" target="_blank">Kampfstern Galactica&lt;/a>
angefangen (ja, das Original von anno dazumal). Das hab ich als ich kleiner (juenger)
war schonmal durchgeschaut, kann mich aber nicht mehr an so richtig viel errinern.
Vor allem nicht an den Witz von dem einen Zylonen-Obermufti (Der betritt igwann das
Headquarter von dem Oberzylon Baltar und geht irgendwann mit dem Kommentar
&amp;ldquo;Er ist nicht der einzige der geistig verwirrt ist&amp;hellip;&amp;rdquo;, worauf Baltar fragt was er
gesagt haette und er geht mit den Worten &amp;ldquo;Zu Ihren Diensten.&amp;rdquo;. Ein Zylon mit Humor. Super!)&lt;/p>
&lt;p>Ansonsten geh ich jetzt mal schlafen und schreib dann lieber morgen noch einen Blogpost
als hier muede vor mir rum zu schreiben.&lt;/p>
&lt;p>Zur Strafe: Ohne Bier ins Bett.&lt;/p></description></item><item><title>We need more ports!</title><link>https://mortzu.de/posts/2011-05-15-we-need-more-ports/</link><pubDate>Sun, 15 May 2011 13:15:15 +0200</pubDate><guid>https://mortzu.de/posts/2011-05-15-we-need-more-ports/</guid><description>&lt;p>Mir sind hier gerade so n paar alte Bilder vom Ausbau der HQ-Netzwerk-Infrastruktur übern weg gelaufen:&lt;/p>
&lt;p>&lt;a href="https://mortzu.de/assets/images/2011-05-15-P1010008.jpg">&lt;img src="https://mortzu.de/assets/images/2011-05-15-P1010008_small.jpg" alt="Heimarbeitsplatz">&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://mortzu.de/assets/images/2011-05-15-P1010005-2.jpg">&lt;img src="https://mortzu.de/assets/images/2011-05-15-P1010005-2_small.jpg" alt="Heimarbeitsplatz">&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://mortzu.de/assets/images/2011-05-15-P1010005.jpg">&lt;img src="https://mortzu.de/assets/images/2011-05-15-P1010005_small.jpg" alt="Heimarbeitsplatz">&lt;/a>&lt;/p></description></item><item><title>Betten ohne Leitern lassen sich nur schwer zum Schlafen nutzen</title><link>https://mortzu.de/posts/2010-12-21-betten-ohne-leitern-lassen-sich-nur-schwer-zum-schlafen-nutzen/</link><pubDate>Tue, 21 Dec 2010 18:18:49 +0100</pubDate><guid>https://mortzu.de/posts/2010-12-21-betten-ohne-leitern-lassen-sich-nur-schwer-zum-schlafen-nutzen/</guid><description>&lt;p>Mein Vater hat mir netterweise diese äußerst praktische
Einstiegshilfe für mein Bett geschenkt und dann auch gleich
mit mir zusammen angebaut. Nach einigem Rumgebiege der
Metallhalterungen passte das dann auch. Danke nochmal!&lt;!-- raw HTML omitted -->&lt;/p>
&lt;p>&lt;a href="https://mortzu.de/assets/images/2010-12-21-bettleiter.jpg">&lt;img src="https://mortzu.de/assets/images/2010-12-21-bettleiter_small.jpg" alt="Bettleiter">&lt;/a>&lt;/p></description></item><item><title>Pest existiert auch in Ihrem Schlafzimmer</title><link>https://mortzu.de/posts/2010-09-29-pest-existiert-auch-in-ihrem-schlafzimmer/</link><pubDate>Wed, 29 Sep 2010 18:35:23 +0200</pubDate><guid>https://mortzu.de/posts/2010-09-29-pest-existiert-auch-in-ihrem-schlafzimmer/</guid><description>&lt;p>&lt;a href="https://nning.io/" target="_blank">henning&lt;/a> und ich haben für den &lt;a href="https://ccchb.de/" target="_blank">CCCHB&lt;/a> eine Pesthörnchen-Flagge gemalt.&lt;/p>
&lt;p>Hierfür haben wir das Logo mithilfe eines Beamers auf schwarzen Stoff projiziert und mit weißer Farbe
das Logo nachgemalt.&lt;/p>
&lt;p>&lt;a href="https://mortzu.de/assets/images/2010-09-29-pest.jpg">&lt;img src="https://mortzu.de/assets/images/2010-09-29-pest_small.jpg" alt="Pesthörnchenflagge">&lt;/a>&lt;/p></description></item></channel></rss>