LINUX.ORG.RU

Утро начинается не с кофе

 , , ,


0

1
Контекст

Gentoo (default/linux/amd64/17.1/desktop/gnome/systemd)

Обновляем мир вечером в пятницу

В субботу утром система после перезагрузки встречает черным экраном, ctrl+alt+f{1-7} не переключает

Детали

Загружается в recovery, отключаем gdm в systemd, перезагружаемся, читаем journal:

...
/usr/libexec/gdm-x-session[2049]: /bin/sh: /usr/bin/X: Permission denied
gdm-x-session[2047]: Gdm: X server did not write display string
/usr/libexec/gdm-x-session[2047]: Unable to run X server
...
Session c1 logged out. Waiting for processes to exit.
gdm[2023]: segfault at 0 ip 0000558879483456 sp 00007ffd89cf28d0 error 4 in gdm[558879464000+3b000]
Обходим

package.mask:

=x11-base/xorg-server-21.1.2-r2
emerge x11-base/xorg-server
Читаем

diff <(curl https://gitweb.gentoo.org/repo/gentoo.git/plain/x11-base/xorg-server/xorg-server-21.1.1-r2.ebuild) <(curl https://gitweb.gentoo.org/repo/gentoo.git/plain/x11-base/xorg-server/xorg-server-21.1.2-r2.ebuild)

160,161c160,165
< 	#The new meson build system do not leave X symlink
< 	ln -s Xorg "${ED}"/usr/bin/X
---
> 	# The meson build system does not support install-setuid
> 	if ! use systemd || ! use elogind; then
> 		if use suid; then
> 			chmod u+s "${ED}"/usr/bin/Xorg
> 		fi
> 	fi

Читаем, что происходит между 21.1.1 и 21.1.2 в репозитории xserver:

| | * 9852b2938 - (4 days ago) xserver 21.1.2 - Povilas Kanapickas (HEAD, tag: xorg-server-21.1.2, origin/server-21.1-branch)
| | * 9fe299107 - (4 days ago) hw/xfree86: fix sbus build for SPARC - Sam James
| | * 0b67785cd - (4 days ago) render: Fix out of bounds access in SProcRenderCompositeGlyphs() - Povilas Kanapickas
| | * 7209982d2 - (4 days ago) Xext: Fix out of bounds access in SProcScreenSaverSuspend() - Povilas Kanapickas
| | * 6f09e7d39 - (4 days ago) xfixes: Fix out of bounds access in *ProcXFixesCreatePointerBarrier() - Povilas Kanapickas
| | * a82d523ed - (4 days ago) record: Fix out of bounds access in SwapCreateRegister() - Povilas Kanapickas
| | * a39218d99 - (4 days ago) remove the PRE_RELEASE message. - Matthieu Herrb
| | * fc2eb7e8c - (12 days ago) test: #undef NDEBUG so assert is not compiled away - Matt Turner
| | * 7caf29ca6 - (5 weeks ago) meson: Correctly set DDXOSVERRORF and DDXBEFORERESET on xwin - Povilas Kanapickas
| | * 101791f80 - (2 weeks ago) glamor: fix free of uninitialised pointers - Jonathan Gray
| | * 2c6989f81 - (3 weeks ago) xkb: fix XkbSetMap check for the keytypes count - Peter Hutterer
| | * 49444ce9f - (5 weeks ago) Revert "hw/xfree86: Propagate physical dimensions from DRM connector" - Povilas Kanapickas
| | * 6f11b3c80 - (6 weeks ago) dri2: add crocus to the list of va_gl users - Dave Airlie
| | * 8eb1396d3 - (4 weeks ago) xf86/logind: Fix drm_drop_master before vt_reldisp - Jocelyn Falempe
| | * 6834f977a - (4 weeks ago) xf86/logind: fix call systemd_logind_vtenter after receiving drm device resume - Jocelyn Falempe
| | * 0ed7b1224 - (2 months ago) xfree86: On Linux, while only seat0 can have TTYs, don't assmume all seat0s have TTYs - nerdopolis
| | * 6b997fb74 - (6 weeks ago) xserver 21.1.1 - Povilas Kanapickas (tag: xorg-server-21.1.1)

В итоге на 21.1.1:

ls -l /usr/bin/X /usr/bin/Xorg 
lrwxrwxrwx 1 root root   4 Dec 19 10:15 /usr/bin/X -> Xorg
-rwxr-xr-x 1 root root 275 Dec 19 10:14 /usr/bin/Xorg

A на 21.1.2 (консолька заботливо подсветила красненьким Xorg):

ls -l /usr/bin/X /usr/bin/Xorg 
lrwxrwxrwx 1 root root   4 Dec 19 11:31 /usr/bin/X -> Xorg
-rws--x--x 1 root root 275 Dec 19 11:31 /usr/bin/Xorg

/usr/bin/Xorg - скрипт, и выполниться без r не может.

Познаем

Я не могу ответить на вопрос «а как должно быть?» и «кто виноват и что делать?».

У нас есть:

  • Jonas Stein, написал ebuild 21.1.2
  • Povilas Kanapickas и компания, написали сам 21.1.2

Я честно просмотрел все коммиты, но это не моя сфера компетенции.

Главный вопрос: кому писать баг-репорт?

Дополнительный вопрос: это нормально для gdm падать при таком с segfault?


Ответ на: комментарий от deity

В данном случае это не имеет значения (ну разве кроме вопроса про segfault).

-rws--x--x 1 root root 275 Dec 19 11:31 /usr/bin/Xorg не даст запустить иксы никому кроме root.

Sunil ()
Ответ на: комментарий от Sunil

Не даст и не даст, тебе нравится страдать запуская из рекавери? Вангую что systemd до сих пор не завезли интерективный режим. Короче ты сам себе злобный буратино что сказать то хотел своим постом?

deity ★★★★ ()
Ответ на: комментарий от deity

Главный вопрос: кому писать баг-репорт?

Дополнительный вопрос: это нормально для gdm падать при таком с segfault?

Sunil ()
Ответ на: комментарий от deity

И таки да проблема не воспроизводится у меня норм все с правами

deity ★★★★ ()

Только собрался обновлятся. Пожалуй повременю.

Artamudo ★★★★ ()

Начни с багзиллы генту, а там посмотришь.

grem ★★★★★ ()

А gdm иксы не от рута пускает? Какой смысл если они делают setuid(0) или не работают нормально без рута?

mittorn ★★★★★ ()

Главный вопрос: кому писать баг-репорт?

Начни с автора ебилда, вдруг это он накосячил.

И да, почему пользуем "иксы" под "гномом"? Там же ж Wayland во все поля.

Korchevatel ★★★★★ ()
Ответ на: комментарий от Korchevatel

И да, почему пользуем «иксы» под «гномом»? Там же ж Wayland во все поля.

Еще недавно с комбинацией NVIDIA/nvidia-drivers и Wayland были проблемы. Надо будет попробовать.

Sunil ()
Последнее исправление: Sunil (всего исправлений: 1)
Ответ на: комментарий от Korchevatel

Так он всё равно в итоге рута получает через suid, иначе не сможет tty открыть. В чём разница?

mittorn ★★★★★ ()
Ответ на: комментарий от deity

Любые *dm ненужны

И вообще графика переоценена, тру используют ядрёную консоль.

izzholtik ★★★ ()

-rws–x–x 1 root root 275 Dec 19 11:31 /usr/bin/Xorg

убери suid из юз флагов xorg-server. logind/elogind позволяют запускать иксы без setuid флага.

+	# The meson build system does not support install-setuid
+	if ! use systemd || ! use elogind; then
+		if use suid; then
+			chmod u+s "${ED}"/usr/bin/Xorg
+		fi
+	fi
+

В ebuild’e стоит условие добавить, что suid/logind взаимоисключающие флаги.

arrecck ★★★ ()
Ответ на: комментарий от Sunil

Так любой DM запустит Xorg от рута. Но вообще да, в норме его и юзер должен пускать.

kirill_rrr ★★★★★ ()

Что за бред, нафиг скрипту setuid, он на нём не действует. Я уж не знаю кто тут виноват - генту-мэйнтейнер или те криворуки кто сейчас xorg сопровождают.

это нормально для gdm падать при таком с segfault?

Вообще - не нормально. Но для гномософта - нормально. Выкинь gdm и всё остальное что у тебя от гнома есть.

firkax ★★★ ()

Явно ошибка в последнем ebuild, если /usr/bin/Xorg это скрипт, значит используется suid-wrapper (/usr/libexec/Xorg.wrap) и SUID должен быть на нём. Для скриптов SUID смысла не имеет.

mky ★★★★★ ()

Gentoo
systemd

Извращенец.

Gonzo ★★★★★ ()

В ебилде какой-то бред написан:

	if ! use systemd || ! use elogind; then

Т.е. в условие попадаем всегда, кроме случая, когда USE="systemd elogind".

При этом REQUIRED_USE="?? ( elogind systemd )", то есть эти флаги вместе стоять не могут. Выходит, что условие выше — фикция, это тупо if true.

Подозреваю, что имелось в виду так:

	if ! use systemd && ! use elogind; then
gentoo_root ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.