Powershell und Desired State Configuration auf dem RasPi nutzen

Erstes Skript

Powershell-Skripte generieren Sie am einfachsten in der Powershell ISE. Das Skript MyDSCDemo kopiert eine einfache Textdatei auf den RasPi. Dazu erstellen Sie zunächst einen Block wie in Listing 8, der quasi das Gerüst des Skripts bildet.

Um die Konfiguration nach Linux zu übersetzen, importieren Sie innerhalb des Blocks das Modul nx. Damit die Powershell weiß, auf welchem Rechner sie die Konfiguration anwenden soll, teilen Sie ihr den Server-Namen oder die IP-Adresse im Ausdruck Node mit. Mit der Ressource nxFile erstellen Sie Dateien auf dem RasPi.

Listing 8

 

Configuration MyDSCDemo
{
  Import-DSCResource -Module nx
  Node "Hostname"{
    nxFile myTestFile
    {
      Ensure = "Present"
      Type = "File"
      DestinationPath = "/root/dsctest"
      Contents="Hallo Welt!`n"
    }
  }
}

Um die Konfiguration anzuwenden, speichern Sie die Datei als Powershell-Skript und führen sie selbst einmal aus. Anschließend starten Sie die DSC. Das Skript aus Listing 9 erstellt zuerst den Ordner C:\dscconfig, falls es ihn noch nicht gibt. Dort speichert es die Konfiguration in Gestalt einer MOF-Datei ab (Abbildung 2). Diese MOF-Dateien fungieren als Konfigurationsdateien, die das Skript zum Linux-Rechner überträgt. Letztendlich ist DSC mit der Powershell ISE also nichts anderes als ein komfortabler Editor, um diese etwas kryptischen MOF-Dateien zu erstellen.

Listing 9

 

$null = md C:\dscconfig -ErrorAction SilentlyContinue
MyDSCDemo -OutputPath:"C:\dscconfig"
Start-DscConfiguration -CimSession:$cimSession -Path:"C:\dscconfig" -Wait -Verbose
Get-DscConfiguration -CimSession:$cimSession
Abbildung 2: Die Ausgabe von MyDSCDemo zeigt Details über die erstellte MOF-Datei.

Nachdem die Datei MyDSCDemo erstellt wurde, starten Sie sie mit dem Cmdlet Start-DscConfiguration. Hängen Sie die Option -verbose ans Ende an, so erhalten Sie mehr Infos darüber, was beim Ausführen passiert. Das Cmdlet Get-DscConfiguration zeigt das Ergebnis detailliert an.

Erscheint nach dem Ausführen des Cmdlets Start-DscConfiguration ein Fehler, muss das nicht unbedingt an der Konfigurationsdatei liegen, sondern hängt eventuell damit zusammen, dass auf Clients unter Windows 7 oder 8.1 WinRM standardmäßig ausgeschaltet ist. Nachdem Sie es aktiviert und den Durchgang durch die Firewall erlaubt haben, sollte alles funktionieren (Listing 10).

Listing 10

 

winrm quickconfig
winrm set winrm/config/service/auth @{Basic="true"}
winrm set winrm/config/service @{AllowUnencrypted="true"}

Neben der Ressource nxFile gibt es weitere wie nxScript, nxPackage, nxService, nxGroup oder nxUser. Sie dienen dazu, Skripte, Software-Pakete, Systemdienste, Gruppen oder Benutzer zu verwalten. Diese Ressourcen erlauben es, ohne Interaktion einen Samba-Server zu installieren, zu konfigurieren und zu starten.

Samba-Server

Das Powershell-Skript Samba.ps1 in Listing 11 weist zu Beginn verschiedenen Variablen sogenannte Here-Strings zu, einfache mehrzeilige Zeichenketten. Dazu gehören neben dem Herzstück jeder Samba-Installation, der Konfigurationsdatei smb.conf, noch drei Bash-Skripte. Statt Bash dürfen Sie auch eine andere Skriptsprache verwenden; dazu passen Sie einfach die Shebang-Zeile des Skripts an.

Innerhalb der Konfiguration zieht die Software die Pakete samba und samba-common-bin über die Ressource nxPackage ins System, falls sie nicht vorhanden sind. Mit den beiden Ressourcen nxFile kopiert DSC die Datei smb.conf mit dem Inhalt aus dem ersten Here-String und erstellt einen Ordner mit Schreibrechten und Gastzugang unter /home/pi/public. Besitzer des Ordners ist der User pi.

Die Ressource nxScript führt die drei Bash-Skripte aus den anderen Here-Strings aus. Dabei prüft TestScript, ob es bereits einen Samba-User gibt. Falls nicht, dann übernimmt SetScript und legt den User pi mit Passwort an. GetScript gibt am Ende von Get-DscConfiguration den Namen des Samba-Users zurück. Zum Schluss startet das Skript den Server über die Ressource nxService.

Listing 11

 

### Samba ###
# smb.conf
$smbconf = @'
[global]
workgroup = WORKGROUP
netbios name = MYNAME
security = user
[Raspberry]
path = /home/pi/public
writeable = yes
guest ok  = yes
'@
# set smbpasswd
$getscript = @'
#!/bin/bash
pdbedit -w -L | awk -F: '{print $1}'
exit 0
'@
$setscript = @'
#!/bin/bash
echo test123 | tee - | smbpasswd -a -s pi
exit 0
'@
$testscript = @'
#!/bin/bash
if [ $(pdbedit -w -L | awk -F: '{print $1}' | wc -l) -eq 0 ]
then
  exit 1
else
  exit 0
fi
'@
#################
Configuration Samba
{
param
(
  [string]$ComputerName
)
  Import-DSCResource -Module nx
  node $ComputerName
  {
    nxPackage samba
    {
      Name = "samba"
      Ensure = "Present"
      PackageManager = "Apt"
    }
    nxPackage smbcmbin
    {
      Name = "samba-common-bin"
      Ensure = "Present"
      PackageManager = "Apt"
    }
    nxFile SmbConf
    {
      DestinationPath = "/etc/samba/smb.conf"
      Type = "File"
      Mode = "644"
      Contents = $smbconf
    }
    nxFile SmbShare
    {
      Ensure = "Present"
      DestinationPath = "/home/pi/public"
      Type = "Directory"
      Mode = "755"
      Owner = "pi"
      Group = "pi"
      Force = $true
    }
    nxScript smbpasswd
    {
      GetScript  = $getscript
      SetScript  = $setscript
      TestScript = $testscript
    }
    nxService SambaService
    {
      Name = "samba"
      State = "running"
      Enabled = $true
      Controller = "init"
    }
  }
}

Das Beispiel zeigt, dass das Aufwendigste an der DSC das Erstellen der Konfigurationsdatei ist. Eine einmal funktionierende Konfiguration lässt sich dann später bei Bedarf ganz einfach und beliebig oft mit Start-DscConfiguration und seinen Parametern wiederherstellen (Listing 12).

Listing 12

 

Samba -ComputerName "Hostname" -OutputPath:"C:\dscconfig"
Start-DscConfiguration -CimSession:$cimSession -Path:"C:\dscconfig" -Verbose -Wait
Get-DscConfiguration -CimSession:$cimSession

Nachdem Sie das Konfigurationsskript ausgeführt haben, starten Sie die Cmdlets mit den entsprechenden Parametern im Konsolen-Fenster der ISE (es sei denn, Sie haben diese gleich mit im Skript untergebracht). Hat alles geklappt, besteht die Möglichkeit, auf die Netzwerkfreigabe des RasPi zuzugreifen (Abbildung 3). Dazu verwenden Sie entweder den Windows Explorer oder – nach dem Befehl net use z: \\<§§I>Hostname<§§I>\Raspberry /user:pi test123 – in der Powershell das Laufwerk Z:.

Abbildung 3: Das Volume des RasPi ist als Laufwerk Z: eingebunden.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Aktuelle Ausgabe

06/2017
Pi Zero W

Diese Ausgabe als PDF kaufen

Preis € 7,99
(inkl. 19% MwSt.)

Neuigkeiten

  • Neues auf der Heft-DVD

    Nur mit dem optimalen System und der richtigen Software nutzen Sie das volle Potenzial Ihres Mini-PCs. Mit der Heft-DVD erhalten Sie nicht nur die neusten Distributionen für den RasPi, sondern auch die passenden Programme und Schaltpläne zu den Artikeln.

  • Mehr Präzision

    Wenn es beim Messen auf hohe Genauigkeit ankommt, brauchen Sie einen A/D-Wandler wie den ADC128D818. Er bringt einige interessante Funktionen mit.

  • Alles in einer Reihe

    Wer mehr als eine serielle Schnittstelle am Mikrocontroller braucht, dem hilft eine in Software implementierte Lösung auf elegante Weise weiter.

  • Netzwerkfähig

    Trotz fehlender Netzwerkanbindung fand der 5-Dollar-Computer Raspberry Pi Zero reißenden Absatz. Der Pi Zero W legt nun mit WLAN und Bluetooth das nach, was sich viele Fans schon lange wünschten.

  • Brückenbau

    Der Pi Zero ist klein und kostengünstig, doch ihm fehlt ein Netzwerkanschluss. Den rüsten Sie bei Bedarf leicht nach.

  • Superkodi

    Der RasPi dient vielen Nutzern als kleines, aber feines Mediacenter zum Aufrüsten eines "dummen" Fernsehers zum Smart-TV. Das Update auf Kodi 17.0 bringt neben einem neuen Look auch eine überarbeitete Streaming-Funktion mit.

  • Gut gefiltert

    Mit Unbound sorgen Sie für blitzschnelle Antworten auf DNS-Anfragen – und sperren bei Bedarf lästige Web-Werbung aus.

  • Out of the box

    Wer einen RasPi-Server in den eigenen vier Wänden aufbauen möchte, muss nicht nur die Software installieren und einrichten, sondern auch das Netzwerk entsprechend konfigurieren. Syncloud nimmt Ihnen diese Arbeit komplett ab.

  • Facelifting

    Mit GTK+ realisieren Sie ohne großen Aufwand effiziente und gefällige grafische Frontends für Ihre Raspberry-Pi-Programme.

  • Praktisch verpackt

    Packen Sie wichtige Anwendungen einfach in einen Container, den Sie komfortabel mit Docker verwalten.