Summary: | qemu-aarch64.static randomly segfaults when initializing hasher chroot | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Pavel Nakonechnyi <zorg> |
Component: | qemu-user-static-aarch64 | Assignee: | Alexey Shabalin <shaba> |
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
Severity: | normal | ||
Priority: | P5 | CC: | aen, antohami, glebfm, iv, mike, shaba, vt |
Version: | unstable | ||
Hardware: | x86_64 | ||
OS: | Linux |
Description
Pavel Nakonechnyi
2020-10-25 18:29:01 MSK
Откатился на Name : qemu-user-static-aarch64 Version : 5.0.0 Release : alt1 DistTag : sisyphus+251637.1700.3.1 С этой версией работает. У меня ранее с --with-qemu=aarch64 не работало, зато работало без. Так вот, если сделать без, получаем: hsh-initroot: Unpacked initial package list. hsh-initroot: Created entry point: /tmp/.private/antohami/hasher/chroot/.host/entry fakeroot: preload library `libfakeroot.so' not found, aborting. hsh-initroot: Failed to create RPM database. Запускаю ещё раз, получаю: hsh-initroot: Created entry point: /tmp/.private/antohami/hasher/chroot/.host/entry /.host/entry: line 16: 2080394 Segmentation fault rm -f /etc/rpm/macros.db1 hsh-initroot: Failed to create RPM database. Запускаю ещё раз, получаю зависание: fakeroot: error while starting the `faked' daemon. Ещё раз: /usr/bin/fakeroot: line 189: 2084826 Segmentation fault FAKEROOTKEY=$FAKEROOTKEY LD_LIBRARY_PATH="$PATHS" LD_PRELOAD="$LIB" "$@" 0<&0 Ещё раз: '/mnt/myhdd/repo/Sisyphus/aarch64/RPMS.classic/rpm-build-4.0.4-alt151.aarch64.rpm' -> 'chroot/.in/rpm-build-4.0.4-alt151.aarch64.rpm' hsh-initroot: Failed to install build package list. Проблема может возникнуть в любом месте, при выполнении любого бинарника. Вооружившись git bisect, терпением и недоделаным aarch64-p9-чрутом на x86_64-машине с Сизифом, я пошёл искать, кто виноват. Если идти по истории апстримного гита, то qemu-aarch64 первый раз сломалось на коммите ee94743034bfb443cf246eda4971bdc15d8ee066 linux-user: completely re-write init_guest_space Великолепное summary для коммита, хорошо отражаующее суть и сразу наполняющее оптимизмом. После этого коммита chroot в армовый chroot стал падать, но не с segfault, а с диагностикой: qemu-aarch64: /bin/bash: Unable to allocate 0x10d5f98 bytes of virtual address space Как выяснилось, теперь qemu-user (по крайней мере в некоторых случаях) был нужен /proc/self/maps, чтобы найти в памяти какое-нибудь место, в которое можно замапать что-то нужное (кажется, например, интерпретатор загружаемого elf'а, но тут я не уверен). То есть, если в chroot пробросить /proc, qemu-user начинает работать. Можно проверить и с 5.2.0-alt1, навреняка заработает, хотя вряд ли это поможет hsh --initroot. Заметив эту проблему, апстрим попробовал исправить её и сделать так, чтобы qemu-user работал в чуть более пустых чрутах. Для этого был сделан более скромный коммит того же автора, ad592e37dfccf730378a44c5fa79acb603a7678d linux-user: provide fallback pgd_find_hole for bare chroots Однако тут что-то идёт не так и qemu-user, вместо того, чтобы работать даже с отсутствующим /proc/self/maps, начинает иногда падать. Я пока не разбирался, почему это происходит, но явно проблема где-то вокруг pgd_find_hole_fallback. В общем, надо смотреть, что там такое. Какая-то чать решения, похоже, выглядит так: http://git.altlinux.org/people/iv/packages/?p=qemu.git;a=commitdiff;h=93f9ffdb573c0932aec4559ea0884acf2d1d5171 У меня на машине упорно делает вид, что работает. Есть test-only задача http://git.altlinux.org/tasks/264674/, часа через 2 соберётся и можно будет проверять и на других машинах. Подробности, тикеты в апстрим и нормальный commit message потом. (In reply to Ivan A. Melnikov from comment #4) > У меня на машине упорно делает вид, что работает. Есть test-only задача > http://git.altlinux.org/tasks/264674/, часа через 2 соберётся и можно будет > проверять и на других машинах. Install check'и ещё идут, но делать apt-repo add 264674 уже можно. У меня hsh --iniroot --with-qemu=aarch64 с Сизифным aarch64 на машине с x86_64 Сизифом и #264674 прошёл. Приглашаются желающие потестировать. antohami@ проверил работу qemu-user при сборке образов под разные архитектуры: https://lists.altlinux.org/pipermail/devel/2021-January/213412.html 2shaba: прошу аппрув на #264674. Или забери себе http://git.altlinux.org/people/iv/packages/?p=qemu.git;a=commitdiff;h=93f9ffdb573c0932aec4559ea0884acf2d1d5171 Также рекомендую забрать http://git.altlinux.org/people/iv/packages/?p=qemu.git;a=commitdiff;h=aa64b05c2a95d974ee2ef547eefacab245084b14 так как эти sed'ы в спеке поломались после рефакторинга linux-user/main.c кажется где-то в районе 5.0. Я правда не разбирался, какой CPU выбирается для "any" и чем это нам грозит, только адаптировал к изменениям в исходниках. 5.2.0-alt2 в Сизифе. Спасибо! |