Summary: | [p10] apt: поддержка создания hasher chroot архитектуры LoongArch на хосте x86_64 | ||
---|---|---|---|
Product: | Branch p10 | Reporter: | Alexey Sheplyakov <asheplyakov> |
Component: | apt | Assignee: | Ivan Zakharyaschev <imz> |
Status: | REOPENED --- | QA Contact: | qa-p10 <qa-p10> |
Severity: | enhancement | ||
Priority: | P5 | CC: | amakeenk, asheplyakov, iv, nir, sin |
Version: | не указана | ||
Hardware: | all | ||
OS: | Linux | ||
Bug Depends on: | 45968 | ||
Bug Blocks: |
Description
Alexey Sheplyakov
2023-04-27 07:11:48 MSK
> Building Dependency Tree... > Package setup has no available version, but exists in the database. > This typically means that the package was mentioned in a dependency and > never uploaded, has been obsoleted or is not available with the contents > of sources.list > E: Package setup has no installation candidate' > > Загвоздка в том, что > > 1) "архитектура" noarch для rpm не имеет какого-то специального значения. > Для каждой поддерживаемой архитектуры в исходниках (pmrc.in, lib/rpmrc.c) гвоздями прибито, что она таки совместима с noarch. > А для loongarch64 такой записи нет. Согласен. > 2) Зачем-то самому apt нужно знать, какие бывают архитектуры (как будто он не может у rpm спросить). На самом деле, как я понимаю, важно только понимание rpm. > Этот список намертво зашит в бинарник (libapt), и архитектуры loongarch64 там пока нет. Нет. (Можно поискать по бинарным пакетам libapt, apt "aarch64" -- этого там нет. Вижу, что зашита другая какая-то таблица -- для biarch/arepo: BaseArch = _config->Find("APT::Architecture"); if (BaseArch == "x86_64" || BaseArch == "ia64" || BaseArch == "ppc64" || BaseArch == "sparc64") MultilibSys = true; else MultilibSys = false; if (MultilibSys) { CompatArch["x86_64"].push_back("i386"); CompatArch["x86_64"].push_back("i486"); CompatArch["x86_64"].push_back("i586"); CompatArch["x86_64"].push_back("i686"); CompatArch["x86_64"].push_back("athlon"); CompatArch["ia64"] = CompatArch["x86_64"]; CompatArch["ppc64"].push_back("ppc"); CompatArch["sparc64"].push_back("sparc"); } .) > Поэтому apt "в упор не видит" noarch пакетов. > Из-за этого невозможно установить filesystem (который зависит от setup), а значит, и glibc-core, а значит, вообще ничего. Думаю, достаточно добавить совместимость noarch и новой архитектуры в rpm. Нет, не работает. (Ответ для Ivan Zakharyaschev на комментарий #1) > > Building Dependency Tree... > > Package setup has no available version, but exists in the database. > > This typically means that the package was mentioned in a dependency and > > never uploaded, has been obsoleted or is not available with the contents > > of sources.list > > E: Package setup has no installation candidate' > > > > Загвоздка в том, что > > > > 1) "архитектура" noarch для rpm не имеет какого-то специального значения. > > Для каждой поддерживаемой архитектуры в исходниках (pmrc.in, lib/rpmrc.c) гвоздями прибито, что она таки совместима с noarch. > > А для loongarch64 такой записи нет. > > Согласен. > > > 2) Зачем-то самому apt нужно знать, какие бывают архитектуры (как будто он не может у rpm спросить). > > На самом деле, как я понимаю, важно только понимание rpm. > > > Этот список намертво зашит в бинарник (libapt), и архитектуры loongarch64 там пока нет. > > Нет. (Можно поискать по бинарным пакетам libapt, apt "aarch64" -- этого там > нет. Вижу, что зашита другая какая-то таблица -- для biarch/arepo: > > BaseArch = _config->Find("APT::Architecture"); > if (BaseArch == "x86_64" || BaseArch == "ia64" || > BaseArch == "ppc64" || BaseArch == "sparc64") > MultilibSys = true; > else > MultilibSys = false; > > if (MultilibSys) { > CompatArch["x86_64"].push_back("i386"); > CompatArch["x86_64"].push_back("i486"); > CompatArch["x86_64"].push_back("i586"); > CompatArch["x86_64"].push_back("i686"); > CompatArch["x86_64"].push_back("athlon"); > CompatArch["ia64"] = CompatArch["x86_64"]; > CompatArch["ppc64"].push_back("ppc"); > CompatArch["sparc64"].push_back("sparc"); > } > > .) > > > Поэтому apt "в упор не видит" noarch пакетов. > > Из-за этого невозможно установить filesystem (который зависит от setup), а значит, и glibc-core, а значит, вообще ничего. > > Думаю, достаточно добавить совместимость noarch и новой архитектуры в rpm. Необходимо, но не достаточно. Уже проверял. Жалоба была на то, что noarch-пакет setup не виден для apt как подходящий для установки на "неизвестную" ему архитектуру loongarch64. Я полагаю, что для noarch-пакетов достаточно, чтобы архитектура была описана в rpm. (А для loongarch64-пакетов ещё в rpm-build.) Для проверки возьмём rs6000: описано в rpm, но не упоминается в apt: $ grep -Fe rs6000 /usr/lib/rpm/rpmrc arch_canon: rs6000: rs6000 8 arch_compat: ppc: rs6000 arch_compat: rs6000: noarch fat $ $ git --no-pager -C /gears/a/apt.git/ grep -Fe rs6000 sisyphus $ (В sources.list специально написал noarch и aarch64 -- несовместимую архитектуру, чтобы быть похожим на ваш случай.) [imz@altair ~]$ hsh --clean ~/hasher2 [imz@altair ~]$ hsh --target=rs6000 --apt-config /home/imz/.hasher/sisyphus-aarch64/apt.conf --initroot-only ~/hasher2 Чтение списков пакетов... Построение дерева зависимостей... Пакет filesystem присутствует в базе данных, но не имеет доступной версии. Как правило это означает, что хотя пакет упоминается в списке зависимостей, он отсутствует в репозитории, был вытеснен, либо в sources.list нет адреса репозитория, содержащего пакет. E: Для пакета filesystem не найдено подходящего кандидата для установки hsh-initroot: Failed to calculate package file list. hsh-initroot: Failed to generate initial package file list. [imz@altair ~]$ /home/imz/hasher2/aptbox/apt-get -q -y -o RPM::PM=external -o Dir::Bin::rpm=hsh-rpmi-print-files install -- setup Чтение списков пакетов... Построение дерева зависимостей... Starting Starting 2 Done Следующие НОВЫЕ пакеты будут установлены: setup 0 будет обновлено, 1 новых установлено, 0 пакетов будет удалено и 0 не будет обновлено. Необходимо получить 0B/31,5kB архивов. После распаковки потребуется дополнительно 45,1kB дискового пространства. Запуск RPM (hsh-rpmi-print-files -U -v -h -r /tmp/.private/imz/hasher2/aptbox --oldpackage)... /ALT/Sisyphus/noarch/RPMS.classic/setup-2.2.17-alt1.noarch.rpm Завершено. [imz@altair ~]$ Проблемы нет. Теперь для сравнения --target=loongarch64: [imz@altair ~]$ hsh --clean ~/hasher2 [imz@altair ~]$ hsh --target=loongarch64 --apt-config /home/imz/.hasher/sisyphus-aarch64/apt.conf --initroot-only ~/hasher2 Чтение списков пакетов... Построение дерева зависимостей... E: Невозможно найти пакет setup hsh-initroot: Failed to calculate package file list. hsh-initroot: Failed to generate initial package file list. [imz@altair ~]$ /home/imz/hasher2/aptbox/apt-get -q -y -o RPM::PM=external -o Dir::Bin::rpm=hsh-rpmi-print-files install -- setup Чтение списков пакетов... Построение дерева зависимостей... E: Невозможно найти пакет setup [imz@altair ~]$ Разница только из-за того, что в rpm не описано loongarch64. [imz@altair ~]$ rpm -q rpm apt hasher rpm-4.13.0.1-alt36.x86_64 apt-0.5.15lorg2-alt83.x86_64 hasher-1.7.1-alt1.noarch [imz@altair ~]$ Не уверен, что на x86_64 такая команда hsh --ini будет до конца успешной при несовместимой архитектуре (например, --target=aarch64), потому что бинарники для aarch64 не будут работать внутри chroot. Но причина будет в другом. Пояснение про то, как я проверял своё утверждение, что нет в бинарных пакетах apt упоминаний всяких разных архитектур: $ rpm -q libapt apt -l |xargs grep -Ee '(rs6000|aarch64)' grep: /var/cache/apt: Это каталог grep: /var/lib/apt: Это каталог grep: /var/lib/apt/lists: Это каталог grep: /var/lib/apt/lists/partial: Это каталог grep: /var/lib/apt/prefetch: Это каталог grep: /etc/apt: Это каталог grep: /etc/apt/apt.conf.d: Это каталог grep: /etc/apt/preferences.d: Это каталог grep: /etc/apt/sources.list.d: Это каталог grep: /etc/apt/vendors.list.d: Это каталог grep: /usr/lib/apt: Это каталог grep: /usr/lib64/apt: Это каталог grep: /usr/lib64/apt/methods: Это каталог grep: /usr/lib64/apt/scripts: Это каталог grep: /usr/lib64/apt/tests: Это каталог grep: /usr/share/doc/apt-0.5.15lorg2: Это каталог grep: /usr/share/doc/apt-0.5.15lorg2/contrib: Это каталог grep: /usr/share/doc/apt-0.5.15lorg2/contrib/allow-duplicated: Это каталог grep: /usr/share/doc/apt-0.5.15lorg2/contrib/apt-files: Это каталог grep: /usr/share/doc/apt-0.5.15lorg2/contrib/apt-groupinstall: Это каталог grep: /usr/share/doc/apt-0.5.15lorg2/contrib/apt-wrapper: Это каталог grep: /usr/share/doc/apt-0.5.15lorg2/contrib/gpg-check: Это каталог grep: /usr/share/doc/apt-0.5.15lorg2/contrib/guess: Это каталог grep: /usr/share/doc/apt-0.5.15lorg2/contrib/install-devel: Это каталог grep: /usr/share/doc/apt-0.5.15lorg2/contrib/list-extras: Это каталог grep: /usr/share/doc/apt-0.5.15lorg2/contrib/list-nodeps: Это каталог grep: /usr/share/doc/apt-0.5.15lorg2/contrib/log: Это каталог grep: /usr/share/doc/apt-0.5.15lorg2/contrib/proxypasswd: Это каталог grep: /usr/share/doc/apt-0.5.15lorg2/examples: Это каталог grep: /var/cache/apt/archives: Это каталог grep: /var/cache/apt/archives/partial: Это каталог $ Нет, не работает Невозможно понять, что не работает, как воспроизвести, какой результат видим и что на самом деле ожидается. (Ответ для Ivan Zakharyaschev на комментарий #8) > Невозможно понять, что не работает, Создание loongarch64 хешерницы на x86_64 хосте с p10, подробности в #45968 > как воспроизвести Вкратце: hsh -v --with-stuff --target=loongarch64 --apt-config=apt-sisyphus-loongarch64.conf --initroot-only ~/hasher подробоности в описании #45968 > какой результат видим Ошибка с сообщением вида: E: Package setup has no installation candidate (полностью в #45968) > и что на самом деле ожидается. Создание loongarch64 хешерницы, по образу и подобию того, как это работает с aarch64 и mipsel: https://www.altlinux.org/Ports/mipsel/BuildHowto (Ответ для Ivan Zakharyaschev на комментарий #6) > Пояснение про то, как я проверял своё утверждение, что нет в бинарных > пакетах apt упоминаний всяких разных архитектур: Это рассуждение, а вот факты. Сборка rpm с поддержкой loongarch64 архитектуры для p10: #319654 TESTED #1 [test-only] p10 rpm.git=4.13.0.1-alt34.0.crs1 Устанавливаем: sudo apt-repo add 319654 && sudo apt-get update && sudo apt-get dist-upgrade Пытаемся создать loongarch64 хешерницу (по инструкции из #45968) hsh -v --with-stuff --target=loongarch64 --apt-config=apt-sisyphus-loongarch64.conf --initroot-only ~/hasher Получаем облом: E: Package setup has no installation candidate А вот сборка rpm с поддержкой loongarch64 и apt, где в archtable добавлен loongarch64: #319402 TESTED #2 [test-only] p10 rpm.git=4.13.0.1-alt34.0.crs1 apt.git=0.5.15lorg2-alt82.0.crs1 Устанавливаем: sudo apt-repo rm 319654 && sudo apt-repo add 319402 && sudo apt-get dist-upgrade Пробуем ещё раз создать хешерницу: hsh -v --with-stuff --target=loongarch64 --apt-config=apt-sisyphus-loongarch64.conf --initroot-only ~/hasher На этот раз создаётся успешно. Я посмотрел патч: https://git.altlinux.org/tasks/319402/gears/200/git?p=git;a=commitdiff;h=93ad26d18905010f16d95b5d1430af8a683cdf1e Там присутствуют и другие архитектуры. Тоже зачем-то добавленные. В чем вопрос добавить ещё одну? (Ответ для Alexey Sheplyakov на комментарий #10) > (Ответ для Ivan Zakharyaschev на комментарий #6) > > Пояснение про то, как я проверял своё утверждение, что нет в бинарных > > пакетах apt упоминаний всяких разных архитектур: > > Это рассуждение, а вот факты. > > Сборка rpm с поддержкой loongarch64 архитектуры для p10: > > #319654 TESTED #1 [test-only] p10 rpm.git=4.13.0.1-alt34.0.crs1 > > Устанавливаем: > > sudo apt-repo add 319654 && sudo apt-get update && sudo apt-get dist-upgrade > > Пытаемся создать loongarch64 хешерницу (по инструкции из #45968) > > hsh -v --with-stuff --target=loongarch64 > --apt-config=apt-sisyphus-loongarch64.conf --initroot-only ~/hasher > > Получаем облом: > > E: Package setup has no installation candidate В это трудно поверить. Посмотрите, пожалуйста, в этот момент, какой версии установлен rpm: rpm -q rpm -i находится ли новая архитектура loongarch64 grep -Fe loongarch64 /usr/lib/rpm/rpmrc и с каким пакетом ошибка, получится ли такого рода команда (навеянная Вашим описаним проблемы): /home/imz/hasher2/aptbox/apt-get -q -y -o RPM::PM=external -o Dir::Bin::rpm=hsh-rpmi-print-files install -- setup (Ответ для Evgeny Sinelnikov на комментарий #11) > Я посмотрел патч: > https://git.altlinux.org/tasks/319402/gears/200/git?p=git;a=commitdiff; > h=93ad26d18905010f16d95b5d1430af8a683cdf1e > > Там присутствуют и другие архитектуры. Тоже зачем-то добавленные. В чем > вопрос добавить ещё одну? Стало понятно, что добавление такой строчки в нынешнем пакете никак не отражается на получающемся бинарном пакете... Значит, случилась проблема и непонимание её причин или невнимательность. Лучше сразу разобраться, чем использовать "плацебо". (Ответ для Alexey Sheplyakov на комментарий #10) > (Ответ для Ivan Zakharyaschev на комментарий #6) > > Пояснение про то, как я проверял своё утверждение, что нет в бинарных > > пакетах apt упоминаний всяких разных архитектур: > > Это рассуждение, а вот факты. Не согласен, что у меня рассуждения, не подтверждённые фактами. Всё было фактически выполнено и процитировано в моём сообщении. (Ответ для Ivan Zakharyaschev на комментарий #13) > (Ответ для Evgeny Sinelnikov на комментарий #11) > > Я посмотрел патч: > > https://git.altlinux.org/tasks/319402/gears/200/git?p=git;a=commitdiff; > > h=93ad26d18905010f16d95b5d1430af8a683cdf1e > > > > Там присутствуют и другие архитектуры. Тоже зачем-то добавленные. В чем > > вопрос добавить ещё одну? > > Стало понятно, что добавление такой строчки в нынешнем пакете никак не > отражается на получающемся бинарном пакете... Ненужность этого патча продемонстрировать себе фактами ещё даже и наверное проще будет, чем то, что apt одинаково хорошо поддерживает loongarch64, rs6000 или aarch64 (что ставилось под сомнение этим bug report-ом, и я посвятил сообщения ответу на это, а не патчу). Поставьте GIT_COMMITTER_DATE в дату коммита из gears/p10, git commit --amend --no-edit коммит с добавлением строчки, и gear -t @ --hasher -- hsh --without-stuff .... Так же отдельно собрать коммит gears/p10 (в сегодняшнем сборочном окружении, а не брать из репозитория). Бинарные пакеты можно сравнить по выводам rpm -qp ~/hasher/repo/x86_64/RPMS.hasher/* --qf='[%{FILEVERIFYFLAGS:vflags} %{FILEMD5S} %{FILEDIGESTS} %{FILESIZES} %{FILENAMES}\n]' Но даже если этот патч ничего не меняет, а человек наблюдает какие-то проблемы, то проблемы-то никуда не денутся, поэтому этот комментарий про патч не мог бы быть причиной закрытия багрепорта, если он реально на чём-то основан. Неизвестно, в чём заключалась проблема. (Ответ для Ivan Zakharyaschev на комментарий #16) > Неизвестно, в чём заключалась проблема. В том, то на x86_64 системе с p10 невозможно создать loongarch64 chroot командой hsh --initroot-only --target=loongarch64 Как не работало, так и не работает (Ответ для Alexey Sheplyakov на комментарий #18) > Как не работало, так и не работает Более подробно описано здесь: https://bugzilla.altlinux.org/show_bug.cgi?id=45969#c10 (Ответ для Alexey Sheplyakov на комментарий #17) > (Ответ для Ivan Zakharyaschev на комментарий #16) > > Неизвестно, в чём заключалась проблема. > > В том, то на x86_64 системе с p10 невозможно создать loongarch64 chroot > командой > hsh --initroot-only --target=loongarch64 Я имел в виду причину с точки зрения устройства программы apt или Вашего окружения -- пока не было понятно почему. Чтобы где-то что-то исправить для этого (на стороне пакета или Вашей), надо понять причину, почему так происходит. И я задавал вопросы и хотел бы, чтобы мы ещё раз во всех подробностях пронаблюдали, что идёт не так. Увидели, как оно в реальности, детальную информацию про систему. https://bugzilla.altlinux.org/show_bug.cgi?id=46106#c3 Для начала предложил посмотреть это: ожалуйста, когда Вы наблюдаете проблему, покажите подробный вывод команды (после попытки создать хешер): /home/imz/hasher2/aptbox/apt-get -q -y -o RPM::PM=external -o Dir::Bin::rpm=hsh-rpmi-print-files install -- setup а также на Вашем хосте в этот момент: rpm -q rpm apt -i (и из какокго коммита собран этот rpm) и grep -Fe loongarch64 /usr/lib/rpm/rpmrc |