Bug 52631

Summary: неправильное формирование initcpio
Product: Sisyphus Reporter: zvn_mail <zvn_mail>
Component: mkimage-profilesAssignee: Антон Мидюков <antohami>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: antohami, glebfm, ldv, legion, mike, placeholder
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
initcpio.gz
none
build.log.gz none

Description zvn_mail 2025-01-06 08:07:07 MSK
Created attachment 17503 [details]
initcpio.gz

cd ~
git clone git://git.altlinux.org/gears/m/mkimage-profiles.git -b p11
mkdir -p ~/out ~/tmp
make -C ~/mkimage-profiles BUILDDIR=~/tmp DEBUG=1 CLEAN=0 regular-jeos-systemd.iso

 в build.log наблюдаю:

[00:00:33] Packing image to archive ...
Unrecognized dir format './usr/bin/chmod  0444 0 0' line 2067
make[2]: *** [/usr/share/make-initrd/mk/genimage.mk:24: pack] Error 255
make[1]: *** [/usr/share/make-initrd/mk/main.mk:67: process-config] Error 2
make: *** [/usr/share/make-initrd/mk/main.mk:56: all] Error 1
+ fatal 'make-initrd failed'
+ echo '** error: make-initrd failed'
+ exit 1
** error: make-initrd failed
mki-scripts: /home/myrepo/tmp/stage1/scripts.d/80-make-initrd-for-bootchain: unable to run script.
mki-invalidate-cache: has started executing for 'mki'.
make[3]: *** [/usr/share/mkimage/targets.mk:41: run-scripts] Error 1
make[2]: *** [/usr/share/mkimage/targets.mk:190: stage1/] Error 2
Command exited with non-zero status 2
8:19.56 39%CPU 160188k

 загадочно, в /home/myrepo/tmp/stage1/.work/chroot/tmp/make-initrd.D1vg3eBsA/6.6.66-6.6-alt1.initrd/initcpio так и есть: ...
 slink ./usr/bin/bash bash5 0777 0 0
 slink ./usr/bin/chmod  0444 0 0
 slink ./usr/bin/mountpoint busybox 0777 0 0
 ...

внимательно изучил /usr/share/make-initrd/tools/pack-image,
 find -O2 . -mindepth 1 \
 ...
 -o \( -type l -a -printf 'slink %p %l %#m 0 0\n' \) \

man find %l     Object of symbolic link (empty string if file is not a symbolic link).

и дальше проверяю, какие имеются исполняемые find

find / -name find -ls
2491771   1252 -rwxr-xr-x   1 myrepo   myrepo    1280264 Apr 25  2022 /home/myrepo/tmp/stage1/.work/chroot/.host/find
2511269      0 lrwxrwxrwx   1 myrepo_a myrepo_a        7 Jan  6 08:05 /home/myrepo/tmp/stage1/.work/chroot/tmp/make-initrd.D1vg3eBsA/6.6.66-6.6-alt1.initrd/img/usr/bin/find -> busybox
2498129      0 lrwxrwxrwx   1 myrepo_a myrepo_a        7 Dec 23 21:50 /home/myrepo/tmp/stage1/.work/chroot/usr/lib64/initrd/bin/find -> busybox
2493106    204 -rwxr-xr-x   1 myrepo_a myrepo_a   208256 Apr 25  2022 /home/myrepo/tmp/stage1/.work/chroot/usr/bin/find
971735      0 lrwxrwxrwx   1 root     root            7 Dec 23 21:50 /usr/lib64/initrd/bin/find -> busybox
655444    204 -rwxr-xr-x   1 root     root       208256 Apr 25  2022 /usr/bin/find
560963      4 -rw-r--r--   1 root     root         3897 Nov 25 02:20 /usr/share/bash-completion/completions/find

т.е., возможно, во время работы /usr/share/make-initrd/tools/pack-image find не тот срабатывает?
Comment 1 zvn_mail 2025-01-06 08:07:42 MSK
Created attachment 17504 [details]
build.log.gz
Comment 2 Антон Мидюков 2025-01-06 08:24:33 MSK
Проявляется только при сборке не на tmpfs. Возможно, мантейнер make-initrd может что-то подсказать, поэтому пока перевешиваю на make-initrd.
Comment 3 Alexey Gladkov 2025-01-06 13:16:38 MSK
(In reply to zvn_mail from comment #0)
> Created attachment 17503 [details]
> т.е., возможно, во время работы /usr/share/make-initrd/tools/pack-image find
> не тот срабатывает?

Если только какой-то вообще не тот find. Есть find в busybox, который используется в make-initrd, но этот find не умеет -printf вообще.

(In reply to Антон Мидюков from comment #2)
> Проявляется только при сборке не на tmpfs. Возможно, мантейнер make-initrd
> может что-то подсказать, поэтому пока перевешиваю на make-initrd.

Пока не могу воспроизвести. Я попробовал на ext4 собрать и собралось без ошибок.

Какая файловая система используется для TEMPDIR ?
make-initrd запускается от рута (из лога видно, что все проверки выключены) ?
Comment 4 Антон Мидюков 2025-01-06 13:24:05 MSK
(Ответ для Alexey Gladkov на комментарий #3)
> (In reply to zvn_mail from comment #0)
> (In reply to Антон Мидюков from comment #2)
> > Проявляется только при сборке не на tmpfs. Возможно, мантейнер make-initrd
> > может что-то подсказать, поэтому пока перевешиваю на make-initrd.
> 
> Пока не могу воспроизвести. Я попробовал на ext4 собрать и собралось без
> ошибок.
> 
> Какая файловая система используется для TEMPDIR ?
> make-initrd запускается от рута (из лога видно, что все проверки выключены) ?

В mkimage не получается воспроизвести? У меня и на ext4 проблема возникает.
Comment 5 Антон Мидюков 2025-01-06 13:25:15 MSK
Ещё одно условие, /home должен быть отдельным разделом.
Comment 6 Alexey Gladkov 2025-01-06 13:39:43 MSK
(In reply to Антон Мидюков from comment #4)
> В mkimage не получается воспроизвести? У меня и на ext4 проблема возникает.

Я пробовал в живой системе.

(In reply to Антон Мидюков from comment #5)
> Ещё одно условие, /home должен быть отдельным разделом.

То есть если /home не отдельный, то проблема не воспроизводится ?

Чудеса какие-то.
Comment 7 Alexey Gladkov 2025-01-06 13:41:34 MSK
Антон, можешь в pack-image перед find вставить `ls -la ./usr/bin` ? Может там действительно busybox симлинк кривой сделал.
Comment 8 Alexey Gladkov 2025-01-06 16:36:19 MSK
Меня смущает строка ошибки:

Unrecognized dir format './usr/bin/chmod  0444 0 0' 

Это симклинк. Именно его не удалось прочитать.
Cимлинк с правами 0444.
Comment 9 zvn_mail 2025-01-06 18:30:50 MSK
да, у меня /home - отдельный раздел ext4, в нём же и /home/myrepo/{out,tmp}^

# stat /home/{.,myrepo/{tmp,out}}|grep -E "File:|Device"
  File: /home/.
Device: 8,11    Inode: 2           Links: 6
  File: /home/myrepo/tmp
Device: 8,11    Inode: 2490832     Links: 15
  File: /home/myrepo/out
Device: 8,11    Inode: 2490831     Links: 2

все chmod:
# find / -name chmod -ls
  2511246      0 lrwxrwxrwx   1 myrepo_a myrepo_a        7 Jan  6 08:05 /home/myrepo/tmp/stage1/.work/chroot/tmp/make-initrd.D1vg3eBsA/6.6.66-6.6-alt1.initrd/img/usr/bin/chmod -> busybox
  2498106      0 lrwxrwxrwx   1 myrepo_a myrepo_a        7 Dec 23 21:50 /home/myrepo/tmp/stage1/.work/chroot/usr/lib64/initrd/bin/chmod -> busybox
  2492672     56 -rwxr-xr-x   1 myrepo_a myrepo_a    55712 Nov  6  2023 /home/myrepo/tmp/stage1/.work/chroot/usr/bin/chmod
   682942      4 -rw-r--r--   1 root     root          112 Aug 23 21:22 /usr/lib/mc/shell/chmod
   931164      0 lrwxrwxrwx   1 root     root            7 Dec 23 21:50 /usr/lib64/initrd/bin/chmod -> busybox
   701944     56 -rwxr-xr-x   1 root     root        55712 Nov  6  2023 /usr/bin/chmod
   545970      4 -rw-r--r--   1 root     root          920 Nov 25 02:20 /usr/share/bash-completion/completions/chmod

т.е. никаких lr--r--r-- нет.

м.б. это что-то временно образовавшееся при исполнении скриптов/сценариев, а на выходе уже удаленное?

это вот всё, что с такими параметрами есть:
# find / -type l -a -printf 'slink %p %l %#m 0 0\n' 2>&1|grep "0444 0 0"
slink /sys/kernel/security/evm integrity/evm/evm 0444 0 0
slink /sys/kernel/security/ima integrity/ima 0444 0 0
Comment 10 zvn_mail 2025-01-06 18:37:57 MSK
(Ответ для Alexey Gladkov на комментарий #8)
> Меня смущает строка ошибки:
> 
> Unrecognized dir format './usr/bin/chmod  0444 0 0' 
> 
> Это симклинк. Именно его не удалось прочитать.
> Cимлинк с правами 0444.

м.б. при обработке внутри chroot этот симлинк указывает куда-то туда, куда из chroot доступа нет, т.е. в каталог выше chroot-а?
Comment 11 Alexey Gladkov 2025-01-06 18:42:54 MSK
Я подозреваю, что где-то в чруте выставили какой-нибудь umask или маска была указана при монтировании.
Comment 12 Alexey Gladkov 2025-01-06 18:44:09 MSK
(In reply to zvn_mail from comment #10)
> м.б. при обработке внутри chroot этот симлинк указывает куда-то туда, куда
> из chroot доступа нет, т.е. в каталог выше chroot-а?

Нет. find не идёт по ссылке. Он просто читает symlink.
Comment 13 Антон Мидюков 2025-01-06 19:51:13 MSK
Проблема возникает не всегда. Но если возникла, то место для сборки проклято. Пока не перезагрузишься, в нём будет возникать эта ошибка. Можно создать новый каталог рядом, и там всё соберётся. Вот такая эмпирика.
Когда не указываем BUILDDIR, каждый раз создаётся новый уникальный каталог для сборки, и, соответственно, коллизия такая возникнуть не может в принципе.
Comment 14 Alexey Gladkov 2025-01-06 20:24:20 MSK
а я-то уже начал писать патч, чтобы в принципе не копировать большинство файлов во временную директорию %)
Comment 15 Антон Мидюков 2025-01-06 22:03:19 MSK
zvn_mail, попробуйте обновить ядро до 6.12. Будет ли проблема воспроизводиться?
Comment 16 zvn_mail 2025-01-07 08:39:12 MSK
(Ответ для Антон Мидюков на комментарий #15)
> zvn_mail, попробуйте обновить ядро до 6.12. Будет ли проблема
> воспроизводиться?

НЕ воспроизводится:

$ uname -a
Linux ziv 6.12.6-6.12-alt1 #1 SMP PREEMPT_DYNAMIC Tue Dec 24 11:38:45 UTC 2024 x86_64 GNU/Linux
$ git clone git://git.altlinux.org/gears/m/mkimage-profiles.git -b p11
Cloning into 'mkimage-profiles'...
remote: Counting objects: 43369, done.
remote: Total 43369 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (43369/43369), 4.84 MiB | 1.87 MiB/s, done.
Resolving deltas: 100% (28906/28906), done.
$ mkdir -p ~/out ~/tmp
$ make -C ~/mkimage-profiles BUILDDIR=~/tmp DEBUG=1 CLEAN=0 regular-jeos-systemd.iso
make: Entering directory '/home/myrepo/mkimage-profiles'
** goal: regular-jeos-systemd.iso
** BRANCH/ARCH: p11/x86_64
08:25:23 initializing BUILDDIR: build/
08:25:23 preparing distro config: build/distcfg.mk
08:28:58 starting image build: tail -f build/build.log
09:34:54 done (1:05:55 28%CPU 171288k)
** image: ~/out/alt-p11-jeos-systemd-20250107-x86_64.iso [848M]
make: Leaving directory '/home/myrepo/mkimage-profiles'