Syncthing – Cloud-Synchronisation ohne Cloud

Ich würde meine wichtigen Daten nie in der Cloud speichern, also verzeiht bitte den Titel, der vielleicht irreführend ist.

Vor kurzem bin ich auf dieses Tool gestoßen. Ich hatte schon vor einiger Zeit davon gehört, aber heute habe ich beschlossen, es auszuprobieren. Zuvor habe ich Tools wie bsync, unison und andere verwendet. Ich war mit keinem von ihnen wirklich zufrieden und kehrte oft zu rsync zurück. Mit Syncthing habe ich nun jedoch ein Tool gefunden, das ich in meiner gesamten Infrastruktur einsetzen möchte.

Das Tool ist für Linux, Windows und offenbar auch für macOS verfügbar. Die beiden letztgenannten Betriebssysteme konnte ich nicht testen, aber ich glaube, dass es auf ihnen genauso gut funktioniert.

Ich verwende es, um Daten zwischen verschiedenen Systemen zu synchronisieren. Und was soll ich sagen, es funktioniert wunderbar und sehr schnell.

Bei meiner Einrichtung war es wichtig, dass keine externen Relay-Server verwendet werden. Auf diese Weise kann ich sicherstellen, dass die Synchronisierung autonom erfolgt, was meiner Meinung nach auch die Sicherheit etwas erhöht.

Ebenso wichtig sind die Ausschlüsse, die gesetzt werden sollten, wenn bestimmte Dateitypen nicht synchronisiert werden sollen. In meinem Fall sind dies Ausgabedateien von verschiedenen Compilern wie gcc und g++, die in der Regel eine Menge Objektdateien (*.o) erzeugen.

Schnelle Übertragungen mit dd und loop-devices

Bei der Verwendung von dd stelle ich oft verschiedene Festplattenparameter ein. Auch wenn die Einstellmöglichkeiten nicht sehr auffällig sind, hängt die Übertragungsgeschwindigkeit letztlich vor allem von der verwendeten Hardware ab.

Die folgenden Parameter haben sich für mich bei der Arbeit mit Loopback-Geräten bewährt:

dd if=/dev/sdf2 of=/dev/loop0p2 status=progress bs=64K oflag=direct oflag=direct

Emacs: Signatur archive-contents.sig konnte nicht verifiziert werden

Heute erhielt ich die Nachricht

Failed to verify signature archive-contents.sig

von meinem Emacs nach der Eingabe von package-list-packages. Der vollständige Fehler ist unten aufgeführt:

Failed to verify signature archive-contents.sig:
No public key for 645357D2883A0966 created at 2024-04-22T11:05:03+0200 using EDDSA
Command output:
gpg: Signature made Mon Apr 22 11:05:03 2024 CEST
gpg: using EDDSA key 0327BE68D64D9A1A66859F15645357D2883A0966
gpg: Can't check signature: No public key

Es scheint, dass ich elpa-Pakete nicht mehr installieren kann.

Nach einiger Recherche bekam ich den Tipp, gnu-elpa-keyring-update mit dem Emacs-Paketmanager zu installieren, um dieses Problem zu lösen.

Das hört sich einfach an, aber vor der Installation eines Pakets musste ich vorübergehend die folgende Variable setzen, um den Keyring-Check zu deaktivieren:

(setq package-check-signature nil)

Danach rufe ich wieder package-list-packages auf und installiere
gnu-elpa-keyring-update.

Um auf Nummer sicher zu gehen, habe ich Emacs neu gestartet und der Fehler war weg.

Einrichten einer statischen Route in Debian-Linux

Einfache Netzwerkrouten können unter Linux mit dem Befehl route gesetzt werden. Hier ist ein einfaches Beispiel:

route add -net 192.168.20.0 netmask 255.255.255.0 gw 192.168.0.1

Damit diese Änderung auch nach einem Neustart aktiv ist, muss die Datei /etc/network/interfaces geändert werden.

iface ens192 inet static
   address 192.168.0.156/24
   up /bin/ip route add 10.25.20.0/24 via 192.168.0.1

Wie kann man die Umgebung eines laufenden (übergeordneten) Prozesses unter Linux ändern?

Dies ist eigentlich nicht beabsichtigt, und es gibt keine saubere Möglichkeit, dies zu tun.

Es ist jedoch möglich, eine Umgebungsvariable eines bestehenden Prozesses mithilfe eines Debuggers zu ändern.

Konkret geht es hier um den Debugger namens gdb. Dieser kann sich an bestehende Prozesse anhängen und verschiedene Operationen durchführen. Unter anderem auch das Ändern von Umgebungsvariablen.

Um sich mit einem laufenden Prozess zu verbinden, müssen Sie gdb installiert haben und die entsprechende Prozess-ID (PID) kennen. Im folgenden Beispiel ist die ID 2811:

gdb --pid=2811

Der Debugger meldet sich dann mit dem GDB-Prompt:

(gdb) call putenv ("MYVAR=1234")

Im oberen Beispiel finden Sie auch den Befehl, mit dem die Umgebungsvariable des Prozesses gefunden werden kann. In diesem Fall wird die Variable MYVAR auf den Wert 1234 gesetzt.

Bitte beachten Sie, dass der entsprechende Prozess angehalten wird, sobald gdb mit dem Parameter --pid gestartet wird. Sobald die Variable gesetzt ist, kann der Debugger mit den Tasten q und Enter wieder beendet werden – der Prozess läuft dann weiter.

Das Ganze ist aber nur ein schmutziger Hack und sollte nicht in einer produktiven Umgebung eingesetzt werden.

Usenet – immer noch lebendig

Warum sollte es in Zeiten von Facebook, Google und YouTube noch notwendig sein, auf
auf eine veraltete Technologie wie Usenet/NNTP setzen? Portale wie phpBB laden auch zum
zum Gedankenaustausch mit anderen Nutzern ein.

Warum also sollte man heutzutage noch das Usenet benutzen?

Aus meiner Sicht ist die Frage sehr einfach: Es ist ein bewährter
Standard, ähnlich wie bei E-Mails/SMTP, der sich seit Jahrzehnten nicht wirklich verändert hat. Einige
Leute mögen das als Nachteil interpretieren, aber für mich ist es eindeutig ein
Vorteil, weil ich nicht ständig neue Programme brauche, um Artikel zu schreiben, und ich
und muss mich nicht ständig darum kümmern, meine Anmeldedaten mit der neuesten Version des
Webbrowser-Version eingeben muss. Es gibt auch viele Leute, die das Usenet noch täglich nutzen
Basis.

Natürlich kann man nicht einfach bunte Bilder zum Inhalt hinzufügen und man muss
müssen Sie Ihre Gehirnleistung erheblich steigern, um alles in
Worte zu fassen. Letztlich entstehen hier Diskussionen mit Substanz – rein textbasiert und
hochoptimiert.

Ich nutze das Usenet in Kombination mit Emacs und Gnus – es fügt sich auch nahtlos in meine
meine E-Mail-Kommunikation ein und ermöglicht mir produktives Arbeiten.

apt-file – Programme in APT/Debian-Repositories finden

Kürzlich stellte ich auf einem frisch installierten Server fest, dass es keinen Befehl namens nslookup gab. Glücklicherweise verfügen Debian-ähnliche Distributionen über das Werkzeug apt-file.

Damit ist es möglich, nach Anwendungen zu suchen, die noch nicht installiert, aber im Prinzip im APT-Repository verfügbar sind. Der Befehl

apt-file search nslookup

brachte schnell Klarheit in die Angelegenheit und lieferte das folgende Ergebnis:

bash-completion: /usr/share/bash-completion/completions/nslookup
bind9-doc: /usr/share/doc/bind9-doc/arm/man.nslookup.html
dnsutils: /usr/bin/nslookup
dnsutils: /usr/share/man/man1/nslookup.1.gz
exim4-doc-html: /usr/share/doc/exim4-doc-html/spec_html/ch-the_dnslookup_router.html
fpc-source-3.0.4: /usr/share/fpcsrc/3.0.4/packages/fcl-net/examples/cnslookup.pp
libnet-nslookup-perl: /usr/share/doc/libnet-nslookup-perl/changelog.Debian.gz
libnet-nslookup-perl: /usr/share/doc/libnet-nslookup-perl/copyright
libnet-nslookup-perl: /usr/share/lintian/overrides/libnet-nslookup-perl
libxpa-dev: /usr/share/man/man3/xpanslookup.3.gz

Es war also klar, dass das dnsutils-Paket nachträglich installiert werden musste
danach. Aufruf von

apt-get install dnsutils

reichte aus, und das nslookup-Tool war bereits auf meinem Server vorhanden.

Wenn apt-file selbst noch nicht installiert ist, kann man es vorher installieren mit

apt-get install apt-file

Es ist wichtig, dass der Cache unmittelbar danach eingerichtet wird. Dies geschieht mit

apt-file update

Passwortloser SSH-Zugang auf Server

Insbesondere bei automatisierten Skripten, die SSH-Verbindungen zu externen Systemen aufbauen, ist die Abfrage eines Passworts innerhalb des Skripts unerwünscht oder führt dazu, dass das Skript blockiert wird.

Es ist zwar möglich, solche Passworteingaben mit dem Tool expect zu simulieren, dies ist aber alles andere als sicher. Der beste Weg ist die Authentifizierung über RSA-Schlüssel, die im Zielsystem als öffentlicher Schlüssel eingegeben werden müssen, um einen passwortfreien Zugang zu ermöglichen.

Wenn Sie viele Systeme administrieren und vergessen haben, einen öffentlichen Schlüssel in ein Zielsystem zu importieren, haben Sie das Problem, dass das Skript erneut blockiert wird, weil eine Passwortabfrage als Failover gestartet wird.

Um dies zu verhindern, wird einfach der Parameter -o BatchMode=yes an den SSH-Client übergeben. Es wird allgemein empfohlen, diesen Parameter zu verwenden, sobald ssh in einem Skript auftaucht. In der Regel wird er jedoch nicht beachtet und hindert so manches System daran, automatisierte Prozesse auszuführen.

Eine typische Befehlszeile sieht wie folgt aus:

ssh -o BatchMode=yes www.my-sample-hostname.com

Wenn Sie SSH indirekt über Rsync verwenden, kann dieser Parameter wie folgt verwendet werden:

rsync -av -e "ssh -o BatchMode=yes" www.mysample.com:/src1 /dst1

Bilder mit ffmpeg in ein einzelnes Video umwandeln

Hier gibt es mehrere Ansätze. Die Reihenfolge der Bilder ist problematisch. Der einfachste Weg wäre durch:

cat *.jpg | ffmpeg -f image2pipe -r 25 -vcodec mjpeg -i - test.mp4

Hier wird eine Warnung ausgegeben, weil die Pipe abgebrochen wird und ffmpeg dies anscheinend nicht erkennen kann.

Eine andere Methode wäre über Bildnamen, die einen fortlaufenden Zähler im Dateinamen enthalten. Wenn dies nicht der Fall ist, können die Dateinamen wie folgt geändert werden:

#!/bin/bash
COUNTER=1
for i in *.jpg; do
   NEW_FILENAME=$(printf "%04d.jpg" "$COUNTER")
   mv -i -- "$i" "$NEW_FILENAME"
   let COUNTER=COUNTER+1
done

Das Video kann mit Hilfe von erstellt werden:

ffmpeg -start_number 1 -i %04d.jpg -vcodec mpeg4 test.avi

In diesem Fall werden die 4 festen numerischen Ziffern auf der linken Seite mit 0 aufgefüllt. Ist die Zahl höher, muss die Maske %04d entsprechend geändert werden.

Durchsuchen von SMB/CIFS-Freigaben unter Linux mit smbclient

Als Admin möchte man oft herausfinden, ob CIFS-Freigaben unter Linux angesprochen werden können oder ob diese berechtigungsmäßig korrekt angelegt wurden.

Hierfür eignet sich das Linux-Programm smbclient. Es arbeitet auf Konsolenbasis und so können hier Prüfungen z.B. durch Skripte durchgeführt werden.

Eine Liste der möglichen Freigaben eines Hosts wird mit folgendem Befehl abgefragt:

smbclient -L 192.168.0.1 -U admin

Eine Ausgabe, in diesem Fall auf dem Rechner mm mit dem Benutzer mm, sieht etwa so aus:

aw@mm:~$ smbclient -L mm -U mm
WARNING: The "syslog" option is deprecated
Enter mm's password:
Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.5.16-Debian]

Sharename Type Comment
--------- ---- -------
storage Disk Storage
dokumente Disk Dokumente
mm Disk Multimedia
elearning Disk eLearning
IPC$ IPC IPC Service (mm server)

Wenn Sie eine Verbindung zu einer Freigabe herstellen wollen, rufen Sie den Befehl smbclient wie folgt auf:

smbclient //mm/mm -U admin

In diesem Fall wird die Freigabe mm auf dem Host mm mit dem Benutzer admin aufgerufen. Der Befehl wird nicht beendet, aber Sie befinden sich jetzt in einem speziellen „Browsing“-Modus, der durch die Eingabeaufforderung smb: > angezeigt wird.

Im „Browsing“-Modus bewegen Sie sich mit dem cd-Befehl, um zu Verzeichnissen zu wechseln, oder mit ls, um den Inhalt des aktuellen Verzeichnisses anzuzeigen.

Mit den Befehlen get und put können Dateien über CIFS herunter- oder hochgeladen werden.

Mehr brauchen Sie nicht, um feststellen zu können, ob ein Zugriff über CIFS möglich ist und ob Sie berechtigungsmäßig auf die notwendigen Ressourcen zugreifen können.