Bug 42965

Summary: Передаёт инсталятору неверный $PREFIX
Product: Sisyphus Reporter: Антон Мидюков <antohami>
Component: make-initrd-bootchain-cifsAssignee: Leonid Krivoshein <klark>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: antohami, george, klark
Version: unstable   
Hardware: all   
OS: Linux   
Bug Depends on:    
Bug Blocks: 33000    

Description Антон Мидюков 2022-06-09 19:22:26 MSK
Инсталятор при использовании метода cifs ожидает, что в /image будет смонтирован  ресурс samba.
Например, указываем в качестве directory /public/jeos.iso
Скрипт /usr/share/install2/initinstall.d/90-pkg.sh ищет /image/public/jeos.iso
А по факту в /image уже смонтирован каталог /image/public/jeos.iso
В результате не происходит копирование pkg-groups.tar с последующей его распаковкой. Шаг установки пакетов пропускается и имеем ошибку "destination filesystem remount  error".
Comment 1 Антон Мидюков 2022-06-09 19:27:52 MSK
Для метода nfs аналогичная проблема.
Comment 2 Антон Мидюков 2022-06-09 19:40:58 MSK
А зато установка live работает. Надо то было livecd-install исправлять, чтобы с propagator работал, а его никто не исправлял.
Comment 3 Антон Мидюков 2022-06-09 19:57:47 MSK
Проблема не в том, что образ в image монтируется так, а в том, что bootchain сообщает $PREFIX неправильный. В данном случае он должен был быть пустым, а не равен directory.
Comment 4 Repository Robot 2022-06-14 18:10:33 MSK
make-initrd-bootchain-0.1.5-alt10 -> sisyphus:

 Fri Jun 10 2022 Anton Midyukov <antohami@altlinux> 0.1.5-alt10
 - cifs, nfs: set PREFIX to '/' (Closes: 42965)
Comment 5 Fr. Br. George 2022-08-29 16:03:17 MSK
Сломалось монтирование оверлеев по NFS
Теперь какие бы параметры ни были в cmdline, поиск оверлеев выглядит так:
[2022-08-29 12:16:00] liveboot: [0] KEY: 'PREFIX'
[2022-08-29 12:16:00] liveboot: [0] stage2_getenv('PREFIX') result: '/' 
[2022-08-29 12:16:00] liveboot: [0] LEAVE: stage2_getenv
[2022-08-29 12:16:00] liveboot: mounting NFS overlays from 10.29.48.21://overlays-live
[2022-08-29 12:16:00] liveboot: [0] RUN: mkdir -p -- /root.rw/rw/tmp/images
[2022-08-29 12:16:00] liveboot: [0] RUN: mount.nfs 10.29.48.21://overlays-live /root.rw/rw/tmp/images -o ro,intr,soft,nolock,timeo=30,retry=0
mount.nfs: mounting 10.29.48.21://overlays-live failed, reason given by server: No such file or directory
[2022-08-29 12:16:00] liveboot: NFS mount failed
Comment 6 Leonid Krivoshein 2022-08-30 01:40:27 MSK
Да, это регрессия в отношении исходно определённого поведения: PREFIX не только экспортируется в stage2 для установщика, но и повторно используется модулями одного из последних шагов liveboot, в данном случае смотрим код:

bootchain-nfs/data/lib/altboot/livecd-slice.d/700-nfs

Если бы PREFIX был пустым, его бы перебивал суб-параметр directory, но он равен "/", и для этого значения ищется каталог верхнего уровня, к которому добавляется "/overlays-live". Но если сейчас не исправлять ошибку, оставить как есть, данное значение можно перебить суб-параметром overlays. В строке 33 сейчас такой код:

[ -n "$overlays" ] ||
        overlays="${parentdir:-$OEM_NFS_NETINST}/overlays-live"
message "mounting NFS overlays from $server:$overlays"

Т.е.,  Fr. Br. George может пока "обойти" проблему, добавив в /proc/cmdline:

automatic=...,overlays:/путь/к/родителю-overlays-live

А я посмотрю, как это лучше исправить в коде, поскольку откатить коммит Антона не сложно, а вот проверить по новой все варианты загрузки на стенде -- дело не быстрое.
Comment 7 Leonid Krivoshein 2022-08-30 02:53:40 MSK
(Ответ для Антон Мидюков на комментарий #0)
> Инсталятор при использовании метода cifs ожидает, что в /image будет
> смонтирован  ресурс samba.
Пропагатор монтирует внахлёст ISO и сквош то в /root, то в /image. При перекрытии первоначально смонтированного по CIFS или NFS в stage2 выставляется флаг PIGGYBACK=1. Метод CIFS добавлял sin@, используя аналогию с NFS, хотя у SAMBA проглядывается выделение первой части пути как названия ресурса (всегда), остальная часть -- относительный путь. Полагаю, в инсталлятор метод CIFS также добавлялся не изначально.

(Ответ для Антон Мидюков на комментарий #3)
> Проблема не в том, что образ в image монтируется так, а в том, что bootchain
> сообщает $PREFIX неправильный. В данном случае он должен был быть пустым, а
> не равен directory.
Чтобы не сломать ожидаемое поведение, $PREFIX д.б. таким же, как он выставляется пропагатором. В нём PREFIX="/" для методов nfs/cifs/cdrom и равен суб-параметру directory для методов disk/ftp/http, при этом, для методов nfs и cifs дополнительно зачем-то экспортируется ещё и $DIRECTORY. Я решил их "выровнять", поскольку в коде установщика нигде не видел использования DIRECTORY, передавать везде путь через PREFIX для всех методов. Возможно, "так себе" идея, но пересматривать тогда придётся весь код altboot, чтобы это поменять.

Правильно ли я тебя понял, что сейчас достаточно просто откатить последний коммит, что никакие куски инсталлятора уже не закладываются на PREFIX="/"?
Comment 8 Leonid Krivoshein 2022-08-30 03:09:30 MSK
(Ответ для Leonid Krivoshein на комментарий #6)
> Т.е.,  Fr. Br. George может пока "обойти" проблему, добавив в /proc/cmdline:
> automatic=...,overlays:/путь/к/родителю-overlays-live
Да, именно такое же поведение было и в случае с пропагатором:
https://git.altlinux.org/gears/m/make-initrd-propagator.git?p=make-initrd-propagator.git;a=blob;f=propagator/data/sbin/init-bottom#l55
Comment 9 Антон Мидюков 2022-08-30 04:45:42 MSK
(Ответ для Leonid Krivoshein на комментарий #7)
> Правильно ли я тебя понял, что сейчас достаточно просто откатить последний
> коммит, что никакие куски инсталлятора уже не закладываются на PREFIX="/"?

Код в install2-shfunctions такой (вырезал только то, что про $PREFIX):
PREFIX="${PREFIX:-}"

[ "$PREFIX" != "/" ] || PREFIX=
readonly PREFIX

case "$METHOD" in
    ftp|http)
	image_url="$METHOD://$AUTH_DATA$HOST/$PREFIX"
	;;
	cdrom|disk|nfs|cifs)
	image_url="$image_dir/$PREFIX"
	# If booted from iso file, the $image_dir/$PREFIX directory will be missing
	[ -d "$image_url" ] || image_url="$image_dir"
	;;
    *)
	fatal "Unsupported method:$METHOD"
    esac

Я недавно добавил тут строчки:
	# If booted from iso file, the $image_dir/$PREFIX directory will be missing
	[ -d "$image_url" ] || image_url="$image_dir"

Чтобы в случае смонтированного образа $PREFIX не влиял. А больше $PREFIX нигде не используется. Если кто-то на него будет надеяться, то у него будет проблема в случае смонтированного образа. Но с method=disk у propagator проблема аналогичная с bootchain. поэтому сделал такое исправление в инсталляторе.

Так что предлагаю окатить и нигде в инсталляторе на $PREFIX не закладываться.
Comment 10 Leonid Krivoshein 2022-08-31 01:48:49 MSK
Отправил 0.1.5-alt11, это должно исправить проблему с оверлеями.
Comment 11 Антон Мидюков 2022-10-19 10:16:37 MSK
(Ответ для Leonid Krivoshein на комментарий #10)
> Отправил 0.1.5-alt11, это должно исправить проблему с оверлеями.

Закрываю.