Archive for the ‘virtualization’ Category

convert multiple .vmdk file into a single .vdi file

Wednesday, June 17th, 2009

This post is aimed at converting split vmdk files (myfile.vmdk & multiple myfile-s000X.vmdk files) into a single .vdi file.

Split .vmdk files are often performed to keep each file under a 2 Gb size so that entire Virtual Machine can be spread over multiple files compatible with VFAT system.

Since I don’t use VFAT and prefer using virtualbox rather than vmware, I decided to convert my split .vmdk files into a single .vdi counterpart.

Before going any further, ensure your split .vmdk files are real split files and not snapshots. Name of split files end with “-s000X.vmdk” where X is an increasing number and a single file .vmdk without this suffix must be present too.
If your file suffix is of the form  ”-000001.vmdk” then it’s not a split file, it’s simply a snapshot.

Here are the steps:

  • we need to download vmware-server from http://www.vmware.com/download/ to get access to vmware-vdiskmanager utility
    note1: we simply need to download it, NOT to install it
    note2: you can download either .rmp || .tar.gz file
  • once downloaded, extract and locate library folder (‘lib’) + vmware-vdiskmanager script (under /bin).
  • copy vmware-vdiskmanager to your desktop and grant execution rights (sudo chmod o+x vmware-vdisk*)
  • in the directory where you put vmware-vdisk* program, create a folder called ‘libdir’ (sudo mkdir libdir) and move here extracted ‘lib’ folder (ensure it’s the folder containing ”libcrypto.so.xxx”
  • from within this folder, execute: “vmware-vdiskmanager -r <path_to_your_multiple_vmdk_files>/myfile.vmdk -t 2 mysinglefile.vmdk”
  • hit Enter, compression begin (quite resource intensive process).

At this point you should endup with a single .vmdk file.
Recent versions of virtualbox (>= v2.2) are fully compatible with .vmdk format => you might stop here.

In case you still want a .vdi file, next step is to convert .vdmk into raw data (.bin – not compressed => can require a lot of space) and then convert it to .vdi format using “vboxmanage convertfromraw”.

These steps are explained in this post: convert .vhd (virtualpc) file to .vdi (virtualbox) format
It assumes a .vhd format as source, but process is almost identical when source file is in .vmdk format.

sources

virtualboxed xp asking for usb drivers

Tuesday, June 16th, 2009

My virtualboxed windows xp kept asking for damned usb drivers and audio drivers:

  • OCH usb2 controller driver
  • Intel(R) 82801FB/FBM USB Universal Host Controller
  • AC’97 Intel 82801 AA audio driver
  • among others…

My xp versions were supposedly Service Pack 3 versions, but looking at c:\windows\ServicePackFiles, folder was empty, thus when windows tried to load usbohci.sys driver it failed to load it from non-existing c:\windows\ServicePackFiles\i386.

What I did was pretty easy, I simply downloaded sp3 cd from microsoft.com and installed it!

Here are the steps:

  1. download xp-sp3 iso cd: http://www.microsoft.com/downloads/thankyou.aspx?familyId=2fcde6ce-b5fb-4488-8c50-fe22559d164e&displayLang=en
  2. start your xp virtual machine
  3. mount downloaded cd
  4. execute it
  5. restart the computer

That’s it. Files now exists where they are expected and drivers start to install.

Right now, error changed and xp is asking for windows xp cd (not service pack cd), to get access to usbd.sys / usbd.sy_ file.

Here, I took these files from an already fully installed xp machine I had, these files were under c:/i386.

Basically, here are the exact files I needed:

  • Intel(R) 82801FB/FBM USB Universal Host Controller => first I had to install intel driver: ”Intel82801AAControllerAC97Driverforwin98.exe” then windows asked for “usbd.sy_” which I found under c:\i386\ from installed xp version
  • windows asked for “ac97intc.sys” which I found under c:\i386\driver.cab from installed xp version

Now, both sound & usb works on virtualboxed xp like a charm, no more errors.

sources

convert .vhd (virtualpc) file to .vdi (virtualbox) format

Tuesday, June 16th, 2009

From .vhd to .vdi

When I tried to run xp vhd, provided from microsoft, to test websites on multiple versions of IE (cf. How to test your website on IE6 & IE7 thanks to virtualization), it occurs that each .vhd file has been generated with the same UUID, preventing them from being loaded at the same time in VirtualBox (v2.2).

Although VirtualBox can now transparently handle .vhd natively, I chose to convert these .vhd files into .vdi format so that they have each a unique uuid and can be loaded at the same time in VirtualBox.

Below are the steps:

To do this, I proceeded as follow:

  1. install qemu package (sudo apt-get install qemu)
  2. convert .vhd file: qemu-img convert -O raw myfile.vhd myfile.bin
  3. once the file has been converted, we convert it to .vdi format using VBoxManage: VBoxManage convertfromraw myfile.bin myfile.vdi –variant standard
    note1: “variant” is specified to ensure we have an expandable vdi file (.bin file is 17Gb, .vdi file will be only 1.5Gb)
    note2: in previous version, “convertfromraw” command was called “convertdd”

That’s it.

Simply load your vdi file within VirtualBox, do it for all three xp .vhd files and you can now use all these VM more easily.

sources

How to test your website on IE6 & IE7 thanks to virtualization

Monday, June 15th, 2009

If you want to test your website on IE6 & IE7  (with truly installed Internet Explorer – not some hacked versions), there is a good news: microsoft has released virtual disk ready just for this.

And even better, you can run them on Virtualbox!

I found a great tutorial on how to have them work in virtualbox: http://morecowbell.net.au/2009/03/internet-explorer-application-compatibility-vpc-images-under-virtualbox/

Contrary to earlier versions, now virtualbox (> v2.2) handles natively .vhd (microsoft virtual pc) format. Problem is that when I tried to run .vhd files retrieved from microsoft.com, it ended up in a blue-screen with vm reboot. Above mentionned tutorial helped a lot to fix this issue.

Here are the steps:

  1. go to microsoft.com to download .vhd files you’re interested into: http://www.microsoft.com/downloads/details.aspx?FamilyId=21EABB90-958F-4B64-B5F1-73D0A413C8EF&displaylang=en
  2. once you have downloaded the file, execute them to extract them, you will have a folder with the .vhd file
  3. create your corresponding Virtual Machine on virtualbox (don’t forget to allow sufficient memory, windows is resource hungry)
  4. now is the tricky part:
    1. start your VM
    2. keep pressing F8 while VM is booting (while on Sun splashscreen – before windows starts to load)
    3. if you did it well, you should now have a menu => select “safe mode”
    4. once safe mode is loaded, click on OK and ignore all the “missing driver” windows
    5. click on start / run => enter “cmd” and click on execute
    6. now in the black screen, enter: “sc config Processor start= disabled” + hit enter (a successful message should reward you)
    7. restart windows
  5. make virtualbox guest applications accessible: on virtualbox window of your running VM, click on /devices/mount/cd dvd-rom image + select corresponding .iso file
  6. now install virtualbox guest applications (go to D:\ in windows and double click on virtualbox_windows_guestapplications or so)
    1. here again it’s tricky. Drivers were not correctly installed on my xp box. => open another command prompt (/start/run: “cmd”) and enter : D:\VBoxWindowsAdditions-x86 /extract /D=C:\Drivers
      this should extract
    2. restart windows xp
    3. when windows will ask for PCI ethernet device driver, make it point to C:\Drivers\x86\Network\AMD

In my case, it asked for usb drivers too. Having activated network driver, I connected to the internet and updated windows so it could find these drivers but this did not work. If your xp install is asking for OCH usb2 controller driver (as well as AC’97 Intel 82801 AA audio driver too) or Intel(R) 82801FB/FBM USB Universal Host Controller and if you have found a solution, I am highly interested. Please feel free to share.
[UPDATE]: I finally found a solution, see virtualboxed xp asking for usb drivers

WARNING: when updating windows, make sure to check what update windows is installing, you may endup with an update of IE to IE8 => which would completely screw the purpose of using these virtualization files for testing websites under IE6 & IE7!

UUID problem => from .vhd to .vdi conversion

To avoid UUID problem (all .vhd having the same UUID, it’s currently not possible to have the three of them present in VirtualBox menu at the same time => you need to unlock & remove one to add another => extremely annoying), I simply converted the files into their .vdi counterpart.

To do this, please read this post: convert .vhd (virtualpc) file to .vdi (virtualbox) format

sources

virtualbox with vista: driver for system controller required

Sunday, June 14th, 2009

If you installed virtualbox and when vista starts up into virtualized environment, each time it asks for system controller driver, you’re highly encouraged to install VirtualBoxGuestAdditions, normally mounted by default as windows cd player.

=> within vista, open cd player and execute corresponding guest-additions file (x86, x64), it will install the appropriate drivers and will get rid of this message.

It may also be required to have network works with virtualized vista (cf. official documentation, 11.2.4 “No networking in Windows Vista guest”)

screen-resolution

I had a problem getting virtualbox display guest into my native host resolution. At first, it displayed only in 800×600.
After installing guest-additions, I could display it up to 1024 x 800.
My native resolution is 1280 x 800. Going to your native resolution is in fact a lot easier than you may think.

You do NOT need to change the resolution from within the guest, everything occurs outside it (using virtualbox menu).
Below are the steps you need to follow:

  1. start your guest VM
  2. install guest-additions if not already done (start your VM, quit full-screen mode and click on /Devices/Install Guest Additions at top of virtualbox window, restart your VM)
  3. still on virtualbox window, once your VM has started, click on /Machine/Auto-resize guest app (a checked checkbox should now appear if you click again on the menu) at the top of virtualbox window
  4. now you can drag your window to match host screen (if you right click on window desktop / properties, you can now see that it has been automatically set to your screen resolution (1280 x 800 in my case).

Below is the final screenshot.

virtualbox_screen_size

sources

enable usb in virtualbox

Sunday, June 14th, 2009

First of, bad news, usb support is NOT available on virtualbox-ose (ose = open-source-edition) => you will need the closed source version.

Good news is that it’s still free for personal use.

  1. download and install full virtualbox closed source version:  http://www.virtualbox.org/wiki/Linux_Downloads
  2. remove conficting virtualbox-ose (if already installed): sudo apt-get remove virtualbox-ose
  3. install downloaded file: sudo dpkg -i <path_to_downloaded_file>/virtualbox*.debNOTE: At the end of package installation, I had the following error message:

    * Starting VirtualBox kernel module
    * modprobe vboxnetflt failed. Please use ‘dmesg’ to find out why

    dmesg returned the following errors:

    [ 1305.319993] vboxnetflt: disagrees about version of symbol SUPDrvLinuxIDC
    [ 1305.319997] vboxnetflt: Unknown symbol SUPDrvLinuxIDC

    Solution for this was to run: sudo /etc/init.d/vboxdrv setupand then reinstall .deb package

  4. now follow instructions as listed in this post: http://www.davidgrant.ca/virtualbox_usb_windows_xp_guest_ubuntu_hardy
  5. Run virtualbox: Virtualbox &
  6. click on your virtual machine / settings / usb (on left menu)
    1. activate usb support
    2. enable ehci (usb 2.0) support (without it usb keys were not recognized at all)
    3. clik add (right icons) to add corresponding usb devices (this will save you from manually enabling/disabling them each time you plug them in)
  7. save changes, start your virtual machine and enjoy usb ports!

NOTE: usb devices did not work properly until I installed virtualbox guest additions and rebooted

sources

backtrack 4 (beta) on virtualbox

Sunday, June 14th, 2009

I tried to run backtrack 4 beta on virtualbox (to install it, not just run it as live cd), it was not easy but I finally did it.

First, using .vmdk version of backtrack 4 did not work, on each boot it failed on a kernel-panic  VFS error. I installed it from livecd as follow:

  1. I assume you’re familiar with virtualbox (ie. have it installed and already ran virtual machines (VM))
  2. download bt4 iso version (http://www.remote-exploit.org/backtrack_download.html)
  3. while it’s downloading, create the virtual-machine you’re going to use to install backtrack (personnally I created it with an expanding disk (grant at least 5Go, 8Go highly recommended) + don’t forget to grant lan + usb
  4. once iso has been downloaded, mount it on your VM as cdrom and start your VM
  5. boot on BT4 live cd (at this point you don’t have many options doh!)
  6. once at login screen, login (id = root / pwd = toor)
  7. next, follow instructions found here: http://www.offensive-security.com/documentation/bt4install.pdf
    basically the following steps are advised, with slight modifications – especially a potential typo that made all the process fail – I recreated the steps right here:

    1. create your partitions (all as primary disk, hda1 = /boot (50 M0 is enough); hda2 = swap (512 Mo is enough); remaining 7.5G0 as main partition “/” and flag first partition as bootable) – this can be done throug “cfdisk” command – don’t forget to adapt “hda” to your own situation (you will see it appear when creating partitions with cfdisk) and write changes to the disk upon leaving cfdisk
    2. set the type of your partitions:
      • “mke2fs /dev/hda1″ (set boot partition under ext2 format, readable by kernel);
      • “mkswap /dev/hda2″ + “swapon /dev/hda2″ (to activate swap space)
      • “mkfs.ext3 /dev/hda3″ (here I preferred to set ext3 format instead of reiserfs as stated in pdf doc)

      note: at this point you may have some error messages where swap partition cannot be formated because already in use (=> run “swapoff /dev/hda2″ prior to running other commands) & idem with /dev/hda1 | /dev/hda3 (ensure you unmounted them prior to running the commands, via “umount /dev/hda1″ & “umount /dev/hda3″) — this may happen if your first install failed after having partitionned the disk and you rebooted without having recreated a fresh virtual storage HD

    3. now you simply need to create folders in order to mount your parititions in the following order:
      1. mkdir /mnt/bt4
      2. mount /dev/hda3 /mnt/bt4
      3. mkdir /mnt/bt4/boot
      4. mount /dev/hda1 /mnt/bt4/boot
    4. now create all system folders: mkdir /mnt/bt4/{tmp,proc,dev,sys}
    5. copy all data from live cd (WARNING: this will take a long time and result in something like 5Go for your virtual HD):
      cp –preserve -R /{bin,dev,home,pentest,root,usr,boot,etc,lib,opt,sbin,var} /mnt/bt4
    6. now we need to associate devices to our dumped disk content:
      mount -t proc /proc /mnt/bt4/proc
      mount -t bind /dev /mnt/bt4/dev
    7. we log into our dumped system: chroot /mnt/bt4 /bin/bash
    8. update your lilo.conf to ensure root & boot values point to correct disk/partitions (basically in my case, I replace ‘boot=/dev/sda’ & ‘root=/dev/sda1′ with ‘boot=/dev/hda’ & ‘root=/dev/hda3‘, save your changes
    9. update /etc/fstab to make sure swap partition is mounted (insert following line : “/dev/hda2 none swap sw 0 0″) and root partition too (“/dev/hda3 / ext3 default 0 0″)
    10. run “lilo -v” (to update lilo on verbose mode)
    11. “shutdown -h now”, once your VM is turned off, unmount BT4 live cd
  8. pray and start your VM. If you’re lucky, BT4 will load

backtrack4b_on_virtualbox

That’s it!

As previously admited, I did not get lucky the first time. Basically I tried it something like 10 times, each time ending up in a “Kernal panic – not syncing: VFS:Unable to mount root fs on unknown-block(9,9)” blah blah.

In the end, I recreated my entire virtual HD from scratch, used ext3 as partition type (and not reiserfs) and above all ran  ”mount -t proc /proc /mnt/bt4/proc” vs. ”mount -t proc proc /mnt/bt4/proc” as stated in the doc (take not on slash before second “proc”). I believe this was the root of the problem.

Good luck.
(now that it boots on VirtualBox, I’ve successfully installed guest additions — mkdir /mnt/cdrom; mount /dev/hdc /mnt/cdrom; /mnt/cdrom/VBoxLinuxAdditions-x86.run — but wifi usb keys do not seem to be recognized at all => if you have any hint on this, feel free to share)

sources

start installed Windows Vista from Linux using VirtualBox

Monday, February 2nd, 2009

As a majority of users, I bought a laptop with vista already on it. First things firts, I installed linux (debian) without even booting into windows and follow its installation process.

Then I thought I could use windows (for such situation where god-damned hardware makers to not create drivers for linux (ex: lexmark and its x4650 wifi printer!)) and start it from virtualbox (version 2.0.4 for me) without having to leave linux!

Here is how I did:

  1. Install virtualbox package: “sudo apt-get install virtualbox-ose
  2. Login into windows to finish the installation process (if windows is already set up, then skip this step)
    note: I installed windows with a full reboot on windows (and not from within virtualbox) simply because I could not make the installation process work within virtualbox
  3. Login back into linux and locate your windows partition:  ”sudo fdisk -l”
    Device Boot      Start         End      Blocks   Id  System
    /dev/sda1               1        1306    10490413+  27  Unknown
    /dev/sda2   *        1307       20110   151041024    7  HPFS/NTFS
    /dev/sda3           20111       24328    33881085   83  Linux
    /dev/sda4           24329       38913   117154012+   5  Extended
    /dev/sda5           24329       24450      979933+  82  Linux swap / Solaris
    /dev/sda6           24451       38913   116174016   83  Linux

    In  my case, windows partition is ‘dev/sda2′ (the one with NTFS filesystem format)

  4. We need to create a fake .vmdk file (file format used by virtualbox to emulate hard-disk) and make it point to our real disk. Run:
    sudo vboxmanage internalcommands createrawvmdk -filename ~/.VirtualBox/vista_physical_partition-sda.vmdk -rawdisk /dev/sda

    note: as for now, we make the vmdk file points to entire disk (and not only to windows partition)
    note2: if your disk with vista is other than /dev/sda (ex: /dev/sdb) => use your own value[UPDATE]: with newer versions of virtualbox, above command ends up in an error. As suggested in displayed error message, you need to use the -convertSettings flag => instead of running above command line, run this one:

    sudo vboxmanage -convertSettings internalcommands createrawvmdk -filename ~/.VirtualBox/vista_physical_partition-sda.vmdk -rawdisk /dev/sda
  5. change ownership of generated .vmdk file to your own user (so that you won’t need to run virtualbox as root to use this partition): sudo chown <your_user_name> ~/.VirtualBox/vista_physical_partition-sda.vmdk
  6. Now start virtualbox: “sudo virtualbox” and create your virtual machine:
    1. click on New / Next / enter your virtualmachine name (ex: vista) & choose windows vista as OS type & click on Next
    2. For windows vista, you must allocate at least 512MB of ram (1.5Gb recommended), click on Next
    3. For hard-disk, click on “existing” / “add” and go to ~/.VirtualBox/vista_physical_partition-sda.vmdk / click on “select” / “next” / “Finish”
    4. Now we must further configure this virtualmachine, click on “Machine” / “Settings”
    5. Under “general” section, allocate at least 50Mb of ram for video (in “basic” tab), then click on “advanced” tab and ensure “Enable IO APIC” is checked and click on OK (you can look for more options such as enabling sound in corresponding sections)
  7. AT THIS POINT, I MUST GIVE AN IMPORTANT WARNING: our vmdk file points to entire disk, ie. when we will start our virtual machine, it will be like booting the entire computer => if you have dual boot, you will load grub: DO NOT RUN LINUX within itself! This could screw up your entire linux installation!!!!
    You would start the linux you’re currently running virtualbox on, therefore messing all your linux installation. => MAKE SURE TO LOAD WINDOWS ONLY
  8. At this point, I tried to start the virtual machine and load vista and… it failed! This delicious blue-screen I had not seen since I started using linux… I found a solution that worked for me, on virtualbox website, it consists of modifying some windows registry entries so that windows won’t check HDD structure upon start-up and won’t fail if it changed.
    1. go to http://www.virtualbox.org/wiki/Migrate_Windows
    2. download  MergeIDE utility (in Hard Disk Support section) & save it in a usb key on into windows partition
    3. restart your computer, loading windows, log into it, unzip MergeIDE and execute “MergeIDE.reg” to modify your registry
    4. restart into linux
  9. start virtualbox, start your virtual machine and load Vista.
    If you’re lucky enough, Vista should start by now
  10. Log in into Vista using virtualbox.
  11. Bad news is that there’s lot of chance your ethernet controller won’t be recognized, we will install it.
    1. Leave your virtualbox open and go back to linux (‘right ctrl’ is the default hotkey to tell virtualbox you want to go back to linux, it frees your mouse and keyboard so that they are active in linux and no longer in windows)
    2. download corresponding ethernet driver: http://www.amd.com/us-en/assets/content_type/utilities/V4.51.zip (if link is dead, go to www.amd.com and look for NDIS5 driver)
    3. unzip it: “unzip V4.51.zip -d vbox_driver
    4. create an iso of unziped content: “mkisofs -o vbox_driver.iso -R -J vbox_driver
    5. then mount this file as a cdrom in virtualbox:
      1. go into virtualbox
      2. on top menu (leave fullscreen mode (right ctrl + f) to see it), click on Devices/Mount CD-DVDROM
      3. browse to your newly created vbox_driver.iso file
      4. then in your running vista, if mounted file does not open itself, go to your cdrom icon and open it
      5. Next click on Control Panel / Hardware and Sound / Device Manager. Right click on Ethernet Controller / Update Driver Software => browse my computer… => navigate to the CDROM drive, and click ok.
    6. That should do it for the ethernet controller
  12. Now you may have new driver problem that pops out (such as activating usb ports!).
    We will install the controller for VirtualBox VMM Device: download innotek drivers from http://www.virtualbox.org/download/1.5.0/VirtualBox_1.5.0_Win_x86.msi and install it.
  13. That’s it.

virtualbox_screenshot

Note: I ran a lot of commands as root, unfortunately creating .vmdk file without root access failed on an “insufficient right to read /dev/sda” error and the running virtualbox without root failed with same message too.
I’m pretty sure I screwed up at some point and that you should be able to run it without root rights.

Note2: I’m looking for a way to skip grub when starting virtual machine as it’s too dangerous as it is now. Unfortunately I did not find a solution that worked for me. If you did, please let us know!

sources

convert .vhd (VirtualPc) files into .vdi (VirtualBox) files

Thursday, August 28th, 2008

[UPDATE]: now virtualbox natively support .vhd files => you might be interested in reading this post: convert .vhd (virtualpc) file to .vdi (virtualbox) format

.vhd files works with VirtualPc (Windows) whereas .vdi files works with VirtualBox (Linux, GPL in “ose” version) => we need to convert them in order to use .vhd files.

I wanted to load VirtualPc (.vhd) files to load windows XP vhd files made available on microsoft.com

  1. I downloaded requested .vhd files
  2. Problem is .vhd format is for VirtualPc, whereas VirtualBox has its own format (.vdi) therefore we need to transform them. Doing this is a 4-step process:
    1. download qemu-img from http://www.nongnu.org/qemu/download.html or directly download .rpm file (http://rpmfind.net/linux/rpm2html/search.php?query=qemu-img)
    2. transform .rpm into .deb and install it: fakeroot alien -d –scripts qemu-img*.rpm; sudo dpkg -i qemu-img*.deb
    3. transform .vhd file into raw file: qemu-img convert -O raw XP_SP2_with_IE6.vhd XP_SP2_with_IE6.bin
    4. then transform .bin file into .vid format using vboxmanage (included into virtualbox-ose package): vboxmanage convertdd XP_SP2_with_IE6.bin XP_SP2_with_IE6.vdi
  3. you can run virtualbox-ose and mount your newly created .vdi file (it worked for me at least!). Very great solution (except it takes 16Gb per .dvi file), thanks microsoft, I hope it will go beyond Sept, 9th, 2008 (.vhd expiration date)

sources

install GPL virtual box on debian

Thursday, August 28th, 2008

to install virtual box on debian, I did not install it from repository using specific kernel version because it tried to install it and make me log into new kernel, I followed this tutorial: http://wiki.debian.org/VirtualBox

  1. I installed the following packages: sudo apt-get install virtualbox-ose virtualbox-ose-source
  2. cd /usr/src
  3. sudo tar xvjf virtualbox-ose.tar.bz2
  4. cd modules/virtualbox-ose
  5. sudo make
  6. sudo make install
  7. sudo modprobe vboxdrv
  8. sudo lsmod | grep vbox (if you get an output then everything is ok)
  9. running “virtualbox” should work

Now you may want to use virtual drive files (.vdi) to load windows or so, see .vhd to .vdi convertion blog entry to see how to do it.

    [sources]

    • http://wiki.debian.org/VirtualBox virtual box step by step installation guide
    • http://forums.virtualbox.org/viewtopic.php?t=4511&sid=6140d7e78bb81e7a3075fc805f1e59d8
    • http://blog.mozmonkey.com/2008/vpc-ie6-ie7-ie8-on-mac-os-x/ virtualization guide for mac
    • http://www.debianadmin.com/create-virtual-machines-using-virtualbox-in-debian.html other virtualbox tutorial for debian
    • http://ubuntuforums.org/showthread.php?t=338931&page=11 one more tutorial