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

04/2017
64-Bit-Modus

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 neuesten Distributionen für den Raspberry Pi, sondern auch die passenden Programme zu den Artikeln.

  • Double Action

    Auf dem Raspberry Pi 3 läuft normalerweise ein 32-Bit-Linux – und das, obwohl er eine waschechte 64-Bit-CPU besitzt. Mit etwas Mühe lässt sich die angezogene Handbremse aber durchaus lösen.

  • Touch me

    Mit dem Controller-Baustein MPR121 steuern Sie kapazitive Näherungssensoren. Damit lassen sich berührungslos über die Veränderung eines elektrischen Felds Schaltvorgänge auslösen.

  • Geschickt erweitert

    Um den minimal ausgestatteten RasPi Zero auszubauen, benötigen Sie neben einem OTG-Adapter auch einen USB-Hub. Makerspot hat dafür eine interessante Lösung.

  • Aufgestellt

    Viele RasPi-Projekte erfordern einen Bildschirm samt Eingabemöglichkeit, etwa einen kleinen Touchscreen und eine entsprechend optimierte GUI. Die Display T. Box 7 vereint den offiziellen RasPi-Touchscreen mit einem praktischen Gehäuse.

  • Abgespielt

    Mit Volumio und einem Raspberry Pi rüsten Sie jede Stereoanlage mit "smarten" Funktionen auf. Ob es ums Abspielen von MP3s geht, um das Streaming von Spotify oder die Steuerung per Smartphone: In Kombination mit dem RasPi-Touchscreen toppt Volumio viele kommerzielle Lösungen.

  • Sammelstelle

    Ein IMAP-Server auf einem Raspberry Pi sammelt Mails an einer zentralen Stelle, damit alle Geräte aus dem LAN Zugriff darauf haben.

  • Ausgesiebt

    Adblocker filtern Anzeigen direkt aus dem HTML-Code einer Webseite heraus. Einen anderen Ansatz verfolgt Pi-hole: Auf einem Raspberry Pi installiert und als DNS-Server eingerichtet, biegt der Adblocker Anfragen an Werbe-Domains ins Leere um.

  • Du bleibst der Boss

    Mit Ubos ist es ein Leichtes, verschiedene Webdienste unter eigener Kontrolle zu hosten. Die auf Arch Linux basierende Server-Distribution funktioniert auch auf dem Raspberry Pi.

  • Gut getunnelt

    Mit ein wenig Know-how verwandeln Sie im Handumdrehen einen Raspberry Pi in ein abgesichertes System mit integriertem VPN-Gateway für die Geräte in Ihrem heimischen Netz.