Restic für Backups nutzen

Für Backups nutze ich seit vielen Jahren rsync-time-backup. Allerdings hörte ich in letzter Zeit viel gutes über die freie Software Restic. Restic selbst wird über GitHub entwickelt und ist unter der BSD-Lizenz in der Zweiklausel-Version lizenziert. Unter Linux und macOS kann Restic einfach über entsprechende Paketmanager installiert werden:

brew install restic

Restic arbeiten mit sogenannten Repositories. In einem Repository befindet sich das entsprechende Backup mit all seinen Versionen. Um ein solchen Repository anzugelegen wirde der Befehl:

restic init --repo ./

genutzt. Bei Restic ist jedes Backup automatisch verschlüsselt, sodass bereits beim Anlegen eines Backups ein entsprechendes Passwort vergeben werden muss. Die Daten werden mit AES, bei 256 Bit, verschlüsselt.

restic.net

Danach kann theoretisch mit dem ersten Backup begonnen werden:

restic -r /Volumes/Volume/ResticRepository backup /Users/User

In diesem Fall würde der Ordner /Users/User/ in das Restic-Repository gesichert. Bevor das Backup startet, muss das entsprechende Passwort des Repositorys eingegeben werden. Anschließend wird der Nutzer über den Fortschritt des Prozesses informiert:

repository 567f35fa opened successfully, password is correct
created new cache in /Users/User/Library/Caches/restic
[0:09] 10 files 4.296 MiB, total 451 files 224.551 MiB, 0 errors
/Users/User/System/btrfstune
/Users/User/System/busybox
...

Nach dem Abschluss des Backups erscheint eine entsprechende Meldung im Terminal:

Files:          25 new,     0 changed,     0 unmodified
Dirs:            2 new,     0 changed,     0 unmodified
Added to the repo: 616.694 KiB

processed 25 files, 615.493 KiB in 0:00
snapshot 6c0d7af6 saved

Nun verfügt der Nutzer über ein Backup Repository mit einem bzw. mehreren Snapshots. Die angelegten Snapshots können über dem Befehl:

restic -r /Volumes/Volume/ResticRepository snapshots

angezeigt werden. Der Nutzer erhält eine entsprechende Ausgabe im Terminal:

repository fd5947c7 opened successfully, password is correct
ID        Time                 Host        Tags        Paths
------------------------------------------------------------------------------
6c0d7af6  2020-01-05 10:09:15  Earth.local             /Users/User/System
31d3160f  2020-01-05 10:11:30  Earth.local             /Users/User/System
38d6cbca  2020-01-05 10:15:09  Earth.local             /Users/User/System
ea96fa22  2020-01-05 10:15:20  Earth.local             /Users/User/System
------------------------------------------------------------------------------
4 snapshots

Das beste Backup nutzt nichts, wenn es nicht wiederhergestellt werden kann. Dazu wird die Option restore genutzt:

restic -r /Volumes/Volume/ResticRepository restore 38d6cbca --target /Users/User/System

Anschließend wird der gewünschte Snapshop wieder hergestellt:

repository fd5947c7 opened successfully, password is correct
restoring  to /Users/User/System

Soll anstatt eines bestimmten Snapshot der letzte Snapshot wiederhergestellt werden so wird anstatt einer Snapshot-ID einfach latest als Wert angegeben. Soll nur eine einzelne Datei wiederhergestellt werden, ist das komplette zurückspielen eines Backup eher suboptimal. Für einen solchen Fall können die Snapshots im Dateisystem gemountet werden.

restic -r /Volumes/Volume/ResticRepository mount /Volumes/Volume/ResticRepositoryMounted

Anschließend wird das Repository im Dateisystem unter dem angegebenen Mountpoint eingebunden:

repository fd5947c7 opened successfully, password is correct
Now serving the repository at /Volumes/Volume/ResticRepositoryMounted
When finished, quit with Ctrl-c or umount the mountpoint.

Im Gegensatz zu den Befehlen zur Wiederherstellung des Backups muss beim Mounten keine Snapshot-ID angegeben werden. In der gemounteten Struktur werden stattdessen alle Snapshots angezeigt. Die gewünschte Datei zur Wiederherstellung kann somit gesucht und wiederhergestellt werden.

Beim Backup sollen in vielen Fällen bestimmte Dateien nicht gesichert werden. Dies können z.B. temporäre Dateien oder Caches sein. Um diese Datei vom Backup auszuschließen, kann ein sogenanntes Exclude File genutzt werden:

restic -r /Volumes/Volume/ResticRepository backup /Users/User/System --exclude-file="/Users/User/excludes.txt"

Eine solche Datei könnte z.B. wie folgt aussehen:

+ /etc/
+ /home/
+ /root/
+ /srv/
+ /usr/local/
+ /var/

- /*
- /var/cache/*
- /var/lib/lxcfs/*
- /var/log/*
- /var/tmp/*

Neben diesen Basisfunktionalitäten, verfügt Restic über weitere Funktionen, so z.B. zum Löschen alter Snapshots nach bestimmten Regeln. Alles in allem wirkt Restic für mich wie eine durchdachte Backup-Lösung, deren Nutzung durchaus ins Auge gefasst werden kann.

WinBox unter macOS nutzen

WinBox ist ein Werkzeug zur Verwaltung und Konfiguration von MikroTik-Routern. Neben den gewöhnlichen Werkzeugen zur Verwaltung eines MikroTik-Routers, ist es mittels WinBox möglich, sich über die MAC-Adresse mit dem Router zu verbinden. Dies ist immer dann relevant und praktisch, wenn der entsprechende Router über keinerlei IP-Konfiguration verfügt.

WinBox unter macOS

Verfügbar ist WinBox leider nur für Windows. Allerdings kann WinBox durchaus unter macOS genutzt werden. Im Netz gibt es dafür eine Reihe von Anleitungen, um WinBox mittels Wine unter macOS auszuführen. Wesentlich praktischer ist es beim Projekt WinBox-Mac vorbeizuschauen, welches auf GitHub entwickelt wird. WinBox-Mac ist ein Paket, welches Wine und andere benötigte Komponenten bereits enthält. Installiert werden kann WinBox-Mac über den Paketmanager Homebrew:

brew cask install nrlquaker-winbox

Nach der Installation kann WinBox-Mac wie eine gewöhnliche macOS-Applikation gestartet und genutzt werden. Der Wrapper selbst ist unter der MIT-Lizenz lizenziert und damit freie Software.

Partitionierung auf dem Terminal unter macOS

Für macOS war ich auf der Suche nach einem Tool für die Partitionierung von Datenträgern, welches sich für die Nutzung im Terminal eignete. Am liebsten wäre mir eine Variante von cfdisk gewesen, welches durch die einfache Bedienung glänzt. fdisk auf dem Terminal ist in vielen Fällen doch etwas zu spartanisch. Fündig geworden bin ich schlussendlich bei gptfdisk, welches über den Paketmanager Homebrew installiert werden kann:

brew install gptfdisk

Mit diesem Paket werden drei Anwendungen installiert: gdisk, sgdisk und cgdisk. Während die ersten beiden Anwendungen reine Kommandozeilentools sind, verfügt cgdisk über eine interaktive Oberfläche.

cgdisk ist ein Clone von cfdisk

Nach dem Aufruf der Anwendung mit dem passenden Laufwerk:

sudo cgdisk /dev/disk4

können die entsprechenden Operationen und Aktion über das Menü vorgenommen werden. Nach dem Abschluss der Operationen kann der Nutzer die Änderungen über das Write-Kommando auf die Festplatte schreiben und anschließend das Programm beenden.

Nginx unter macOS mittels Homebrew installieren und nutzen

Nginx wird für gewöhnlich unter Linux genutzt. Für Entwicklungszwecke kann es interessant sein Nginx unter macOS zu betreiben. Zur Installation von Nginx wird Homebrew benötigt. Homebrew ist ein Paketmanager für macOS, mit welchem viele Open-Source-Projekte unter macOS installiert werden können. Ist Homebrew installiert kann Nginx auf dem Terminal mittels:

brew install nginx

installiert werden. Standardmäßig läuft Nginx bei der Installation über Homebrew auf dem Port 8080. Hintergrund ist das der Webserver somit ohne root-Rechte bzw. ohne sudo genutzt werden kann. Wird der Port auf 80 oder generell auf einen Port kleiner 1024 gestellt, werden wieder entsprechende administrative Rechte benötigt. Soll der verwendete Port geändert werden, muss die Konfigurationsdatei angepasst werden:

nano /usr/local/etc/nginx/nginx.conf

In dieser findet sich folgender Block:

server {
  listen       8080;
  server_name  localhost;

Dort kann anschließend der Port geändert werden. Neben dem Port kann dort die Default-Location geändert werden. Dazu wird der server-Block bzw. dessen Unterblock, der location-Block angepasst:

location / {
  root /Users/seeseekey/Web;
  autoindex on;

Die root-Direktive gibt den Pfad an, welcher über den Webserver ausgeliefert wird. Die Option autoindex sorgt für das entsprechende Directory-Listing, was für Entwicklungszwecke nützlich sein kann. Gestartet und gestoppt werden kann der Service mittels:

brew services start nginx

bzw.

brew services stop nginx

Natürlich kann dies mittels restart in einem Rutsch erledigt werden:

brew services restart nginx

Anschließend kann Nginx mit der veränderten Konfiguration genutzt werden.

Plugins in der Custom Firmware der PSP installieren

Sobald auf einer Playstation Portable eine Custom Firmware installiert wurde, kann diese mit Hilfe von Plugins erweitert werden. Es existiert eine Fülle von Plugins für die Playstation Portable. Die meisten Plugins sind für die Version 6.60 der Firmware entwickelt worden. Allerdings laufen Sie meist ohne Probleme mit der letzten Version 6.61. Wenn dies nicht der Fall ist, kann man sich mit einem Plugin behelfen. Dieses sorgt dafür das für die Version 6.60 entwickelte Plugins auch unter der Version 6.61 laufen. Ich persönlich nutze zwei Plugins:

  • PRXShot
  • Game Categories Lite

Das erste Plugin dient dazu Screenshots auf der Playstation Portable zu machen, während das zweite Plugin eine Möglichkeit bietet die installierten Anwendungen zu kategorisieren. Nachdem man ein solches Plugin heruntergeladen hat, stellt sich allerdings die Frage wie dieses installiert wird. Die Plugins selber bestehen meist aus einer PRX-Datei oder einem Ordner mit einer solchen Datei und zusätzlichen Daten. Diese Datei bzw. der Ordner muss in das Verzeichnis SEPLUGINS auf der PSP bzw. dem Memory Stick kopiert werden. Anschließend muss festgelegt werden in welche Kontext das Plugins aktiv sein soll. Die Playstation Portable kennt dabei folgende Kontexte:

  • GAME
  • GAME150
  • POPS
  • VSH

Bei GAME wird das Plugin aktiviert, sobald ein PSP-Spiel gestartet wurde. GAME150 ist der Kontext für Homebrew-Software. Der POPS-Kontext kommt zum tragen wenn ein Playstation 1 gestartet wird. Der letzte Kontext mit dem Namen VSH dürften den meisten Leuten unter dem Namen XMB bekannt sein. Es handelt sich um das Menü der Playstation Portable. Um zu definieren in welchem Kontext das Plugin laufen soll, müssen im SEPLUGINS-Verzeichnis eine Reihe von Dateien angelegt werden:

GAME.TXT
GAME150.TXT
POPS.TXT
VSH.TXT

Soll nun ein Plugin in entsprechenden Kontext aktiv sein, so muss dieses in der dazugehörigen Datei aktiviert werden. Für das Plugin PRXShot würde dies z.B. so aussehen:

ms0:/seplugins/prxshot/prxshot.prx 1

Jedes Plugin kann in mehreren Kontexten aktiviert werden, allerdings ist darauf zu achten, das nicht jedes Plugin in jedem Kontext läuft. Meist ist dies aber in der Dokumentation des entsprechenden Plugins beschrieben. Sobald das Plugin aktiviert ist, kann es in allen Kontexten, für die es aktiviert wurde, genutzt werden.