macOS Terminal: Ein .zip File pro Datei

Ich weiß, man kann auch einfach alle Dateien auf das Archivierungsprogramm draggen, aber da hat man nicht all die schönen Optionen der Terminalanwendung – wie beispielsweise Passwörter:

-e verschlüsselt (“encrypt”), -0 (Null, nicht Oh) setzt die Kompression auf, naja, Null. -P nimmt das Passwort entgegen, ohne müsste man es für jede Datei eingeben. PS, Achtung: Das muss ggf. aus der .bash_history entfernet werden.

Man beachte den Backslash \ (ALT+SHIFT+7) zum Escapen von Sonderzeichen.

Entpacken ist analog:

macOS Mojave in VirtualBox

macOS in einer VM zu installieren ist eine Geschichte voller Missverständnisse. Zumindest auf meiner Seite.

So wäre ich bspw. davon ausgegangen, dass die Hardware – also die “Machine” in “Virtual Machine” – nun ja, “virtuell” sei. Jein, zum Beispiel muss die verwendete Hardware Virtualisierung unterstützen. Geht bei Dir nicht? Pech gehabt. Und der Prozessor muss (!) von Intel sein. Klar, Apple hatte nie AMD-Prozessoren, warum sollte OS X die unterstützen. Mein Missverständnis an der Stelle: Der reale Prozessor wird nicht zu 100% weg-emuliert. Man kann für VirtualBox-VMs zwar ein wenig die CPU spezifizieren, aber trotzdem keine Chance (Stichwort “Stuck at End RandomSeed”).

Also kein VirtualBox. Es gibt eine Anleitung bei heise+ für macOS unter Windows mittels Qemu – die Idee: Windows 10 kann Linux, Linux kann KVM, und dafür gibt’s Skripte um macOS laufen zu lassen (siehe auch). It’s VMs all the way down, und das ist das nächste Problem: Windows 10 kann keine “Nested Virtualization” – für AMD. Also nächstes Missverständnis: Nur, weil Deine Hardware und Deine Software grundsätzlich Virtualisierung können, heißt das noch lange nichts, auch Dein OS muss das können.

Deshalb war ich zwischenzeitlich auf ein MacBook umgestiegen, um dort macOS Mojave (aka 10.14) als VM in Catalina (aka 10.15) zu hosten. Einschub: Warum eigentlich Mojave? Weil das das letzte macOS ist, das 32-Bit-Anwendungen erlaubt, und mein Photoshop CS6 ist eine solche. Einschub Ende. Und auf explizit Apple-Hardware sollte das ja alles gehen, richtig? Nein, und das ist das nächste Missverständnis. Dieselben Probleme, “End RandomSeed”. Ausprobiert mit einem aktuellen VirtualBox 7.

Dieser Artikel hier nun nennt explizit Mojave und VirtualBox 6.1.26, ok, probieren wir das auch noch mal aus. Und siehe da: Es geht!

Nächstes Missverständnis also offenbar: Was mit VirtualBox 6.1.26 geht/ging, geht auch mit VirtualBox 7.x. Bzw. wo für Windows zu viel Hardware an die VM durchgereicht wurde, war es hier zu wenig, denn die Hardware ist halt von Apple 🙂

Aber nun wollte ich es wissen; Gegenprobe: VirtualBox 6.1.26 auf Windows 11. Startet erst gar nicht:

Das soll mit 6.1.28 wohl behoben sein, aber da kommt dieselbe Meldung. Offenbar kann sich das mit anderer installierter Software ins Gehege kommen, bspw. besagtem Subsystem für Linux, was vom Versuch weiter oben noch installiert ist 🙂 Aber auch ohne das geht es nicht, keine Ahnung. Windows halt. Die “Weiteren Informationen” sagen, man solle die Speicherintegritätsprüfung deaktivieren, aber das klingt mir zu kritisch.

Naja, als nächstes probiere ich Big Sur (aka 11, aka 10.16) als Host, denn das ist das letzte macOS, das auf dem Host-MacBook noch läuft.

Update: Apropos “Emulieren”, es gibt hier einen Artikel, wie man x86 auf den aktuellen ARM-Prozessoren von Apple emuliert – habe ich noch nicht ausprobiert.

Download OS X / macOS

Da macOS normalerweise mit der Hardware mitkommt, und normalerweise nur up- statt downgraded wird, und nicht auf nicht unterstützter Hardware installiert werden können soll, und normalerweise aus dem App Store kommt, der all das genannte überwacht – ist es etwas anstrengend, einen Installer einer “beliebigen” macOS-Version zu bekommen. Zum Beispiel, um sie in einer VM zu installieren 🙂

Im Terminal geht es wie folgt, bspw. für Mojave:

Das “installiert” auch nichts in dem Sinne, auch wenn die Ausgabe etwas anderes behauptet. Sondern legt einen Installer in Applications ab:

macOS 10.13 User Avatar speichern

Ich habe kürzlich meinen iOS-Avatar geändert, eher aus Langeweile. Nun will ich zurück zum vorherigen, der mein Avatar aus macOS (hier: 10.13, mein Macbook ist halt alt) war und dort auch immer noch ist. Wo ist die zugehörige Datei also gespeichert? Unklar. Aber

extrahiert es (Quelle).

Pi Hole: “Disable Blocking” funktioniert nicht

Ich habe meinen Pi Hole auf einem bereits aufgesetztem Apache installiert (für meinen Slow Movie Player). Das ist laut How-To möglich:

  1. Run the Pi-hole install. When you get to “Do you wish to install the web server” select “Off”.
  2. Finish the Pi-hole installation process. Do not panic.
  3. Run “sudo usermod -a -G pihole www-data”
  4. Install “sudo apt install php-sqlite3”
  5. At a minimum, restart Apache “sudo service apache2 restart” or reboot the Pi.
  6. Enjoy.

und das ist auch so – aber 🙂 Wenn man das Pi Hole aktualisiert, muss man Schritt 5 wiederholen, sonst funktioniert irritierenderweise das temporär disablen nicht. Kein Fehler in der Konsole, keine Fehlermeldung, nur ein Error im Debug Log, dass der lighttpd nicht läuft.

WiX 4 in Vagrant Maschine installieren

WiX 4 benötigt .NET SDK 6 oder höher. Das .NET SDK per Shell Provisioner zu installieren ist aber nicht ganz offensichtlich, was primär an zweierlei liegt:

MS möchte .NET gerne per winget installieren, was eine AppStore-App ist (heißt das so?), die per Provisioner selbst nach der abenteuerlichen Installation der Dependencies nicht verfügbar ist:

Program ‘winget.exe’ failed to run: The file cannot be accessed by the systemAt C:\tmp\vagrant-shell.ps1:1 char:1

– vermutlich liegt der Grund irgendwo hier, hier oder hier. Keine Ahnung, Windows halt.

Wenn man .NET dann anders installiert, werden die Umgebungsvariablen nicht mit gesetzt m( Na ja, long story short:

Mit dotnet-install.ps1 von hier; zum Einsatz kommt StefanScherer/windows_10. Der Reboot am Ende sollte imho nicht notwendig sein, aber ohne findet er weder wix.exe, noch dotnet.exe. Windows halt.

Synology: Dateisystem im laufenden Betrieb ändern

Ich habe meine DS213j (lies: Ein 2-Bay-NAS der kleinsten (“j”-) Reihe von Synology von 2013) gegen die aktuelle Version DS223j getauscht. Das geht, was die Hardware angeht, erstaunlich einfach: Platten raus aus der 213, in derselben Reihenfolge rein in die 223, dem Wizard folgen, fertig.

meine Beweggründe waren initial:

  • USB 3.x, denn 3TB über USB 2 zu backupen macht keinen Spaß.
  • Gigabit Netzwerk. Vollformat RAW-Fotos über 100MBit macht nämlich auch keinen Spaß. Außerdem ist es kontraproduktiv, wenn die Internetverbindung schneller ist (hier 300 MBit) als die Netzwerkschnittstelle des NAS 🙂

Inzwischen habe ich dann gelernt, dass die DS223j die erste DiskStation der “j”-Reihe ist, die Btrfs unterstützt. Sprich: Snapshots, Kompression, Prüfsummen, … Das will ich, und sei es nur für besagte Fotos!

Nun sagt Synology, dafür müsse man alle Daten extern zwischenspeichern, die Platten platt machen und als Btrfs neu aufsetzen – btrfs-convert scheint hier unbekannt. Es gibt allerdings einen Weg, das “live” zu tun 🙂 Das Folgende basiert stark auf diesem Post, der aber für ein 4-bay-NAS geschrieben wurde, auch ansonsten sehr zu detailliert ist, und dabei trotzdem einige nützliche Details vermissen lässt:

Einschub: Es wird am Ende ein “Synology Hybrid Raid” (SHR) mit “One-Drive Fault Tolerance” sein, was RAID 1 entspricht. Der – dann einzige – Speicherpool wird “Speicherpool 2” heißen, das – dann einzige – Volume wird “Volume 2” heißen.

  1. Mach genug Backups, um Dich angesichts der Gefahr eines kompletten Datenverlusts auf dem NAS an sich “wohlzufühlen”.
    • PS: Die NAS-Konfiguration wird inzwischen zwar automatisch in der Cloud gespeichert, aber unter Systemsteuerung > Aktualisieren & Wiederherst. > Konfigurationssicherung kann man sie selber auch noch mal exportieren
  2. Prüfe alle Backups – das ist wichtig, bei mir schlug eine Prüfung fehl!
    • Tipp: Man kann auch mal eine Datei aus einem Backup öffnen, das scheint mir insbesondere bei datenbankbasierter Speicherung ratsam
  3. Prüfe alle Platten auf Integrität
    • PS: “Datenbereinigung” ist nur verfügbar auf Btrfs, sowie SHR mit mindestens drei Laufwerken. Nicht in meinem Szenario, will ich sagen.
  4. Jetzt wird Platte 2 (!) deaktiviert: Speicher Manager > HDD/SSD > Rechtsklick auf Laufwerk 2 > Laufwerk deaktivieren
    • Nun wird das NAS wild piepen, das kann man stummschalten unter Systemsteuerung > Hardware & Energie > Signaltonsteuerung > Stummschalten
  5. Hier sagt der verlinkte Post, man müsse/könne/solle Platte 2 ausbauen und an einem anderen Rechner formatieren. Das wollte ich auch tun, aber mein SATA-USB-Adapter ging irgendwie nicht. Ich habe die Platte unverändert wieder eingebaut, wo das Folgende dann trotzdem problemlos möglich war.
  6. Neuen Speicherpool im Speicher-Manager anlegen. Neues Volume darin anlegen (maximale Größe, Btrfs natürlich)
  7. Dann kann die Migration losgehen. Dafür gibt es zwei Möglichkeiten:
    1. Systemsteuerung > Freigegebener Ordner > Rechtsklick auf jeden Ordner > Bearbeiten > “Ort” ändern. Wichtig: Außerdem unter “Erweitert” die “Daten-Prüfsumme”, denn das kann man nachträglich nicht mehr!
      • Vorteile: Sehr einfach, die Zuordnung zu Backup-Tasks bleibt rudimentär erhalten
      • Nachteil: Kann nach beliebiger Zeit schiefgehen! Dann hat man den Platz auf Volume 2 bereits belegt, die Dateien werden aber in der File Station nicht angezeigt! Lösung ist, sich per SSH einzuloggen (Aktivierung unter Systemsteuerung > Terminal & SNMP), Dateien unter /volume2/@tmp/ manuell löschen (du half mir). Die Zeit ist natürlich trotzdem verloren
    2. Unter Systemsteuerung > Freigegebener Ordner neue Ordner anlegen, und die Daten dann manuell rüberschieben
      • Nachteil: Aufwändiger
      • Vorteile: Flexibler, schlägt früher fehl
      • PS: Das ist auch ein praktikabler Weg, um nachträglich Prüfsummen einzuschalten
  8. Irgendwann ist Platte 1 “leer” (1.4GB waren bei mir trotzdem noch belegt; laut SSH für DSM, nginx, etc.) und kann selbst im Speicher-Manager entfernt werden – DSM wird dann warnen, dass eine gewisse Menge Apps davon betroffen sind. Diese Apps sollt man idealerweise manuell deinstallieren, bevor man Platte 1 wirklich entfernt! Gute Gelegenheit, auch hier mal aufzuräumen. PS: Man kann pro App entscheiden, ob Settings erhalten bleiben sollen.
  9. Jetzt wird Platte 1 wirklich entfernt (dauert kurz), danach der Speicherpool 1 an sich.
  10. Unter Speicherpool 2 kann man via “Laufwerk hinzufügen” Platte 1 hinzufügen – Achtung, der Prozess dauert eine ganze Weile, denn hier werden die Daten ja erneut gespiegelt. Bei mir mit 1.4 belegten TB von insgesamt 2.7 TB (“3” TB) dauert es gut 7 Stunden.
  11. Nun kann man Aufräumen, Apps neu installieren, Datenbereinigung ausführen, und – wenn man unter Punkt 7.2. umsortiert hat – direkt ein neues Backup anlegen. Spätestens damit sollte dann aber alles fein sein.
    • PS: Man erschreckt erst ein wenig, weil Volume 1 weg ist, aber ein Klick auf Speicherpool 2 oder Volume 2 zeigt, dass nun beide Laufwerke diesem zugeordnet sind. Nein, Stand heute kann man die nicht umbenennen 🙂

 

Was habe ich nun gelernt?

  • Datenbankbasierte Backups sind stuhl
    • ich habe erst heute gelernt, dass eines meiner Backups defekt war. Mit immerhin drei Dateiversionen der fraglichen defekten Datei darin. Sie war noch nie korrekt gespeichert worden, was Hyper Backup aber offenbar nie aufgefallen ist, auch nicht beim (wieder fehlerhaften!) Überschreiben.
    • Man kann das auch nicht reparieren! Schon gar nicht punktuell die eine defekte Datei. Man kann noch aus dem Backup lesen, aber es nicht mehr beschreiben – man muss es komplett neu erstellen dafür (oder man versucht dies)
  • kleinere “Freigegebene Ordner” sind besser!
    • sie sind leichter umzuziehen, siehe Punkt 7
    • sie sind schneller zu backupen, siehe vorheriger Punkt
    • sie sind auch feingranularer freizugeben und/oder zu verschlüsseln und/oder zu komprimieren und/oder mit Prüfsummen zu versehen
  • Man kann (und vermutlich: sollte) seine Daten ein wenig pflegen:
    • Defragmentierung: Ja, das geht! Vielleicht nicht das Schlechteste, nachdem man die Daten gerade 1x auf links gedreht hat.
    • einen SMART-Test haben wir ja gerade durchgeführt, aber man kann den auch planen
    • Apropos planen: Für den Speicherpool kann man eine “Datenbereinigung planen” (Knopf oben) oder – erstmalig – “Jetzt ausführen” (Knopf ca. mittig). Meine ist eben erfolgreich durch 🙂
    • ggf. geplante Integritätsprüfungen für (geplante!?) Backups
    • ggf. regelmäßige Snapshots erstellen, wozu es allerdings einer weiteren App bedarf, siehe auch Details hier

Hm: Nun ist auch dieser Eintrag ziemlich lang geworden 🙂

hth!

Bluetooth Soundausgabe auf Raspberry Pi 3B (nicht 3B+)

Es ist 1 wenig tricky, Soundausgabe via Bluetooth auf einem pi3b (b, nicht b+!) ans Laufen zu bekommen. Und ich spreche hier von “auf der Kommandozeile”, auf dem Desktop habe ich das imho irgendwann mal recht schnell zusammengeklickt.

Warum ist das so knifflig? Erstens: Weil Raspberry Pi OS für den 3B, Stand heute, auf Debian 11/”Bullseye” basiert – was weder bei Release des 3B so war (da war es 8/”Jessie”, immerhin 3 Major Versions zurück!), noch die aktuellste Version ist (das wäre dann 12/”Bookworm”). Wikipedia behauptet zwar, auch 12/”Bookworm” wäre kompatibel, aber der Raspberry Pi Imager bietet für den 3B nur 11/”Bullseye” an. Es gibt auch kein “Tested image” von 12/”Bookworm” für den 3B, und meiner bootet dann auch mit keinem der dort angebotenen (oder findet vielleicht auch nur das WLAN nicht, was in meinem Fall auf dasselbe rauskommt).

(Diese UNSITTE, eingängige Nummerierung durch völlig willkürliche Strings zu ersetzen! Looking at you, macOS. Apropos Macs, auch schön: Auf meinem, zugegebenermaßen knapp 13 Jahre alten MacBook kann ich den Raspberry Pi Imager nicht mehr nutzen! Weil gegen eine inkompatible Version von qt kompiliert, wenn ich das richtig verstehe. Aber ich schweife ab.)

Man findet also drölf Tutorials, aber keines davon passt (es gibt sogar Stimmen, die sagen, das geht auf dem 3B gar nicht). Also schreibe ich halt noch eines 🙂 Und zwar explizit für Debian 11/”Bullseye”, bzw. “Raspberry Pi OS (Legacy, 32-bit) Lite (Veröffentlicht: 2023-12-05)”, wie es im Imager genannt wird – was laut lsb_release -a aber dasselbe ist. Achtung: Das System nicht upgraden (everybody says that)! Update: Da hatte ich in einem der Foren gelesen, und auch selber den Eindruck, dass ich nach einem apt upgrade keine Verbindung mehr bekam – jetzt wollte ich noch dieses Detail debuggen und lösen, da tritt es nicht mehr auf. Keine Ahnung.

Zuerst probiere ich stumpf, ob es vielleicht schon geht (ich überspringe hier der Übersichtlichkeit halber Scanning, Trusting, Pairing):

Das Internet ist voll von entsprechenden Meldungen mit n+1 Ursachen. Es hilft zur Eingrenzung, in einem zweiten Fenster btmon zu starten (erfordert sudo). Dort sehe ich:

= bluetoothd: src/service.c:btd_service_connect() a2dp-sink profile connect failed for FC:58:FA:3D:32:12: Protocol… 5.320743

“a2dp”? Ist quasi Audio-über-Bluetooth. Was Sinn ergibt, denn FC:58:FA:3D:32:12 ist ein Lautsprecher, ein “sink” von Audio. Wie bekommt man so ein “sink profile”? Über die Installation von PulseAudio oder PipeWire. Quasi das zweite Problem, denn beide haben ihre eigene Fan-Base (bzw. ihre eigenen Probleme, aus Sicht des jeweils anderen Lagers) und ihre eigenen Tutorials. Wie auch immer, die oben verlinkte Seite sagt, man solle PulseAudio verwenden:

PulseAudio is the default audio server in Debian. Unless you know what you’re doing, you probably want to follow these instructions

, und dieser Post sagt das auch. Also:

Und: Geht!

Die auf im Post genannten Module benötige ich nicht. Kurzer Test:

Auch das tut (haha: “tut”! Wie in “Sound”! TUUT TUUT!? Ich finde alleine raus …)

PS, das o.g. zusammenzustellen, hat mich einige Versuche mit frischen Images gekostet. Hier einige weitere Learnings aus diesen Versuchen:

  • Bei einem der Versuche hat dann der Lautsprecher angefangen, eine dritte Dimension von Problemen zu machen: Er wollte einen PIN haben 🙂 Zu sehen war das aber auch nur in btmon. Jedes Gerät kann hier seinen eigenen Unsinn veranstalten. Es kann dann helfen (wie gesagt, inzwischen benötige ich es nicht mehr), bluetoothctl mit einem anderen Agent zu starten. Die Idee ist, dem Gegenüber zu sagen, dass man keinen PIN eingeben kann, um in einen anderen Pairing-Modus zu gehen. Oder dass man einen eingeben kann, um den entsprechenden Prompt zu triggern. Bei mir half bluetoothctl --agent KeyboardDisplay, was zwar überhaupt nichts triggerte, aber dann ging es. Hier alle Agents.
  • service bluetooth status zeigt den aktuellen Status; dabei ist “active (running)” (in grün) gut, etwaige Fehlermeldungen (in Rot), wie bspw. “Sap driver initialization failed” oder “Failed to set privacy: Rejected” sind irrelevant. Mein Speaker tut (…) trotz dieser Meldungen.
  • busctl tree org.bluez zeigt die Devices:

(die beiden untersten Zeilen sieht man nur, wenn das Gerät verbunden ist; es können also sowohl bekannte, wie auch verbundene Devices angezeigt werden)

HTH!