Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to install aws-cli on alpine?

Tags:

aws-cli

alpine

I'm installing aws-cli on a docker swarm manager node running alpine (Linux 0317632a4ad9 4.9.59-moby #1 SMP Thu Mar 1 20:54:00 UTC 2018 x86_64 Linux). The aws-cli package for Alpine is currently listed in the community repo on the edge branch (1.18.55.r0). I modified /etc/apk/repositories to target this repo.

The install blew up looking for py3-urllib3, but I got around that and finally got a clean install with no errors, as below:

  ~ $ sudo apk add aws-cli@edge-comm     fetch http://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz     ERROR: unsatisfiable constraints:       py3-urllib3-1.25.9-r0:         masked in: @edge         satisfies: py3-botocore-1.16.12-r0[py3-urllib3<1.26]      ~ $ sudo apk add py3-urllib3@edge aws-cli@edge-comm     (1/23) Installing groff (1.22.3-r1)     (2/23) Installing py3-six (1.10.0-r6)     (3/23) Installing py3-dateutil (2.6.0-r1)     (4/23) Installing libpng (1.6.37-r0)     (5/23) Installing freetype (2.7.1-r2)     (6/23) Installing libjpeg-turbo (1.5.3-r2)     (7/23) Installing lcms2 (2.8-r1)     (8/23) Installing openjpeg (2.3.0-r2)     (9/23) Installing tiff (4.0.10-r0)     (10/23) Installing libwebp (0.6.0-r0)     (11/23) Installing py3-pillow (4.1.0-r0)     (12/23) Installing py3-roman (2.0.0-r2)     (13/23) Installing py3-docutils (0.13.1-r0)     (14/23) Installing py3-jmespath@edge-comm (0.9.5-r0)     (15/23) Installing py3-urllib3@edge (1.25.9-r0)     (16/23) Installing py3-botocore@edge-comm (1.16.12-r0)     (17/23) Installing py3-s3transfer@edge-comm (0.3.3-r0)     (18/23) Installing py3-colorama@edge-comm (0.4.3-r0)     (19/23) Installing yaml (0.1.7-r0)     (20/23) Installing py3-yaml (3.12-r1)     (21/23) Installing py3-asn1 (0.2.3-r0)     (22/23) Installing py3-rsa (3.4.2-r1)     (23/23) Installing aws-cli@edge-comm (1.18.55-r0)     Executing busybox-1.26.2-r11.trigger     OK: 576 MiB in 81 packages 

The binary is created at /usr/bin/aws, but crashes looking for an awscli module:

~ $ aws Traceback (most recent call last):   File "/usr/bin/aws", line 19, in <module>     import awscli.clidriver ModuleNotFoundError: No module named 'awscli' 

Thanks!

like image 261
HieroB Avatar asked May 20 '20 17:05

HieroB


People also ask

How install AWS CLI on Alpine Linux?

1-alpine . RUN apk add --no-cache \ python3 \ py3-pip \ && pip3 install --upgrade pip \ && pip3 install --no-cache-dir \ awscli \ && rm -rf /var/cache/apk/* RUN aws --version # Just to make sure its installed alright # Should output aws-cli/1.18.


2 Answers

For anybody who googles this, I've been using the image node:12.16.1-alpine.

RUN apk add --no-cache \         python3 \         py3-pip \     && pip3 install --upgrade pip \     && pip3 install --no-cache-dir \         awscli \     && rm -rf /var/cache/apk/*  RUN aws --version   # Just to make sure its installed alright  # Should output aws-cli/1.18.69 etc. 

Worked fine for me.

NOTE: apk --no-cache and pip3 --no-cache-dir are used to keep the Docker image lean by not retaining package cache.

like image 98
Rose Avatar answered Sep 23 '22 09:09

Rose


to expand and update upon @Rose (4317383) 's answer ( and get awscli version 2 ):

the regular pip3 packet ( pip3 install awscliv2 && awscliv2 -i ) presents the following errors due to musl / non-glibc alpine implementations:

Error relocating /root/.awscliv2/binaries/aws: __strcat_chk: symbol not found Error relocating /root/.awscliv2/binaries/aws: __snprintf_chk: symbol not found Error relocating /root/.awscliv2/binaries/aws: __vfprintf_chk: symbol not found Error relocating /root/.awscliv2/binaries/aws: __strdup: symbol not found Error relocating /root/.awscliv2/binaries/aws: __stpcpy_chk: symbol not found Error relocating /root/.awscliv2/binaries/aws: __vsnprintf_chk: symbol not found Error relocating /root/.awscliv2/binaries/aws: __strncpy_chk: symbol not found Error relocating /root/.awscliv2/binaries/aws: __strcpy_chk: symbol not found Error relocating /root/.awscliv2/binaries/aws: __fprintf_chk: symbol not found Error relocating /root/.awscliv2/binaries/aws: __strncat_chk: symbol not found 

in doubt GLIBC is necessary , but if you are willing to invest ~100MB of space or you really need v2 , the following snippet would help

RUN apk --no-cache add \     binutils \     curl \     && GLIBC_VER=$(curl -s https://api.github.com/repos/sgerrand/alpine-pkg-glibc/releases/latest | grep tag_name | cut -d : -f 2,3 | tr -d \",' ') \     && curl -sL https://raw.githubusercontent.com/sgerrand/alpine-pkg-glibc/master/sgerrand.rsa.pub -o /etc/apk/keys/sgerrand.rsa.pub \     && curl -sLO https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VER}/glibc-${GLIBC_VER}.apk \     && curl -sLO https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VER}/glibc-bin-${GLIBC_VER}.apk \     && apk add --no-cache \     glibc-${GLIBC_VER}.apk \     glibc-bin-${GLIBC_VER}.apk \     && curl -sL https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -o awscliv2.zip \     && unzip awscliv2.zip \     && aws/install \     && rm -rf \     awscliv2.zip \     aws \     /usr/local/aws-cli/v2/*/dist/aws_completer \     /usr/local/aws-cli/v2/*/dist/awscli/data/ac.index \     /usr/local/aws-cli/v2/*/dist/awscli/examples \     && apk --no-cache del \     binutils \     curl \     && rm glibc-${GLIBC_VER}.apk \     && rm glibc-bin-${GLIBC_VER}.apk \     && rm -rf /var/cache/apk/*  RUN awsv2 --version   # Just to make sure its installed alright 

if your scripts do not break with awscliv2 named as awscli, you might add :

RUN ln -s $(which awscliv2) /usr/bin/aws 
like image 42
Bash Stack Avatar answered Sep 20 '22 09:09

Bash Stack