Новости:

Форуму исполнилось 12 лет!

Мы в матрице .
Мы в телеге .

Главное меню

сборка VirtualBox

Автор kot, 25 января 2013, 09:52:11

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

kot

собираю VirtualBox-4.2.6 через sbopkg.
в info и slackbuild поправил версии и md5sum и запустил.
вот что получил

...
...
VirtualBox-4.2.6/debian/postrm
VirtualBox-4.2.6/debian/templates
VirtualBox-4.2.6/Config.kmk
patching file vboxdrv.sh.in
Hunk #2 FAILED at 293.
1 out of 2 hunks FAILED -- saving rejects to file vboxdrv.sh.in.rej

virtualbox:
Would you like to continue processing the rest of the
queue or would you like to abort?  If this failed
package is a dependency of another package in the queue
then it may not make sense to continue.

(Y)es to continue, (N)o to abort, (R)etry the build?:


не могу понять, чего, а главное как и где нужно пропатчить?

bormant

То есть, что произошло и почему понимаете и описать можете, так?
Тогда понять, что с этим делать, тоже не составит труда :-)

Попробуйте описать, что пошло не так...

kot

Цитата: bormant от 25 января 2013, 10:14:27
То есть, что произошло и почему понимаете и описать можете, так?
Тогда понять, что с этим делать, тоже не составит труда :-)

Попробуйте описать, что пошло не так...

как я понял мне советуют пропатчить файл vboxdrv.sh.in, его я нашел в src/VBox/Installer/linux, но где взять патч не написано.
и что один из двух кусков (наверное какогото кода) не удалось выполнить о чем записано в vboxdrv.sh.in.rej, который я не нашел.
и так как я далеко не программист, что делать со всей этой информацией я не знаю :)

bormant

#3
Поняли неправильно.
Ок, пойдём по порядку...

Для сборки запускается соответствующий слакбилд:
http://slackbuilds.org/slackbuilds/14.0/system/virtualbox/virtualbox.SlackBuild

В слакбилде выполняется распаковка тарбола:
tar xvf $CWD/$SRCNAM-${VERSION}.tar.bz2

на экран выводятся имена файлов (из-за опции v -- verbose):
...
VirtualBox-4.2.6/debian/postrm
VirtualBox-4.2.6/debian/templates
VirtualBox-4.2.6/Config.kmk

В слакбилде применяется патч (этот http://slackbuilds.org/slackbuilds/14.0/system/virtualbox/vboxdrv.sh-setup.diff):
patch -d src/VBox/Installer/linux -i $CWD/vboxdrv.sh-setup.diff

на экране получили:
patching file vboxdrv.sh.in
Hunk #2 FAILED at 293.
1 out of 2 hunks FAILED -- saving rejects to file vboxdrv.sh.in.rej

что на великом и могучем означает примерно:
Цитировать
латаем файл vboxdrv.sh.in
Фрагмент №2 ДАЛ СБОЙ в позиции 293.
1 из 2 фрагментов ДАЛ СБОЙ -- сохраняю забракованное в файл vboxdrv.sh.in.rej
подробности см. в руководстве по patch.

Поскольку в слакбилде ранее было выдано "set -e", неудачно завершившаяся команда (в данном случае patch ...) прерывает выполнение сценария с кодом ошибки.

sbopkg получает ненулевой код возврата от слакбилда, понимает, что сборка не удалась и предлагает что-то решить:
virtualbox:
Would you like to continue processing the rest of the
queue or would you like to abort?  If this failed
package is a dependency of another package in the queue
then it may not make sense to continue.

(Y)es to continue, (N)o to abort, (R)etry the build?:

что на великом и могучем означает примерно следующее:
Цитировать
virtualbox:
Продолжить обработку остальной части очереди или прервать? Если сбойный пакет представляет собой зависимость другого пакета в очереди, то продолжать не имеет смысла.

(Y)es -- продолжить, (N)o -- прервать, (R)etry -- попробовать собрать снова?:

Если теперь посмотреть в каталоге сборки в src/VBox/Installer/linux, увидим результат работы patch в виде файлов:
vboxdrv.sh.in.orig -- оригинальное содержимое vboxdrv.sh.in
vboxdrv.sh.in -- файл содержит успешно применённые фрагменты патча
vboxdrv.sh.in.rej -- файл содержит неприменившиеся фрагменты патча

Причина сбоев обычно в отличии исходного содержимого от содержимого патча в области внесения изменений. Например, в патче
a
-b
+bb
c

а в файле, к которому он применяется:
a
ab  <-- вот тут явный конфликт, патч ожидает, что тут было b
c

то есть оригинал изменился настолько, что патч к нему больше не подходит. Поэтому нужно открыть все 3 файла, .orig, недопропатченый, .rej, проанализировать ситуацию и решить, что делать дальше.


В .rej видим:
--- vboxdrv.sh.in.orig  2012-03-13 15:51:56.000000000 +0100
+++ vboxdrv.sh.in       2012-09-15 13:15:32.215798169 +0200
@@ -293,62 +289,7 @@
# setup_script
setup()
{
- ...
- ...
+    echo "Not implemented! Please use the virtualbox-kernel.SlackBuild available at SlackBuilds.org instead."
}

dmnstatus()
то есть замену тела setup() на вывод сообщения об ошибке. Внесём в vboxdrv.sh.in в указанной части изменения руками:
# setup_script
setup()
{
    echo "Not implemented! Please use the virtualbox-kernel.SlackBuild available at SlackBuilds.org instead."
}
и сотворим исправленный патч:
diff -u vboxdrv.sh.in.orig vboxdrv.sh.in > vboxdrv.sh-setup.diff
, которым заменим одноименный патч из слакбилда.

Теперь можно собирать.

Если интересно, разница в исходниках 4.2.0 и 4.2.6, не позволившая применить патч без бубна, была следующая:
27,29c27,32
< -    begin_msg "Uninstalling old VirtualBox DKMS kernel modules"
< -    $DODKMS uninstall vboxhost vboxdrv vboxnetflt vboxnetadp > $LOG
< -    succ_msg
---
> -    DKMS=`which dkms 2>/dev/null`
> -    if [ -n "$DKMS" ]; then
> -      begin_msg "Uninstalling old VirtualBox DKMS kernel modules"
> -      $DODKMS uninstall vboxhost vboxdrv vboxnetflt vboxnetadp > $LOG
> -      succ_msg
> -    fi
50,52c53,60
< -    begin_msg "Trying to register the VirtualBox kernel modules using DKMS"
< -    if ! $DODKMS install vboxhost $VERSION >> $LOG; then
< -      fail_msg "Failed, trying without DKMS"
---
> -    if [ -n "$DKMS" ]; then
> -      begin_msg "Trying to register the VirtualBox kernel modules using DKMS"
> -      if ! $DODKMS install vboxhost $VERSION >> $LOG; then
> -        fail_msg "Failed, trying without DKMS"
> -        DKMS=""
> -      fi
> -    fi
> -    if [ -z "$DKMS" ]; then


bormant


kot

Slackware package /tmp/virtualbox-4.2.6-i486-2_SBo.tgz created.
Спасибо огромное!  :yahoo_mini:

Цитата: bormant от 25 января 2013, 13:26:56
Вопросы?
Куда пойти учится?  :mail1_mini:

kot

рано радовался :(

# /etc/rc.d/rc.vboxdrv setup
Not implemented! Please use the virtualbox-kernel.SlackBuild available at SlackBuilds.org instead.

# ls /var/log/packages/ | grep virtual
virtualbox-4.2.6-i486-2_SBo
virtualbox-kernel-4.2.6_3.2.29_smp-i486-1_SBo


и что опять не так?

bormant

По поводу
/etc/rc.d/rc.vboxdrv setup
Not implemented! Please use the virtualbox-kernel.SlackBuild available at SlackBuilds.org instead.
вполне ожидаемо, это результат применения патча, выкинувшего реализацию функции setup(), именно его обсуждали выше.
А вот по поводу второго пакета -- будем разбираться.
Во-первых, проверяем наличие загруженного драйвера vboxdrv:
# lsmod | grep vboxdrv
Если отсутствует, пытаемся загрузить:
# modprobe vboxdrv
Загрузился?
Если да, и нужно загружать автоматически, проверяем /etc/modprobe.d/, /etc/rc.d/rc.modules и т.п. на предмет обеспечения загрузки.
Если драйвер загружен, проверяем отсутствие проблем с правами на устройство /dev/vboxdrv:
# ls -l /dev/vboxdrv

Если нет, выясняем, а файл драйвера на месте ли?
# find /lib/modules/$(uname -r)/misc -name vboxdrv.ko

Если файла драйвера нет, смотрим, а в пакете-то он есть:
# grep /vboxdrv\.ko /var/log/packages/virtualbox-kernel-*

Если драйвер на месте, права в порядке, а не работает, смотрим в /var/log/messages, не матерится ли vboxdrv при загрузке.

Кроме того, если внимательно почитать http://slackbuilds.org/repository/14.0/system/virtualbox-kernel/ станет ясно, что слакбилд собирает драйвер из тарбола исходников, выковырнутых из установленного VB. К слакбилду приложены выковырнутые исходники из 4.2.0, а также указано, что для других версий VB исходнички нужно выковырнуть самостоятельно, и скрипт для выковыривания приложен -- virtualbox-kernel-mksrctarball.sh (If you want to build a kernel module for an other virtualbox version you can use the included "virtualbox-kernel-mksrctarball.sh" which will generate the needed source package for you. You will need to have the coresponding virtualbox-ose version already installed).
Делали?

kot

#8
Цитата: bormant от 28 января 2013, 14:58:29
Делали?

мы сначала делаем, потом спрашиваем на форуме, а потом читаем :)
сделал, как только ты написал.

# tail /var/log/dmesg | grep vbox
[   14.662692] vboxdrv: Found 2 processor cores.
[   14.662836] vboxdrv: fAsync=0 offMin=0x3b2 offMax=0xbe7
[   14.662940] vboxdrv: TSC mode is 'synchronous', kernel timer mode is 'normal'.
[   14.662958] vboxdrv: Successfully loaded version 4.2.6_OSE (interface 0x001a0004).

# lsmod | grep vboxdrv
vboxdrv               222522  0

# ls -l /dev/vboxdrv
crw-rw---- 1 root vboxusers 10, 52 янв.  28 15:51 /dev/vboxdrv


теперь вот что.  :dash_mini:
может снести все и опять поставить ?

bormant

#9
Пользователь, от которого запускаете VB, в группе vboxusers состоит? ибо /dev/vboxdrv разрешено читать только root и членам группы vboxusers. Проверить просто:
$ groups
Добавить тоже (подробнее см. man usermod):
# usermod -a -G vboxusers user



ps. Поторопился, на картинку не посмотрел...
Вечерком будет под руками 32-битная установка, гляну, что не дособралось их ядрёных модулей (точно что-то с сетью). Под чистым x86_64 virtualbox не собирается, а ставить multilib на доступные машины мне пока не хочется.

bormant

Помимо ядрёного vboxdrv собираются
vboxnetflt
vboxnetadp
vboxpci

Проверьте их загруженность, наличие файлов, наличие от них сообщений в /var/log/messages...

kot

 :dance_mini:
все дело в них!
прописал в /etc/rc.d/rc.modules-3.2.29-smp для автозагрузки.
/sbin/modprobe vboxdrv 2>/dev/null
/sbin/modprobe vboxnetflt 2>/dev/null
/sbin/modprobe vboxnetadp 2>/dev/null
/sbin/modprobe vboxpci 2>/dev/null


bormant - боооооольшое спасибо! :)

bormant

Если правильно путаю, при установке virtualbox-kernelmodules (или virtualbox) создавался /etc/rc.d/rc.vboxdrv, в README.SLACKWARE до сих пор есть совет по прописыванию в rc.local и rc.local_shutdown /etc/rc.d/rc.vboxdrv start, /etc/rc.d/rc.vboxdrv stop соответственно.
В этой части что-то поменялось?

kot

Цитата: bormant от 29 января 2013, 09:12:52
Если правильно путаю, при установке virtualbox-kernelmodules (или virtualbox) создавался /etc/rc.d/rc.vboxdrv, в README.SLACKWARE до сих пор есть совет по прописыванию в rc.local и rc.local_shutdown /etc/rc.d/rc.vboxdrv start, /etc/rc.d/rc.vboxdrv stop соответственно.
В этой части что-то поменялось?
ээээх!  :sorry_mini:
нашел, пописал и все работает!
а столько шума поднял....
bormant, еще раз спасибо!