Bug 42965 - Передаёт инсталятору неверный $PREFIX
Summary: Передаёт инсталятору неверный $PREFIX
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: make-initrd-bootchain-cifs (show other bugs)
Version: unstable
Hardware: all Linux
: P5 normal
Assignee: Leonid Krivoshein
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks: 33000
  Show dependency tree
 
Reported: 2022-06-09 19:22 MSK by Антон Мидюков
Modified: 2022-10-19 10:16 MSK (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
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, это должно исправить проблему с оверлеями.

Закрываю.