/
chocolateyInstall.ps1
88 lines (75 loc) · 3.18 KB
/
chocolateyInstall.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
$ErrorActionPreference = 'Stop'; # stop on all errors
$toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
. "$toolsDir\helper.ps1"
Test-DockerdConflict
$url = "https://download.docker.com/win/static/stable/x86_64/docker-24.0.7.zip" # download url, HTTPS preferred
$pp = Get-PackageParameters
If ( !$pp.DockerGroup ) {
$pp.DockerGroup = "docker-users"
}
$dockerdPath = Join-Path $env:ProgramFiles "docker\dockerd.exe"
$groupUser = $env:USER_NAME
$packageArgs = @{
PackageName = $env:ChocolateyPackageName
UnzipLocation = $env:ProgramFiles
Url = $url
# You can also use checksum.exe (choco install checksum) and use it
# e.g. checksum -t sha256 -f path\to\file
Checksum = 'F958DBF13D4DBE7AB14D421C0DE03C4C4D3C3565DCD04E1163A49A98BF99C6EE'
ChecksumType = 'sha256'
}
Install-ChocolateyZipPackage @packageArgs # https://chocolatey.org/docs/helpers-install-chocolatey-zip-package
Install-BinFile -Name "docker" -Path "$env:ProgramFiles\docker\docker.exe"
# Set up user group for non admin usage
If (net localgroup | Select-String $($pp.DockerGroup) -Quiet) {
Write-Host "$($pp.DockerGroup) group already exists"
}
Else {
net localgroup $($pp.DockerGroup) /add /comment:"Users of Docker"
}
If ( !$pp.noAddGroupUser ) {
If (net localgroup $($pp.DockerGroup) | Select-String $groupUser -Quiet) {
Write-Host "$groupUser already in $($pp.DockerGroup) group"
}
Else {
Write-Host "Adding $groupUser to $($pp.DockerGroup) group, you will need to log out and in to take effect"
net localgroup $($pp.DockerGroup) $groupUser /add
}
}
# Write config
$daemonConfig = @{"group" = $($pp.DockerGroup) }
$daemonFolder = "$env:ProgramData\docker\config\"
$daemonFile = Join-Path $daemonFolder "daemon.json"
If (Test-Path $daemonFile) {
Write-Host "Config file '$daemonFile' already exists, not overwriting"
}
Else {
If (-not (Test-Path $daemonFolder)) {
New-Item -ItemType Directory -Path $daemonFolder
}
$jsonContent = $daemonConfig | ConvertTo-Json -Depth 10
$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
[IO.File]::WriteAllLines($daemonFile, $jsonContent, $Utf8NoBomEncoding)
}
# From v23 the package is now installed in Program Files. So clean up old files/service from tools
If (Test-Path "$toolsDir\docker") {
Write-output "Cleaning up old docker files..."
Remove-Item "$toolsDir\docker" -Recurse -Force
}
If (Test-OurOldDockerd) {
Write-output "Unregistering old docker service..."
Start-ChocolateyProcessAsAdmin -Statements "delete docker" "C:\Windows\System32\sc.exe"
}
# Install service if not already there, conflict check at start also means no others.
If (-not (Test-OurDockerd)) {
$scArgs = "create docker binpath= `"$dockerdPath --run-service`" start= auto displayname= `"$($env:ChocolateyPackageTitle)`""
Start-ChocolateyProcessAsAdmin -Statements "$scArgs" "C:\Windows\System32\sc.exe"
}
If (!$pp.StartService) {
Write-Host "$($env:ChocolateyPackageTitle) service created, start with: `sc start docker` "
}
Else {
Write-output "Starting docker service..."
Start-ChocolateyProcessAsAdmin -Statements "start docker" "C:\Windows\System32\sc.exe"
}