Archiv der Kategorie: DevOps Tutorials

Tutorials for DevOps & Scripting Deploying and Technical contribution for Professionals

Text in Base64 und zurück Konvertieren in PowerShell

Base64 ist ein Format, das es erlaubt, Binärdaten in Text, und Text in Binärdaten zu Konvertieren, hier in der PowerShell. Die Base64-Codierung ist ein Prozess zum Konvertieren von Binärdaten in ein ASCII-Zeichenfolgeformat, und die Kodierung von 8-Bit-Binärdaten.

Base64 wandelt Daten (hauptsächlich Bilder) in Zeichen um, und zwar ursprünglich mit einem Satz von 64 Zeichen (Namensursprung), die sich in jedem ISO 8859-1 (auch bekannt als Latin-1) Zeichensatz wiederfinden und somit auch überall anzeigen lassen. Oder anders ausgedrückt: Aus einem Bild wird HTML-Code, denn inzwischen ist Base64 zum HTML-Standard geworden und es wird somit für Internetprojekte eingesetzt, vor allem eben für Inline-Grafiken.

Die Base64 Codierung wird auch häufig bei Mail-Systeme zum Versenden von E-Mail-Anhängen verwendet, da SMTP in seiner ursprünglichen Form nur für den Transport von 7-Bit-ASCII-Zeichen konzipiert war. Durch die Codierung eines Anhangs als Base64 vor dem Senden und die anschließende Decodierung beim Empfang wird sichergestellt, dass ältere SMTP-Server den Anhang nicht beeinträchtigen.

Text in Base64 Konvertieren in PowerShell

Die folgende Funktion Set-Base64 ermöglicht, ein Text in die Base64 Kodierung in der PowerShell zu konvertieren. Die Funktion Get-Base64 sorgt für das konvertieren zurück zum lesbaren Text.

Function Set-Base64
{
	param (
	[String]$arg
	)
	$textout = [System.Text.Encoding]::UTF8.GetBytes($arg)
	[Convert]::ToBase64String($textout)
}

Function Get-Base64
{
	param (
	[String]$arg
	)
	$textout = [Convert]::FromBase64String($arg)
	[System.Text.Encoding]::UTF8.GetString($textout)
}

Hinweis. wenn die Funktionen unter dem %userprofile%\Documents\WindowsPowerShell in die Datei Microsoft.PowerShell_profile.ps1 eingefügt wird, stehen die beiden Befehle in der PowerShell zur Ausführung zur Verfügung.

Base64 Code in Text Konvertieren

In der PowerShell konvertiert Set-Base64 den Text mit Übergabe in Base64 Kodierung, und mit Get-Base64 zurück in den lesbaren Text.

Text in Base64 und zurück konvertieren in PowerShell
Text in Base64 und zurück Konvertieren in PowerShell

Binärdatei in Base64 Codierung Umwandeln

Dateien und Bilder lassen sich in Base64 Text umwandeln, hierzu lässt sich das Powershell-Cmdlet Get-Content verwenden, mit dem Parameter -Encoding Byte und -Raw.

[convert]::ToBase64String((get-content -Path C:\temp\image.png -encoding byte -Raw))

Der Parameter -Raw sorgt dafür, dass die Datei komplett und nicht zeilenweise eingelesen wird, -Encoding Byte sagt PowerShell, dass es sich um eine Binärdatei handelt.

PowerShell: ToBase64String, Text in Base64 und zurück Konvertieren in PowerShell
PowerShell: ToBase64String

Bilddatei in Base64 Text Konvertieren

Bilddatei in Base64 Kodierung umwandeln, hierzu wird der PowerShell Befehl convert mit Parameter verwenden, der Base64 Text wird in die Datei image.txt geschreiben.

[convert]::ToBase64String((get-content -Path C:\temp\image.png -encoding byte -Raw)) > C:\temp\image.txt
Bild in Base64 Konvertieren in PowerShell
PowerShell: [convert]::ToBase64String

Woher wiss ich, ob es funktioniert?

Nehmen wir ein weiteres Beispiel mit der Bilddatei bluebox.png, die du auf dein Computer herunterladen kannst. Konvertiere jetzt einfach die kleine 10×10-Pixel Grafik mit dieser Befehlszeile in der PowerShell.

[convert]::ToBase64String((get-content -Path C:\temp\bluebox.png -encoding byte -Raw)) > C:\temp\img.txt

Erstelle als Nächstes eine HTML-Datei mit dem Inhalt wie unten gezeigt.

<div>
  <p>A blue box</p>
  <img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYSURBVChTY2RQ+8+AGzBBaRxgZEozMAAAbOYBOV4WE6YAAAAASUVORK5CYII=" alt="Blue box" />
</div>

Füge den Inhalt aus der Datei C:\temp\img.txt ein und platziere den Base64 <img src="data:image/png;base64,code hier" alt="Blue box" />

Doppelklicke auf die soeben erstellte HTML-Datei. Wenn alles richtig gemacht wurde, wird im Browser ein kleines blaues Kästchen angezeigt.

Woher wissen ich, ob es funktioniert?

Addendum

Base64 ist keine Verschlüsselungsmethode. Es ist lediglich ein Encoding-Verfahren, das dazu dient, binäre Daten in eine für den Menschen lesbare Form zu konvertieren. Es bietet keine Sicherheit oder Geheimhaltung der Daten.

Base64 kodiert binäre Daten, indem es sie in eine Zeichenfolge von ASCII-Zeichen umwandelt. Dies ist nützlich, wenn man binäre Daten in Umgebungen übertragen möchte, die nur Textdaten unterstützen, wie z.B. E-Mail-Systeme.

  E-Mail mit Anhang „content-transfer-encoding: base64“ senden im Beitrag hier.

Virtuelle Maschinen mit Vagrant

Vagrant, eine freie Anwendung in Ruby zum Erstellen und Verwalten von virtuellen Maschinen

Virtuelle Maschinen mit Vagrant

DevOps-Teams sehen sich zunehmend der Herausforderung gestellt, den Kunden neue Funktionen in kurzer Zeit zur Verfügung zu stellen, dabei stellen Cloud-Anbieter Lösungen durch skalierbare Plattformen mit Befehlszeilen- und API-Integrationen zur Verfügung. Mit nativen Tools können DevOps-Teams individuell angepasste Docker und Vagrant Lösungen für jeden Cloud-Provider bereitstellen.

Was ist Vagrant ?

Das Open-Source Projekt „Vagrant“ ist für den Aufbau kompletter Entwicklungsumgebungen konzipiert. Mit einem benutzerfreundlichen Workflow und dem Fokus auf Automatisierung. Zum Erstellen und Verwalten von Umgebungen mit virtuellen Maschinen (VM), und dies in einem einzigen Arbeitsablauf.

Vagrant bietet ein einheitliches Konfigurationsformat, mit einer Befehlszeile und einem gemeinsamen Provision-Provider, bereitgestellt für virtuelle Maschinen auf Hypervisoren oder als Cloud-VMs, für die Installation und Konfigurationen von Software.

Vagrant und Docker verfolgen dieselben Ziele, nämlich wiederholbare Umgebungen zu schaffen, das tun sie auf unterschiedliche, aber sich ergänzende Weise. In diesem Tutorial erfährst du, wie das quelloffene Werkzeug Vagrant zum fernsteuern bei der Virtualisierung eingesetzt werden kann.

Was ist Docker ?

Docker ermöglicht Software und unterstützende Konfigurationen in Images zu verpacken, die über mehrere Plattformen hinweg konsistent ausgeführt werden können. DevOps-Teams können mit Docker darauf setzen, dass die Software auf einem lokalen Arbeitsplatzrechner genauso läuft wie auf einer verwalteten Cloud-Plattform.

Die Kubernetes Plattform die auf Docker basiert, ermöglicht die Orchestrierung von Containern im umfangreichen Maßstab. Darüber hinaus unterstützten Cloud-Plattformen die Möglichkeit, Docker-Container in seinen Platform-as-a-Service (PaaS) zu betreiben.

Vagrant Installation

Vagrant ist in den Standard-Repos der meisten Linux-Distributionen enthalten. Sollte das Paket einmal nicht im Repository sein, oder es steht eine neuere Version im Vordergrund, so findet man die Binary’s auf der offiziellen Webseite mit den Links zum Herunterladen der Pakete für macOS, Windows und Linux.

Vagrant für Linux

Unter Debian und Ubuntu wird Vagrant wie folgt bereitgestellt.

$ wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
$ echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
$ sudo apt update && sudo apt install vagrant

quote  eine aktuelle Version von Ruby kann erforderlich sein.

Vagrant anwenden

Vagrant speichert und liest sämtliche Informationen für die zu erstellenden VMs aus der Konfigurationsdatei „Vagrantfile“. Dazu legt man erst ein Verzeichnis an, in diesem ein neues Vagrant Projekt erstellt wird.

Der erste Befehl vagrant init erstellt ein Vagrantfile im aktuellen Ordner, welche dann den eigenen Anforderungen entsprechend bearbeitet werden kann.

$ vagrant init
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

Als Standard provider wird VirtualBox verwendet. In der Konfigurationsdatei bei config.vm.provider kann angeben werden, welcher provider angewendet werden soll um eine VM oder ein Container zu erstellen.

Vagrant mit docker

config.vm.provider "docker" do |d|
    d.image = "helloworld"
end

Hier wird docker als provider verwendet und die Variable d für den Container wird festgelegt mit welcher weitere Einstellungen vorgenommen werden können (zB. docker-Images).

Vagrant mit Hyper-V

Nutzt man in Windows Hyper-V ist als provider „hyperv“ zu wählen.

config.vm.provider "hyperv" do |h|
  h.vm_integration_services = {
    guest_service_interface: true,
    CustomVMSRV: true
  }
end

Vagrant Box Installation

Anstatt eine virtuelle Maschine von Grund auf zu erstellen, verwendet Vagrant ein Basis-Image, um eine virtuelle Maschine schnell zu klonen. Diese Basisbilder werden in Vagrant als „Box“ bezeichnet. Die Angabe der für eine Vagrant-Umgebung zu verwendenden Box ist immer der erste Schritt nach dem Erstellen einer neuen Vagrant-Datei. Hier als Hostsystem wird Windows mit Hyper-V eingesetzt.

vagrant box add hashicorp/bionic64

Vagrant fordert uns nun auf ein provider zu wählen.

==> box: Loading metadata for box 'hashicorp/bionic64'
    box: URL: https://vagrantcloud.com/hashicorp/bionic64
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) virtualbox
3) vmware_desktop

Als provider wähle 1) für Hyper-V was in Windows aktiviert sein muss.

Vagrant.configure("2") do |config|
  config.vm.box = "generic/debian12"
  config.vm.box_url = "https://vagrantcloud.com/hashicorp/bionic64"
end

Die Konfigurationsdatei Vagrantfile

Nun ein Command Prompt als Administrator öffnen, in Windows 11 ist es Windows Terminal, und den folgenden Befehl ausführen.

vagrant up --provider=hyperv

quote  Möglicherweise erscheint zusätzlich zur Bestätigung ein Hinweis.

Bringing machine 'default' up with 'hyperv' provider...
==> default: Verifying Hyper-V is enabled...
The Hyper-V cmdlets for PowerShell are not available! Vagrant
requires these to control Hyper-V. Please enable them in the
"Windows Features" control panel and try again.

Sollte Hyper-V noch nicht vorliegen, ist die Hyper-V-Plattform und Hyper-V-Verwaltungstools für PowerShell wie folgt bereitzustellen.

Die Windows-Features werden aktiviert, mit Start Windows + R den Befehlcontrol appwiz.cpl,,2ausführen.

Windows Features Hyper-V-Plattform

Das Cmdlet kann auch aus der PowerShell aktiviert werden.

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

quote Die PowerShell als Administrator starten. Nach der aktivierung muss Windows neu gestartet werden.

Virtuelle Maschine Starten

Im einfachsten Fall ist das bereits alles, was für das Erzeugen und Starten einer virtuellen Maschine erforderlich ist. Nun folgt der Aufruf in der Konsole mitvagrant up

$ vagrant up
Bringing machine 'default' up with 'hyperv' provider...
==> default: Verifying Hyper-V is enabled...
==> default: Verifying Hyper-V is accessible...
==> default: Importing a Hyper-V instance
    default: Creating and registering the VM...
    default: Successfully imported VM
    default: Configuring the VM...
    default: Setting VM Enhanced session transport type to disabled/default (VMBus)
==> default: Starting the machine...
==> default: Waiting for the machine to report its IP address...
    default: Timeout: 120 seconds
    default: IP: 172.19.29.83
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 172.19.29.83:22
    default: SSH username: vagrant
    default: SSH auth method: private key
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!

Um zu überprüfen, ob die VM wirklich läuft, genügt das Kommando.

vagrant status

Es wird als Status wie erwartet running gezeigt und gibt zudem einige Hinweise aus. Wie man die virtuelle Maschine wieder beenden kann, zeigt der Befehl wie folgt.

vagrant halt

Amelden

Für den Zugriff auf die virtuelle Maschine leitet Vagrant den Port 22 auf den Port 2222 des Hostsystems weiter, sodass sich eine SSH-Verbindung herstellen lässt. Benutzernamen und Port müssen nicht stets von Hand eingeben werden, es steht zudem ein Kommando zur Verfügung, das die Anmeldung automatisch vornimmt.

vagrant ssh

Die Verbindung zur virtuellen Maschine ist hergestellt, die VM kann ohne Einschränkungen verwendet und für weitere Anforderungen konfiguriert werden. Das Verzeichnis des Hostsystems, das die Datei „Vagrantfile“ enthält, bindet Vagrant in der virtuellen Maschine als Pfad /vagrant ein. Damit ist ein einfacher Austausch von Dateien zwischen Host und Gast möglich.

Vagrant stellt zahlreiche Kommands bereit. Ein Blick in die Vagrant Help Ausgabe mit vielen Kommands lohnt sich.

vagrant -h

Zu den Allgemeinen Kommands stehen weitere Unterbefehle zur Verfügung, die jedoch entweder komplexer sind oder nicht häufig verwendet werden. Um alle Unterbefehle in der Konsole auszugeben, führe den Befehlvagrant list-commandsaus.

Vagrant Box

Auf der Webseite von Vagrant wird eine Auswahl von Box Abbilder im Katalog zum direkten Download zur Verfügung gestellt. Alternativ gilt die darauf spezialisierte Webseite Vagrantbox.es als weitere Anlaufstelle.

Eine Vagrant Box auf Debian 12 wird wie folgt bereitgestellt.

vagrant init generic/debian12
vagrant up

Die Vagrant Box auf Rocky Linux 9 erhält man mit diesen zwei Zeilen.

vagrant init generic/rocky9
vagrant up

Hyper-V Manager

Bei der nutzung von Hyper-V als provider für Vagrant, können die erstellen VM im Hyper-V Manager verwaltet werden.

Hyper-V Manager, Virtuelle Maschinen mit Vagrant