Änderungen von Dokument Eigene Autoconf-Rolle erstellen
Zuletzt geändert von Tom Altenbrunn am 2023/03/17 08:03
Von Version 26.1
bearbeitet von Jonas Mayer
am 2023/03/15 21:54
am 2023/03/15 21:54
Änderungskommentar:
Es gibt keinen Kommentar für diese Version
Auf Version 50.2
bearbeitet von Tom Altenbrunn
am 2023/03/16 16:40
am 2023/03/16 16:40
Änderungskommentar:
Es gibt keinen Kommentar für diese Version
Zusammenfassung
-
Seiteneigenschaften (2 geändert, 0 hinzugefügt, 0 gelöscht)
-
Anhänge (0 geändert, 8 hinzugefügt, 0 gelöscht)
Details
- Seiteneigenschaften
-
- Dokument-Autor
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. jonasmayer@sbede1 +XWiki.TomAltenbrunn@sbede - Inhalt
-
... ... @@ -1,5 +1,6 @@ 1 1 {{toc depth="3"/}} 2 2 3 +---- 3 3 4 4 = (% style="font-size:22px" %)__**Allgemeines**__(%%) = 5 5 ... ... @@ -27,7 +27,7 @@ 27 27 28 28 Für die Funktionalität der Autoconf-Rolle ist es also nötig, PowerShell-Skripte am Server abzuspeichern, die die Instruktionen an den Arbeitsstationen ausführen. Für diese Skripte sind folgende Dateinamen zulässig: 29 29 30 -* **main.ps1** - Skript wird in allen Phasen ausgeführt, die innerhalb der Beschreibungsdatei {{box}}meta/logodidact.yml{{/box}} 31 +* **main.ps1** - Skript wird in allen Phasen ausgeführt, die innerhalb der Beschreibungsdatei (% data-xwiki-non-generated-content="java.util.List" %){{box}}meta/logodidact.yml{{/box}}(%%) festgelegt sind. Eine solche Datei folgt dem Prinzip „in jeder Phase soll genau das gleiche stattfinden“. 31 31 * (% style="color:#8e44ad" %)**setup.ps1**(%%) - Skript wird ausschließlich in der SETUP-Phase während des Deployments ausgeführt. In der Setup-Phase ist der Client noch veränderlich und besitzt noch keine Schutzfunktion, selbst wenn der Schutz aktiviert ist. 32 32 * (% style="color:#8e44ad" %)**custom.ps1**(%%) - Skript wird ausschließlich in der CUSTOM-Phase ausgeführt. Dies geschieht sowohl 1x während des Deployments als auch später nach jedem Hochfahren des PCs 1x im Hintergrund. 33 33 * (% style="color:#8e44ad" %)**user.ps1**(%%) - Skript wird ausschließlich in der USER-Phase ausgeführt. Diese Phase wird nicht direkt während des Deployments durchlaufen, sondern erst später während der Benutzeranmeldung an betriebsbereiten PCs. ... ... @@ -40,8 +40,13 @@ 40 40 ))) 41 41 42 42 44 + Nachfolgend sind grafisch die diversen Deploy-Phasen dargestellt, welche ein Client während des Imaging-Vorgangs durchläuft. Die Abarbeitung von AutoConf-Rollen beginnen ab der Phase "**Re-Setup**" 45 + 46 + [[image:image-20230316155817-1.png]] 47 + 43 43 ---- 44 44 50 + 45 45 = (% style="font-size:22px" %)__**Beispielaufbau einer logodidact.yml**__(%%) = 46 46 47 47 ... ... @@ -72,9 +72,9 @@ 72 72 **Tipp:** Der Variablentyp ENUM aus dem Beispiel ergibt ein Dropdown-Menü, in dem man aus den vordefinierten 4 Werten (none / compact / detailed / verbose) auswählen kann. 73 73 ))) 74 74 75 - 76 76 ---- 77 77 83 + 78 78 = (% style="font-size:22px" %)__**Neue AutoConf-Rollen nach Fertigstellung freigeben**__(%%) = 79 79 80 80 ... ... @@ -91,12 +91,12 @@ 91 91 [[image:attach:autoconf.png||data-xwiki-image-style-border="true" class="img-thumbnail"]] 92 92 93 93 94 - 95 95 ---- 96 96 97 -= (% style="font-size:22px" %)__**Weiteres, funktionsfertiges Beispiel: Rolle „WLAN Profil mit PSK anlegen“**__(%%) = 98 98 103 += (% style="font-size:22px" %)__**Funktionsfertiges Beispiel: Rolle „WLAN Profil mit PSK anlegen“**__(%%) = 99 99 105 + 100 100 Zum besseren Verständnis wird nachfolgend eine feste Autoconf-Rolle zur Konfiguration eines WLAN-Profils (SSID inkl. PSK) an Clients näher beleuchtet. 101 101 102 102 (% class="box" %) ... ... @@ -116,8 +116,8 @@ 116 116 license: SBE 117 117 (% style="color:#8e44ad" %) uuid:(%%) 52318636-c4f5-11ea-baf9-0bff00c66ff4 118 118 visible: true 119 - priority: 0 120 - apply Always: false125 +(% style="color:#19177c" %) priority:(%%) 0 126 + apply_always: false 121 121 (% style="color:#f1c40f" %) tags:(%%) 122 122 - CUSTOM 123 123 (% style="color:#e74c3c" %) vars:(%%) ... ... @@ -138,6 +138,8 @@ 138 138 139 139 (% style="color:#8e44ad" %)**uuid**(%%) = ID der Autoconf-Regel. Muss einmalig sein. Bei einer eigenen Autoconf-Rolle sollte der Wert am besten neu generiert werden. [[https:~~/~~/www.uuidgenerator.net/>>url:https://www.uuidgenerator.net/]] 140 140 147 +(% style="color:#19177c" %)**priority**(% style="color:#2980b9" %)** **(%%)= Legt die Verarbeitungsreihenfolge der Autoconf-Rolle gegenüber weiteren Rollen fest, die in derselben Phase ausgeführt werden. Bei gleicher Priorität findet die Abarbeitung alphabetisch statt. Eine höhere Priorität führt zu früherer Ausführung. 148 + 141 141 (% style="color:#f1c40f" %)**tags**(%%) = beschreibt, in welchen Phasen die Autoconf-Regel ausgeführt wird. 142 142 143 143 (% style="color:#e74c3c" %)**vars**(%%)** **= definiert mögliche Variablen, die den Skripten übergeben werden ... ... @@ -147,19 +147,24 @@ 147 147 * type = bestimmt den Typ der Variable. Gültige Typen sind: STRING, PASSWORD, BOOLEAN, ENUM, ARRAY, INTEGER 148 148 * example = Zeigt einen grau eingefärbten Beispieltext innerhalb der definierten Variable an, ohne dass dieser als Wert festgelegt ist (Hilfsmittel für Anwender). 149 149 150 -(% style="color:#2980b9" %) 158 +(% style="color:#2980b9" %)**systems **(%%)= Legt fest, welche Betriebssystem-Typen durch die Autoconf-Rolle unterstützt werden. Gültige Systeme sind WINDOWS / LINUX. Die Rolle aus dem Beispiel unterstützt beide Betriebssysteme gleichzeitig. 151 151 152 - 153 153 ---- 154 154 162 + 155 155 == (% style="font-size:16px" %)**Inhalt des PowerShell-Skripts main.ps1, das die Variablen entgegennimmt**(%%) == 156 156 165 +Im Unterverzeichnis {{box}} win/ {{/box}} oder {{box}} lin/ {{/box}} der Autoconf-Rolle können sich wie erläutert unterschiedliche PowerShell-Skripte zur Ausführung in den verschiedenen Phasen befinden. 166 +In dieser Rolle liegt konkret das allgemeingültige Skript {{box}}main.ps1{{/box}} vor, welches die Variablen als Parameter ##$ssid## und ##$psk## intern verwendet. 157 157 158 -Im Verzeichnis {{box}} win/ {{/box}} können sich unterschiedliche Powershell-Skripte befinden. In dieser Rolle liegt das allgemeingültige Skript main.ps1 vor, welches die Variablen als Parameter ##$ssid## und ##$psk## intern verwendet. 159 159 160 -{{code width="50%"}} 169 +(% style="color:#19177c" %)**Windows Variante** 170 + 171 +{{code language="text" width="50%"}} 161 161 root@ctrl-g1:~ # cat /usr/lib/ld-autoconf/logodidact/roles/ld_wlan_psk/win/main.ps1 173 +{{/code}} 162 162 175 +{{code width="50%" language="powershell"}} 163 163 Param 164 164 ( 165 165 [parameter(Mandatory=$false)] ... ... @@ -214,18 +214,157 @@ 214 214 } 215 215 {{/code}} 216 216 217 -==== ==== 218 218 219 -= =======231 +(% style="color:#19177c" %)**Linux Variante (Network Manager)** 220 220 221 -==== ==== 233 +{{code language="text" width="50%"}} 234 +root@ctrl-g1:~ # cat /usr/lib/ld-autoconf/logodidact/roles/ld_wlan_psk/lin/main.ps1 235 +{{/code}} 222 222 223 -==== ==== 237 +{{code language="powershell" width="50%"}} 238 +Param 239 +( 240 + [parameter(Mandatory=$false)] 241 + [String] 242 + $ssid, 243 + [parameter(Mandatory=$false)] 244 + [String] 245 + $psk 246 +) 224 224 225 -==== ==== 248 +if ($ssid -ne '' -and $psk -ne '') { 249 + if (Get-Command "nmcli" -ErrorAction SilentlyContinue) { 250 + # Check if kernel modules are up 251 + nmcli dev wifi rescan 252 + if ($LASTEXITCODE -ne 0) { 253 + Start-Sleep -Seconds 30 254 + } 255 + 256 + # Check again 257 + nmcli dev wifi rescan 258 + if ($LASTEXITCODE -ne 0) { 259 + Write-Verbose "Skipping role. There might be no WiFi device installed." 260 + exit 0 261 + } 262 + 263 + $config = "/etc/NetworkManager/system-connections/$ssid" 226 226 227 -==== ==== 265 + if (Test-Path -Path $config) { 266 + Write-Verbose "Removing '$config'" 267 + Remove-Item -Path $config -Recurse -Force 268 + } 228 228 229 -==== ==== 270 + Write-Verbose "Connecting to '$ssid'" 271 + 272 + nmcli device wifi connect """$ssid""" password """$psk""" 273 + 274 + if ($LASTEXITCODE -eq 0) { 275 + Start-Sleep -Seconds 5 276 + nmcli con up """$ssid""" 230 230 231 -==== ==== 278 + if ($LASTEXITCODE -ne 0) { 279 + Write-Verbose "Error: Credentials wrong?" 280 + 281 + if (Test-Path -Path $config) { 282 + Write-Verbose "Removing '$config'" 283 + Remove-Item -Path $config -Recurse -Force 284 + } 285 + } 286 + } 287 + 288 + Write-Verbose "Exiting with code: $LASTEXITCODE" 289 + exit $LASTEXITCODE 290 + } 291 + 292 + Write-Verbose "No suitable implementation found" 293 + exit 1 294 +} 295 +{{/code}} 296 + 297 +---- 298 + 299 + 300 + 301 += (% style="font-size:22px" %)__**Weiteres Beispiel: eigene AutoConf-Rolle zur „Deaktivierung der Suchhervorhebung in Windows“**__(%%) = 302 + 303 +Im nachfolgenden Beispiel wird eine einfache Rolle zur Deaktivierung der Suchvorhebung in Windows deklariert. 304 +\\[[image:image-20230316103442-2.png||height="530" width="1142" class="img-thumbnail"]] 305 + 306 +---- 307 + 308 +== (% style="font-size:16px" %)**Aufbau der logodidact.yml**(%%) == 309 + 310 +Neben den allgemeinen Informationen über die Autoren (authors), Unternehmen (company), einer Beschreibung (description), dem Anzeigenamen (display_name) im LD Control Center, usw, beginnt im Abschnitt {{code language="bash"}}vars{{/code}} die eigentliche Definition der Variable 311 +"**{{code}}disableSearchHighlight{{/code}}**". 312 + 313 + 314 +{{code language="yaml" width="45%"}} 315 +#logodidact.yml 316 + 317 +ld_info: 318 + authors: 319 + - Tom Altenbrunn 320 + - Olav Krapp 321 + - Marcel Petersen 322 + - Kerim Ekin 323 + company: SBE network solutions GmbH 324 + description: | #Beschreibung 325 + Die Suchhervorhebung in der Windows Suchleiste wird deaktiviert 326 + display_name: Windows Suchhervorhebung #Anzeigename im LD Control Center 327 + license: SBE 328 + uuid: fec4ff30-b2a6-407f-a6b3-0a621cd7eaf7 #einmalige UUID 329 + vars: #Deklaration der Variablen 330 + disableSearchHighlight: #Name der Variable 331 + display_name: Suchhervorhebung im Suchfeld deaktivieren #Anzeigename im LD Control Center 332 + optional: true #Auswahl optional 333 + type: BOOLEAN #Variablentyp Boolean = True/False 334 + value: false #Standardwert false 335 + visible: true #Sichtbarkeit der Variable im LD Control Center 336 + priority: 0 #Abarbeitungspriorität 337 + apply_always: false 338 + tags: 339 + - CUSTOM #Ausführungszeitpunkt während der/den Phase(n) 340 + systems: 341 + - WINDOWS #Betriebssystem 342 +{{/code}} 343 + 344 +---- 345 + 346 +== (% style="font-size:16px" %)**Aufbau der main.ps1**(%%) == 347 + 348 +Danach erfolgt die Erstellung des ausführbaren Codes per Powershell. Im ersten Abschnitt (% style="color:#008000" %)**Param** (%%)werden die in der im vorigen Abschnitt definierten Variablen {{code}}vars{{/code}} aus der logodidact.yml aufgeführt und definiert. Bei der Variable "**{{code}}disableSearchHighlight{{/code}}**" handelt es sich um ein Boolean (True/False). Die Bedingung "**[parameter(Mandatory=$false)]**" setzt das Vorhandensein der Variable während dem Ablauf des Skriptes nicht als zwingend notwendig voraus, sodass bei einem darauffolgenden Verarbeitungsfehler o.ä. die Abarbeitung weiter erfolgt. 349 + 350 +{{code language="powershell"}} 351 +#main.ps1 352 + 353 +Param 354 +( 355 + [parameter(Mandatory=$false)] #Variable zwingend erforderlich? 356 + [bool] #Variablentyp 357 + $disableSearchHighlight #Name der def. Variable aus logodidact.yml 358 +) 359 + 360 +$SystemVersion=[System.Environment]::OSVersion.Version #Hole Windows Systemversion 361 + 362 +#Beginn des eigentlichen Codes 363 +if ($SystemVersion.Major -eq 10 -and $SystemVersion.Build -ge 19044) { 364 + $val = [int]!$disableSearchHighlight 365 + Write-Verbose "Setting EnableDynamicContentInWSB to '$val'" 366 + [Microsoft.Win32.Registry]::SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Windows Search","EnableDynamicContentInWSB",$val,[Microsoft.Win32.RegistryValueKind]::DWord) 367 +} else { 368 + Write-Host "Feature ist erst ab dem Release 21H2 verfügbar." 369 +} 370 +{{/code}} 371 + 372 +---- 373 + 374 +== (% style="font-size:16px" %)**Einlesen der AutoConf-Rollen am Server**(%%) == 375 + 376 +[[image:image-20230316110425-1.png||height="124" width="1186" class="img-thumbnail"]] 377 + 378 + 379 +== (% style="font-size:16px" %)**Ansicht im LD Control Center**(%%) == 380 + 381 +[[image:image-20230316110525-2.png||class="img-thumbnail"]] 382 + 383 +
- image-20230316094933-1.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.TomAltenbrunn@sbede - Größe
-
... ... @@ -1,0 +1,1 @@ 1 +43.3 KB - Inhalt
- image-20230316095106-2.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.TomAltenbrunn@sbede - Größe
-
... ... @@ -1,0 +1,1 @@ 1 +47.8 KB - Inhalt
- image-20230316102252-3.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.TomAltenbrunn@sbede - Größe
-
... ... @@ -1,0 +1,1 @@ 1 +166.3 KB - Inhalt
- image-20230316102302-4.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.TomAltenbrunn@sbede - Größe
-
... ... @@ -1,0 +1,1 @@ 1 +166.3 KB - Inhalt
- image-20230316103224-1.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.TomAltenbrunn@sbede - Größe
-
... ... @@ -1,0 +1,1 @@ 1 +166.3 KB - Inhalt
- image-20230316103442-2.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.TomAltenbrunn@sbede - Größe
-
... ... @@ -1,0 +1,1 @@ 1 +201.2 KB - Inhalt
- image-20230316110425-1.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.TomAltenbrunn@sbede - Größe
-
... ... @@ -1,0 +1,1 @@ 1 +166.3 KB - Inhalt
- image-20230316110525-2.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.TomAltenbrunn@sbede - Größe
-
... ... @@ -1,0 +1,1 @@ 1 +48.3 KB - Inhalt