rustembedded/cross — не может переопределить образ linux

#docker #rust #cross-compiling

Вопрос:

Я пытаюсь использовать rustembedded/cross для перекрестной компиляции в linux, но мне нужно переопределить образ по умолчанию, так как мне нужен clang, а образ по умолчанию этого не обеспечивает.

Согласно их документации, для этого вы можете предоставить файл настройки и файл конфигурации.

Это привело меня к тому, что у меня был файл docker с:

 FROM rustembedded/cross:x86_64-unknown-linux-gnu

RUN dpkg --add-architecture x86_64 amp;amp; apt-get update amp;amp; 
    apt-get install --assume-yes --no-install-recommends 
    libclang-dev 
    clang
 

и файл конфигурации Cross.toml для:

 [target.x86_64-unknown-linux-gnu]
image = "linux:v2"
 

Затем, когда я создаю этот образ docker build -f ./Dockerfile.x86_64-unknown-linux-gnu -t linux:v2 . , он выдает мне сообщение об ошибке, которое dkpg не может быть найдено. Даже если я удалю эту часть, она скажет мне, что apt-get ее нельзя найти.

Я могу получить доступ к оболочке контейнера, который он расширяет rustembedded/cross:x86_64-unknown-linux-gnu , в docker desktop , и если я запущу dpkg , он покажет мне команду справки. Это сбивает с толку, так как мое изображение простирается от него, но оно не знает об dkpg этом .

Ответ №1:

rustembedded/cross:x86_64-unknown-linux-gnu основан на centos том , а не ubuntu на том , см. его файл Dockerfile:

 FROM ubuntu:16.04

COPY linux-image.sh /
RUN /linux-image.sh x86_64

FROM centos:7
 

В нем используется многоступенчатая сборка, последняя ос есть centos:7 .

Вы также можете подтвердить это с помощью следующего:

 $ docker run --rm -it rustembedded/cross:x86_64-unknown-linux-gnu cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
 

Я не знаю, как у вас получается dpkg с ручным бегом, определенно что-то не так с вашими шагами. Но система пакетов в centos том yum , что вы должны найти те же способы yum , что и для установки пакета.

 $ docker run --rm -it rustembedded/cross:x86_64-unknown-linux-gnu yum version
Loaded plugins: fastestmirror, ovl
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
Installed: 7/x86_64                                                                                              213:96cbf4a3c83d0362309d530d515684dce3f40f63
Group-Installed: yum                                                                                              14:302aa408884b4b89361d6bb1c41ceac40665f80e
version