Bug 29112

Summary: подсказка virtualbox про модули ядра контрпродуктивна
Product: Branch p7 Reporter: Andrei <admin>
Component: virtualboxAssignee: Andrey Cherepanov <cas>
Status: ASSIGNED --- QA Contact: qa-p7 <qa-p7>
Severity: normal    
Priority: P3 CC: boyarsh, d20052005, george, grizlik78, ikh1, m, mike, nbr, sin
Version: не указана   
Hardware: x86_64   
OS: Linux   
URL: http://altlinux.org/virtualbox
Bug Depends on:    
Bug Blocks: 29180    

Description Andrei 2013-06-26 11:07:00 MSK
Устанавливаю Virtualbox 4.2.12 на новую систему. Репозиторий р7. Все обновления стоят. 
Не устанавливаются модули ядра. 

При запуске любой машины выдает:

Kernel driver not installed (rc=-1908)

The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing

'/etc/init.d/vboxdrv setup'

as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.

service vboxdrv setup -выдает ошибку
Comment 1 Aleksey Borisenkov 2013-06-27 13:32:59 MSK
По-хорошему, это сообщение про '/etc/init.d/vboxdrv setup' и про компиляцию модулей надобы вообще изжить из дистрибутивного virtualbox
Comment 2 Aleksey Borisenkov 2013-06-27 13:35:08 MSK
И заменить его на предолжение установить пакет
kernel-modules-virtualbox-$flavour
где $flavour это значение для загруженного ядра (std-def, std-pae и т. д.)
А автоматически устанавливать модули вряд ли возможно. Разве что в составе дистрибутива.
Comment 3 IvanKhakhaev 2014-01-08 19:48:34 MSK
В p7 текущая версия virualbox - 4.2.16, а версии модулей ядра kernel-modules-virtualbox-$flavour имеют версию 4.3.4
Потому и не работает.
Comment 4 Michael Shigorin 2015-04-20 12:34:16 MSK
_Возможно_, есть смысл добавить соответствующий мозг в update-kernel, чтоб можно было в юзерспейсных пакетах подкладывать ему данные или скриптики, которые добавят нужные kernel-modules в список на установку -- но это не снимет саму проблему вида "не работает".
Comment 5 Evgeny Sinelnikov 2017-02-06 13:21:21 MSK
Да, эту запись, нужно поменять и добавить запуск сборки модулей. Только вот для этого требуется дополнительно пакеты установить, если их не хватает (компилятор нужной версии и заголовочные файлы ядра).

Но... По умолчанию, у нас почему-то при обновлении системы обновляются и заголовочные файлы ядра. Даже если они установлены возникает проблема, когда ядро в репах обновилось, а в системе - нет. Вариантов неудачных два:
- заголовочные файлы установлены, но они уже от нового ядра, а ядро установлено ещё старое;
- заголовочные файлы не установлены, но их установка ничего не даст, пока ядро не будет обновлено.

Первая проблема решается с помощью пакета apt-conf-etersoft-hold. Вообще, его следует устанавливать, по умолчанию, я думаю.

[sin@base vbox]$ rpm -ql apt-conf-etersoft-hold
/etc/apt/apt.conf.d/apt.eter.conf
[sin@base vbox]$ cat /etc/apt/apt.conf.d/apt.eter.conf
RPM
{
        Hold {
                // kernel-headers* and kernel-headers-modules*
                "^kernel-(headers|headers-modules)-.*";
        };
};

Вторая требует дополнительной логики и предложения обновить сначала ядро.
Comment 6 Evgeny Sinelnikov 2017-02-06 14:38:09 MSK
*** Bug 31548 has been marked as a duplicate of this bug. ***
Comment 7 Evgeny Sinelnikov 2017-02-06 14:41:22 MSK
В общем, есть только один удобный вариант, который понятно как сделать - вместо предложения о сборке скриптом, который всё равно не работает (или работает? никогда не пробовал, честно говоря), нужно научиться доустанавливать модули, если они имеются под текущую версию ядра. Либо просить сначала выполнить скрипт обновления ядра - update-kernel.
Comment 8 Michael Shigorin 2017-02-06 14:43:20 MSK
Или разрешить обновлять ядро при dist-upgrade...
Comment 9 nbr 2017-02-06 15:02:09 MSK
(In reply to comment #8)
> Или разрешить обновлять ядро при dist-upgrade...

Вот это было бы гораздо естественнее и лучше. 
Из-за устаревших и забытых к обновлению ядер возникают и подобные глюки...
А почему apt не может обновлять ядра, не удаляя их старые версии?
Comment 10 Evgeny Sinelnikov 2017-02-07 18:03:03 MSK
При всём при том, проблема установки пакета virtualbox всё равно остаётся - установку модулей ядра приходится указывать вручную. По сути, это означает, что установить через apt-get install virtualbox невозможно.

Если же написать скрипт устанавливающий модули для текущего flavour ядра и научить virtualbox выдавать вместо '/etc/init.d/vboxdrv setup' другую строку, в которой будет указан этот скрипт, то это будет простым и быстрым решением.

Если же это скрипт ещё и запускать научиться, то вообще всё автоматом будет работать. Ну, а менять логику обновления ядра в apt - это совсем другая история. Давайте этот вопрос решать в другой баге. А то всё упрётся в мейнтенера apt, а проблема virtualbox так и не будет решена. К тому же, как уже было сказано, всех проблема такой вариант не решает.
Comment 11 Dmytro 2017-02-10 22:03:28 MSK
(In reply to comment #9)
> (In reply to comment #8)
> > Или разрешить обновлять ядро при dist-upgrade...
> 
> Вот это было бы гораздо естественнее и лучше. 
> Из-за устаревших и забытых к обновлению ядер возникают и подобные глюки...
> А почему apt не может обновлять ядра, не удаляя их старые версии?
Вроде, может. Одновременное наличие разных версий 1 пакета разрешено не только для ядер, но и для видеодрайверов. Их обновляет apt.

(In reply to comment #10)
> При всём при том, проблема установки пакета virtualbox всё равно остаётся -
> установку модулей ядра приходится указывать вручную. По сути, это означает, что
> установить через apt-get install virtualbox невозможно.
> 
> Если же написать скрипт устанавливающий модули для текущего flavour ядра и
> научить virtualbox выдавать вместо '/etc/init.d/vboxdrv setup' другую строку, в
> которой будет указан этот скрипт, то это будет простым и быстрым решением.

Выдавать актуальное сообщение нужно. Из-за текущего много путаницы и вопросов у новичков. А автоматически устанавливать не всегда возможно, т.к. в текущем репозитории только 1 версия ядра, а запущено может быть и более старое.