Alpine dockerfile: не может создавать proc-макросы, не поддерживает эти типы ящиков

Полный нуб ржавчины здесь. Пытаюсь собрать двоичный файл sccache для Linux x64 с Redis: true. Я начинаю с альпийского изображения:

FROM rust:alpine3.10

WORKDIR /root

RUN apk --no-cache add --update curl
RUN curl -L https://github.com/mozilla/sccache/archive/0.2.11.tar.gz \
        -o sccache.tar.gz
RUN tar xf sccache.tar.gz

RUN cd sccache-0.2.11 &&\
    cargo build --features=all --release 

Я получил:

error: cannot produce proc-macro for `derive-error v0.0.3` as the target `x86_64-unknown-linux-musl` does not support these crate types

Отлично работает, если у меня FROM rust, который основан на buster. Я мог бы просто пойти с этим (и я это сделаю), но что здесь происходит? Я так не в своей тарелке, что даже не знаю, какие вопросы задавать.

Связано?: https://github.com/rust-lang/rust/issues/59302< /а>


person DeusXMachina    schedule 17.09.2019    source источник


Ответы (1)


Ящик proc_macro опирается на пару функций, доступных только для динамически связанных исполняемых файлов, и, поскольку musl совсем не это, вы не можете использовать proc_macro на musl.

Проблема, связанная с этим, здесь, и Алекс довольно хорошо описывает некоторые проблемы и компромиссы, которые необходимо сделать, чтобы сделать этот ящик доступным для полностью статических целей: https://github.com/rust-lang/rust/issues/40174

Просто для подтверждения из контейнера:

~# docker run -ti rust:alpine3.10 /bin/sh
/ # rustup show
Default host: x86_64-unknown-linux-musl
rustup home:  /usr/local/rustup
person Sébastien Renauld    schedule 17.09.2019
comment
Использует ли Alpine musl вместо glibc? - person DeusXMachina; 17.09.2019
comment
посмотрите на свое целевое имя - person Sébastien Renauld; 17.09.2019
comment
@DeusXMachina только что проверил контейнер, цель действительно 1.37.0-x86_64-unknown-linux-musl (default). Итак, да, вы используете musl, если используете его. - person Sébastien Renauld; 17.09.2019
comment
Ах да, еще немного исследований выявило тот факт, что, по-видимому, они перешли как минимум 5 лет назад. dev.suckless.narkive.com/jkpX0jsz/ - person DeusXMachina; 18.09.2019
comment
Для справки, alpine — это дистрибутив, ориентированный на безопасность, и статические ссылки — это довольно важная вещь по очевидным причинам. Меня не удивляет, что он основан на муссе по этой причине. - person Sébastien Renauld; 18.09.2019
comment
О, я всецело о статической привязке. Прямо сейчас мы имеем дело с унаследованным проектом, который в основном является динамическим спагеттером. - person DeusXMachina; 18.09.2019