Bug 44226

Summary: При генерации - ошибка luks
Product: Sisyphus Reporter: Sergei Naumov <Sergei.Naumov>
Component: make-initrdAssignee: Alexey Gladkov <legion>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: blocker    
Priority: P5 CC: antohami, glebfm, iv, ldv, legion, mike, placeholder, rider
Version: unstable   
Hardware: x86_64   
OS: Linux   
See Also: https://bugzilla.altlinux.org/show_bug.cgi?id=44561
Bug Depends on:    
Bug Blocks: 33000    
Attachments:
Description Flags
Ошибка при генерации initrd none

Description Sergei Naumov 2022-11-07 10:25:08 MSK
Created attachment 11812 [details]
Ошибка при генерации initrd

При генерации initrd для firmware-linux-20221024-alt1 - ошибка (см. картинку)
Comment 1 Anton Farygin 2022-11-08 10:41:43 MSK
Тоже столкнулся.

1: kernel-image-std-def-2:5.15.77-alt1                                 #################################################################################################### [ 50%]
2: kernel-modules-virtualbox-std-def-7.0.2-alt1.331597.1               #################################################################################################### [100%]
/usr/share/make-initrd/features/luks/config.mk:10: /usr/share/make-initrd/features/usr/share/make-initrd/tools/kernel-compare/rules.mk: No such file or directory
make[1]: *** No rule to make target '/usr/share/make-initrd/features/usr/share/make-initrd/tools/kernel-compare/rules.mk'.  Stop.
Comment 2 Антон Мидюков 2022-11-08 11:50:45 MSK
*** Bug 44236 has been marked as a duplicate of this bug. ***
Comment 3 Антон Мидюков 2022-11-08 12:02:11 MSK
Проблема возникает после обновления make 4.3.0-alt1 -> 4.4.0-alt1
Comment 4 Repository Robot 2022-11-08 16:26:32 MSK
make-initrd-2.32.1-alt1 -> sisyphus:

 Tue Nov 08 2022 Alexey Gladkov <legion@altlinux.ru> 2.32.1-alt1
 - New version (2.32.1).
 - mk: do not expand functions out of '$(call ...)' context (ALT#44226).
Comment 5 Michael Shigorin 2022-12-06 17:11:10 MSK
Для архива -- типовой вид исправления (аналогичное поймали в mkimage-profiles):

---
-FSCK_RUNTIME_FILES := $(shell $(shell-export-vars) $(FEATURESDIR)/fsck/bin/find-files)
+FSCK_RUNTIME_FILES := $(shell $(call shell-export-vars) $(FEATURESDIR)/fsck/bin/find-files)
--- http://git.altlinux.org/gears/m/make-initrd.git?p=make-initrd.git;a=commitdiff;h=9ee3032082214223bea6b8f323c4b5fcae48a1c4

...бишь _явный_ вызов функции как функции.
Comment 6 Alexey Gladkov 2022-12-06 18:20:03 MSK
(Ответ для Michael Shigorin на комментарий #5)
> Для архива -- типовой вид исправления (аналогичное поймали в
> mkimage-profiles):
> 
> ---
> -FSCK_RUNTIME_FILES := $(shell $(shell-export-vars)
> $(FEATURESDIR)/fsck/bin/find-files)
> +FSCK_RUNTIME_FILES := $(shell $(call shell-export-vars)
> $(FEATURESDIR)/fsck/bin/find-files)
> ---
> http://git.altlinux.org/gears/m/make-initrd.git?p=make-initrd.git;
> a=commitdiff;h=9ee3032082214223bea6b8f323c4b5fcae48a1c4
> 
> ...бишь _явный_ вызов функции как функции.

Суть этого не в этом. Из-за того, что происходит импорт определения функций, то make начинает их выполнять. В этом коммите у функций сделана проверка:

```
define if-success
-$(if $(1),$(shell { $(1); } >/dev/null 2>&1 && echo "$(2)" || echo "$(3)"))
+$(if $(filter if-success,$(0)),$(if $(1),$(shell { $(1); } >/dev/null 2>&1 && echo "$(2)" || echo "$(3)")))
endef
```

Проверка аргумента $0. Который согласно документации на функцию call[1] будет содержать имя самой функции.

```
$(call variable,param,param,…)

When make expands this function, it assigns each param to temporary variables $(1), $(2), etc. The variable $(0) will contain variable.
```

Проблему можно решить другим способом используя :=. Например

```
define if-success :=
$(if $(1),$(shell { $(1); } >/dev/null 2>&1 && echo "$(2)" || echo "$(3)"))
endef
```

Но в этом случае внутри функции нельзя использовать переменные, которые будут дополняться и переопределяться.

[1] https://www.gnu.org/software/make/manual/html_node/Call-Function.html#Call-Function
Comment 7 Alexey Gladkov 2022-12-06 18:25:39 MSK
"Суть этого не в этом." -- это пять баллов! Промахнулся словом, а сколько глубины появилось!

Суть исправления не в этом.