1+ #! /usr/bin/env bash
2+ # -------------------------------------------------------------------------------------------------------------
3+ # Copyright (c) Microsoft Corporation. All rights reserved.
4+ # Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information.
5+ # -------------------------------------------------------------------------------------------------------------
6+ #
7+ # Docs: https://github.com/microsoft/vscode-dev-containers/blob/main/script-library/docs/awscli.md
8+ # Maintainer: The VS Code and Codespaces Teams
9+
10+ set -e
11+
12+ # Clean up
13+ rm -rf /var/lib/apt/lists/*
14+
15+ VERSION=${VERSION:- " latest" }
16+
17+ AWSCLI_GPG_KEY=FB5DB77FD5C118B80511ADA8A6310ACC4672475C
18+ AWSCLI_GPG_KEY_MATERIAL=" -----BEGIN PGP PUBLIC KEY BLOCK-----
19+
20+ mQINBF2Cr7UBEADJZHcgusOJl7ENSyumXh85z0TRV0xJorM2B/JL0kHOyigQluUG
21+ ZMLhENaG0bYatdrKP+3H91lvK050pXwnO/R7fB/FSTouki4ciIx5OuLlnJZIxSzx
22+ PqGl0mkxImLNbGWoi6Lto0LYxqHN2iQtzlwTVmq9733zd3XfcXrZ3+LblHAgEt5G
23+ TfNxEKJ8soPLyWmwDH6HWCnjZ/aIQRBTIQ05uVeEoYxSh6wOai7ss/KveoSNBbYz
24+ gbdzoqI2Y8cgH2nbfgp3DSasaLZEdCSsIsK1u05CinE7k2qZ7KgKAUIcT/cR/grk
25+ C6VwsnDU0OUCideXcQ8WeHutqvgZH1JgKDbznoIzeQHJD238GEu+eKhRHcz8/jeG
26+ 94zkcgJOz3KbZGYMiTh277Fvj9zzvZsbMBCedV1BTg3TqgvdX4bdkhf5cH+7NtWO
27+ lrFj6UwAsGukBTAOxC0l/dnSmZhJ7Z1KmEWilro/gOrjtOxqRQutlIqG22TaqoPG
28+ fYVN+en3Zwbt97kcgZDwqbuykNt64oZWc4XKCa3mprEGC3IbJTBFqglXmZ7l9ywG
29+ EEUJYOlb2XrSuPWml39beWdKM8kzr1OjnlOm6+lpTRCBfo0wa9F8YZRhHPAkwKkX
30+ XDeOGpWRj4ohOx0d2GWkyV5xyN14p2tQOCdOODmz80yUTgRpPVQUtOEhXQARAQAB
31+ tCFBV1MgQ0xJIFRlYW0gPGF3cy1jbGlAYW1hem9uLmNvbT6JAlQEEwEIAD4WIQT7
32+ Xbd/1cEYuAURraimMQrMRnJHXAUCXYKvtQIbAwUJB4TOAAULCQgHAgYVCgkICwIE
33+ FgIDAQIeAQIXgAAKCRCmMQrMRnJHXJIXEAChLUIkg80uPUkGjE3jejvQSA1aWuAM
34+ yzy6fdpdlRUz6M6nmsUhOExjVIvibEJpzK5mhuSZ4lb0vJ2ZUPgCv4zs2nBd7BGJ
35+ MxKiWgBReGvTdqZ0SzyYH4PYCJSE732x/Fw9hfnh1dMTXNcrQXzwOmmFNNegG0Ox
36+ au+VnpcR5Kz3smiTrIwZbRudo1ijhCYPQ7t5CMp9kjC6bObvy1hSIg2xNbMAN/Do
37+ ikebAl36uA6Y/Uczjj3GxZW4ZWeFirMidKbtqvUz2y0UFszobjiBSqZZHCreC34B
38+ hw9bFNpuWC/0SrXgohdsc6vK50pDGdV5kM2qo9tMQ/izsAwTh/d/GzZv8H4lV9eO
39+ tEis+EpR497PaxKKh9tJf0N6Q1YLRHof5xePZtOIlS3gfvsH5hXA3HJ9yIxb8T0H
40+ QYmVr3aIUes20i6meI3fuV36VFupwfrTKaL7VXnsrK2fq5cRvyJLNzXucg0WAjPF
41+ RrAGLzY7nP1xeg1a0aeP+pdsqjqlPJom8OCWc1+6DWbg0jsC74WoesAqgBItODMB
42+ rsal1y/q+bPzpsnWjzHV8+1/EtZmSc8ZUGSJOPkfC7hObnfkl18h+1QtKTjZme4d
43+ H17gsBJr+opwJw/Zio2LMjQBOqlm3K1A4zFTh7wBC7He6KPQea1p2XAMgtvATtNe
44+ YLZATHZKTJyiqA==
45+ =vYOk
46+ -----END PGP PUBLIC KEY BLOCK-----"
47+
48+ if [ " $( id -u) " -ne 0 ]; then
49+ echo -e ' Script must be run as root. Use sudo, su, or add "USER root" to your Dockerfile before running this script.'
50+ exit 1
51+ fi
52+
53+ apt_get_update ()
54+ {
55+ if [ " $( find /var/lib/apt/lists/* | wc -l) " = " 0" ]; then
56+ echo " Running apt-get update..."
57+ apt-get update -y
58+ fi
59+ }
60+
61+ # Checks if packages are installed and installs them if not
62+ check_packages () {
63+ if ! dpkg -s " $@ " > /dev/null 2>&1 ; then
64+ apt_get_update
65+ apt-get -y install --no-install-recommends " $@ "
66+ fi
67+ }
68+
69+ export DEBIAN_FRONTEND=noninteractive
70+
71+ check_packages curl ca-certificates gpg dirmngr unzip bash-completion less
72+
73+ verify_aws_cli_gpg_signature () {
74+ local filePath=$1
75+ local sigFilePath=$2
76+ local awsGpgKeyring=aws-cli-public-key.gpg
77+
78+ echo " ${AWSCLI_GPG_KEY_MATERIAL} " | gpg --dearmor > " ./${awsGpgKeyring} "
79+ gpg --batch --quiet --no-default-keyring --keyring " ./${awsGpgKeyring} " --verify " ${sigFilePath} " " ${filePath} "
80+ local status=$?
81+
82+ rm " ./${awsGpgKeyring} "
83+
84+ return ${status}
85+ }
86+
87+ install () {
88+ local scriptZipFile=awscli.zip
89+ local scriptSigFile=awscli.sig
90+
91+ # See Linux install docs at https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
92+ if [ " ${VERSION} " != " latest" ]; then
93+ local versionStr=-${VERSION}
94+ fi
95+ architecture=$( dpkg --print-architecture)
96+ case " ${architecture} " in
97+ amd64) architectureStr=x86_64 ;;
98+ arm64) architectureStr=aarch64 ;;
99+ * )
100+ echo " AWS CLI does not support machine architecture '$architecture '. Please use an x86-64 or ARM64 machine."
101+ exit 1
102+ esac
103+ local scriptUrl=https://awscli.amazonaws.com/awscli-exe-linux-${architectureStr}${versionStr} .zip
104+ curl " ${scriptUrl} " -o " ${scriptZipFile} "
105+ curl " ${scriptUrl} .sig" -o " ${scriptSigFile} "
106+
107+ verify_aws_cli_gpg_signature " $scriptZipFile " " $scriptSigFile "
108+ if (( $? > 0 )) ; then
109+ echo " Could not verify GPG signature of AWS CLI install script. Make sure you provided a valid version."
110+ exit 1
111+ fi
112+
113+ unzip " ${scriptZipFile} "
114+ ./aws/install
115+
116+ # kubectl bash completion
117+ mkdir -p /etc/bash_completion.d
118+ cp ./scripts/vendor/aws_bash_completer /etc/bash_completion.d/aws
119+
120+ # kubectl zsh completion
121+ if [ -e " ${USERHOME} /.oh-my-zsh" ]; then
122+ mkdir -p " ${USERHOME} /.oh-my-zsh/completions"
123+ cp ./scripts/vendor/aws_zsh_completer.sh " ${USERHOME} /.oh-my-zsh/completions/_aws"
124+ chown -R " ${USERNAME} " " ${USERHOME} /.oh-my-zsh"
125+ fi
126+
127+ rm -rf ./aws
128+ }
129+
130+ echo " (*) Installing AWS CLI..."
131+
132+ install
133+
134+ # Clean up
135+ rm -rf /var/lib/apt/lists/*
136+
137+ echo " Done!"
0 commit comments