LINUX.ORG.RU

Hibernate не усыпляет комп при вызове из меню KDE из-за прав доступа (виноват selinux)

 , , , ,


0

1

UPD: куря логи выяснил, что имеет к этому отношение selinux. после его отключения стало засыпать и от юзера.

не могу сказать, что проблема решена, всё-таки хотелось бы тогда понять где я должен был увидеть ругань selinux на неправомерный доступ и как его настроить на это.

Привет, ЛОР! Не могу понять почему не засыпает комп в режиме hibernate.

Дано:

  • Fedora 29 amd64 on LVM with KDE5
  • GRUB2
  • UEFI (secure boot disabled)
  • swap-file on root

    При вызове из меню KDE suspend to RAM засыпает и просыпается, а suspend to disk (aka hibernate) только мигнёт экраном и включается обратно. При вызове из консоли # /usr/lib/systemd/systemd-sleep hibernate и # /usr/lib/systemd/systemd-sleep suspend всё засыпает и просыпается. Хотя от юзера эти команды не срабатывают, permission denied.

    Таким образом, как выяснить какой командой из KDE-menu засыпается комп (и почему hibernate не срабатывает?)?
    В # journalctl -b есть уточнение ошибки в 2018-2019 строках, но распарсить не могу.

    # cat /etc/default/grub
    
    GRUB_TIMEOUT=5
    GRUB_DISTRIBUTOR="$(test -f /etc/rfremix-release && sed 's, release .*$,,g' /etc/rfremix-release || sed 's, release .*$,,g' /etc/system-release)"
    GRUB_DEFAULT=saved
    GRUB_DISABLE_SUBMENU=true
    GRUB_TERMINAL_OUTPUT="console"
    GRUB_CMDLINE_LINUX="rd.lvm.lv=max-desktop/root rhgb intel_iommu=on iommu=pt rd.driver.pre=vfio-pci resume=/dev/mapper/max--desktop-root resume_offset=497664 quiet"
    GRUB_DISABLE_RECOVERY="true"
    
    # cat /proc/cmdline
    
    BOOT_IMAGE=/boot/vmlinuz-4.20.6-200.fc29.x86_64 root=/dev/mapper/max--desktop-root ro rd.lvm.lv=max-desktop/root rhgb intel_iommu=on iommu=pt rd.driver.pre=vfio-pci resume=/dev/mapper/max--desktop-root resume_offset=497664 quiet
    
    # free -m
                  total        used        free      shared  buff/cache   available
    Mem:          15787        1595       12952         331        1239       13578
    Swap:          8191           0        8191
    
    # swapon -v
    
    NAME          TYPE SIZE USED PRIO
    /var/swapfile file   8G   0B   -2
    
    # filefrag -v /var/swapfile
    
    Filesystem type is: ef53
    File size of /var/swapfile is 8589934592 (2097152 blocks of 4096 bytes)
     ext:     logical_offset:        physical_offset: length:   expected: flags:
       0:        0..    2047:     497664..    499711:   2048:            
       1:     2048..    4095:     501760..    503807:   2048:     499712:
       2:     4096..    8191:     507904..    511999:   4096:     503808:
       3:     8192..   16383:     516096..    524287:   8192:     512000:
    
    # journalctl -u systemd-hibernate
    
    ...
    -- Reboot --
    фев 10 00:31:40 max-desktop systemd[1]: Starting Hibernate...
    фев 10 00:31:40 max-desktop systemd-sleep[2131]: Failed to write hibernation disk offset: Permission denied
    фев 10 00:31:40 max-desktop systemd[1]: systemd-hibernate.service: Main process exited, code=exited, status=1/FAILURE
    фев 10 00:31:40 max-desktop systemd[1]: systemd-hibernate.service: Failed with result 'exit-code'.
    фев 10 00:31:40 max-desktop systemd[1]: Failed to start Hibernate.
    
    # ls -lh /var/swapfile
    
    -rw-------. 1 root root 8,0G фев  9 21:54 /var/swapfile
    
    $ groups
    
    max wheel kvm libvirt
    
    # cat /usr/lib/systemd/system/systemd-hibernate.service
    
    [Unit]
    Description=Hibernate
    Documentation=man:systemd-suspend.service(8)
    DefaultDependencies=no
    Requires=sleep.target
    After=sleep.target
    
    [Service]
    Type=oneshot
    ExecStart=/usr/lib/systemd/systemd-sleep hibernate
    

    dmesg после чистой загрузки и hibernate
    journalctl -b после чистой загрузки и hibernate

★★★★

Нет доступа на hibernate в polkite'е? Не знаю как на федоре, на убунте иногда hibernate не работает пока не добавишь специальный файлик в директорию polkit'а, разрешающий пользователю выполнять hibernate через upower и logind.

eternal_sorrow ★★★★★ ()
Последнее исправление: eternal_sorrow (всего исправлений: 1)

resume=/dev/mapper/max--desktop-root

А должно быть /var/swapfile. И сомнительна нужность resume_offset.

К слову, вместо /usr/lib/systemd/systemd-sleep hibernate (suspend) я бы говорил systemctl hibernate и systemctl suspend.

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

А должно быть /var/swapfile.

разве? вроде указывается раздел, а если файл, то ещё и offset файла. по крайней мере, в убунтах в такой конфигруации работало.

да и сейчас работает, вопрос только в правах.

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

К слову, вместо /usr/lib/systemd/systemd-sleep hibernate (suspend) я бы говорил systemctl hibernate и systemctl suspend.

во! поведение в точности такое, как и из меню KDE. suspend отрабатывает нормально, а hibernate пытается заснуть, мигает чёрный экран и потом окно блокированного сеанса KDE.

осталось это отдебажить =D

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

А должно быть /var/swapfile.

разве?

Если я правильно понимаю слова про resume= из man kernel-command-line, а также man systemd-hibernate-resume-generator, man systemd-hibernate-resume@.service и вывод systemctl cat systemd-hibernate-resume@.service, то resume= должен указывать на своп. Впрочем, 1) у меня своп всю жизнь был разделом и 2) не имею ни малейшего понятия, есть ли в Убунте на эту тему что-нибудь дистроспецифичное (если что, пишу с Федоры и про Федору).

К слову, если бы дело было в polkit'е, в ответ на /usr/lib/systemd/systemd-sleep hibernate либо был бы запрошен пароль, либо было бы сказано «низзя».

dexpl ★★★★★ ()
Последнее исправление: dexpl (всего исправлений: 2)
Ответ на: комментарий от dexpl

я конечно сейчас попробую, но если оно пытается заснуть на root-раздел и успешно засыпает, то это вообще как? root-раздел не является специальным разделом (т.е. swap), там нет специального файла. куда оно скидывает содержимое ОЗУ? или прописан какой-то резервный вариант?

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

Из ОП:

При вызове из меню KDE suspend to RAM засыпает и просыпается, а suspend to disk (aka hibernate) только мигнёт экраном и включается обратно. При вызове из консоли # /usr/lib/systemd/systemd-sleep hibernate и # /usr/lib/systemd/systemd-sleep suspend всё засыпает и просыпается. Хотя от юзера эти команды не срабатывают, permission denied.

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

если оно пытается заснуть на root-раздел и успешно засыпает, то это вообще как?

suspend засыпает в ОЗУ, ему безразличны разделы; hibernate же не засыпает (о чем и тема, собственно :)

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

journalctl -b | grep -iwe resume -e hibernat что-нибудь интересное говорит? Есть ли возможность создать swap-раздел и попробовать с ним?

прописал в конфиг ядра путь до swapfile

После чего, разумеется, перегрузился, верно?

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

suspend засыпает в ОЗУ, ему безразличны разделы; hibernate же не засыпает (о чем и тема, собственно :)

я, видимо, запутал всех. что такое suspend to ram и suspend to disk я знаю, что для этого требуется (логически) я тоже знаю.

в моём случае проблема в том, что из меню KDE suspend to disk не срабатывает с симптомом - мигнул чёрный экран и сразу появился экран блокировки sddm, т.е. комп даже не засыпал. так же не работает и $ systemctl hibernate. т.е. надо смотреть что происходит при этой команде и искать что не нравится.

но! если вызывать команду # /usr/lib/systemd/systemd-sleep hibernate (которую я взял из юнита /lib/systemd/system/systemd-hibernate.service) от root, то комп благополучно засыпает и просыпается. это мне даёт оснавания полагать, что технически всё норм, комп может уснуть и проснуться в swap-file, в текущей конфигурации ОС и на моём железе. осталось лишь разрулить права.

это всё было при обстановке описанной в начальном посте, т.е. swap-file и конфиги как в начальном посте.

что касаемо твоих рекомендаций:

# journalctl -b | grep -iwe resume -e hibernat 
фев 10 18:29:19 max-desktop kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.20.6-200.fc29.x86_64 root=/dev/mapper/max--desktop-root ro rd.lvm.lv=max-desktop/root rhgb intel_iommu=on iommu=pt rd.driver.pre=vfio-pci resume=/var/swapfile resume_offset=497664 quiet
фев 10 18:29:19 max-desktop kernel: Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.20.6-200.fc29.x86_64 root=/dev/mapper/max--desktop-root ro rd.lvm.lv=max-desktop/root rhgb intel_iommu=on iommu=pt rd.driver.pre=vfio-pci resume=/var/swapfile resume_offset=497664 quiet
фев 10 18:29:19 max-desktop dracut-cmdline[328]: Using kernel command line parameters: BOOT_IMAGE=/boot/vmlinuz-4.20.6-200.fc29.x86_64 root=/dev/mapper/max--desktop-root ro rd.lvm.lv=max-desktop/root rhgb intel_iommu=on iommu=pt rd.driver.pre=vfio-pci resume=/var/swapfile resume_offset=497664 quiet
фев 10 18:30:49 max-desktop systemd[1]: Dependency failed for Resume from hibernation using device /var/swapfile.
фев 10 18:30:49 max-desktop systemd[1]: systemd-hibernate-resume@var-swapfile.service: Job systemd-hibernate-resume@var-swapfile.service/start failed with result 'dependency'.

это было при такой загрузке ядра

# cat /proc/cmdline 
BOOT_IMAGE=/boot/vmlinuz-4.20.6-200.fc29.x86_64 root=/dev/mapper/max--desktop-root ro rd.lvm.lv=max-desktop/root rhgb intel_iommu=on iommu=pt rd.driver.pre=vfio-pci resume=/var/swapfile resume_offset=497664 quiet

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

как федора по дефолту сформировала fstab, так и есть. проблем это не вызывало прежде. не может же это для юзера быть ro?

/var/swapfile в корне, в отдельный раздел не вынесено.

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

я-то решил, что из-за ro система не может «сохраниться».

не может же это для юзера быть ro?

для юзера все же должен быть раздел(?) в rw, иначе он останется без своих документов (файлов).

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

для юзера все же должен быть раздел(?) в rw, иначе он останется без своих документов (файлов).

сейчас проблема локализована до того, что от root комп может в suspend to disk, а от user не может. вот и пытаюсь выяснять почему так. если корень монтируется в ro, то root при обновлении системы, при создании этого swapfile и прочем не мешало это. а юзеру внезапно мешает? мне кажется, не в ro проблема.

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

так зайди сподрута и попробуй загибернейтиться. если получится - юзер ro виноват, а нет - значит служба какая то. это так, имхо. я с таким же столкнулся на минте. в глубокий сон уходит - да и ладно.

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

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

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

и как ты можешь заметить, это не в параметрах ядра через конфиг grub прописывается, и не через fstab

# cat /etc/fstab

/dev/mapper/max--desktop-archive                /media/archive          ext4    defaults,user                   1 2
/dev/mapper/max--desktop-home                   /home                   ext4    defaults                        1 2
/dev/mapper/max--desktop-root                   /                       ext4    defaults                        1 1
/var/swapfile                                   none                    swap    defaults,discard                0 0
UUID=1836-1A51                                  /boot/efi               vfat    umask=0077,shortname=winnt      0 2
kma21 ★★★★ ()

куря логи выяснил, что имеет к этому отношение selinux. после его отключения стало засыпать и от юзера.

не могу сказать, что проблема решена, всё-таки хотелось бы тогда понять где я должен был увидеть ругань selinux на неправомерный доступ и как его настроить на это.

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

всё-таки хотелось бы тогда понять где я должен был увидеть ругань selinux на неправомерный доступ и как его настроить на это

По идее если установлен и работает setroubleshoot, seapplet должен выдавать и ругань, и советы по настройке.

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

а ты знаешь какие-то годные мануалы по selinux?

https://docs.fedoraproject.org/en-US/quick-docs/getting-started-with-selinux/ https://docs.fedoraproject.org/en-US/quick-docs/changing-selinux-states-and-m... https://docs.fedoraproject.org/en-US/quick-docs/troubleshooting_selinux/

Ничего более годного не знаю.

желательно на русском

Увы…

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

Извини, что кастую в прошедший тред, но не с кем поделиться =D

Включил обратно selinux, восстановил гуёвину с логами selinux и она мне после первого же hibernate русским по белому написала что не нравится.

Оч. круто!

kma21 ★★★★ ()