Bug 27534 - всегда включать поддержку USB клавиатур в initrd
: всегда включать поддержку USB клавиатур в initrd
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/make-initrd)
: unstable
: all Linux
: P3 enhancement
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2012-07-11 13:55 by
Modified: 2016-06-28 14:32 (History)


Attachments
Содержимое рабочего initrd с неработающей клавиатурой (22.54 KB, text/plain)
2012-12-05 11:31, Evgenii Terechkov
no flags Details
Описание машины (115.23 KB, application/x-bzip)
2012-12-05 11:35, Evgenii Terechkov
no flags Details
Отчёт system-report о машине vsdman (80.91 KB, application/x-bzip2)
2013-01-27 01:12, Evgenii Terechkov
no flags Details


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2012-07-11 13:55:50
На современном серверном оборудовании бюджетного сегмента PS/2 отсутствует как
класс и клавиатуру можно подключить только по USB.

Предлагаю включать поддержку USB и USB-клавиатур в initrd, дабы можно было в
случае критических сбоев повводить команды в initrd.
------- Comment #1 From 2012-07-11 14:27:41 -------
Для этого есть: FEATURES += usb
------- Comment #2 From 2012-07-11 18:39:39 -------
Вопрос в том, чтобы сделать это фичей по умолчанию, раз уж ps/2 стабильно
вымирает. Лично я за.
------- Comment #3 From 2012-07-11 23:46:04 -------
Хорошо
------- Comment #4 From 2012-07-20 16:56:49 -------
Скорее разумно, хотя есть ещё vm всякие.
------- Comment #6 From 2012-08-06 16:30:23 -------
просьба снимается. мозгов слишком мало у этой фичи.
------- Comment #7 From 2012-08-07 14:33:12 -------
(В ответ на комментарий №5)
> Прошу проверить:
> 
> http://git.altlinux.org/people/legion/packages/make-initrd.git?p=make-initrd.git;a=shortlog;h=refs/heads/keyboard

Переделал реализацию. Теперь автоугадав смотрить на led у устройства. Модули
добавляются так что будут загружены при появлении shell на любой стадии.
Прошу проверить.
------- Comment #8 From 2012-08-08 23:01:44 -------
(In reply to comment #7)
> Прошу проверить.
Как минимум есть незначащая очепятка в тексте:
-+               echo "Adding resue modules ..."; \
++               echo "Adding rescue modules ..."; \

А все эти hid-logitech-dj -- они часом не для мультимедийных кнопочек, которые
initrd не слишком специального вида обычно по барабану?  Также и USB2/3 kbd
пока не попадались, равно как и секретарши с совместимой скоростью набора...

В остальном будто хорошо, постараюсь добраться до железа.
------- Comment #9 From 2012-08-09 00:01:05 -------
(В ответ на комментарий №8)
> (In reply to comment #7)
> > Прошу проверить.
> Как минимум есть незначащая очепятка в тексте:
> -+               echo "Adding resue modules ..."; \
> ++               echo "Adding rescue modules ..."; \

Спасибо, исправлю.

> А все эти hid-logitech-dj -- они часом не для мультимедийных кнопочек, которые
> initrd не слишком специального вида обычно по барабану?  Также и USB2/3 kbd
> пока не попадались, равно как и секретарши с совместимой скоростью набора...

Видимо, ты говоришь про набор модулей "по умолчанию". Он взят из dracut. Этот
список как оценка сверху, когда не удалось ничего определить. На всех доступных
мне компах всегда клавиатура определялась. На машинах, где не нужны такие
модули вообще будет достаточно: DISABLE_FEATURES += keyboard.

> В остальном будто хорошо, постараюсь добраться до железа.

Так это самое главное.
------- Comment #10 From 2012-08-15 16:10:33 -------
Видимо интереса к этой проблеме больше нет.
------- Comment #11 From 2012-08-15 17:12:24 -------
Инперес есть, просто никак не доберусь до железа.
------- Comment #12 From 2012-09-09 15:09:38 -------
Месяц прошёл. Закрываю.
------- Comment #13 From 2012-12-05 11:31:42 -------
Created an attachment (id=5665) [details]
Содержимое рабочего initrd с неработающей клавиатурой

Собрал текущий master (коммит c53eec3b1c3419735bf5e65ca196087b698f13fe). Initrd
загружается, модули клавиатуры в нём вроде бы есть, но она почему-то всё равно
не работает.
------- Comment #14 From 2012-12-05 11:33:48 -------
Переоткрою, т.к. добрался потестировать.
------- Comment #15 From 2012-12-05 11:35:01 -------
Created an attachment (id=5666) [details]
Описание машины

В аттаче описание машины от system-report.
------- Comment #16 From 2012-12-10 18:04:45 -------
Посидели тут с шреком с похожей проблемой. Я кажется нашёл рейс в загрузке
таких модулей. На этой неделе надеюсь исправить.
------- Comment #17 From 2012-12-11 18:13:40 -------
Не могли бы вы попробовать версию из master ?
------- Comment #18 From 2012-12-12 13:39:43 -------
Собрал из коммита f5d4365dfdcad3d9e956c3d0a91624e76b4dbdeb.

Проверял с ядрами 3.6.9/10-std-def-alt1.

Машина после появления обычных строчек:
===============================================================
drivers/rtc/hctosys.c: unable to open /dev/rtc0
chdir: /etc/syslog.d: No such file or directory
===============================================================

останавливалась и не реагировала на клавиатуру (даже на SysRq). Ждал по две-три
минуты.
------- Comment #19 From 2012-12-12 15:39:44 -------
(В ответ на комментарий №18)
> Собрал из коммита f5d4365dfdcad3d9e956c3d0a91624e76b4dbdeb.
> 
> Проверял с ядрами 3.6.9/10-std-def-alt1.
> 
> Машина после появления обычных строчек:
> ===============================================================
> drivers/rtc/hctosys.c: unable to open /dev/rtc0
> chdir: /etc/syslog.d: No such file or directory
> ===============================================================

Чудеса.
------- Comment #20 From 2012-12-12 16:55:48 -------
Попробовал ещё на домашнем ноутбуке. После 5-15-ти минут ожидания вывалилось
следующее:
=================================================
initrd: loop: ERROR: Unable to detect the usb keyboard
initrd: Stage 'loop' failed
initrd: This shell remains here for debug ...
(initramfs)_
=================================================
при этом USB-клавиатура, конечно, не работала.
------- Comment #21 From 2012-12-12 17:31:46 -------
(В ответ на комментарий №20)
> при этом USB-клавиатура, конечно, не работала.

Я нашёл и исправил одну опечатку, но сути это не изменила. Проблема в том, что
udev initrd не загружает usbhid вообще. Я в последних коммитах решил проверить
предположение, что udevd просто не успевает получить и обработать эвенты от
ядра ... я сделал правило и фильтр, что бы initrd ожидал появления эвентов от
клавиатуры и не останавливал udev до их получения, но этого не произошло... я
не вижу этих эвентов.

Если же собрать образ с MODULES_PRELOAD += usbhid, то польза немедленно
извлечётся.
------- Comment #22 From 2012-12-14 19:13:34 -------
Собрал коммит 9798450c85d77c517d2336de1236f4486e0ccf0b. Сделал образ с
MODULES_PRELOAD += usbhid. При загрузке через 3 минуты показалось сообщение
Stage 'loop' failed и USB-клавиатура при этом не работала. Т.к. это был уже
домашний ноутбук, у которого есть встроенная AT-клавиатура, то смог распечатать
вывод lsmod. Сравнил его с выводом для полностью загруженной и рабочей системы
(на 3.6.10-std-def-alt1). Сделал образ с MODULES_PRELOAD += hid-generic (в
добавок к usbhid).

Результаты:
- По прежнему висит ровно 3 минуты и вываливается в (initramfs) с сообщением
Stage 'loop' failed
+ При этом USB-клавиатура работает
+ Если нажать Ctrl-D/exit, то загрузка продолжается.
------- Comment #23 From 2012-12-14 19:24:45 -------
(В ответ на комментарий №22)
> Результаты:
> - По прежнему висит ровно 3 минуты и вываливается в (initramfs) с сообщением

Это общее время. оно регулируется rootdelay=N

> Stage 'loop' failed
> + При этом USB-клавиатура работает

Осталось понять почему эти модули не грузятся через udev. У меня есть теория
что в /lib/udev/initramfs-rules.d нехватает каких-то правил.

> + Если нажать Ctrl-D/exit, то загрузка продолжается.

Там сейчас сделано ожидание клавиатуры. На самом деле оно не нужно т.к.
инициализация usb клавиатуры не должно тормозить загрузку образа.
------- Comment #24 From 2012-12-22 14:04:51 -------
0.7.9-alt1-21-g1d24170

Теперь должно работать как нужно.
------- Comment #25 From 2012-12-23 12:56:15 -------
Дома работает. На следующей неделе проверю на работе.
------- Comment #26 From 2012-12-23 20:04:17 -------
(In reply to comment #24)
> 0.7.9-alt1-21-g1d24170
Ух.
------- Comment #27 From 2012-12-23 22:27:04 -------
(В ответ на комментарий №26)
> (In reply to comment #24)
> > 0.7.9-alt1-21-g1d24170
> Ух.

Мне не удалось пока определить какие hid нужны для конкретного usb устройства
(если нужны), но я научился не копировать все hid модули.

Наверное, ещё можно добавить оптимизацию: не добавлять hid если ни одна
клавиатура не требует usbhid... но я не уверен.
------- Comment #28 From 2012-12-24 06:01:23 -------
На работе тоже работает. 3.6.11-std-pae

Спасибо за работу, Алексей.
------- Comment #29 From 2013-01-21 13:10:16 -------
Добавлю немного.
Необходимо всегда включать USB в initrd, т.к. при использовании LUKS запрос на
ввод пароля происходит раньше загрузки модулей USB.

В результате имею USB клавиатуру, невозможно ввести пароль.
------- Comment #30 From 2013-01-26 22:20:02 -------
Похоже, не везде работает одинаково хорошо.

Дома обновил make-initrd до 0.8.0-alt1, 3.7.4-std-def со свежесгенерированным
initrd заработало без проблем.

Обновление make-initrd до той же версии и запуск на одном из серверов (где как
раз клавиатуру можно подключить только по USB) дают такое:
===============================================================
root@vdsman /etc # make-initrd 
Config file: /etc/initrd.mk
Generating module dependencies on host ...
depmod: WARNING: could not open
/lib/modules/2.6.32-ovz-el-alt79/modules.builtin: No such file or directory
Guessed modules: ext4 pci_hotplug shpchp hpsa scsi_mod sd_mod crc-t10dif sd_mod 
Guessed features: add-modules cleanup compress fstab keyboard syslog 
Creating initrd image ...
Adding device-mapper support ...
Adding modules ...
Adding modules (preload) ...
Adding usb keyboard support ...
add-module: No module "atkbd" found for kernel 2.6.32-ovz-el-alt79
make: *** [keyboard] Ошибка 1
make: *** [all] Ошибка 1
===============================================================
------- Comment #31 From 2013-01-27 00:36:41 -------
(В ответ на комментарий №30)
> depmod: WARNING: could not open
> /lib/modules/2.6.32-ovz-el-alt79/modules.builtin: No such file or directory

Это больше похоже на проблемы с конкретным ядром.
------- Comment #32 From 2013-01-27 00:49:25 -------
Да, подозреваю это https://bugzilla.altlinux.org/show_bug.cgi?id=27866
------- Comment #33 From 2013-01-27 00:59:06 -------
Хотя нет, вру. Текущий initrd для этого ядра этого сервера сгенерирован как раз
make-initrd-0.7.9-alt1, вполне успешно. И откат до этой версии снова позволяет
создать образ initrd (идентичный с текущим с точностью до обновившихся с тех
пор пакетов).

Я не уверен, что уместно только после обновления make-initrd ломать генерацию
образов для некоторых ядер. Думаю, что также сломает некоторую часть транзакций
apt-а. Т.е., я думаю, что на стыке 0.7.9 -> 0.8.0 есть регресс.
------- Comment #34 From 2013-01-27 01:12:58 -------
Created an attachment (id=5720) [details]
Отчёт system-report о машине vsdman

Прикладываю описание вышеупомянутой машины с ovz-ядром.
------- Comment #35 From 2013-01-30 11:34:55 -------
с 0.8.0-alt1 и включённой опции "FEATURE = keyboard", клавиатура доступна для
ввода пароля от разделов LUKS. Спасибо.
------- Comment #36 From 2016-06-27 14:13:19 -------
Исправлено
------- Comment #37 From 2016-06-28 11:39:30 -------
Так. А вот вопрос, для make-initrd ли этот баг ? Может, это баг для kernel-* ?
Bug 32227
------- Comment #38 From 2016-06-28 12:05:33 -------
(In reply to comment #37)
> Так. А вот вопрос, для make-initrd ли этот баг ? Может, это баг для kernel-* ?
> Bug 32227

Именно make-initrd кладёт необходимые модули ядра в образ, чтобы клавиатура
работала. В ядре поддержка есть, но в виде модулей. Если эту проблему решать в
ядре, то предётся вкомпилить эти модули в ядро.
------- Comment #39 From 2016-06-28 14:32:12 -------
(In reply to comment #38)

> > Так. А вот вопрос, для make-initrd ли этот баг ? Может, это баг для kernel-* ?
> > Bug 32227
> 
> Именно make-initrd кладёт необходимые модули ядра в образ, чтобы клавиатура
> работала.

Да, что-то я, похоже, прогнал. Указание параметра init же не отменяет загрузку
initrd. Так, тогда вопрос. А когда и где исправлено ? В p8 в пятницу наткнулся.