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

12/2017
Schräge Hacks

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 eines Mini-PC. 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.

  • Digitaler Widerstand

  • 3, 2, 1 … los!

    Ein Countdown ist nicht nur in der Raumfahrt sinnvoll. Mit einem Raspberry Pi und etwas Elektronik zählen Sie die Zeit bis zu einem beliebigen Ereignis optisch eindrucksvoll herunter.

  • Blog out of the box

    Das bei Bloggern beliebte CMS Wordpress kommt besonders Einsteigern mit einer einfachen Oberfläche und aktiven Community entgegen. Mit Blog In A Box setzen Sie ein solches Komplettsystem im Handumdrehen auf einem RasPi auf.

  • Angetestet

    Barefootd 1.4.1 leitet Ports und Verbindungen weiter, schlanke OpenSSH-Alternative Dropbear 2017.75, Httpbench 0.2.2 erfasst Webserver-Reaktionszeiten, Mtr 0.92 kombiniert Traceroute und Ping.

  • Öfter mal was Neues?

    Mit dem neuen Raspbian-Release "Stretch" schlägt die Raspberry Pi Foundation überflüssige technische Kapriolen, die einer auf Bildung und Ausbildung fokussierten Organisation schlecht zu Gesicht stehen, findet Chefredakteur Jörg Luther.

  • Aufgeweckt

    Dank der Chat-Plattform Telegram und einem eigenen Chatbot kommunizieren Sie mit dem Mini-PC selbst durch eine Firewall hindurch.

  • Elektropuzzle

    Das Board PiXtend erweitert den RasPi zu einer leistungsfähigen Steuereinheit. Neben dem Komplett-Kit bietet der Hersteller die Platine als Bausatz an, die Lötprofis viel Spaß bereitet und Einsteigern bei den ersten Schritten in der Elektronik-Welt hilft.

  • Nerds only

    Der Nerd-Wecker weckt – und macht gleichzeitig jede Menge Spaß beim Bauen und Anpassen.

  • Hightech-Halloween

    Ein gestandener Bastler zelebriert Halloween mit allerlei technischem Hokuspokus. Der Raspberry Pi liefert dafür die ideale Ausgangsbasis.