#!/usr/bin/env bash ####################################################################################################################### # This script does three fundamental things: # # 1. Add Microsoft's GPG Key has a trusted source of apt packages. # # 2. Add Microsoft's repositories as a source for apt packages. # # 3. Installs the Azure CLI from those repositories. # # Given the nature of this script, it must be executed with elevated privileges, i.e. with `sudo`. # # # # Copied from https://azurecliprod.blob.core.windows.net/$root/deb_install.sh # ####################################################################################################################### set -e if [[ $# -ge 1 && $1 == "-y" ]]; then global_consent=0 else global_consent=1 fi function assert_consent { if [[ $2 -eq 0 ]]; then return 0 fi echo -n "$1 [Y/n] " read consent if [[ ! "${consent}" == "y" && ! "${consent}" == "Y" && ! "${consent}" == "" ]]; then echo "'${consent}'" exit 1 fi } global_consent=0 # Artificially giving global consent after review-feedback. Remove this line to enable interactive mode setup() { assert_consent "Add packages necessary to modify your apt-package sources?" ${global_consent} set -v export DEBIAN_FRONTEND=noninteractive apt-get update apt-get install -y apt-transport-https lsb-release gnupg curl set +v assert_consent "Add Microsoft as a trusted package signer?" ${global_consent} set -v curl -sL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /etc/apt/trusted.gpg.d/microsoft.gpg set +v assert_consent "Add the Azure CLI Repository to your apt sources?" ${global_consent} set -v # Use env var DIST_CODE for the package dist name if provided if [[ -z $DIST_CODE ]]; then CLI_REPO=$(lsb_release -cs) shopt -s nocasematch ERROR_MSG="Unable to find a package for your system. Please check if an existing package in https://packages.microsoft.com/repos/azure-cli/dists/ can be used in your system and install with the dist name: 'curl -sL https://aka.ms/InstallAzureCLIDeb | sudo DIST_CODE= bash'" if [[ ! $(curl -sL https://packages.microsoft.com/repos/azure-cli/dists/) =~ $CLI_REPO ]]; then DIST=$(lsb_release -is) if [[ $DIST =~ "Ubuntu" ]]; then CLI_REPO="jammy" elif [[ $DIST =~ "Debian" ]]; then CLI_REPO="bookworm" elif [[ $DIST =~ "LinuxMint" ]]; then CLI_REPO=$(cat /etc/os-release | grep -Po 'UBUNTU_CODENAME=\K.*') || true if [[ -z $CLI_REPO ]]; then echo $ERROR_MSG exit 1 fi else echo $ERROR_MSG exit 1 fi fi else CLI_REPO=$DIST_CODE if [[ ! $(curl -sL https://packages.microsoft.com/repos/azure-cli/dists/) =~ $CLI_REPO ]]; then echo "Unable to find an azure-cli package with DIST_CODE=$CLI_REPO in https://packages.microsoft.com/repos/azure-cli/dists/." exit 1 fi fi echo "deb [arch=$(dpkg --print-architecture)] https://packages.microsoft.com/repos/azure-cli/ ${CLI_REPO} main" \ > /etc/apt/sources.list.d/azure-cli.list apt-get update set +v assert_consent "Install the Azure CLI?" ${global_consent} apt-get install -y azure-cli } setup # ensure the whole file is downloaded before executing