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:.
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.
Infos
- Windows Management Framework 4.0: http://www.microsoft.com/de-de/download/details.aspx?id=40855
- OMI-Server: https://collaboration.opengroup.org/omi/
- Artikel von Kris Bash: http://blogs.technet.com/b/privatecloud/archive/2014/05/19/powershell-dsc-for-linux-step-by-step.aspx
- Powershell-Modul für DSC for Linux: https://github.com/MSFTOSSMgmt/WPSDSCLinux/releases/






