Tag Archives: kvm

Fedora x86_64 installer hanging on KVM hosts

Had an annoying problem today where a Fedora x86_64 guest wouldn’t install on my CentOS KVM server. Weirdly the i386 version had installed perfectly, but the x86_64 version would repeatedly crash and chew up heaps of CPU at the software package selection screen.

I hate being stuck here...

Stuck here, unresponsive console, no mouse, etc?

Turns out that 512MB of RAM isn’t enough to install Fedora x86_64, but is enough to get away with installing Fedora i386 on. Simply boost the RAM allocation of the VM up to 1GB, and the installation will proceed OK. You can drop the RAM allocation down again afterwards.

Unsure why the installer dies in such a strange fashion, I would have expected Linux’s OOM to terminate the installer and leave me with a clear message, but maybe Anaconda is doing something weird like OOM protection and just ends up with the system running out of memory and hanging.

KVM instances dying at boot

I recently encountered a crashing KVM instance, where my VM would die at boot once the bootloader tried to unpack initrd.

A check of the log in /var/log/libvirt/qemu/vmname.log showed the following unhelpful line:

Guest moved used index from 6 to 229382013-04-21 \
06:10:36.029+0000: shutting down

The actual cause of this weird error and crash occurs when the host OS lacks disk space on the host server’s filesystems. In my particular case, my filesystem was at 96% full, so whilst the root user could write to disk, the non-root processes including Libvirt/KVM were refused writes.

I’m not totally sure why the error happens, all my VM disks are based on LVM volumes rather than the host root filesystem, I suspect the host OS disk is being used for a temporary file such as unpacking initrd and this need for a small amount of disk leads to this failure.

If you’re having this problem, check your disk space and add some Nagios alerting to avoid a repeat issue!

Great server crash of 2012

In a twist of irony, shortly after boarding my flight in Sydney for my trip back to Wellington to escape the heat of the AU summer, my home NZ server crashed due to the massive 30 degree heatwave experienced in Wellington on Christmas day. :-/

I have two NZ servers, my public facing colocation host, and my “home” server which now lives at my parent’s house following my move. The colocation box is nice and comfy in it’s aircon controlled climate, but the home server fluctuates quite significantly thanks to the Wellington climate and it’s geolocation of being in a house rather than a more temperature consistent apartment/office.

After bringing the host back online, Munin showed some pretty scary looking graphs:

localhost flew too close to the sun and plummeted to it's doom

localhost flew too close to the sun and plummeted to his doom

I’ve had problems with the stability of this system in the past. Whilst I mostly resolved this with the upgrades in cooling, there are still the odd occasions of crashing, which appears to be linked with summer months.

The above graphs are interesting since they show a huge climb in disk temperatures, although I still suspect it’s the CPU that lead to the actual system crash occurring – the CPU temperature graphs show a climb up towards 60 degrees, which is the level where I’ve seen many system crashes in the past.

What’s particularly annoying is that all these crashes cause the RAID 6 to trigger a rebuild – I’m unsure as to why exactly this is, I suspect that maybe the CPU hangs in the middle of a disk operation that has written to some disks, but not all.

Having the RAID rebuild after reboot is particularly nasty since it places even more load and effort onto an already overheated system and subjects the array to increased failure risk due to the loss of redundancy. I’d personally consider this a kernel bug, if a disk operation failed, the array should still have a known good state and be able to recover from that – fail only the blocks that are borked.

Other than buying less iffy hardware and finding a cooler spot in the house, there’s not a lot else I can do for this box…. I’m pondering using CPU frequency scaling to help reduce the temperature, by dropping the clock speed of the CPU if it gets too hot, but that has it’s own set of risks and issues associated with it.

In past experiments with temperature scaling on this host, it hasn’t worked too well with the high virtualised workload causing it to swap frequently between high and low performance, leading to an increase in latency and general sluggishness on the host. There’s also a risk that clocking down the CPU may just result in the same work taking longer on the CPU potentially still generating a lot of heat.

I could attack the workload somewhat, the VMs on the host are named based on their role, eg (prod-, devel-, dr-) so there’s the option to make use of KVM to suspend all but key production VMs when the temperature gets too high. Further VM type tagging would help target this a bit more, for example my minecraft VM is a production host, but it’s less important than my file server VM and could be suspended on that basis.

Fundamentally the host  staying online outweighs the importance of any of the workloads, on the simple basis that if the host is still online, it can restart services when needed. If the host is down, then all services are broken until human intervention can be provided.

virt-viewer remote access tricks

Sometimes I need to connect directly to the console of my virtual machines, typically this is usually when working with development or experimental VMs where SSH/RDP/VNC isn’t working for whatever reason, or when I’m installing a new OS entirely.

To view virtual machines using libvirt (by both KVM or Xen), you use the virt-viewer command, this launches a window and establishes a VNC or SPICE connection into the virtual machine.

Historically I’ve just run this by SSHing into the virtual machine host and then using X11 forwarding to display the virtual machine window on my laptop. However this performs really badly on slow connections, particularly 3G where it’s almost unusable due to the design of X11 forwarding not being particularly efficient.

However virt-viewer has the capability to run locally and connect to a remote server, either directly to the libvirt daemon, or via an SSH tunnel. To do the latter, the following command will work for KVM (qemu) based hypervisors:

virt-viewer --connect qemu+ssh://user@host.example.com/system vmnamehere

With the above, you’ll have to enter your SSH password twice – first to establish the connection to the hypervisor and secondly to establish a tunnel to the VM’s VNC/SPICE session – you’ll probably quickly decide to get some SSH keys/certs setup to prevent annoyance. ;-)

This performs way faster than X11 forwarding, plus the UI of virt-manager stays much more responsive, including grabbing/ungrabbing of the local keyboard/mouse, even if the connection or server is lagging badly.

If you’re using Xen with libvirt, the following should work (I haven’t tested this, but based on the man page and some common sense):

virt-viewer --connect xen+ssh://user@host.example.com/ vmnamehere

If you wanted to open up the right ports on your server’s firewall and are sending all traffic via a secure connection (eg VPN), you can drop the +ssh and use –direct to connect directly to the hypervisor and VM without port forwarding via SSH.

How Jethro Geeks – IRL

A number of friends are always quite interested in how my personal IT infrastructure is put together, so I’m going to try and do one post a week ranging from physical environments, desktop, applications, server environments, monitoring and architecture.

Hopefully this is of interest to some readers – I’ll be upfront and advise that not everything is perfect in this setup, like any large environment there’s always ongoing upgrade projects, considering my environment is larger than some small ISPs it’s not surprising that there’s areas of poor design or legacy components, however I’ll try to be honest about these deficiencies and where I’m working to make improvements.

If you have questions or things you’d like to know my solution for, feel free to comment on any of the posts in this series. :-)

 

Today I’m examining my physical infrastructure, including my workstation and my servers.

After my move to Auckland, it’s changed a lot since last year and is now based around my laptop and gaming desktop primarily.

All the geekery, all the time

This is probably my most effective setup yet, the table was an excellent investment at about $100 off Trademe, with enough space for 2 workstations plus accessories in a really comfortable and accessible form factor.

 

My laptop is a Lenovo Thinkpad X201i, with an Intel Core i5 CPU, 8GB RAM, 120GB SSD and a 9-cell battery for long run time. It was running Fedora, but I recently shifted to Debian so I could upskill on the Debian variations some more, particularly around packaging.

I tend to dock it and use the external LCD mostly when at home, but it’s quite comfortable to use directly and I often do when out and about for work – I just find it’s easier to work on projects with the larger keyboard & screen so it usually lives on the dock when I’m coding.

This machine gets utterly hammered, I run this laptop 24×7, typically have to reboot about once every month or so, usually from issues resulting with a system crash from docking or suspend/resume – something I blame the crappy Lenovo BIOS for.

 

I have an older desktop running Windows XP for gaming, it’s a bit dated now with only a Core 2 Duo and 3GB RAM – kind of due for a replacement, but it still runs the games I want quite acceptably, so there’s been little pressure to replace – plus since I only really use it about once a week, it’s not high on my investment list compared to my laptop and servers.

Naturally, there are the IBM Model M keyboards for both systems, I love these keyboards more than anything (yes Lisa, more than anything <3 ) and I’m really going to be sad when I have to work in an office with other people again whom don’t share my love for loud clicky keyboards.

The desk is a bit messy ATM with several phones and routers lying about for some projects I’ve been working on, I’ll go through stages of extreme OCD tidiness to surrendering to the chaos… fundamentally I just have too much junk to go on it, so trying to downsize the amount of stuff I have. ;-)

 

Of course this is just my workstations – there’s a whole lot going on in the background with my two physical servers where the real stuff happens.

A couple years back, I had a lab with 2x 42U racks which I really miss. These days I’m running everything on two physical machines running Xen and KVM virtualisation for all services – it was just so expensive and difficult having the racks, I’d consider doing it again if I brought a house, but when renting it’s far better to be as mobile as possible.

The primary server is my colocation box which runs in a New Zealand data center owned by my current employer:

Forever Alone :'( [thanks to my colleagues for that]

It’s an IBM xseries 306m, with 3.0Ghz P4 CPU, 8GB of RAM and 2x 1TB enterprise grade SATA drives, running CentOS (RHEL clone). It’s not the fastest machine, but it’s more than speedy enough for running all my public-facing production facing services.

It’s a vendor box as it enabled me to have 3 yrs onsite NBD repair support for it, these days I have a complete hardware spare onsite since it’s too old to be supported by IBM any longer.

To provide security isolation and easier management, services are spread across a number of Xen virtual machines based on type and risk of attack, this machine runs around 8 virtual machines performing different publicly facing services including running my mail servers, web servers, VoIP, IM and more.

 

For anything not public-facing or critical production, there’s my secondary server, which is a “whitebox” custom build running a RHEL/CentOS/JethroHybrid with KVM for virtualisation, running from home.

Whilst I run this server 24×7, it’s not critical for daily life, so I’m able to shut it down for a day or so when moving house or internet providers and not lose my ability to function – having said that, an outage for more than a couple days does get annoying fast….

Mmmmmm my beautiful monolith

This attractive black monolith packs a quad core Phenom II CPU, custom cooler, 2x SATA controllers, 16GB RAM, 12x 1TB hard drives in full tower Lian Li case. (slightly out-of-date spec list)

I’m running RHEL with KVM on this server which allows me to run not just my internal production Linux servers, but also other platforms including Windows for development and testing purposes.

It exists to run a number of internal production services, file shares and all my development environment, including virtual Linux and Windows servers, virtual network appliances and other test systems.

These days it’s getting a bit loaded, I’m using about 1 CPU core for RAID and disk encryption and usually 2 cores for the regular VM operation, leaving about 1 core free for load fluctuations. At some point I’ll have to upgrade, in which case I’ll replace the M/B with a new one to take 32GB RAM and a hex-core processor (or maybe octo-core by then?).

 

To avoid nasty sudden poweroff issues, there’s an APC UPS keeping things running and a cheap LCD and ancient crappy PS/2 keyboard attached as a local console when needed.

It’s a pretty large full tower machine, so I except to be leaving it in NZ when I move overseas for a while as it’s just too hard to ship and try and move around with it – if I end up staying overseas for longer than originally planned, I may need to consider replacing both physical servers with a single colocated rackmount box to drop running costs and to solve the EOL status of the IBM xseries.

 

The little black box on the bookshelf with antennas is my Mikrotik Routerboard 493G, which provides wifi and wired networking for my flat, with a GigE connection into the server which does all the internet firewalling and routing.

Other than the Mikrotik, I don’t have much in the way of production networking equipment – all my other kit is purely development only and not always connected and a lot of the development kit I now run as VMs anyway.

 

Hopefully this is of some interest, I’ll aim to do one post a week about my infrastructure in different areas, so add to your RSS reader for future updates. :-)

Munin Performance

Munin is a popular open source network resource monitoring tool which polls the hosts on your network for statistics for various services, resources and other attributes.

A typical deployment will see Munin being used to monitor CPU usage, memory usage, amount of traffic across network interface, I/O statistics and more – it’s very handy for seeing long term performance trends and for checking the impact that upgrades or adjustments to the environment have made.

Whilst having some overlap with Nagios, Munin isn’t really a replacement, more an addition – I use Nagios to do critical service and resource monitoring and use Munin to graph things in more detail – something that Nagios doesn’t natively do.

A typical Munin graph - Munin provides daily, weekly, monthly and yearly graphs (RRD powered)

Rather than running as a daemon, the Munin master runs a cronjob every 5minutes that calls a sequence of scripts to poll the configured servers and generate new graphs.

  1. munin-update to poll configured hosts for new statistics and store the information in RRD databases.
  2. munin-limits to highlight perceived issues in the web interface and optionally to a file for Nagios integration.
  3. munin-graph to generate all the graphs for all the services and hosts.
  4. munin-html to generate the html files for the web interface (which is purely static).

The problem with this model, is that it doesn’t scale particularly well – once you start getting a substantial number of servers, the step-by-step approach can start to run out of resources and time to complete within the 5minute cron period.

For example, the following are the results for the 3 key scripts that run on my (virtualised) Munin VM monitoring 18 hosts:

sh-3.2$ time /usr/share/munin/munin-update
real    3m22.187s
user    0m5.098s
sys     0m0.712s

sh-3.2$ time /usr/share/munin/munin-graph
real    2m5.349s
user    1m27.713s
sys     0m9.388s

sh-3.2$ time /usr/share/munin/munin-html
real    0m36.931s
user    0m11.541s
sys     0m0.679s

It’s a total of around 6 minutes time to run – long enough that the finishing job is going to start clashing with the currently running job.

So why so long?

Firstly, munin-update – munin-update’s time is mostly spent polling the munin-node daemon running on all the monitored systems and then a small amount of I/O time writing the new information to the on-disk RRD files.

The developers have appeared to realise the issue of scale with munin-update and have the ability to run it in a forked mode – however this broke horribly for me with a highly virtualised environment, since sending a poll to 12+ servers all running on the one physical host would cause a sudden load spike and lead to a service poll timeout, with no values being returned at all. :-(

This occurs because by default Munin allows a maximum of 5 seconds for each service query to complete across all hosts and queries all the hosts and services rapidly, ignoring any that fail to respond fast enough. And when querying a large number of servers on one physical host, the server would be too loaded to respond quickly enough.

I ended up boosting the timeouts on some servers to 60 seconds (particular the KVM hosts themselves, as there would sometimes be 60+ LVM volumes that Munin wanted statistics for), but it still wasn’t a good solution and the load spikes would continue.

There are some tweaks that can be used, such as adjusting the max number of forked processes, but it ended up being more reliable and easier to support to just run a single thread and make sure it completed as fast as possible – and taking 3 mins to poll all 18 servers and save to the RRD database is pretty reasonable, particular for a staggered polling session.

 

After getting munin-update to complete in a reasonable timeframe, I took a look into munin-html and munin-graph – both these processes involve reading the RRD databases off the disk and then writing HTML and RRDTool Graphs (PNG files) to disk for the web interface.

Both processes have the same issue – they chew a solid amount of CPU whilst processing data and then they would get stuck waiting for the disk I/O to catch up when writing the graphs.

The I/O on this server isn’t the fastest at the best of times, considering it’s an AES-256 encrypted RAID 6 volume and the time taken to write around 200MB of changed data each time was a bit too much to do efficiently.

Munin offers some options, including on-demand graph generation using CGIs, however I found this just made the web interface unbearably slow to use – although from chats with the developer, it sounds like version 2.0 will resolve many of these issues.

I needed to fix the performance with the current batch generation model. Just watching the processes in top quickly shows the issue with the scripts, particular with munin-graph which runs 4 concurrent processes, all of them waiting for I/O. (Linux process crash course: S is sleeping (idle), R is running, D is performing I/O operations – or waiting for them).

Clearly this isn’t ideal – I can’t do much about the underlying performance, other than considering putting the monitoring VM onto a different I/O device without encryption, however I then lose all the advantages of having everything on one big LVM pool.

I do however, have plenty of CPU and RAM (Quad Phenom, 16GB RAM) so I decided to boost the VM from 256MB to 1024MB RAM and setup a tmpfs filesystem, which is a in-memory filesystem.

Munin has two main data sources – the RRD databases and the HTML & graph outputs:

# du -hs /var/www/html/munin/
227M    /var/www/html/munin/

# du -hs /var/lib/munin/
427M    /var/lib/munin/

I decided that putting the RRD databases in /var/lib/munin/ into tmpfs would be a waste of RAM – remember that munin-update is running single-threaded and waiting for results from network polls, meaning that I/O writes are going to be spread out and not particularly intensive.

The other problem with putting the RRD databases into tmpfs, is that a server crash/power down would lose all the data and that then requires some regular processes to copy it to a safe place, etc, etc – not ideal.

However the HTML & graphs are generated fresh each time, so a loss of their data isn’t an issue. I setup a tmpfs filesystem for it in /etc/fstab with plenty of space:

tmpfs  /var/www/html/munin   tmpfs   rw,mode=755,uid=munin,gid=munin,size=300M   0 0

And ran some performance tests:

sh-3.2$ time /usr/share/munin/munin-graph 
real    1m37.054s
user    2m49.268s
sys     0m11.307s

sh-3.2$ time /usr/share/munin/munin-html 
real    0m11.843s
user    0m10.902s
sys     0m0.288s

That’s a decrease from 161 seconds (2.68mins) to 108 seconds (1.8 mins). It’s a reasonable increase, but the real difference is the massive reduction in load for the server.

For a start, we can see from watching the processes with top that the processor gets worked a bit more to complete the process, since there’s not as much waiting for I/O:

With the change, munin-graph spends almost all it’s time doing CPU processing, rather than creating I/O load – although there’s the occasional period of I/O as above, I suspect from the time spent reading the RRD databases off the slower disk.

Increased bursts of CPU activity is fine – it actually works out to less CPU load, since there’s no need for the CPU to be doing disk encryption and hammering 1 core for a short period of time is fine, there’s plenty of other cores and Linux handles scheduling for resources pretty well.

We can really see the difference with Munin’s own graphs for the monitoring VM after making the change:

In addition, the host server’s load average has dropped significantly, as well as the load time for the web interface on the server being insanely fast, no more waiting for my browser to finish pulling all the graphs down for a page, instead it loads in a flash. Munin itself gives you an idea of the difference:

If performance continues to be a problem, there are some other options such as moving RRD databases into memory, patching Munin to do virtualisation-friendly threading for munin-update or looking at better ways to fix CGI on-demand graphing – the tmpfs changes would help a bit to start with.

acpid trickiness

Ran into an issue last night with one of my KVM VMs not registering a shutdown command from the host server.

This typically happens because the guest isn’t listening (or is configured to ignore) ACPI power “button” presses, so the guest doesn’t get told that it should shutdown.

In the case of my CentOS (RHEL) 5 VM, the acpid daemon wasn’t installed/running so the ACPI events were being ignored and the VM would just stay running. :-(

To install, start and configure to run at boot:

# yum install -y acpid
# /etc/init.d/acpid start
# chkconfig --level 345 acpid on

If acpid wasn’t originally running, it appears that HAL daemon can grab control of the /proc/acpi/event file and you may end up with the following error upon starting acpid:

Starting acpi daemon: acpid: can't open /proc/acpi/event: Device or resource bus

The reason can quickly be established with a ps aux:

[root@basestar ~]# ps aux | grep acpi
root        17  0.0  0.0      0     0 ?        S<   03:16   0:00 [kacpid]
68        2121  0.0  0.3   2108   812 ?        S    03:18   0:00 hald-addon-acpi: listening on acpi kernel interface /proc/acpi/event
root      3916  0.0  0.2   5136   704 pts/0    S+   03:24   0:00 grep acpi

Turns out HAL grabs the proc file for itself if acpid isn’t running, but if acpid is running, it will talk to acpid to get it’s information. This would self-correct on a reboot, but we can just do:

# /etc/init.d/haldaemon stop
# /etc/init.d/acpid start
# /etc/init.d/haldaemon start

And sorted:

[root@basestar ~]# ps aux | grep acpi
root        17  0.0  0.0      0     0 ?        S<   03:16   0:00 [kacpid]
root      3985  0.0  0.2   1760   544 ?        Ss   03:24   0:00 /usr/sbin/acpid
68        4014  0.0  0.3   2108   808 ?        S    03:24   0:00 hald-addon-acpi: listening on acpid socket /var/run/acpid.socket
root     16500  0.0  0.2   5136   704 pts/0    S+   13:24   0:00 grep acpi

 

Virtualbox Awesomeness

Work recently upgraded us to the latest MS Office edition for our platform. Most of our staff run MacOS, but we have a handful of Windows users and one dedicated Linux user (guess who?) who received MS Office 2010 for Windows.

I’ve been using MS Office 2007 under Wine for several years, it was never perfect, but about 90% of the functionality worked with some exceptions such as PDF export and certain UI and performance artifacts.

With the 2010 upgrade I decided to instead switch to using Windows under a VM on my laptop to avoid any headaches and to fix the missing features and performance issues experienced running Office under Wine.

Whilst I’m a fan of Xen and KVM, they aren’t so well suited for desktop virtualisation as they’re designed more for server environments and don’t offer some of the more desktop focused features such as seamless integration, video acceleration and easy point & click management interfaces.

Instead I went with VirtualBox thanks to it being mostly open source (open source with exception for a few extensions for USB 2.0 forwarding and network boot) and with a pretty good reputation as a decent VM application.

It also has some of the user-friendly desktop features you’d expect such as being able to forward USB hardware through to guest, mounting any folder on the host as a network share (without needing to setup samba) and 2D/3D video acceleration.

But the real killer feature for me was the seamless windows feature, which allows me to boot the virtual windows desktop and Windows applications alongside my Linux applications smoothly and without the nastiness of an RDP window.

Windows & Linux application windows running together concurrently.

Sadly it’s not quite good enough for you to be able to run the latest Windows games in as the 3D acceleration is quite basic, but it’s magnificent for just about any other non-multimedia application.

The only glitch I found, is that if you have dual screens, you can only run the windows session on one screen at a time, although virtualbox does allow moving the session between monitors whilst running so it’s not too big a deal.

The other annoying issue I had with virtualbox is that it uses image files for storing the guest VMs and it doesn’t appear possible to get it to use an LVM volume instead – so in my case, I waste a bit of space and performance for unnecessary filesystem formatting to store the Windows VM. I guess this is a feature that only a small subset of users would want so it’s not particularly high priority for them to add it.

I’m running Win7 with 2 virtual cores and 1GB of RAM on top of a host with an Intel Core i5 CPU (with hardware virtualisation enabled), 8GB RAM and a Intel 320 series SSD and it’s pretty damn snappy.

As a side note, the seemless window integration also works for Linux-based guests, so you could also do the same ontop of a Windows host, or even Linux-on-Linux if desired.

Impatient Linux geek’s review of Win8 preview

As you undoubtedly know, I’m one of Microsoft’s biggest fans [1], so I eagerly downloaded the newly released Windows 8 Developer Preview to take a look at what they’re aiming to with Windows 8.

This post is just based on a quick look as someone who runs Linux 24×7 for everything, has a lot of familiarity with Windows XP as a user and admin, some Windows 7 user-level experience and without looking through the online resources or keynotes about new capabilities – a pure “fire it up and see what happens” test and figuring out things as I go along.

[1] OK, maybe not really. [2]
[2] OK, so maybe I hate the company, their proprietary products and culture of lock-in. [3]
[3] Fuck Em

 

Environment

To begin with, I downloaded the 32bit OS ISO – mainly because the memory requirements and download sizes are less than the 64bit release and I wanted to see how it would go with 1GB RAM – an amount not unreasonable to expect on lower power tablet computers currently on the market.

I installed it onto my RHEL 6-based Linux KVM server (Kernel-based Virtual Machine, a fantastic virtualisation platform shipped with the Linux kernel and packaged into a number of distributions such as RHEL 6).

I didn’t bother looking for any paravirtualised I/O or networking drivers for Windows 8, so the guest was running on emulated IDE hardware, thus ensuring that I/O would not have anything resembling performance, so I haven’t critiqued Windows 8 for performance at all in this review. :-)

Apparently a lot of people have had problems trying to run Windows 8 on VMWare, but Linux comes through again as an impressively capable platform for virtualisation. [4] :-)

 [4] To date, KVM has virtualised for me: Linux, Windows, BSDs, Minix, HaikuOS, several large routing companies OSes and more. :-)

 

Installation

Installation was typical as per any OS installation from ISO media – virt-install read the ISO fine, launched the windows installer and proceeded to install with a very Windows 7 like installer.

It did “feel” faster than a Windows 7 installation onto the same platform I did recently, however that is purely anecdotal and may be impacted by 32bit vs 64bit install size differences.

After the base installation, typical reboot happened, although it appeared to cause my VM to shutdown rather than reboot – after powering back on, Windows 8 proceeded to take me through the re-done setup screens.

Did you hear? Green is in this year!

It’s a big change from previous install screens – looks like Microsoft pretty much tossed out the UI and started again, basing everything around the colour green.

However it does appear they’ve lost some UI concepts in the process – for example, in the above screen I needed to set a computer name – but clicking in the name field didn’t display me a cursor, nor did the example text vanish, typical responses of most current OSes.

I also found that Windows 8 would refuse to take “devel-win8-pre32” as a hostname, considering it too long – this isn’t really a problem for your average home user, but drives a power user like me up the wall – I want hostnames that suit *my* desires damnit!

Taking a leaf from Apple, or even Google's Android, Microsoft is tying the OS to their online services - although the paranoid can bypass - for an average users, the synchronization features sound like a nice touch.

Not being a Windows Live user (I have an account lying about for occasional use, but not for anything important) I originally tried to bypass the Windows Live registration step, but found that the installer crashed out with an error later on when I did.

After retrying with an “advanced/custom” configuration behaviour and using Windows Live it worked successfully – or at least it didn’t complain about anything I entered, I’m still a little unsure as to whether it logged into an existing account or just created me a new one.

Some UI confusion there - Windows tells me it's creating my Windows live account, but that account already existed....

Being impatient with a GUI OS not giving me any nice console messages to read (like any nix geek really – everyone wants to know what the OS is busy doing!!) I started clicking impatiently and was rewarded with a nice placeholder screen:

Well at least it's not blue?

(It’s actually a major improvement – impatient clicking is the leading way I cause Windows desktops to fall into performance hell, many a time I have attempted to do too many tasks on a Windows XP system to have everything in the OS crawl to a halt, because it can’t handle the usage patterns I’ve picked up from my Linux environment.)

The Windows 8 UI did feel quite sluggish under the VM, but this is something I’ve noticed with Windows 7 as well – suspect it’s due to the newer UI/rendering in their GUIs which doesn’t play nicely with the un-accelerated 2D VM viewer sessions, rather than any actual fault with Windows.

Despite my best efforts to break it, it eventually completed and I ended up at the shiny new Windows 8 “Metro Style” home screen. :-)

 

Operation

Oh Hai Metro!

First impressions of Windows 8 is the new Metro style interface – it’s essentially a number of large clickable buttons in a minimalistic style UI – upon clicking a button, it’s application is launched in full screen mode – with a roll over application-specific popup below.

Metro-aware applications launching in fullscreen - in this case, IE accessing my site - note the minor scrollbar and the popup black bottom OS menubar.

The first thing you’ll notice is the very tablet inspired UI – whilst navigable with a mouse, more conventional UI designs are probably still faster/easier to work with – although this is something that may change after a lot of use.

However with touch, this must change a lot – it will be interesting to hear about detailed reviews from users of touch devices with Windows 8.

I did note the non transparent IE icon on the black bar sticking out awkwardly – maybe MS is still having trouble with image transparency in browsers…. :-P

 

The biggest issue I have with the UI is actually how to get out of it – I found that by moving my mouse to the bottom left corner, the windows start menu – or at least, what remains of it – pops up in a very web-like fashion and you can click to return to the main home page or perform a number of other tasks.

But not always – I managed to get myself trapped inside a paint program that kept blocking the mouse action to get the start menu – and without any windows keys, I was left only with CTL+ALT+DEL to rescue myself.

I'm the new start menu! Don't expect to find anything on me!

The other main issue for me with Metro, was that I *couldn’t* figure out initially how to actually launch conventional programs – since only new metro applications appear on the home screen.

Turns out you now “search” for the programs that you want, or be presented with an alphabetically sorted list – it will be interesting to see how it looks after a user installs 50 conventional applications with half a dozen menu items each, but search does seem to be the way that a number of user interfaces are pushing people towards.

I guess I’m a somewhat old school user who likes my hierarchical menus rather than search – for that reason even some of the newer Linux GUIs cause me pain – but I can respect that the design of these UIs probably aren’t aimed towards people like me.

This is your punishment for loving Google too much, all your UIs will be replaced by search boxes! Mwhahah, search everything! Eventually you'll be searching for search tools to do your searching!

Oh and BTW – don’t rely on the search box – I tried to search for “shell” but didn’t get either traditional command line nor Powershell – not sure what’s happening there….

What is interesting is what happens when you launch a conventional application – I found myself suddenly watching some page flipping graphic animation and being taken to a familiar friend:

I'm a geek, let me tweak something dangerous! >:-D

This probably highlights my single biggest complaint with Windows 8 – it’s not that they changed things, it’s that they didn’t change things _enough_.

IMHO, Microsoft should have thrown out the 1995 derived user interface and gone full on into this new Metro design – with a bit more work, I’m sure it could handle all the same needs just as well.

It’s like Microsoft was split into two teams – one wanting a design for 2011 and one wanting to retain the good old tried and tested design, but instead of either side winning, ended up with this weird dual mode operation.

Of course I’ve always argued that Microsoft should have moved to a BSD based backend like Apple did with MacOS – take the best from the open source world and then build their Windows libraries and APIs ontop of that platform – increase stability, reduced development in the low lever space and ability to move on from win32.

In terms of classic application UIs, a few old friends have had some UI changes, although maybe not so much for command line which has managed to survive a remarkable number of Windows releases whilst looking ugly as fuck.

More graphical wiz in task manager to make sure it runs even slower when your system is crashing.

And of course, the controversial file manager UI changes feature:

Sadly the send to box still lacks "send to pirate bay" or "scp to a real computer" :-(

Whilst I’m sure many readers will lynch me for this, I actually find the new ribbon style interfaces great – I suspect this is because I only really started using MS Office heavily with 2007+ and I found learning with the ribbon easier than with the traditional menu style layout.

Users having to learn new habits will probably hate it though and consider me mad for liking it. They should just harden up and use a CLI, always faster for a power user anyway.

Speaking of which….

 

Command Line, Fuck Yeah

Apparantly Microsoft has had an improved shell around for a while to replace CommandLine, called Powershell – I won’t go into too much detail about it as it’s not really new to Windows 8, but do want to make some comments because it’s the first time I’ve had an actual play with it:

It essentially looks like they took some of the UNIX concepts and built a new shell for Windows that doesn’t entirely suck like the older one – hey, it even has a “ps” command and has other nix-isms like ls and pwd.

Sadly they didn’t implement the “uptime” command so you can’t compare days online without blue screens nor is there a “uname -r” for kernel version boasting contests. And as a helpful addition, I found a remarkable lack of –help parameter understanding.

Hi, I'm windows! I've finally evolved to where UNIX was in 1980 :-P

Over all, it’s actually pretty nice – doesn’t stack up next to a modern Linux CLI, but miles better than the horror know as cmd.exe :-/

TBH, with Windows 8 they should dump the bloody command shell already and make people get with the program and adopt powershell – at worst it might break a couple batch files or some legacy launchers, but with the massive advantage that Linux geeks like me won’t be able to mock the crappy primary CLI so much. [5]

[5] I’m sure I’ll still find a way to mock Windows. :-)

 

Conclusion

Over all I found it an interesting system – it feels like they’re halfway between building a new style of desktop OS yet still have that legacy windows feel stuck behind it they just can’t shake.

I would often find myself dumped back to a somewhat Windows 7-like environment but with a funny acting start menu.

I did find the newer UI a bit more mouse intensive – having to cursor down and pause to get the start menu popup – however I suspect people with bad keyboards [6] will find that the Windows keys might make life easier to launch it.

[6] anything not an IBM Model M

We don't need no frigging Windows key! This household only has real keyboards boy!

 

I have yet to get into the real guts of the OS to see how it’s networking performs, how much memory it eats and how well legacy applications run – this might be tricky without paravirtualised drivers, since the emulated drivers do make an impact on performance.

In terms of quick checks at memory and CPU usage – with only a couple basic OS applications running, the VM was using about 400-500MB out of 1GB assigned and minimal CPU – probably around the same as a Windows 7 install, although maybe a bit less CPU wastage.

And in the hour I spent playing with it, I didn’t cause any nasty crashes – of course, once given real workloads and a variation of different applications and drivers, stuff will get more interesting. :-)

I’m genuinely optimistic about where MS is heading with Windows and their development in general – this is the first Windows release that I believe is accessible for the general public to download and play with, a more public development model will certainly pay off for them with community feedback, bug finding and also just general awareness and free marketing about Microsoft’s new capabilities.

Having said that, for a power user, there’s no way I’d move off Linux to Windows 8, even ignoring the philosophical differences, I still find the Windows architecture too restricting for my liking.

And developing for the new metro interface sounds like a trap for the unwary with restrictions similar to mobile application stores – not everyone shares my concern, but I’m extremely worried about heading into a future where the majority of commercial operating system vendors can control what applications are allowed to be released for their platforms.

 

In terms of the tablet audience, it will be interesting to see how it fares – whilst the iPad and Android tablets are going to pull off the tablet experience slicker/better (IMHO) the ability to run regular windows programs as the line between PC and tablet converges will certainly be attractive to some – and unlike Microsoft’s past forays into tablet computing, they’ve actually done more work than just slapping a touch screen onto a laptop and calling it done.

And that’s me for now – I may come back with some more on Windows 8 in the next few days, but I’ll prob be moving on to doing some reviews of weird *nix style operating systems I’ve been playing with.

KVM/libvirt change CDROM

I was setting up some Windows virtual machines this evening on my Linux KVM/libvirt server, in order to experiment with how Windows handles IPv6 networks.

Installing windows was easy enough – standard virt-install commands, however post-reboot, Windows XP wants to access the CDROM again.

However the reboot causes the CDROM ISO to be unattached from the virtual CDROM drive – so it’s necessary to re-add it to continue installation

However the logical syntax based on virsh help, doesn’t work:

virsh # attach-disk devel-winxp1 /tmp/winxp.iso hdc
error: Failed to attach disk
error: this function is not supported by the connection driver: disk bus 'ide' cannot be hotplugged.

The correct syntax is:

virsh # attach-disk devel-winxp1 /tmp/winxp.iso hdc --type cdrom --mode readonly 
Disk attached successfully

Basically you need to tell libvirt that you’re attaching a *cdrom* and not an actual disk – I’m not sure why it doesn’t just figure that out, based on the fact the user is trying to obviously attach an ISO to a virtual optical drive device – maybe nobody has gotten around to implementing a nice autodetect method yet…