Aws-cli: [v2] وزع ثنائيات لـ alpine / musl libc

تم إنشاؤها على ٢٠ نوفمبر ٢٠١٩  ·  26تعليقات  ·  مصدر: aws/aws-cli

docker run -it --rm docker:latest sh
wget "https://d1vvhvl2y92vvt.cloudfront.net/awscli-exe-linux-x86_64.zip" -O "awscliv2.zip"
# curl not installed
unzip awscliv2.zip
./aws/install
# sudo not install

أخطاء في:

/ # ./aws/install
./aws/install: line 78: /aws/dist/aws2: not found
You can now run: /usr/local/bin/aws2 --version
/ # aws2
sh: aws2: not found
confusing-error v2

التعليق الأكثر فائدة

السبب في أن صورة appropenjdk تعمل لأنها تتضمن مكتبات glibc المفقودة. يعتمد Alphine linux على "musl glibc" ، وهو بديل خفيف الوزن للغطاء الكامل. لا تعمل ثنائيات aws cli v2 مع musl ، فهم بحاجة إلى المزيد من المكتبات للعمل.

بدلاً من استخدام صورة Java ، يمكنك أيضًا استخدام Dockerfile أدناه كمثال على كيفية تشغيل AWS CLI v2 على Alpine Linux:

FROM alpine:3.11

ENV GLIBC_VER=2.31-r0

# install glibc compatibility for alpine
RUN apk --no-cache add \
        binutils \
        curl \
    && curl -sL https://alpine-pkgs.sgerrand.com/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/*

سيؤدي ما سبق إلى تنزيل مكتبات glibc وتنزيل AWS CLI v2 وتثبيته وإزالة بعض الأشياء التي ربما لا نحتاج إليها ، مثل الإكمال التلقائي. حجم الصورة الناتجة حوالي 100 ميغا بايت

ال 26 كومينتر

حاولت تصحيح المشكلة ، ولم أتمكن من معرفة سبب فشلها. يبدو لي أن نص التثبيت غير مستقر بعض الشيء. حاولت إضافة تسمية v2 أيضًا.

لن تعمل الثنائيات التي ننشرها على صور عامل الإرساء بناءً على alpine لأننا نجمعها مقابل glibc. sh: aws2: not found هو ما يحدث عندما تحاول تنفيذ هذا الثنائي. إذا جربته على صورة مثل ubuntu:latest فسيعمل المثبت.

بالإضافة إلى ذلك ، لا أعتقد أننا سنصدر يومًا ثنائيًا متوافقًا مع جبال الألب كما نفعل مع نظام لينكس الثنائي العام. أعتقد أننا سنكون أكثر ميلًا إلى مجرد إطلاق صورة عامل إرساء تأتي مع نظامنا الثنائي المبني على جبال الألب.

شكرا لإجابتك. هل من الممكن توثيق ذلك هنا https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html ضمن "المتطلبات الأساسية لنظام Linux" ، أو جعل الخطأ أكثر سهولة في الاستخدام في جبال الألب حالة الصورة؟

سوف نتأكد من تحديث هذا في دليل المستخدم. أحب أيضًا فكرة إنشاء رسالة خطأ أكثر سهولة في الاستخدام لهذه الحالة.

joguSD المشكله ، جبال الألب هي المعيار لصور عامل ميناء. خاصة مع أنظمة البناء / ci التي ترغب في أتمتة ولا ترغب في تنزيل صور عامل إرساء كبيرة جدًا باستمرار.

يمكن استخدام صورة رسمية لرسو السفن في جبال الألب في بناء متعدد المراحل لنسخ الملف الثنائي إلى صورة عامل إرساء أخرى.

chadgrant - هل يمكنك إعطاء مثال من فضلك على ملف الرصيف متعدد المراحل الخاص بك؟

@ BarakBD-Globality ليس لدي واحدة ولكن إذا تم إنشاء صورة aws-alpine ، يمكنك فقط القيام بما يلي:

FROM aws_alpine_image:latest as aws
FROM alpine:latest
COPY --from=aws /usr/local/bin/binary /usr/local/bin/binary

من المؤسف أنهم لا يدعمون جبال الألب. إنها صورة قياسية.

بالإضافة إلى ذلك ، لا أعتقد أننا سنصدر يومًا ثنائيًا متوافقًا مع جبال الألب كما نفعل مع نظام لينكس الثنائي العام. أعتقد أننا سنكون أكثر ميلًا إلى مجرد إطلاق صورة عامل إرساء تأتي مع نظامنا الثنائي المبني على جبال الألب.

joguSD هل كان هناك أي نقاش أو اقتراح حول هذا؟ يبدو أنه أمر كبير جدًا بالنظر إلى انتشار جبال الألب. يستخدم الأشخاص مثلي aws في cicd والأتمتة الأخرى ، لذلك إذا لم يكن متاحًا للصور المستندة إلى جبال الألب ، فإن استخدام الإصدار 2 ليس حتى خيارًا بدون عمل كبير! شكرا.

أيضا لا يمكن التثبيت في busybox

ومن المثير للاهتمام ، إذا كنت تستخدم هذا كصورة أساسية ، فسيتم تثبيت AWS cli ويعمل بشكل صحيح.

من تبنيدوبينجدك / أوبنجدك 11: جبال الألب

تمكنت من القيام بذلك باستخدام Dockerfile التالي

FROM adoptopenjdk/openjdk11:alpine

RUN apk add --no-cache \
        ca-certificates \
        unzip \
        curl \
        groff \
        less  \
        bash  \
        openssh-client

WORKDIR /home
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" \
    && unzip awscliv2.zip \
    && ./aws/install \
    && rm awscliv2.zip \
    && rm -R aws

السبب في أن صورة appropenjdk تعمل لأنها تتضمن مكتبات glibc المفقودة. يعتمد Alphine linux على "musl glibc" ، وهو بديل خفيف الوزن للغطاء الكامل. لا تعمل ثنائيات aws cli v2 مع musl ، فهم بحاجة إلى المزيد من المكتبات للعمل.

بدلاً من استخدام صورة Java ، يمكنك أيضًا استخدام Dockerfile أدناه كمثال على كيفية تشغيل AWS CLI v2 على Alpine Linux:

FROM alpine:3.11

ENV GLIBC_VER=2.31-r0

# install glibc compatibility for alpine
RUN apk --no-cache add \
        binutils \
        curl \
    && curl -sL https://alpine-pkgs.sgerrand.com/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/*

سيؤدي ما سبق إلى تنزيل مكتبات glibc وتنزيل AWS CLI v2 وتثبيته وإزالة بعض الأشياء التي ربما لا نحتاج إليها ، مثل الإكمال التلقائي. حجم الصورة الناتجة حوالي 100 ميغا بايت

إذن ما هو أقصر طريق للحصول على aws ecr get-login-password … | docker login … داخل حاوية عامل إرساء قيد التشغيل؟ (مما يعني: docker:dind

أرغب في تجنب إنشاء صورة docker:stable مع دعم docker:dind . على الأقل يمكنني بفضل https://github.com/aws/aws-cli/issues/4685#issuecomment -615872019 الحل. شكرا على ذلك!

bentolor نظرًا لأن docker:dind يستخدم أيضًا جبال الألب ، أظن أن كل ما عليك فعله هو تغيير السطر الأول من Dockerfile المذكور أعلاه. بدلاً من FROM alpine:3.11 يجب عليك استخدام FROM docker:dind . هذا يعني أنك تبني صورتك الخاصة ، على الرغم من ....

شكرا blagerweij يعمل بشكل جيد حقا

شكرًا أيضًا blagerweij : لقد فهمت نبات القراص وأنشأت صورة عاملة مخصصة لرسو السفن عن طريق نسخ الحل ولصقه: https://hub.docker.com/r/bentolor/docker-dind-awscli

bentolor لقد لاحظت في الريبو الخاص بك أن Dockerfile الخاص بك يستخدم FROM docker:stable بدلاً من FROM docker:dind . اعتقدت أن بيت القصيد هو إنشاء صورة لـ Docker في Docker بدعم AWS؟

blagerweij انظر الصورة أدناه من صورة Docker الرسمية للتوضيح.

الاستخدام المعتاد هو:

  1. يبدأ واحد (أو ci الخاص بك) مثيل docker:dind ثم
  2. بدء مثيل docker:stable منفصل ومرتبط بالحاوية docker:dind
  3. تبدأ في تنفيذ أوامر docker داخل الحاوية الثانية التي تعيد توجيه comamnds عبر اتصال المقبس إلى برنامج Docker daemon الذي يعمل داخل الحاوية docker:dind .

لذلك: في حين أنه من الصحيح أن مثيل docker:dind ينفذ في النهاية أوامر Docker الخاصة بك ، فإن واجهة CLI الخاصة بك تعيش فعليًا في مثيل docker:stable . وهذا هو المكان الذي يحتاج فيه أي شخص إلى تسجيل الدخول إلى AWS ؛-)

على الأقل هذا هو نمط الاستخدام الذي أعرفه (على Gitlab CI لإنشاء صور عامل docker:dind ؟

Usage of <a href="docker:stable">docker:stable</a> vs. <a href="docker:didn">docker:didn</a>

يمكن للمرء استخدام صورة جبال الألب مع glibc من https://hub.docker.com/r/frolvlad/alpine-glibc/
وقم بتثبيت aws cli باتباع الخطوات من توثيق aws. عملت من أجلي.

blagerweij لقد استخدمت البرنامج النصي الخاص بك مع عامل الإرساء . AWS CLI يعمل بشكل جيد. لقد حصلت للتو على خطأ في البناء:
/usr/glibc-compat/sbin/ldconfig: /usr/glibc-compat/lib/ld-linux-x86-64.so.2 is not a symbolic link

amiram نعم ، لقد تلقيت هذه الرسالة أيضًا ، وهذا تحذير يمكنك ببساطة تجاهله: إنه يتوقع https://github.com/envoyproxy/envoy/issues/9078#issuecomment -576837432

هل يمكن لشخص ما إعادة تسمية هذه المشكلة إلى شيء مثل: "توزيع الثنائيات على جبال الألب / المسلسل"؟

تضمين التغريدة

نعم ، أنا سعيد بـ "توزيع ثنائيات لـ alpine / musl libc". دعني أرى إن كان هناك حل

أحتاج فقط إلى aws s3 cp لمشروع شغوف ، لذلك قمت للتو بتثبيت awscli V1 مع نقطة:

FROM alpine:3.12
RUN pip install awscli        
RUN aws s3 ..

السبب في أن صورة appropenjdk تعمل لأنها تتضمن مكتبات glibc المفقودة. يعتمد Alphine linux على "musl glibc" ، وهو بديل خفيف الوزن للغطاء الكامل. لا تعمل ثنائيات aws cli v2 مع musl ، فهم بحاجة إلى المزيد من المكتبات للعمل.

بدلاً من استخدام صورة Java ، يمكنك أيضًا استخدام Dockerfile أدناه كمثال على كيفية تشغيل AWS CLI v2 على Alpine Linux:

قص

سيؤدي ما سبق إلى تنزيل مكتبات glibc وتنزيل AWS CLI v2 وتثبيته وإزالة بعض الأشياء التي ربما لا نحتاج إليها ، مثل الإكمال التلقائي. حجم الصورة الناتجة حوالي 100 ميغا بايت

سيؤدي هذا التعديل إلى جلب أحدث إصدار تلقائيًا إذا كنت لا تريد ترميز إصدار glibc:

FROM alpine

# install glibc compatibility for alpine
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://alpine-pkgs.sgerrand.com/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/*

يمكنك أيضًا استخدام Dockerfile أدناه كمثال على كيفية تشغيل AWS CLI v2 على Alpine Linux:

يعمل Dockerfile / script المقدم ولكنه يعرض هذا الخطأ ، والذي لا يبدو أنه يمنعه من العمل:

aws/install: line 78: /aws/dist/aws: not found

الغريب أن تشغيل apk add mandoc قبل aws/install يتجنب عرض هذا الخطأ ، وحذف تلك الحزمة بعد التثبيت ليس له تأثير سيء. لا يبدو أن العبوات العشوائية الأخرى لها هذا التأثير الوقائي.

أي أفكار؟

مطلوب PS apk add less لـ aws help للعمل بشكل صحيح (سوف يشكو من فقدان الحزمة groff وإلا).

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات