As a long time Maemo user (OS2007 on a Nokia n800, OS2008 on a Nokia N810 and Maemo 5 on a Nokia n900) and really like having an open Linux mobile platform. Even though I get shorted on all the Android apps out there I have virtually everything I need (short of Yelp and OneBusAway apps) and a whole lot more. Having a full featured Linux OS on my phone is very useful for a variety of reasons one of which I get a real terminal. I have an app that uses rsync to synchronize my media server to my phone so I never have to manage my music/podcasts via the mobile interface. Multitasking on the n900 is amazing in comparison to Apple's iOS or Android.
However, the n900 keeps getting older and I'd like to have something newer. I'm not about to give up my awesome mobile OS though for a nice piece of hardware running a Java stack. Let's not forget that Nokia make phenomenal hardware even if it was expensive. Their stuff is rock solid and I've had to reboot my n900 fewer times in the last 18 months than I did per week on my Android 2.2 phone.
With all of that in mind I've been waiting for a replacement for Maemo 5. Nokia was working on Maemo 6 then merged their efforts with Intel's Moblin which proved to be a disaster. It took an extra 2 years to get nowhere before Meego 1.2 was released. Nokia put it on one phone, the n9 (which I'd still like to have) and then abandoned it. Intel then announced it was going to carry the torch alone which nobody believed since Intel can't design a piece of software to save their lives. Soon after they too abandoned it. The community project of Mer picked up the source code and started working on it which was supposed to be used by the Vivaldi tablet which never went anywhere.
Intel then partnered with Samsung to work on Tizen which hasn't gone anywhere either. So where does this leave me? Using my couple year old n900 for a bit longer. However, there may be yet another ray of hope (but I'm not holding my breath) - Sailfish OS.
Apparently Sailfish OS from Jola is based on MeeGo but I'm not sure if it's using the Mer codebase or they forked it from MeeGo. Here's a video of Sailfish OS running on a Nokia n950 (my dream phone) and it looks pretty neat. They're saying that they will be able to release in early 2013. Until I see something I can buy or use I'll wait patiently and try not to get too excited.
Up until about now I've been developing the Xenapi Admin Tools on my local cloud. I've been maintaining revisions on a local Subversion server which has been accessible by only the Xenapi Admin Project team. Now that we're slowly moving our projects public for inclusion in the Xen Cloud Platform's github I wanted to push Xenapi Admin Tools to github which is partly done as of today.
The URL for the repo is https://github.com/Xenapi-Admin-Project/xenapi-admin-tools. Please feel free to browse the code and the development docs which outline the Xenapi Admin Tools spec and it's built in functions. I also have a yum repo file and a SPEC file for when I start creating rpms for Xen Cloud Platform/Xenserver. For now I would not consider that anything but alpha. At some point you'll be able to just install the Xenapi-admin-repo rpm and then yum install xenapi-admin-tools to install all of the tools including their manpages, config files and more. Currently a lot of these things don't exist. Also there are two branches of code in the github repo - 3.0 and 4.0. Not all tools are available in 4.0 yet as I'm still rewriting them. The difference is massive speedups with 4.0. Stay tuned for more news.
Installing from an XCP/Xenserver template usually gives you one Virtual Disk to install the operating system on. Depending on your needs this disk may not be large enough. Following is a tutorial on how to add an additional disk to a virtual machine.
Virtual Machine - A virtual machine is a computer that's virtualized and running on a hypervisor. In our case the hypervisor is Xen Cloud Platform/Xenserver. The Virtual Machine can be running any operating system.
Virtual Disk Image - Think of a Virtual Disk Image as a hard drive.
Storage Repository - A "box" storing Virtual Disk Images. Think of this as an external box storing virtual hard drives. The virtual hard drives are the Virtual Disk Images mentioned above.
Virtual Block Device - A Virtual Block Device connects a Virtual Disk Image to a Virtual Machine. In traditional computer terms you could think of it as the cable.
The process for adding a hard drive to a real computer
Insert the disk in the hard drive box
Connect the cable to the hard drive box
Insert the cable into the Computer
The process of adding a new Virtual Disk for a Virtual Machine is
Create a new Virtual Disk Image
Create a new Virtual Block Device for it
Connect the Virtual Block Device to the Virtual Machine
1. Get available free space
You will need to know how much free space is available on your Storage Repository.
I created Virtual Block Device 7 (device=7). Using device=0 would have given me a /dev/dev/xvda which I already have. The xe-param-get command showed my first available Virtual Block Device number was 7. Notice that we associated the Virtual Disk Image (VDI) to the Virtual Machine (VM) by using a Virtual Block Device (VBD).
5. Plug in the disk to the VM
The VM won't see the disk yet as it hasn't been "plugged in". We can do this by either rebooting the VM or using the xe vbd-plug command. Let's plug the VBD into the running VM.
Adding a CD to a running VM is not a difficult task if you know which commands to use. By adding I mean we're going to insert a virtual CD disk into a virtual machine using our little virtual hands. ;-)
1. Get the name of your Virtual Machine
In this case the name is CentOS6 and the UUID is cefb9f88-0424-6701-5ba1-070490c69203.
Utilizing an ISO image in a VM's cdrom drive is fairly easy to do but because of the limited size of the Control Domain's (dom0) operating system partition it's difficult to download ISO images to /opt/xensource/packages/iso and it isn't really recommended to put them there anyway. In this tutorial we'll create a CD repository using an local Logical Volume.
First we need to know the name of the LVM Volume Group. This is taken from the Storage Repository's UUID. To get this we'll use xe host-list.
Using xe sr-list type=lvm shows only our local Storage Repository which has the UUID of 36bf480a-5df9-4453-50f0-2bac4a86cb42. We'll now use the vgs command to give us the names of all Volume Groups including VG_XenStorage-36bf480a-5df9-4453-50f0-2bac4a86cb42 which matches our SR UUID.
Utilizing an ISO image in a VM's cdrom drive is fairly easy to do but because of the limited size of the Control Domain's (dom0) operating system partition it's difficult to download ISO images to /opt/xensource/packages/iso and it isn't really recommended to put them there anyway. In this tutorial we'll create a CD repository using an additional hard drive on Dom0.
First we need to know the device name of the disk.
[root@cloud1 media]# cat /proc/partitions
major minor #blocks name
8 0 976762584 sda
8 1 4194304 sda1
8 2 4194304 sda2
8 3 968371393 sda3
8 16 234431064 sdb
Utilizing an ISO image in a VM's cdrom drive is fairly easy to do but because of the limited size of the Control Domain's (dom0) operating system partition it's difficult to download ISO images to /opt/xensource/packages/iso and it isn't really recommended to put them there anyway. In this tutorial we'll create a CD repository using an NFS share.
In our example we'll be using a share on the cloud0 host named /media/NFSISO. To set this up on cloud0 you'd log into cloud0 as root and add this line to the /etc/exports file of your NFS server.
I'd recommend that you secure your NFS share more tightly than I've done here but for the purpose of this tutorial we'll go with it. We need to make a directory that we can mount our NFS share on first.
I've been working on ways of getting information to the XCP/Xenserver Admins eyes faster than the standard xe commandline tool provides. This tool - lshosts is a rewrite of lshostvms.sh which showed each host and how many running VMs were on it, something I often would like to know. While rewriting it to include some of the better structure of my newer tools I started adding features. Now it displays either the Host's name-label or UUID, the number of running VMs, the CPU type, CPU cores, CPU speed, Total Memory, Free Memory and Network backend type.
As an added bonus I've added a -c option so the output is in CSV format. All future commands should have this option and I'll be retrofitting older commands when I get time.
Sometimes I get a stuck Virtual Machine that just won't go down and it's usually due to a lack of memory in the VM. When I issue a shutdown command from within the VM it starts the shutdown process but hangs part way through. Executing xe vm-shutdown --force uuid=<insert UUID here> does nothing but lock up the terminal. If this happens to you follow the steps below to forcefully shut the VM down.
xe task-list (find the pending tasks UUID)
xe task-cancel uuid=<task UUID>
xe vm-list (note the VM's UUID)
list_domains (find the VM's UUID and note the domain id)
/opt/xensource/debug/destroy_domain -domid XX (where XX is the domain id from step 2)
xe vm-shutdown --force uuid=<UUID from step 1>
This will canceling the tasks that may be locking any new tasks e.g. the shutdown commands, destroying the domain and then shutting the VM down. I've had to do this several times on an Apache webserver that's getting pummeled from the Internet.
The steps above in script form (if you trust me). Step one has to be entered in manually. The rest can be copied and pasted.
My newest XCP tool is to list networks in a quick concise manner. By default lsnetworks shows the network name, the bridge it's associated with, the VLAN tag (if there is one), the VMs that have a network interface on it and the number of that interface.
Because XCP/Xenserver relies so much on UUID numbers I've provided a -u option which lists every object by UUID number if it has one. This won't be quite as useful as an interactive tool but if you're copy and pasting UUID's into xe commands this will give you a quick summary of them in relation to networks.