The Mer Wiki now uses your Mer user account and password (create account on https://bugs.merproject.org/)


Platform SDK on VirtualBox

From Mer Wiki
(Difference between revisions)
Jump to: navigation, search
(Add a target)
(Storage and Sharing your home, source and caches)
 
(18 intermediate revisions by 10 users not shown)
Line 20: Line 20:
  
 
= Prepare Image =
 
= Prepare Image =
Download the SDK vmdk from http://img.merproject.org/images/sdk/mer-sdk-nemo-i486-vm-sda.vdi.bz2
+
Download the SDK vmdk from http://img.merproject.org/images//web/henrik/6-20121115-132446/mer-sdk-i486-wip-sda.vdi.bz2
  
 
Then unzip the image (it's a very large file)
 
Then unzip the image (it's a very large file)
Line 73: Line 73:
 
  Folder path: <your home directory eg /home/lbt>
 
  Folder path: <your home directory eg /home/lbt>
 
  Folder name: home
 
  Folder name: home
 +
and if you want to login via ssh to mersdk you also need to share your private mer-qt-creator-rsa key folder:
 +
'''Notice! this is a security risk if you let others login to the same mersdk you should NOT use $USER/.ssh folder. instead move mer-qt-creator private key elsewhere. Because you don't want others to see the other private keys.'''
 +
Folder path: <your home directory/.ssh eg /home/lbt/.ssh>
 +
Folder name: ssh
 +
Read Only: true
 
and
 
and
 
  Folder path: /srv/mer/targets
 
  Folder path: /srv/mer/targets
Line 78: Line 83:
  
 
Do not tick the 'automount' box as that simulates a removable media device which will not work.
 
Do not tick the 'automount' box as that simulates a removable media device which will not work.
 +
 +
<b>Note:</b>Use the folder names <b>as specified</b>, else the VM may not boot.
  
 
   [[File:VboxSDK-sf.png]]
 
   [[File:VboxSDK-sf.png]]
Line 91: Line 98:
 
   VBoxManage setextradata MerSDK VBoxInternal2/SharedFoldersEnableSymlinksCreate/home 1  
 
   VBoxManage setextradata MerSDK VBoxInternal2/SharedFoldersEnableSymlinksCreate/home 1  
 
   VBoxManage setextradata MerSDK VBoxInternal2/SharedFoldersEnableSymlinksCreate/targets 1
 
   VBoxManage setextradata MerSDK VBoxInternal2/SharedFoldersEnableSymlinksCreate/targets 1
 +
 +
=== Ubuntu DNS ===
 +
 +
Ubuntu 12.10 and above has local DNS proxy running in address 127.0.1.1 not 127.0.0.1 . To enable DNS work with Ubuntu
 +
 +
VBoxManage modifyvm MerSDK --natdnshostresolver1 on
  
 
= Running the SDK VM =
 
= Running the SDK VM =
Line 99: Line 112:
  
 
Ensure your ~/.ssh/authorized_keys files has your own public key in it and you can access mersdk user with no passwd:
 
Ensure your ~/.ssh/authorized_keys files has your own public key in it and you can access mersdk user with no passwd:
  cp ~/.ssh/id_rsa.pub authorized_keys  # works if your key is in ~/.ssh/id_rsa.pub.
+
  cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys  # works if your key is in ~/.ssh/id_rsa.pub (type this on your host)
 
  ssh -p 2222 mersdk@localhost
 
  ssh -p 2222 mersdk@localhost
 
This is important for QtCreator to work seamlessly.
 
This is important for QtCreator to work seamlessly.
 +
 +
If you get errors such as "Agent admitted failure to sign using the key" when testing from the command line "ssh -p2222 mersdk@localhost" or later Qt Creator can't create connection to VM try following
 +
ssh-keygen -trsa (don't type a password when prompted)
 +
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
 +
ssh-add
  
 
(in vm, your host home dir is mounted at /home/mersdk (mersdk's home on vm), so your ~/.ssh/autorized_keys is used for authorizing access to mersdk@localhost:2222)
 
(in vm, your host home dir is mounted at /home/mersdk (mersdk's home on vm), so your ~/.ssh/autorized_keys is used for authorizing access to mersdk@localhost:2222)
  
 
= Limitations =
 
= Limitations =
The SDK uses the Virtualbox shared folder mechanism which needs to support files sored on various hosts and does not support certain features:
+
 
 +
The SDK uses the Virtualbox shared folder mechanism which needs to support files stored on various hosts and does not support certain features:
 
* Symbolic links (see workaround above for linux hosts)
 
* Symbolic links (see workaround above for linux hosts)
 
* Memory mapped (mmap) files
 
* Memory mapped (mmap) files
  
It this is a problem then virtualbox can be configured to store data on dedicated virtual or mapped drives
+
If this is a problem then virtualbox can be configured to store data on dedicated virtual or mapped drives (the details of this configuration are beyond the scope of this document).
  
 
= Getting QtCreator =
 
= Getting QtCreator =
Line 121: Line 140:
 
  cd mer-qt-creator
 
  cd mer-qt-creator
 
  git checkout mer
 
  git checkout mer
  qmake -r && make -jN && bin/qtcreator
+
  qmake -r && make -jN && bin/qtcreator # where N = NUM_OF_YOUR_CPUs * NUM_OF_CORES + 1 '''
 +
 
 +
'''Fedora:'''
 +
* use <tt>qmake-qt4</tt> instead of <tt>qmake</tt> in the command above
 +
* if you want Designer make sure the package <tt>qt-devel-private</tt> is installed.
  
 
= Using QtCreator =
 
= Using QtCreator =
Line 129: Line 152:
 
== Add a target ==
 
== Add a target ==
  
In the SDK Control Center go to Targets and add a new target.
+
In the SDK Control Center (http://localhost:8080) go to Targets and add a new target.
  
 
For Nemo:
 
For Nemo:
Line 146: Line 169:
  
 
Now you have a Mer Kit.
 
Now you have a Mer Kit.
 +
 +
=== VM is not registered ===
 +
If you get "VM is not registered" when testing connection to Mer SDK VM, shutdown VM, close VirtualBox manager and move MerSDK entry to the top in
 +
 +
~/.VirtualBox/VirtualBox.xml:
 +
    <MachineRegistry>
 +
      ...
 +
      <MachineEntry uuid="{looooong-uuid-here}" src="/path-to/VirtualBox VMs/MerSDK/MerSDK.vbox"/>
 +
      ...
 +
    </MachineRegistry>
 +
make it look:
 +
    <MachineRegistry>
 +
      <MachineEntry uuid="{looooong-uuid-here}" src="/path-to/VirtualBox VMs/MerSDK/MerSDK.vbox"/>
 +
      ...
 +
    </MachineRegistry>
 +
Fix is on its way (as of 7/12/2012)
 +
 +
=== No SDK Control Center ===
 +
If you press "upgrade" in SDK Control Center, after reboot it will not start anymore (as of 3/12/2012), to fix (in VM):
 +
[root@localhost ~]# ln -s /usr/lib/systemd/user/sdk-webapp.service /etc/systemd/system/multi-user.target.wants/
 +
 +
Fix is on its way (as of 7/12/2012)
  
 
== Adding a Device ==
 
== Adding a Device ==

Latest revision as of 19:48, 10 August 2013

Contents

[edit] Introduction

The Mer VM SDK is intended for use with QtCreator, on non-linux machines and on machines where a chroot-based SDK is not desired.

The SDK has 3 significant areas:

  • Qt Creator: this runs on your host machine and (with the Mer plugin) allows you to manage application development, the SDK VM and your targets.
  • SDK Virtual Machine: This contains all the Mer development toolchains and tools
  • Development Target(s): these contain QML components, headers and libraries for your targets (eg Nemo, Plasma Active or vendor supplied targets)

[edit] Virtualisation

The Mer SDK uses Oracle's VirtualBox as the virtualisation engine. The website at https://www.virtualbox.org/ has a a lot of useful information.

Other virtualisation solutions should work without any issues. The main requirement is the ability to support shared folders.

[edit] Pre-Requisites

  • VirtualBox version 4.18 or higher (should be 4.x).
  • Suitable hardware with correct BIOS settings to allow VirtualBox to run
  • Linux host (we intend to support other OSes 'soon')

[edit] Prepare Image

Download the SDK vmdk from http://img.merproject.org/images//web/henrik/6-20121115-132446/mer-sdk-i486-wip-sda.vdi.bz2

Then unzip the image (it's a very large file)

bunzip2 mer-sdk*vdi.bz2

[edit] Create the VM

Run the VirtualBox manager and create a new machine called MerSDK with Linux/2.6 (32bit)

 VboxSDK-new.png

For larger builds allocate a substantial amount of memory (eg 2048Mb)

Select "Use existing hard disk" and pick the vdi you just downloaded/created

Now select create to make the VM.

Don't boot/start the VM until you have setup the shared folders or they will not be accessible.

[edit] Setting up and Networking

Select the MerSDK VM and then pick Settings

In System/Motherboard enable IO APIC.

In System/Processor enable PAE/NX and allocate as many CPUs as your host has.

This is not an emulator so there is no point setting any special Display settings.

In Networking set Adapter 1 to "NAT" ( see https://www.virtualbox.org/manual/ch06.html#network_nat ) since your VM will need to access the internet to perform updates.

Since it will need to act as a server for your local host we must setup port-forwarding too.

Select 'Advanced' and then 'Port Forwarding'. In the rules box add:

Name: guestssh
Protocol: TCP
Host Port: 2222
Guest Port: 22

and

Name: guestwww
Protocol: TCP
Host Port: 8080
Guest Port: 9292

VboxSDK-nat.png

[edit] Storage and Sharing your home, source and caches

Make sure /srv/mer/targets exists and is owned by you.

sudo mkdir -p /srv/mer/targets
sudo chown $USER /srv/mer/targets

Under Settings -> Shared Folders (example screenshot below) add two Machine Folders with the

Folder path: <your home directory eg /home/lbt>
Folder name: home

and if you want to login via ssh to mersdk you also need to share your private mer-qt-creator-rsa key folder: Notice! this is a security risk if you let others login to the same mersdk you should NOT use $USER/.ssh folder. instead move mer-qt-creator private key elsewhere. Because you don't want others to see the other private keys.

Folder path: <your home directory/.ssh eg /home/lbt/.ssh>
Folder name: ssh
Read Only: true

and

Folder path: /srv/mer/targets
Folder name: targets

Do not tick the 'automount' box as that simulates a removable media device which will not work.

Note:Use the folder names as specified, else the VM may not boot.

 VboxSDK-sf.png

The shared folder called 'home' will be mounted as the sdk user's 'mersdk' $HOME directory as the SDK boots. The 'targets' shared folder will be mounted as /srv/mer/targets and will store target device headers and qml files used by Qt Creator.

You may want to share additional source and cache directories from your host.

[edit] Symbolic Links on shared folders

To enable Virtualbox to support symlinks run this command before launching the VM:

 VBoxManage setextradata MerSDK VBoxInternal2/SharedFoldersEnableSymlinksCreate/home 1 
 VBoxManage setextradata MerSDK VBoxInternal2/SharedFoldersEnableSymlinksCreate/targets 1

[edit] Ubuntu DNS

Ubuntu 12.10 and above has local DNS proxy running in address 127.0.1.1 not 127.0.0.1 . To enable DNS work with Ubuntu

VBoxManage modifyvm MerSDK --natdnshostresolver1 on

[edit] Running the SDK VM

You may now start the SDK VM. It will start an ssh service which can be accessed as:

ssh -p 2222 root@localhost

The root password is "rootme".

Ensure your ~/.ssh/authorized_keys files has your own public key in it and you can access mersdk user with no passwd:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys  # works if your key is in ~/.ssh/id_rsa.pub (type this on your host)
ssh -p 2222 mersdk@localhost

This is important for QtCreator to work seamlessly.

If you get errors such as "Agent admitted failure to sign using the key" when testing from the command line "ssh -p2222 mersdk@localhost" or later Qt Creator can't create connection to VM try following

ssh-keygen -trsa (don't type a password when prompted)
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh-add

(in vm, your host home dir is mounted at /home/mersdk (mersdk's home on vm), so your ~/.ssh/autorized_keys is used for authorizing access to mersdk@localhost:2222)

[edit] Limitations

The SDK uses the Virtualbox shared folder mechanism which needs to support files stored on various hosts and does not support certain features:

  • Symbolic links (see workaround above for linux hosts)
  • Memory mapped (mmap) files

If this is a problem then virtualbox can be configured to store data on dedicated virtual or mapped drives (the details of this configuration are beyond the scope of this document).

[edit] Getting QtCreator

Currently you will need to build QtCreator on your local machine. Binary downloads should be available eventually and we hope the plugins will be merged upstream.

See https://qt.gitorious.org/+mer-qt-creator/qt-creator/mer-qt-creator

git clone git://gitorious.org/+mer-qt-creator/qt-creator/mer-qt-creator.git
cd mer-qt-creator
git checkout mer
qmake -r && make -jN && bin/qtcreator  # where N = NUM_OF_YOUR_CPUs * NUM_OF_CORES + 1 

Fedora:

  • use qmake-qt4 instead of qmake in the command above
  • if you want Designer make sure the package qt-devel-private is installed.

[edit] Using QtCreator

There should be a Mer button on the left toolbar; if this is not present then you will need to either enable the Mer plugin (Help -> plugins) or ensure you have the correct QtCreator installed.

[edit] Add a target

In the SDK Control Center (http://localhost:8080) go to Targets and add a new target.

For Nemo:

  • select Mer-SB2-armv7hl as the toolchain
  • select nemo_n9_min as the target name
  • select

http://img.merproject.org/images//web/lbt/2-20121111-184729/image.tar.bz2 as the rootfs url

Then 'add'

This will take a while but the progress will be shown at the bottom of the screen.

Once this is installed go to : Tools -> options -> Mer -> Targets and add the target. It should appear as a subdirectory of /srv/mer/targets/

The process takes a few seconds, connects to the VM and checks the compiler etc. It then says "Successfully added target".

Now you have a Mer Kit.

[edit] VM is not registered

If you get "VM is not registered" when testing connection to Mer SDK VM, shutdown VM, close VirtualBox manager and move MerSDK entry to the top in

~/.VirtualBox/VirtualBox.xml:

   <MachineRegistry>
     ...
     <MachineEntry uuid="{looooong-uuid-here}" src="/path-to/VirtualBox VMs/MerSDK/MerSDK.vbox"/>
     ...
   </MachineRegistry>

make it look:

   <MachineRegistry>
     <MachineEntry uuid="{looooong-uuid-here}" src="/path-to/VirtualBox VMs/MerSDK/MerSDK.vbox"/>
     ...
   </MachineRegistry>

Fix is on its way (as of 7/12/2012)

[edit] No SDK Control Center

If you press "upgrade" in SDK Control Center, after reboot it will not start anymore (as of 3/12/2012), to fix (in VM):

[root@localhost ~]# ln -s /usr/lib/systemd/user/sdk-webapp.service /etc/systemd/system/multi-user.target.wants/

Fix is on its way (as of 7/12/2012)

[edit] Adding a Device

Go to Tools -> Options -> Devices and 'Add' then pick a 'Generic Linux Device'

Follow the wizard to make a device

[edit] Check the Kit

Go to Tools -> Options -> Build & Run

You should see several tabs; the Qt Versions and Compilers should have the values filled in for your Mer target.

In the Kits tab there will be a new Kit for your target; select that. You can add a device here for deployment if you like.

Personal tools