Monthly Archives: July 2015

Virtuabox – Networks

VM makes it possible to have a network of different guests, an useful tool when studding network or server development. In this guide I show how to set up a network of guests.

Requirements:
Basic networking

Time:
Around 30 min

Table of content

Introduction


Sooner or later you want to connect to one of your guest OS. But they don’t have a physical network adapter and they are hidden behind your host. It’s actually not as tricky as it seem, virtualbox comes with its own DHCP server that you can configure and you can select different types of network adapters.

Because we will use multiple guests I will refer them to guest A and guest B. For this guide both will be Xubuntu, like we set up previously, but any kind of Ubuntu clone should work.

Step 0 – Setup ssh


To test that we can reach other machines we will connect with ssh. Start guest A.
The ssh client is already installed, but we will have to install the ssh server that makes it possible to connect to your machine.
#apt-get install openssh-server

The configuration for sshd is in /etc/ssh/sshd_config
We will edit it, so install your favorite editor – I prefer vim:
#apt-get install vim
Then:
#vim /etc/ssh/sshd_config

There’s a lot of settings but what I normally do right after installation is to set “PermitRootLogin no” and change the port. Both these changes are for security reasons. We will change the port in another post so for now just change PermitRootLogin.

Start it by*:
#service ssh start
To check the status of ssh on Xubuntu:
#service ssh status
ssh start/running, process 5283

Last thing to do is to test it by connecting to our self:
$ssh <username>@localhost

 

ssh_first


* On most modern Linux system you should use systemctl, however it is not adapted by xubuntu 14. If your distro use systemctl try:
#systemctl start sshd

Step 1 – Setup the Network


We need to know the IP of guest A:
$ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:c1:53:16 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0

That means the guest has IP 10.0.2.15 on eth0. The device id “eth0” will be important later when we use multiple network interfaces.

Start guest B and keep A running. Since we won’t connect to guest B only from it, it’s not necessary to install the ssh-server.
Try to connect to guest A from B:
$ssh <username>@10.0.2.15
ssh: connect to host 10.0.2.15 port 22: Connection refused

Refused, check what the ip for guest B is:
$ip addr
inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0

Hm, that’s not good ,they have same IP.

The guests are also hidden from each other behind the host, so they’re given the same IP. The host doesn’t automatically route the traffic. What we need is a LAN where the guest can reach each other.

Step 2 – Setting dhcpserver


We need a DHCP Server. A DHCP Server is responsible for giving devices on a network a valid IP address, normally your wireless router does this for you at home.

Open terminal in your host:
(If you use windows go to your virtalbox installation folder, default is ‘program files\oracle\virtualbox’)

The parameters you need to set is the following:
–netname: This must be the same as the network name for adapter 3. I choose “inet-1”
ip: This is the IP to your DHCP server, Don’t choose the same as for your host’s network. My host has 192.168.0.1 so I picked 192.168.3.1 (I like to use the same digit as my adapter for the second last number).
–netmask: Depending on how big network you want, but should probably be 255.255.255.0
–lowerip: Lowest IP a connected machine can have. I choose 192.168.3.2 (avoid ending with 0 or 1).
–upperip: Highest IP a connection can have. I picked 192.168.3.254 (avoid ending with 255)
–enable: This flag must be set or the DHCP Server won’t be used.


See the manual
for further information about dhcpserver.

My command look like this:
>VBoxManage dhcpserver add –netname inet-1 -ip 192.168.3.1 –netmask 255.255.255.0 –lowerip 192.168.1.2 –upperip 192.168.3.254 –enable

Turn off the machines so that you can modify them. Select Guest A in virtualbox and go to Network. Adapter 1 shows attached to NAT, network address translation. In other words the adapter just translate the traffics destination to the guest. Disable it and select adapter 3.
Change the attach to internal network to “inet-1”.
Do the same for guest B.

inet
Restart the guests. Try ip addr on guest A and B:
A:
inet 192.168.3.3/24 brd 192.168.3.255 scope global eth0
B:
inet 192.168.3.2/24 brd 192.168.3.255 scope global eth0

Looks good, let’s try ssh from B to A now:
$ssh <username>@192.168.3.3
ssh_success

Step 3 – Where’s my internet?


If you start a web browser you notice that you cannot connect to internet anymore. Since your adapter is only connected to LAN you can’t reach to the outside world anymore. The easiest fix for this is to add adapter 1 again.
However if you do ip addr you will notice that you now have two network interface with their own IP:
inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
inet 192.168.3.3/24 brd 192.168.3.255 scope global eth1

What we have done here is to plug one cable to the internet outlet and we one to our LAN router. Some times this is what we want, but it is not a very common setup. What we would like to do is to have our router connected to internet and then translating the addresses for all the machines in the LAN. This can be done by NAT Network.

Open a console on your host.

The parameters you need to set is the following:
–netname: the name of the NAT network. I choose nnet-1
–network: the ip of this network. This will also be the range of IP that the dhcp will give to connected machines. I choose 192.168.2.0/24
–enable: this flag must be set to use the network
–dhcp: If you want dhcp set it to “on”

See the manual for more information about natnetwork

My command line look like this:

>VBoxManage natnetwork add –netname nnet-1 –network 192.168.3.0/24 –enable –dhcp on
Disable adapter 1 and 3. Enable Adapter 2 and select attached to NAT Network and select the network we just created.

Start your guests again and make sure you can use internet.
Then try to connect from B to A again by ssh.

It works!

Conclusion


Now you can set up a network with several guests. It is much cheaper than buying several physical computers and requires less space and power. But what kind of Network should you choose? If you are playing around with a web server it is more secure to use the LAN solution, but it is also troublesome if you want to install software.
If you only want to use internet some times you could do the LAN solution with a NAT adapter. You can at any time uncheck the “Cable connected” and you will go offline.

Virtualbox – Android Development Setup

In this guide I will show how to set up a Linux guest OS for Android development.

Requirements:
Basic Linux usage.
Basic Android Studio usage.
Virtualbox installed.

Toys/Equipment:
Android Device – If you want to learn how to run your app on a device and not emulator. I’m using a Sony z1.

Time:
Around 30 min.

Table of content

Introduction


Android is based on Linux and most tools for developing is made for Linux. I used to develop using Windows but it was never as smooth as for Linux. Sometimes my work has forced me to use a Windows machine and then the first thing I do is to install a linux VM. I really hate to use Cygwin – why try imitate Linux when you can have the real thing?
Now using virtualbox for Android isn’t totally pain free since you need to use adb through USB, something that can be tricky to set up correctly, especially if your host is Linux.

Step 0 – Xubuntu


When I first started to use Ubuntu I loved it. It was not full of things I didn’t need as in Windows and it was quite user friendly. However, after a while I started to feel it was bloated and I never liked Unity. Unity throws big icons in my face and more than a few times it is incompatible and you have to do a lot of research to solve the problems.
If you are going to use your VM for Android development I instead recommend Xubuntu. It is very similar to Ubuntu, but it is stripped down and the desktop environment xfce is much more in my taste.

In this guide I will be using Xubuntu, but it should be fine to use any Ubuntu clone.
Download and install Xubuntu here:
http://xubuntu.org/

In this guide I’m using Xubuntu 14.04 64-bit. First thing to do is to is to update the guest OS. Note that for this guide ‘$’ means normal shell command, while ‘#’ means executed as super user.
#apt-get update
#apt-get upgrade

Step 1 – Why is my screen so small?!


This is probably everyone’s first question when they have installed a Linux guest.
Pressing [right ctrl + f] enter full screen mode, but still the working area is 800×600. You need to install the guest additions to get a higher resolution. The good news is that for Ubuntu it is easy (while it is somewhat more demanding for other distros such as CentOS).

Install the guest addition for x11 and reboot:
#apt-get install virtualbox-guest-x11
#reboot

Ah, that’s better!

Step 2 – Android Studio


Android Studio requires Java, and of course if you are going to develop for android you need Java 7+. Xubuntu doesn’t come with java so you have to install:
#add-apt-repository ppa:webupd8team/java
#apt-get update
#apt-get install oracle-java8-installer

java_alternatives

Check the configuration with:
#update-alternatives–config java

Download Android Studio:
https://developer.android.com/sdk/index.html#Other

Make sure you choose “All Android Packages” and not “SDK tools only”. In this guide I have used android-studio-ide-141.1980579-linux.zip.
Extract the archive. I extracted it to ~/android/android-studio

If you have 64-bit version of your guest, then you will have to install some 32-but libraries to be able to run Android Studio.
#apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 lib32stdc++6

Start android studio:
$android/android-studio/bin/studio.sh

I found Darcula them doesn’t look good in Xubuntu so I choose the default IntelliJ.
You will have to download the SDK. At some of my positions we had our own SDK but I haven’t found a way to skip this step. I installed it to ~/android/sdk

Step 3 – Android Project


Create a new Android Project with a blank activity. Connect your Android Device with USB. Run the app [shift F10]
The Choose Device dialog is empty.

Check the status of the USB on the guest:
$lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 80ee:0021 VirtualBox USB Tablet
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Hmm… there’s no USB device connected. Try to run the same command on your host if you run Linux, or check “This PC” if you use windows. The USB is visible at the host right?

To allow the guest to detect USB you need to add it to the VM USB Device Filters.
Open virtualbox and click USB and then on the USB with a green plus sign. You should see your device in this list. Select it and make sure it is checked and then press OK.


Only one OS (host or guest) can control an USB device at the same time. This is important to remember when you troubleshot your USB. The Device Filter control if the guest OS should use the USB or the host.
Disconnect the USB and reconnect it and check for devices on your guest.
$lsusb
Bus 001 Device 004: ID 0fce:d107 Sony Ericsson Mobile Communications AB

That’s better!
Don’t forget to check the “USB debugging” in developers option of the Android Device.

Step 4 -Troubleshooting


“Unable to run mksdcard SDK tool” when installing the SDK:
You are missing 32-bit libraries:
#apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 lib32stdc++6

I use Linux and I can’t see my USB device:
You need to add yourself to vboxusers group, or you wont have permission to access the USB devices.
#adduser $USER vboxusers

https://help.ubuntu.com/community/VirtualBox/USB

I can find my device but not use it in Android studio:
Make sure USB debugging is on on the android device.

adb devices shows ?????? as id:
adb does not have the correct premissions. Try to restart it as super user:
$adb kill-server
#adb start-server

Conclusion


Setting up an Android development environment on a guest is quite same as on a host. The only thing you need to consider is the USB support. Your key tools when trouble shooting  is lsusb and adb.  adb devices gives you information about the android device, while lsusb gives you information about USB devices.
I prefer Xubuntu, but if you want a really easy installation I recommend Linux mint http://www.linuxmint.com/download.php. It automatically installs the guest drivers (and cinnamon looks damn good).  Cooperates should really consider using mint instead of Ubuntu.

Virtualbox – The basics

The first step when using virtual machines is to install the visualization software. In this guide I will show you how to install virtualbox and start a Linux installation.

Requirements
Nothing – this guide is for complete beginners

Time
Around 30 min

Table of content

Introduction – Virtual Machines


There are many reason why using virtual machines are beneficial. They don’t take any physical space, they consume less power and they are portable. Another technique for running  multiple OS is to dual boot where you install two OS  on the same drive. This is more risky because if you mess up the installation you might wipe out both of your OS.

When talking about virtual machines it can be confusing to understand what OS you mean. I will use the most common terminology: the OS running on your physical machine is a host OS or just host. OS running on a simulated machine (like virtualbox) is called guest OS or just guest.

Step 0 – Install virtualbox


First thing to do is to download and install virtualbox. It can be found  on https://www.virtualbox.org/wiki/Downloads

In this guide I will be using virtualbox 5.0. There is also an extensionpack that enable some nice features like USB 2/3. However the license is a bit different so read it carefully before you install it. If you are just going to use virtualbox for private use it shouldn’t be any problem. It won’t be necessary for this guide, but I recommend to install it. It can be found on the same page.

Step 1 – Download Ubuntu


Download ubuntu iso at http://www.ubuntu.com/download/desktop

Ubuntu is one of the most user friendly Linux distros and because it is very popular there are plenty of good information about basic things online. Personally I do not use Ubuntu anymore, it feels bloated and the desktop environment Unity is not my thing. However if you are new to Linux it’s an excellent choice. In this guide I will be using Ubuntu 14.0.2 64 bit version.

Step 2 – Setup a guest


Press “New” button in virtualbox. Select export mode (it’s really no big difference between guided mode).

Name and operating system

ubuntu_install

 

Name: whatever you want. I use ubuntu_v14_64bit
Type: Often will be automatically filled if you use a proper name. Otherwise select Linux.
Version: Select Ubuntu 64-bit.

Click next

Memory size
The only thing to concider here is that the guest will use the host’s memory, so you should not take all the RAM you have.  4 Gig should be enough for most systems.

Hard disk
Select “Create a virtual hard disk now”

Click create.

Hard disk file type
Click “expert mode”

File location: These files can get quite big so save them where you got plenty of space. Moving these files can require some work so chose carefully.
File size: 8 Gig is minimum, but that is quite brave. I recommend to select at least 30 gig. If you fill your drive it is difficult and some times impossible to resize the drive so choose carefully.
Hard disk file type: VDI
Storage on physical hard disk: Dynamically allocated. This makes the harddrive file grow as you fill it. Selecting this makes it easier to choose a larger size. The only reason to choose Fixed size is if you have an old and slow hard drive.

vb_create_vhd

Click create.

Step 3 – prepare for installation


We need to add the installation CD and boot from it and do some performance tweaking.

General
Click advanced. In Shared Clipboard select bidirectional. It will make it possible to copy paste text between host and guest, something that’s really nice when you google.

System
In Boot order uncheck the floppy. Make sure that Optical is checked and the topmost device -since we will boot from a CD.

In Processor, select as many as your host got. You should select at least 2 processors. It’s not so important for Ubuntu but some other distros (like CentOS) requires at least 2 processors.

Storage
Click on the empty CD. To the right there’s another CD icon next to “Optical Drive”. Click on it and select the Ubuntu ISO. Click OK, we’re ready!

Start the guest OS and the installation program starts.

ubuntu_v14_64bit