diff --git a/images/linux/scripts/installers/golang.sh b/images/linux/scripts/installers/golang.sh new file mode 100644 index 000000000000..7b9b50648eb8 --- /dev/null +++ b/images/linux/scripts/installers/golang.sh @@ -0,0 +1,59 @@ +#!/bin/bash -e +################################################################################ +## File: golang +## Desc: Installs golang (manaul) +################################################################################ + +source $HELPER_SCRIPTS/os.sh +source $HELPER_SCRIPTS/install.sh +source $HELPER_SCRIPTS/etc-environment.sh + +# Get version from toolset +PACKAGE_TAR_NAMES=$(curl 'https://go.dev/dl/?mode=json&include=all'|jq -r .[].files[].filename) +TOOLSET_VERSIONS=$(get_toolset_value '.toolcache[] | select(.name | contains("go")) | .versions[]') +PLATFORM_NAME=$(get_toolset_value '.toolcache[] | select(.name | contains("go")) | .platform') + +# Install golang +GOLANG_PATH="$AGENT_TOOLSDIRECTORY/go" + +echo "Check if Golang hostedtoolcache folder exist..." +if [ ! -d $GOLANG_PATH ]; then + mkdir -p $GOLANG_PATH +fi + +if [[ $ARCH == "arm64" ]]; then + arch="arm64" +else + arch="x64" +fi + +for TOOLSET_VERSION in ${TOOLSET_VERSIONS[@]}; do + PACKAGE_TAR_NAME=$(echo "$PACKAGE_TAR_NAMES" | grep "^go${TOOLSET_VERSION}.${PLATFORM_NAME}-${ARCH}.tar.gz$" | sort -V | tail -1) + GOLANG_VERSION=$(echo "$PACKAGE_TAR_NAME" | cut -d'.' -f 1-3| cut -d'o' -f 2) + GOLANG_VERSION_PATH="$GOLANG_PATH/$GOLANG_VERSION/$arch" + + echo "Create Golang $GOLANG_VERSION directory..." + mkdir -p $GOLANG_VERSION_PATH + + echo "Downloading tar archive $PACKAGE_TAR_NAME" + DOWNLOAD_URL="https://go.dev/dl/${PACKAGE_TAR_NAME}" + download_with_retries $DOWNLOAD_URL "/tmp" $PACKAGE_TAR_NAME + + echo "Expand '$PACKAGE_TAR_NAME' to the '$GOLANG_VERSION_PATH' folder" + tar xf "/tmp/$PACKAGE_TAR_NAME" -C $GOLANG_VERSION_PATH --strip-components=1 + + COMPLETE_FILE_PATH="$GOLANG_VERSION_PATH/../$arch.complete" + if [ ! -f $COMPLETE_FILE_PATH ]; then + echo "Create complete file" + touch $COMPLETE_FILE_PATH + fi + + if [[ "$TOOLSET_VERSION" == "$(get_toolset_value '.toolcache[] | select(.name | contains("go")) | .default')" ]]; then + echo "Create symlink for default toolset path" + ln -svf $GOLANG_VERSION_PATH/bin/go /usr/bin/go + fi + + setEtcEnvironmentVariable "GOROOT_$(echo $GOLANG_VERSION| cut -d'.' -f1)_$(echo $GOLANG_VERSION| cut -d'.' -f2)_${arch^^}" $GOLANG_VERSION_PATH +done + +/usr/bin/go version diff --git a/images/linux/ubuntu2204.pkr.hcl b/images/linux/ubuntu2204.pkr.hcl index aa2489dd2122..ab2debd56253 100644 --- a/images/linux/ubuntu2204.pkr.hcl +++ b/images/linux/ubuntu2204.pkr.hcl @@ -190,17 +190,23 @@ source "qemu" "custom_image" { http_directory = "cloud-init" #iso_url = "https://releases.ubuntu.com/22.04.1/${var.ubuntu_iso_file}" #iso_checksum = "file:https://releases.ubuntu.com/22.04.1/SHA256SUMS" - iso_url = "https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img" + iso_url = "https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-arm64.img" iso_checksum = "file:https://cloud-images.ubuntu.com/jammy/current/SHA256SUMS" disk_image = true + qemu_binary = "qemu-system-aarch64" qemuargs = [ + ["-pflash", "/usr/share/AAVMF/AAVMF_CODE.fd"], + ["-pflash", "flash1.img"], + ["-cpu", "host"], ["-smbios", "type=1,serial=ds=nocloud-net;instance-id=packer;seedfrom=http://{{ .HTTPIP }}:{{ .HTTPPort }}/", - ] + ], ] + machine_type = "virt" + ssh_password = "ubuntu" ssh_username = "ubuntu" ssh_timeout = "10m" # can be slow on CI @@ -329,60 +335,61 @@ build { scripts = [ "${path.root}/scripts/installers/action-archive-cache.sh", "${path.root}/scripts/installers/apt-common.sh", - "${path.root}/scripts/installers/azcopy.sh", - "${path.root}/scripts/installers/azure-cli.sh", - "${path.root}/scripts/installers/azure-devops-cli.sh", - "${path.root}/scripts/installers/bicep.sh", - "${path.root}/scripts/installers/aliyun-cli.sh", - "${path.root}/scripts/installers/apache.sh", - "${path.root}/scripts/installers/aws.sh", + # "${path.root}/scripts/installers/azcopy.sh", + # "${path.root}/scripts/installers/azure-cli.sh", + # "${path.root}/scripts/installers/azure-devops-cli.sh", + # "${path.root}/scripts/installers/bicep.sh", + # "${path.root}/scripts/installers/aliyun-cli.sh", + # "${path.root}/scripts/installers/apache.sh", + # "${path.root}/scripts/installers/aws.sh", "${path.root}/scripts/installers/clang.sh", - "${path.root}/scripts/installers/swift.sh", + # "${path.root}/scripts/installers/swift.sh", "${path.root}/scripts/installers/cmake.sh", - "${path.root}/scripts/installers/codeql-bundle.sh", + # "${path.root}/scripts/installers/codeql-bundle.sh", "${path.root}/scripts/installers/containers.sh", "${path.root}/scripts/installers/dotnetcore-sdk.sh", "${path.root}/scripts/installers/firefox.sh", - "${path.root}/scripts/installers/microsoft-edge.sh", + # UNSUPPORTED "${path.root}/scripts/installers/microsoft-edge.sh", "${path.root}/scripts/installers/gcc.sh", "${path.root}/scripts/installers/gfortran.sh", "${path.root}/scripts/installers/git.sh", "${path.root}/scripts/installers/github-cli.sh", - "${path.root}/scripts/installers/google-chrome.sh", - "${path.root}/scripts/installers/google-cloud-cli.sh", - "${path.root}/scripts/installers/haskell.sh", - "${path.root}/scripts/installers/heroku.sh", + "${path.root}/scripts/installers/golang.sh", + # UNSUPPORTED "${path.root}/scripts/installers/google-chrome.sh", + # "${path.root}/scripts/installers/google-cloud-cli.sh", + # "${path.root}/scripts/installers/haskell.sh", + # "${path.root}/scripts/installers/heroku.sh", "${path.root}/scripts/installers/java-tools.sh", "${path.root}/scripts/installers/kubernetes-tools.sh", - "${path.root}/scripts/installers/oc.sh", - "${path.root}/scripts/installers/leiningen.sh", - "${path.root}/scripts/installers/miniconda.sh", + # "${path.root}/scripts/installers/oc.sh", + # "${path.root}/scripts/installers/leiningen.sh", + # "${path.root}/scripts/installers/miniconda.sh", "${path.root}/scripts/installers/mono.sh", - "${path.root}/scripts/installers/kotlin.sh", + # "${path.root}/scripts/installers/kotlin.sh", "${path.root}/scripts/installers/mysql.sh", - "${path.root}/scripts/installers/mssql-cmd-tools.sh", - "${path.root}/scripts/installers/sqlpackage.sh", + # "${path.root}/scripts/installers/mssql-cmd-tools.sh", + # "${path.root}/scripts/installers/sqlpackage.sh", "${path.root}/scripts/installers/nginx.sh", "${path.root}/scripts/installers/nvm.sh", "${path.root}/scripts/installers/nodejs.sh", "${path.root}/scripts/installers/bazel.sh", - "${path.root}/scripts/installers/oras-cli.sh", + # "${path.root}/scripts/installers/oras-cli.sh", "${path.root}/scripts/installers/php.sh", "${path.root}/scripts/installers/postgresql.sh", - "${path.root}/scripts/installers/pulumi.sh", + # "${path.root}/scripts/installers/pulumi.sh", "${path.root}/scripts/installers/ruby.sh", - "${path.root}/scripts/installers/r.sh", + # "${path.root}/scripts/installers/r.sh", "${path.root}/scripts/installers/rust.sh", - "${path.root}/scripts/installers/julia.sh", - "${path.root}/scripts/installers/sbt.sh", + # APT DEPENDENCY BROKEN "${path.root}/scripts/installers/julia.sh", + # "${path.root}/scripts/installers/sbt.sh", "${path.root}/scripts/installers/selenium.sh", "${path.root}/scripts/installers/terraform.sh", "${path.root}/scripts/installers/packer.sh", - "${path.root}/scripts/installers/vcpkg.sh", - "${path.root}/scripts/installers/dpkg-config.sh", + # "${path.root}/scripts/installers/vcpkg.sh", + # "${path.root}/scripts/installers/dpkg-config.sh", "${path.root}/scripts/installers/yq.sh", - "${path.root}/scripts/installers/android.sh", - "${path.root}/scripts/installers/pypy.sh", + # "${path.root}/scripts/installers/android.sh", + # "${path.root}/scripts/installers/pypy.sh", "${path.root}/scripts/installers/python.sh", "${path.root}/scripts/installers/zstd.sh" ] @@ -394,11 +401,12 @@ build { scripts = ["${path.root}/scripts/installers/docker-compose.sh", "${path.root}/scripts/installers/docker.sh"] } - provisioner "shell" { - environment_vars = ["HELPER_SCRIPTS=${var.helper_script_folder}", "INSTALLER_SCRIPT_FOLDER=${var.installer_script_folder}"] - execute_command = "sudo sh -c '{{ .Vars }} pwsh -f {{ .Path }}'" - scripts = ["${path.root}/scripts/installers/Install-Toolset.ps1", "${path.root}/scripts/installers/Configure-Toolset.ps1"] - } + # UNSUPPORTED + # provisioner "shell" { + # environment_vars = ["HELPER_SCRIPTS=${var.helper_script_folder}", "INSTALLER_SCRIPT_FOLDER=${var.installer_script_folder}"] + # execute_command = "sudo sh -c '{{ .Vars }} pwsh -f {{ .Path }}'" + # scripts = ["${path.root}/scripts/installers/Install-Toolset.ps1", "${path.root}/scripts/installers/Configure-Toolset.ps1"] + # } provisioner "shell" { environment_vars = ["HELPER_SCRIPTS=${var.helper_script_folder}", "INSTALLER_SCRIPT_FOLDER=${var.installer_script_folder}"] @@ -406,11 +414,12 @@ build { scripts = ["${path.root}/scripts/installers/pipx-packages.sh"] } - provisioner "shell" { - environment_vars = ["HELPER_SCRIPTS=${var.helper_script_folder}", "DEBIAN_FRONTEND=noninteractive", "INSTALLER_SCRIPT_FOLDER=${var.installer_script_folder}"] - execute_command = "/bin/sh -c '{{ .Vars }} {{ .Path }}'" - scripts = ["${path.root}/scripts/installers/homebrew.sh"] - } + # UNSUPPORTED + # provisioner "shell" { + # environment_vars = ["HELPER_SCRIPTS=${var.helper_script_folder}", "DEBIAN_FRONTEND=noninteractive", "INSTALLER_SCRIPT_FOLDER=${var.installer_script_folder}"] + # execute_command = "/bin/sh -c '{{ .Vars }} {{ .Path }}'" + # scripts = ["${path.root}/scripts/installers/homebrew.sh"] + # } provisioner "shell" { execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'"