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

Ähnliche Artikel

Aktuelle Ausgabe

02/2018
Digital Signage

Diese Ausgabe als PDF kaufen

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

Stellenmarkt

Neuigkeiten

  • Neues auf der Heft-DVD

    Nur mit dem optimalen System und der richtigen Software nutzen Sie das volle Potenzial des Raspberry Pi. Mit der Heft-DVD erhalten Sie nicht nur die neusten Distributionen für den RasPi und Co., sondern gleichzeitig auch die passenden Programme zu den Artikeln.

  • Ferngebootet

    Das Booten über das Netzwerk beherrscht auch der RasPi 3 – und bietet damit sehr viel mehr Flexibilität, als Sie mit SD-Cards erzielen können.

  • Bleibende Werte

    Ein EEPROM dient dazu, Daten auch nach Abschalten der Energiezufuhr zu speichern, etwa als Kanalspeicher in Autoradios. Wir zeigen, wie Sie einen solchen Speicher beschreiben und wieder auslesen.

  • Auf Wolke 1

    Mit einem schnellen Netzwerkanschluss und einer SATA-Schnittstelle dient sich der Odroid HC1 als NAS-Alternative an – allerdings nicht für jedermann.

  • Wohnungsfunker

    Der kompakte Router GL.iNet dockt problemlos am Raspberry Pi an und erweitert diesen um einen Access Point samt Server-Funktion.

  • Satter Sound

  • Wer klopfet an?

    Wechselsprechanlagen mit Bild- und Tonübertragung gibt es zwar von der Stange, allerdings zu gesalzenen Preisen. Günstiger und obendrein flexibler ist ein Eigenbau mit Pi Zero und RasPi 3.

  • Wiedergeburt

    Mit dem Keyrah-Tastaturadapter und einem Raspberry Pi machen Sie aus einem defekten C64 eine optimale Emulator-Station, bei der Sie die originale Tastatur und die Joystick-Ports nutzen.

  • Kleine Nachtmusik

    Waveform8 beseitigt einige Ecken und Kanten des Vorgängers Tracktion – und macht die DAW endgültig fit für den Einsatz auf dem Raspberry Pi.

  • Recycling

    Mit einer Dockingstation lassen sich ausgemusterte IDE/SATA-Festplatten im 2,5- und 3,5-Zoll-Format am Raspberry Pi betreiben. Mit dem Samba-Server gliedern Sie den Mini-Rechner dann als Datenspeicher in Ihr lokales Netzwerk ein.