From 67617aa969bec08bd4c173b6bfc8787f7ca89507 Mon Sep 17 00:00:00 2001 From: Shawn Anderson Date: Tue, 5 Sep 2023 09:05:09 -0400 Subject: [PATCH 1/3] Fixed script so that it executes docker command correctly --- docker-build.ps1 | 167 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100755 docker-build.ps1 diff --git a/docker-build.ps1 b/docker-build.ps1 new file mode 100755 index 0000000..811ce2f --- /dev/null +++ b/docker-build.ps1 @@ -0,0 +1,167 @@ +#!/usr/bin/env pwsh +<# + .SYNOPSIS + Helper script to execute docker buildx + + .DESCRIPTION + Simplifies executing docker buildx for multi-architecture for the current Dockerfile + + .PARAMETER Version + Specifies the version number to take this image with (defaults to 'latest' only) + + .PARAMETER DockerAccount + The docker account to use to push the image + + .PARAMETER Platforms + The platforms to target for the image (defaults to linux/arm/v7,linux/arm64/v8,linux/amd64) + + .INPUTS + None. You cannot pipe objects to to this script. + + .OUTPUTS + None + + .EXAMPLE + PS> /docker-build.ps1 + + .EXAMPLE + PS> ./docker-build.ps1 -Version v1.7.4 + + .EXAMPLE + PS> ./docker-build.ps1 -Platforms "linux/arms64/v8" + + #> +param( + [string]$Version = "", + [string]$DockerAccount = "rogerfar", + [string]$Platforms = "linux/arm/v7,linux/arm64/v8,linux/amd64", + [string]$Dockerfile = "Dockerfile", + [switch]$SkipPush, + [switch]$SkipCache, + [switch]$OutputToDocker, + [string]$BuildProgress="auto", + [switch]$AutoRun +) + +# Set Defaults +$defaultPort = 6500 +$appName = "rdtclient" +$imageName = "$($DockerAccount)/$($appName)" + +# Load version details (if needed) +if ([string]::IsNullOrEmpty($Version)) { + $Version = (Get-Content "package.json" | ConvertFrom-Json).version +} + +# Define the default arguments for docker build and run +$dockerCommandArgsList = @() + +$baseDockerBuildArgs = @( "buildx", "build", "--network=default", "--progress=$BuildProgress", "--file", $Dockerfile, "--build-arg", "VERSION=$($Version)", "." ) +$baseDockerRunArgs = @( "run", "--cap-add=NET_ADMIN", "-d", "--log-driver", "json-file", "--log-opt", "max-size=10m" ) + +# Add any conditional argumes +if (-Not $SkipPush.IsPresent) { $baseDockerBuildArgs += @("--push") } +if ($SkipCache.IsPresent) { $baseDockerBuildArgs += @("--no-cache") } +if ($OutputToDocker.IsPresent) { $baseDockerBuildArgs += @("--load") } + +# If we have multiple platforms AND we want to export them to locally to docker so we can run them +# we need to build and tag each arch individually +$lstPLatforms = $Platforms -split "," +if ($OutputToDocker.IsPresent -and $lstPLatforms.Count -gt 0) { + $extPort=$defaultPort + foreach ($p in $lstPLatforms) { + $extPort++ + $pn = $p -replace "/", "-" + + $dbArgs = $baseDockerBuildArgs + $dbArgs += @("--tag", "${imageName}:${Version}-${pn}") + $dbArgs += @("--platform", $p) + + $drArgs = $baseDockerRunArgs + $drArgs += @( "-v", "${PWD}/data/${pn}/db:/data/db" ) + $drArgs += @( "-v", "${PWD}/data/${pn}/downloads:/data/downloads" ) + $drArgs += @( "--platform", $p ) + $drArgs += @( "-p", "${extPort}:${defaultPort}") + $drArgs += @( "--name", "${appName}-${pn}" ) + $drArgs += @( "${imageName}:${Version}-${pn}") + + $o = @{ + ImageName = "${imageName}:${Version}-${pn}" + AppName = "${appName}-${pn}" + Platform = $p + CmdArgs = $dbArgs + RunArgs = $drArgs + } + + $dockerCommandArgsList += @(, $o) + } +} else { + # Looks like we don't need to load them locally so lets build everything at once as a sinlge mutli-arch image + $dbArgs = $baseDockerBuildArgs + $dbArgs += @("--tag", "${imageName}:${Version}") + $dbArgs += @("--platform", $Platforms) + + $drArgs = $baseDockerRunArgs + $drArgs += @( "-v", "${PWD}/data/db:/data/db" ) + $drArgs += @( "-v", "${PWD}/data/downloads:/data/downloads" ) + $drArgs += @( "-p ${defaultPort}:${defaultPort}") + $drArgs += @( "--name", "${appName}" ) + $drArgs += @( "${imageName}:${Version}") + + $o = @{ + ImageName = "${imageName}:${Version}" + AppName = "${appName}" + Platform = $Platforms + CmdArgs = $ddbArgs + RunArgs = $drArgs + } + + $dockerCommandArgsList += @(, $o) +} + +# Lets trigger the builds +foreach ($c in $dockerCommandArgsList) { + Write-Host "Generating docker image $imageName for $($c.Platform)" -ForegroundColor Green + Write-Host "Args: $($c.CmdArgs)" -ForegroundColor Yellow + &docker $($c.CmdArgs) + + if ($AutoRun.IsPresent) { + Write-Host "Running docker image $imageName for $($c.Platform)" -ForegroundColor Green + Write-Host "Args: $($c.RunArgs)" -ForegroundColor Yellow + &docker $($c.RunArgs) + + Write-Host "Sleeping for 30s (allowing containers to start)" -ForegroundColor Green + Start-Sleep -Seconds 30 + + Write-Host "Checking on status of containers" -ForegroundColor Green + &docker container ls --all --filter "name=$($c.AppName)" --format '{{json .}}' | jq --slurp | ConvertFrom-Json | % { + if ($d.Status -contains "*unhealthy*" ) { + Write-Host "Image ${c.ImageName} is not starting correctly" -ForegroundColor Red + } else { + Write-Host "Image ${c.ImageName} is starting correctly" -ForegroundColor Green + } + } + + } +} + +# # Do we want to automatically start them after they are build? +# if ($AutoRun.IsPresent) { +# foreach ($c in $dockerCommandArgsList) { +# Write-Host "Running docker image $imageName for $($c.Platform)" -ForegroundColor Green +# Write-Host "Args: $($c.RunArgs)" -ForegroundColor Yellow +# docker $($c.RunArgs) +# } + +# Write-Host "Sleeping for 30s (allowing containers to start)" -ForegroundColor Green +# Start-Sleep -Seconds 30 + +# Write-Host "Checking on status of containers" -ForegroundColor Green +# docker container ls --all --filter "name=$appName" --format '{{json .}}' | jq --slurp | ConvertFrom-Json | % { +# if ($d.Status -contains "*unhealthy*" ) { +# Write-Host "Image ${c.ImageName} is not starting correctly" -ForegroundColor Red +# } else { +# Write-Host "Image ${c.ImageName} is starting correctly" -ForegroundColor Green +# } +# } +# } From 56a81cb7642ccde8a14eb658bc7e75b4dc6b3844 Mon Sep 17 00:00:00 2001 From: Shawn Anderson Date: Tue, 5 Sep 2023 09:06:13 -0400 Subject: [PATCH 2/3] Added new branding based on linuxserver.io guidelines --- root/etc/s6-overlay/s6-rc.d/init-addusser/branding | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 root/etc/s6-overlay/s6-rc.d/init-addusser/branding diff --git a/root/etc/s6-overlay/s6-rc.d/init-addusser/branding b/root/etc/s6-overlay/s6-rc.d/init-addusser/branding new file mode 100644 index 0000000..85ff7e4 --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-addusser/branding @@ -0,0 +1,7 @@ + + + || | o | +,---.,---||--- ,---.| .,---.,---.|--- +| | || ---| | ||---'| || +` `---'`---' `---'`---'``---'` '`---' + From f84e698c5b41e3b518118126d37e4f57c3961e38 Mon Sep 17 00:00:00 2001 From: Shawn Anderson Date: Tue, 5 Sep 2023 09:18:03 -0400 Subject: [PATCH 3/3] Removed arm7 from default build list --- docker-build.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-build.ps1 b/docker-build.ps1 index 811ce2f..94db37e 100755 --- a/docker-build.ps1 +++ b/docker-build.ps1 @@ -34,7 +34,7 @@ param( [string]$Version = "", [string]$DockerAccount = "rogerfar", - [string]$Platforms = "linux/arm/v7,linux/arm64/v8,linux/amd64", + [string]$Platforms = "linux/arm64/v8,linux/amd64", [string]$Dockerfile = "Dockerfile", [switch]$SkipPush, [switch]$SkipCache,