Bug 45969 - [p10] apt: поддержка создания hasher chroot архитектуры LoongArch на хосте x86_64
Summary: [p10] apt: поддержка создания hasher chroot архитектуры LoongArch на хосте x8...
Status: REOPENED
Alias: None
Product: Branch p10
Classification: Unclassified
Component: apt (show other bugs)
Version: не указана
Hardware: all Linux
: P5 enhancement
Assignee: Ivan Zakharyaschev
QA Contact: qa-p10@altlinux.org
URL:
Keywords:
Depends on: 45968
Blocks:
  Show dependency tree
 
Reported: 2023-04-27 07:11 MSK by Alexey Sheplyakov
Modified: 2023-07-28 15:33 MSK (History)
5 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Alexey Sheplyakov 2023-04-27 07:11:48 MSK
См. #45968
Comment 1 Ivan Zakharyaschev 2023-04-27 20:28:13 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.
Comment 2 Alexey Sheplyakov 2023-04-28 08:48:53 MSK
Нет, не работает.
Comment 3 Alexey Sheplyakov 2023-04-28 08:53:02 MSK
(Ответ для 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.

Необходимо, но не достаточно. Уже проверял.
Comment 4 Ivan Zakharyaschev 2023-04-28 15:19:36 MSK
Жалоба была на то, что 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 ~]$
Comment 5 Ivan Zakharyaschev 2023-04-28 15:22:05 MSK
Не уверен, что на x86_64 такая команда hsh --ini будет до конца успешной при несовместимой архитектуре (например, --target=aarch64), потому что бинарники для aarch64 не будут работать внутри chroot. Но причина будет в другом.
Comment 6 Ivan Zakharyaschev 2023-04-28 16:41:37 MSK
Пояснение про то, как я проверял своё утверждение, что нет в бинарных пакетах 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: Это каталог
$
Comment 7 Alexey Sheplyakov 2023-05-01 09:31:50 MSK
Нет, не работает
Comment 8 Ivan Zakharyaschev 2023-05-01 15:47:32 MSK
Невозможно понять, что не работает, как воспроизвести, какой результат видим и что на самом деле ожидается.
Comment 9 Alexey Sheplyakov 2023-05-08 15:32:10 MSK
(Ответ для 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
Comment 10 Alexey Sheplyakov 2023-05-08 15:39:58 MSK
(Ответ для 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


На этот раз создаётся успешно.
Comment 11 Evgeny Sinelnikov 2023-05-08 17:46:11 MSK
Я посмотрел патч:
https://git.altlinux.org/tasks/319402/gears/200/git?p=git;a=commitdiff;h=93ad26d18905010f16d95b5d1430af8a683cdf1e

Там присутствуют и другие архитектуры. Тоже зачем-то добавленные. В чем вопрос добавить ещё одну?
Comment 12 Ivan Zakharyaschev 2023-05-09 02:13:32 MSK
(Ответ для 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
Comment 13 Ivan Zakharyaschev 2023-05-09 02:17:07 MSK
(Ответ для Evgeny Sinelnikov на комментарий #11)
> Я посмотрел патч:
> https://git.altlinux.org/tasks/319402/gears/200/git?p=git;a=commitdiff;
> h=93ad26d18905010f16d95b5d1430af8a683cdf1e
> 
> Там присутствуют и другие архитектуры. Тоже зачем-то добавленные. В чем
> вопрос добавить ещё одну?

Стало понятно, что добавление такой строчки в нынешнем пакете никак не отражается на получающемся бинарном пакете...

Значит, случилась проблема и непонимание её причин или невнимательность. Лучше сразу разобраться, чем использовать "плацебо".
Comment 14 Ivan Zakharyaschev 2023-05-09 02:42:42 MSK
(Ответ для Alexey Sheplyakov на комментарий #10)
> (Ответ для Ivan Zakharyaschev на комментарий #6)
> > Пояснение про то, как я проверял своё утверждение, что нет в бинарных
> > пакетах apt упоминаний всяких разных архитектур:
> 
> Это рассуждение, а вот факты.

Не согласен, что у меня рассуждения, не подтверждённые фактами. Всё было фактически выполнено и процитировано в моём сообщении.
Comment 15 Ivan Zakharyaschev 2023-05-09 05:18:16 MSK
(Ответ для 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]'

Но даже если этот патч ничего не меняет, а человек наблюдает какие-то проблемы, то проблемы-то никуда не денутся, поэтому этот комментарий про патч не мог бы быть причиной закрытия багрепорта, если он реально на чём-то основан.
Comment 16 Ivan Zakharyaschev 2023-07-27 21:00:34 MSK
Неизвестно, в чём заключалась проблема.
Comment 17 Alexey Sheplyakov 2023-07-28 08:14:48 MSK
(Ответ для Ivan Zakharyaschev на комментарий #16)
> Неизвестно, в чём заключалась проблема.

В том, то на x86_64 системе с p10 невозможно создать loongarch64 chroot командой
hsh --initroot-only --target=loongarch64
Comment 18 Alexey Sheplyakov 2023-07-28 08:15:12 MSK
Как не работало, так и не работает
Comment 19 Alexey Sheplyakov 2023-07-28 08:16:56 MSK
(Ответ для Alexey Sheplyakov на комментарий #18)
> Как не работало, так и не работает

Более подробно описано здесь: https://bugzilla.altlinux.org/show_bug.cgi?id=45969#c10
Comment 20 Ivan Zakharyaschev 2023-07-28 15:33:06 MSK
(Ответ для 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