Created attachment 9660 [details] make-initrd при сборке образа img в mkimage-profiles make-initrd 2.23.0 при выполнении в hasher завершается ошибкой: make-initrd -N -v -k 5.10.63-std-def-alt2 AUTODETECT= 'FEATURES+=add-modules compress cleanup kbd rdshell rootfs usb qemu' [...] Sorting sysvinit services ... /usr/share/make-initrd/tools/sort-services: line 376: /dev/fd/62: No such file or directory make[2]: *** [/usr/share/make-initrd/mk/make-initrd.mk:127: pack] Error 1 Также присутствует ещё одна не критическая ошибка: /usr/share/make-initrd/tools/find-terminfo: line 59: /dev/fd/62: No such file or directory
Это требует bash. $ ls -la /dev/fd lrwxrwxrwx 1 root root 13 сен 12 18:01 /dev/fd -> /proc/self/fd/
$ git grep readarray |cut -d: -f1,2 features/kickstart/data/bin/kickstart-sh-storage:572 features/kickstart/data/bin/kickstart-sh-storage:581 features/kickstart/data/bin/kickstart-sh-storage:596 guess/smart-card/action:11 tools/find-terminfo:59 tools/find-terminfo:61 tools/find-udev-rule-externals:9 tools/sort-services:376 Как минимум sort-services и find-terminfo используют эту конструкцию и должны выполняться в чруте. Видимо, вам раньше везло. В чруте должен быть смонтирован proc. Вам нужно использовать --mountpoints=/proc.
(In reply to Alexey Gladkov from comment #2) > $ git grep readarray |cut -d: -f1,2 > features/kickstart/data/bin/kickstart-sh-storage:572 > features/kickstart/data/bin/kickstart-sh-storage:581 > features/kickstart/data/bin/kickstart-sh-storage:596 > guess/smart-card/action:11 > tools/find-terminfo:59 > tools/find-terminfo:61 > tools/find-udev-rule-externals:9 > tools/sort-services:376 > > Как минимум sort-services и find-terminfo используют эту конструкцию и > должны выполняться в чруте. Видимо, вам раньше везло. Везло, потому что раньше sort-services не использовался: https://github.com/osboot/make-initrd/commit/98a55825bb044b2a78cd25e3918af51431d7b5a4 Да и terminfo тоже: https://github.com/osboot/make-initrd/commit/7537d23fabecc9eca00015a3cf7e82d362c4250d > В чруте должен быть > смонтирован proc. Вам нужно использовать --mountpoints=/proc. Понятно, но не радует. С этим ничего нельзя поделать и придётся с этим жить?
А у меня на другом вывалился: [00:00:04] Packing image to archive ... touch: setting times of './mtab': Read-only file system make[2]: *** [/usr/share/make-initrd/mk/make-initrd.mk:129: pack] Error 1 make[1]: *** [/usr/share/make-initrd/mk/make-initrd.mk:187: process-config] Error 2 make: *** [/usr/share/make-initrd/mk/make-initrd.mk:177: all] Error 1 + fatal 'make-initrd failed'
(Ответ для Антон Мидюков на комментарий #3) > Везло, потому что раньше sort-services не использовался: > https://github.com/osboot/make-initrd/commit/ > 98a55825bb044b2a78cd25e3918af51431d7b5a4 > > Да и terminfo тоже: > https://github.com/osboot/make-initrd/commit/ > 7537d23fabecc9eca00015a3cf7e82d362c4250d Да. Эти конструкции уже были, но так получалось, что они не вызывались в чруте. > Понятно, но не радует. С этим ничего нельзя поделать и придётся с этим жить? Я сначала подумал, что можно попробовать заменить в данных скриптах код на другой, но это как по минному полю идти. Неизвестно, где bash захочет использовать /dev/fd в следующий раз. Так что я склонен сказазать, что да, proc нужен. Он в принципе нужен (как и sysfs) для работы make-initrd в обычных условиях.
(Ответ для Leonid Krivoshein на комментарий #4) > А у меня на другом вывалился: > > [00:00:04] Packing image to archive ... > touch: setting times of './mtab': Read-only file system > make[2]: *** [/usr/share/make-initrd/mk/make-initrd.mk:129: pack] Error 1 > make[1]: *** [/usr/share/make-initrd/mk/make-initrd.mk:187: process-config] > Error 2 > make: *** [/usr/share/make-initrd/mk/make-initrd.mk:177: all] Error 1 > + fatal 'make-initrd failed' Нужно больше информации. Где запускалось ?
(In reply to Alexey Gladkov from comment #6) > Нужно больше информации. Где запускалось ? make-initrd запускался из mkimage и относительно свежего m-p, но хост на p8 и зеркало Сизифа отстаёт на несколько месяцев. До этой версии собиралось нормально. Сейчас пытаюсь найти, в чём ошибка.
(In reply to Alexey Gladkov from comment #6) > (Ответ для Leonid Krivoshein на комментарий #4) > > А у меня на другом вывалился: > > > > [00:00:04] Packing image to archive ... > > touch: setting times of './mtab': Read-only file system > > make[2]: *** [/usr/share/make-initrd/mk/make-initrd.mk:129: pack] Error 1 > > make[1]: *** [/usr/share/make-initrd/mk/make-initrd.mk:187: process-config] > > Error 2 > > make: *** [/usr/share/make-initrd/mk/make-initrd.mk:177: all] Error 1 > > + fatal 'make-initrd failed' > > Нужно больше информации. Где запускалось ? Я добавил /proc и получил эту же ошибку. В hasher та же команда.
(In reply to Leonid Krivoshein from comment #7) > Сейчас пытаюсь найти, в чём ошибка. tools/create-initrd:ln -s /proc/self/mounts ./etc/mtab Скорее всего, причина общая. ... touch: setting times of './mtab': Read-only file system
А вот это уже стоит исправить.
(Ответ для Leonid Krivoshein на комментарий #9) > (In reply to Leonid Krivoshein from comment #7) > > Сейчас пытаюсь найти, в чём ошибка. > tools/create-initrd:ln -s /proc/self/mounts ./etc/mtab > Скорее всего, причина общая. В create-initrd создаётся внешний симлинк, а pack-image делает touch на этот симлинк [1]. Нельзя там ходить по симлинкам. [1] https://github.com/osboot/make-initrd/blob/master/tools/pack-image#L29
Патч должен быть типа: diff --git a/tools/pack-image b/tools/pack-image index ea90dcc29..7dfd7efbc 100755 --- a/tools/pack-image +++ b/tools/pack-image @@ -26,7 +26,7 @@ printf >> "$workdir"/initcpio 'nod ./dev/%s\n' \ "console 0600 0 0 c 5 1" \ "ptmx 0666 0 0 c 5 2" -find . -execdir touch -c -m --date="1970-01-01 00:00:00 +0000" '{}' '+' +find -P . -type f -execdir touch -c -m --date="1970-01-01 00:00:00 +0000" '{}' '+' sort "$workdir"/initcpio | gen_init_cpio -t 0 - > "$outfile"
Можете подтвердить фикс ?
(In reply to Alexey Gladkov from comment #13) > Можете подтвердить фикс ? По крайней мере, с этим патчем проходит дальше и initrd создаётся: [00:00:05] Packing image to archive ... [00:00:05] Compressing image ... ... Остальное сейчас проверяется.
(In reply to Leonid Krivoshein from comment #14) > (In reply to Alexey Gladkov from comment #13) > > Можете подтвердить фикс ? > Остальное сейчас проверяется. Да, патч решил проблему, make-initrd вполне рабочий.
(In reply to Leonid Krivoshein from comment #15) > Да, патч решил проблему, make-initrd вполне рабочий. Но на сборке образов с графикой тоже вылезла сабжевая ошибка с /dev/fd/62. Антон, я правильно понимаю, что это уже надо исправлять в профиле?
(Ответ для Leonid Krivoshein на комментарий #15) > Да, патч решил проблему, make-initrd вполне рабочий. Ок. Завтра сделаю новую сборку с патчем.
(In reply to Leonid Krivoshein from comment #16) > (In reply to Leonid Krivoshein from comment #15) > > Да, патч решил проблему, make-initrd вполне рабочий. > Но на сборке образов с графикой тоже вылезла сабжевая ошибка с /dev/fd/62. > Антон, я правильно понимаю, что это уже надо исправлять в профиле? Да. Нужно добавить: @$(call set,GLOBAL_HSH_PROC,1) http://git.altlinux.org/people/antohami/packages/mkimage-profiles.git?p=mkimage-profiles.git;a=commitdiff;h=c1efb923eac56c64f7dc6738bae284922e49c09b
(In reply to Антон Мидюков from comment #3) > (In reply to Alexey Gladkov from comment #2) > > В чруте должен быть > > смонтирован proc. Вам нужно использовать --mountpoints=/proc. > С этим ничего нельзя поделать и придётся с этим жить? Коллеги, вы уверены, что в чруте mkimage нужен настоящий /proc с хоста? Может тут вполне достаточно фейкового каталога с симлинками? Не должно же быть косвенного влияния на образы с машины, на которой они генерируются.
(Ответ для Leonid Krivoshein на комментарий #19) > > > В чруте должен быть > > > смонтирован proc. Вам нужно использовать --mountpoints=/proc. > > С этим ничего нельзя поделать и придётся с этим жить? > Коллеги, вы уверены, что в чруте mkimage нужен настоящий /proc с хоста? Нет такого понятия как proc с хоста. Есть proc из определённого pid namespace. > Может тут вполне достаточно фейкового каталога с симлинками? /proc/self/fd нельзя сэмулировать. > Не должно же быть косвенного влияния на образы с машины, на которой они генерируются. proc предоставляет не только информацию о системе, но и о процессах. Если монтировать proc правильно, то доступа к информации о системе не будет.
(In reply to Alexey Gladkov from comment #20) > Если монтировать proc правильно, то доступа к информации о системе не будет. А mkimage правильно монтирует /proc?
(Ответ для Антон Мидюков на комментарий #21) > (In reply to Alexey Gladkov from comment #20) > > Если монтировать proc правильно, то доступа к информации о системе не будет. > > А mkimage правильно монтирует /proc? Правильнее спрашивать правильно ли монтирует proc хэшер. Он это делает правильно. В том смысле, что "чужих" процессов в чруте не видно, а доступ к системной информации открыт лишь от пользователя. В новых ядрах можно исключить системную информацию совсем оставив только /proc/[pid], но хэшер не умеет так монтировать proc.
make-initrd-2.23.0-alt2 -> sisyphus: Mon Sep 13 2021 Alexey Gladkov <legion@altlinux.ru> 2.23.0-alt2 - Set mtime only for regular files (ALT#40900).