Patrick Hirschi

Data Enthusiast

Software Engineer

Tech Lead

Patrick Hirschi

Data Enthusiast

Software Engineer

Tech Lead

Blog Post

Automatisierung von Mac Parallels Desktop Pro

Für eine komfortablere Nutzung der in der Anleitung “Ubuntu Server Cluster mit Parallels” (Teil 1 / Teil 2) erstellten Big Data Cluster Umgebung, wird hier beschrieben, wie man:

  • die Parallels Toolbox auf einer Ubuntu Server LTS 20.04 VM installiert
  • die Parallels VMs so konfiguriert, dass sie im “headless” Modus laufen
  • mit Bash Skripten programmatisch Aktionen in Parallels ausführen kann (Bsp. Start / Stopp)
  • die Bash Skripte erweitert, dass gleichzeitig auch pro Parallels VM gleich ein iTerm Tab erstellt wird, mit einer SSH Verbindung auf die VM

Das Endprodukt:

Installation Parallels Toolbox

Gemäss der offiziellen Dokumentation der Parallels Command-Line Reference, sollte auf den VMs die Parallels Toolbox installiert sein:

– If the Parallels Tools package is installed in a virtual machine, the graceful shutdown will be performed using its facilities.

– If the Parallels Tools package is not installed, the command will try to perform a graceful shutdown using ACPI. Depending on the ACPI support availability in the guest operating system, this may work or not.

QuelleCommand-Line Reference / Virtual Machine Reference / General Virtual Machine Management / Power Operations

Bei unkontrollierten Stop-Vorgängen der VMs gibt es immer ein Risiko, dass noch nicht vollständig gespeicherte Informationen verloren gehen. Deshalb sollte man sich hier definitiv ein paar Minuten Zeit nehmen.

Um die Parallels Tools zu installieren sind folgende Schritte nötig:

  • Bei gestarteter VM über das Menü “Geräte – CD/DVD – Image einbinden…” oder bei englischer Konfiguration “Devices > CD/DVD 1 > Connect Image…” das entsprechende Image für die Ubuntu Server ARM Distribution auswählen.
  • Im Pfad /Applications/Parallels Desktop/Contents/Resources/Tools/ die Datei “prl-tools-lin-arm.iso” auswählen

  • In der VM die folgenden Befehle ausführen:
# Elevaten
sudo su
# Installation der GNU Compiler Collection (GCC) und make
apt-get install gcc make
# Verzeichnis erstellen
mkdir -p /media/cdrom
# Inhalt des *.iso Files mounten in das neu erstellte Verzeichnis
mount /dev/cdrom /media/cdrom
cd /media/cdrom
# Install-Befehl ausführen und alles mit "Weiter" bestätigen
./install
# Neustart der VM
shutdown -r now
Interface des Installations-Tools

Diese Schritte führt man dann auf allen 5 virtuellen Maschinen aus.

Parallels VMs in “headless” Modus bringen

Im Parallels Kontrollzentrum einfach über das Zahnrad Symbol der VM den Konfigurations-Editor öffnen.

In der Folge unter “Optionen” und “Starten und Ausschalten” die folgenden Konfigurationen vornehmen:

Schritte für alle 5 VMs wiederholen und dann die ganze Parallels Applikation neu starten.

Bash-Skript für Automatisierung

Damit eine Automatisierung auch der SSH-Verbindung überhaupt möglich ist, ohne dass irgendwo ein Klartext Passwort gespeichert werden muss, entfernen wir bei unserem in den ersten zwei Anleitungen erstellten SSH-Key (big_data_host_key) das Passwort:

ssh-keygen -p
# Location des zu ändernden Keys angeben: /Users/ph/.ssh/id_rsa/big_data_host_key
# Eingabe altes Passwort und leer lassen bei der Frage nach dem neuen (entfernt das PW)

Wie oben bereits erwähnt, gibt es vom Hersteller eine Dokumentation (“Command-Line Reference“) der möglichen Befehle.

Für unsere Zwecke brauchen wir nur prlctl start, prlctl resume und prlctl stop. Im Folgenden ein Beispiel Skript welches:

  • die Parallels Desktop App öffnet
  • alle 5 Cluster VMs startet (dank der obigen Konfigurationen im “headless” Modus)
  • 15 Sekunden wartet, damit auch sicher alle Boot-Vorgänge abgeschlossen sind
  • 5 iTerm Tabs erstellt (eines pro VM) mit jeweiliger ssh Verbindung auf die VM
#! /bin/bash

#
# Starts Parallels Desktop and all VMs
#

open /Applications/Parallels\ Desktop.app

# start the VMs
prlctl start "bd-1" >/dev/null 2>&1
prlctl start "bd-2" >/dev/null 2>&1
prlctl start "bd-3" >/dev/null 2>&1
prlctl start "bd-4" >/dev/null 2>&1
prlctl start "bd-5" >/dev/null 2>&1

# let them start in peaaaaace...!
sleep 15

# open iTerm ssh Sessions to all of the VMs
osascript - "$@" <<EOF
on run argv
tell application "iTerm"
    activate
    set new_term to (create window with default profile)
    tell new_term
        tell the current session
            write text "ssh -v -i ~/.ssh/id_rsa/big_data_host_key -p 14201 ubuntu@127.0.0.1"
        end tell
        tell current session to set newSplit to split vertically with same profile
        tell newSplit
          select
          write text "ssh -v -i ~/.ssh/id_rsa/big_data_host_key -p 14202 ubuntu@127.0.0.1"
        end tell
        tell current session to set newSplit to split vertically with same profile
        tell newSplit
          select
          write text "ssh -v -i ~/.ssh/id_rsa/big_data_host_key -p 14203 ubuntu@127.0.0.1"
        end tell 
        tell current session to set newSplit to split vertically with same profile
        tell newSplit
          select
          write text "ssh -v -i ~/.ssh/id_rsa/big_data_host_key -p 14204 ubuntu@127.0.0.1"
        end tell 
        tell current session to set newSplit to split vertically with same profile
        tell newSplit
          select
          write text "ssh -v -i ~/.ssh/id_rsa/big_data_host_key -p 14205 ubuntu@127.0.0.1"
        end tell    
    end tell
end tell
end run
EOF

Umgekehrt lassen sich VMs natürlich auch stoppen:

#! /bin/bash

#
# Starts Parallels Desktop and all VMs
#

open /Applications/Parallels\ Desktop.app

# First resume if they are paused / suspended - otherwise the stop command is not working
prlctl resume "bd-1" >/dev/null 2>&1
prlctl resume "bd-2" >/dev/null 2>&1
prlctl resume "bd-3" >/dev/null 2>&1
prlctl resume "bd-4" >/dev/null 2>&1
prlctl resume "bd-5" >/dev/null 2>&1

# give them a bit of time
sleep 10

# stop all VMs
prlctl stop "bd-1" >/dev/null 2>&1
prlctl stop "bd-2" >/dev/null 2>&1
prlctl stop "bd-3" >/dev/null 2>&1
prlctl stop "bd-4" >/dev/null 2>&1
prlctl stop "bd-5" >/dev/null 2>&1

Als Editor für Mac empfehle ich BBEdit. Die Skripte lassen sich darin mit Syntax Highlighting bequem editieren und auch direkt ausführen (Command + R).

Tags:
Write a comment