Public/Install-Docker.ps1
<#
.SYNOPSIS Installs Docker on Linux. .DESCRIPTION See .SYNOPSIS .NOTES .EXAMPLE # Launch PowerShell and ... PS C:\Users\zeroadmin> Install-Docker #> function Install-Docker { [CmdletBinding(DefaultParameterSetName='Default')] Param() if (!$($PSVersionTable.Platform -eq "Unix" -or $PSVersionTable.OS -match "Darwin")) { Write-Error "The $($MyInvocation.MyCommand.Name) function from the HTMLToJson Module should only be used on Linux! Halting!" $global:FunctionResult = "1" return } if ($PSVersionTable.Platform -eq "Unix" -or $PSVersionTable.OS -match "Darwin" -and $env:SudoPwdPrompt) { if (GetElevation) { Write-Error "You should not be running the $($MyInvocation.MyCommand.Name) function as root! Halting!" $global:FunctionResult = "1" return } RemoveMySudoPwd NewCronToAddSudoPwd $env:SudoPwdPrompt = $False } $HostNameCtlInfo = hostnamectl $OSVersionCheckPrep = $HostNameCtlInfo -match "Operating System:" $ArchitectureCheck = $HostNameCtlInfo -match "Architecture:" switch ($OSVersionCheckPrep) { {$_ -match "18\.04"} { $OSVerCheck = 'Ubuntu 18.04' } {$_ -match "16\.|16\.04"} { $OSVerCheck = 'Ubuntu 16.04' } {$_ -match "14\.|14\.04"} { $OSVerCheck = 'Ubuntu 14.04' } {$_ -match "stretch"} { $OSVerCheck = 'Debian 9' } {$_ -match "jessie"} { $OSVerCheck = 'Debian 8' } {$_ -match "CentOS.*7"} { $OSVerCheck = 'CentOS 7' } {$_ -match "RHEL.*7"} { $OSVerCheck = 'RHEL 7' } {$_ -match "openSUSE.*42"} { $OSVerCheck = 'openSUSE 42' } } if (!$OSVerCheck) { Write-Error "Unable to identify Linux OS Version! Halting!" $global:FunctionResult = "1" return } $CurrentUser = whoami if ($OSVerCheck -match "openSUSE" -and ![bool]$($ArchitectureCheck -match "arm")) { try { $SBAsString = @( 'try {' " zypper --non-interactive install docker docker-compose" ' systemctl start docker' ' systemctl enable docker' " usermod -G docker -a $CurrentUser" ' Write-Host "`nOutputStartsBelow`n"' " Get-Command docker -ErrorAction Stop | ConvertTo-Json -Depth 3" '}' 'catch {' ' @("ErrorMsg",$_.Exception.Message) | ConvertTo-Json -Depth 3' '}' ) $SBAsString = $SBAsString -join "`n" $DockerInstallPrep = SudoPwsh -CmdString $SBAsString if ($DockerInstallPrep.Output -match "ErrorMsg") { throw $DockerInstallPrep.Output[-1] } if ($DockerInstallPrep.OutputType -eq "Error") { if ($DockerInstallPrep.Output -match "ErrorMsg") { throw $DockerInstallPrep.Output[-1] } else { throw $DockerInstallPrep.Output } } $DockerCommandInfo = $DockerInstallPrep.Output Write-Warning "You must reboot before using docker!" } catch { Write-Error $_ $global:FunctionResult = "1" return } } if ($OSVerCheck -match "CentOS" -and ![bool]$($ArchitectureCheck -match "arm")) { try { $SBAsString = @( 'try {' ' yum install net-tools -y' ' curl -fsSL https://get.docker.com/ | sh' ' systemctl start docker' ' systemctl enable docker' " usermod -aG docker $CurrentUser" ' Write-Host "`nOutputStartsBelow`n"' " Get-Command docker -ErrorAction Stop | ConvertTo-Json -Depth 3" '}' 'catch {' ' @("ErrorMsg",$_.Exception.Message) | ConvertTo-Json -Depth 3' '}' ) $SBAsString = $SBAsString -join "`n" $DotNetInstallPrep = SudoPwsh -CmdString $SBAsString if ($DotNetInstallPrep.Output -match "ErrorMsg") { throw $DotNetInstallPrep.Output[-1] } if ($DotNetInstallPrep.OutputType -eq "Error") { if ($DotNetInstallPrep.Output -match "ErrorMsg") { throw $DotNetInstallPrep.Output[-1] } else { throw $DotNetInstallPrep.Output } } $DotNetCommandInfo = $DotNetInstallPrep.Output } catch { Write-Error $_ $global:FunctionResult = "1" return } } if ($OSVerCheck -match "Ubuntu" -and ![bool]$($ArchitectureCheck -match "arm")) { try { $SBAsString = @( 'try {' ' apt-get update' ' apt-get install -y apt-transport-https ca-certificates curl software-properties-common' ' curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -' ' apt-key fingerprint 0EBFCD88' ' add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"' ' apt-get update' ' apt-get install -y docker-ce' " usermod -aG docker $CurrentUser" ' systemctl start docker' ' systemctl enable docker' ' Write-Host "`nOutputStartsBelow`n"' " Get-Command docker -ErrorAction Stop | ConvertTo-Json -Depth 3" '}' 'catch {' ' @("ErrorMsg",$_.Exception.Message) | ConvertTo-Json -Depth 3' '}' ) $SBAsString = $SBAsString -join "`n" $DockerInstallPrep = SudoPwsh -CmdString $SBAsString if ($DockerInstallPrep.Output -match "ErrorMsg") { throw $DockerInstallPrep.Output[-1] } if ($DockerInstallPrep.OutputType -eq "Error") { if ($DockerInstallPrep.Output -match "ErrorMsg") { throw $DockerInstallPrep.Output[-1] } else { throw $DockerInstallPrep.Output } } $DockerCommandInfo = $DockerInstallPrep.Output } catch { Write-Error $_ $global:FunctionResult = "1" return } } if ($OSVerCheck -match "Debian" -and ![bool]$($ArchitectureCheck -match "arm")) { try { $SBAsString = @( 'try {' ' apt-get update' ' apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common' ' curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -' ' apt-key fingerprint 0EBFCD88' ' add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"' ' apt-get update' ' apt-get install -y docker-ce' " usermod -aG docker $CurrentUser" ' systemctl start docker' ' systemctl enable docker' ' Write-Host "`nOutputStartsBelow`n"' " Get-Command dotnet -ErrorAction Stop | ConvertTo-Json -Depth 3" '}' 'catch {' ' @("ErrorMsg",$_.Exception.Message) | ConvertTo-Json -Depth 3' '}' ) $SBAsString = $SBAsString -join "`n" $DockerInstallPrep = SudoPwsh -CmdString $SBAsString if ($DockerInstallPrep.Output -match "ErrorMsg") { throw $DockerInstallPrep.Output[-1] } if ($DockerInstallPrep.OutputType -eq "Error") { if ($DockerInstallPrep.Output -match "ErrorMsg") { throw $DockerInstallPrep.Output[-1] } else { throw $DockerInstallPrep.Output } } $DockerCommandInfo = $DockerInstallPrep.Output } catch { Write-Error $_ $global:FunctionResult = "1" return } } } |