<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <atom:link href="https://comodin.com/rss.xml" rel="self" type="application/rss+xml"/>
    <title>comodin</title>
    <link>https://comodin.com/</link>
    <description>wildcard, dummy, placeholder</description>
    <lastBuildDate>Tue, 10 Feb 2026 19:17:52 +0100</lastBuildDate>
    <item>
      <title>Apple Kurzbefehl für Erfassung der Projektzeit</title>
      <link>https://comodin.com/apple-kurzbefehl-f%C3%BCr-erfassung-der-projektzeit</link>
      <image>https://comodin.com/bl-content/uploads/pages/7ec50831079afebd936cb4aebbcbcc60/Bildschirmfoto2026-02-10um17.44.36.png</image>
      <description>&lt;p&gt;Für den Kurzbefehl wird die App Data Jar benötigt, Link zum App Store:
&lt;a href="https://apps.apple.com/de/app/data-jar/id1453273600"&gt;https://apps.apple.com/de/app/data-jar/id1453273600&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Diese App lässt sich auf allen Geräten (iPhone, iPad, Mac) benutzen und sollte auch überall installiert werden.&lt;/p&gt;
&lt;p&gt;In Data Jar werden die folgenden Variablen benötigt, siehe Bild.&lt;/p&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/7ec50831079afebd936cb4aebbcbcc60/Bildschirmfoto2026-02-10um17.38.48.png" alt=""&gt;
&lt;p&gt;Es wird eine Numbers-Tabelle mit dem Namen &amp;quot;Projektzeit.numbers&amp;quot; im iCloud Ordner &amp;quot;Shortcuts&amp;quot; erwartet, die wie folgt aussieht. &lt;a href="_dateien/Projektzeit.numbers.zip"&gt;Projektzeit.numbers.zip&lt;/a&gt;&lt;/p&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/7ec50831079afebd936cb4aebbcbcc60/Bildschirmfoto2026-02-10um17.59.07.png" alt=""&gt;
&lt;p&gt;Im Shortcut müssen die Blattnamen der Numberstabelle eingegeben werden. Ziemlich am Anfang im Klappmenu und direkt dadrunter noch mal in der Text-Auswahl.&lt;/p&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/7ec50831079afebd936cb4aebbcbcc60/Bildschirmfoto2026-02-10um19.20.55.png" alt=""&gt;
&lt;p&gt;Hier der Link zum Schortcut: &lt;a href="_dateien/Projektzeit.shortcut.zip"&gt;Projektzeit.shortcut.zip&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Dann kann der Shortcut über einen Focus gesteuert werden. Es wird danach das Menu angezeigt und man wählt sein Projekt aus.&lt;/p&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/7ec50831079afebd936cb4aebbcbcc60/IMG_6228-kl.png" alt=""&gt;</description>
      <pubDate>Tue, 10 Feb 2026 17:19:49 +0100</pubDate>
      <guid isPermaLink="false">7ec50831079afebd936cb4aebbcbcc60</guid>
    </item>
    <item>
      <title>Umsetzung Webdesign Betonschnitt (Liquidatoren-Relaunch)</title>
      <link>https://comodin.com/betonschnitt-relaunch</link>
      <image>https://comodin.com/bl-content/uploads/pages/e71250941d9f42f2213e4a9b4e46a4e3/Bildschirmfoto2025-07-08um23.13.19.png</image>
      <description>&lt;img src="https://comodin.com/bl-content/uploads/pages/e71250941d9f42f2213e4a9b4e46a4e3/Bildschirmfoto2025-07-08um23.13.19.png" alt=""&gt;</description>
      <pubDate>Tue, 08 Jul 2025 23:09:38 +0200</pubDate>
      <guid isPermaLink="false">e71250941d9f42f2213e4a9b4e46a4e3</guid>
    </item>
    <item>
      <title>Willkommen in 1984</title>
      <link>https://comodin.com/1984</link>
      <image>https://comodin.com/bl-content/uploads/pages/eab4c0742b101d3f710f01b8a002a884/1984.jpg</image>
      <description>&lt;img src="https://comodin.com/bl-content/uploads/pages/eab4c0742b101d3f710f01b8a002a884/1984.jpg" alt="1984"&gt;
&lt;blockquote&gt;
&lt;p&gt;Im Jahr 1984 bekam ich von der Jungen Gemeinde der Evangelischen Auferstehungskirche in Berlin Friedrichshain das Buch “1984” zum Lesen. In der DDR war das Buch verboten. Es hat mich in meiner pubertären Phase stark geprägt. Drei Jahre später saß ich im Stasi-Gefängnis Hohenschönhausen und wartete auf die Ausreise nach Berlin-West.&lt;/p&gt;
&lt;p&gt;Dieses “Heute” erinnert mich sehr stark an die Zustände der damaligen DDR. Wenn jemand, der für Frieden auf die Straße geht, heute “rechtsradikal” ist, dann haben wir wieder orwellsche Verhältnisse erreicht.&lt;/p&gt;
&lt;p&gt;Ich kann nicht mehr schweigen.&lt;/p&gt;
&lt;p&gt;Ich bin gegen Krieg! Ich möchte Frieden!
Deutschland soll keine Waffen in Kriegsgebiete liefern!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;&amp;quot;Solche Inhalte&amp;quot; - sind ein Gedankenverbrechen?&lt;/h2&gt;
&lt;p&gt;Wenn ich den Text oben mit Apple Intelligence Korrekturlesen möchte, erhalte ich diese Meldung.&lt;/p&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/eab4c0742b101d3f710f01b8a002a884/Bildschirmfoto2025-04-29um22.01.10.png" alt=""&gt;</description>
      <pubDate>Sat, 26 Apr 2025 01:50:59 +0200</pubDate>
      <guid isPermaLink="false">eab4c0742b101d3f710f01b8a002a884</guid>
    </item>
    <item>
      <title>Bitcoin Full Node mit FreeBSD 14.2 auf einem Mac mini i7 Server (Late 2012 Macmini6,2)</title>
      <link>https://comodin.com/bitcoin-full-node-auf-mac-mini-i7</link>
      <image>https://comodin.com/bl-content/uploads/pages/8ce0ab8982da834969dd31e7edbe9537/macmini_late2012.jpg</image>
      <description>&lt;p&gt;Ich habe eine Full Node mit einem &lt;a href="https://github.com/getumbrel/umbrel/wiki/Install-umbrelOS-on-a-Raspberry-Pi-5"&gt;Raspberry Pi und Umbrel&lt;/a&gt; laufen. Im lokalen Netz funktioniert das ganz gut, aber: Der Umbrel-Server kann keine SSL- , sondern nur unverschlüsselte (TOR)Verbindungen zu Wallets aufbauen. Das wollte ich anders. Ich baue eine Bitcoin Full Node, die hinter einer Fritz!Box über eine Domain via SSL erreichbar ist.&lt;/p&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/8ce0ab8982da834969dd31e7edbe9537/macmini_late2012.jpg" alt=""&gt;
&lt;p&gt;Beim Stöbern im Dachboden fand ich einen alten Mac mini i7 Server (Late 2012 Macmini6,2 2.6 GHz), der von Apple keine Updates mehr bekommt und zwei SATA SSDs mit jeweils 1TB Speicher. Die beiden HDDs des Mac mini habe ich ausgebaut und durch die zwei SSDs ersetzt.&lt;/p&gt;
&lt;h2&gt;Inhalt&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#FreeBSD"&gt;FreeBSD 14.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#bitcoind"&gt;bitcoind&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#bitcoin-utils"&gt;bitcoin-utils&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#electrs"&gt;electrs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#lego"&gt;Letsencrypt Zertifikat mit lego&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#nginx"&gt;nginx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#Fritz!Box"&gt;Fritz!Box Freigabe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#BitBox"&gt;BitBox auf eigene Full Node einstellen&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a name="FreeBSD"&gt; &lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;FreeBSD 14.2 installieren&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Quelle:
&lt;a href="https://download.freebsd.org/releases/ISO-IMAGES/14.2/"&gt;https://download.freebsd.org/releases/ISO-IMAGES/14.2/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mit &lt;a href="https://etcher.balena.io"&gt;Belana Edger&lt;/a&gt; das Image &lt;a href="https://download.freebsd.org/releases/ISO-IMAGES/14.2/FreeBSD-14.2-RELEASE-amd64-memstick.img"&gt;FreeBSD-14.2-RELEASE-amd64-memstick.img&lt;/a&gt; auf einen USB-Stick kopieren, den Stick in den Mac mini stecken und mit gedrückter &lt;kbd&gt;option&lt;/kbd&gt; Taste starten. Den Installationsprozess von FreeBSD durchlaufen, USB-Stick abziehen und neu starten. Wenn bei der Installation das Zusammenlegen der zwei SSDs (wie von mir :) übersehen wurde, kann dies jetzt nachträglich geschehen.&lt;/p&gt;
&lt;h4&gt;Die zwei SSDs im zpool zusammenlegen&lt;/h4&gt;
&lt;p&gt;Die Laufwerke anzeigen.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;❯ camcontrol devlist
&amp;lt;Samsung SSD 840 EVO 1TB EXT0CB6Q&amp;gt;  at scbus0 target 0 lun 0 (pass0,ada0)
&amp;lt;Samsung SSD 840 EVO 1TB EXT0CB6Q&amp;gt;  at scbus1 target 0 lun 0 (pass1,ada1)
&amp;lt;AHCI SGPIO Enclosure 2.00 0001&amp;gt;   at scbus2 target 0 lun 0 (ses0,pass2)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Die Partitiionen anzeigen, FreeBSD wurde auf ada1 installiert. Auf ada0 befinden sich noch alte Daten.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;❯ gpart show
=&amp;gt;        40  1953525088  ada1  GPT  (932G)
          40      532480     1  efi  (260M)
      532520        1024     2  freebsd-boot  (512K)
      533544         984        - free -  (492K)
      534528     4194304     3  freebsd-swap  (2.0G)
     4728832  1948794880     4  freebsd-zfs  (929G)
  1953523712        1416        - free -  (708K)

=&amp;gt;        34  1953525101  ada0  GPT  (932G)
          34        2014        - free -  (1.0M)
        2048       65536     1  efi  (32M)
       67584       49152     2  linux-data  (24M)
      116736      524288     3  linux-data  (256M)
      641024       49152     4  linux-data  (24M)
      690176      524288     5  linux-data  (256M)
     1214464       16384     6  linux-data  (8.0M)
     1230848      196608     7  linux-data  (96M)
     1427456  1952097679     8  linux-data  (931G)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Die Partitiion von ada0 löschen.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;❯ gpart destroy -F ada0
ada0 destroyed

❯ gpart show
=&amp;gt;        40  1953525088  ada1  GPT  (932G)
          40      532480     1  efi  (260M)
      532520        1024     2  freebsd-boot  (512K)
      533544         984        - free -  (492K)
      534528     4194304     3  freebsd-swap  (2.0G)
     4728832  1948794880     4  freebsd-zfs  (929G)
  1953523712        1416        - free -  (708K)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Neue Partition anlegen.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;❯ gpart create -s GPT /dev/ada0
ada0 created

❯ gpart show
=&amp;gt;        40  1953525088  ada1  GPT  (932G)
          40      532480     1  efi  (260M)
      532520        1024     2  freebsd-boot  (512K)
      533544         984        - free -  (492K)
      534528     4194304     3  freebsd-swap  (2.0G)
     4728832  1948794880     4  freebsd-zfs  (929G)
  1953523712        1416        - free -  (708K)

=&amp;gt;        40  1953525088  ada0  GPT  (932G)
          40  1953525088        - free -  (932G)

❯ zpool status
  pool: zroot
 state: ONLINE
status: Some supported and requested features are not enabled on the pool.
        The pool can still be used, but some features are unavailable.
action: Enable all features using 'zpool upgrade'. Once this is done,
        the pool may no longer be accessible by software that does not support
        the features. See zpool-features(7) for details.
config:

        NAME        STATE     READ WRITE CKSUM
        zroot       ONLINE       0     0     0
          ada1p4    ONLINE       0     0     0

errors: No known data errors

❯ zpool list
NAME    SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zroot   928G  94.2G   834G        -         -     2%    10%  1.00x    ONLINE  -&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Laufwerk zum Pool hinzufügen.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;❯ zpool add zroot /dev/ada0

❯ zpool list
NAME    SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zroot  1.81T  94.2G  1.72T        -         -     1%     5%  1.00x    ONLINE  -

❯ df -h
Filesystem            Size    Used   Avail Capacity  Mounted on
zroot/ROOT/default    1.7T    4.1G    1.7T     0%    /
devfs                 1.0K      0B    1.0K     0%    /dev
/dev/gpt/efiboot0     260M    1.8M    258M     1%    /boot/efi
zroot/var/mail        1.7T    152K    1.7T     0%    /var/mail
zroot                 1.7T     96K    1.7T     0%    /zroot
zroot/tmp             1.7T    244K    1.7T     0%    /tmp
zroot/backup          1.7T     66G    1.7T     4%    /backup
zroot/home            1.7T     96K    1.7T     0%    /home
zroot/var/audit       1.7T     96K    1.7T     0%    /var/audit
zroot/var/log         1.7T    1.7M    1.7T     0%    /var/log
zroot/var/tmp         1.7T    144K    1.7T     0%    /var/tmp
zroot/var/crash       1.7T     96K    1.7T     0%    /var/crash
zroot/usr/src         1.7T    861M    1.7T     0%    /usr/src
zroot/usr/ports       1.7T    2.4G    1.7T     0%    /usr/ports
zroot/home/gent       1.7T     26M    1.7T     0%    /home/gent&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a name="bitcoind"&gt; &lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;bitcoind installieren&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;portmaster net-p2p/bitcoin-daemon
...
===&amp;gt;&amp;gt;&amp;gt; net-p2p/bitcoin-daemon &amp;gt;&amp;gt; (12)

===&amp;gt;&amp;gt;&amp;gt; The following actions will be taken if you choose to proceed:
        Install net-p2p/bitcoin-daemon
        Install databases/db5
        Install databases/sqlite3
        Install lang/tcl86
        Install devel/boost-libs
        Install devel/boost-jam
        Install devel/icu
        Install devel/libevent
        Install net/libzmq4
        Install net/norm
        Install net/openpgm
        Install security/libsodium
        Install net/miniupnpc

===&amp;gt;&amp;gt;&amp;gt; Proceed? y/n [y]
...
===&amp;gt; Creating groups
Creating group 'bitcoin' with gid '779'
===&amp;gt; Creating users
Creating user 'bitcoin' with uid '779'&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;config&lt;/h4&gt;
&lt;p&gt;/etc/rc.conf&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;bitcoind_enable="YES"
bitcoind_user="bitcoin"
bitcoind_group="bitcoin"
bitcoind_conf="/usr/local/etc/bitcoin.conf"
bitcoind_data_dir="/var/db/bitcoin"&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;/usr/local/etc/bitcoin.conf&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;server=1
rest=1
listen=1
daemon=1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Nach dem Start von bitcoind fängt dieser an, die Blockchain zu laden. Das Laden hat bei meiner 500 Mbit Glasfaser ca. 1 Tag gedauert.&lt;/p&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/8ce0ab8982da834969dd31e7edbe9537/Bildschirmfoto2025-02-12um16.16.42.png" alt=""&gt;
&lt;p&gt;&lt;a name="bitcoin-utils"&gt; &lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;bitcoin-utils installieren&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;portmaster net-p2p/bitcoin-utils&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;config&lt;/h4&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;# ~/.bitcoin/bitcoin.conf

datadir=/var/db/bitcoin
rpccookiefile=/var/db/bitcoin/.cookie&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;prüfen der Blockhöhe, wie weit bitcoind mit dem Sync ist&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;❯ bitcoin-cli getblockcount
884297&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a name="electrs"&gt; &lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;electrs installieren&lt;/h2&gt;
&lt;p&gt;Die Installation dauerte mehrere Stunden!&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;portmaster finance/electrs&lt;/code&gt;&lt;/pre&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/8ce0ab8982da834969dd31e7edbe9537/Bildschirmfoto2025-02-13um15.10.33.png" alt=""&gt;
&lt;h4&gt;config&lt;/h4&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;cd /usr/local/etc
mkdir electrs
cd electrs&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;/usr/local/etc/electrs/config.toml&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;# DO NOT EDIT THIS FILE DIRECTLY - COPY IT FIRST!
# If you edit this, you will cry a lot during update and will not want to live anymore!

# This is an EXAMPLE of how configuration file should look like.
# Do NOT blindly copy this and expect it to work for you!
# If you don't know what you're doing consider using automated setup or ask an experienced friend.

# This example contains only the most important settings.
# See docs or electrs man page for advanced settings.

# File where bitcoind stores the cookie, usually file .cookie in its datadir
cookie_file = "/var/db/bitcoin/.cookie"

# The listening RPC address of bitcoind, port is usually 8332
daemon_rpc_addr = "127.0.0.1:8332"

# The listening P2P address of bitcoind, port is usually 8333
daemon_p2p_addr = "127.0.0.1:8333"

# Directory where the index should be stored. It should have at least 70GB of free space.
db_dir = "/var/db/electrs"

# bitcoin means mainnet. Don't set to anything else unless you're a developer.
network = "bitcoin"

# The address on which electrs should listen. Warning: 0.0.0.0 is probably a bad idea!
# Tunneling is the recommended way to access electrs remotely.
#electrum_rpc_addr = "127.0.0.1:50001"
electrum_rpc_addr = "10.0.0.31:50001"

# How much information about internal workings should electrs print. Increase before reporting a bug.
log_filters = "INFO"&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;cd /var/db
mkdir electrs
chown -R bitcoin:bitcoin electrs&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;echo 'electrs_enable="YES"' &amp;gt;&amp;gt; /etc/rc.conf&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;erster Start&lt;/h4&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;sudo -u bitcoin electrs --conf-dir=/usr/local/etc/electrs

[2025-02-16T19:48:56.491Z INFO  electrs::index] indexing 2000 blocks: [170001..172000]
[2025-02-16T19:48:57.777Z INFO  electrs::chain] chain updated: tip=0000000000000837e82c3a4ebe35a1d1d943e056234dba7c629922c6d4052d4c, height=172000
...
...&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Das Indexing der Blockchain wird gestartet, das kann einige STUNDEN dauern. Ich breche den Vorgang im Terminal wieder ab mit &lt;kbd&gt;control&lt;/kbd&gt; + &lt;kbd&gt;c&lt;/kbd&gt; und schreibe mir ein Script für den Daemon, der im Hintergrund laufen wird.&lt;/p&gt;
&lt;h4&gt;electrs nach dem booten als daemon laufen lassen&lt;/h4&gt;
&lt;p&gt;Der Port finance/electrs hat bei mir (Stand Feb. 2025) kein Script in rc.d installiert. Deshalb habe ich mir das Script von bitcoind kopiert und für electrs umgeschrieben.&lt;/p&gt;
&lt;p&gt;/usr/local/etc/rc.d/electrs&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;#! /bin/sh

# PROVIDE: electrs
# REQUIRE: DAEMON
# KEYWORD: shutdown

#
# Add the following lines to /etc/rc.conf to enable electrs_daemon:
#
#electrs_enable="YES"

. /etc/rc.subr

name="electrs"
rcvar="electrs_enable"

start_precmd="electrs_precmd"
start_cmd="electrs_start"
restart_precmd="electrs_checkconfig"
reload_precmd="electrs_checkconfig"
configtest_cmd="electrs_checkconfig"
status_cmd="electrs_status"
stop_cmd="electrs_stop"
stop_postcmd="electrs_wait"
command="/usr/local/bin/electrs"
daemon_command="/usr/sbin/daemon"
pidfile="/var/run/${name}.pid"
extra_commands="configtest"

: ${electrs_enable:=NO}
: ${electrslimits_enable:="NO"}

load_rc_config $name

: ${electrs_user:=bitcoin}
: ${electrs_group:=bitcoin}
: ${electrs_data_dir:="/var/db/electrs"}
: ${electrs_config_file:="/usr/local/etc/electrs/config.toml"}
#: ${bitcoindlimits_args:="-e -U ${bitcoind_user}"}
: ${bitcoindlimits_args:=""}

# set up dependant variables
procname="${command}"
required_files="${electrs_config_file}"

electrs_checkconfig()
{
  echo "Performing sanity check on electrs configuration:"
  if [ ! -d "${electrs_data_dir}" ]
  then
    echo "Missing data directory: ${electrs_data_dir}"
    exit 1
  fi
  chown -R "${electrs_user}:${electrs_group}" "${electrs_data_dir}"

  if [ ! -f "${electrs_config_file}" ]
  then
    echo "Missing configuration file: ${electrs_config_file}"
    exit 1
  fi
  if [ ! -x "${command}" ]
  then
    echo "Missing executable: ${command}"
    exit 1
  fi
  return 0
}

electrs_cleanup()
{
  rm -f "${pidfile}"
}

electrs_precmd()
{
  electrs_checkconfig

  pid=$(check_pidfile "${pidfile}" "${procname}")
  if [ -z "${pid}" ]
  then
    echo "electrs is not running"
    rm -f "${pidfile}"
  fi

  if checkyesno electrslimits_enable
  then
    eval $(/usr/bin/limits ${electrslimits_args}) 2&amp;gt;/dev/null
  else
    return 0
  fi
}

electrs_status()
{
  local pid
  pid=$(check_pidfile "${pidfile}" "${procname}")
  if [ -z "${pid}" ]
  then
    echo "electrs is not running"
    return 1
  else
    echo "electrs running, pid: ${pid}"
  fi
}

electrs_start()
{
  echo "sleeping for 60 sec.."
  sleep 60
  echo "Starting electrs:"
  cd "${electrs_data_dir}" || return 1
  ${daemon_command} -u "${electrs_user}" -p "${pidfile}" -f \
    ${command} \
    --conf="${electrs_config_file}"
}

electrs_stop()
{
  echo "Stopping electrs:"
  pid=$(check_pidfile "${pidfile}" "${procname}")
  if [ -z "${pid}" ]
  then
    echo "electrs is not running"
    return 1
  else
    kill ${pid}
  fi
}

electrs_wait()
{
  local n=60
  echo "Waiting for electrs shutdown:"
  while :
  do
    printf '.'
    pid=$(check_pidfile "${pidfile}" "${procname}")
    if [ -z "${pid}" ]
    then
      printf '\n'
      break
    fi
    sleep 1
    n=$((${n} - 1))
    if [ ${n} -eq 0 -a -f "${pidfile}" ]
    then
      printf "\nForce shutdown"
      kill -9 $(cat "${pidfile}")
      for n in 1 2 3
      do
        printf '.'
        sleep 1
      done
      printf '\n'
      break
    fi
  done
  rm -f "${pidfile}"
  echo "Shutdown complete"
}

run_rc_command "$1"&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;chmod 755 /usr/local/etc/rc.d/electrs&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;service electrs start&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a name="lego"&gt; &lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Letsencrypt Zertifikat mit lego holen&lt;/h2&gt;
&lt;p&gt;Lego hat den Vorteil gg. certbot: es benötigt keinen offenen Port 80. Ich habe meine Domain bei Hetzner liegen, Hetzner bietet für den DNS auch eine API an. Außer Hetzner werden auch andere Provider von lego unterstützt, Informationen findet man in der Doku zu Lego:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Quellen: &lt;a href="https://go-acme.github.io/lego/"&gt;https://go-acme.github.io/lego/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;lego installieren&lt;/h4&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;portmaster security/lego&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;config&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;echo 'YOUR-API-KEY' &amp;gt;&amp;gt; /usr/local/etc/lego/hetzner_api_key.txt
echo 'node.comodin.com' &amp;gt;&amp;gt; /usr/local/etc/lego/domains.txt

cd /usr/local/etc/lego/
chown _lego *.txt
chmod 600 *.txt

ls -la
total 36
drwx------   2 _lego _lego    8B Feb  8 11:30 .
drwxr-xr-x  13 root  wheel   31B Feb  8 10:25 ..
-r-xr-xr-x   1 root  wheel  667B Jan 30 11:05 deploy.sh
-r-xr-xr-x   1 root  wheel  667B Jan 30 11:05 deploy.sh.sample
-rw-------   1 _lego _lego   14B Feb  8 11:25 domains.txt
-rw-------   1 _lego _lego   33B Feb  8 11:30 hetzner_api_key.txt
-rwx------   1 _lego _lego  857B Feb  8 11:25 lego.sh
-rwx------   1 _lego _lego  838B Jan 30 11:05 lego.sh.sample&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Zertifikat holen&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;
sudo -u _lego HETZNER_API_KEY_FILE=/usr/local/etc/lego/hetzner_api_key.txt /usr/local/bin/lego --email mail@comodin.com --path /usr/local/etc/lego --dns hetzner -d 'node.comodin.com' run

2025/02/16 12:48:18 [DEBUG] GET https://acme-v02.api.letsencrypt.org/directory
2025/02/16 12:48:19 [INFO] [node.comodin.com] acme: Obtaining bundled SAN certificate
2025/02/16 12:48:19 [DEBUG] HEAD https://acme-v02.api.letsencrypt.org/acme/new-nonce
2025/02/16 12:48:19 [DEBUG] POST https://acme-v02.api.letsencrypt.org/acme/new-order
2025/02/16 12:48:19 [DEBUG] POST https://acme-v02.api.letsencrypt.org/acme/authz/2232015615/476825680515
2025/02/16 12:48:20 [INFO] [node.comodin.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz/2232015615/476825680515
2025/02/16 12:48:20 [INFO] [node.comodin.com] acme: Could not find solver for: tls-alpn-01
2025/02/16 12:48:20 [INFO] [node.comodin.com] acme: Could not find solver for: http-01
2025/02/16 12:48:20 [INFO] [node.comodin.com] acme: use dns-01 solver
2025/02/16 12:48:20 [INFO] [node.comodin.com] acme: Preparing to solve DNS-01
2025/02/16 12:48:20 [INFO] [node.comodin.com] acme: Trying to solve DNS-01
2025/02/16 12:48:20 [INFO] [node.comodin.com] acme: Checking DNS record propagation. [nameservers=127.0.0.1:53]
2025/02/16 12:48:22 [INFO] Wait for propagation [timeout: 2m0s, interval: 2s]
2025/02/16 12:48:22 [INFO] [node.comodin.com] acme: Waiting for DNS record propagation.
2025/02/16 12:48:24 [INFO] [node.comodin.com] acme: Waiting for DNS record propagation.
2025/02/16 12:48:26 [INFO] [node.comodin.com] acme: Waiting for DNS record propagation.
2025/02/16 12:48:28 [INFO] [node.comodin.com] acme: Waiting for DNS record propagation.
2025/02/16 12:48:31 [INFO] [node.comodin.com] acme: Waiting for DNS record propagation.
2025/02/16 12:48:33 [INFO] [node.comodin.com] acme: Waiting for DNS record propagation.
2025/02/16 12:48:35 [DEBUG] POST https://acme-v02.api.letsencrypt.org/acme/chall/2232015615/476825680515/uHmEtw
2025/02/16 12:48:35 [DEBUG] POST https://acme-v02.api.letsencrypt.org/acme/authz/2232015615/476825680515
2025/02/16 12:48:39 [DEBUG] POST https://acme-v02.api.letsencrypt.org/acme/authz/2232015615/476825680515
2025/02/16 12:48:39 [INFO] [node.comodin.com] The server validated our request
2025/02/16 12:48:39 [INFO] [node.comodin.com] acme: Cleaning DNS-01 challenge
2025/02/16 12:48:40 [INFO] [node.comodin.com] acme: Validations succeeded; requesting certificates
2025/02/16 12:48:40 [DEBUG] POST https://acme-v02.api.letsencrypt.org/acme/finalize/2232015615/354971124435
2025/02/16 12:48:41 [DEBUG] POST https://acme-v02.api.letsencrypt.org/acme/cert/04076f25b51637c11673673728aa3373248c
2025/02/16 12:48:41 [DEBUG] POST https://acme-v02.api.letsencrypt.org/acme/cert/04076f25b51637c11673673728aa3373248c/1
2025/02/16 12:48:41 [INFO] [node.comodin.com] Server responded with a certificate.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Die Zertifikate liegen hier: /usr/local/etc/lego/certificates/&lt;/p&gt;
&lt;p&gt;&lt;a name="nginx"&gt; &lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;nginx installieren&lt;/h2&gt;
&lt;p&gt;Eingehende SSL-Verbindungen über Port 50002 werden von nginx an den electrs-Port 50001 gestreamt.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;portmaster www/nginx

sudo sysrc nginx_enable=yes

sudo service nginx start&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;config&lt;/h4&gt;
&lt;p&gt;/usr/local/etc/nginx/nginx.conf&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;load_module /usr/local/libexec/nginx/ngx_stream_module.so;

stream {
        upstream electrs {
                server 10.0.0.31:50001;
        }

        server {
                listen 50002 ssl;
                server_name node.comodin.com;
                proxy_pass electrs;

                ssl_certificate /usr/local/etc/lego/certificates/node.comodin.com.crt;
                ssl_certificate_key /usr/local/etc/lego/certificates/node.comodin.com.key;
                ssl_session_cache shared:SSL:1m;
                ssl_session_timeout 4h;
                ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
                ssl_prefer_server_ciphers on;
        }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;sudo service nginx restart&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a name="Fritz!Box"&gt; &lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Fritz!Box Port Freigabe&lt;/h2&gt;
&lt;p&gt;Im DNS legt man (sofern keine feste IP vorhanden ist) einen CNAME auf die Ihre MyFRITZ!-Adresse an. Die Ihre MyFRITZ!-Adresse finden man in der Fritz!Box im Menü Internet -&amp;gt; MyFRITZ!-Konto. Der Hostname des Mac mini sollte die komplette Domain lauten.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;❯ hostname
node.comodin.com&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dann kann in der Fritz!Box die Freigabe eingerichtet werden. Zum einfachen Testen, habe ich auch https Port 443 geöffnet und mit dem Webbrowser getestet ob die Webseite vom nginx abgerufen werden kann.&lt;/p&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/8ce0ab8982da834969dd31e7edbe9537/Bildschirmfoto2025-02-18um12.33.30.png" alt=""&gt;
&lt;p&gt;&lt;a name="BitBox"&gt; &lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;BitBox auf eigene Bitcoin Full Node einstellen&lt;/h2&gt;
&lt;p&gt;Jetzt richten wir in der BitBox den Zugang zur eigenen Bitcoin Full Node ein.&lt;/p&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/8ce0ab8982da834969dd31e7edbe9537/bitbox-1.png" alt=""&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/8ce0ab8982da834969dd31e7edbe9537/bitbox-2.png" alt=""&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/8ce0ab8982da834969dd31e7edbe9537/bitbox-3.png" alt=""&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/8ce0ab8982da834969dd31e7edbe9537/bitbox-4.png" alt=""&gt;</description>
      <pubDate>Thu, 27 Feb 2025 11:30:00 +0100</pubDate>
      <guid isPermaLink="false">8ce0ab8982da834969dd31e7edbe9537</guid>
    </item>
    <item>
      <title>Filemaker Server 2024, Letsencrypt, lego, Hetzner Api</title>
      <link>https://comodin.com/filemaker-server-2024-letsencrypt-lego-hetzner-api</link>
      <image/>
      <description>&lt;p&gt;Mac mini M1, macOS Sequoia 15.3, Filemaker Server 2024.&lt;/p&gt;
&lt;p&gt;Ich möchte über die Hetzner-Api mittels lego ein Zertifikat von Letsencrypt holen ohne dafür am Filemaker Server den Port 80 zu öffnen. Das funktioniert auch mit vielen anderen DNS-Providern, eine &lt;a href="https://go-acme.github.io/lego/dns/#dns-providers"&gt;Liste gibt es auf der lego Webseite&lt;/a&gt;. &lt;/p&gt;
&lt;h3&gt;Quellen&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Lego: &lt;a href="https://go-acme.github.io/lego/dns/hetzner/index.html"&gt;https://go-acme.github.io/lego/dns/hetzner/index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hetzner-Api: &lt;a href="https://dns.hetzner.com/api-docs"&gt;https://dns.hetzner.com/api-docs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Claris: &lt;a href="https://help.claris.com/en/server-installation-configuration-guide/content/using-certificate-command.html"&gt;https://help.claris.com/en/server-installation-configuration-guide/content/using-certificate-command.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;lego installieren&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;brew update
==&amp;gt; Updating Homebrew...
Already up-to-date.

brew upgrade

brew install lego&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Zertifikat holen&lt;/h3&gt;
&lt;p&gt;Ich habe mir für meine Domain ein Shell-Script geschrieben. Den Api-Key muss man sich bei Hetzner in seinem Account anlegen.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nano ~/lego-run.sh&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/sh

PATH="/Users/ICH"
DOMAIN="FilemakerServer.domain.com"
EMAIL="email@domain.com"
# mein Hetzner Api-Key
KEY="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

cd ${PATH}
HETZNER_API_KEY=${KEY} /opt/homebrew/bin/lego --email ${EMAIL} --dns hetzner -d ${DOMAIN} run&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;chmod 750 ~/lego-run.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Und dann ausgeführt.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./lego-run.sh

2025/02/08 17:08:59 No key found for account email@domain.com. Generating a P256 key.
2025/02/08 17:08:59 Saved key to /Users/ICH/.lego/accounts/acme-v02.api.letsencrypt.org/email@domain.com/keys/email@domain.com.key
2025/02/08 17:08:59 [DEBUG] GET https://acme-v02.api.letsencrypt.org/directory
2025/02/08 17:09:00 Please review the TOS at https://letsencrypt.org/documents/LE-SA-v1.4-April-3-2024.pdf
Do you accept the TOS? Y/n
Y
2025/02/08 17:09:03 [INFO] acme: Registering account for email@domain.com
2025/02/08 17:09:03 [DEBUG] HEAD https://acme-v02.api.letsencrypt.org/acme/new-nonce
2025/02/08 17:09:04 [DEBUG] POST https://acme-v02.api.letsencrypt.org/acme/new-acct
!!!! HEADS UP !!!!

Your account credentials have been saved in your Let's Encrypt
configuration directory at "/Users/ICH/.lego/accounts".

You should make a secure backup of this folder now. This
configuration directory will also contain certificates and
private keys obtained from Let's Encrypt so making regular
backups of this folder is ideal.
2025/02/08 17:09:04 [INFO] [FilemakerServer.domain.com] acme: Obtaining bundled SAN certificate
2025/02/08 17:09:04 [DEBUG] POST https://acme-v02.api.letsencrypt.org/acme/new-order
2025/02/08 17:09:04 [DEBUG] POST https://acme-v02.api.letsencrypt.org/acme/authz/22165/472925
2025/02/08 17:09:04 [INFO] [FilemakerServer.domain.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz/225/4725
2025/02/08 17:09:04 [INFO] [FilemakerServer.domain.com] acme: Could not find solver for: tls-alpn-01
2025/02/08 17:09:04 [INFO] [FilemakerServer.domain.com] acme: Could not find solver for: http-01
2025/02/08 17:09:04 [INFO] [FilemakerServer.domain.com] acme: use dns-01 solver
2025/02/08 17:09:04 [INFO] [FilemakerServer.domain.com] acme: Preparing to solve DNS-01
2025/02/08 17:09:05 [INFO] [FilemakerServer.domain.com] acme: Trying to solve DNS-01
2025/02/08 17:09:05 [INFO] [FilemakerServer.domain.com] acme: Checking DNS record propagation. [nameservers=1.1.1.1:53,9.9.9.9:53]
2025/02/08 17:09:07 [INFO] Wait for propagation [timeout: 2m0s, interval: 2s]
2025/02/08 17:09:07 [INFO] [FilemakerServer.domain.com] acme: Waiting for DNS record propagation.
2025/02/08 17:09:10 [INFO] [FilemakerServer.domain.com] acme: Waiting for DNS record propagation.
2025/02/08 17:09:12 [INFO] [FilemakerServer.domain.com] acme: Waiting for DNS record propagation.
2025/02/08 17:09:14 [INFO] [FilemakerServer.domain.com] acme: Waiting for DNS record propagation.
2025/02/08 17:09:16 [INFO] [FilemakerServer.domain.com] acme: Waiting for DNS record propagation.
2025/02/08 17:09:18 [INFO] [FilemakerServer.domain.com] acme: Waiting for DNS record propagation.
2025/02/08 17:09:20 [DEBUG] POST https://acme-v02.api.letsencrypt.org/acme/chall/2265/425/0EHnPw
2025/02/08 17:09:20 [DEBUG] POST https://acme-v02.api.letsencrypt.org/acme/authz/225/47725
2025/02/08 17:09:24 [DEBUG] POST https://acme-v02.api.letsencrypt.org/acme/authz/2217165/47293725
2025/02/08 17:09:24 [INFO] [FilemakerServer.domain.com] The server validated our request
2025/02/08 17:09:24 [INFO] [FilemakerServer.domain.com] acme: Cleaning DNS-01 challenge
2025/02/08 17:09:25 [INFO] [FilemakerServer.domain.com] acme: Validations succeeded; requesting certificates
2025/02/08 17:09:25 [DEBUG] POST https://acme-v02.api.letsencrypt.org/acme/finalize/225/3525
2025/02/08 17:09:27 [DEBUG] POST https://acme-v02.api.letsencrypt.org/acme/cert/03c4c0
2025/02/08 17:09:27 [DEBUG] POST https://acme-v02.api.letsencrypt.org/acme/cert/03c4c0/1
2025/02/08 17:09:27 [INFO] [FilemakerServer.domain.com] Server responded with a certificate.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Das Zertifikat muss für den Import in den Ordner des Filemaker Servers kopiert werden und die Rechte müssen gesetzt werden, sonst klappt auch der Import von der Admin-Console nicht.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cp ~/.lego/certificates/*.crt /Library/FileMaker\ Server/CStore/
cp ~/.lego/certificates/*.key /Library/FileMaker\ Server/CStore/
chmod 640 /Library/FileMaker\ Server/CStore/*.crt
chmod 640 /Library/FileMaker\ Server/CStore/*.key
chown fmserver:fmsadmin /Library/FileMaker\ Server/CStore/*.crt
chown fmserver:fmsadmin /Library/FileMaker\ Server/CStore/*.key&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Zertifikat automatisch erneuern&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;nano ~/lego-renew.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dieses Script wird bei mir 1x / Woche ausgeführt. Es prüft, ob das Zertifikat erneuert werden muss. Wenn es erneuter wird, dann wird im Anschluss das Script lego-hook.sh ausgeführt.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/sh

PATH="/Users/ICH"
DOMAIN="FilemakerServer.domain.com"
EMAIL="email@domain.com"
# mein Hetzner Api-Key
KEY="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
LOGFILE="/tmp/legorenew.log"

cd ${PATH}
HETZNER_API_KEY=${KEY} /opt/homebrew/bin/lego --email ${EMAIL} --dns hetzner -d ${DOMAIN} renew --renew-hook=${PATH}/lego-hook.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So sieht die Ausgabe aus, wenn das Zertifikat nicht erneuert werden muss.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./lego-renew.sh
2025/02/08 17:23:59 [DEBUG] GET https://acme-v02.api.letsencrypt.org/directory
2025/02/08 17:23:59 [DEBUG] GET https://acme-v02.api.letsencrypt.org/draft-ietf-acme-ari-03/renewalInfo/ky....._TA
2025/02/08 17:24:00 [INFO] [FilemakerServer.domain.com] acme: renewalInfo endpoint indicates that renewal is not needed
2025/02/08 17:24:00 [FilemakerServer.domain.com] The certificate expires in 89 days, the number of days defined to perform the renewal is 30: no renewal.&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;das Skript für den Hook&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;nano ~/lego-hook.sh&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/sh

# Dieses Skript wird nur ausgeführt, wenn das Skript
# lego-renew.sh die Zertifikate erneuert hat.

DOMAIN="FilemakerServer.domain.com"
SERVER_PATH="/Library/FileMaker Server/"
# Benutzername/Pass vom Filemaker-Admin
USER="ICH"
PASS="xxxxxx-xxxxx-xxxxxx"
LOGFILE="/tmp/legorenew.log"
# der Ort wo lego das Zertifikat abgelegt hat
certfile="/Users/ICH/.lego/certificates/${DOMAIN}.crt"
keyfile="/Users/ICH/.lego/certificates/${DOMAIN}.key"

# Das Zertifikat in den Order für Filemaker Server kopieren
cp "/Users/ICH/.lego/certificates/${DOMAIN}.crt" "${SERVER_PATH}CStore/${DOMAIN}.crt"
cp "/Users/ICH/.lego/certificates/${DOMAIN}.key" "${SERVER_PATH}CStore/${DOMAIN}.key"

# Die Rechte für den Filemaker Server setzen
chmod 640 "${SERVER_PATH}CStore/${DOMAIN}.crt"
chmod 640 "${SERVER_PATH}CStore/${DOMAIN}.key"
chown fmserver:fmsadmin "${SERVER_PATH}CStore/${DOMAIN}.crt"
chown fmserver:fmsadmin "${SERVER_PATH}CStore/${DOMAIN}.key"

# Das Zertifikat in den Filemaker Server importieren
fmsadmin certificate delete -y -u "${USER}" -p "${PASS}"
fmsadmin certificate import "${SERVER_PATH}CStore/${DOMAIN}.crt" --keyfile "${SERVER_PATH}CStore/${DOMAIN}.key" -y -u "${USER}" -p "${PASS}"  &amp;gt;&amp;gt; "${LOGFILE}"

# Den Filemaker Server neustarten
launchctl stop com.filemaker.fms
sleep 60
launchctl start com.filemaker.fms&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Die Skripte bewegen und Rechte setzen&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;cd ~/
sudo mv lego-*.sh /usr/local/bin/
sudo chown root:wheel /usr/local/bin/lego-*.sh
sudo chmod 750 /usr/local/bin/lego-*.sh

ln -s /usr/local/bin/lego-hook.sh
ln -s /usr/local/bin/lego-renew.sh&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;LaunchDaemon&lt;/h3&gt;
&lt;p&gt;Jeden Samstag früh um 4:29 Uhr soll lego-renew.sh das Zertifikat prüfen, ggf. erneuern und mittels lego-hook.sh das Zertifikat in den Filemaker Server laden und diesen dann neu starten.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo nano /Library/LaunchDaemons/com.filemaker.fmcertrenew.plist&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&amp;gt;
&amp;lt;plist version="1.0"&amp;gt;
&amp;lt;dict&amp;gt;
    &amp;lt;key&amp;gt;EnvironmentVariables&amp;lt;/key&amp;gt;
    &amp;lt;dict&amp;gt;
        &amp;lt;key&amp;gt;PATH&amp;lt;/key&amp;gt;
        &amp;lt;string&amp;gt;/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin&amp;lt;/string&amp;gt;
    &amp;lt;/dict&amp;gt;
    &amp;lt;key&amp;gt;Label&amp;lt;/key&amp;gt;
    &amp;lt;string&amp;gt;com.filemaker.fmcertrenew&amp;lt;/string&amp;gt;
    &amp;lt;key&amp;gt;ProgramArguments&amp;lt;/key&amp;gt;
    &amp;lt;array&amp;gt;
        &amp;lt;string&amp;gt;/bin/sh&amp;lt;/string&amp;gt;
        &amp;lt;string&amp;gt;/usr/local/bin/lego-renew.sh&amp;lt;/string&amp;gt;
    &amp;lt;/array&amp;gt;
    &amp;lt;key&amp;gt;RunAtLoad&amp;lt;/key&amp;gt;
    &amp;lt;false/&amp;gt;
    &amp;lt;key&amp;gt;AbandonProcessGroup&amp;lt;/key&amp;gt;
    &amp;lt;true/&amp;gt;
    &amp;lt;key&amp;gt;StartCalendarInterval&amp;lt;/key&amp;gt;
    &amp;lt;array&amp;gt;
        &amp;lt;dict&amp;gt;
            &amp;lt;key&amp;gt;Hour&amp;lt;/key&amp;gt;
            &amp;lt;integer&amp;gt;4&amp;lt;/integer&amp;gt;
            &amp;lt;key&amp;gt;Minute&amp;lt;/key&amp;gt;
            &amp;lt;integer&amp;gt;29&amp;lt;/integer&amp;gt;
            &amp;lt;key&amp;gt;Weekday&amp;lt;/key&amp;gt;
            &amp;lt;integer&amp;gt;6&amp;lt;/integer&amp;gt;
        &amp;lt;/dict&amp;gt;
    &amp;lt;/array&amp;gt;
&amp;lt;/dict&amp;gt;
&amp;lt;/plist&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>
      <pubDate>Sun, 09 Feb 2025 17:06:27 +0100</pubDate>
      <guid isPermaLink="false">de16c10bca65f9f736611fa8ada52aa7</guid>
    </item>
    <item>
      <title>R.I.P. issy</title>
      <link>https://comodin.com/issy-2014</link>
      <image>https://comodin.com/bl-content/uploads/pages/7eb93e7393af5b52349f98dd38ddc847/issy.jpg</image>
      <description/>
      <pubDate>Thu, 15 Aug 2024 12:00:00 +0200</pubDate>
      <guid isPermaLink="false">7eb93e7393af5b52349f98dd38ddc847</guid>
    </item>
    <item>
      <title>Raspberrypi 5 und 4Tb nvme-SSD und Pineberry bottom HAT</title>
      <link>https://comodin.com/raspberrypi-5-und-4tb-nvme-ssd</link>
      <image>https://comodin.com/bl-content/uploads/pages/584fe8efc120be9e3e23f745a8cf24f0/IMG_2594.jpeg</image>
      <description>&lt;pre&gt;&lt;code class="language-sh"&gt;sudo apt-get update&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;sudo apt-get upgrade&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;sudo apt install gparted gdisk dosfstools mtools iotop htop -y&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;( falls noch nicht ,.. install oh-my-zsh )&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;lsblk

NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
mmcblk0     179:0    0 29.5G  0 disk
├─mmcblk0p1 179:1    0  512M  0 part /boot/firmware
└─mmcblk0p2 179:2    0   29G  0 part /
nvme0n1     259:0    0  3.6T  0 disk
├─nvme0n1p1 259:1    0  200M  0 part
└─nvme0n1p2 259:2    0  3.6T  0 part&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Partitionieren&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;sudo cgdisk /dev/nvme0n1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Partition 1 &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;First sector → Enter &lt;/li&gt;
&lt;li&gt;Size in sectors or {KMGTP} → 512M &lt;/li&gt;
&lt;li&gt;Hex code or GUID → 0700 &lt;/li&gt;
&lt;li&gt;Enter new partition name → bootfs &lt;/li&gt;
&lt;li&gt;Jetzt mit dem Cursor unten auf free space navigieren!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Partition 2 &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;First sector → Enter &lt;/li&gt;
&lt;li&gt;Size in sectors or {KMGTP} → Enter &lt;/li&gt;
&lt;li&gt;Hex code or GUID → Enter &lt;/li&gt;
&lt;li&gt;Enter new partition name → rootfs &lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;Part. #     Size        Partition Type            Partition Name
----------------------------------------------------------------
            1007.0 KiB  free space
   1        512.0 MiB   Microsoft basic data      bootfs
   2        3.6 TiB     Linux filesystem          rootfs
            839.5 KiB   free space&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Prüfen&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;sudo sgdisk -p /dev/nvme0n1

Disk /dev/nvme0n1: 7814037168 sectors, 3.6 TiB
Model: Fanxiang S660 4TB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 7BC06852-CADB-4BE5-9EA2-662730922969
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 7814037134
Partitions will be aligned on 2048-sector boundaries
Total free space is 3693 sectors (1.8 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         1050623   512.0 MiB   0700  bootfs
   2         1050624      7814035455   3.6 TiB     8300  rootfs&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;sudo reboot&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;lsblk

NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
mmcblk0     179:0    0 29.5G  0 disk
├─mmcblk0p1 179:1    0  512M  0 part /boot/firmware
└─mmcblk0p2 179:2    0   29G  0 part /
nvme0n1     259:0    0  3.6T  0 disk
├─nvme0n1p1 259:1    0  512M  0 part
└─nvme0n1p2 259:2    0  3.6T  0 part&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Formatieren&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;sudo mkfs.vfat /dev/nvme0n1p1 -n bootfs -v

mkfs.fat 4.2 (2021-01-31)
Auto-selecting FAT32 for large filesystem
mkfs.fat: Warning: lowercase labels might not work properly on some systems
/dev/nvme0n1p1 has 64 heads and 32 sectors per track,
hidden sectors 0x2000;
logical sector size is 512,
using 0xf8 media descriptor, with 1048576 sectors;
drive number 0x80;
filesystem has 2 32-bit FATs and 8 sectors per cluster.
FAT size is 1024 sectors, and provides 130812 clusters.
There are 32 reserved sectors.
Volume ID is e82ef657, volume label bootfs.&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;sudo mkfs.ext4 /dev/nvme0n1p2 -L rootfs -v

mke2fs 1.47.0 (5-Feb-2023)
fs_types for mke2fs.conf resolution: 'ext4'
Discarding device blocks: done
Filesystem label=rootfs
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
244162560 inodes, 976623104 blocks
48831155 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=3124756480
29805 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Filesystem UUID: e60c2e38-853d-4df6-9848-a730e7e84484
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
    4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
    102400000, 214990848, 512000000, 550731776, 644972544

Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Mounten&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;sudo mkdir klonboot&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;sudo mkdir klonfs&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;sudo mount /dev/nvme0n1p1 /klonboot&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;sudo mount /dev/nvme0n1p2 /klonfs&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Klonen&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;sudo rsync -rltDv --numeric-ids --info=progress2 /boot/firmware/ /klonboot&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;sudo rsync -axHAWXSv --numeric-ids --info=progress2 / /klonfs&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;fstab anpassen&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL,PARTUUID

NAME        FSTYPE  SIZE MOUNTPOINT     LABEL  PARTUUID
mmcblk0            29.5G
├─mmcblk0p1 vfat    512M /boot/firmware bootfs ccf43481-01
└─mmcblk0p2 ext4     29G /              rootfs ccf43481-02
nvme0n1             3.6T
├─nvme0n1p1 vfat    512M /klonboot      bootfs a65da01e-f259-4250-a968-edac1cdeb20d
└─nvme0n1p2 ext4    3.6T /klonfs        rootfs 144c2490-ce9b-4298-8b78-cb11e060df3c&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;sudo nano /klonfs/etc/fstab

proc            /proc           proc    defaults          0       0
PARTUUID=a65da01e-f259-4250-a968-edac1cdeb20d  /boot/firmware  vfat    defaults          0       2
PARTUUID=144c2490-ce9b-4298-8b78-cb11e060df3c  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;cmdline.txt anpassen&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;sudo nano /klonboot/cmdline.txt

console=serial0,115200 console=tty1 root=PARTUUID=144c2490-ce9b-4298-8b78-cb11e060df3c rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cfg80211.ieee80211_regdom=DE&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Finale&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;sudo umount /klonboot &amp;amp;&amp;amp; sudo umount /klonfs&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;sudo poweroff&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;SD karte entfernen und von SSD starten :)&lt;/p&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/584fe8efc120be9e3e23f745a8cf24f0/01.png" alt=""&gt;
&lt;p&gt;Quelle: &lt;a href="https://www.youtube.com/watch?v=3MhRMZwY4Ho"&gt;https://www.youtube.com/watch?v=3MhRMZwY4Ho&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Sun, 04 Feb 2024 23:55:16 +0100</pubDate>
      <guid isPermaLink="false">584fe8efc120be9e3e23f745a8cf24f0</guid>
    </item>
    <item>
      <title>Best Friends</title>
      <link>https://comodin.com/fernseher</link>
      <image>https://comodin.com/bl-content/uploads/pages/40cf3ed5e0ca4bc667cc59560377ea07/IMG_1205.jpeg</image>
      <description/>
      <pubDate>Sun, 17 Sep 2023 12:24:09 +0200</pubDate>
      <guid isPermaLink="false">40cf3ed5e0ca4bc667cc59560377ea07</guid>
    </item>
    <item>
      <title>FileMaker Server 2023 - Letsencrypt</title>
      <link>https://comodin.com/filemaker-server-2023-letsencrypt</link>
      <image/>
      <description>&lt;p&gt;Mac mini M1, macOS Ventura 13.5, Filemaker Server 2023&lt;/p&gt;
&lt;h1&gt;Installation&lt;/h1&gt;
&lt;p&gt;Homebrew installieren&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

==&amp;gt; Next steps:
- Run these two commands in your terminal to add Homebrew to your PATH:
    (echo; echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') &amp;gt;&amp;gt; /Users/gent/.zprofile
    eval "$(/opt/homebrew/bin/brew shellenv)"&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;certbot installieren&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# brew install certbot&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;certbot testen&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# sudo certbot renew
Password:
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
No renewals were attempted.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Den MacOS Standard-Webroot zum Webroot des Filemaker Servers linken&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# cd /Library/WebServer
# sudo ln -s /Library/FileMaker\ Server/HTTPServer/htdocs/&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;Zertifikat&lt;/h1&gt;
&lt;p&gt;holen&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# sudo certbot certonly --webroot -d fm.comodin.com --agree-tos -m fm@comodin.com --preferred-challenges "http"
Password:
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Account registered.
Requesting a certificate for fm.comodin.com
Input the webroot for fm.comodin.com: (Enter 'c' to cancel): /Library/WebServer/htdocs

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/fm.comodin.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/fm.comodin.com/privkey.pem
This certificate expires on 2023-10-28.
These files will be updated when the certificate renews.

NEXT STEPS:
- The certificate will need to be renewed before it expires. Certbot can automatically renew the certificate in the background, but you may need to take steps to enable that functionality. See https://certbot.org/renewal-setup for instructions.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;prüfen&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# sudo certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
  Certificate Name: fm.comodin.com
    Serial Number: 33...3e5
    Key Type: ECDSA
    Domains: fm.comodin.com
    Expiry Date: 2023-10-28 06:25:10+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/fm.comodin.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/fm.comodin.com/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;erneuern&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# sudo certbot renew
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/fm.comodin.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Certificate not yet due for renewal

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
The following certificates are not due for renewal yet:
  /etc/letsencrypt/live/fm.comodin.com/fullchain.pem expires on 2023-10-28 (skipped)
No renewals were attempted.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;per hand kopieren&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# sudo cp /etc/letsencrypt/live/fm.comodin.com/privkey.pem /Library/FileMaker\ Server/CStore/privkey.pem
# sudo cp /etc/letsencrypt/live/fm.comodin.com/fullchain.pem /Library/FileMaker\ Server/CStore/fullchain.pem&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;die Rechte einstellen&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# sudo chmod 644 /Library/FileMaker\ Server/CStore/privkey.pem&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;per hand in Filemaker Server laden&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# sudo fmsadmin certificate import "/Library/FileMaker Server/CStore/fullchain.pem" --keyfile "/Library/FileMaker Server/CStore/privkey.pem" -y
username (root):(Admin-name aus der FM-Console)
password:
Please restart the FileMaker Server service to apply the change.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Filemaker Server stoppen / starten&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# launchctl stop com.filemaker.fms
# launchctl start com.filemaker.fms&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Stand 2023: der Mac musste neu gestartet werden, damit das Zertifikat geladen wurde. Das o.g. stoppen/starten über launchctl reichte nicht aus.&lt;/p&gt;
&lt;h1&gt;Automatisieren&lt;/h1&gt;
&lt;p&gt;Das Ganze wollen wir jetzt automatisieren. Jede Woche soll certbot automatisch&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;das Zertifikat erneuern&lt;/li&gt;
&lt;li&gt;das Zertifikat in den Filemaker Server laden&lt;/li&gt;
&lt;li&gt;den Filemaker Server neustarten&lt;/li&gt;
&lt;li&gt;uns eine E-Mail senden, damit wir immer im Blick haben was Sache ist&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Benötigt/Vorausgesetzt wird ein laufender postfix auf dem Mac, siehe &lt;a href="https://comodin.com/macos-postfix"&gt;MacOS - postfix&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# sudo nano /usr/local/bin/fmcertrenew.sh&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;fmcertrenew.sh&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;#!/bin/sh

DOMAIN="fm.comodin.com"
EMAIL="fm@comodin.com"
USER="fmuser"
PASS="fmpass"

SERVER_PATH="/Library/FileMaker Server/"
WEB_ROOT="${SERVER_PATH}HTTPServer/htdocs"
LOGFILE="/tmp/fmcertrenew.log"

# certbot
certbot renew &amp;gt; "${LOGFILE}"
cp "/etc/letsencrypt/live/${DOMAIN}/fullchain.pem" "${SERVER_PATH}CStore/fullchain.pem"
cp "/etc/letsencrypt/live/${DOMAIN}/privkey.pem" "${SERVER_PATH}CStore/privkey.pem"

chmod 640 "${SERVER_PATH}CStore/privkey.pem"

# FileMaker Server
fmsadmin certificate delete -y -u "${USER}" -p "${PASS}"

fmsadmin certificate import "${SERVER_PATH}CStore/fullchain.pem" --keyfile "${SERVER_PATH}CStore/privkey.pem" -y -u "${USER}" -p "${PASS}"  &amp;gt;&amp;gt; "${LOGFILE}"

launchctl stop com.filemaker.fms

sleep 60s

launchctl start com.filemaker.fms

echo "fertig :)"  &amp;gt;&amp;gt; "${LOGFILE}"

mail -s "fmcertrenew.log" "${EMAIL}" &amp;lt; "${LOGFILE}"&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Rechte setzen&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# sudo chmod 750 fmcertrenew.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;das Script testen&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# sudo /usr/local/bin/fmcertrenew.sh
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Cert not yet due for renewal
Restart the FileMaker Server background processes to apply the change.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;die E-Mail sollte so aussehen&lt;/p&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/77c9a51c3f2af5369788532eb4850242/Bildschirmfoto2023-07-30um12.22.56.png" alt=""&gt;
&lt;h1&gt;LaunchDaemon&lt;/h1&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;sudo nano /Library/LaunchDaemons/com.filemaker.fmcertrenew.plist&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Jeden Samstag früh um 4:29 Uhr soll certbot das Zertifikat erneuern und in den Filemaker Server laden&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&amp;gt;
&amp;lt;plist version="1.0"&amp;gt;
&amp;lt;dict&amp;gt;
    &amp;lt;key&amp;gt;EnvironmentVariables&amp;lt;/key&amp;gt;
    &amp;lt;dict&amp;gt;
        &amp;lt;key&amp;gt;PATH&amp;lt;/key&amp;gt;
        &amp;lt;string&amp;gt;/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin&amp;lt;/string&amp;gt;
    &amp;lt;/dict&amp;gt;
    &amp;lt;key&amp;gt;Label&amp;lt;/key&amp;gt;
    &amp;lt;string&amp;gt;com.filemaker.fmcertrenew&amp;lt;/string&amp;gt;
    &amp;lt;key&amp;gt;ProgramArguments&amp;lt;/key&amp;gt;
    &amp;lt;array&amp;gt;
        &amp;lt;string&amp;gt;/bin/sh&amp;lt;/string&amp;gt;
        &amp;lt;string&amp;gt;/usr/local/bin/fmcertrenew.sh&amp;lt;/string&amp;gt;
    &amp;lt;/array&amp;gt;
    &amp;lt;key&amp;gt;RunAtLoad&amp;lt;/key&amp;gt;
    &amp;lt;false/&amp;gt;
    &amp;lt;key&amp;gt;AbandonProcessGroup&amp;lt;/key&amp;gt;
    &amp;lt;true/&amp;gt;
    &amp;lt;key&amp;gt;StartCalendarInterval&amp;lt;/key&amp;gt;
    &amp;lt;array&amp;gt;
        &amp;lt;dict&amp;gt;
            &amp;lt;key&amp;gt;Hour&amp;lt;/key&amp;gt;
            &amp;lt;integer&amp;gt;4&amp;lt;/integer&amp;gt;
            &amp;lt;key&amp;gt;Minute&amp;lt;/key&amp;gt;
            &amp;lt;integer&amp;gt;29&amp;lt;/integer&amp;gt;
            &amp;lt;key&amp;gt;Weekday&amp;lt;/key&amp;gt;
            &amp;lt;integer&amp;gt;6&amp;lt;/integer&amp;gt;
        &amp;lt;/dict&amp;gt;
    &amp;lt;/array&amp;gt;
&amp;lt;/dict&amp;gt;
&amp;lt;/plist&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Rechte anpassen&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# sudo chown root:wheel /Library/LaunchDaemons/com.filemaker.fmcertrenew.plist&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;load&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# sudo launchctl load -w /Library/LaunchDaemons/com.filemaker.fmcertrenew.plist&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;unload&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# sudo launchctl unload /Library/LaunchDaemons/com.filemaker.fmcertrenew.plist&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;prüfen ob es geladen wurde&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# sudo launchctl list | grep com.filemaker
-   0   com.filemaker.httpd.graceful
-   0   com.filemaker.httpd.stop
92024   0   com.filemaker.fms
-   0   com.filemaker.httpd.start
-   0   com.filemaker.fmcertrenew
-   0   com.filemaker.httpd.restart&lt;/code&gt;&lt;/pre&gt;</description>
      <pubDate>Fri, 28 Jul 2023 21:03:06 +0200</pubDate>
      <guid isPermaLink="false">77c9a51c3f2af5369788532eb4850242</guid>
    </item>
    <item>
      <title>Glasfaser direkt am Schreibtisch, Ping:  1ms</title>
      <link>https://comodin.com/glasfaser-direkt-am-schreibtisch</link>
      <image>https://comodin.com/bl-content/uploads/pages/66be7ce770d1f2ea87d5876fbac1bc8b/dnsnet-klein.png</image>
      <description>&lt;img src="https://comodin.com/bl-content/uploads/pages/66be7ce770d1f2ea87d5876fbac1bc8b/Bildschirmfoto2022-06-13um07.28.47.png" alt=""&gt;</description>
      <pubDate>Mon, 20 Jun 2022 00:08:43 +0200</pubDate>
      <guid isPermaLink="false">66be7ce770d1f2ea87d5876fbac1bc8b</guid>
    </item>
    <item>
      <title>FRITZ!Box - Verschlüsselte Namensauflösung im Internet (DNS over TLS)</title>
      <link>https://comodin.com/fritz-box-verschl%C3%BCsselte-namensaufl%C3%B6sung-im-internet-dns-over-tls</link>
      <image>https://comodin.com/bl-content/uploads/pages/a102e54f55bb236c86a1ec37f7fd2bd5/dns-status.png</image>
      <description>&lt;h1&gt;Einstellen&lt;/h1&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/a102e54f55bb236c86a1ec37f7fd2bd5/dns-prefs.png" alt=""&gt;
&lt;h1&gt;Status prüfen&lt;/h1&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/a102e54f55bb236c86a1ec37f7fd2bd5/dns-status.png" alt=""&gt;</description>
      <pubDate>Tue, 21 Dec 2021 23:11:08 +0100</pubDate>
      <guid isPermaLink="false">a102e54f55bb236c86a1ec37f7fd2bd5</guid>
    </item>
    <item>
      <title>macOS - löschen von restricted Dateien</title>
      <link>https://comodin.com/macos-l%C3%B6schen-von-restricted-dateien</link>
      <image>https://comodin.com/bl-content/uploads/pages/45c7e089223d1655deb0b4020737411f/Bildschirmfoto2021-12-05um23.03.41.png</image>
      <description>&lt;h2&gt;Das Problem&lt;/h2&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/45c7e089223d1655deb0b4020737411f/Bildschirmfoto2021-12-05um23.03.41.png" alt=""&gt;
&lt;p&gt;Im Terminal sieht das so aus:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;gent@MacBookPro SharedSupport % ls -lO
total 9222688
-rw-r--r--  1 root  wheel  restricted 4722014048  5 Dez 18:20 InstallESD.dmg&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Die Lösung&lt;/h2&gt;
&lt;p&gt;Den Mac im Recovery-Modus neu starten &lt;kbd&gt;command&lt;/kbd&gt; + &lt;kbd&gt;R&lt;/kbd&gt; gedrückt halten.&lt;/p&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/45c7e089223d1655deb0b4020737411f/IMG_7949.jpg" alt=""&gt;
&lt;p&gt;Im Menü Dienstprogramme das Terminal starten&lt;/p&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/45c7e089223d1655deb0b4020737411f/IMG_7951.jpg" alt=""&gt;
&lt;p&gt;Nach dem Neustart die Datei löschen bzw. Papierkorb leeren.
Anschließend wieder im Recovery-Modus starten und im Terminal csrutil anschalten.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# csrutil enable

#reboot&lt;/code&gt;&lt;/pre&gt;</description>
      <pubDate>Sun, 05 Dec 2021 23:11:49 +0100</pubDate>
      <guid isPermaLink="false">45c7e089223d1655deb0b4020737411f</guid>
    </item>
    <item>
      <title>FreeBSD 13 auf SSD am Raspberry pi 4</title>
      <link>https://comodin.com/freebsd-13-auf-raspberry-pi-4</link>
      <image>https://comodin.com/bl-content/uploads/pages/fe1335cd39eec7e2513ac3b1e8de236f/Bildschirmfoto2021-11-20um09.31.55.png</image>
      <description>&lt;p&gt;Quellen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://wiki.freebsd.org/action/show/arm/Raspberry%20Pi?action=show&amp;amp;redirect=FreeBSD%2Farm%2FRaspberry+Pi"&gt;https://wiki.freebsd.org/action/show/arm/Raspberry%20Pi?action=show&amp;amp;redirect=FreeBSD%2Farm%2FRaspberry+Pi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://download.freebsd.org/ftp/releases/arm64/aarch64/ISO-IMAGES/"&gt;https://download.freebsd.org/ftp/releases/arm64/aarch64/ISO-IMAGES/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.raspberrypi.com/software/"&gt;https://www.raspberrypi.com/software/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;SSD vorbereiten&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Das aktuelle FreeBSD RELEASE laden: &lt;a href="https://download.freebsd.org/ftp/releases/arm64/aarch64/ISO-IMAGES/"&gt;https://download.freebsd.org/ftp/releases/arm64/aarch64/ISO-IMAGES/&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Den Raspberry Pi Imager laden: &lt;a href="https://www.raspberrypi.com/softwar"&gt;https://www.raspberrypi.com/softwar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Die SSD an den Mac stecken und den Imager starten&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/fe1335cd39eec7e2513ac3b1e8de236f/Bildschirmfoto2021-11-20um09.31.55.png" alt=""&gt;
&lt;ul&gt;
&lt;li&gt;Bei SD-Karte die SSD auswählen, installieren .. fertig.&lt;/li&gt;
&lt;li&gt;Die SSD an den blauen USB-Port des Raspberry Pi stecken&lt;/li&gt;
&lt;li&gt;falls vorhanden, die SD-Karte aus dem Raspberry Pi entfernen&lt;/li&gt;
&lt;li&gt;den Raspberry Pi starten und mit root/root anmelden.&lt;/li&gt;
&lt;/ul&gt;</description>
      <pubDate>Thu, 18 Nov 2021 18:28:29 +0100</pubDate>
      <guid isPermaLink="false">fe1335cd39eec7e2513ac3b1e8de236f</guid>
    </item>
    <item>
      <title>Java für Apple Silicon M1</title>
      <link>https://comodin.com/minecraft-server-auf-apple-silicon-m1</link>
      <image>https://comodin.com/bl-content/uploads/pages/fc58d60529966e8c8c7a0a09bb333e81/Bildschirmfoto2021-11-17um12.10.19.png</image>
      <description>&lt;p&gt;macOS Monterey Version 12.0.1 kommt ohne Java&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# java -version
The operation couldn’t be completed. Unable to locate a Java Runtime.
Please visit http://www.java.com for information on installing Java.&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Java für Apple Silicon installieren&lt;/h2&gt;
&lt;p&gt;Download: &lt;a href="https://www.azul.com/downloads/?os=macos&amp;amp;architecture=arm-64-bit&amp;amp;package=jdk"&gt;https://www.azul.com/downloads/?os=macos&amp;amp;architecture=arm-64-bit&amp;amp;package=jdk&lt;/a&gt;&lt;/p&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/fc58d60529966e8c8c7a0a09bb333e81/Bildschirmfoto2021-11-16um22.04.50.png" alt=""&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# java -version
openjdk version "17.0.1" 2021-10-19 LTS
OpenJDK Runtime Environment Zulu17.30+15-CA (build 17.0.1+12-LTS)
OpenJDK 64-Bit Server VM Zulu17.30+15-CA (build 17.0.1+12-LTS, mixed mode, sharing)

# javac -version
javac 17.0.1&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Minecraft Server installieren&lt;/h2&gt;
&lt;p&gt;Quelle: &lt;a href="https://paper.readthedocs.io/en/latest/server/getting-started.html"&gt;https://paper.readthedocs.io/en/latest/server/getting-started.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Download: &lt;a href="https://papermc.io/downloads"&gt;https://papermc.io/downloads&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Den Minecraft Server (zb. die Datei paper-1.17.1-384.jar) in einen Ordner legen und durch doppelklick starten.&lt;/p&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/fc58d60529966e8c8c7a0a09bb333e81/Bildschirmfoto2021-11-17um12.19.16.png" alt=""&gt;
&lt;h2&gt;Minecraft Server im Hintergrund&lt;/h2&gt;
&lt;p&gt;Der Server kann auch im Hintergrund über Terminal gestartet werden.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# java -Xms2G -Xmx2G -jar paper-1.17.1-384.jar --nogui

Downloading vanilla jar...
Patching vanilla jar...
System Info: Java 17 (OpenJDK 64-Bit Server VM 17.0.1+12-LTS) Host: Mac OS X 12.0.1 (aarch64)
Loading libraries, please wait...
[22:41:43 ERROR]: Failed to load properties from file: server.properties
[22:41:43 WARN]: Failed to load eula.txt
[22:41:43 INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Die Datei eula.txt öffnen und eula=TRUE setzen.&lt;/p&gt;
&lt;p&gt;Den Server erneut starten, diesmal mit screen:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# screen -dmS minecraft java -jar -Xms2G -Xmx2G -jar paper-1.17.1-384.jar --nogui

System Info: Java 17 (OpenJDK 64-Bit Server VM 17.0.1+12-LTS) Host: Mac OS X 12.0.1 (aarch64)
Loading libraries, please wait...
[22:43:15 INFO]: Environment: authHost='https://authserver.mojang.com', accountsHost='https://api.mojang.com', sessionHost='https://sessionserver.mojang.com', servicesHost='https://api.minecraftservices.com', name='PROD'
[22:43:15 INFO]: Found new data pack file/bukkit, loading it automatically
[22:43:15 INFO]: Reloading ResourceManager: Default, bukkit
[22:43:15 INFO]: Loaded 7 recipes
[22:43:16 INFO]: Starting minecraft server version 1.17.1
[22:43:16 INFO]: Loading properties
[22:43:16 INFO]: This server is running Paper version git-Paper-384 (MC: 1.17.1) (Implementing API version 1.17.1-R0.1-SNAPSHOT) (Git: 51b7b60)
[22:43:16 INFO]: Server Ping Player Sample Count: 12
[22:43:16 INFO]: Using 4 threads for Netty based IO
[22:43:16 INFO]: Default game type: SURVIVAL
[22:43:16 INFO]: Generating keypair
[22:43:16 INFO]: Starting Minecraft server on *:25565
[22:43:16 INFO]: Using default channel type
[22:43:16 INFO]: Paper: Using Java 11 compression from Velocity.
[22:43:16 INFO]: Paper: Using Java cipher from Velocity.
[22:43:16 INFO]: Preparing level "world"
[22:43:17 WARN]: Unable to find spawn biome
[22:43:18 WARN]: Unable to find spawn biome
[22:43:18 INFO]: Preparing start region for dimension minecraft:overworld
[22:43:18 INFO]: Preparing spawn area: 0%
[22:43:18 INFO]: Time elapsed: 291 ms
[22:43:18 INFO]: Preparing start region for dimension minecraft:the_nether
[22:43:18 INFO]: Time elapsed: 102 ms
[22:43:18 INFO]: Preparing start region for dimension minecraft:the_end
[22:43:18 INFO]: Time elapsed: 98 ms
[22:43:18 INFO]: Running delayed init tasks
[22:43:18 INFO]: Done (2.710s)! For help, type "help"
[22:43:18 INFO]: Timings Reset
&amp;gt; &lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Den Server testen&lt;/h2&gt;
&lt;p&gt;vom gleichen Mac aus.. also 127.0.0.1&lt;/p&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/fc58d60529966e8c8c7a0a09bb333e81/Bildschirmfoto2021-11-16um22.45.44.png" alt=""&gt;
&lt;p&gt;WOW, das ist schnell..&lt;/p&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/fc58d60529966e8c8c7a0a09bb333e81/Bildschirmfoto2021-11-16um22.46.27.png" alt=""&gt;
&lt;h2&gt;Minecraft Server stoppen&lt;/h2&gt;
&lt;p&gt;Im Terminal den Server anzeigen&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# screen -r minecraft

System Info: Java 17 (OpenJDK 64-Bit Server VM 17.0.1+12-LTS) Host: Mac OS X 12.0.1 (aarch64)
Loading libraries, please wait...
[23:03:53 INFO]: Environment: authHost='https://authserver.mojang.com', accountsHost='https://api.mojang.com', sessionHost='https://sessionserver.mojang.com', servicesHost='https://api.minecraftservices.com', name='PROD'
[23:03:54 INFO]: Reloading ResourceManager: Default, bukkit
[23:03:54 INFO]: Loaded 7 recipes
[23:03:54 INFO]: Starting minecraft server version 1.17.1
[23:03:54 INFO]: Loading properties
[23:03:54 INFO]: This server is running Paper version git-Paper-384 (MC: 1.17.1) (Implementing API version 1.17.1-R0.1-SNAPSHOT) (Git: 51b7b60)
[23:03:54 INFO]: Server Ping Player Sample Count: 12
[23:03:54 INFO]: Using 4 threads for Netty based IO
[23:03:54 INFO]: Default game type: CREATIVE
[23:03:54 INFO]: Generating keypair
[23:03:55 INFO]: Starting Minecraft server on *:25565
[23:03:55 INFO]: Using default channel type
[23:03:55 INFO]: Paper: Using Java 11 compression from Velocity.
[23:03:55 INFO]: Paper: Using Java cipher from Velocity.
[23:03:55 INFO]: Server permissions file permissions.yml is empty, ignoring it
[23:03:55 INFO]: Preparing level "world"
[23:03:55 INFO]: Preparing start region for dimension minecraft:overworld
[23:03:55 INFO]: Time elapsed: 117 ms
[23:03:55 INFO]: Preparing start region for dimension minecraft:the_nether
[23:03:55 INFO]: Time elapsed: 47 ms
[23:03:55 INFO]: Preparing start region for dimension minecraft:the_end
[23:03:55 INFO]: Time elapsed: 46 ms
[23:03:55 INFO]: Starting remote control listener
[23:03:55 INFO]: Thread RCON Listener started
[23:03:55 INFO]: RCON running on 0.0.0.0:25575
[23:03:55 INFO]: Running delayed init tasks
[23:03:55 INFO]: Done (0.756s)! For help, type "help"
[23:03:55 INFO]: Timings Reset
&amp;gt; &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Den Minecraft Server stoppen &lt;kbd&gt;control&lt;/kbd&gt; + &lt;kbd&gt;c&lt;/kbd&gt;&lt;/p&gt;
&lt;p&gt;Screen verlassen ohne den Minecraft Server zu stoppen mit &lt;kbd&gt;control&lt;/kbd&gt; + &lt;kbd&gt;a&lt;/kbd&gt; und danach &lt;kbd&gt;control&lt;/kbd&gt; + &lt;kbd&gt;d&lt;/kbd&gt;&lt;/p&gt;
&lt;h2&gt;Stromverbrauch&lt;/h2&gt;
&lt;img src="https://comodin.com/bl-content/uploads/pages/fc58d60529966e8c8c7a0a09bb333e81/Bildschirmfoto2021-11-17um12.10.19.png" alt=""&gt;
&lt;p&gt;Mein Mac mini verbraucht im Durchschnitt 15 W beim arbeiten. Wenn der Minecraft Server läuft kommen ca. 8 W dazu, also insgesamt ca. 23 W.&lt;/p&gt;</description>
      <pubDate>Tue, 16 Nov 2021 22:05:38 +0100</pubDate>
      <guid isPermaLink="false">fc58d60529966e8c8c7a0a09bb333e81</guid>
    </item>
    <item>
      <title>FileMaker Server 19 - Letsencrypt</title>
      <link>https://comodin.com/filemaker-server-19-letsencrypt</link>
      <image/>
      <description>&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;Homebrew installieren&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;certbot installieren&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# brew install certbot&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Den MacOS Standard-Webroot zum Webroot des Filemaker Servers linken&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# cd /Library/WebServer
# sudo ln -s /Library/FileMaker\ Server/HTTPServer/htdocs/&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Zertifikat&lt;/h2&gt;
&lt;p&gt;holen&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# sudo certbot certonly --webroot -d fm.comodin.com --agree-tos -m fm@comodin.com --preferred-challenges "http"
    Password:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for fm.comodin.com
Input the webroot for fm.comodin.com: (Enter 'c' to cancel): /Library/WebServer/htdocs
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/fm.comodin.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/fm.comodin.com/privkey.pem
   Your cert will expire on 2019-08-21. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;prüfen&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;sudo certbot certificates                                                                                                               
Password:
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
  Certificate Name: fm.comodin.com
    Serial Number: 46489aa88b4e9bb6e26fba0d984227dde6a
    Key Type: RSA
    Domains: fm.comodin.com
    Expiry Date: 2021-06-08 10:10:42+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/fm.comodin.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/fm.comodin.com/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;erneuern&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;sudo certbot renew
Password:
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/fm.comodin.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert is due for renewal, auto-renewing...
Plugins selected: Authenticator standalone, Installer None
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for fm.comodin.com
Waiting for verification...
Cleaning up challenges

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/fm.comodin.com/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/fm.comodin.com/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;per Hand kopieren&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;sudo cp /etc/letsencrypt/live/fm.comodin.com/privkey.pem /Library/FileMaker\ Server/CStore/privkey.pem
sudo cp /etc/letsencrypt/live/fm.comodin.com/fullchain.pem /Library/FileMaker\ Server/CStore/fullchain.pem&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;die Rechte einstellen&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;sudo chmod 644 /Library/FileMaker\ Server/CStore/privkey.pem&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;in Filemaker Server laden&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;sudo fmsadmin certificate import "/Library/FileMaker Server/CStore/fullchain.pem" --keyfile "/Library/FileMaker Server/CStore/privkey.pem" -y
username (root):gent
password:
Restart the FileMaker Server background processes to apply the change.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Filemaker Server stoppen / starten&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;launchctl stop com.filemaker.fms
launchctl start com.filemaker.fms&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;Automatisieren&lt;/h1&gt;
&lt;p&gt;Das Ganze wollen wir jetzt automatisieren. Jede Woche soll certbot automatisch&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;das Zertifikat erneuern&lt;/li&gt;
&lt;li&gt;das Zertifikat in den Filemaker Server laden&lt;/li&gt;
&lt;li&gt;den Filemaker Server neustarten&lt;/li&gt;
&lt;li&gt;uns eine E-Mail senden, damit wir immer im Blick haben was Sache ist&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Benötigt/Vorausgesetzt wird ein laufender postfix auf dem Mac, siehe &lt;a href="https://comodin.com/macos-postfix"&gt;MacOS - postfix&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;sudo bbedit /usr/local/bin/fmcertrenew.sh&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;fmcertrenew.sh&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;#!/bin/sh

DOMAIN="fm.comodin.com"

EMAIL="fm@comodin.com"

SERVER_PATH="/Library/FileMaker Server/"

WEB_ROOT="${SERVER_PATH}HTTPServer/htdocs"

USER="fmuser"

PASS="fmpass"

LOGFILE="/tmp/fmcertrenew.log"

# certbot

certbot renew &amp;gt; "${LOGFILE}"

cp "/etc/letsencrypt/live/${DOMAIN}/fullchain.pem" "${SERVER_PATH}CStore/fullchain.pem"

cp "/etc/letsencrypt/live/${DOMAIN}/privkey.pem" "${SERVER_PATH}CStore/privkey.pem"

chmod 640 "${SERVER_PATH}CStore/privkey.pem"

# FileMaker Server

fmsadmin certificate delete -y -u "${USER}" -p "${PASS}"

fmsadmin certificate import "${SERVER_PATH}CStore/fullchain.pem" --keyfile "${SERVER_PATH}CStore/privkey.pem" -y -u "${USER}" -p "${PASS}"  &amp;gt;&amp;gt; "${LOGFILE}"

launchctl stop com.filemaker.fms

sleep 60s

launchctl start com.filemaker.fms

echo "fertig :)"  &amp;gt;&amp;gt; "${LOGFILE}"

mail -s "fmcertrenew.log" "${EMAIL}" &amp;lt; "${LOGFILE}"&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Rechte setzen&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;chmod 750 fmcertrenew.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;das Script testen&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;sudo /usr/local/bin/fmcertrenew.sh
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Cert not yet due for renewal
Restart the FileMaker Server background processes to apply the change.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;die E-Mail sollte so aussehen&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/fm.comodin.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

The following certs are not due for renewal yet:
 /etc/letsencrypt/live/fm.comodin.com/fullchain.pem expires on 2021-06-08 (skipped)
No renewals were attempted.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Restart the FileMaker Server background processes to apply the change.
fertig :)&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;LaunchDaemon&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;sudo bbedit /Library/LaunchDaemons/com.filemaker.fmcertrenew.plist&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Jeden Samstag früh um 4:29 Uhr soll certbot das Zertifikat erneuern und in den Filemaker Server laden&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&amp;gt;
&amp;lt;plist version="1.0"&amp;gt;
&amp;lt;dict&amp;gt;
    &amp;lt;key&amp;gt;EnvironmentVariables&amp;lt;/key&amp;gt;
    &amp;lt;dict&amp;gt;
        &amp;lt;key&amp;gt;PATH&amp;lt;/key&amp;gt;
        &amp;lt;string&amp;gt;/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin&amp;lt;/string&amp;gt;
    &amp;lt;/dict&amp;gt;
    &amp;lt;key&amp;gt;Label&amp;lt;/key&amp;gt;
    &amp;lt;string&amp;gt;com.filemaker.fmcertrenew&amp;lt;/string&amp;gt;
    &amp;lt;key&amp;gt;ProgramArguments&amp;lt;/key&amp;gt;
    &amp;lt;array&amp;gt;
        &amp;lt;string&amp;gt;/bin/sh&amp;lt;/string&amp;gt;
        &amp;lt;string&amp;gt;/usr/local/bin/fmcertrenew.sh&amp;lt;/string&amp;gt;
    &amp;lt;/array&amp;gt;
    &amp;lt;key&amp;gt;RunAtLoad&amp;lt;/key&amp;gt;
    &amp;lt;false/&amp;gt;
    &amp;lt;key&amp;gt;AbandonProcessGroup&amp;lt;/key&amp;gt;
    &amp;lt;true/&amp;gt;
    &amp;lt;key&amp;gt;StartCalendarInterval&amp;lt;/key&amp;gt;
    &amp;lt;array&amp;gt;
        &amp;lt;dict&amp;gt;
            &amp;lt;key&amp;gt;Hour&amp;lt;/key&amp;gt;
            &amp;lt;integer&amp;gt;4&amp;lt;/integer&amp;gt;
            &amp;lt;key&amp;gt;Minute&amp;lt;/key&amp;gt;
            &amp;lt;integer&amp;gt;29&amp;lt;/integer&amp;gt;
            &amp;lt;key&amp;gt;Weekday&amp;lt;/key&amp;gt;
            &amp;lt;integer&amp;gt;6&amp;lt;/integer&amp;gt;
        &amp;lt;/dict&amp;gt;
    &amp;lt;/array&amp;gt;
&amp;lt;/dict&amp;gt;
&amp;lt;/plist&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Rechte anpassen&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;chown root:wheel /Library/LaunchDaemons/com.filemaker.fmcertrenew.plist&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;load&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# sudo launchctl load -w /Library/LaunchDaemons/com.filemaker.fmcertrenew.plist&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;unload&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;# sudo launchctl unload /Library/LaunchDaemons/com.filemaker.fmcertrenew.plist&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;prüfen ob es geladen wurde&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;sudo launchctl list | grep com.filemaker
-   0   com.filemaker.httpd.graceful
-   0   com.filemaker.httpd.stop
92024   0   com.filemaker.fms
-   0   com.filemaker.httpd.start
-   0   com.filemaker.fmcertrenew
-   0   com.filemaker.httpd.restart&lt;/code&gt;&lt;/pre&gt;</description>
      <pubDate>Wed, 10 Mar 2021 21:36:35 +0100</pubDate>
      <guid isPermaLink="false">a95c22f217be7a678fe7985a4501b7eb</guid>
    </item>
  </channel>
</rss>
