Many years ago, I heard a joke:
3 people (a biologist, a mathematician and a developer) were in Africa on a Safari. They drive by a blue elephant. The biologist shouts out: “Look, there is a BLUE elephant.”. The mathematician states: “Right you are, there is ONE blue elephant”. The developer slaps his palm against his forehead and says: “Damn, there are blue elephants…“
As developers we often make assumptions and when we see these assumptions no longer being true, we immediately start thinking: What does that mean to my code and what does that mean to the people using my code.
This morning (August 18th 2020)
This morning, I woke up at 5:30 and as usual, the first thing I do is to scan email subjects. One email from Ryan caught my attention and in the email I could see a short output of the problem he was encountering:
Downloading Prerequisite Components Downloading F:\bcart.cache\sandbox\16.4.14693.15627\platform\Prerequisite Components\Open XML SDK 2.5 for Microsoft Office\OpenXMLSDKv25.msi Downloading F:\bcart.cache\sandbox\16.4.14693.15627\platform\Prerequisite Components\IIS URL Rewrite Module\rewrite_2.0_rtw_x64.msi [2020-08-17 22:42:36] Exception calling "DownloadFile" with "2" argument(s): "The remote server returned an error: (404) Not Found."
What…
Did URL rewrite just disappear from Microsoft Download?
Can that happen?
and yes, the URL used in all docker images and artifacts to download URL rewrite is dead as of this morning… – there are blue elephants!
Impact
The impact of this is pretty severe.
The dead URL is stamped into all artifacts and all docker images ever created.
During artifact download, the pre-requisites are also downloaded and that will fail. If you already have the artifacts downloaded and cached, you are good to go.
If you use Microsoft hosted agents for CI/CD pipelines, artifacts cannot download and your build will fail.
Next major / Next minor pipelines will likely fail as well.
The fix?
I will try to get Microsoft Download to restore the file. That can however take some time and we cannot have pipelines failing all over the world for days…
In the meantime, I have created an Azure CDN with the pre-requisites used and in the Download-File function in containerhelper, I have added a replacement url array, meaning that if any attempt is made to download the dead url, it will be downloaded from my own cdn instead.
This fix is available in BcContainerHelper 1.0.3, which already has shipped (9am), and in NavContainerHelper 0.7.0.25, which ships in a few hours.
The same fix is added to Generic image 0.1.0.16 which also is available now.
So basically with an updated NavContainerHelper or BcContainerHelper and new generic images you should be good to go.
Sorry for the inconvenience
Freddy Kristiansen
Technical Evangelist
Thank you for a speedy fix!
LikeLike
Hi Freddy,
I’m getting below error when trying to install BcContainerHelper (I’ve tried to uninstall navcontainerhelper and re-install – that works fine):
PS C:\WINDOWS\system32> Install-Module BcContainerHelper -force
PackageManagement\Install-Package : The following commands are already available on this system:’Add-FontsToBCContainer,Backup-BCContainerDatabases,Compile-AppInBCCont
ainer,Copy-CompanyInBCContainer,Copy-FileFromBCContainer,Copy-FileToBCContainer,Create-AlProjectFolderFromBcContainer,Create-AadAppsForBC,Create-AadUsersInBCContainer,
Enter-BCContainer,Export-BCContainerDatabasesAsBacpac,Extract-FilesFromBCContainerImage,Extract-FilesFromStoppedBCContainer,Get-BCContainerApiCompanyId,Get-BCContainer
App,Get-BCContainerAppInfo,Get-BCContainerAppRuntimePackage,Get-BCContainerArtifactUrl,Get-BCContainerBCUser,Get-BCContainerCountry,Get-BCContainerDebugInfo,Get-BCCont
ainerEula,Get-BCContainerEventLog,Get-BCContainerGenericTag,Get-BCContainerId,Get-BCContainerImageLabels,Get-BCContainerImageName,Get-BCContainerImageTags,Get-BCContai
nerIpAddress,Get-BCContainerLegal,Get-BCContainerName,Get-BCContainerNavVersion,Get-BCContainerOsVersion,Get-BCContainerPath,Get-BCContainerPlatformVersion,Get-BCConta
iners,Get-BCContainerServerConfiguration,Get-BCContainerSession,Get-BCContainerSharedFolders,Get-BCContainerTenants,Get-BestBCContainerImageName,Get-CompanyInBCContain
er,Get-TestsFromBCContainer,Import-BCContainerLicense,Import-ConfigPackageInBCContainer,Import-PfxCertificateToBCContainer,Import-TestToolkitToBCContainer,Install-BCCo
ntainerApp,Install-NAVSipCryptoProviderFromBCContainer,Invoke-BCContainerApi,Invoke-ScriptInBCContainer,New-BCContainer,New-BCContainerBCUser,New-BCContainerTenant,New
-BCContainerWindowsUser,New-BCContainerWizard,New-BCImage,New-CompanyInBCContainer,Open-BCContainer,Publish-BCContainerApp,Publish-NewApplicationToBcContainer,Remove-B
CContainer,Remove-BCContainerSession,Remove-BCContainerTenant,Remove-CompanyInBCContainer,Remove-ConfigPackageInBCContainer,Repair-BCContainerApp,Replace-BCServerConta
iner,Restart-BCContainer,Restore-DatabasesInBCContainer,Run-TestsInBCContainer,Setup-BCContainerTestUsers,Setup-TraefikContainerForBCContainers,Sign-BCContainerApp,Sta
rt-BCContainer,Start-BCContainerAppDataUpgrade,Stop-BCContainer,Sync-BCContainerApp,Test-BCContainer,UnInstall-BCContainerApp,UnPublish-BCContainerApp,Wait-BCContainer
Ready,Add-FontsToNavContainer,Add-GitToAlProjectFolder,Backup-NavContainerDatabases,Check-NavContainerHelperPermissions,Clean-BcContainerDatabase,Compile-AppInNavConta
iner,Compile-ObjectsInNavContainer,Convert-AlcOutputToAzureDevOps,Convert-ModifiedObjectsToAl,Convert-Txt2Al,Copy-AlSourceFiles,Copy-CompanyInNavContainer,Copy-FileFro
mNavContainer,Copy-FileToNavContainer,Create-AlProjectFolderFromNavContainer,Create-MyDeltaFolder,Create-MyOriginalFolder,Create-AadAppsForNav,Create-AadUsersInNavCont
ainer,Download-Artifacts,Download-File,Enter-NavContainer,Export-ModifiedObjectsAsDeltas,Export-NavContainerDatabasesAsBacpac,Export-NavContainerObjects,Extract-AppFil
eToFolder,Extract-FilesFromNavContainerImage,Extract-FilesFromStoppedNavContainer,Flush-ContainerHelperCache,Generate-SymbolsInNavContainer,Get-BCArtifactUrl,Get-BestG
enericImageName,Get-BestNavContainerImageName,Get-CompanyInNavContainer,Get-LatestAlLanguageExtensionUrl,Get-LocaleFromCountry,Get-NavArtifactUrl,Get-NavContainerApiCo
mpanyId,Get-NavContainerApp,Get-NavContainerAppInfo,Get-NavContainerAppRuntimePackage,Get-NavContainerArtifactUrl,Get-NavContainerCountry,Get-NavContainerDebugInfo,Get
-NavContainerEula,Get-NavContainerEventLog,Get-NavContainerGenericTag,Get-NavContainerId,Get-NavContainerImageLabels,Get-NavContainerImageName,Get-NavContainerImageTag
s,Get-NavContainerIpAddress,Get-NavContainerLegal,Get-NavContainerName,Get-NavContainerNavUser,Get-NavContainerNavVersion,Get-NavContainerOsVersion,Get-NavContainerPat
h,Get-NavContainerPlatformVersion,Get-NavContainers,Get-NavContainerServerConfiguration,Get-NavContainerSession,Get-NavContainerSharedFolders,Get-NavContainerTenants,G
et-NavVersionFromVersionInfo,Get-TestsFromNavContainer,Import-ConfigPackageInNavContainer,Import-DeltasToNavContainer,Import-NavContainerLicense,Import-ObjectsToNavCon
tainer,Import-PfxCertificateToNavContainer,Import-TestToolkitToNavContainer,Install-NavContainerApp,Install-NAVSipCryptoProviderFromNavContainer,Invoke-NavContainerApi
,Invoke-NavContainerCodeunit,Invoke-ScriptInNavContainer,New-CompanyInNavContainer,New-DesktopShortcut,New-LetsEncryptCertificate,New-NavContainer,New-NavContainerNavU
ser,New-NavContainerTenant,New-NavContainerWindowsUser,New-NavContainerWizard,New-NavImage,Open-NavContainer,Publish-NavContainerApp,Publish-NewApplicationToNavContain
er,Remove-CompanyInNavContainer,Remove-ConfigPackageInNavContainer,Remove-DesktopShortcut,Remove-NavContainer,Remove-NavContainerSession,Remove-NavContainerTenant,Rene
w-LetsEncryptCertificate,Repair-NavContainerApp,Replace-DependenciesInAppFile,Replace-NavServerContainer,Restart-NavContainer,Restore-DatabasesInNavContainer,Run-Tests
InNavContainer,Setup-NavContainerTestUsers,Setup-TraefikContainerForNavContainers,Sign-NavContainerApp,Sort-AppFoldersByDependencies,Start-NavContainer,Start-NavContai
nerAppDataUpgrade,Stop-NavContainer,Sync-NavContainerApp,Test-NavContainer,UnInstall-NavContainerApp,UnPublish-NavContainerApp,Wait-NavContainerReady’. This module ‘Bc
ContainerHelper’ may override the existing commands. If you still want to install this module ‘BcContainerHelper’, use -AllowClobber parameter.
At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1809 char:21
+ … $null = PackageManagement\Install-Package @PSBoundParameters
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (Microsoft.Power….InstallPackage:InstallPackage) [Install-Package], Exception
+ FullyQualifiedErrorId : CommandAlreadyAvailable,Validate-ModuleCommandAlreadyAvailable,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage
LikeLike
You need to uninstall all NavContainerHelper modules and exit/restart PowerShell before installing BcContainerHelper
LikeLike
yes, I had navcontainerhelter version 0.7.0.2 installed and it would not uninstall. By deleting the folder for the installation (C:\Program Files\WindowsPowerShell\Modules\navcontainerhelper) I got it out and BcContainerHelper 1.0.3 did install after that. Thank you Freddy
LikeLike
I got the error this morning.
I didn’t changed anything and simply run the script again and second time it succeeded without error.
LikeLike
Yes, if you are running 16.x containers on a machine where you have artifacts cache, it will work on the second run because the pre-req is already installed in the generic image and the new installer doesn’t attempt to use/download it. I didn’t want to recommend this as there is only one happy-path where 2nd run works.
LikeLike
Hi Freddy
I’m running below script
#—– Init —–
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force
#Install-Module BcContainerHelper -force
Update-Module BcContainerHelper
Import-Module BcContainerHelper
#—– Credentials —–
$username = “nav”
$password = “1234Abcd” | ConvertTo-SecureString -asPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential($username,$password)
$auth = ‘UserPassword’
#—- Create BC —-
$containerName = ‘bcdkonprem’
$imageName = ‘bc’
$artifactUrl = Get-BcArtifactUrl -type ‘OnPrem’ -version ” -country ‘dk’ -select ‘Latest’
New-BcContainer `
-accept_eula `
-containerName $containerName `
-credential $Cred `
-auth $auth `
-artifactUrl $artifactUrl `
-imageName $imageName `
-assignPremiumPlan `
-dns 1.1.1.1 `
-shortcuts Desktop `
-updateHosts
And it seems to error on step 2/6 – below is my console output:
BcContainerHelper is version 1.0.3
BcContainerHelper is running as administrator
Host is Microsoft Windows 10 Pro – 1909
Docker Client Version is 19.03.12
Docker Server Version is 19.03.12
Removing C:\ProgramData\BcContainerHelper\Extensions\bcdkonprem
ArtifactUrl and ImageName specified
Fetching all docker images
Image bc:onprem-16.4.14693.15445-dk doesn’t exist
Building image bc:onprem-16.4.14693.15445-dk based on https://bcartifacts.azureedge.net/onprem/16.4.14693.15445/dk
Building image bc:onprem-16.4.14693.15445-dk based on mcr.microsoft.com/dynamicsnav:10.0.18363.959-generic
bc:onprem-16.4.14693.15445-dk
Pulling latest image mcr.microsoft.com/dynamicsnav:10.0.18363.959-generic
10.0.18363.959-generic: Pulling from dynamicsnav
Generic Tag: 0.1.0.16
Container OS Version: 10.0.18363.959 (1909)
Host OS Version: 10.0.18363.959 (1909)
Using process isolation
Files in c:\bcartifacts.cache\tmp637333562987605339\my:
Copying Platform Artifacts
Copying Database
Copying Licensefile
Copying Installers
Copying ConfigurationPackages
Copying Applications
c:\bcartifacts.cache\tmp637333562987605339
Sending build context to Docker daemon 1.398GB
Step 1/6 : FROM mcr.microsoft.com/dynamicsnav:10.0.18363.959-generic
—> 587731de5e0f
Step 2/6 : ENV DatabaseServer=localhost DatabaseInstance=SQLEXPRESS DatabaseName=CRONUS IsBcSandbox=N artifactUrl=https://bcartifacts.azureedge.net/onprem/16.4.14693.15445/dk
—> Running in f08555c33ec6
hcsshim::PrepareLayer – failed failed in Win32: Incorrect function. (0x1)
Building image took 58 seconds
Using image bc:onprem-16.4.14693.15445-dk
Error: No such object: bc:onprem-16.4.14693.15445-dk
The property ‘Config’ cannot be found on this object. Verify that the property exists.
At C:\Program Files\WindowsPowerShell\Modules\BcContainerHelper\1.0.3\ContainerHandling\New-NavContainer.ps1:845 char:9
+ $devCountry = $inspect.Config.Labels.country
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : PropertyNotFoundStrict
LikeLike
Please create an issue on https://www.github.com/microsoft/navcontainerhelper/issues – it looks like a docker problem, which would require a docker reset to factory defaults or (with docker EE https://freddysblog.com/2018/12/11/clean-up-after-yourself-docker-your-mom-isnt-here/)
LikeLike
Thanks Freddy! Always fixing things I didn’t know were broken yet.
LikeLike
Hi Freddy,
I tried to create a container today and I have upgraded to 1.0.3 and it appears to fail again?
Did I miss something 🙂
Installing Business Central
Downloading Url Rewrite
Exception calling “DownloadFile” with “2” argument(s): “The remote server returned an error: (404) Not Found.”
at InstallPrerequisite, C:\Run\HelperFunctions.ps1: line 579
at , C:\Run\navinstall.ps1: line 30
at , C:\Run\start.ps1: line 282
at , : line 1
Initialization of container BC14-Demo failed
At C:\Program Files\WindowsPowerShell\Modules\BcContainerHelper\1.0.3\ContainerHandling\Wait-NavContainerReady.ps1:43 char:17
+ … throw “Initialization of container $containerName failed” …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (Initialization …C14-Demo failed:String) [], RuntimeException
+ FullyQualifiedErrorId : Initialization of container BC14-Demo failed
PS C:\WINDOWS\system32> Get-InstalledModule -Name BcContainerHelper
Version Name Repository Description
——- —- ———- ———–
1.0.3 BcContainerHelper PSGallery PowerShell module
LikeLike
Please create the issue on http://www.github.com/microsoft/navcontainerHelper/issues and include full script + full output
LikeLike
Pingback: ArcherPoint Dynamics NAV Business Central Developer Digest - vol 309 - Microsoft Dynamics NAV Community