неделя, 4 декември 2011 г.

VMX и Nested KVM

След няколко дни борба в крайна сметка открих, че поради архитектурните особености на Intel процесорите и по-специално VMX флага, създаването на вложени (Nested) виртуални машини с KVM ускорение е много слабо подържано и във всички релиизи на KVM модула е със статус 'експериментално'.

За по-слабо запознатите - Nested KVM е ситуация при която върху една хост машина се пуска гостуваща такава отново с KVM възможности с идеята тя да бъде сама по себе си хост за друга виртуална машина. Това по същество налага предаването на VMX флага към гост машините.

Тук ще споделя частичното решение което намерих.



Лимити:
Хайпервайзорите (виртуалните машини) които трябва да могат да изпълняват други машини могат да бъдат само 64 битови.

Ядро:

Въпреки, че не съм пробвал за версия 3.1 на Linux kernel-a също се твърди, че има тези възможности.

Аз обаче тъй като съм консервативен предпочитам все още да използвам 2.6.x kernel tree. Ето как можем да го направим по този начин:




  • Git-ваме си сорса от тук https://github.com/nyh/kvm-nested-vmx/tree/nvmx10
  • конфигурираме ядрото по собствен вкус
  • компилираме (и модулите)
  • инсталираме (и модулите)
стартираме това ядро и изпълняваме modprobe kvm_intel nested=1

за да сте сигурни може да изпълните modinfo kvm_intel за да видите дали опцията nested съществува.

QEMU:
Тествано е с версия 0.15
Единствената особеност е, че трябва да му кажем cpu-то на госта да има VMX:

С флаговете на хоста (в които разбира се има vmx)
-cpu host        

Cъс cpu-то което сме му казали но дава и vmx flag
-cpu <някое от подържаните cpu-та>,+vmx




За да видите какви cpu-та може да ползвате '-cpu ?'


четвъртък, 24 ноември 2011 г.

Подкарване на mikrotik 5.7 на виртуална машина различна от VMware

Наскоро на пиратската сцена излезе новият mikrotik 5.7 под формата на VMware-ски имидж. Под vSphere server тествано работи добре, но за потребителите на други платформи за виртуализация ето кратък туториъл.


За подкарване на мт 5.7 на virtualbox (3.1.6 OSE):

1. Създава се виртуална машина с хард диск vmdk файла
2. Тип на IDE контролера е PIIX4
3. От терминала се изпълняват командите
VBoxManage setextradata mt "VBoxInternal/Devices/piix3ide/0/Config/PrimaryMaster/FirmwareRevision" "string:00000001"
VBoxManage setextradata mt "VBoxInternal/Devices/piix3ide/0/Config/PrimaryMaster/ModelNumber" "string:VMware Virtual IDE Hard Drive"
VBoxManage setextradata mt "VBoxInternal/Devices/piix3ide/0/Config/PrimaryMaster/SerialNumber" "string:00000000000000000001"
4. Пускате машината и всичко работи :)
(Забележка: диск файла не трябва да е стартиран преди изпълнение на командите от точка 3)

За подкарване на мт 5.7 с qemu (qemu-kvm-0.12.3) 

Примерите са под Ubuntu 10.04:
1. аpt-get source qemu
2. cd qemu-kvm-0.12.3+noroms
3. във hw/ide/core.c файла:
на ред 114 променяме
padstr((char *)(p + 10), s->drive_serial_str, 20); /* serial number */
на
padstr((char *)(p + 10), "00000000000000000001", 20); /* serial number */

на ред 118 променяме
padstr((char *)(p + 23), s->version, 8); /* firmware version */
на
padstr((char *)(p + 23), "00000001", 8); /* firmware version */

на ред 119 променяме
padstr((char *)(p + 27), "QEMU HARDDISK", 40); /* model */
на
padstr((char *)(p + 27), "VMware Virtual IDE Hard Drive", 40); /* model */

4. ./configure
5. make
6. по избор "make install" или може да си го ползвате от директорията
7. в директория pc-bios се слагат файловете:
    bios.bin
    vgabios-cirrus.bin
    pxe-rtl8139.bin
   
    могат да се намерят на
    http://svn.savannah.gnu.org/viewvc/*checkout*/trunk/pc-bios/bios.bin?root=qemu
    http://svn.savannah.gnu.org/viewvc/*checkout*/trunk/pc-bios/vgabios-cirrus.bin?root=qemu
    http://svn.savannah.gnu.org/viewvc/*checkout*/trunk/pc-bios/pxe-rtl8139.bin?root=qemu

8. конвертирате vmdk имиджа
qemu-img convert "MikroTik v5.xx.vmdk" -O qcow2 mt5.qcow2

9. стартирате с имидж mt5.qcow2
пример:
./x86_64-softmmu/qemu-system-x86_64 -drive file=mt5.qcow2



Наличието на подробно описание за това как да се възползваме от  пиратски софтуер не е оправдание за употребата му!



Статията е публикувана единствено с научна цел и автора отрича да се е докосвал до въпросният пиратски софтуер.


понеделник, 21 ноември 2011 г.

Как да възстановим изтрит файл в linux

Например изтритият файл е access_log на Apache. Какво да направим:

lsof | grep access_log

Ще ни даде output от вида:
httpd 26120 apache 42w REG 253,0 5852 12222531 /apachelogs
/access_log (deleted)

важно е в случая е да запомним pid-a: 26120 и fd-то: 42. Знаейки това можем да си върнем файла като изпълним следната команда:


cat /proc/26120/fd/42 > /apachelogs/access_log


В случая с Apache, добра идея е да рестартираме сервиса след това.


Happy end!

Ето и един линк с визуални примери за други lsof приложения:
http://danielmiessler.com/study/lsof/

събота, 23 юли 2011 г.

Ninite automated windows apps installer

Преди няколко дни ми попадна изключително интересният софтуер Ninite който представлява приложение което автоматично инсталира и ъпдейтва софтуера на Windows машина.

За момента листът със софтуера не е много голям, но както установих - напълно достатъчен.

Принципа на действие е следният:

1. Отваряте http://ninite.com/
2. Накликвате си приложеният които искате да се инсталират на вашата машина.
3. Сваляте инсталера (едно exe).
4. Стартирате го и всичко се инсталира автоматично.



Пожелавам успех на проекта и дано се развива все така free! :)

понеделник, 11 юли 2011 г.

Най-полезните GCC опции

Попадна ми интересна статия (под формата на справочник) за най-полезните опции и екстенжъни (extensions) на компилатора gcc.

Ето линк: http://www.antoarts.com/the-most-useful-gcc-options-and-extensions/

неделя, 3 юли 2011 г.

pkg-config е чудесно творение

Днес ми се наложи да компилирам C код в който се употребява  SDL.
Тъй като не съм ползвал SDL до сега разбира се имах проблеми с компилацията, но това ме доведе до откриването на pkg-config.

 Ето примерна употреба:

g++ `pkg-config --cflags sdl` `pkg-config sdl --libs` hello.cpp -o hello

Как да превърнем C в скриптов език

Кратък отговор:
поставете това като първи ред във вашият C код.
//&>/dev/null;x="${0%.*}";[ ! "$x" -ot "$0" ]||(rm -f "$x";cc -o "$x" "$0")&&exec "$x" "$@"

дайте права на файла с кода (Да! На something.c файла)

изпълнете кода ;)

Дълъг отговор:
https://gist.github.com/448040