Понимание процесса apt-get build-dep

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

Перекрестная публикация: нет радости от публикации на форуме asymptote (sourceforge).

В этом сообщении я описываю эксперименты, которые провел, пытаясь выполнить команду apt-get build-dep, а также выполняя команду apt-update. Я хотел бы понять, что вызывает эти ошибки и есть ли способ их исправить (используя извлеченный исходный код, как есть).

В Linux Mint 22 я установил VirtualBox 7 и создал гостевую систему Linux Mint 22 для экспериментов. В гостевой системе я сначала установил TexLive, а затем успешно установил Asymptote 3.00, плагин для LaTeX, из его исходного кода. Для этого мне пришлось сначала установить следующие пакеты:

freeglut, cmake, libx11-dev, bison, flex, libgl1-mesa-dev, libglu1-mesa-dev zlib1g-dev

После этого успешного эксперимента я восстановил снимок VirtualBox, сделанный сразу после установки TexLive и извлечения исходного кода Asymptote 3.00. В качестве второго эксперимента я попытался сократить процесс. Мне посоветовали, что я могу позволить одной установке обработать зависимости с помощью следующих команд:

apt-get build-dep asymptote 
./configure
make all
make install

Основываясь на предварительных исследованиях, я sudo xed обновил \etc\apt\sources.list с
следующей строкой:

deb-src file:/home/steve/Downloads/asymptote-3.00 unstable main contrib 

Затем я перешел в /home/steve/Downloads/asymptote-3.00 и выполнил sudo apt-get build-dep asymptote. Это завершилось неудачей с сообщением:

$ sudo apt-get build-dep asymptote
Reading package lists... Done
E: You must put some 'deb-src' URIs in your sources.list

Чтобы разобраться, я выполнил sudo apt update, что дало

Get:1 file:/home/steve/Downloads/asymptote-3.00 unstable InRelease
Ign:1 file:/home/steve/Downloads/asymptote-3.00 unstable InRelease
Get:2 file:/home/steve/Downloads/asymptote-3.00 unstable Release
Err:2 file:/home/steve/Downloads/asymptote-3.00 unstable Release
File not found - /home/steve/Downloads/asymptote-3.00/dists/unstable/Release (2: No such file or directory)
...

Основываясь на вышеуказанном отчете apt update, я снова попробовал sudo apt-get build-dep asymptote, после замены добавленной строки на:

deb-src file:/home/steve/Downloads/asymptote-3.00

Это дало

$ sudo apt-get build-dep asymptote
E: Malformed entry 8 in list file /etc/apt/sources.list (Suite)
E: The list of sources could not be read.
E: Malformed entry 8 in list file /etc/apt/sources.list (Suite)
E: The list of sources could not be read.

Снова разбираясь, я переисполнял sudo apt update, что дало

$ sudo apt update
E: Malformed entry 8 in list file /etc/apt/sources.list (Suite)
E: The list of sources could not be read.

Исследуя дальше, полный список поддиректорий в каталоге asymptote 3.0 таков:

backports examples patches
base gc prc
build-scripts gl-matrix-2.4.0-pruned tests
cmake-preset-files GUI thirdparty_impl
cmake-scripts libatomic_ops tinyexr
cudareflect LspCpp webgl
cxxtests misc windows
doc

Записи deb-src не должны указывать на исходный код, который вы пытаетесь собрать; они должны указывать на исходные пакеты дистрибутива, который вы используете. Для Mint 22 вам нужен

deb-src http://packages.linuxmint.com wilma main upstream import backport

deb-src http://archive.ubuntu.com/ubuntu noble main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu noble-updates main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu noble-backports main restricted universe multiverse

deb-src http://security.ubuntu.com/ubuntu/ noble-security main restricted universe multiverse

(Для asymptote важна первая строка noble.)

Вероятно, они уже включены (в /etc/apt/sources.list.d/official-source-repositories.list). Если они не включены, включите их, затем apt-get build-dep сможет найти метаданные исходного пакета asymptote и установить его зависимости сборки.

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

Для начала разберемся, что такое процесс apt-get build-dep на системах, базирующихся на Debian, таких как Ubuntu и Linux Mint. Эта команда используется для установки всех необходимых зависимостей для сборки пакета из исходных кодов. Это полезный инструмент, когда вы хотите собрать пакет по определенным причинам, например, для применения собственного патча или тестирования изменений.

Теория

Команда apt-get build-dep работает с метаданными пакетов, предоставленными в репозиториях дистрибутива. Эти метаданные включают в себя информацию о всех необходимыых зависимостях для сборки пакета, которые затем могут быть автоматически установлены. Однако, для корректной работы необходимо, чтобы в списке источников (sources.list) были правильно указаны так называемые deb-src URI – адреса, по которым располагается исходный код официальных пакетов дистрибутива.

Пример

Рассмотрите ситуацию с попыткой запустить apt-get build-dep на Linux Mint 22 для пакета Asymptote. Исходные данные показывают, что была сделана ошибка: вместо указания общедоступных репозиториев Linux Mint и Ubuntu, был указан локальный каталог, содержащий исходники Asymptote:

deb-src file:/home/steve/Downloads/asymptote-3.00

Как видно из сообщения об ошибке: "E: You must put some ‘deb-src’ URIs in your sources.list", система ожидала получить deb-src URI по адресу, содержащему метаданные исходных пакетов, а не просто папку с исходными текстами.

Применение

Для решения проблемы, вместо указания локального источника, необходимо убедиться, что в вашем /etc/apt/sources.list или соответствующих .list файлах из директории /etc/apt/sources.list.d/ у вас включены корректные deb-src записи, соответствующие вашему дистрибутиву Linux Mint (основываясь на вашей версии).

Для Linux Mint, вам потребуется что-то подобное:

deb-src http://packages.linuxmint.com wilma main upstream import backport

deb-src http://archive.ubuntu.com/ubuntu noble main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu noble-updates main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu noble-backports main restricted universe multiverse

deb-src http://security.ubuntu.com/ubuntu/ noble-security main restricted universe multiverse

После добавления или проверки нужных записей выполните команду:

sudo apt update

Это обновит локальные индексы пакетов, чтобы включить метаданные для исходных кодов. После этого команда:

sudo apt-get build-dep asymptote

должна успешно отработать, установив все нужные зависимости для сборки Asymptote.

Административный аспект

Важно помнить, что корректная работа apt с исходными кодами требует не только правильной настройки sources.list, но и актуальности всех пакетов и обновлений. Поэтому регулярное выполнение:

sudo apt update && sudo apt upgrade

поможет избежать множества проблем, связанных с несовместимыми версиями зависимостей.

Заключение

Опыт, описанный в вашем примере, подчеркивает важность точной настройки вашего списка источников, когда вы работаете с исходными кодами или собираетесь вручную модифицировать пакет. Всегда двойной проверяйте, что используемые вами репозитории правильны и содержат нужные вам данные. Такая внимательность позволит вам избежать большинства ошибок и облегчит работу с системой.

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

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