Рассмотрим каким образом в виртуальные машины Linux KVM/QEMU/Bochs можно добавить таблицы SLIC, которые используются для активации Windows 7/2008/8/2012.
Данные наработки основаны на материалах, найденных в данных форумах:
http://forums.mydigitallife.info/threads/12401-Modified-Bios-for-KVM-Qemu-Bochs-Bios
http://forum.proxmox.com/threads/6772-Proxmox-and-SeaBIOS-additional-parameters
Имеем ОС openSUSE 12.2 (x86_64):
Linux vs 3.4.33-2.24-desktop #1 SMP PREEMPT Tue Feb 26 03:34:33 UTC 2013 (5f00a32) x86_64 x86_64 x86_64 GNU/Linux
KVM установлен из репозитария YaST:
QEMU emulator version 1.1.1 (kvm-1.1.1-1.8.1), Copyright (c) 2003-2008 Fabrice Bellard
Задача сводится к тому, что нам необходимо заменить SeaBIOS, идущий в стандартном комплекте с KVM/QEMU/Bochs на модифицированный, содержащий в себе таблицы SLIC. Скачиваем и распаковываем SeaBIOS v1.7.2:
wget http://code.coreboot.org/p/seabios/downloads/get/seabios-1.7.2.tar.gz
tar zxvf seabios-1.7.2.tar.gz
mv seabios-1.7.2 seabios
cd ./seabios/src
Либо на ваше усмотрение можно также использовать SeaBIOS v1.7.1.
Теперь необходимо модифицировать файл исходных кодов "acpi.c":
wget http://hiveliberty.org:60080/other/seabios/172/acpi_slic.patch
patch acpi.c acpi_slic.patch
Патч для SeaBIOS v1.7.1 находится по соседству: http://hiveliberty.org:60080/other/seabios/171/acpi_slic.patch. Также оба патча можно найти здесь.
Теперь необходимо подготовить дамп таблицы SLIC. Если вы намерены перенести данные из вашего системного BIOS, то команда выглядит следующим образом:
xxd -i /sys/firmware/acpi/tables/SLIC | grep -v len | sed 's/unsigned char.*/static char SLIC[] = {/' > acpi-slic.hex
Для заранее подготовленного бинарного файла она немного изменится:
xxd -i ../slic.bin | grep -v len | sed 's/unsigned char.*/static char SLIC[] = {/' > acpi-slic.hex
Компилируем SeaBIOS:
cd ..
make
Останавливаем все виртуальные машины и копируем новый BIOS:
mv /usr/share/qemu-kvm/bios.bin /usr/share/qemu-kvm/bios.bin-dist
cp ./out/bios.bin /usr/share/qemu-kvm/
Запускаем виртуальные машины. В гостевой ОС Windows с помощью утилиты SLIC ToolKit проверяем наличие таблиц SLIC в BIOS виртуального окружения:
Активируем ОС Windows:
Дмитрий, пиратствуете? 🙂
С 29 марта я свободен, ай-да грабить корованы 😀
Нет, не пиратствуем. В тексте же написано: "Если вы намерены перенести данные из вашего системного BIOS..." 😉
Желаю удачно "освободится", если что звоните/пишите, проконсультирую 😉
Дмитрий я так понимаю вы решили все же использовать все прелести виртуализации на работе ? Вообще для windows сервер наверное проще настроить KMS сервер активации чем париться со SLIC таблицами . Девайсы со SLIC таблицами как правило используется в OEM решениях.
Хочешь, не хочешь, а прелести виртуализации тебя сами накроют 🙂 Работодатель желает по максимуму сэкономить на оборудовании.
От я даже не знаю стоит ли возиться с KMS ради одиноко стоящего сервера терминалов... Или проще перенести таблицы SLIC в BIOS виртуального контейнера.
Дмитрий , ну из за одного сервера конечно нет смысла настраивать KMS сервер . Кстати судя по скрину виртуальная машина будет жить на ноутбуке ? Может все же сервер терминалов на 2003 Windows сервер настроить ? Я по роду деятельности в липецке имею дело с виртуальными машинами , но использую Microsoft Hyper V , что могу сказать по этому поводу , Windows сервер 2008 очень уж требователен к пямяти и процессорному времени, а 2003 на itel atom работает в virtualbox на freebsd и загрузка системы довольно приемлемая
Виртуальная машина должна была работать на сервере. Но планы изменились, сейчас она мигрировала в дата-центр в Германии (http://www.sim-networks.com/vds/esxi?pid=442) на VMware vSphere Hypervisor (ESXi) v5.1 🙂 А что касается выбора ОС, то, что заказчик потребовал, то и получил. Я не гуру в виртуализации, но народ пишет, что VirtualBox – наверно, самый удобное решение среди бесплатных, однако самое неэффективное с точки зрения использования ресурсов. Говорят, что Linux KVM на порядок производительнее, ибо реализован на уровне ядра с использованием возможностей по виртуализации современных CPU: Intel VT и AMD-V. Собственно именно этим был обусловлен выбор в пользу openSUSE.
lsd25 на форуме proxmox это я
hiveliberty.org:60080 - тоже мое
Хочу просто предупредить, что hfs я у себя вырубил, потому hiveliberty.org:60080 не доступен.
p.s. запись находил давно еще эту)
Честно говоря, я не знаю, насколько этот материал еще актуален. С момента его написания больше к данной теме не возвращался. В любом случае спасибо вам за публикацию своих наработок и за предупреждение 🙂
Актуально, пока что, для тех кто слик юзает для win 7 в виртуалках под qemu-kvm. Ну и мало ли кому еще)
Под свежий seabios версии 1.8.2 я патчик себе поправил, так на всякий случай.
Для меня уже не шибко актуальна эта тема с патчем)
Ну и, кстати, наработки-то не мои даже. Я сам нашел тему где-то с этим патчем, но человек давно не возился с ним. А другие методы по интеграции slic у меня не работали. Вот и сравнил оригинальный и модифицированный файл патчем для доступной версии на то время.
Можно сказать, что поддержал тему патча немного)
Будем наедятся, что кому-нибудь это еще пригодится 🙂 Спасибо вам за труды.
Поделитесь плиз свежим патчем под 1.8.2
У меня такового, к сожалению, нет.
🙁 Жаль, видимо Эйно здесь не бывает...
Написал ему по электронной почте. Если ответит, дам знать.
Вот патчи: http://rghost.ru/78prKwt9W
А вот комментарий автора: "Юзал на proxmox подобные биосы. С последними версиями сталкивался с тем, что Окна уходили в постоянную загрузку на бутскрине. Змейка бегает и бегает.
Методом тыка выяснил, что необходимо подменять файл acpi-dsdt.aml скомпилированным вместе с новым биосом. Тогда все окей становалилось.
С патчами компиляция идет, проверил. А вот на работу не проверил."
Спасибо еще раз Эйно за проделанную работу.
Решил проверить на последних версиях наличие слик таблицы в биосе через слик тулкит. А вот нифига нет. На последней 1.7.3 есть, а на 1.9.0 нет..
Т.е. патчи не рабочие?
Нет, не работают. Причем, перестали работать, как оказалось, с 1.7.3 версии.. В 1.7.5.2 уже не вшивался SLIC.
Жаль 🙁 Но спасибо за информацию.
В общем, я тут почитал и протестил. С новыми версиями можно забить на этот патч!)
Берем наш полученный SLIC, без конвертации в hex и цепляем его через аргумент acpitable file
В моем случае в proxmox в конфиге виртуалке выглядело так
args: -acpitable file=/usr/share/kvm/slic/SLIC
Собственно, статья, которая побудила попробовать этот аргумент
http://habrahabr.ru/post/247597/
О, спасибо. Такой метод намного проще.
Спасибо, будем пробовать...
Млин, то ли лыжи не едут, то ли гранаты у меня не той системы...
Подскажите, вроде всё прикрутил, но в гостевой ОС RSDT = BOCHS BXPCRSDT, хотя в реальном ACPI параметр соответствует SLIC?
Linux SRV1 4.2.2-1-pve #1 SMP Mon Oct 5 18:23:31 CEST 2015 x86_64 GNU/Linux
seabios 1.8.2
Если патчем делаешь со свежим сиабиосом, то не прокатит. Выше в комментариях написал об этом.
На mydigitallife есть патч более правильный, но его надо подгонять под свежие версии. Это для подключения slic. Но зачем патчить, когда и так уже из коробки работает подключение файла acpi таблицы...
Да я уже и патчем, и параметром args: acpi подставляю... не работает почему то...
В “живой» винде параметр RSDT соответствует таблице слик, в виртукалке значение равно BOCHS BXPCRSDT, XSDT вообще отсутствует, соответственно активация не проходит 🙁
почитал про acpi.c, там в шапке начиная с 1.7.5 версии
// Support for generating ACPI tables (on emulators)
// DO NOT ADD NEW FEATURES HERE. (See paravirt.c / biostables.c instead.)
я так понимаю что патчи работать и не будут, надо писать новые под biostables.c
Да, там всякие изменения в структуре грянули) Перелопачивать надо.
Но оно не нужно, ибо можно скомпилировать свежую версию seabios и в конфе виртуалки прописать такое, например:
args: -bios /usr/share/kvm/190/orig/bios-256k.bin -acpitable file=/usr/share/kvm/slic/SLIC
Лично у меня прекрасно, подцепил) Proxmox самый свежий в продакшине.