Aus Raspberry Pi Geek 06/2015

Powershell und Desired State Configuration auf dem RasPi nutzen (Seite 3)

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.

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

Fazit

So richtig rund fühlt sich DSC for Linux auf dem RasPi noch nicht an – ein interessanter Proof-of-Concept, dem jedoch noch der richtige Einsatzzweck fehlt. Wollen Sie nur einzelne Skripte ausführen, greifen Sie besser zu SSH.

Eine funktionierende DSC-Konfiguration erfordert umfangreiche Vorarbeiten. Steht sie aber erst einmal und fasst in der Konfigurationsdatei mehrere Ressourcen zusammen, ermöglicht das, in einem Rutsch Software zu installieren, zu konfigurieren und Dateien zu übertragen, ähnlich wie im Beispiel.

Basteln Sie daraus noch ein Skript für die Powershell, lässt sich die Konfiguration mit nur einem Befehl schnell anpassen oder wiederherstellen, falls Sie einmal etwas kaputt gemacht haben. Außerdem ließe sich dieselbe Konfiguration mit mehreren Ressourcen leicht auf mehreren Mini-PCs nacheinander ausführen. 

Der Autor

Christian Imhorst benutzt beruflich täglich die Powershell in einem von Microsoft-Programmen dominierten Umfeld. Privat läuft Windows in einer virtuellen Maschine auf einem Linux-Rechner.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben