Packer poradnik dla początkujących – budowa szablonu Windows 10 VirtualBox
Przed przystąpieniem do budowania za pomocą Packera upewnijcie się proszę, że macie już skonfigurowane środowisko do uruchomienia buildu. Poradnik jak to zrobić, dostępny jest na dedykowanych stronach : konfiguracja środowiska Windows, Windows autounattend oraz Packer. Poniższy cały kod źródłowy dostępny jest na stronach GitHub oraz Gitlab. Podstawowa konfiguracja pliku .json Builder – główny kod Packer’a „builders”: […
Przed przystąpieniem do budowania za pomocą Packera upewnijcie się proszę, że macie już skonfigurowane środowisko do uruchomienia buildu. Poradnik jak to zrobić, dostępny jest na dedykowanych stronach : konfiguracja środowiska Windows, Windows autounattend oraz Packer.
Poniższy cały kod źródłowy dostępny jest na stronach GitHub oraz Gitlab.
Podstawowa konfiguracja pliku .json
Builder – główny kod Packer’a
"builders": [
{
"type": "virtualbox-iso",
"vm_name": "W10TempeBase",
"guest_os_type": "Windows10_64",
"guest_additions_mode": "attach",
"iso_url": "D:\\Wirtualizacja\\ISO\\Windows10\\Windows10-Instalator.iso",
"iso_checksum": "md5:38f567f513b6280a38c499edc8197561",
"headless": "false",
"boot_wait": "10m",
"communicator": "winrm",
"winrm_username": "virtuallabspl",
"winrm_password": "Start123!",
"winrm_use_ssl": "false",
"winrm_insecure": "true",
"keep_registered": "false",
"skip_export": "false",
"floppy_files": [
"Autounattend.xml",
"script\\Config_WinRM.ps1",
"script\\EnvConfigure.ps1"
],
"disk_size": "30720",
"memory": "6144",
"cpus": "4",
"shutdown_command": "shutdown /s /t 5 /f /d p:4:1 /c \"Zakonczenie dzialanie Packera - PowerOff\""
}
],
Objaśnienia:
type – nasz model kreowanie wirtualnej maszyny
vm_name – nazwa wirtualnej maszyny jaka się pojawi w VirtualBox
guest_os_type – typ systemu operacyjnego jaki zostanie rozpoznany przez VirtualBox
guest_additions_mode – sposób montowania ISO – dodatkowy napęd CD
iso_url – ścieżka do płyty ISO z obrazem systemu operacyjnego
iso_checksum – checksum do weryfikacji płyty ISO
headless – start GUI przy uruchamianiu wirtualnej maszyny
boot_wait – wskazanie czasu po jakim Packer ma realizować dalej zadania polecenia boot_command
winrm_username – nazwa użytkownika WinRM
winrm_password – hasło użytkownika WinRM
winrm_use_ssl – informacja czy używać SSL
winrm_insecure – informacja czy używać certyfikatu
keep_registered – zachowuje wirtualną maszynę w konsoli VirtualBox
skip_export – informacja czy eksportować wirtualną maszynę do OFV
floppy_files – wirtualna dyskieta przechowująca wskazane pliki
disk_size – wielkość dysku twardego
memory – wielkość pamięci operacyjnej
cpus – liczba CPU
shutdown_command – interpretacja polecenia wyłączającego wirtualną maszynę
script\\Config_WinRM.ps1 – skrypt PS konfigurujący WinRM
Cały kod Config_WinRM.ps1
################################
# WinRM Configuration
###################################
# powershell -ExecutionPolicy Bypass -File a:\Config_WinRM.ps1
#Start-Process -Wait -Verb RunAs -PassThru -FilePath "netsh" -ArgumentList "advfirewall set allprofiles state off" | Out-Null
netsh advfirewall set allprofiles state off
#netsh advfirewall firewall set rule group="Windows Remote Administration" new enable=yes
#netsh advfirewall firewall set rule name="Windows Remote Management (HTTP-In)" new enable=yes action=allow
$profile = Get-NetConnectionProfile
Set-NetConnectionProfile -Name $profile.Name -NetworkCategory Private
Enable-PSRemoting -Force
winrm quickconfig -q
winrm set winrm/config '@{MaxTimeoutms="1800000"}'
winrm set winrm/config/winrs '@{MaxMemoryPerShellMB="800"}'
winrm set winrm/config/service '@{AllowUnencrypted="true"}'
winrm set winrm/config/service/auth '@{Basic="true"}'
winrm set winrm/config/client/auth '@{Basic="true"}'
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "*" -Force
Set-Service winrm -startuptype "auto"
Restart-Service winrm
mkdir c:\testSkryptu
Test-WSMan $env:COMPUTERNAME | Out-File c:\testSkryptu\winrm.txt
Provisioner – kod uruchamiający dedykowany skrypt
"provisioners": [
{
"type": "powershell",
"scripts": [
"script/EnvConfigure.ps1"
]
}
]
Objaśnienia:
script\\EnvConfigure.ps1 – skrypt PS konfigurujący pomocniczą konfigurację wewnątrz wirtualnej maszyny
Kod EnvConfigure.ps1 :
Write-Host "Disabling IPv6 on all interfaces...." Disable-NetAdapterBinding -Name "*" -ComponentID ms_tcpip6 | Out-Null Write-Host "TLS 1.2 Enable...." Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord Write-Host "Enable RDP and Disable UserAuthentication...." Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -name "fDenyTSConnections" -Value 0 Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -name "UserAuthentication" -Value 0 Write-Host ""
Cały kod packer:
{
"builders": [
{
"type": "virtualbox-iso",
"vm_name": "W10TempeBase",
"guest_os_type": "Windows10_64",
"guest_additions_mode": "attach",
"iso_url": "D:\\Wirtualizacja\\ISO\\Windows10\\Windows10-Instalator.iso",
"iso_checksum": "md5:38f567f513b6280a38c499edc8197561",
"headless": "false",
"boot_wait": "10m",
"communicator": "winrm",
"winrm_username": "virtuallabspl",
"winrm_password": "Start123!",
"winrm_use_ssl": "false",
"winrm_insecure": "true",
"keep_registered": "false",
"skip_export": "false",
"floppy_files": [
"Autounattend.xml",
"script\\Config_WinRM.ps1",
"script\\EnvConfigure.ps1"
],
"disk_size": "30720",
"memory": "6144",
"cpus": "4",
"shutdown_command": "shutdown /s /t 5 /f /d p:4:1 /c \"Zakonczenie dzialanie Packera - PowerOff\""
}
],
"provisioners": [
{
"type": "powershell",
"scripts": [
"script/EnvConfigure.ps1"
]
}
]
}
Tutaj dodatkowo wspomagałem się gotowym plikiem Autounattend.xml , który opisałem szerzej w artykule Poradnik Windows answer file – tworzenie autounattend.xml
Uruchomienie całego buildu odbywa się przez wydanie polecenia: packer build
W tym przypadku konkretnie: packer build „.\VM-Win10.json”
Struktura katalogów oraz plików przedstawia się następująco:
Name
—-
/script/Config_WinRM.ps1
/script/EnvConfigure.ps1
/Autounattend.xml
/README.md
/Run.ps1
/VM-Win10.json
Poniższy cały kod źródłowy dostępny jest na stronach GitHub oraz Gitlab.
