Как использовать apt-get для загрузки многоплатформенной библиотеки?

Вопрос или проблема

Можно ли заставить apt-get скачать бинарник библиотеки, которую я хочу установить, для нескольких архитектур?

Или apt-get не является подходящим инструментом для этого?

Ответ @Tanasis верен, я обновил его для 2021 года (Ubuntu 20.04 LTS) для arm64 и armhf.

  1. Добавьте желаемые архитектуры следующим образом:

    sudo dpkg --add-architecture armhf

    sudo dpkg --add-architecture arm64

  2. Создайте новый .list файл в /etc/apt/sources.list.d:

    sudo touch /etc/apt/sources.list.d/arm-cross-compile-sources.list

  3. Добавьте стандартные источники в этот список с архитектурами (armhf, arm64), предварительно указав их:

    deb [arch=armhf,arm64] http://ports.ubuntu.com/ focal main restricted
    deb [arch=armhf,arm64] http://ports.ubuntu.com/ focal-updates main restricted
    deb [arch=armhf,arm64] http://ports.ubuntu.com/ focal universe
    deb [arch=armhf,arm64] http://ports.ubuntu.com/ focal-updates universe
    deb [arch=armhf,arm64] http://ports.ubuntu.com/ focal multiverse
    deb [arch=armhf,arm64] http://ports.ubuntu.com/ focal-updates multiverse
    deb [arch=armhf,arm64] http://ports.ubuntu.com/ focal-backports main restricted universe multiverse
    
  4. Обновите /etc/apt/sources.list, чтобы включить вашу стандартную архитектуру (если она еще не добавлена), иначе apt попытается использовать вновь добавленные архитектуры в этих источниках, что может вызвать ошибки, как это произошло у меня. Добавьте [arch=amd64] для каждой строки в /etc/apt/sources.list следующим образом:

    deb [arch=amd64] http://us.archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse

  5. Выполните sudo apt update и убедитесь, что нет ошибок

  6. Теперь установка пакета с новыми архитектурами должна пройти успешно:

    sudo apt install libasound2-dev:arm64

Сначала включите многопоточность архитектур

dpkg --add-architecture <arch>

Теперь настройте apt-сources для добавления новых репозиториев новой архитектуры (если это необходимо)

теперь обновите ваш sources.list

sudo apt-get update

Теперь вы можете устанавливать пакеты с несколькими архитектурами через apt-get, но вам нужно указать, какую архитектуру вы хотите скачать

apt-get install package:architecture

пример:

apt-get install gedit:i386

Для arm64 я делаю следующее в /etc/apt/sources.list:

Пример для Ubuntu 16.04 (xenial):

Я отмечаю все текущие (по умолчанию) репозитории как [arch=<current_os_arch>], например:

deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ xenial main restricted

И добавил следующее:

deb [arch=arm64] http://ports.ubuntu.com/ xenial main restricted

deb [arch=arm64] http://ports.ubuntu.com/ xenial-updates main restricted

deb [arch=arm64] http://ports.ubuntu.com/ xenial universe
deb [arch=arm64] http://ports.ubuntu.com/ xenial-updates universe

deb [arch=arm64] http://ports.ubuntu.com/ xenial multiverse
deb [arch=arm64] http://ports.ubuntu.com/ xenial-updates multiverse

deb [arch=arm64] http://ports.ubuntu.com/ xenial-backports main restricted universe multiverse

Не уверен, является ли это правильным решением, но, по крайней мере, кажется, что оно работает.

Примечание: Не забудьте добавить чужую архитектуру: dpkg --add-architecture arm64

Хорошо, это мне тоже нужно для моего образа docker. Странно, что для amd64 это работает, но не для arm64

Начало образа docker

FROM --platform=$TARGETPLATFORM mcr.microsoft.com/dotnet/aspnet:8.0-jammy AS base
COPY --from=mcr.microsoft.com/dotnet/sdk:6.0 /usr/share/dotnet/shared /usr/share/dotnet/shared

ENV DOTNET_NUGET_SIGNATURE_VERIFICATION=false
# Установите TARGETPLATFORM для совместимости с несколькими платформами
ARG TARGETARCH
ARG TARGETPLATFORM
ARG BUILD_CONFIGURATION
WORKDIR /app
EXPOSE 80
EXPOSE 443

RUN echo "dpkg --add-architecture $TARGETARCH"
RUN apt-get update
RUN apt install -y libc6:$TARGETARCH
RUN apt install -y libicu-dev:$TARGETARCH
RUN apt install -y libfontconfig1:$TARGETARCH

Ответ или решение

Как использовать apt-get для загрузки многоплатформенной библиотеки

Использование утилиты apt-get для установки библиотек с поддержкой нескольких архитектур (multi-architecture) в Ubuntu подразумевает выполнение нескольких важных шагов. В этом руководстве мы подробно разберем, как правильно настроить систему для этой задачи.

Шаг 1: Включение поддержки нескольких архитектур

Для начала необходимо добавить нужные архитектуры в систему. Используйте команду dpkg следующим образом:

sudo dpkg --add-architecture armhf
sudo dpkg --add-architecture arm64

Эти команды позволят вашей системе узнавать о доступности архитектур ARM.

Шаг 2: Настройка APT-репозиториев

Далее, вам нужно добавить источники APT, которые содержат пакеты для добавленных архитектур. Создайте новый файл списка репозиториев в каталоге /etc/apt/sources.list.d/:

sudo touch /etc/apt/sources.list.d/arm-cross-compile-sources.list

Теперь добавьте в этот файл следующие строки (они предназначены для Ubuntu 20.04 LTS, замените focal на нужную версию, если используете другую):

deb [arch=armhf,arm64] http://ports.ubuntu.com/ focal main restricted
deb [arch=armhf,arm64] http://ports.ubuntu.com/ focal-updates main restricted
deb [arch=armhf,arm64] http://ports.ubuntu.com/ focal universe
deb [arch=armhf,arm64] http://ports.ubuntu.com/ focal-updates universe
deb [arch=armhf,arm64] http://ports.ubuntu.com/ focal multiverse
deb [arch=armhf,arm64] http://ports.ubuntu.com/ focal-updates multiverse
deb [arch=armhf,arm64] http://ports.ubuntu.com/ focal-backports main restricted universe multiverse

Также важно убедиться, что у вас правильно указаны источники для вашей основной архитектуры (например, amd64). Если в файле /etc/apt/sources.list не указана архитектура, используйте следующий формат:

deb [arch=amd64] http://us.archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse

Шаг 3: Обновление списка пакетов

После того как вы добавили новые архитектуры и источники, обновите список доступных пакетов:

sudo apt update

Убедитесь, что в процессе обновления нет ошибок.

Шаг 4: Установка многоплатформенных пакетов

Теперь вы можете установить пакеты, поддерживающие несколько архитектур. Для этого укажите нужную архитектуру при установке. Например, чтобы установить библиотеку libasound2-dev для архитектуры arm64, выполните следующее:

sudo apt install libasound2-dev:arm64

Примечание о Docker

Если вы работаете с образами Docker, убедитесь, что команды для добавления архитектуры и установки пакетов выполняются в правильной последовательности. Вот пример команды, которая может быть использована в Dockerfile:

FROM --platform=$TARGETPLATFORM mcr.microsoft.com/dotnet/aspnet:8.0-jammy AS base

RUN dpkg --add-architecture $TARGETARCH
RUN apt-get update && \
    apt install -y libc6:$TARGETARCH libicu-dev:$TARGETARCH libfontconfig1:$TARGETARCH

Заключение

Использование apt-get для загрузки многоплатформенных библиотек требует выполнения нескольких шагов по настройке системы, включая добавление новых архитектур и соответствующих репозиториев. Следуя данным инструкциям, вы сможете успешно устанавливать необходимые пакеты для любых архитектур, что расширит ваши возможности разработки и тестирования на различных платформах.

Оцените материал
Добавить комментарий

Капча загружается...