Вопрос или проблема
Когда я вхожу в систему с помощью LightDM на своем ноутбуке, работающем на Debian Unstable, он начал зависать примерно на 2 минуты, пока journalctl
не выводит сообщение kernel: random: crng init done
. Когда я нажимаю на случайные клавиши на клавиатуре, пока он зависает, вход выполняется быстрее (около 10 секунд). Раньше у меня не было этой проблемы, есть ли способ ее исправить?
Редактирование: использование linux-image-4.15.0-3-amd64
вместо linux-image-4.16.0-1-amd64
работает, но я не хочу использовать более старое ядро.
Действительно, как указал Bigon в своем ответе, это оказалось ошибкой ядра, появившейся в версии 4.16:
Эта ошибка была введена изменением “crng_init > 0” на “crng_init > 1” в этом коммите: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=43838a23a05fbd13e47d750d3dfd77001536dd33
Это изменение непреднамеренно влияет на urandom_read, вызывая состояние crng_init==1 как неинициализированное и заставляя urandom блокироваться, несмотря на то, что это состояние существует специально для поддержки некриптографических нужд во время загрузки: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/char/random.c#n1863
Возврат 43838a23a05f (“random: fix crng_ready() test”) устраняет ошибку (тестировано на 4.16.5-1), но это может вызвать проблемы с безопасностью (CVE-2018-1108 упомянут в 43838a23a05f). Я тестирую более локализованное исправление, которое должно быть более приемлемо для upstream.
(https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=897572#82)
…Тем не менее, вы можете попробовать использовать haveged
или rng-tools
для более быстрой генерации энтропии.
Это изменение (ошибка?) в ядре, см.: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=897572
Для смягчения проблемы установка rng-tools5
кажется помогает. Обратите внимание, что я не знаю, оказывает ли установка этого пакета влияние на генерацию ключей для сильной криптографии.
Редактирование: Видимо, обновление util-linux до версии 2.32 должно исправить проблему
Это ошибка ядра, которая может возникать с разными ядрами.
Запуск apt-get install rng-tools
как su
в терминале должен помочь.
Может также произойти после удаления раздела подкачки
Зависание перед kernel: random: crng init done
может также происходить после удаления раздела подкачки.
Если раздел подкачки удален, конфигурационный файл /etc/initramfs-tools/conf.d/resume
должен быть либо полностью пустым, либо содержать RESUME=
. Удалите любой номер UUID. RESUME=NONE
не является допустимым.
$ sudo vim /etc/initramfs-tools/conf.d/resume
Для применения этих изменений необходимо обновить начальный RAM-файловый мост:
$ sudo update-initramfs -u
В моем случае я работал на виртуальной машине Debian Buster (ядро 4.19.0-4-amd64
) на Proxmox VE.
Решением было добавление устройства VirtIO RNG к виртуальной машине. В Proxmox это делается путем редактирования конфигурационного файла виртуальной машины.
В моем случае я отредактировал /etc/pve/qemu-server/110.conf
и добавил следующую строку:
args: -device virtio-rng-pci
Пользовательские инструменты (например, rng-tools
или haveged
) не были нужны.
rng-tools
помогает только если в вашей системе есть аппаратная поддержка случайных чисел, например, “Secure Key” от Intel. Это появилось с Ivy Bridge. Мои системы с процессорами 1037u (на базе ivy bridge) не имеют этой аппаратной поддержки. Поэтому rng-tools
не помогают.
На другой системе с процессором sandy bridge i3 rng-tools
помогают. Служба rngd
должна быть запущена очень рано в процессе загрузки, чтобы заполнить очередь энтропии. Это происходит в последовательности загрузки Ubuntu, я не знаю, так ли это для других дистрибутивов, но вы можете это выяснить, так как начало rngd
логируется в системный журнал.
В моем случае запрос на разблокировку LUKS отправлен на консоль TTY. Я добавил последовательный порт на Proxmox и смог заполнить запрос с Xterm.js.
В /etc/default/grub
console=tty0 console=ttyS1,115200
Решение найдено на https://raspberrypi.stackexchange.com/a/136648/114760
.
Ответ или решение
Проблема с зависанием системы при входе в LightDM на вашем ноутбуке под управлением Debian Unstable, пока не появится сообщение "kernel: random: crng init done", связана с дефицитом энтропии в системе. Это явление часто встречается в старших версиях ядра, таких как linux-image-4.16.0-1-amd64, и может быть связано с изменениями, которые были внесены в ядро.
Теория
Энтропия используется в компьютерных системах для генерации случайных чисел, которая необходима для различных вычислительных задач, особенно связанных с криптографией. Ядро Linux генерирует случайные числа с использованием источников энтропии, которые могут возникать от случайных событий, таких как передвижения курсора или действия клавиатуры. Когда системе не хватает энтропии, она может испытывать задержки при выполнении процессов, требующих случайных чисел.
В вашем случае, зависание связано с изменениями, внесенными в ядро версии 4.16.0, когда были изменены проверки инициализации генератора случайных чисел (CRNG). В результате компонент системы, который пытается получить случайные данные из /dev/urandom или посредством вызова getrandom(), сталкивается с нехваткой энтропии, что приводит к блокировке и задержке.
Пример
Эта проблема обсуждалась в сообществе Debian и найдены временные решения, которые включают возврат к более старым версиям ядра (например, linux-image-4.15.0-3-amd64), где таких задержек не наблюдается. Однако ряд пользователей считает это лишь временной мерой и предпочитает обновленные ядра из соображений безопасности и новых возможностей. В обсуждаемом случае, проблема возникает из-за патча к ядру, что было подробно рассмотрено разработчиками Debian и отразилось на документации — например, изменением условий crng_init().
Применение
-
Установка Пакетов для Увеличения Энтропии:
Чтобы обойти эту проблему, можно использовать программные инструменты, такие как rng-tools или haveged, которые помогают увеличить количество доступной энтропии в системе. Эти приложения извлекают случайные данные из различных источников и уменьшают время ожидания ввода системы. Установка этих инструментов возможна через терминал с помощью команды:sudo apt-get install rng-tools haveged
Эти программы позволяют системе быстрее инициализировать необходимый уровень энтропии, сокращая задержки.
-
Редактирование Конфигураций сети и RAMDISK:
- Если ваша конфигурация системы недавно менялась (например, удалён swap-раздел), следует проверить файл
/etc/initramfs-tools/conf.d/resume
и убедиться, что он не содержит никаких устаревших UUID. -
Обновите начальную файловую систему RAM для применения изменений командой:
sudo update-initramfs -u
- Если ваша конфигурация системы недавно менялась (например, удалён swap-раздел), следует проверить файл
-
Аппаратные Решения:
- Если вы используете виртуальную среду, такую как Proxmox, добавление устройства VirtIO RNG поможет распределить нагрузку генерации случайных чисел и сократить задержку инициализации при загрузке.
-
Для этого откройте конфигурационный файл виртуальной машины и добавьте строку:
args: -device virtio-rng-pci
Дополнительные соображения
Понимание особенностей генерации энтропии в ваших программных и аппаратных системах крайне важно для поддержания стабильной работы машины, особенно если вы работаете с системами, требующими надежности и быстродействия. Использование более новых версий программного обеспечения всегда сопряжено с потенциальной нестабильностью, но при правильном подходе и использовании открытых решений подобные проблемы могут быть минимализированы.
Учитывая важность и сложность этой задачи, рекомендуется соблюдать осторожность при работе с резюме и конфигурационными файлами системы. Обязательно создайте резервные копии, прежде чем вносить какие-либо изменения в конфигурацию или ядро системы.