// Link

Ansible Playbook für Uberspace

Mein Namensvetter Lukas verwaltet seine Uberspaces mit Ansible. Mit Ansible lassen sich z.B. virtuelle Maschinen oder auch Uberspaces verwalten und automatisieren. Die Einrichtung, die man normalerweise händisch in das Terminal tippt, lässt sich mit Ansible nachbilden. Somit wird alles nachvollziehbar und auch reproduzierbar. Hat man alles über ein Ansible Playbook organisiert, kann man den aktuellen Zustand des Servers immer wieder erzeugen.

Lukas stellt seine Ansible Playbook zur Verfügung. Dies kann als Inspiration genutzt werden, um ein eigenes Ansible Playbook für Uberspace zu erstellen.

Ansible Playbook für Uberspace
// Snippet

macOS: Too many open files

Vor kurzem hat sich MariaDB unter macOS mit dem Fehler "Too many open files" verabschiedet. Der Fehler ist beim Schreiben bzw. Erzeugen von Tabellen aufgetreten. Die Anwendung konnte nach dem Neustart von MariaDB nicht mehr auf die Datenbank zugreifen. Die Datenbank war korrupt. MariaDB ist an diesem Fehler nicht direkt schuld, sondern macOS. Da parallel noch einige weitere Anwendungen, wie z.B. Elasticsearch, liefen, hat ein Limit von macOS gegriffen.

Das Limit für parallel geöffnete Dateien kannst du dir mit dem folgenden Befehl anzeigen lassen:

$ launchctl limit maxfiles
  maxfiles    256            unlimited

Das Soft-Limit (erster Wert) ist in meinem Fall einfach zu niedrig gewesen. Um das Limit zu erhöhen, musst die Datei /Library/LaunchDaemons/limit.maxfiles.plist angelegt werden. Der Inhalt sieht wie folgt aus:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"  
        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">  
  <dict>
    <key>Label</key>
    <string>limit.maxfiles</string>
    <key>ProgramArguments</key>
    <array>
      <string>launchctl</string>
      <string>limit</string>
      <string>maxfiles</string>
      <string>64000</string>
      <string>524288</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist>

Damit wird das Soft-Limit auf 64000 und das Hard-Limit auf 524288 gesetzt. Für die Datei muss der Eigentümer angepasst werden. Die Änderungen werden wirksam, nachdem der Mac neugestartet wurde.

sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist

Nach dem Neustart kann mit dem ersten Befehl erneut das Limit geprüft werden. MariaDB läuft seit den Änderungen ohne Probleme.

Quelle:
// Snippet

Linux: Backup-Tools

Um Backups unter Linux zu erstellen, kann man z.B. Borg Backup oder restic einsetzen:

Beide Tools setzen auf einen ähnlichen Ansatz. Das Backup wird unter anderem inkrementell und verschlüsselt erstellt. Ich setze Borg Backup mit einer Storage Box von Hetzner ein. Der größte Unterschied ist, dass Borg Backup nur über SSH das Backup auf einem anderen Server speichern kann. Bei restic kann das Backup auch in Amazon S3, Google Cloud Storage oder Microsoft Azure gespeichert werden.

Der folgende Artikel gibt einen guten Start in die Einrichtung von Borg Backup: Server-Backups mit Borg: So sichere ich meine Server

// Snippet

ncdu - Große Ordner und Dateien finden

Wenn die Festplatte voll ist, dann hat dies einen negativen Einfluss auf das System. Vieles wird nicht mehr wie gewohnt funktionieren. Mit ncdu lässt sich über das Terminal herausfinden, wo die Ursachen liegen.

Das Tool kann klassisch über apt install ncdu oder brew install ncdu installiert werden.

Mit sudo ncdu / wird die komplette Festplatte eingelesen und man bekommt anschließend eine Übersicht über die größten Ordner und Dateien.

Ein Beispiel für die Ausgabe von ncdu:

ncdu 1.12 ~ Use the arrow keys to navigate, press ? for help
--- / ----------------------------------------------------------
   43.3 GiB [##########] /docker
   23.7 GiB [#####     ] /var
    2.2 GiB [          ] /cache
    1.9 GiB [          ] /home
    1.3 GiB [          ] /usr
  867.3 MiB [          ] /lib
  704.5 MiB [          ] /root
  142.5 MiB [          ] /boot
   38.4 MiB [          ] /tmp
   15.7 MiB [          ] /bin
   15.2 MiB [          ] /sbin
    6.3 MiB [          ] /etc
    2.6 MiB [          ] /run
   16.0 KiB [          ] /opt
   16.0 KiB [          ] /mnt
e  16.0 KiB [          ] /lost+found
    8.0 KiB [          ] /media
    8.0 KiB [          ] /snap
    4.0 KiB [          ] /lib64
e   4.0 KiB [          ] /srv
.   0.0   B [          ] /proc
    0.0   B [          ] /sys
 Total disk usage:  74.1 GiB  Apparent size:  74.0 GiB  Items: 1829938
// Link

Dashboard mit Laravel und Echtzeit-Funktionalität

Wenn man Echtzeit-Funktionalität in einer Web-Anwendung nutzen möchte, gibt es mir zwei bekannte Wege. Die erste Option ist, dass man in regelmäßigen Abständen den aktuellen Status vom Server lädt. Die Alternative, und vermutlich auch der elegantere Weg, ist die Nutzung von Websockets. Mit Websockets kann der Server neue Daten an den Browser schicken. Websockets bedeuten aber auch eine zusätzliche Schicht an Komplexität.

Der Artikel zeigt gut, dass man nicht vergessen sollte die Anwendung einfach zu halten.

Building a realtime dashboard powered by Laravel, Livewire and Tailwind (2020 edition)
// Snippet

Docker: Größe von Log-Dateien limitieren

Docker nimmt mit den Containern und Images gut Speicherplatz in Anspruch. Aber auch die Logs der Container können sehr groß werden. Wenn du mal wissen willst wie viel Speicher die Logs benötigen, kannst du dies mit diesem Befehl herausfinden:

docker ps -qa | xargs docker inspect --format='{{.LogPath}}' | xargs ls -hl

Wenn der aktuelle Benutzer nicht die ausreichenden Berechtigungen hat, ist eventuell ein sudo vor dem ls notwendig.

Da ich nur die aktuellen Logs brauche, müssen die nicht sehr lange aufbewahrt werden. In die Datei /etc/docker/daemon.json muss folgendes ergänzt werden:

{
 "log-driver": "json-file",
 "log-opts": {
   "max-size": "10m",
   "max-file": "3"
  }
}

Die Container müssen alle neugestartet werden, damit die Einstellung übernommen wird.

Quellen:
Vermutlich verwendest du einen veralteten Browser. Da diese Website auf moderne Technik setzt, benötigst du einen aktuellen Browser, um diese Website richtig darzustellen.