From 1246a7fb6a0a254514f750fe858ff4f3ed43df2a Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Mon, 13 May 2019 15:54:19 -0700 Subject: [PATCH 01/29] Added scripts to build edge-proxy images --- builds/misc/images.yaml | 26 ++++++++++++++++-- edge-proxy/docker/linux/amd64/Dockerfile | 3 +++ edge-proxy/docker/linux/arm64v8/Dockerfile | 3 +++ edge-proxy/docker/manifest.yaml.template | 18 +++++++++++++ edge-proxy/src/run.sh | 31 ++++++++++++++++++++++ scripts/linux/buildEdgeProxy.sh | 17 ++++++++++++ 6 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 edge-proxy/docker/linux/amd64/Dockerfile create mode 100644 edge-proxy/docker/linux/arm64v8/Dockerfile create mode 100644 edge-proxy/docker/manifest.yaml.template create mode 100644 edge-proxy/src/run.sh create mode 100755 scripts/linux/buildEdgeProxy.sh diff --git a/builds/misc/images.yaml b/builds/misc/images.yaml index 5e21ce468db..f8cf1d2cb4c 100644 --- a/builds/misc/images.yaml +++ b/builds/misc/images.yaml @@ -38,6 +38,9 @@ jobs: - script: scripts/linux/buildDiagnostics.sh $(Build.Configuration) displayName: Build iotedge-diagnostics + - script: scripts/linux/buildEdgeProxy.sh + displayName: Build edge-proxy + - task: PublishBuildArtifacts@1 displayName: 'Publish Artifacts' inputs: @@ -48,8 +51,15 @@ jobs: - task: Bash@3 displayName: Build Image azureiotedge-diagnostics - aarch64 inputs: - filePath: scripts/linux/buildImage.sh - arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-diagnostics -n microsoft -P azureiotedge-diagnostics --target-arch aarch64 + filePath: scripts/linux/buildImage.sh + arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-diagnostics -n microsoft -P azureiotedge-diagnostics --target-arch aarch64 + + # Edge Proxy - Not Using Template because it doesn't have .NET code + - task: Bash@3 + displayName: Build Image - edge-proxy - aarch64 + inputs: + filePath: scripts/linux/buildImage.sh + arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-proxy -n microsoft -P azureiotedge-proxy --target-arch aarch64 # Edge Agent - Not Using Template for ARM64 because we have 2 different .NET Core. - task: Bash@3 @@ -154,6 +164,9 @@ jobs: - script: scripts/linux/buildDiagnostics.sh $(Build.Configuration) displayName: Build iotedge-diagnostics + - script: scripts/linux/buildEdgeProxy.sh + displayName: Build edge-proxy + - script: scripts/linux/createArtifactInfo.sh --output-folder '$(Build.BinariesDirectory)/publish' --build-number $(Build.BuildNumber) displayName: 'Create Artifact Info File' @@ -170,6 +183,13 @@ jobs: imageName: azureiotedge-diagnostics project: azureiotedge-diagnostics + # Edge Proxy + - template: templates/image-linux.yaml + parameters: + name: azureiotedge-proxy + imageName: azureiotedge-proxy + project: azureiotedge-proxy + # Edge Agent - template: templates/image-linux.yaml parameters: @@ -377,3 +397,5 @@ jobs: displayName: 'Publish Temperature Sensor Manifest' - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edgelet/iotedge-diagnostics/docker/manifest.yaml.template -n microsoft --tags "$(tags)" displayName: 'Publish azureiotedge-diagnostics Manifest' + - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edge-proxy/docker/manifest.yaml.template -n microsoft --tags "$(tags)" + displayName: 'Publish azureiotedge-proxy Manifest' diff --git a/edge-proxy/docker/linux/amd64/Dockerfile b/edge-proxy/docker/linux/amd64/Dockerfile new file mode 100644 index 00000000000..8a043d0aa95 --- /dev/null +++ b/edge-proxy/docker/linux/amd64/Dockerfile @@ -0,0 +1,3 @@ +FROM traefik:v1.7.11-alpine +COPY run.sh / +CMD ["/run.sh"] \ No newline at end of file diff --git a/edge-proxy/docker/linux/arm64v8/Dockerfile b/edge-proxy/docker/linux/arm64v8/Dockerfile new file mode 100644 index 00000000000..f1567c588ad --- /dev/null +++ b/edge-proxy/docker/linux/arm64v8/Dockerfile @@ -0,0 +1,3 @@ +FROM arm64v8/traefik:v1.7.11-alpine +COPY run.sh / +CMD ["/run.sh"] \ No newline at end of file diff --git a/edge-proxy/docker/manifest.yaml.template b/edge-proxy/docker/manifest.yaml.template new file mode 100644 index 00000000000..4123a0c394b --- /dev/null +++ b/edge-proxy/docker/manifest.yaml.template @@ -0,0 +1,18 @@ +image: __REGISTRY__/__NAMESPACE__/azureiotedge-proxy:__VERSION__ +tags: __TAGS__ +manifests: + - + image: __REGISTRY__/__NAMESPACE__/azureiotedge-proxy:__VERSION__-linux-amd64 + platform: + architecture: amd64 + os: linux + - + image: __REGISTRY__/__NAMESPACE__/azureiotedge-proxy:__VERSION__-linux-arm32v7 + platform: + architecture: arm + os: linux + - + image: __REGISTRY__/__NAMESPACE__/azureiotedge-proxy:__VERSION__-linux-arm64v8 + platform: + architecture: arm64 + os: linux diff --git a/edge-proxy/src/run.sh b/edge-proxy/src/run.sh new file mode 100644 index 00000000000..3fc99b8abf6 --- /dev/null +++ b/edge-proxy/src/run.sh @@ -0,0 +1,31 @@ +#!/bin/sh +set -e + +# read service account token from filesystem +file="/var/run/secrets/kubernetes.io/serviceaccount/token" +if [[ -e ${file} ]] +then + token=`cat ${file}` +else + echo "Could not find file ${file}" +fi + +config_src="/etc/traefik/traefik.toml" +if [[ ! -e ${config_src} ]] +then + echo "Could not find config ${config_src}" + exit 1 +fi + +# move traefik config to a new place to allow modification +config_dst="/traefik.toml" +cp ${config_src} ${config_dst} + +# find TOKEN placeholders and replace them with a token value +if [[ ! -z ${token} ]] +then + sed -i -e 's/__TOKEN__/'${token}'/g' ${config_dst} +fi + +# call traefik entry point script with a new config +/entrypoint.sh -c /traefik.toml \ No newline at end of file diff --git a/scripts/linux/buildEdgeProxy.sh b/scripts/linux/buildEdgeProxy.sh new file mode 100755 index 00000000000..7fb7a5ca008 --- /dev/null +++ b/scripts/linux/buildEdgeProxy.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# This script copies the edge-proxy executable files that goes into the azureiotedge-proxy image, +# for each supported arch (x86_64, arm32v7, arm64v8). +# It then publishes executable files along with their corresponding dockerfiles to the publish directory, +# so that buildImage.sh can build the container image. + +VERSIONINFO_FILE_PATH=$BUILD_REPOSITORY_LOCALPATH/versionInfo.json +PUBLISH_FOLDER=$BUILD_BINARIESDIRECTORY/publish +export VERSION="$(cat "$VERSIONINFO_FILE_PATH" | jq '.version' -r)" + +mkdir -p $PUBLISH_FOLDER/azureiotedge-proxy/ +cp -R $BUILD_REPOSITORY_LOCALPATH/edge-proxy/docker $PUBLISH_FOLDER/azureiotedge-proxy/docker + +cp $BUILD_REPOSITORY_LOCALPATH/edge-proxy/src/run.sh $PUBLISH_FOLDER/azureiotedge-proxy/docker/linux/amd64/ +cp $BUILD_REPOSITORY_LOCALPATH/edge-proxy/src/run.sh $PUBLISH_FOLDER/azureiotedge-proxy/docker/linux/arm32v7/ +cp $BUILD_REPOSITORY_LOCALPATH/edge-proxy/src/run.sh $PUBLISH_FOLDER/azureiotedge-proxy/docker/linux/arm64v8/ \ No newline at end of file From b7282b16a8e6f2046fffbb5d27b5814c33aa6d8e Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Mon, 13 May 2019 16:33:08 -0700 Subject: [PATCH 02/29] Added missed files --- builds/misc/images.yaml | 8 ++++---- edge-proxy/README.md | 3 +++ edge-proxy/docker/linux/arm32v7/Dockerfile | 3 +++ 3 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 edge-proxy/README.md create mode 100644 edge-proxy/docker/linux/arm32v7/Dockerfile diff --git a/builds/misc/images.yaml b/builds/misc/images.yaml index f8cf1d2cb4c..d770acd2db9 100644 --- a/builds/misc/images.yaml +++ b/builds/misc/images.yaml @@ -39,7 +39,7 @@ jobs: displayName: Build iotedge-diagnostics - script: scripts/linux/buildEdgeProxy.sh - displayName: Build edge-proxy + displayName: Build Edge Proxy - task: PublishBuildArtifacts@1 displayName: 'Publish Artifacts' @@ -56,7 +56,7 @@ jobs: # Edge Proxy - Not Using Template because it doesn't have .NET code - task: Bash@3 - displayName: Build Image - edge-proxy - aarch64 + displayName: Build Image - Edge Proxy - aarch64 inputs: filePath: scripts/linux/buildImage.sh arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-proxy -n microsoft -P azureiotedge-proxy --target-arch aarch64 @@ -165,7 +165,7 @@ jobs: displayName: Build iotedge-diagnostics - script: scripts/linux/buildEdgeProxy.sh - displayName: Build edge-proxy + displayName: Build Edge Proxy - script: scripts/linux/createArtifactInfo.sh --output-folder '$(Build.BinariesDirectory)/publish' --build-number $(Build.BuildNumber) displayName: 'Create Artifact Info File' @@ -186,7 +186,7 @@ jobs: # Edge Proxy - template: templates/image-linux.yaml parameters: - name: azureiotedge-proxy + name: Edge Proxy imageName: azureiotedge-proxy project: azureiotedge-proxy diff --git a/edge-proxy/README.md b/edge-proxy/README.md new file mode 100644 index 00000000000..81e33b4ab64 --- /dev/null +++ b/edge-proxy/README.md @@ -0,0 +1,3 @@ +# Edge Proxy + +This project contains a proxy server for edge modules that runs in kubernetes environment. \ No newline at end of file diff --git a/edge-proxy/docker/linux/arm32v7/Dockerfile b/edge-proxy/docker/linux/arm32v7/Dockerfile new file mode 100644 index 00000000000..a14fb7ba312 --- /dev/null +++ b/edge-proxy/docker/linux/arm32v7/Dockerfile @@ -0,0 +1,3 @@ +FROM arm32v6/traefik:v1.7.11-alpine +COPY run.sh / +CMD ["/run.sh"] \ No newline at end of file From c057e597fc033b366ea67bc8529408ff5f82fb0f Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Mon, 13 May 2019 16:39:30 -0700 Subject: [PATCH 03/29] Added missed path to executable script --- edge-proxy/docker/linux/amd64/Dockerfile | 2 +- edge-proxy/docker/linux/arm32v7/Dockerfile | 2 +- edge-proxy/docker/linux/arm64v8/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/edge-proxy/docker/linux/amd64/Dockerfile b/edge-proxy/docker/linux/amd64/Dockerfile index 8a043d0aa95..7859f10ae01 100644 --- a/edge-proxy/docker/linux/amd64/Dockerfile +++ b/edge-proxy/docker/linux/amd64/Dockerfile @@ -1,3 +1,3 @@ FROM traefik:v1.7.11-alpine -COPY run.sh / +COPY ./docker/linux/amd64/run.sh / CMD ["/run.sh"] \ No newline at end of file diff --git a/edge-proxy/docker/linux/arm32v7/Dockerfile b/edge-proxy/docker/linux/arm32v7/Dockerfile index a14fb7ba312..547cc450397 100644 --- a/edge-proxy/docker/linux/arm32v7/Dockerfile +++ b/edge-proxy/docker/linux/arm32v7/Dockerfile @@ -1,3 +1,3 @@ FROM arm32v6/traefik:v1.7.11-alpine -COPY run.sh / +COPY ./docker/linux/arm32v7/run.sh / CMD ["/run.sh"] \ No newline at end of file diff --git a/edge-proxy/docker/linux/arm64v8/Dockerfile b/edge-proxy/docker/linux/arm64v8/Dockerfile index f1567c588ad..51632eb7842 100644 --- a/edge-proxy/docker/linux/arm64v8/Dockerfile +++ b/edge-proxy/docker/linux/arm64v8/Dockerfile @@ -1,3 +1,3 @@ FROM arm64v8/traefik:v1.7.11-alpine -COPY run.sh / +COPY ./docker/linux/arm64v8/run.sh / CMD ["/run.sh"] \ No newline at end of file From 8401a9d4dd9c0a3d7b024b8b6d6c685ac8ded6a9 Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Mon, 13 May 2019 16:41:27 -0700 Subject: [PATCH 04/29] Commented for tests only --- builds/misc/images.yaml | 212 ++++++++++++++++++++-------------------- 1 file changed, 106 insertions(+), 106 deletions(-) diff --git a/builds/misc/images.yaml b/builds/misc/images.yaml index d770acd2db9..f4977dea841 100644 --- a/builds/misc/images.yaml +++ b/builds/misc/images.yaml @@ -22,21 +22,21 @@ jobs: - bash: 'docker login $(registry.address) --username $(registry.user) --password $(registry.password)' displayName: 'Docker Login' - - script: edgelet/build/linux/install.sh --package-arm - displayName: Install Rust - - - bash: 'echo "##vso[task.setvariable variable=PATH;]$HOME/.cargo/bin:$PATH"' - displayName: Modify path - - - bash: 'cargo install --git https://github.com/arsing/cross.git --branch set-path' - displayName: 'Install cross (fork with docker fix)' - - - script: scripts/linux/buildBranch.sh -c $(Build.Configuration) --no-rocksdb-bin --os Unix --dotnet_runtime netcoreapp3.0 - name: build - displayName: Build ($(Build.Configuration)) - - - script: scripts/linux/buildDiagnostics.sh $(Build.Configuration) - displayName: Build iotedge-diagnostics +# - script: edgelet/build/linux/install.sh --package-arm +# displayName: Install Rust +# +# - bash: 'echo "##vso[task.setvariable variable=PATH;]$HOME/.cargo/bin:$PATH"' +# displayName: Modify path +# +# - bash: 'cargo install --git https://github.com/arsing/cross.git --branch set-path' +# displayName: 'Install cross (fork with docker fix)' +# +# - script: scripts/linux/buildBranch.sh -c $(Build.Configuration) --no-rocksdb-bin --os Unix --dotnet_runtime netcoreapp3.0 +# name: build +# displayName: Build ($(Build.Configuration)) +# +# - script: scripts/linux/buildDiagnostics.sh $(Build.Configuration) +# displayName: Build iotedge-diagnostics - script: scripts/linux/buildEdgeProxy.sh displayName: Build Edge Proxy @@ -47,89 +47,89 @@ jobs: PathtoPublish: '$(Build.BinariesDirectory)/publish' ArtifactName: 'core-linux' - # azureiotedge-diagnostics - Not Using Template for ARM64 because we have 2 different .NET Core. - - task: Bash@3 - displayName: Build Image azureiotedge-diagnostics - aarch64 - inputs: - filePath: scripts/linux/buildImage.sh - arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-diagnostics -n microsoft -P azureiotedge-diagnostics --target-arch aarch64 - - # Edge Proxy - Not Using Template because it doesn't have .NET code - - task: Bash@3 - displayName: Build Image - Edge Proxy - aarch64 - inputs: - filePath: scripts/linux/buildImage.sh - arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-proxy -n microsoft -P azureiotedge-proxy --target-arch aarch64 - - # Edge Agent - Not Using Template for ARM64 because we have 2 different .NET Core. - - task: Bash@3 - displayName: Build Edge Agent Image - aarch64 - inputs: - filePath: scripts/linux/buildImage.sh - arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-agent -n microsoft -P Microsoft.Azure.Devices.Edge.Agent.Service --target-arch aarch64 - - # Edge Hub - Not Using Template for ARM64 because we have 2 different .NET Core. - - task: Bash@3 - displayName: Build Edge Hub Image - aarch64 - inputs: - filePath: scripts/linux/buildImage.sh - arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-hub -n microsoft -P Microsoft.Azure.Devices.Edge.Hub.Service --target-arch aarch64 - - # Simulated Temperature Sensor - Not Using Template for ARM64 because we have 2 different .NET Core. - - task: Bash@3 - displayName: Build Image Temperature Sensor - aarch64 - inputs: - filePath: scripts/linux/buildImage.sh - arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-simulated-temperature-sensor -n microsoft -P SimulatedTemperatureSensor --target-arch aarch64 - - # Temperature Filter - Not Using Template for ARM64 because we have 2 different .NET Core. - - task: Bash@3 - displayName: Build Image Temperature Filter - aarch64 - inputs: - filePath: scripts/linux/buildImage.sh - arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-temperature-filter -n microsoft -P TemperatureFilter --target-arch aarch64 - - # Load Gen - Not Using Template for ARM64 because we have 2 different .NET Core. - - task: Bash@3 - displayName: Build Image Load Gen - aarch64 - inputs: - filePath: scripts/linux/buildImage.sh - arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-load-gen -n microsoft -P load-gen --target-arch aarch64 - - # Messages Analyzer - Not Using Template for ARM64 because we have 2 different .NET Core. - - task: Bash@3 - displayName: Build Image Messages Analyzer - aarch64 - inputs: - filePath: scripts/linux/buildImage.sh - arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-analyzer -n microsoft -P MessagesAnalyzer --target-arch aarch64 - - # Functions Sample - Not Using Template for ARM64 because we have 2 different .NET Core.//TODO: Enable this once Functions supports arm64v8. Right now they are not ready. - #- task: Bash@3 - # displayName: Build Image Functions Sample - aarch64 - # inputs: - # filePath: scripts/linux/buildImage.sh - # arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-functions-filter -n azureiotedge -P EdgeHubTriggerCSharp --target-arch aarch64 - - # Direct Method Sender - Not Using Template for ARM64 because we have 2 different .NET Core. - - task: Bash@3 - displayName: Build Image Direct Method Sender - aarch64 - inputs: - filePath: scripts/linux/buildImage.sh - arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-direct-method-sender -n microsoft -P DirectMethodSender --target-arch aarch64 - - # Direct Method Receiver - Not Using Template for ARM64 because we have 2 different .NET Core. - - task: Bash@3 - displayName: Build Image Direct Method Receiver - aarch64 - inputs: - filePath: scripts/linux/buildImage.sh - arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-direct-method-receiver -n microsoft -P DirectMethodReceiver --target-arch aarch64 - - # Direct Method Cloud Sender - Not Using Template for ARM64 because we have 2 different .NET Core. - - task: Bash@3 - displayName: Build Image Direct Method Cloud Sender - aarch64 - inputs: - filePath: scripts/linux/buildImage.sh - arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-direct-method-cloud-sender -n microsoft -P DirectMethodCloudSender --target-arch aarch64 +# # azureiotedge-diagnostics - Not Using Template for ARM64 because we have 2 different .NET Core. +# - task: Bash@3 +# displayName: Build Image azureiotedge-diagnostics - aarch64 +# inputs: +# filePath: scripts/linux/buildImage.sh +# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-diagnostics -n microsoft -P azureiotedge-diagnostics --target-arch aarch64 +# +# # Edge Proxy - Not Using Template because it doesn't have .NET code +# - task: Bash@3 +# displayName: Build Image - Edge Proxy - aarch64 +# inputs: +# filePath: scripts/linux/buildImage.sh +# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-proxy -n microsoft -P azureiotedge-proxy --target-arch aarch64 +# +# # Edge Agent - Not Using Template for ARM64 because we have 2 different .NET Core. +# - task: Bash@3 +# displayName: Build Edge Agent Image - aarch64 +# inputs: +# filePath: scripts/linux/buildImage.sh +# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-agent -n microsoft -P Microsoft.Azure.Devices.Edge.Agent.Service --target-arch aarch64 +# +# # Edge Hub - Not Using Template for ARM64 because we have 2 different .NET Core. +# - task: Bash@3 +# displayName: Build Edge Hub Image - aarch64 +# inputs: +# filePath: scripts/linux/buildImage.sh +# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-hub -n microsoft -P Microsoft.Azure.Devices.Edge.Hub.Service --target-arch aarch64 +# +# # Simulated Temperature Sensor - Not Using Template for ARM64 because we have 2 different .NET Core. +# - task: Bash@3 +# displayName: Build Image Temperature Sensor - aarch64 +# inputs: +# filePath: scripts/linux/buildImage.sh +# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-simulated-temperature-sensor -n microsoft -P SimulatedTemperatureSensor --target-arch aarch64 +# +# # Temperature Filter - Not Using Template for ARM64 because we have 2 different .NET Core. +# - task: Bash@3 +# displayName: Build Image Temperature Filter - aarch64 +# inputs: +# filePath: scripts/linux/buildImage.sh +# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-temperature-filter -n microsoft -P TemperatureFilter --target-arch aarch64 +# +# # Load Gen - Not Using Template for ARM64 because we have 2 different .NET Core. +# - task: Bash@3 +# displayName: Build Image Load Gen - aarch64 +# inputs: +# filePath: scripts/linux/buildImage.sh +# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-load-gen -n microsoft -P load-gen --target-arch aarch64 +# +# # Messages Analyzer - Not Using Template for ARM64 because we have 2 different .NET Core. +# - task: Bash@3 +# displayName: Build Image Messages Analyzer - aarch64 +# inputs: +# filePath: scripts/linux/buildImage.sh +# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-analyzer -n microsoft -P MessagesAnalyzer --target-arch aarch64 +# +# # Functions Sample - Not Using Template for ARM64 because we have 2 different .NET Core.//TODO: Enable this once Functions supports arm64v8. Right now they are not ready. +# #- task: Bash@3 +# # displayName: Build Image Functions Sample - aarch64 +# # inputs: +# # filePath: scripts/linux/buildImage.sh +# # arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-functions-filter -n azureiotedge -P EdgeHubTriggerCSharp --target-arch aarch64 +# +# # Direct Method Sender - Not Using Template for ARM64 because we have 2 different .NET Core. +# - task: Bash@3 +# displayName: Build Image Direct Method Sender - aarch64 +# inputs: +# filePath: scripts/linux/buildImage.sh +# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-direct-method-sender -n microsoft -P DirectMethodSender --target-arch aarch64 +# +# # Direct Method Receiver - Not Using Template for ARM64 because we have 2 different .NET Core. +# - task: Bash@3 +# displayName: Build Image Direct Method Receiver - aarch64 +# inputs: +# filePath: scripts/linux/buildImage.sh +# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-direct-method-receiver -n microsoft -P DirectMethodReceiver --target-arch aarch64 +# +# # Direct Method Cloud Sender - Not Using Template for ARM64 because we have 2 different .NET Core. +# - task: Bash@3 +# displayName: Build Image Direct Method Cloud Sender - aarch64 +# inputs: +# filePath: scripts/linux/buildImage.sh +# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-direct-method-cloud-sender -n microsoft -P DirectMethodCloudSender --target-arch aarch64 ################################################################################ @@ -389,13 +389,13 @@ jobs: variables: tags: "['latest']" steps: - - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edge-agent/docker/manifest.yaml.template -n microsoft --tags "$(tags)" - displayName: 'Publish Edge Agent Manifest' - - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edge-hub/docker/manifest.yaml.template -n microsoft --tags "$(tags)" - displayName: 'Publish Edge Hub Manifest' - - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edge-modules/SimulatedTemperatureSensor/docker/manifest.yaml.template -n microsoft --tags "$(tags)" - displayName: 'Publish Temperature Sensor Manifest' - - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edgelet/iotedge-diagnostics/docker/manifest.yaml.template -n microsoft --tags "$(tags)" - displayName: 'Publish azureiotedge-diagnostics Manifest' +# - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edge-agent/docker/manifest.yaml.template -n microsoft --tags "$(tags)" +# displayName: 'Publish Edge Agent Manifest' +# - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edge-hub/docker/manifest.yaml.template -n microsoft --tags "$(tags)" +# displayName: 'Publish Edge Hub Manifest' +# - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edge-modules/SimulatedTemperatureSensor/docker/manifest.yaml.template -n microsoft --tags "$(tags)" +# displayName: 'Publish Temperature Sensor Manifest' +# - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edgelet/iotedge-diagnostics/docker/manifest.yaml.template -n microsoft --tags "$(tags)" +# displayName: 'Publish azureiotedge-diagnostics Manifest' - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edge-proxy/docker/manifest.yaml.template -n microsoft --tags "$(tags)" displayName: 'Publish azureiotedge-proxy Manifest' From 2d4ade0a6becf19f35fe4a15a3f57bd9999de0a5 Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Mon, 13 May 2019 16:44:07 -0700 Subject: [PATCH 05/29] Reverted changes --- builds/misc/images.yaml | 212 ++++++++++++++++++++-------------------- 1 file changed, 106 insertions(+), 106 deletions(-) diff --git a/builds/misc/images.yaml b/builds/misc/images.yaml index f4977dea841..789b36cfa5e 100644 --- a/builds/misc/images.yaml +++ b/builds/misc/images.yaml @@ -22,21 +22,21 @@ jobs: - bash: 'docker login $(registry.address) --username $(registry.user) --password $(registry.password)' displayName: 'Docker Login' -# - script: edgelet/build/linux/install.sh --package-arm -# displayName: Install Rust -# -# - bash: 'echo "##vso[task.setvariable variable=PATH;]$HOME/.cargo/bin:$PATH"' -# displayName: Modify path -# -# - bash: 'cargo install --git https://github.com/arsing/cross.git --branch set-path' -# displayName: 'Install cross (fork with docker fix)' -# -# - script: scripts/linux/buildBranch.sh -c $(Build.Configuration) --no-rocksdb-bin --os Unix --dotnet_runtime netcoreapp3.0 -# name: build -# displayName: Build ($(Build.Configuration)) -# -# - script: scripts/linux/buildDiagnostics.sh $(Build.Configuration) -# displayName: Build iotedge-diagnostics + - script: edgelet/build/linux/install.sh --package-arm + displayName: Install Rust + + - bash: 'echo "##vso[task.setvariable variable=PATH;]$HOME/.cargo/bin:$PATH"' + displayName: Modify path + + - bash: 'cargo install --git https://github.com/arsing/cross.git --branch set-path' + displayName: 'Install cross (fork with docker fix)' + + - script: scripts/linux/buildBranch.sh -c $(Build.Configuration) --no-rocksdb-bin --os Unix --dotnet_runtime netcoreapp3.0 + name: build + displayName: Build ($(Build.Configuration)) + + - script: scripts/linux/buildDiagnostics.sh $(Build.Configuration) + displayName: Build iotedge-diagnostics - script: scripts/linux/buildEdgeProxy.sh displayName: Build Edge Proxy @@ -47,89 +47,89 @@ jobs: PathtoPublish: '$(Build.BinariesDirectory)/publish' ArtifactName: 'core-linux' -# # azureiotedge-diagnostics - Not Using Template for ARM64 because we have 2 different .NET Core. -# - task: Bash@3 -# displayName: Build Image azureiotedge-diagnostics - aarch64 -# inputs: -# filePath: scripts/linux/buildImage.sh -# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-diagnostics -n microsoft -P azureiotedge-diagnostics --target-arch aarch64 -# -# # Edge Proxy - Not Using Template because it doesn't have .NET code -# - task: Bash@3 -# displayName: Build Image - Edge Proxy - aarch64 -# inputs: -# filePath: scripts/linux/buildImage.sh -# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-proxy -n microsoft -P azureiotedge-proxy --target-arch aarch64 -# -# # Edge Agent - Not Using Template for ARM64 because we have 2 different .NET Core. -# - task: Bash@3 -# displayName: Build Edge Agent Image - aarch64 -# inputs: -# filePath: scripts/linux/buildImage.sh -# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-agent -n microsoft -P Microsoft.Azure.Devices.Edge.Agent.Service --target-arch aarch64 -# -# # Edge Hub - Not Using Template for ARM64 because we have 2 different .NET Core. -# - task: Bash@3 -# displayName: Build Edge Hub Image - aarch64 -# inputs: -# filePath: scripts/linux/buildImage.sh -# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-hub -n microsoft -P Microsoft.Azure.Devices.Edge.Hub.Service --target-arch aarch64 -# -# # Simulated Temperature Sensor - Not Using Template for ARM64 because we have 2 different .NET Core. -# - task: Bash@3 -# displayName: Build Image Temperature Sensor - aarch64 -# inputs: -# filePath: scripts/linux/buildImage.sh -# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-simulated-temperature-sensor -n microsoft -P SimulatedTemperatureSensor --target-arch aarch64 -# -# # Temperature Filter - Not Using Template for ARM64 because we have 2 different .NET Core. -# - task: Bash@3 -# displayName: Build Image Temperature Filter - aarch64 -# inputs: -# filePath: scripts/linux/buildImage.sh -# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-temperature-filter -n microsoft -P TemperatureFilter --target-arch aarch64 -# -# # Load Gen - Not Using Template for ARM64 because we have 2 different .NET Core. -# - task: Bash@3 -# displayName: Build Image Load Gen - aarch64 -# inputs: -# filePath: scripts/linux/buildImage.sh -# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-load-gen -n microsoft -P load-gen --target-arch aarch64 -# -# # Messages Analyzer - Not Using Template for ARM64 because we have 2 different .NET Core. -# - task: Bash@3 -# displayName: Build Image Messages Analyzer - aarch64 -# inputs: -# filePath: scripts/linux/buildImage.sh -# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-analyzer -n microsoft -P MessagesAnalyzer --target-arch aarch64 -# -# # Functions Sample - Not Using Template for ARM64 because we have 2 different .NET Core.//TODO: Enable this once Functions supports arm64v8. Right now they are not ready. -# #- task: Bash@3 -# # displayName: Build Image Functions Sample - aarch64 -# # inputs: -# # filePath: scripts/linux/buildImage.sh -# # arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-functions-filter -n azureiotedge -P EdgeHubTriggerCSharp --target-arch aarch64 -# -# # Direct Method Sender - Not Using Template for ARM64 because we have 2 different .NET Core. -# - task: Bash@3 -# displayName: Build Image Direct Method Sender - aarch64 -# inputs: -# filePath: scripts/linux/buildImage.sh -# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-direct-method-sender -n microsoft -P DirectMethodSender --target-arch aarch64 -# -# # Direct Method Receiver - Not Using Template for ARM64 because we have 2 different .NET Core. -# - task: Bash@3 -# displayName: Build Image Direct Method Receiver - aarch64 -# inputs: -# filePath: scripts/linux/buildImage.sh -# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-direct-method-receiver -n microsoft -P DirectMethodReceiver --target-arch aarch64 -# -# # Direct Method Cloud Sender - Not Using Template for ARM64 because we have 2 different .NET Core. -# - task: Bash@3 -# displayName: Build Image Direct Method Cloud Sender - aarch64 -# inputs: -# filePath: scripts/linux/buildImage.sh -# arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-direct-method-cloud-sender -n microsoft -P DirectMethodCloudSender --target-arch aarch64 + # azureiotedge-diagnostics - Not Using Template for ARM64 because we have 2 different .NET Core. + - task: Bash@3 + displayName: Build Image azureiotedge-diagnostics - aarch64 + inputs: + filePath: scripts/linux/buildImage.sh + arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-diagnostics -n microsoft -P azureiotedge-diagnostics --target-arch aarch64 + + # Edge Proxy - Not Using Template because it doesn't have .NET code + - task: Bash@3 + displayName: Build Image - Edge Proxy - aarch64 + inputs: + filePath: scripts/linux/buildImage.sh + arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-proxy -n microsoft -P azureiotedge-proxy --target-arch aarch64 + + # Edge Agent - Not Using Template for ARM64 because we have 2 different .NET Core. + - task: Bash@3 + displayName: Build Edge Agent Image - aarch64 + inputs: + filePath: scripts/linux/buildImage.sh + arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-agent -n microsoft -P Microsoft.Azure.Devices.Edge.Agent.Service --target-arch aarch64 + + # Edge Hub - Not Using Template for ARM64 because we have 2 different .NET Core. + - task: Bash@3 + displayName: Build Edge Hub Image - aarch64 + inputs: + filePath: scripts/linux/buildImage.sh + arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-hub -n microsoft -P Microsoft.Azure.Devices.Edge.Hub.Service --target-arch aarch64 + + # Simulated Temperature Sensor - Not Using Template for ARM64 because we have 2 different .NET Core. + - task: Bash@3 + displayName: Build Image Temperature Sensor - aarch64 + inputs: + filePath: scripts/linux/buildImage.sh + arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-simulated-temperature-sensor -n microsoft -P SimulatedTemperatureSensor --target-arch aarch64 + + # Temperature Filter - Not Using Template for ARM64 because we have 2 different .NET Core. + - task: Bash@3 + displayName: Build Image Temperature Filter - aarch64 + inputs: + filePath: scripts/linux/buildImage.sh + arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-temperature-filter -n microsoft -P TemperatureFilter --target-arch aarch64 + + # Load Gen - Not Using Template for ARM64 because we have 2 different .NET Core. + - task: Bash@3 + displayName: Build Image Load Gen - aarch64 + inputs: + filePath: scripts/linux/buildImage.sh + arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-load-gen -n microsoft -P load-gen --target-arch aarch64 + + # Messages Analyzer - Not Using Template for ARM64 because we have 2 different .NET Core. + - task: Bash@3 + displayName: Build Image Messages Analyzer - aarch64 + inputs: + filePath: scripts/linux/buildImage.sh + arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-analyzer -n microsoft -P MessagesAnalyzer --target-arch aarch64 + + # Functions Sample - Not Using Template for ARM64 because we have 2 different .NET Core.//TODO: Enable this once Functions supports arm64v8. Right now they are not ready. + #- task: Bash@3 + # displayName: Build Image Functions Sample - aarch64 + # inputs: + # filePath: scripts/linux/buildImage.sh + # arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-functions-filter -n azureiotedge -P EdgeHubTriggerCSharp --target-arch aarch64 + + # Direct Method Sender - Not Using Template for ARM64 because we have 2 different .NET Core. + - task: Bash@3 + displayName: Build Image Direct Method Sender - aarch64 + inputs: + filePath: scripts/linux/buildImage.sh + arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-direct-method-sender -n microsoft -P DirectMethodSender --target-arch aarch64 + + # Direct Method Receiver - Not Using Template for ARM64 because we have 2 different .NET Core. + - task: Bash@3 + displayName: Build Image Direct Method Receiver - aarch64 + inputs: + filePath: scripts/linux/buildImage.sh + arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-direct-method-receiver -n microsoft -P DirectMethodReceiver --target-arch aarch64 + + # Direct Method Cloud Sender - Not Using Template for ARM64 because we have 2 different .NET Core. + - task: Bash@3 + displayName: Build Image Direct Method Cloud Sender - aarch64 + inputs: + filePath: scripts/linux/buildImage.sh + arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-direct-method-cloud-sender -n microsoft -P DirectMethodCloudSender --target-arch aarch64 ################################################################################ @@ -389,13 +389,13 @@ jobs: variables: tags: "['latest']" steps: -# - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edge-agent/docker/manifest.yaml.template -n microsoft --tags "$(tags)" -# displayName: 'Publish Edge Agent Manifest' -# - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edge-hub/docker/manifest.yaml.template -n microsoft --tags "$(tags)" -# displayName: 'Publish Edge Hub Manifest' -# - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edge-modules/SimulatedTemperatureSensor/docker/manifest.yaml.template -n microsoft --tags "$(tags)" -# displayName: 'Publish Temperature Sensor Manifest' -# - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edgelet/iotedge-diagnostics/docker/manifest.yaml.template -n microsoft --tags "$(tags)" -# displayName: 'Publish azureiotedge-diagnostics Manifest' + - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edge-agent/docker/manifest.yaml.template -n microsoft --tags "$(tags)" + displayName: 'Publish Edge Agent Manifest' + - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edge-hub/docker/manifest.yaml.template -n microsoft --tags "$(tags)" + displayName: 'Publish Edge Hub Manifest' + - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edge-modules/SimulatedTemperatureSensor/docker/manifest.yaml.template -n microsoft --tags "$(tags)" + displayName: 'Publish Temperature Sensor Manifest' + - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edgelet/iotedge-diagnostics/docker/manifest.yaml.template -n microsoft --tags "$(tags)" + displayName: 'Publish azureiotedge-diagnostics Manifest' - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edge-proxy/docker/manifest.yaml.template -n microsoft --tags "$(tags)" displayName: 'Publish azureiotedge-proxy Manifest' From c69b2d0c87aa0bf86547b9944a81910cbd79d0b6 Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Thu, 16 May 2019 00:01:43 -0700 Subject: [PATCH 06/29] Updated build script for edgelet projects --- builds/misc/images.yaml | 23 ++-- scripts/linux/buildIotedged.sh | 235 +++++++++++++++++++++++++++++++++ 2 files changed, 247 insertions(+), 11 deletions(-) create mode 100755 scripts/linux/buildIotedged.sh diff --git a/builds/misc/images.yaml b/builds/misc/images.yaml index 789b36cfa5e..842d795e3aa 100644 --- a/builds/misc/images.yaml +++ b/builds/misc/images.yaml @@ -35,7 +35,8 @@ jobs: name: build displayName: Build ($(Build.Configuration)) - - script: scripts/linux/buildDiagnostics.sh $(Build.Configuration) +# - script: scripts/linux/buildDiagnostics.sh $(Build.Configuration) + - script: scripts/linux/buildIotedged.sh -i azureiotedge-diagnostics -P iotedge-diagnostics -n microsoft -t aarch64 displayName: Build iotedge-diagnostics - script: scripts/linux/buildEdgeProxy.sh @@ -63,70 +64,70 @@ jobs: # Edge Agent - Not Using Template for ARM64 because we have 2 different .NET Core. - task: Bash@3 - displayName: Build Edge Agent Image - aarch64 + displayName: Build Image - Edge Agent - aarch64 inputs: filePath: scripts/linux/buildImage.sh arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-agent -n microsoft -P Microsoft.Azure.Devices.Edge.Agent.Service --target-arch aarch64 # Edge Hub - Not Using Template for ARM64 because we have 2 different .NET Core. - task: Bash@3 - displayName: Build Edge Hub Image - aarch64 + displayName: Build Image - Edge Hub - aarch64 inputs: filePath: scripts/linux/buildImage.sh arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-hub -n microsoft -P Microsoft.Azure.Devices.Edge.Hub.Service --target-arch aarch64 # Simulated Temperature Sensor - Not Using Template for ARM64 because we have 2 different .NET Core. - task: Bash@3 - displayName: Build Image Temperature Sensor - aarch64 + displayName: Build Image - Temperature Sensor - aarch64 inputs: filePath: scripts/linux/buildImage.sh arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-simulated-temperature-sensor -n microsoft -P SimulatedTemperatureSensor --target-arch aarch64 # Temperature Filter - Not Using Template for ARM64 because we have 2 different .NET Core. - task: Bash@3 - displayName: Build Image Temperature Filter - aarch64 + displayName: Build Image - Temperature Filter - aarch64 inputs: filePath: scripts/linux/buildImage.sh arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-temperature-filter -n microsoft -P TemperatureFilter --target-arch aarch64 # Load Gen - Not Using Template for ARM64 because we have 2 different .NET Core. - task: Bash@3 - displayName: Build Image Load Gen - aarch64 + displayName: Build Image - Load Gen - aarch64 inputs: filePath: scripts/linux/buildImage.sh arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-load-gen -n microsoft -P load-gen --target-arch aarch64 # Messages Analyzer - Not Using Template for ARM64 because we have 2 different .NET Core. - task: Bash@3 - displayName: Build Image Messages Analyzer - aarch64 + displayName: Build Image - Messages Analyzer - aarch64 inputs: filePath: scripts/linux/buildImage.sh arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-analyzer -n microsoft -P MessagesAnalyzer --target-arch aarch64 # Functions Sample - Not Using Template for ARM64 because we have 2 different .NET Core.//TODO: Enable this once Functions supports arm64v8. Right now they are not ready. #- task: Bash@3 - # displayName: Build Image Functions Sample - aarch64 + # displayName: Build Image - Functions Sample - aarch64 # inputs: # filePath: scripts/linux/buildImage.sh # arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-functions-filter -n azureiotedge -P EdgeHubTriggerCSharp --target-arch aarch64 # Direct Method Sender - Not Using Template for ARM64 because we have 2 different .NET Core. - task: Bash@3 - displayName: Build Image Direct Method Sender - aarch64 + displayName: Build Image - Direct Method Sender - aarch64 inputs: filePath: scripts/linux/buildImage.sh arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-direct-method-sender -n microsoft -P DirectMethodSender --target-arch aarch64 # Direct Method Receiver - Not Using Template for ARM64 because we have 2 different .NET Core. - task: Bash@3 - displayName: Build Image Direct Method Receiver - aarch64 + displayName: Build Image - Direct Method Receiver - aarch64 inputs: filePath: scripts/linux/buildImage.sh arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-direct-method-receiver -n microsoft -P DirectMethodReceiver --target-arch aarch64 # Direct Method Cloud Sender - Not Using Template for ARM64 because we have 2 different .NET Core. - task: Bash@3 - displayName: Build Image Direct Method Cloud Sender - aarch64 + displayName: Build Image - Direct Method Cloud Sender - aarch64 inputs: filePath: scripts/linux/buildImage.sh arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-direct-method-cloud-sender -n microsoft -P DirectMethodCloudSender --target-arch aarch64 diff --git a/scripts/linux/buildIotedged.sh b/scripts/linux/buildIotedged.sh new file mode 100755 index 00000000000..e1bea9590ee --- /dev/null +++ b/scripts/linux/buildIotedged.sh @@ -0,0 +1,235 @@ +#!/bin/bash + +# This script copies the iodedged executable files that goes into the azureiotedge-iotedged image, +# for each supported arch (x86_64, arm32v7, arm64v8). +# It then publishes executable files along with their corresponding dockerfiles to the publish directory, +# so that buildImage.sh can build the container image. + +set -e + +############################################################################### +# Define Environment Variables +############################################################################### +ARCH=$(uname -m) +TOOLCHAIN= +SCRIPT_NAME=$(basename $0) +SOURCE_DIR= +PUBLISH_DIR= +PROJECT= +SRC_DOCKERFILE= +DOCKERFILE= +DOCKER_IMAGENAME= +DEFAULT_DOCKER_NAMESPACE="microsoft" +DOCKER_NAMESPACE=${DEFAULT_DOCKER_NAMESPACE} +BUILD_BINARIESDIRECTORY=${BUILD_BINARIESDIRECTORY:=""} +EDGELET_DIR= + +############################################################################### +# Function to obtain the underlying architecture and check if supported +############################################################################### +check_arch() +{ + if [[ "$ARCH" == "x86_64" ]]; then + ARCH="amd64" + TOOLCHAIN="x86_64-unknown-linux-musl" + elif [[ "$ARCH" == "armv7l" ]]; then + ARCH="arm32v7" + TOOLCHAIN="armv7-unknown-linux-gnueabihf" + elif [[ "$ARCH" == "aarch64" ]]; then + ARCH="arm64v8" + TOOLCHAIN="aarch64-unknown-linux-musl" + else + echo "Unsupported architecture" + exit 1 + fi +} + +############################################################################### +# Print usage information pertaining to this script and exit +############################################################################### +usage() +{ + echo "$SCRIPT_NAME [options]" + echo "Note: Depending on the options you might have to run this as root or sudo." + echo "" + echo "options" + echo " -i, --image-name Image name (e.g. edge-agent)" + echo " -P, --project Project to build image for (e.g. iotedged)" + echo " -t, --target-arch Target architecture (default: uname -m)" + echo " -n, --namespace Docker namespace (default: $DEFAULT_DOCKER_NAMESPACE)" + echo "--bin-dir Directory containing the output binaries. Either use this option or set env variable BUILD_BINARIESDIRECTORY" + exit 1; +} + +print_help_and_exit() +{ + echo "Run $SCRIPT_NAME --help for more information." + exit 1 +} + +############################################################################### +# Obtain and validate the options supported by this script +############################################################################### +process_args() +{ + save_next_arg=0 + for arg in $@ + do + if [[ ${save_next_arg} -eq 1 ]]; then + ARCH="$arg" + check_arch + save_next_arg=0 + elif [[ ${save_next_arg} -eq 2 ]]; then + PROJECT="$arg" + save_next_arg=0 + elif [[ ${save_next_arg} -eq 3 ]]; then + DOCKER_IMAGENAME="$arg" + save_next_arg=0 + elif [ ${save_next_arg} -eq 4 ]; then + DOCKER_NAMESPACE="$arg" + save_next_arg=0 + elif [ ${save_next_arg} -eq 5 ]; then + BUILD_BINARIESDIRECTORY="$arg" + save_next_arg=0 + else + case "$arg" in + "-h" | "--help" ) usage;; + "-t" | "--target-arch" ) save_next_arg=1;; + "-P" | "--project" ) save_next_arg=2;; + "-i" | "--image-name" ) save_next_arg=3;; + "-n" | "--namespace" ) save_next_arg=4;; + "--bin-dir" ) save_next_arg=5;; + * ) usage;; + esac + fi + done + + if [[ -z ${DOCKER_IMAGENAME} ]]; then + echo "Docker image name parameter invalid" + print_help_and_exit + fi + + if [[ -z ${BUILD_BINARIESDIRECTORY} ]] || [[ ! -d ${BUILD_BINARIESDIRECTORY} ]]; then + echo "Bin directory does not exist or is invalid" + print_help_and_exit + fi + + PUBLISH_DIR=${BUILD_BINARIESDIRECTORY}/publish + + if [[ ! -d ${PUBLISH_DIR} ]]; then + echo "Publish directory does not exist or is invalid" + print_help_and_exit + fi + + EDGELET_DIR=${BUILD_BINARIESDIRECTORY}/edgelet + if [[ -z ${EDGELET_DIR} ]] || [[ ! -d ${EDGELET_DIR} ]]; then + echo "No directory for edgelet found in $BUILD_BINARIESDIRECTORY" + print_help_and_exit + fi + + DOCKER_DIR=${EDGELET_DIR}/${PROJECT}/docker + if [[ -z ${DOCKER_DIR} ]] || [[ ! -d ${DOCKER_DIR} ]]; then + echo "No docker directory for $PROJECT at $DOCKER_DIR" + print_help_and_exit + fi + + DOCKERFILE="$DOCKER_DIR/linux/$ARCH/Dockerfile" + if [[ ! -f ${DOCKERFILE} ]]; then + echo "No Dockerfile at $DOCKERFILE" + print_help_and_exit + fi +} + +############################################################################### +# Build project and publish result +############################################################################### +build_project() +{ + local EXE_DOCKER_DIR=${PUBLISH_DIR}/${DOCKER_IMAGENAME}/docker/linux/${ARCH} + mkdir -p ${EXE_DOCKER_DIR} + + local EXE_DOCKERFILE=${EXE_DOCKER_DIR}/Dockerfile + echo "Copy Dockerfile to $EXE_DOCKERFILE" + cp ${DOCKERFILE} ${EXE_DOCKERFILE} + + # +#BUILD_CONFIGURATION=${1:-release} + +#if [[ "${BUILD_CONFIGURATION,,}" == 'release' ]]; then + BUILD_CONFIGURATION='release' + BUILD_CONFIG_OPTION='--release' +#else +# BUILD_CONFIGURATION='debug' +# BUILD_CONFIG_OPTION='' +#fi + + + echo "Build ${EDGELET_DIR}/$PROJECT for $ARCH" + + cd ${EDGELET_DIR} + + cross build -p $PROJECT ${BUILD_CONFIG_OPTION} --target ${TOOLCHAIN} + strip ${EDGELET_DIR}/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/$PROJECT + cp ${EDGELET_DIR}/edgelet/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/$PROJECT ${EXE_DOCKER_DIR}/$PROJECT +} + + + + +#mkdir -p $PUBLISH_FOLDER/azureiotedge-iotedged/ +#cp -R $BUILD_REPOSITORY_LOCALPATH/edgelet/iotedged/docker $PUBLISH_FOLDER/azureiotedge-iotedged/docker +# +#cd "$BUILD_REPOSITORY_LOCALPATH/edgelet" + +#cross build -p iotedged $BUILD_CONFIG_OPTION --target x86_64-unknown-linux-musl +#strip $BUILD_REPOSITORY_LOCALPATH/edgelet/target/x86_64-unknown-linux-musl/$BUILD_CONFIGURATION/iotedged +#cp $BUILD_REPOSITORY_LOCALPATH/edgelet/target/x86_64-unknown-linux-musl/$BUILD_CONFIGURATION/iotedged $PUBLISH_FOLDER/azureiotedge-iotedged/docker/linux/amd64/ + +#cross build -p iotedged $BUILD_CONFIG_OPTION --target armv7-unknown-linux-musleabihf +#arm-linux-gnueabihf-strip $BUILD_REPOSITORY_LOCALPATH/edgelet/target/armv7-unknown-linux-musleabihf/$BUILD_CONFIGURATION/iotedged +#cp $BUILD_REPOSITORY_LOCALPATH/edgelet/target/armv7-unknown-linux-musleabihf/$BUILD_CONFIGURATION/iotedged $PUBLISH_FOLDER/azureiotedge-diagnostics/docker/linux/arm32v7/ + +#cross build -p iotedged $BUILD_CONFIG_OPTION --target armv7-unknown-linux-gnueabihf +#arm-linux-gnueabihf-strip $BUILD_REPOSITORY_LOCALPATH/edgelet/target/armv7-unknown-linux-gnueabihf/$BUILD_CONFIGURATION/iotedged +#cp $BUILD_REPOSITORY_LOCALPATH/edgelet/target/armv7-unknown-linux-gnueabihf/$BUILD_CONFIGURATION/iotedged $PUBLISH_FOLDER/azureiotedge-diagnostics/docker/linux/arm32v7/ + +#cross build -p iotedged $BUILD_CONFIG_OPTION --target aarch64-unknown-linux-musl +#aarch64-linux-gnu-strip $BUILD_REPOSITORY_LOCALPATH/edgelet/target/aarch64-unknown-linux-musl/$BUILD_CONFIGURATION/iotedged +#cp $BUILD_REPOSITORY_LOCALPATH/edgelet/target/aarch64-unknown-linux-musl/$BUILD_CONFIGURATION/iotedged $PUBLISH_FOLDER/azureiotedge/docker/linux/arm64v8/ + +############################################################################### +# Main Script Execution +############################################################################### +check_arch +process_args "$@" + +build_project + + +#----------------------------------- + + +#V1 +#mkdir -p $PUBLISH_FOLDER/azureiotedge-iotedged/ +#cp -R $BUILD_REPOSITORY_LOCALPATH/edgelet/build/debian9 $PUBLISH_FOLDER/azureiotedge-iotedged/docker +# +## setup libiothsm build +#cmake -DBUILD_SHARED=ON -Drun_unittests=ON -Duse_emulator=OFF -DCMAKE_BUILD_TYPE=Release -S edgelet/hsm-sys/azure-iot-hsm-c -B edgelet/hsm-sys/azure-iot-hsm-c/build +# +## build libiothsm +#make -C edgelet/hsm-sys/azure-iot-hsm-c/build iothsm +# +## copy libiothsm to staging folder +#cp edgelet/hsm-sys/azure-iot-hsm-c/build/*.so* $PUBLISH_FOLDER/azureiotedge-iotedged/ +# +## build iotedged +#make -C edgelet +# +## copy iotedged to staging folder +#cp edgelet/target/release/iotedged $PUBLISH_FOLDER/azureiotedge-iotedged/ +# + + +#cp $BUILD_REPOSITORY_LOCALPATH/edge-proxy/src/run.sh $PUBLISH_FOLDER/azureiotedge-proxy/docker/linux/amd64/ +#cp $BUILD_REPOSITORY_LOCALPATH/edge-proxy/src/run.sh $PUBLISH_FOLDER/azureiotedge-proxy/docker/linux/arm32v7/ +#cp $BUILD_REPOSITORY_LOCALPATH/edge-proxy/src/run.sh $PUBLISH_FOLDER/azureiotedge-proxy/docker/linux/arm64v8/ \ No newline at end of file From 634c64baf0f2c3693f81165618dcbcc75238172a Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Thu, 16 May 2019 00:25:08 -0700 Subject: [PATCH 07/29] Fixed strip tool --- scripts/linux/buildIotedged.sh | 56 +++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/scripts/linux/buildIotedged.sh b/scripts/linux/buildIotedged.sh index e1bea9590ee..9f97c977e44 100755 --- a/scripts/linux/buildIotedged.sh +++ b/scripts/linux/buildIotedged.sh @@ -12,6 +12,7 @@ set -e ############################################################################### ARCH=$(uname -m) TOOLCHAIN= +STRIP= SCRIPT_NAME=$(basename $0) SOURCE_DIR= PUBLISH_DIR= @@ -23,6 +24,8 @@ DEFAULT_DOCKER_NAMESPACE="microsoft" DOCKER_NAMESPACE=${DEFAULT_DOCKER_NAMESPACE} BUILD_BINARIESDIRECTORY=${BUILD_BINARIESDIRECTORY:=""} EDGELET_DIR= +BUILD_CONFIGURATION="release" +BUILD_CONFIG_OPTION= ############################################################################### # Function to obtain the underlying architecture and check if supported @@ -32,12 +35,15 @@ check_arch() if [[ "$ARCH" == "x86_64" ]]; then ARCH="amd64" TOOLCHAIN="x86_64-unknown-linux-musl" + STRIP="strip" elif [[ "$ARCH" == "armv7l" ]]; then ARCH="arm32v7" TOOLCHAIN="armv7-unknown-linux-gnueabihf" + STRIP="arm-linux-gnueabihf-strip" elif [[ "$ARCH" == "aarch64" ]]; then ARCH="arm64v8" TOOLCHAIN="aarch64-unknown-linux-musl" + STRIP="aarch64-linux-gnu-strip" else echo "Unsupported architecture" exit 1 @@ -57,6 +63,7 @@ usage() echo " -P, --project Project to build image for (e.g. iotedged)" echo " -t, --target-arch Target architecture (default: uname -m)" echo " -n, --namespace Docker namespace (default: $DEFAULT_DOCKER_NAMESPACE)" + echo " -c, --configuration Build configuration" echo "--bin-dir Directory containing the output binaries. Either use this option or set env variable BUILD_BINARIESDIRECTORY" exit 1; } @@ -85,10 +92,13 @@ process_args() elif [[ ${save_next_arg} -eq 3 ]]; then DOCKER_IMAGENAME="$arg" save_next_arg=0 - elif [ ${save_next_arg} -eq 4 ]; then + elif [[ ${save_next_arg} -eq 4 ]]; then DOCKER_NAMESPACE="$arg" save_next_arg=0 - elif [ ${save_next_arg} -eq 5 ]; then + elif [[ ${save_next_arg} -eq 5 ]]; then + BUILD_CONFIGURATION="$arg" + save_next_arg=0 + elif [[ ${save_next_arg} -eq 6 ]]; then BUILD_BINARIESDIRECTORY="$arg" save_next_arg=0 else @@ -98,7 +108,8 @@ process_args() "-P" | "--project" ) save_next_arg=2;; "-i" | "--image-name" ) save_next_arg=3;; "-n" | "--namespace" ) save_next_arg=4;; - "--bin-dir" ) save_next_arg=5;; + "-c" | "--configuration" ) save_next_arg=5;; + "--bin-dir" ) save_next_arg=6;; * ) usage;; esac fi @@ -121,7 +132,7 @@ process_args() print_help_and_exit fi - EDGELET_DIR=${BUILD_BINARIESDIRECTORY}/edgelet + EDGELET_DIR=${BUILD_REPOSITORY_LOCALPATH}/edgelet if [[ -z ${EDGELET_DIR} ]] || [[ ! -d ${EDGELET_DIR} ]]; then echo "No directory for edgelet found in $BUILD_BINARIESDIRECTORY" print_help_and_exit @@ -138,6 +149,14 @@ process_args() echo "No Dockerfile at $DOCKERFILE" print_help_and_exit fi + + if ${BUILD_CONFIG_OPTION} == "release"; then + BUILD_CONFIGURATION='release' + BUILD_CONFIG_OPTION='--release' + else + BUILD_CONFIGURATION='debug' + BUILD_CONFIG_OPTION='' + fi } ############################################################################### @@ -152,28 +171,22 @@ build_project() echo "Copy Dockerfile to $EXE_DOCKERFILE" cp ${DOCKERFILE} ${EXE_DOCKERFILE} - # -#BUILD_CONFIGURATION=${1:-release} - -#if [[ "${BUILD_CONFIGURATION,,}" == 'release' ]]; then - BUILD_CONFIGURATION='release' - BUILD_CONFIG_OPTION='--release' -#else -# BUILD_CONFIGURATION='debug' -# BUILD_CONFIG_OPTION='' -#fi - - echo "Build ${EDGELET_DIR}/$PROJECT for $ARCH" cd ${EDGELET_DIR} cross build -p $PROJECT ${BUILD_CONFIG_OPTION} --target ${TOOLCHAIN} - strip ${EDGELET_DIR}/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/$PROJECT - cp ${EDGELET_DIR}/edgelet/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/$PROJECT ${EXE_DOCKER_DIR}/$PROJECT + ${STRIP} ${EDGELET_DIR}/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/${PROJECT} + cp ${EDGELET_DIR}/edgelet/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/${PROJECT} ${EXE_DOCKER_DIR}/${PROJECT} } +############################################################################### +# Main Script Execution +############################################################################### +check_arch +process_args "$@" +build_project #mkdir -p $PUBLISH_FOLDER/azureiotedge-iotedged/ @@ -197,13 +210,6 @@ build_project() #aarch64-linux-gnu-strip $BUILD_REPOSITORY_LOCALPATH/edgelet/target/aarch64-unknown-linux-musl/$BUILD_CONFIGURATION/iotedged #cp $BUILD_REPOSITORY_LOCALPATH/edgelet/target/aarch64-unknown-linux-musl/$BUILD_CONFIGURATION/iotedged $PUBLISH_FOLDER/azureiotedge/docker/linux/arm64v8/ -############################################################################### -# Main Script Execution -############################################################################### -check_arch -process_args "$@" - -build_project #----------------------------------- From 57a233fcdd2fdb3feaa4feab40bbf83ba522f667 Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Thu, 16 May 2019 13:49:13 -0700 Subject: [PATCH 08/29] Refactored pipeline to avoid redundant builds --- builds/misc/images.yaml | 34 ++-- .../misc/templates/build-edgelet-linux.yaml | 19 ++ scripts/linux/buildDiagnostics.sh | 39 ---- scripts/linux/buildEdgeProxy.sh | 177 +++++++++++++++++- .../{buildIotedged.sh => buildEdgelet.sh} | 123 ++++-------- scripts/linux/buildImage.sh | 2 +- 6 files changed, 249 insertions(+), 145 deletions(-) create mode 100644 builds/misc/templates/build-edgelet-linux.yaml delete mode 100755 scripts/linux/buildDiagnostics.sh rename scripts/linux/{buildIotedged.sh => buildEdgelet.sh} (57%) diff --git a/builds/misc/images.yaml b/builds/misc/images.yaml index 842d795e3aa..41d997be8ce 100644 --- a/builds/misc/images.yaml +++ b/builds/misc/images.yaml @@ -35,12 +35,11 @@ jobs: name: build displayName: Build ($(Build.Configuration)) -# - script: scripts/linux/buildDiagnostics.sh $(Build.Configuration) - - script: scripts/linux/buildIotedged.sh -i azureiotedge-diagnostics -P iotedge-diagnostics -n microsoft -t aarch64 - displayName: Build iotedge-diagnostics + - script: scripts/linux/buildEdgelet.sh -i azureiotedge-diagnostics -n microsoft -P iotedge-diagnostics -c $(Build.Configuration) -t aarch64 + displayName: Build - iotedge-diagnostics - aarch64 - - script: scripts/linux/buildEdgeProxy.sh - displayName: Build Edge Proxy + - script: scripts/linux/buildEdgeProxy.sh -i azureiotedge-proxy -n microsoft -P edge-proxy -t aarch64 + displayName: Build - edge-proxy - aarch64 - task: PublishBuildArtifacts@1 displayName: 'Publish Artifacts' @@ -48,21 +47,21 @@ jobs: PathtoPublish: '$(Build.BinariesDirectory)/publish' ArtifactName: 'core-linux' - # azureiotedge-diagnostics - Not Using Template for ARM64 because we have 2 different .NET Core. + # azureiotedge-diagnostics - Not Using Template for ARM64 because we have 2 different .NET Core. - task: Bash@3 - displayName: Build Image azureiotedge-diagnostics - aarch64 + displayName: Build Image - azureiotedge-diagnostics - aarch64 inputs: filePath: scripts/linux/buildImage.sh arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-diagnostics -n microsoft -P azureiotedge-diagnostics --target-arch aarch64 - # Edge Proxy - Not Using Template because it doesn't have .NET code + # Edge Proxy - Not Using Template because it doesn't have .NET code - task: Bash@3 displayName: Build Image - Edge Proxy - aarch64 inputs: filePath: scripts/linux/buildImage.sh arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-proxy -n microsoft -P azureiotedge-proxy --target-arch aarch64 - # Edge Agent - Not Using Template for ARM64 because we have 2 different .NET Core. + # Edge Agent - Not Using Template for ARM64 because we have 2 different .NET Core. - task: Bash@3 displayName: Build Image - Edge Agent - aarch64 inputs: @@ -162,11 +161,20 @@ jobs: name: build displayName: Build ($(Build.Configuration)) - - script: scripts/linux/buildDiagnostics.sh $(Build.Configuration) - displayName: Build iotedge-diagnostics + - template: templates/build-edgelet-linux.yaml + parameters: + filePath: scripts/linux/buildEdgelet.sh + name: iotedge-diagnostics + imageName: azureiotedge-diagnostics + project: iotedge-diagnostics + configuration: $(Build.Configuration) - - script: scripts/linux/buildEdgeProxy.sh - displayName: Build Edge Proxy + - template: templates/build-edgelet-linux.yaml + parameters: + filePath: scripts/linux/buildEdgeProxy.sh + name: edge-proxy + imageName: azureiotedge-proxy + project: edge-proxy - script: scripts/linux/createArtifactInfo.sh --output-folder '$(Build.BinariesDirectory)/publish' --build-number $(Build.BuildNumber) displayName: 'Create Artifact Info File' diff --git a/builds/misc/templates/build-edgelet-linux.yaml b/builds/misc/templates/build-edgelet-linux.yaml new file mode 100644 index 00000000000..9acd619a202 --- /dev/null +++ b/builds/misc/templates/build-edgelet-linux.yaml @@ -0,0 +1,19 @@ +parameters: + name: '' + imageName: '' + namespace: 'microsoft' + project: '' + configuration: "release" + filePath: + +steps: + - task: Bash@3 + displayName: Build - ${{ parameters.name }} - amd64 + inputs: + filePath: ${{ parameters.filePath }} + arguments: -i ${{ parameters.imageName }} -n ${{ parameters.namespace }} -P ${{ parameters.project }} -c ${{ parameters.configuration }} + - task: Bash@3 + displayName: Build - ${{ parameters.name }} - arm32 + inputs: + filePath: ${{ parameters.filePath }} + arguments: -i ${{ parameters.imageName }} -n ${{ parameters.namespace }} -P ${{ parameters.project }} -c ${{ parameters.configuration }} --target-arch armv7l \ No newline at end of file diff --git a/scripts/linux/buildDiagnostics.sh b/scripts/linux/buildDiagnostics.sh deleted file mode 100755 index 61a23a1a3ba..00000000000 --- a/scripts/linux/buildDiagnostics.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash - -# This script builds the iotedge-diagnostics binary that goes into the azureiotedge-diagnostics image, -# for each supported arch (x86_64, arm32v7, arm64v8). -# It then publishes the binaries along with their corresponding dockerfiles to the publish directory, -# so that buildImage.sh can build the container image. - -BUILD_CONFIGURATION=${1:-release} - -if [[ "${BUILD_CONFIGURATION,,}" == 'release' ]]; then - BUILD_CONFIGURATION='release' - BUILD_CONFIG_OPTION='--release' -else - BUILD_CONFIGURATION='debug' - BUILD_CONFIG_OPTION='' -fi - -set -euo pipefail - -VERSIONINFO_FILE_PATH=$BUILD_REPOSITORY_LOCALPATH/versionInfo.json -PUBLISH_FOLDER=$BUILD_BINARIESDIRECTORY/publish -export VERSION="$(cat "$VERSIONINFO_FILE_PATH" | jq '.version' -r)" - -mkdir -p $PUBLISH_FOLDER/azureiotedge-diagnostics/ -cp -R $BUILD_REPOSITORY_LOCALPATH/edgelet/iotedge-diagnostics/docker $PUBLISH_FOLDER/azureiotedge-diagnostics/docker - -cd "$BUILD_REPOSITORY_LOCALPATH/edgelet" - -cross build -p iotedge-diagnostics $BUILD_CONFIG_OPTION --target x86_64-unknown-linux-musl -strip $BUILD_REPOSITORY_LOCALPATH/edgelet/target/x86_64-unknown-linux-musl/$BUILD_CONFIGURATION/iotedge-diagnostics -cp $BUILD_REPOSITORY_LOCALPATH/edgelet/target/x86_64-unknown-linux-musl/$BUILD_CONFIGURATION/iotedge-diagnostics $PUBLISH_FOLDER/azureiotedge-diagnostics/docker/linux/amd64/ - -cross build -p iotedge-diagnostics $BUILD_CONFIG_OPTION --target armv7-unknown-linux-musleabihf -arm-linux-gnueabihf-strip $BUILD_REPOSITORY_LOCALPATH/edgelet/target/armv7-unknown-linux-musleabihf/$BUILD_CONFIGURATION/iotedge-diagnostics -cp $BUILD_REPOSITORY_LOCALPATH/edgelet/target/armv7-unknown-linux-musleabihf/$BUILD_CONFIGURATION/iotedge-diagnostics $PUBLISH_FOLDER/azureiotedge-diagnostics/docker/linux/arm32v7/ - -cross build -p iotedge-diagnostics $BUILD_CONFIG_OPTION --target aarch64-unknown-linux-musl -aarch64-linux-gnu-strip $BUILD_REPOSITORY_LOCALPATH/edgelet/target/aarch64-unknown-linux-musl/$BUILD_CONFIGURATION/iotedge-diagnostics -cp $BUILD_REPOSITORY_LOCALPATH/edgelet/target/aarch64-unknown-linux-musl/$BUILD_CONFIGURATION/iotedge-diagnostics $PUBLISH_FOLDER/azureiotedge-diagnostics/docker/linux/arm64v8/ diff --git a/scripts/linux/buildEdgeProxy.sh b/scripts/linux/buildEdgeProxy.sh index 7fb7a5ca008..2288ca868cd 100755 --- a/scripts/linux/buildEdgeProxy.sh +++ b/scripts/linux/buildEdgeProxy.sh @@ -5,13 +5,174 @@ # It then publishes executable files along with their corresponding dockerfiles to the publish directory, # so that buildImage.sh can build the container image. -VERSIONINFO_FILE_PATH=$BUILD_REPOSITORY_LOCALPATH/versionInfo.json -PUBLISH_FOLDER=$BUILD_BINARIESDIRECTORY/publish -export VERSION="$(cat "$VERSIONINFO_FILE_PATH" | jq '.version' -r)" +set -e -mkdir -p $PUBLISH_FOLDER/azureiotedge-proxy/ -cp -R $BUILD_REPOSITORY_LOCALPATH/edge-proxy/docker $PUBLISH_FOLDER/azureiotedge-proxy/docker +############################################################################### +# Define Environment Variables +############################################################################### +ARCH=$(uname -m) +SCRIPT_NAME=$(basename $0) +PROJECT= +SRC_DOCKERFILE= +DOCKERFILE= +DOCKER_IMAGENAME= +DEFAULT_DOCKER_NAMESPACE="microsoft" +DOCKER_NAMESPACE=${DEFAULT_DOCKER_NAMESPACE} +BUILD_BINARIESDIRECTORY=${BUILD_BINARIESDIRECTORY:-$BUILD_REPOSITORY_LOCALPATH} +PUBLISH_DIR=${BUILD_BINARIESDIRECTORY}/publish +BUILD_CONFIGURATION="release" +BUILD_CONFIG_OPTION= -cp $BUILD_REPOSITORY_LOCALPATH/edge-proxy/src/run.sh $PUBLISH_FOLDER/azureiotedge-proxy/docker/linux/amd64/ -cp $BUILD_REPOSITORY_LOCALPATH/edge-proxy/src/run.sh $PUBLISH_FOLDER/azureiotedge-proxy/docker/linux/arm32v7/ -cp $BUILD_REPOSITORY_LOCALPATH/edge-proxy/src/run.sh $PUBLISH_FOLDER/azureiotedge-proxy/docker/linux/arm64v8/ \ No newline at end of file +############################################################################### +# Function to obtain the underlying architecture and check if supported +############################################################################### +check_arch() +{ + if [[ "$ARCH" == "x86_64" ]]; then + ARCH="amd64" + elif [[ "$ARCH" == "armv7l" ]]; then + ARCH="arm32v7" + elif [[ "$ARCH" == "aarch64" ]]; then + ARCH="arm64v8" + else + echo "Unsupported architecture" + exit 1 + fi +} + +############################################################################### +# Print usage information pertaining to this script and exit +############################################################################### +usage() +{ + echo "$SCRIPT_NAME [options]" + echo "Note: Depending on the options you might have to run this as root or sudo." + echo "" + echo "options" + echo " -i, --image-name Image name (e.g. edge-agent)" + echo " -P, --project Project to build image for (e.g. iotedged)" + echo " -t, --target-arch Target architecture (default: uname -m)" + echo " -n, --namespace Docker namespace (default: $DEFAULT_DOCKER_NAMESPACE)" + echo " -c, --configuration Build configuration" + echo "--bin-dir Directory containing the output binaries. Either use this option or set env variable BUILD_BINARIESDIRECTORY" + exit 1; +} + +print_help_and_exit() +{ + echo "Run $SCRIPT_NAME --help for more information." + exit 1 +} + +############################################################################### +# Obtain and validate the options supported by this script +############################################################################### +process_args() +{ + save_next_arg=0 + for arg in $@ + do + if [[ ${save_next_arg} -eq 1 ]]; then + ARCH="$arg" + check_arch + save_next_arg=0 + elif [[ ${save_next_arg} -eq 2 ]]; then + PROJECT="$arg" + save_next_arg=0 + elif [[ ${save_next_arg} -eq 3 ]]; then + DOCKER_IMAGENAME="$arg" + save_next_arg=0 + elif [[ ${save_next_arg} -eq 4 ]]; then + DOCKER_NAMESPACE="$arg" + save_next_arg=0 + elif [[ ${save_next_arg} -eq 5 ]]; then + BUILD_CONFIGURATION="$arg" + save_next_arg=0 + elif [[ ${save_next_arg} -eq 6 ]]; then + BUILD_BINARIESDIRECTORY="$arg" + save_next_arg=0 + else + case "$arg" in + "-h" | "--help" ) usage;; + "-t" | "--target-arch" ) save_next_arg=1;; + "-P" | "--project" ) save_next_arg=2;; + "-i" | "--image-name" ) save_next_arg=3;; + "-n" | "--namespace" ) save_next_arg=4;; + "-c" | "--configuration" ) save_next_arg=5;; + "--bin-dir" ) save_next_arg=6;; + * ) usage;; + esac + fi + done + + if [[ -z ${DOCKER_IMAGENAME} ]]; then + echo "Docker image name parameter invalid" + print_help_and_exit + fi + + if [[ ! -d ${BUILD_BINARIESDIRECTORY} ]]; then + mkdir ${BUILD_BINARIESDIRECTORY} + fi + + DOCKER_DIR=${BUILD_REPOSITORY_LOCALPATH}/${PROJECT}/docker + if [[ -z ${DOCKER_DIR} ]] || [[ ! -d ${DOCKER_DIR} ]]; then + echo "No docker directory for $PROJECT at $BUILD_REPOSITORY_LOCALPATH" + print_help_and_exit + fi + + DOCKERFILE="$DOCKER_DIR/linux/$ARCH/Dockerfile" + if [[ ! -f ${DOCKERFILE} ]]; then + echo "No Dockerfile at $DOCKERFILE" + print_help_and_exit + fi + + if [[ ${BUILD_CONFIG_OPTION} -eq "release" ]]; then + BUILD_CONFIGURATION='release' + BUILD_CONFIG_OPTION='--release' + else + BUILD_CONFIGURATION='debug' + BUILD_CONFIG_OPTION='' + fi +} + +print_args() +{ + echo "Project: $BUILD_BINARIESDIRECTORY/$PROJECT" + echo "Arch: $ARCH" + echo "Image: $DOCKER_IMAGENAME" + echo "Namespace: $DOCKER_NAMESPACE" + echo "Dockerfile: $DOCKERFILE" + echo +} + +############################################################################### +# Build project and publish result +############################################################################### +build_project() +{ + + # prepare docker folder + local EXE_DOCKER_DIR=${PUBLISH_DIR}/${DOCKER_IMAGENAME}/docker/linux/${ARCH} + mkdir -p ${EXE_DOCKER_DIR} + + # copy Dockerfile to publish folder for given arch + local EXE_DOCKERFILE=${EXE_DOCKER_DIR}/Dockerfile + + local COPY_DOCKERFILE_CMD="cp ${DOCKERFILE} ${EXE_DOCKERFILE}" + echo ${COPY_DOCKERFILE_CMD} + ${COPY_DOCKERFILE_CMD} + + # copy executables to publish folder + local COPY_CMD="cp ${BUILD_REPOSITORY_LOCALPATH}/edge-proxy/src/run.sh ${EXE_DOCKER_DIR}/" + echo ${COPY_CMD} + ${COPY_CMD} +} + +############################################################################### +# Main Script Execution +############################################################################### +check_arch +process_args "$@" + +print_args +build_project \ No newline at end of file diff --git a/scripts/linux/buildIotedged.sh b/scripts/linux/buildEdgelet.sh similarity index 57% rename from scripts/linux/buildIotedged.sh rename to scripts/linux/buildEdgelet.sh index 9f97c977e44..80a5281cd20 100755 --- a/scripts/linux/buildIotedged.sh +++ b/scripts/linux/buildEdgelet.sh @@ -14,16 +14,15 @@ ARCH=$(uname -m) TOOLCHAIN= STRIP= SCRIPT_NAME=$(basename $0) -SOURCE_DIR= -PUBLISH_DIR= PROJECT= SRC_DOCKERFILE= DOCKERFILE= DOCKER_IMAGENAME= DEFAULT_DOCKER_NAMESPACE="microsoft" DOCKER_NAMESPACE=${DEFAULT_DOCKER_NAMESPACE} -BUILD_BINARIESDIRECTORY=${BUILD_BINARIESDIRECTORY:=""} -EDGELET_DIR= +BUILD_BINARIESDIRECTORY=${BUILD_BINARIESDIRECTORY:-$BUILD_REPOSITORY_LOCALPATH} +PUBLISH_DIR=${BUILD_BINARIESDIRECTORY}/publish +EDGELET_DIR=${BUILD_REPOSITORY_LOCALPATH}/edgelet BUILD_CONFIGURATION="release" BUILD_CONFIG_OPTION= @@ -38,7 +37,8 @@ check_arch() STRIP="strip" elif [[ "$ARCH" == "armv7l" ]]; then ARCH="arm32v7" - TOOLCHAIN="armv7-unknown-linux-gnueabihf" + #TOOLCHAIN="armv7-unknown-linux-gnueabihf" + TOOLCHAIN="armv7-unknown-linux-musleabihf" STRIP="arm-linux-gnueabihf-strip" elif [[ "$ARCH" == "aarch64" ]]; then ARCH="arm64v8" @@ -120,27 +120,13 @@ process_args() print_help_and_exit fi - if [[ -z ${BUILD_BINARIESDIRECTORY} ]] || [[ ! -d ${BUILD_BINARIESDIRECTORY} ]]; then - echo "Bin directory does not exist or is invalid" - print_help_and_exit - fi - - PUBLISH_DIR=${BUILD_BINARIESDIRECTORY}/publish - - if [[ ! -d ${PUBLISH_DIR} ]]; then - echo "Publish directory does not exist or is invalid" - print_help_and_exit - fi - - EDGELET_DIR=${BUILD_REPOSITORY_LOCALPATH}/edgelet - if [[ -z ${EDGELET_DIR} ]] || [[ ! -d ${EDGELET_DIR} ]]; then - echo "No directory for edgelet found in $BUILD_BINARIESDIRECTORY" - print_help_and_exit + if [[ ! -d ${BUILD_BINARIESDIRECTORY} ]]; then + mkdir ${BUILD_BINARIESDIRECTORY} fi DOCKER_DIR=${EDGELET_DIR}/${PROJECT}/docker if [[ -z ${DOCKER_DIR} ]] || [[ ! -d ${DOCKER_DIR} ]]; then - echo "No docker directory for $PROJECT at $DOCKER_DIR" + echo "No docker directory for $PROJECT at $EDGELET_DIR" print_help_and_exit fi @@ -150,7 +136,7 @@ process_args() print_help_and_exit fi - if ${BUILD_CONFIG_OPTION} == "release"; then + if [[ ${BUILD_CONFIG_OPTION} -eq "release" ]]; then BUILD_CONFIGURATION='release' BUILD_CONFIG_OPTION='--release' else @@ -159,25 +145,45 @@ process_args() fi } +print_args() +{ + echo "Project: $EDGELET_DIR/$PROJECT" + echo "Arch: $ARCH" + echo "Image: $DOCKER_IMAGENAME" + echo "Namespace: $DOCKER_NAMESPACE" + echo "Dockerfile: $DOCKERFILE" + echo +} + ############################################################################### # Build project and publish result ############################################################################### build_project() { + # build project with cross + cd ${EDGELET_DIR} + + local BUILD_CMD="cross build -p ${PROJECT} ${BUILD_CONFIG_OPTION} --target ${TOOLCHAIN}" + echo ${BUILD_CMD} + ${BUILD_CMD} + + ${STRIP} ${EDGELET_DIR}/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/${PROJECT} + + # prepare docker folder local EXE_DOCKER_DIR=${PUBLISH_DIR}/${DOCKER_IMAGENAME}/docker/linux/${ARCH} mkdir -p ${EXE_DOCKER_DIR} + # copy Dockerfile to publish folder for given arch local EXE_DOCKERFILE=${EXE_DOCKER_DIR}/Dockerfile - echo "Copy Dockerfile to $EXE_DOCKERFILE" - cp ${DOCKERFILE} ${EXE_DOCKERFILE} - echo "Build ${EDGELET_DIR}/$PROJECT for $ARCH" + local COPY_DOCKERFILE_CMD="cp ${DOCKERFILE} ${EXE_DOCKERFILE}" + echo ${COPY_DOCKERFILE_CMD} + ${COPY_DOCKERFILE_CMD} - cd ${EDGELET_DIR} - - cross build -p $PROJECT ${BUILD_CONFIG_OPTION} --target ${TOOLCHAIN} - ${STRIP} ${EDGELET_DIR}/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/${PROJECT} - cp ${EDGELET_DIR}/edgelet/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/${PROJECT} ${EXE_DOCKER_DIR}/${PROJECT} + # copy binaries to publish folder + local COPY_CMD="cp ${EDGELET_DIR}/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/${PROJECT} ${EXE_DOCKER_DIR}/${PROJECT}" + echo ${COPY_CMD} + ${COPY_CMD} } ############################################################################### @@ -186,56 +192,5 @@ build_project() check_arch process_args "$@" -build_project - - -#mkdir -p $PUBLISH_FOLDER/azureiotedge-iotedged/ -#cp -R $BUILD_REPOSITORY_LOCALPATH/edgelet/iotedged/docker $PUBLISH_FOLDER/azureiotedge-iotedged/docker -# -#cd "$BUILD_REPOSITORY_LOCALPATH/edgelet" - -#cross build -p iotedged $BUILD_CONFIG_OPTION --target x86_64-unknown-linux-musl -#strip $BUILD_REPOSITORY_LOCALPATH/edgelet/target/x86_64-unknown-linux-musl/$BUILD_CONFIGURATION/iotedged -#cp $BUILD_REPOSITORY_LOCALPATH/edgelet/target/x86_64-unknown-linux-musl/$BUILD_CONFIGURATION/iotedged $PUBLISH_FOLDER/azureiotedge-iotedged/docker/linux/amd64/ - -#cross build -p iotedged $BUILD_CONFIG_OPTION --target armv7-unknown-linux-musleabihf -#arm-linux-gnueabihf-strip $BUILD_REPOSITORY_LOCALPATH/edgelet/target/armv7-unknown-linux-musleabihf/$BUILD_CONFIGURATION/iotedged -#cp $BUILD_REPOSITORY_LOCALPATH/edgelet/target/armv7-unknown-linux-musleabihf/$BUILD_CONFIGURATION/iotedged $PUBLISH_FOLDER/azureiotedge-diagnostics/docker/linux/arm32v7/ - -#cross build -p iotedged $BUILD_CONFIG_OPTION --target armv7-unknown-linux-gnueabihf -#arm-linux-gnueabihf-strip $BUILD_REPOSITORY_LOCALPATH/edgelet/target/armv7-unknown-linux-gnueabihf/$BUILD_CONFIGURATION/iotedged -#cp $BUILD_REPOSITORY_LOCALPATH/edgelet/target/armv7-unknown-linux-gnueabihf/$BUILD_CONFIGURATION/iotedged $PUBLISH_FOLDER/azureiotedge-diagnostics/docker/linux/arm32v7/ - -#cross build -p iotedged $BUILD_CONFIG_OPTION --target aarch64-unknown-linux-musl -#aarch64-linux-gnu-strip $BUILD_REPOSITORY_LOCALPATH/edgelet/target/aarch64-unknown-linux-musl/$BUILD_CONFIGURATION/iotedged -#cp $BUILD_REPOSITORY_LOCALPATH/edgelet/target/aarch64-unknown-linux-musl/$BUILD_CONFIGURATION/iotedged $PUBLISH_FOLDER/azureiotedge/docker/linux/arm64v8/ - - - -#----------------------------------- - - -#V1 -#mkdir -p $PUBLISH_FOLDER/azureiotedge-iotedged/ -#cp -R $BUILD_REPOSITORY_LOCALPATH/edgelet/build/debian9 $PUBLISH_FOLDER/azureiotedge-iotedged/docker -# -## setup libiothsm build -#cmake -DBUILD_SHARED=ON -Drun_unittests=ON -Duse_emulator=OFF -DCMAKE_BUILD_TYPE=Release -S edgelet/hsm-sys/azure-iot-hsm-c -B edgelet/hsm-sys/azure-iot-hsm-c/build -# -## build libiothsm -#make -C edgelet/hsm-sys/azure-iot-hsm-c/build iothsm -# -## copy libiothsm to staging folder -#cp edgelet/hsm-sys/azure-iot-hsm-c/build/*.so* $PUBLISH_FOLDER/azureiotedge-iotedged/ -# -## build iotedged -#make -C edgelet -# -## copy iotedged to staging folder -#cp edgelet/target/release/iotedged $PUBLISH_FOLDER/azureiotedge-iotedged/ -# - - -#cp $BUILD_REPOSITORY_LOCALPATH/edge-proxy/src/run.sh $PUBLISH_FOLDER/azureiotedge-proxy/docker/linux/amd64/ -#cp $BUILD_REPOSITORY_LOCALPATH/edge-proxy/src/run.sh $PUBLISH_FOLDER/azureiotedge-proxy/docker/linux/arm32v7/ -#cp $BUILD_REPOSITORY_LOCALPATH/edge-proxy/src/run.sh $PUBLISH_FOLDER/azureiotedge-proxy/docker/linux/arm64v8/ \ No newline at end of file +print_args +build_project \ No newline at end of file diff --git a/scripts/linux/buildImage.sh b/scripts/linux/buildImage.sh index b209b6533d0..754db655c04 100755 --- a/scripts/linux/buildImage.sh +++ b/scripts/linux/buildImage.sh @@ -171,8 +171,8 @@ process_args() print_help_and_exit fi - EXE_DOCKER_DIR=$PUBLISH_DIR/$PROJECT/docker + if [[ -z ${EXE_DOCKER_DIR} ]] || [[ ! -d ${EXE_DOCKER_DIR} ]]; then echo "No docker directory for $PROJECT at $EXE_DOCKER_DIR" print_help_and_exit From 5c8740e7e9119655c3c555acb8d11db92298b558 Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Tue, 21 May 2019 14:42:13 -0700 Subject: [PATCH 09/29] Added tasks to build image for iotedged --- builds/misc/images.yaml | 47 +++++++--- .../misc/templates/build-edgelet-linux.yaml | 5 +- edgelet/Cross.toml | 8 +- .../iotedged/docker/linux/amd64/Dockerfile | 14 +++ .../iotedged/docker/linux/arm32v7/Dockerfile | 14 +++ .../iotedged/docker/linux/arm64v8/Dockerfile | 14 +++ scripts/linux/buildEdgelet.sh | 90 ++++++++++++------- 7 files changed, 147 insertions(+), 45 deletions(-) create mode 100644 edgelet/iotedged/docker/linux/amd64/Dockerfile create mode 100644 edgelet/iotedged/docker/linux/arm32v7/Dockerfile create mode 100644 edgelet/iotedged/docker/linux/arm64v8/Dockerfile diff --git a/builds/misc/images.yaml b/builds/misc/images.yaml index 41d997be8ce..120a5bbc7e6 100644 --- a/builds/misc/images.yaml +++ b/builds/misc/images.yaml @@ -35,11 +35,14 @@ jobs: name: build displayName: Build ($(Build.Configuration)) + - script: scripts/linux/buildEdgelet.sh -i azureiotedge-iotedged -n microsoft -P iotedged -c $(Build.Configuration) -l glibc -t aarch64 + displayName: Build - Edge Security Daemon - aarch64 + - script: scripts/linux/buildEdgelet.sh -i azureiotedge-diagnostics -n microsoft -P iotedge-diagnostics -c $(Build.Configuration) -t aarch64 - displayName: Build - iotedge-diagnostics - aarch64 + displayName: Build - Edge Diagnostics - aarch64 - - script: scripts/linux/buildEdgeProxy.sh -i azureiotedge-proxy -n microsoft -P edge-proxy -t aarch64 - displayName: Build - edge-proxy - aarch64 + - script: scripts/linux/buildEdgeProxy.sh -i azureiotedge-proxy -n microsoft -P edge-proxy -t aarch64 -l musl + displayName: Build - Edge Proxy - aarch64 - task: PublishBuildArtifacts@1 displayName: 'Publish Artifacts' @@ -47,14 +50,21 @@ jobs: PathtoPublish: '$(Build.BinariesDirectory)/publish' ArtifactName: 'core-linux' - # azureiotedge-diagnostics - Not Using Template for ARM64 because we have 2 different .NET Core. + # Edge Diagnostics - Not Using Template for ARM64 because we have 2 different .NET Core. + - task: Bash@3 + displayName: Build Image - Edge Security Daemon - aarch64 + inputs: + filePath: scripts/linux/buildImage.sh + arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-iotedged -n microsoft -P azureiotedge-iotedged --target-arch aarch64 + + # Edge Diagnostics - Not Using Template for ARM64 because we have 2 different .NET Core. - task: Bash@3 - displayName: Build Image - azureiotedge-diagnostics - aarch64 + displayName: Build Image - Edge Diagnostics - aarch64 inputs: filePath: scripts/linux/buildImage.sh arguments: -r $(registry.address) -u $(registry.user) -p $(registry.password) -i azureiotedge-diagnostics -n microsoft -P azureiotedge-diagnostics --target-arch aarch64 - # Edge Proxy - Not Using Template because it doesn't have .NET code + # Edge Proxy - Not Using Template for ARM64 because we have 2 different .NET Core. - task: Bash@3 displayName: Build Image - Edge Proxy - aarch64 inputs: @@ -164,15 +174,25 @@ jobs: - template: templates/build-edgelet-linux.yaml parameters: filePath: scripts/linux/buildEdgelet.sh - name: iotedge-diagnostics + name: Edge Security Daemon + imageName: azureiotedge-iotedged + project: iotedged + configuration: $(Build.Configuration) + libc: glibc + + - template: templates/build-edgelet-linux.yaml + parameters: + filePath: scripts/linux/buildEdgelet.sh + name: Edge Diagnostics imageName: azureiotedge-diagnostics project: iotedge-diagnostics configuration: $(Build.Configuration) + libc: musl - template: templates/build-edgelet-linux.yaml parameters: filePath: scripts/linux/buildEdgeProxy.sh - name: edge-proxy + name: Edge Proxy imageName: azureiotedge-proxy project: edge-proxy @@ -185,10 +205,17 @@ jobs: PathtoPublish: '$(Build.BinariesDirectory)/publish' ArtifactName: 'core-linux' - # azureiotedge-diagnostics + # Edge Security Daemon - template: templates/image-linux.yaml parameters: - name: azureiotedge-diagnostics + name: Edge Security Daemon + imageName: azureiotedge-iotedged + project: azureiotedge-iotedged + + # Edge Diagnostics + - template: templates/image-linux.yaml + parameters: + name: Edge Diagnostics imageName: azureiotedge-diagnostics project: azureiotedge-diagnostics diff --git a/builds/misc/templates/build-edgelet-linux.yaml b/builds/misc/templates/build-edgelet-linux.yaml index 9acd619a202..8d96d59a11c 100644 --- a/builds/misc/templates/build-edgelet-linux.yaml +++ b/builds/misc/templates/build-edgelet-linux.yaml @@ -3,15 +3,16 @@ parameters: imageName: '' namespace: 'microsoft' project: '' - configuration: "release" + configuration: 'release' filePath: + libc: 'glibc' steps: - task: Bash@3 displayName: Build - ${{ parameters.name }} - amd64 inputs: filePath: ${{ parameters.filePath }} - arguments: -i ${{ parameters.imageName }} -n ${{ parameters.namespace }} -P ${{ parameters.project }} -c ${{ parameters.configuration }} + arguments: -i ${{ parameters.imageName }} -n ${{ parameters.namespace }} -P ${{ parameters.project }} -c ${{ parameters.configuration }} -l ${{ parameters.libc }} - task: Bash@3 displayName: Build - ${{ parameters.name }} - arm32 inputs: diff --git a/edgelet/Cross.toml b/edgelet/Cross.toml index 746235ca0f0..bcbd2f3f23e 100644 --- a/edgelet/Cross.toml +++ b/edgelet/Cross.toml @@ -5,8 +5,14 @@ passthrough = [ "IOTEDGE_HOMEDIR", ] +[target.x86_64-unknown-linux-gnu] +image = "edgebuilds.azurecr.io/debian-build:9.5-1" + [target.armv7-unknown-linux-gnueabihf] -image = "azureiotedge/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf:0.2" +image = "edgebuilds.azurecr.io/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf:debian_9.5-1" + +[target.aarch64-unknown-linux-gnu] +image = "edgebuilds.azurecr.io/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu:debian_9.5-1" [target.armv7-unknown-linux-musleabihf] # Built from rust-embedded/cross#718a19cd68fb09428532d1317515fe7303692b47 with `./build-docker-image.sh armv7-unknown-linux-musleabihf` diff --git a/edgelet/iotedged/docker/linux/amd64/Dockerfile b/edgelet/iotedged/docker/linux/amd64/Dockerfile new file mode 100644 index 00000000000..e4f1481dfdf --- /dev/null +++ b/edgelet/iotedged/docker/linux/amd64/Dockerfile @@ -0,0 +1,14 @@ +FROM debian:9 + +RUN apt-get update && apt-get install -y \ + libssl1.0.2 \ + ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /app +ADD libiothsm.so* /app/ +ADD iotedged /app + +ENV LD_LIBRARY_PATH /app + +CMD ["/app/iotedged"] \ No newline at end of file diff --git a/edgelet/iotedged/docker/linux/arm32v7/Dockerfile b/edgelet/iotedged/docker/linux/arm32v7/Dockerfile new file mode 100644 index 00000000000..32a5b250758 --- /dev/null +++ b/edgelet/iotedged/docker/linux/arm32v7/Dockerfile @@ -0,0 +1,14 @@ +FROM arm32v7/debian:9 + +RUN apt-get update && apt-get install -y \ + libssl1.0.2 \ + ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /app +ADD libiothsm.so* /app/ +ADD iotedged /app + +ENV LD_LIBRARY_PATH /app + +CMD ["/app/iotedged"] \ No newline at end of file diff --git a/edgelet/iotedged/docker/linux/arm64v8/Dockerfile b/edgelet/iotedged/docker/linux/arm64v8/Dockerfile new file mode 100644 index 00000000000..04f2348d6b8 --- /dev/null +++ b/edgelet/iotedged/docker/linux/arm64v8/Dockerfile @@ -0,0 +1,14 @@ +FROM arm64v8/debian:9 + +RUN apt-get update && apt-get install -y \ + libssl1.0.2 \ + ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /app +ADD libiothsm.so* /app/ +ADD iotedged /app + +ENV LD_LIBRARY_PATH /app + +CMD ["/app/iotedged"] \ No newline at end of file diff --git a/scripts/linux/buildEdgelet.sh b/scripts/linux/buildEdgelet.sh index 80a5281cd20..3511549e706 100755 --- a/scripts/linux/buildEdgelet.sh +++ b/scripts/linux/buildEdgelet.sh @@ -11,6 +11,7 @@ set -e # Define Environment Variables ############################################################################### ARCH=$(uname -m) +LIBC="glibc" TOOLCHAIN= STRIP= SCRIPT_NAME=$(basename $0) @@ -33,17 +34,10 @@ check_arch() { if [[ "$ARCH" == "x86_64" ]]; then ARCH="amd64" - TOOLCHAIN="x86_64-unknown-linux-musl" - STRIP="strip" elif [[ "$ARCH" == "armv7l" ]]; then ARCH="arm32v7" - #TOOLCHAIN="armv7-unknown-linux-gnueabihf" - TOOLCHAIN="armv7-unknown-linux-musleabihf" - STRIP="arm-linux-gnueabihf-strip" elif [[ "$ARCH" == "aarch64" ]]; then ARCH="arm64v8" - TOOLCHAIN="aarch64-unknown-linux-musl" - STRIP="aarch64-linux-gnu-strip" else echo "Unsupported architecture" exit 1 @@ -63,7 +57,8 @@ usage() echo " -P, --project Project to build image for (e.g. iotedged)" echo " -t, --target-arch Target architecture (default: uname -m)" echo " -n, --namespace Docker namespace (default: $DEFAULT_DOCKER_NAMESPACE)" - echo " -c, --configuration Build configuration" + echo " -c, --configuration Build configuration (default: release)" + echo " -l, --libc libc implementation (default: glibc)" echo "--bin-dir Directory containing the output binaries. Either use this option or set env variable BUILD_BINARIESDIRECTORY" exit 1; } @@ -74,6 +69,17 @@ print_help_and_exit() exit 1 } +print_args() +{ + echo "Project: $EDGELET_DIR/$PROJECT" + echo "Arch: $ARCH" + echo "Toolchain: $TOOLCHAIN" + echo "Image: $DOCKER_IMAGENAME" + echo "Namespace: $DOCKER_NAMESPACE" + echo "Dockerfile: $DOCKERFILE" + echo +} + ############################################################################### # Obtain and validate the options supported by this script ############################################################################### @@ -99,6 +105,9 @@ process_args() BUILD_CONFIGURATION="$arg" save_next_arg=0 elif [[ ${save_next_arg} -eq 6 ]]; then + LIBC="$arg" + save_next_arg=0 + elif [[ ${save_next_arg} -eq 7 ]]; then BUILD_BINARIESDIRECTORY="$arg" save_next_arg=0 else @@ -109,12 +118,33 @@ process_args() "-i" | "--image-name" ) save_next_arg=3;; "-n" | "--namespace" ) save_next_arg=4;; "-c" | "--configuration" ) save_next_arg=5;; - "--bin-dir" ) save_next_arg=6;; + "-l" | "--libc") save_next_arg=6;; + "--bin-dir" ) save_next_arg=7;; * ) usage;; esac fi done + if [[ ${LIBC} != "glibc" ]] && [[ ${LIBC} != "musl" ]]; then + echo "Unsupported libc implementation" + exit 1 + fi + + case ${ARCH}_${LIBC} in + amd64_musl) TOOLCHAIN="x86_64-unknown-linux-musl";; + amd64_glibc) TOOLCHAIN="x86_64-unknown-linux-gnu";; + arm32v7_musl) TOOLCHAIN="armv7-unknown-linux-musleabihf";; + arm32v7_glibc) TOOLCHAIN="armv7-unknown-linux-gnueabihf";; + arm64v8_musl) TOOLCHAIN="aarch64-unknown-linux-musl";; + arm64v8_glibc) TOOLCHAIN="aarch64-unknown-linux-gnu";; + esac + + case ${ARCH} in + amd64) STRIP="strip";; + arm32v7) STRIP="arm-linux-gnueabihf-strip";; + arm64v8) STRIP="aarch64-linux-gnu-strip";; + esac + if [[ -z ${DOCKER_IMAGENAME} ]]; then echo "Docker image name parameter invalid" print_help_and_exit @@ -136,7 +166,7 @@ process_args() print_help_and_exit fi - if [[ ${BUILD_CONFIG_OPTION} -eq "release" ]]; then + if [[ ${BUILD_CONFIGURATION} == "release" ]]; then BUILD_CONFIGURATION='release' BUILD_CONFIG_OPTION='--release' else @@ -145,16 +175,6 @@ process_args() fi } -print_args() -{ - echo "Project: $EDGELET_DIR/$PROJECT" - echo "Arch: $ARCH" - echo "Image: $DOCKER_IMAGENAME" - echo "Namespace: $DOCKER_NAMESPACE" - echo "Dockerfile: $DOCKERFILE" - echo -} - ############################################################################### # Build project and publish result ############################################################################### @@ -163,11 +183,8 @@ build_project() # build project with cross cd ${EDGELET_DIR} - local BUILD_CMD="cross build -p ${PROJECT} ${BUILD_CONFIG_OPTION} --target ${TOOLCHAIN}" - echo ${BUILD_CMD} - ${BUILD_CMD} - - ${STRIP} ${EDGELET_DIR}/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/${PROJECT} + execute cross build -p ${PROJECT} ${BUILD_CONFIG_OPTION} --target ${TOOLCHAIN} + execute ${STRIP} ${EDGELET_DIR}/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/${PROJECT} # prepare docker folder local EXE_DOCKER_DIR=${PUBLISH_DIR}/${DOCKER_IMAGENAME}/docker/linux/${ARCH} @@ -175,15 +192,24 @@ build_project() # copy Dockerfile to publish folder for given arch local EXE_DOCKERFILE=${EXE_DOCKER_DIR}/Dockerfile - - local COPY_DOCKERFILE_CMD="cp ${DOCKERFILE} ${EXE_DOCKERFILE}" - echo ${COPY_DOCKERFILE_CMD} - ${COPY_DOCKERFILE_CMD} + execute cp ${DOCKERFILE} ${EXE_DOCKERFILE} # copy binaries to publish folder - local COPY_CMD="cp ${EDGELET_DIR}/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/${PROJECT} ${EXE_DOCKER_DIR}/${PROJECT}" - echo ${COPY_CMD} - ${COPY_CMD} + execute cp ${EDGELET_DIR}/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/${PROJECT} ${EXE_DOCKER_DIR}/${PROJECT} + + if [[ ${PROJECT} == "iotedged" ]]; then + execute cp ${EDGELET_DIR}/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/build/hsm-sys-*/out/lib/*.so* ${EXE_DOCKER_DIR}/ + fi +} + +############################################################################### +# Print given command and execute it +############################################################################### +execute() +{ + echo "\$ $@" + "$@" + echo } ############################################################################### From 55d2e1824f6a0654b21ffcbc3a897356c64d6c30 Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Tue, 21 May 2019 15:59:36 -0700 Subject: [PATCH 10/29] Made lowercase comparison --- scripts/linux/buildEdgelet.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/linux/buildEdgelet.sh b/scripts/linux/buildEdgelet.sh index 3511549e706..390316d7734 100755 --- a/scripts/linux/buildEdgelet.sh +++ b/scripts/linux/buildEdgelet.sh @@ -166,7 +166,7 @@ process_args() print_help_and_exit fi - if [[ ${BUILD_CONFIGURATION} == "release" ]]; then + if [[ ${BUILD_CONFIGURATION,,} == "release" ]]; then BUILD_CONFIGURATION='release' BUILD_CONFIG_OPTION='--release' else @@ -197,7 +197,7 @@ build_project() # copy binaries to publish folder execute cp ${EDGELET_DIR}/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/${PROJECT} ${EXE_DOCKER_DIR}/${PROJECT} - if [[ ${PROJECT} == "iotedged" ]]; then + if [[ ${PROJECT,,} == "iotedged" ]]; then execute cp ${EDGELET_DIR}/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/build/hsm-sys-*/out/lib/*.so* ${EXE_DOCKER_DIR}/ fi } From 987746d9129c460becd831c98a985fb833887281 Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Tue, 21 May 2019 16:07:47 -0700 Subject: [PATCH 11/29] Copy *.so files only in release configuration --- scripts/linux/buildEdgelet.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/linux/buildEdgelet.sh b/scripts/linux/buildEdgelet.sh index 390316d7734..ecd30f8ee01 100755 --- a/scripts/linux/buildEdgelet.sh +++ b/scripts/linux/buildEdgelet.sh @@ -197,7 +197,7 @@ build_project() # copy binaries to publish folder execute cp ${EDGELET_DIR}/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/${PROJECT} ${EXE_DOCKER_DIR}/${PROJECT} - if [[ ${PROJECT,,} == "iotedged" ]]; then + if [[ ${PROJECT,,} == "iotedged" ]] && [[ ${BUILD_CONFIGURATION} == "release" ]]; then execute cp ${EDGELET_DIR}/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/build/hsm-sys-*/out/lib/*.so* ${EXE_DOCKER_DIR}/ fi } From 629001130d55237383c0d1a52160f8bc2908582d Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Tue, 21 May 2019 16:53:39 -0700 Subject: [PATCH 12/29] Added manifest to build multi-arch images --- builds/misc/images.yaml | 2 ++ edgelet/iotedged/docker/manifest.yaml.template | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 edgelet/iotedged/docker/manifest.yaml.template diff --git a/builds/misc/images.yaml b/builds/misc/images.yaml index 120a5bbc7e6..0e22aaf965a 100644 --- a/builds/misc/images.yaml +++ b/builds/misc/images.yaml @@ -431,6 +431,8 @@ jobs: displayName: 'Publish Edge Hub Manifest' - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edge-modules/SimulatedTemperatureSensor/docker/manifest.yaml.template -n microsoft --tags "$(tags)" displayName: 'Publish Temperature Sensor Manifest' + - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edgelet/iotedged/docker/manifest.yaml.template -n microsoft --tags "$(tags)" + displayName: 'Publish azureiotedge-iotedged Manifest' - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edgelet/iotedge-diagnostics/docker/manifest.yaml.template -n microsoft --tags "$(tags)" displayName: 'Publish azureiotedge-diagnostics Manifest' - script: scripts/linux/buildManifest.sh -r $(registry.address) -u $(registry.user) -p $(registry.password) -v $(Build.BuildNumber) -t $(System.DefaultWorkingDirectory)/edge-proxy/docker/manifest.yaml.template -n microsoft --tags "$(tags)" diff --git a/edgelet/iotedged/docker/manifest.yaml.template b/edgelet/iotedged/docker/manifest.yaml.template new file mode 100644 index 00000000000..a6cb12ccb6e --- /dev/null +++ b/edgelet/iotedged/docker/manifest.yaml.template @@ -0,0 +1,18 @@ +image: __REGISTRY__/__NAMESPACE__/azureiotedge-iotedged:__VERSION__ +tags: __TAGS__ +manifests: + - + image: __REGISTRY__/__NAMESPACE__/azureiotedge-iotedged:__VERSION__-linux-amd64 + platform: + architecture: amd64 + os: linux + - + image: __REGISTRY__/__NAMESPACE__/azureiotedge-iotedged:__VERSION__-linux-arm32v7 + platform: + architecture: arm + os: linux + - + image: __REGISTRY__/__NAMESPACE__/azureiotedge-iotedged:__VERSION__-linux-arm64v8 + platform: + architecture: arm64 + os: linux \ No newline at end of file From 6b51b062a839bef69cd8f8ac4920bace6fc84a28 Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Wed, 22 May 2019 10:29:18 -0700 Subject: [PATCH 13/29] Fixed edge-proxy build steps --- builds/misc/images.yaml | 6 +-- .../misc/templates/build-edgelet-linux.yaml | 3 +- scripts/linux/buildEdgeProxy.sh | 42 ++++++++++--------- scripts/linux/buildEdgelet.sh | 17 +++----- 4 files changed, 32 insertions(+), 36 deletions(-) diff --git a/builds/misc/images.yaml b/builds/misc/images.yaml index 0e22aaf965a..3a034499ecd 100644 --- a/builds/misc/images.yaml +++ b/builds/misc/images.yaml @@ -35,13 +35,13 @@ jobs: name: build displayName: Build ($(Build.Configuration)) - - script: scripts/linux/buildEdgelet.sh -i azureiotedge-iotedged -n microsoft -P iotedged -c $(Build.Configuration) -l glibc -t aarch64 + - script: scripts/linux/buildEdgelet.sh -i azureiotedge-iotedged -n microsoft -P iotedged -c $(Build.Configuration) -t aarch64 displayName: Build - Edge Security Daemon - aarch64 - script: scripts/linux/buildEdgelet.sh -i azureiotedge-diagnostics -n microsoft -P iotedge-diagnostics -c $(Build.Configuration) -t aarch64 displayName: Build - Edge Diagnostics - aarch64 - - script: scripts/linux/buildEdgeProxy.sh -i azureiotedge-proxy -n microsoft -P edge-proxy -t aarch64 -l musl + - script: scripts/linux/buildEdgeProxy.sh -i azureiotedge-proxy -n microsoft -P edge-proxy -t aarch64 displayName: Build - Edge Proxy - aarch64 - task: PublishBuildArtifacts@1 @@ -178,7 +178,6 @@ jobs: imageName: azureiotedge-iotedged project: iotedged configuration: $(Build.Configuration) - libc: glibc - template: templates/build-edgelet-linux.yaml parameters: @@ -187,7 +186,6 @@ jobs: imageName: azureiotedge-diagnostics project: iotedge-diagnostics configuration: $(Build.Configuration) - libc: musl - template: templates/build-edgelet-linux.yaml parameters: diff --git a/builds/misc/templates/build-edgelet-linux.yaml b/builds/misc/templates/build-edgelet-linux.yaml index 8d96d59a11c..722ad582296 100644 --- a/builds/misc/templates/build-edgelet-linux.yaml +++ b/builds/misc/templates/build-edgelet-linux.yaml @@ -5,14 +5,13 @@ parameters: project: '' configuration: 'release' filePath: - libc: 'glibc' steps: - task: Bash@3 displayName: Build - ${{ parameters.name }} - amd64 inputs: filePath: ${{ parameters.filePath }} - arguments: -i ${{ parameters.imageName }} -n ${{ parameters.namespace }} -P ${{ parameters.project }} -c ${{ parameters.configuration }} -l ${{ parameters.libc }} + arguments: -i ${{ parameters.imageName }} -n ${{ parameters.namespace }} -P ${{ parameters.project }} -c ${{ parameters.configuration }} - task: Bash@3 displayName: Build - ${{ parameters.name }} - arm32 inputs: diff --git a/scripts/linux/buildEdgeProxy.sh b/scripts/linux/buildEdgeProxy.sh index 2288ca868cd..64ed50caefc 100755 --- a/scripts/linux/buildEdgeProxy.sh +++ b/scripts/linux/buildEdgeProxy.sh @@ -64,6 +64,16 @@ print_help_and_exit() exit 1 } +print_args() +{ + echo "Project: $BUILD_BINARIESDIRECTORY/$PROJECT" + echo "Arch: $ARCH" + echo "Image: $DOCKER_IMAGENAME" + echo "Namespace: $DOCKER_NAMESPACE" + echo "Dockerfile: $DOCKERFILE" + echo +} + ############################################################################### # Obtain and validate the options supported by this script ############################################################################### @@ -135,37 +145,31 @@ process_args() fi } -print_args() -{ - echo "Project: $BUILD_BINARIESDIRECTORY/$PROJECT" - echo "Arch: $ARCH" - echo "Image: $DOCKER_IMAGENAME" - echo "Namespace: $DOCKER_NAMESPACE" - echo "Dockerfile: $DOCKERFILE" - echo -} - ############################################################################### # Build project and publish result ############################################################################### build_project() { - # prepare docker folder local EXE_DOCKER_DIR=${PUBLISH_DIR}/${DOCKER_IMAGENAME}/docker/linux/${ARCH} mkdir -p ${EXE_DOCKER_DIR} # copy Dockerfile to publish folder for given arch local EXE_DOCKERFILE=${EXE_DOCKER_DIR}/Dockerfile - - local COPY_DOCKERFILE_CMD="cp ${DOCKERFILE} ${EXE_DOCKERFILE}" - echo ${COPY_DOCKERFILE_CMD} - ${COPY_DOCKERFILE_CMD} + execute cp ${DOCKERFILE} ${EXE_DOCKERFILE} # copy executables to publish folder - local COPY_CMD="cp ${BUILD_REPOSITORY_LOCALPATH}/edge-proxy/src/run.sh ${EXE_DOCKER_DIR}/" - echo ${COPY_CMD} - ${COPY_CMD} + execute cp ${BUILD_REPOSITORY_LOCALPATH}/edge-proxy/src/run.sh ${EXE_DOCKER_DIR}/ +} + +############################################################################### +# Print given command and execute it +############################################################################### +execute() +{ + echo "\$ $@" + "$@" + echo } ############################################################################### @@ -175,4 +179,4 @@ check_arch process_args "$@" print_args -build_project \ No newline at end of file +build_project diff --git a/scripts/linux/buildEdgelet.sh b/scripts/linux/buildEdgelet.sh index ecd30f8ee01..b76fed82729 100755 --- a/scripts/linux/buildEdgelet.sh +++ b/scripts/linux/buildEdgelet.sh @@ -11,7 +11,6 @@ set -e # Define Environment Variables ############################################################################### ARCH=$(uname -m) -LIBC="glibc" TOOLCHAIN= STRIP= SCRIPT_NAME=$(basename $0) @@ -58,7 +57,6 @@ usage() echo " -t, --target-arch Target architecture (default: uname -m)" echo " -n, --namespace Docker namespace (default: $DEFAULT_DOCKER_NAMESPACE)" echo " -c, --configuration Build configuration (default: release)" - echo " -l, --libc libc implementation (default: glibc)" echo "--bin-dir Directory containing the output binaries. Either use this option or set env variable BUILD_BINARIESDIRECTORY" exit 1; } @@ -105,9 +103,6 @@ process_args() BUILD_CONFIGURATION="$arg" save_next_arg=0 elif [[ ${save_next_arg} -eq 6 ]]; then - LIBC="$arg" - save_next_arg=0 - elif [[ ${save_next_arg} -eq 7 ]]; then BUILD_BINARIESDIRECTORY="$arg" save_next_arg=0 else @@ -118,16 +113,16 @@ process_args() "-i" | "--image-name" ) save_next_arg=3;; "-n" | "--namespace" ) save_next_arg=4;; "-c" | "--configuration" ) save_next_arg=5;; - "-l" | "--libc") save_next_arg=6;; - "--bin-dir" ) save_next_arg=7;; + "--bin-dir" ) save_next_arg=6;; * ) usage;; esac fi done - if [[ ${LIBC} != "glibc" ]] && [[ ${LIBC} != "musl" ]]; then - echo "Unsupported libc implementation" - exit 1 + if [[ ${PROJECT,,} == "iotedged" ]]; then + LIBC="glibc" + else + LIBC="musl" fi case ${ARCH}_${LIBC} in @@ -195,7 +190,7 @@ build_project() execute cp ${DOCKERFILE} ${EXE_DOCKERFILE} # copy binaries to publish folder - execute cp ${EDGELET_DIR}/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/${PROJECT} ${EXE_DOCKER_DIR}/${PROJECT} + execute cp ${EDGELET_DIR}/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/${PROJECT} ${EXE_DOCKER_DIR}/ if [[ ${PROJECT,,} == "iotedged" ]] && [[ ${BUILD_CONFIGURATION} == "release" ]]; then execute cp ${EDGELET_DIR}/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/build/hsm-sys-*/out/lib/*.so* ${EXE_DOCKER_DIR}/ From cb56c5a8661ec67bb28254bbdcca1ca6dfd025d5 Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Wed, 22 May 2019 12:10:43 -0700 Subject: [PATCH 14/29] Updated path to source files for buildImage task --- edgelet/iotedged/docker/linux/amd64/Dockerfile | 4 ++-- edgelet/iotedged/docker/linux/arm32v7/Dockerfile | 4 ++-- edgelet/iotedged/docker/linux/arm64v8/Dockerfile | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/edgelet/iotedged/docker/linux/amd64/Dockerfile b/edgelet/iotedged/docker/linux/amd64/Dockerfile index e4f1481dfdf..f97dfd5a851 100644 --- a/edgelet/iotedged/docker/linux/amd64/Dockerfile +++ b/edgelet/iotedged/docker/linux/amd64/Dockerfile @@ -6,8 +6,8 @@ RUN apt-get update && apt-get install -y \ && rm -rf /var/lib/apt/lists/* WORKDIR /app -ADD libiothsm.so* /app/ -ADD iotedged /app +ADD ./docker/linux/amd64/libiothsm.so* /app/ +ADD ./docker/linux/amd64/iotedged /app ENV LD_LIBRARY_PATH /app diff --git a/edgelet/iotedged/docker/linux/arm32v7/Dockerfile b/edgelet/iotedged/docker/linux/arm32v7/Dockerfile index 32a5b250758..8db71e2ebf0 100644 --- a/edgelet/iotedged/docker/linux/arm32v7/Dockerfile +++ b/edgelet/iotedged/docker/linux/arm32v7/Dockerfile @@ -6,8 +6,8 @@ RUN apt-get update && apt-get install -y \ && rm -rf /var/lib/apt/lists/* WORKDIR /app -ADD libiothsm.so* /app/ -ADD iotedged /app +ADD ./docker/linux/arm32v7/libiothsm.so* /app/ +ADD ./docker/linux/arm32v7/iotedged /app ENV LD_LIBRARY_PATH /app diff --git a/edgelet/iotedged/docker/linux/arm64v8/Dockerfile b/edgelet/iotedged/docker/linux/arm64v8/Dockerfile index 04f2348d6b8..53c2d89b1ee 100644 --- a/edgelet/iotedged/docker/linux/arm64v8/Dockerfile +++ b/edgelet/iotedged/docker/linux/arm64v8/Dockerfile @@ -6,8 +6,8 @@ RUN apt-get update && apt-get install -y \ && rm -rf /var/lib/apt/lists/* WORKDIR /app -ADD libiothsm.so* /app/ -ADD iotedged /app +ADD ./docker/linux/arm64v8/libiothsm.so* /app/ +ADD ./docker/linux/arm64v8/iotedged /app ENV LD_LIBRARY_PATH /app From 1d14742d1234d25c1abc9de133abdf32c35a109f Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Wed, 22 May 2019 14:54:54 -0700 Subject: [PATCH 15/29] Made bash linter happy --- scripts/linux/buildImage.sh | 68 ++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/scripts/linux/buildImage.sh b/scripts/linux/buildImage.sh index 754db655c04..05eb5a3db5d 100755 --- a/scripts/linux/buildImage.sh +++ b/scripts/linux/buildImage.sh @@ -20,7 +20,7 @@ PROJECT= DOCKERFILE= DOCKER_IMAGENAME= DEFAULT_DOCKER_NAMESPACE="microsoft" -DOCKER_NAMESPACE=$DEFAULT_DOCKER_NAMESPACE +DOCKER_NAMESPACE=${DEFAULT_DOCKER_NAMESPACE} BUILD_BINARIESDIRECTORY=${BUILD_BINARIESDIRECTORY:=""} SKIP_PUSH=0 @@ -29,11 +29,11 @@ SKIP_PUSH=0 ############################################################################### check_arch() { - if [ "$ARCH" == "x86_64" ]; then + if [[ "$ARCH" == "x86_64" ]]; then ARCH="amd64" - elif [ "$ARCH" == "armv7l" ]; then + elif [[ "$ARCH" == "armv7l" ]]; then ARCH="arm32v7" - elif [ "$ARCH" == "aarch64" ]; then + elif [[ "$ARCH" == "aarch64" ]]; then ARCH="arm64v8" else echo "Unsupported architecture" @@ -78,35 +78,35 @@ process_args() save_next_arg=0 for arg in $@ do - if [ $save_next_arg -eq 1 ]; then + if [[ ${save_next_arg} -eq 1 ]]; then DOCKER_REGISTRY="$arg" save_next_arg=0 - elif [ $save_next_arg -eq 2 ]; then + elif [[ ${save_next_arg} -eq 2 ]]; then DOCKER_USERNAME="$arg" save_next_arg=0 - elif [ $save_next_arg -eq 3 ]; then + elif [[ ${save_next_arg} -eq 3 ]]; then DOCKER_PASSWORD="$arg" save_next_arg=0 - elif [ $save_next_arg -eq 4 ]; then + elif [[ ${save_next_arg} -eq 4 ]]; then DOCKER_IMAGEVERSION="$arg" save_next_arg=0 - elif [ $save_next_arg -eq 5 ]; then + elif [[ ${save_next_arg} -eq 5 ]]; then BUILD_BINARIESDIRECTORY="$arg" save_next_arg=0 - elif [ $save_next_arg -eq 6 ]; then + elif [[ ${save_next_arg} -eq 6 ]]; then BASE_TAG="$arg" save_next_arg=0 - elif [ $save_next_arg -eq 7 ]; then + elif [[ ${save_next_arg} -eq 7 ]]; then ARCH="$arg" check_arch save_next_arg=0 - elif [ $save_next_arg -eq 8 ]; then + elif [[ ${save_next_arg} -eq 8 ]]; then PROJECT="$arg" save_next_arg=0 - elif [ $save_next_arg -eq 9 ]; then + elif [[ ${save_next_arg} -eq 9 ]]; then DOCKER_IMAGENAME="$arg" save_next_arg=0 - elif [ $save_next_arg -eq 10 ]; then + elif [[ ${save_next_arg} -eq 10 ]]; then DOCKER_NAMESPACE="$arg" save_next_arg=0 else @@ -133,7 +133,7 @@ process_args() print_help_and_exit fi - if [[ $SKIP_PUSH -eq 0 ]]; then + if [[ ${SKIP_PUSH} -eq 0 ]]; then if [[ -z ${DOCKER_USERNAME} ]]; then echo "Docker username parameter invalid" print_help_and_exit @@ -151,8 +151,8 @@ process_args() fi if [[ -z ${DOCKER_IMAGEVERSION} ]]; then - if [ ! -z "${BUILD_BUILDNUMBER}" ]; then - DOCKER_IMAGEVERSION=$BUILD_BUILDNUMBER + if [[ ! -z "${BUILD_BUILDNUMBER}" ]]; then + DOCKER_IMAGEVERSION=${BUILD_BUILDNUMBER} else echo "Docker image version not found." print_help_and_exit @@ -164,14 +164,14 @@ process_args() print_help_and_exit fi - PUBLISH_DIR=$BUILD_BINARIESDIRECTORY/publish + PUBLISH_DIR=${BUILD_BINARIESDIRECTORY}/publish - if [[ ! -d $PUBLISH_DIR ]]; then + if [[ ! -d ${PUBLISH_DIR} ]]; then echo "Publish directory does not exist or is invalid" print_help_and_exit fi - EXE_DOCKER_DIR=$PUBLISH_DIR/$PROJECT/docker + EXE_DOCKER_DIR=${PUBLISH_DIR}/${PROJECT}/docker if [[ -z ${EXE_DOCKER_DIR} ]] || [[ ! -d ${EXE_DOCKER_DIR} ]]; then echo "No docker directory for $PROJECT at $EXE_DOCKER_DIR" @@ -179,7 +179,7 @@ process_args() fi DOCKERFILE="$EXE_DOCKER_DIR/linux/$ARCH/Dockerfile" - if [[ ! -f $DOCKERFILE ]]; then + if [[ ! -f ${DOCKERFILE} ]]; then echo "No Dockerfile at $DOCKERFILE" print_help_and_exit fi @@ -204,7 +204,7 @@ docker_build_and_tag_and_push() context_path="$4" build_args="${@:5}" - if [ -z "${imagename}" ] || [ -z "${arch}" ] || [ -z "${context_path}" ]; then + if [[ -z "${imagename}" ]] || [[ -z "${arch}" ]] || [[ -z "${context_path}" ]]; then echo "Error: Arguments are invalid [$imagename] [$arch] [$context_path]" exit 1 fi @@ -212,25 +212,25 @@ docker_build_and_tag_and_push() echo "Building and pushing Docker image $imagename for $arch" docker_build_cmd="docker build --no-cache" docker_build_cmd+=" -t $DOCKER_REGISTRY/$DOCKER_NAMESPACE/$imagename:$DOCKER_IMAGEVERSION-linux-$arch" - if [ ! -z "${dockerfile}" ]; then + if [[ ! -z "${dockerfile}" ]]; then docker_build_cmd+=" --file $dockerfile" fi docker_build_cmd+=" $build_args $context_path" echo "Running... $docker_build_cmd" - $docker_build_cmd + ${docker_build_cmd} - if [ $? -ne 0 ]; then + if [[ $? -ne 0 ]]; then echo "Docker build failed with exit code $?" exit 1 fi - if [ $SKIP_PUSH -eq 0 ]; then + if [[ ${SKIP_PUSH} -eq 0 ]]; then docker_push_cmd="docker push $DOCKER_REGISTRY/$DOCKER_NAMESPACE/$imagename:$DOCKER_IMAGEVERSION-linux-$arch" echo "Running... $docker_push_cmd" - $docker_push_cmd - if [ $? -ne 0 ]; then + ${docker_push_cmd} + if [[ $? -ne 0 ]]; then echo "Docker push failed with exit code $?" exit 1 fi @@ -246,16 +246,16 @@ check_arch process_args "$@" # log in to container registry -if [ $SKIP_PUSH -eq 0 ]; then - docker login $DOCKER_REGISTRY -u $DOCKER_USERNAME -p $DOCKER_PASSWORD - if [ $? -ne 0 ]; then +if [[ ${SKIP_PUSH} -eq 0 ]]; then + docker login ${DOCKER_REGISTRY} -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD} + if [[ $? -ne 0 ]]; then echo "Docker login failed!" exit 1 fi fi build_args=( "EXE_DIR=." ) -[ -z "$BASE_TAG" ] || build_args+=( "base_tag=$BASE_TAG" ) +[[ -z "$BASE_TAG" ]] || build_args+=( "base_tag=$BASE_TAG" ) # push image docker_build_and_tag_and_push \ @@ -264,8 +264,8 @@ docker_build_and_tag_and_push \ "$DOCKERFILE" \ "$PUBLISH_DIR/$PROJECT" \ "${build_args[@]/#/--build-arg }" -[ $? -eq 0 ] || exit $? +[[ $? -eq 0 ]] || exit $? echo "Done building and pushing Docker image $DOCKER_IMAGENAME for $PROJECT" -[ $? -eq 0 ] || exit $? +[[ $? -eq 0 ]] || exit $? From 48859441ca6b157c174ea5718829ca5835828d3e Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Wed, 22 May 2019 16:18:07 -0700 Subject: [PATCH 16/29] Forced to use base imaged for arm --- edgelet/iotedged/docker/linux/arm32v7/Dockerfile | 7 +------ edgelet/iotedged/docker/linux/arm32v7/base/Dockerfile | 6 ++++++ edgelet/iotedged/docker/linux/arm64v8/Dockerfile | 7 +------ edgelet/iotedged/docker/linux/arm64v8/base/Dockerfile | 6 ++++++ 4 files changed, 14 insertions(+), 12 deletions(-) create mode 100644 edgelet/iotedged/docker/linux/arm32v7/base/Dockerfile create mode 100644 edgelet/iotedged/docker/linux/arm64v8/base/Dockerfile diff --git a/edgelet/iotedged/docker/linux/arm32v7/Dockerfile b/edgelet/iotedged/docker/linux/arm32v7/Dockerfile index 8db71e2ebf0..a08974047f0 100644 --- a/edgelet/iotedged/docker/linux/arm32v7/Dockerfile +++ b/edgelet/iotedged/docker/linux/arm32v7/Dockerfile @@ -1,9 +1,4 @@ -FROM arm32v7/debian:9 - -RUN apt-get update && apt-get install -y \ - libssl1.0.2 \ - ca-certificates \ - && rm -rf /var/lib/apt/lists/* +FROM azureiotedge/azureiotedge-iotedged-base:1.0-arm32v7 WORKDIR /app ADD ./docker/linux/arm32v7/libiothsm.so* /app/ diff --git a/edgelet/iotedged/docker/linux/arm32v7/base/Dockerfile b/edgelet/iotedged/docker/linux/arm32v7/base/Dockerfile new file mode 100644 index 00000000000..7ed25225e85 --- /dev/null +++ b/edgelet/iotedged/docker/linux/arm32v7/base/Dockerfile @@ -0,0 +1,6 @@ +FROM arm32v7/debian:9 + +RUN apt-get update && apt-get install -y \ + libssl1.0.2 \ + ca-certificates \ + && rm -rf /var/lib/apt/lists/* \ No newline at end of file diff --git a/edgelet/iotedged/docker/linux/arm64v8/Dockerfile b/edgelet/iotedged/docker/linux/arm64v8/Dockerfile index 53c2d89b1ee..ab48150842c 100644 --- a/edgelet/iotedged/docker/linux/arm64v8/Dockerfile +++ b/edgelet/iotedged/docker/linux/arm64v8/Dockerfile @@ -1,9 +1,4 @@ -FROM arm64v8/debian:9 - -RUN apt-get update && apt-get install -y \ - libssl1.0.2 \ - ca-certificates \ - && rm -rf /var/lib/apt/lists/* +FROM azureiotedge/azureiotedge-iotedged-base:1.0-arm64v8 WORKDIR /app ADD ./docker/linux/arm64v8/libiothsm.so* /app/ diff --git a/edgelet/iotedged/docker/linux/arm64v8/base/Dockerfile b/edgelet/iotedged/docker/linux/arm64v8/base/Dockerfile new file mode 100644 index 00000000000..b71d6867ea6 --- /dev/null +++ b/edgelet/iotedged/docker/linux/arm64v8/base/Dockerfile @@ -0,0 +1,6 @@ +FROM arm64v8/debian:9 + +RUN apt-get update && apt-get install -y \ + libssl1.0.2 \ + ca-certificates \ + && rm -rf /var/lib/apt/lists/* \ No newline at end of file From 3f07609f694590cb35c9052793665c0ff5a41e8b Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Thu, 23 May 2019 10:44:54 -0700 Subject: [PATCH 17/29] Update build images on docker hub --- edgelet/Cross.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/edgelet/Cross.toml b/edgelet/Cross.toml index bcbd2f3f23e..5e6295fd04d 100644 --- a/edgelet/Cross.toml +++ b/edgelet/Cross.toml @@ -9,10 +9,10 @@ passthrough = [ image = "edgebuilds.azurecr.io/debian-build:9.5-1" [target.armv7-unknown-linux-gnueabihf] -image = "edgebuilds.azurecr.io/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf:debian_9.5-1" +image = "azureiotedge/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf:debian_9.5-1" [target.aarch64-unknown-linux-gnu] -image = "edgebuilds.azurecr.io/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu:debian_9.5-1" +image = "azureiotedge/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu:debian_9.5-1" [target.armv7-unknown-linux-musleabihf] # Built from rust-embedded/cross#718a19cd68fb09428532d1317515fe7303692b47 with `./build-docker-image.sh armv7-unknown-linux-musleabihf` From f72f4d3f8a1dc50fc8aa8503918e8b21abb1df72 Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Thu, 23 May 2019 10:47:52 -0700 Subject: [PATCH 18/29] Added arm64 check-in step --- builds/checkin/edgelet.yaml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/builds/checkin/edgelet.yaml b/builds/checkin/edgelet.yaml index 20dd661930d..df19deed136 100644 --- a/builds/checkin/edgelet.yaml +++ b/builds/checkin/edgelet.yaml @@ -54,6 +54,33 @@ jobs: displayName: armv7-unknown-linux-gnueabihf test workingDirectory: $(Build.SourcesDirectory)/edgelet + ################################################################################ + - job: linux_arm64v8 + ################################################################################ + displayName: Linux arm64v8 + pool: + vmImage: 'ubuntu-16.04' + variables: + IOTEDGE_HOMEDIR: /tmp + steps: + - bash: 'echo "##vso[task.setvariable variable=PATH;]$HOME/.cargo/bin:$PATH"' + displayName: Modify path + - bash: | + BASE_VERSION=`cat $BUILD_SOURCESDIRECTORY/edgelet/version.txt` + VERSION="$BASE_VERSION$BUILD_BUILDNUMBER" + echo "##vso[task.setvariable variable=VERSION;]$VERSION" + displayName: Set Version + - script: edgelet/build/linux/install.sh + displayName: Install Rust + - script: 'cargo install --git https://github.com/arsing/cross.git --branch set-path' + displayName: 'Install cross (fork with docker fix)' + - script: 'cross build --target aarch64-unknown-linux-gnu' + displayName: armv7-unknown-linux-gnueabihf build + workingDirectory: $(Build.SourcesDirectory)/edgelet + - script: 'cross test --target aarch64-unknown-linux-gnu' + displayName: armv7-unknown-linux-gnueabihf test + workingDirectory: $(Build.SourcesDirectory)/edgelet + ################################################################################ - job: windows_amd64 ################################################################################ From 7faeb66f6d7710b8828c4d12dd01d177032b91b1 Mon Sep 17 00:00:00 2001 From: Denis Molokanov Date: Fri, 24 May 2019 14:49:55 -0700 Subject: [PATCH 19/29] Apply suggestions from code review Co-Authored-By: Philip Lin --- builds/checkin/edgelet.yaml | 4 ++-- builds/misc/images.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/builds/checkin/edgelet.yaml b/builds/checkin/edgelet.yaml index 1c9f23c45a8..9972306d9e5 100644 --- a/builds/checkin/edgelet.yaml +++ b/builds/checkin/edgelet.yaml @@ -75,10 +75,10 @@ jobs: - script: 'cargo install --git https://github.com/arsing/cross.git --branch set-path' displayName: 'Install cross (fork with docker fix)' - script: 'cross build --target aarch64-unknown-linux-gnu' - displayName: armv7-unknown-linux-gnueabihf build + displayName: aarch64-unknown-linux-gnu build workingDirectory: $(Build.SourcesDirectory)/edgelet - script: 'cross test --target aarch64-unknown-linux-gnu' - displayName: armv7-unknown-linux-gnueabihf test + displayName: aarch64-unknown-linux-gnu test workingDirectory: $(Build.SourcesDirectory)/edgelet ################################################################################ diff --git a/builds/misc/images.yaml b/builds/misc/images.yaml index 3a034499ecd..571570bd2ac 100644 --- a/builds/misc/images.yaml +++ b/builds/misc/images.yaml @@ -50,7 +50,7 @@ jobs: PathtoPublish: '$(Build.BinariesDirectory)/publish' ArtifactName: 'core-linux' - # Edge Diagnostics - Not Using Template for ARM64 because we have 2 different .NET Core. + # Edge Security Daemon - Not Using Template for ARM64 because we have 2 different .NET Core. - task: Bash@3 displayName: Build Image - Edge Security Daemon - aarch64 inputs: From 3e5d7c2bbce1c512d8523caaf640534fd8160ef1 Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Fri, 24 May 2019 14:53:54 -0700 Subject: [PATCH 20/29] Fixed shellcheck warnings --- scripts/linux/buildEdgeProxy.sh | 30 ++++++++++-------------------- scripts/linux/buildEdgelet.sh | 27 +++++++++++++-------------- scripts/linux/buildImage.sh | 22 ++++++++++------------ 3 files changed, 33 insertions(+), 46 deletions(-) diff --git a/scripts/linux/buildEdgeProxy.sh b/scripts/linux/buildEdgeProxy.sh index 64ed50caefc..85bcd5b2e61 100755 --- a/scripts/linux/buildEdgeProxy.sh +++ b/scripts/linux/buildEdgeProxy.sh @@ -11,9 +11,8 @@ set -e # Define Environment Variables ############################################################################### ARCH=$(uname -m) -SCRIPT_NAME=$(basename $0) +SCRIPT_NAME=$(basename "$0") PROJECT= -SRC_DOCKERFILE= DOCKERFILE= DOCKER_IMAGENAME= DEFAULT_DOCKER_NAMESPACE="microsoft" @@ -21,7 +20,6 @@ DOCKER_NAMESPACE=${DEFAULT_DOCKER_NAMESPACE} BUILD_BINARIESDIRECTORY=${BUILD_BINARIESDIRECTORY:-$BUILD_REPOSITORY_LOCALPATH} PUBLISH_DIR=${BUILD_BINARIESDIRECTORY}/publish BUILD_CONFIGURATION="release" -BUILD_CONFIG_OPTION= ############################################################################### # Function to obtain the underlying architecture and check if supported @@ -80,7 +78,7 @@ print_args() process_args() { save_next_arg=0 - for arg in $@ + for arg in "$@" do if [[ ${save_next_arg} -eq 1 ]]; then ARCH="$arg" @@ -121,10 +119,10 @@ process_args() fi if [[ ! -d ${BUILD_BINARIESDIRECTORY} ]]; then - mkdir ${BUILD_BINARIESDIRECTORY} + mkdir "$BUILD_BINARIESDIRECTORY" fi - DOCKER_DIR=${BUILD_REPOSITORY_LOCALPATH}/${PROJECT}/docker + DOCKER_DIR="$BUILD_REPOSITORY_LOCALPATH/$PROJECT/docker" if [[ -z ${DOCKER_DIR} ]] || [[ ! -d ${DOCKER_DIR} ]]; then echo "No docker directory for $PROJECT at $BUILD_REPOSITORY_LOCALPATH" print_help_and_exit @@ -135,14 +133,6 @@ process_args() echo "No Dockerfile at $DOCKERFILE" print_help_and_exit fi - - if [[ ${BUILD_CONFIG_OPTION} -eq "release" ]]; then - BUILD_CONFIGURATION='release' - BUILD_CONFIG_OPTION='--release' - else - BUILD_CONFIGURATION='debug' - BUILD_CONFIG_OPTION='' - fi } ############################################################################### @@ -151,15 +141,15 @@ process_args() build_project() { # prepare docker folder - local EXE_DOCKER_DIR=${PUBLISH_DIR}/${DOCKER_IMAGENAME}/docker/linux/${ARCH} - mkdir -p ${EXE_DOCKER_DIR} + local EXE_DOCKER_DIR="$PUBLISH_DIR/$DOCKER_IMAGENAME/docker/linux/$ARCH" + mkdir -p "$EXE_DOCKER_DIR" # copy Dockerfile to publish folder for given arch - local EXE_DOCKERFILE=${EXE_DOCKER_DIR}/Dockerfile - execute cp ${DOCKERFILE} ${EXE_DOCKERFILE} + local EXE_DOCKERFILE="$EXE_DOCKER_DIR/Dockerfile" + execute cp "$DOCKERFILE" "$EXE_DOCKERFILE" # copy executables to publish folder - execute cp ${BUILD_REPOSITORY_LOCALPATH}/edge-proxy/src/run.sh ${EXE_DOCKER_DIR}/ + execute cp "$BUILD_REPOSITORY_LOCALPATH/edge-proxy/src/run.sh" "$EXE_DOCKER_DIR/" } ############################################################################### @@ -167,7 +157,7 @@ build_project() ############################################################################### execute() { - echo "\$ $@" + echo "\$" "$*" "$@" echo } diff --git a/scripts/linux/buildEdgelet.sh b/scripts/linux/buildEdgelet.sh index b76fed82729..082b5c9d907 100755 --- a/scripts/linux/buildEdgelet.sh +++ b/scripts/linux/buildEdgelet.sh @@ -13,9 +13,8 @@ set -e ARCH=$(uname -m) TOOLCHAIN= STRIP= -SCRIPT_NAME=$(basename $0) +SCRIPT_NAME=$(basename "$0") PROJECT= -SRC_DOCKERFILE= DOCKERFILE= DOCKER_IMAGENAME= DEFAULT_DOCKER_NAMESPACE="microsoft" @@ -84,7 +83,7 @@ print_args() process_args() { save_next_arg=0 - for arg in $@ + for arg in "$@" do if [[ ${save_next_arg} -eq 1 ]]; then ARCH="$arg" @@ -146,7 +145,7 @@ process_args() fi if [[ ! -d ${BUILD_BINARIESDIRECTORY} ]]; then - mkdir ${BUILD_BINARIESDIRECTORY} + mkdir "${BUILD_BINARIESDIRECTORY}" fi DOCKER_DIR=${EDGELET_DIR}/${PROJECT}/docker @@ -176,24 +175,24 @@ process_args() build_project() { # build project with cross - cd ${EDGELET_DIR} + cd "$EDGELET_DIR" - execute cross build -p ${PROJECT} ${BUILD_CONFIG_OPTION} --target ${TOOLCHAIN} - execute ${STRIP} ${EDGELET_DIR}/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/${PROJECT} + execute cross build -p "$PROJECT" "$BUILD_CONFIG_OPTION" --target "$TOOLCHAIN" + execute "$STRIP" "$EDGELET_DIR/target/$TOOLCHAIN/$BUILD_CONFIGURATION/$PROJECT" # prepare docker folder - local EXE_DOCKER_DIR=${PUBLISH_DIR}/${DOCKER_IMAGENAME}/docker/linux/${ARCH} - mkdir -p ${EXE_DOCKER_DIR} + local EXE_DOCKER_DIR="$PUBLISH_DIR/$DOCKER_IMAGENAME/docker/linux/$ARCH" + mkdir -p "$EXE_DOCKER_DIR" # copy Dockerfile to publish folder for given arch - local EXE_DOCKERFILE=${EXE_DOCKER_DIR}/Dockerfile - execute cp ${DOCKERFILE} ${EXE_DOCKERFILE} + local EXE_DOCKERFILE="$EXE_DOCKER_DIR/Dockerfile" + execute cp "$DOCKERFILE" "$EXE_DOCKERFILE" # copy binaries to publish folder - execute cp ${EDGELET_DIR}/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/${PROJECT} ${EXE_DOCKER_DIR}/ + execute cp "$EDGELET_DIR/target/$TOOLCHAIN/$BUILD_CONFIGURATION/$PROJECT" "$EXE_DOCKER_DIR/" if [[ ${PROJECT,,} == "iotedged" ]] && [[ ${BUILD_CONFIGURATION} == "release" ]]; then - execute cp ${EDGELET_DIR}/target/${TOOLCHAIN}/${BUILD_CONFIGURATION}/build/hsm-sys-*/out/lib/*.so* ${EXE_DOCKER_DIR}/ + execute cp "$EDGELET_DIR/target/$TOOLCHAIN/$BUILD_CONFIGURATION/build/hsm-sys-*/out/lib/*.so*" "$EXE_DOCKER_DIR/" fi } @@ -202,7 +201,7 @@ build_project() ############################################################################### execute() { - echo "\$ $@" + echo "\$ $*" "$@" echo } diff --git a/scripts/linux/buildImage.sh b/scripts/linux/buildImage.sh index 05eb5a3db5d..6ff5827c5cd 100755 --- a/scripts/linux/buildImage.sh +++ b/scripts/linux/buildImage.sh @@ -13,7 +13,7 @@ set -e # Define Environment Variables ############################################################################### ARCH=$(uname -m) -SCRIPT_NAME=$(basename $0) +SCRIPT_NAME=$(basename "$0") PUBLISH_DIR= BASE_TAG= PROJECT= @@ -76,7 +76,7 @@ print_help_and_exit() process_args() { save_next_arg=0 - for arg in $@ + for arg in "$@" do if [[ ${save_next_arg} -eq 1 ]]; then DOCKER_REGISTRY="$arg" @@ -151,7 +151,7 @@ process_args() fi if [[ -z ${DOCKER_IMAGEVERSION} ]]; then - if [[ ! -z "${BUILD_BUILDNUMBER}" ]]; then + if [[ -n "${BUILD_BUILDNUMBER}" ]]; then DOCKER_IMAGEVERSION=${BUILD_BUILDNUMBER} else echo "Docker image version not found." @@ -202,7 +202,7 @@ docker_build_and_tag_and_push() arch="$2" dockerfile="$3" context_path="$4" - build_args="${@:5}" + build_args="$5" if [[ -z "${imagename}" ]] || [[ -z "${arch}" ]] || [[ -z "${context_path}" ]]; then echo "Error: Arguments are invalid [$imagename] [$arch] [$context_path]" @@ -212,16 +212,14 @@ docker_build_and_tag_and_push() echo "Building and pushing Docker image $imagename for $arch" docker_build_cmd="docker build --no-cache" docker_build_cmd+=" -t $DOCKER_REGISTRY/$DOCKER_NAMESPACE/$imagename:$DOCKER_IMAGEVERSION-linux-$arch" - if [[ ! -z "${dockerfile}" ]]; then + if [[ -n "${dockerfile}" ]]; then docker_build_cmd+=" --file $dockerfile" fi docker_build_cmd+=" $build_args $context_path" echo "Running... $docker_build_cmd" - ${docker_build_cmd} - - if [[ $? -ne 0 ]]; then + if [[ ! ${docker_build_cmd} ]]; then echo "Docker build failed with exit code $?" exit 1 fi @@ -229,8 +227,8 @@ docker_build_and_tag_and_push() if [[ ${SKIP_PUSH} -eq 0 ]]; then docker_push_cmd="docker push $DOCKER_REGISTRY/$DOCKER_NAMESPACE/$imagename:$DOCKER_IMAGEVERSION-linux-$arch" echo "Running... $docker_push_cmd" - ${docker_push_cmd} - if [[ $? -ne 0 ]]; then + + if [[ ! ${docker_push_cmd} ]]; then echo "Docker push failed with exit code $?" exit 1 fi @@ -247,8 +245,8 @@ process_args "$@" # log in to container registry if [[ ${SKIP_PUSH} -eq 0 ]]; then - docker login ${DOCKER_REGISTRY} -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD} - if [[ $? -ne 0 ]]; then + + if ! docker login "${DOCKER_REGISTRY}" -u "${DOCKER_USERNAME}" -p "${DOCKER_PASSWORD}"; then echo "Docker login failed!" exit 1 fi From 1d2938160611f0f0ddb80ca3f2cb5dedb7965191 Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Fri, 24 May 2019 16:32:20 -0700 Subject: [PATCH 21/29] Fixed error in build script --- scripts/linux/buildEdgelet.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/linux/buildEdgelet.sh b/scripts/linux/buildEdgelet.sh index 082b5c9d907..289c0e7c805 100755 --- a/scripts/linux/buildEdgelet.sh +++ b/scripts/linux/buildEdgelet.sh @@ -118,7 +118,7 @@ process_args() fi done - if [[ ${PROJECT,,} == "iotedged" ]]; then + if [[ ${PROJECT:l} == "iotedged" ]]; then LIBC="glibc" else LIBC="musl" @@ -160,7 +160,7 @@ process_args() print_help_and_exit fi - if [[ ${BUILD_CONFIGURATION,,} == "release" ]]; then + if [[ ${BUILD_CONFIGURATION:l} == "release" ]]; then BUILD_CONFIGURATION='release' BUILD_CONFIG_OPTION='--release' else @@ -191,8 +191,8 @@ build_project() # copy binaries to publish folder execute cp "$EDGELET_DIR/target/$TOOLCHAIN/$BUILD_CONFIGURATION/$PROJECT" "$EXE_DOCKER_DIR/" - if [[ ${PROJECT,,} == "iotedged" ]] && [[ ${BUILD_CONFIGURATION} == "release" ]]; then - execute cp "$EDGELET_DIR/target/$TOOLCHAIN/$BUILD_CONFIGURATION/build/hsm-sys-*/out/lib/*.so*" "$EXE_DOCKER_DIR/" + if [[ ${PROJECT:l} == "iotedged" ]] && [[ ${BUILD_CONFIGURATION} == "release" ]]; then + execute cp "$EDGELET_DIR"/target/"$TOOLCHAIN"/"$BUILD_CONFIGURATION"/build/hsm-sys-*/out/lib/*.so* "$EXE_DOCKER_DIR/" fi } From 205028bda48cf33b06324e581f4ab298b16ce812 Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Fri, 24 May 2019 16:47:38 -0700 Subject: [PATCH 22/29] Fixed misstypes --- scripts/linux/buildEdgelet.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/linux/buildEdgelet.sh b/scripts/linux/buildEdgelet.sh index 289c0e7c805..ba138253c1c 100755 --- a/scripts/linux/buildEdgelet.sh +++ b/scripts/linux/buildEdgelet.sh @@ -118,7 +118,7 @@ process_args() fi done - if [[ ${PROJECT:l} == "iotedged" ]]; then + if [[ ${PROJECT:,,} == "iotedged" ]]; then LIBC="glibc" else LIBC="musl" @@ -160,7 +160,7 @@ process_args() print_help_and_exit fi - if [[ ${BUILD_CONFIGURATION:l} == "release" ]]; then + if [[ ${BUILD_CONFIGURATION:,,} == "release" ]]; then BUILD_CONFIGURATION='release' BUILD_CONFIG_OPTION='--release' else @@ -213,4 +213,4 @@ check_arch process_args "$@" print_args -build_project \ No newline at end of file +build_project From 3a2b868f86199ac8d293c5213b78a9b2da181d56 Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Fri, 24 May 2019 19:16:24 -0700 Subject: [PATCH 23/29] Fixed misstypes --- scripts/linux/buildEdgelet.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/linux/buildEdgelet.sh b/scripts/linux/buildEdgelet.sh index ba138253c1c..5ae895fe664 100755 --- a/scripts/linux/buildEdgelet.sh +++ b/scripts/linux/buildEdgelet.sh @@ -118,7 +118,7 @@ process_args() fi done - if [[ ${PROJECT:,,} == "iotedged" ]]; then + if [[ ${PROJECT,,} == "iotedged" ]]; then LIBC="glibc" else LIBC="musl" @@ -160,7 +160,7 @@ process_args() print_help_and_exit fi - if [[ ${BUILD_CONFIGURATION:,,} == "release" ]]; then + if [[ ${BUILD_CONFIGURATION,,} == "release" ]]; then BUILD_CONFIGURATION='release' BUILD_CONFIG_OPTION='--release' else @@ -191,7 +191,7 @@ build_project() # copy binaries to publish folder execute cp "$EDGELET_DIR/target/$TOOLCHAIN/$BUILD_CONFIGURATION/$PROJECT" "$EXE_DOCKER_DIR/" - if [[ ${PROJECT:l} == "iotedged" ]] && [[ ${BUILD_CONFIGURATION} == "release" ]]; then + if [[ ${PROJECT,,} == "iotedged" ]] && [[ ${BUILD_CONFIGURATION} == "release" ]]; then execute cp "$EDGELET_DIR"/target/"$TOOLCHAIN"/"$BUILD_CONFIGURATION"/build/hsm-sys-*/out/lib/*.so* "$EXE_DOCKER_DIR/" fi } From c742098881d77c6de3f801e8d8bee575340ce33d Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Fri, 24 May 2019 20:28:18 -0700 Subject: [PATCH 24/29] Reverted some checks --- scripts/linux/buildEdgelet.sh | 2 +- scripts/linux/buildImage.sh | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/scripts/linux/buildEdgelet.sh b/scripts/linux/buildEdgelet.sh index 5ae895fe664..eb0af679b33 100755 --- a/scripts/linux/buildEdgelet.sh +++ b/scripts/linux/buildEdgelet.sh @@ -213,4 +213,4 @@ check_arch process_args "$@" print_args -build_project +build_project \ No newline at end of file diff --git a/scripts/linux/buildImage.sh b/scripts/linux/buildImage.sh index 6ff5827c5cd..03cd9f1f9f9 100755 --- a/scripts/linux/buildImage.sh +++ b/scripts/linux/buildImage.sh @@ -219,7 +219,9 @@ docker_build_and_tag_and_push() echo "Running... $docker_build_cmd" - if [[ ! ${docker_build_cmd} ]]; then + ${docker_build_cmd} + + if [[ $? -ne 0 ]]; then echo "Docker build failed with exit code $?" exit 1 fi @@ -227,8 +229,8 @@ docker_build_and_tag_and_push() if [[ ${SKIP_PUSH} -eq 0 ]]; then docker_push_cmd="docker push $DOCKER_REGISTRY/$DOCKER_NAMESPACE/$imagename:$DOCKER_IMAGEVERSION-linux-$arch" echo "Running... $docker_push_cmd" - - if [[ ! ${docker_push_cmd} ]]; then + ${docker_push_cmd} + if [[ $? -ne 0 ]]; then echo "Docker push failed with exit code $?" exit 1 fi @@ -245,8 +247,8 @@ process_args "$@" # log in to container registry if [[ ${SKIP_PUSH} -eq 0 ]]; then - - if ! docker login "${DOCKER_REGISTRY}" -u "${DOCKER_USERNAME}" -p "${DOCKER_PASSWORD}"; then + docker login "${DOCKER_REGISTRY}" -u "${DOCKER_USERNAME}" -p "${DOCKER_PASSWORD}" + if [[ $? -ne 0 ]]; then echo "Docker login failed!" exit 1 fi From 6b74e991528c1df26c376991afea7dac9319d719 Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Tue, 28 May 2019 14:26:47 -0700 Subject: [PATCH 25/29] Use debian:9-slim as a base image for iotedged --- edgelet/iotedged/docker/linux/amd64/Dockerfile | 4 ++-- edgelet/iotedged/docker/linux/arm32v7/base/Dockerfile | 4 ++-- edgelet/iotedged/docker/linux/arm64v8/base/Dockerfile | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/edgelet/iotedged/docker/linux/amd64/Dockerfile b/edgelet/iotedged/docker/linux/amd64/Dockerfile index f97dfd5a851..13cbbfa25fb 100644 --- a/edgelet/iotedged/docker/linux/amd64/Dockerfile +++ b/edgelet/iotedged/docker/linux/amd64/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:9 +FROM debian:9-slim RUN apt-get update && apt-get install -y \ libssl1.0.2 \ @@ -11,4 +11,4 @@ ADD ./docker/linux/amd64/iotedged /app ENV LD_LIBRARY_PATH /app -CMD ["/app/iotedged"] \ No newline at end of file +CMD ["/app/iotedged"] diff --git a/edgelet/iotedged/docker/linux/arm32v7/base/Dockerfile b/edgelet/iotedged/docker/linux/arm32v7/base/Dockerfile index 7ed25225e85..b4b9eb0432f 100644 --- a/edgelet/iotedged/docker/linux/arm32v7/base/Dockerfile +++ b/edgelet/iotedged/docker/linux/arm32v7/base/Dockerfile @@ -1,6 +1,6 @@ -FROM arm32v7/debian:9 +FROM arm32v7/debian:9-slim RUN apt-get update && apt-get install -y \ libssl1.0.2 \ ca-certificates \ - && rm -rf /var/lib/apt/lists/* \ No newline at end of file + && rm -rf /var/lib/apt/lists/* diff --git a/edgelet/iotedged/docker/linux/arm64v8/base/Dockerfile b/edgelet/iotedged/docker/linux/arm64v8/base/Dockerfile index b71d6867ea6..9d172deef73 100644 --- a/edgelet/iotedged/docker/linux/arm64v8/base/Dockerfile +++ b/edgelet/iotedged/docker/linux/arm64v8/base/Dockerfile @@ -1,6 +1,6 @@ -FROM arm64v8/debian:9 +FROM arm64v8/debian:9-slim RUN apt-get update && apt-get install -y \ libssl1.0.2 \ ca-certificates \ - && rm -rf /var/lib/apt/lists/* \ No newline at end of file + && rm -rf /var/lib/apt/lists/* From f949597073ad8f5a09362896d938c203bec89a21 Mon Sep 17 00:00:00 2001 From: Denis Molokanov Date: Tue, 28 May 2019 14:59:11 -0700 Subject: [PATCH 26/29] Update builds/misc/templates/build-edgelet-linux.yaml Co-Authored-By: Philip Lin --- builds/misc/templates/build-edgelet-linux.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/builds/misc/templates/build-edgelet-linux.yaml b/builds/misc/templates/build-edgelet-linux.yaml index 722ad582296..a0d92268f25 100644 --- a/builds/misc/templates/build-edgelet-linux.yaml +++ b/builds/misc/templates/build-edgelet-linux.yaml @@ -4,7 +4,7 @@ parameters: namespace: 'microsoft' project: '' configuration: 'release' - filePath: + filePath: '' steps: - task: Bash@3 @@ -16,4 +16,4 @@ steps: displayName: Build - ${{ parameters.name }} - arm32 inputs: filePath: ${{ parameters.filePath }} - arguments: -i ${{ parameters.imageName }} -n ${{ parameters.namespace }} -P ${{ parameters.project }} -c ${{ parameters.configuration }} --target-arch armv7l \ No newline at end of file + arguments: -i ${{ parameters.imageName }} -n ${{ parameters.namespace }} -P ${{ parameters.project }} -c ${{ parameters.configuration }} --target-arch armv7l From fe49171c6e418c2a4b60a34c7a0d7145a216aee2 Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Wed, 29 May 2019 16:00:19 -0700 Subject: [PATCH 27/29] Exit if edge-proxy runs in non-kubernetes environment --- edge-proxy/src/run.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/edge-proxy/src/run.sh b/edge-proxy/src/run.sh index 3fc99b8abf6..86cb0c8ac13 100644 --- a/edge-proxy/src/run.sh +++ b/edge-proxy/src/run.sh @@ -8,6 +8,7 @@ then token=`cat ${file}` else echo "Could not find file ${file}" + exit 1 fi config_src="/etc/traefik/traefik.toml" @@ -28,4 +29,4 @@ then fi # call traefik entry point script with a new config -/entrypoint.sh -c /traefik.toml \ No newline at end of file +/entrypoint.sh -c /traefik.toml From 1685ad1b0de492db50d6de3820b901662fc16e44 Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Thu, 30 May 2019 15:23:45 -0700 Subject: [PATCH 28/29] s/goes/go/g --- scripts/linux/buildEdgelet.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/linux/buildEdgelet.sh b/scripts/linux/buildEdgelet.sh index eb0af679b33..be0a31b5651 100755 --- a/scripts/linux/buildEdgelet.sh +++ b/scripts/linux/buildEdgelet.sh @@ -1,6 +1,6 @@ #!/bin/bash -# This script copies the iodedged executable files that goes into the azureiotedge-iotedged image, +# This script copies the iodedged executable files that go into the azureiotedge-iotedged image, # for each supported arch (x86_64, arm32v7, arm64v8). # It then publishes executable files along with their corresponding dockerfiles to the publish directory, # so that buildImage.sh can build the container image. @@ -213,4 +213,4 @@ check_arch process_args "$@" print_args -build_project \ No newline at end of file +build_project From 5371c97743acf7d8e2945d5a3e28343fbc3c2e11 Mon Sep 17 00:00:00 2001 From: dmolokanov Date: Thu, 30 May 2019 16:26:30 -0700 Subject: [PATCH 29/29] Fixed shellcheck warnings for run.sh --- edge-proxy/src/run.sh | 14 +++++++------- edgelet/Cross.toml | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) mode change 100644 => 100755 edge-proxy/src/run.sh diff --git a/edge-proxy/src/run.sh b/edge-proxy/src/run.sh old mode 100644 new mode 100755 index 86cb0c8ac13..98a347b6233 --- a/edge-proxy/src/run.sh +++ b/edge-proxy/src/run.sh @@ -3,16 +3,16 @@ set -e # read service account token from filesystem file="/var/run/secrets/kubernetes.io/serviceaccount/token" -if [[ -e ${file} ]] +if [ -e "$file" ] then - token=`cat ${file}` + token=$(cat "$file") else - echo "Could not find file ${file}" + echo "Could not find file $file" exit 1 fi config_src="/etc/traefik/traefik.toml" -if [[ ! -e ${config_src} ]] +if [ ! -e "$config_src" ] then echo "Could not find config ${config_src}" exit 1 @@ -20,12 +20,12 @@ fi # move traefik config to a new place to allow modification config_dst="/traefik.toml" -cp ${config_src} ${config_dst} +cp "$config_src" "$config_dst" # find TOKEN placeholders and replace them with a token value -if [[ ! -z ${token} ]] +if [ -n "$token" ] then - sed -i -e 's/__TOKEN__/'${token}'/g' ${config_dst} + sed -i -e "s/__TOKEN__/$token/g" "$config_dst" fi # call traefik entry point script with a new config diff --git a/edgelet/Cross.toml b/edgelet/Cross.toml index 5e6295fd04d..d41a12ab4f1 100644 --- a/edgelet/Cross.toml +++ b/edgelet/Cross.toml @@ -6,7 +6,7 @@ passthrough = [ ] [target.x86_64-unknown-linux-gnu] -image = "edgebuilds.azurecr.io/debian-build:9.5-1" +image = "azureiotedge/debian-build:9.5-1" [target.armv7-unknown-linux-gnueabihf] image = "azureiotedge/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf:debian_9.5-1"