Bug 45968

Summary: [p10] rpm: поддержка создания hasher chroot архитектуры LoongArch
Product: Branch p10 Reporter: Alexey Sheplyakov <asheplyakov>
Component: rpmAssignee: placeholder <placeholder>
Status: NEW --- QA Contact: qa-p10 <qa-p10>
Severity: enhancement    
Priority: P5 CC: amakeenk, antohami, asheplyakov, imz, iv, nir, sin
Version: не указана   
Hardware: all   
OS: Linux   
Bug Depends on:    
Bug Blocks: 45802, 45969    

Description Alexey Sheplyakov 2023-04-27 07:09:48 MSK
Пытаюсь создать chroot для LoongArch архитектуры.
У меня есть директория с кучей rpm пакетов для этой архитектуры (~/work/bootstrap/RPM/RPMS/RPMS.loongarch64), и конфигурационные файлы следующего вида:

$ cat apt-sisyphus-loongarch64.conf
Dir::Etc::main "/dev/null";
Dir::Etc::parts "/var/empty";
Dir::Etc::SourceParts "/var/empty";
Dir::Etc::sourcelist "/home/asheplyakov/aptconf/sources-sisyphus-loongarch64.list";
Dir::Cache "/tmp/.private/asheplyakov/loongarch64/sisyphus/aptcache";
Dir::State::Lists "/tmp/.private/asheplyakov/loongarch64/sisyphus/aptlists";

$ cat sources-sisyphus-loongarch64.list
rpm [alt] http://ftp.altlinux.ru/pub/distributions/ALTLinux Sisyphus/noarch classic
rpm-dir copy:///home/asheplyakov/work/bootstrap/RPM RPMS loongarch64

Я запускаю следующую команду:

$ hsh -v --with-stuff --target=loongarch64 --apt-config=apt-sisyphus-loongarch64.conf --initroot-only ~/hasher

Получаю:

hsh-mkchroot: Changed working directory to `/home/asheplyakov/hasher/chroot'.
mkdir: created directory '.host'
mkdir: created directory '.in'
mkdir: created directory 'dev'
changed group of '.' from asheplyakov to 1001
changed group of 'dev' from asheplyakov to 1001
mkdir: created directory '.out'
changed group of '.out' from asheplyakov to 1002
hsh-mkchroot: Created directory tree.
'/bin/ash.static' -> '/home/asheplyakov/hasher/chroot/.host/sh'
'/usr/bin/find.static' -> '/home/asheplyakov/hasher/chroot/.host/find'
'/usr/bin/cpio.static' -> '/home/asheplyakov/hasher/chroot/.host/cpio'
hsh-mkchroot: Installed .host programs.
hsh-initroot: changed working directory to `/home/asheplyakov/hasher'
removed directory '/home/asheplyakov/hasher/cache/chroot/list.new'
removed directory '/home/asheplyakov/hasher/cache/chroot/package.new'
mkdir: created directory '/home/asheplyakov/hasher/cache/chroot/list.new'
mkdir: created directory '/home/asheplyakov/hasher/cache/chroot/package.new'
Reading Package Lists...
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
hsh-initroot: Failed to calculate package file list.
hsh-initroot: Failed to generate initial package file list.

При более подробном рассмотрении оказывается, что облом возникает при выполнении


+++ /home/asheplyakov/hasher/aptbox/apt-get -q -y -o RPM::PM=external -o Dir::Bin::rpm=hsh-rpmi-print-files install -- setup filesystem rpm 'fakeroot>=0:0.7.3'
+++ tee -a /dev/stderr
Reading Package Lists...
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
++ out='Reading Package Lists...
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 спросить).
   Этот список намертво зашит в бинарник (libapt), и архитектуры loongarch64 там пока нет.

Поэтому apt "в упор не видит" noarch пакетов.
Из-за этого невозможно установить filesystem (который зависит от setup), а значит, и glibc-core, а значит, вообще ничего.
Comment 1 Антон Мидюков 2023-04-27 09:40:43 MSK
Alexey Sheplyakov, вопросы:

1. почему ошибка на p10, а не на Сизифе? Необходимо внести изменения в rpm и apt в Сизифе, а уже потом бекпортировать в p10.

2. почему нет отдельной ошибки на apt?

3. неужели loongarch64 будет сразу интегрирована в основную сборочницу, а не будет жить отдельным портом? У репозитория для loongarch64, пока это отдельный порт, должен быть свой noarch (или его может не быть вовсе).
Comment 2 Ivan A. Melnikov 2023-04-27 10:07:21 MSK
(In reply to Антон Мидюков from comment #1)
> 3. неужели loongarch64 будет сразу интегрирована в основную сборочницу, а не
> будет жить отдельным портом? У репозитория для loongarch64, пока это
> отдельный порт, должен быть свой noarch (или его может не быть вовсе).

Репозиторий да, архитектура нет. С точки зрения rpm все noarch одинаковые.

К тому же, использование общего noarch является стандартной практикой на ранних этапах портирования, до подъёма отдельного girar.
Comment 3 Alexey Sheplyakov 2023-04-27 10:29:41 MSK
(Ответ для Антон Мидюков на комментарий #1)
> Alexey Sheplyakov, вопросы:
> 
> 1. почему ошибка на p10, а не на Сизифе?

Потому что я хочу создавать loongarch64 хешерницы на своём x86_64 компьютере с p10.
Как это сейчас возможно с aarch64, armh, mipsel:

hsh --initroot-only --target=aarch64 --apt-config=apt-sisyphus-aarch64.conf

> 2. почему нет отдельной ошибки на apt?

Есть, #45969


> Необходимо внести изменения в rpm и apt в Сизифе, а уже потом бекпортировать в p10.

В сизифе требуется **полноценная** поддержка LoongArch (а не только создание хешерниц).
На эту тему есть #45769, #45763, и патчи, и даже с ними уже собраны rpm и rpm-build:

#318152 EPERM #2 sisyphus rpm-build.git=4.0.4.187-alt1
#318149 EPERM #2 sisyphus rpm.git=4.13.0.1-alt37


> 3. неужели loongarch64 будет сразу интегрирована в основную сборочницу, а не
> будет жить отдельным портом?

Ваш вопрос не имеет отношения к обсуждаемой задаче.
Речь идёт о том, чтобы создать на x86_64 машине хешерницу из loongarch64 пакетов.
А не о том, где, как, кто, из чего собирает loongarch64 пакеты.

> У репозитория для loongarch64, пока это отдельный порт, должен быть свой noarch 

Это никак не поможет создать на x86_64 машине хешерницу из loongarch64 пакетов.

> (или его может не быть вовсе).

Это слишком усложняет и без того непростую первоначальную сборку (пересобрать ведро питономодулей, чтобы собрать meson, чтобы собрать glib, а по дороге выяснится, что для сборки питономодулей уже нужен glib).
Comment 4 Alexey Sheplyakov 2023-04-27 11:41:59 MSK
#319402 TESTED #2 [test-only] p10 rpm.git=4.13.0.1-alt34.0.crs1 apt.git=0.5.15lorg2-alt82.0.crs1
Comment 5 Ivan Zakharyaschev 2023-05-09 02:48:59 MSK
В этом rpm случился конфликт arch_canon-номера с нашим e2k :(

23

Похоже, это -- то число, которое давно хотели застолбить, но опоздали уже.

commit 99057c94d617206f3c947107569769e076db525f
Author: zhangwenlong <zhangwenlong@loongson.cn>
Date:   Wed Jan 19 00:16:54 2022 +0800

    Add support for loongarch64
    
    * add support for loongarch64
    
    Signed-off-by: Zhang Wenlong <zhangwenlong@loongson.cn>
    
    (cherry-picked from commit 7a014dae736f9c7a7c75f63deaa4dbbb9ae0249c
     https://github.com/rpm-software-management/rpm)

diff --git a/rpmrc.in b/rpmrc.in
index 1d3491c46..456413deb 100644
--- a/rpmrc.in
+++ b/rpmrc.in
@@ -117,6 +117,8 @@ optflags: aarch64 -O2 -g
 
 optflags: riscv64 -O2 -g
 
+optflags: loongarch64 -O2 -g
+
 #############################################################
 # Architecture colors
 
@@ -180,6 +182,9 @@ archcolor: aarch64 2
 
 archcolor: riscv64 2
 
+
+archcolor: loongarch64 2
+
 #############################################################
 # Canonical arch names and numbers
 
@@ -294,6 +299,8 @@ arch_canon:	e2k8c2: e2k8c2	23
 arch_canon:	e2k12c: e2k16c	23
 arch_canon:	e2k2c3: e2k2c3	23
 
+arch_canon:	loongarch64:	loongarch64	23
+
 #############################################################
 # Canonical OS names and numbers
 
@@ -438,6 +445,8 @@ buildarchtranslate: aarch64: aarch64
 buildarchtranslate: riscv: riscv64
 buildarchtranslate: riscv64: riscv64
 
+buildarchtranslate: loongarch64: loongarch64
+
 #############################################################
 # Architecture compatibility
 
@@ -591,6 +600,8 @@ os_compat: bsdi4.0: bsdi
 
 os_compat: Darwin: MacOSX
 
+arch_compat: loongarch64: noarch
+
 buildarch_compat: ia64: noarch
 
 buildarch_compat: aarch64: noarch
@@ -705,5 +716,8 @@ buildarch_compat: sh3: noarch
 buildarch_compat: sh4: noarch
 buildarch_compat: sh4a: sh4
 
+
+buildarch_compat: loongarch64: noarch
+
 # \endverbatim
 #*/