I invoke qemu as follows
$ sudo kvm -drive file=ub-master.qcow2,if=virtio,index=0 -drive file=/home/amitava/iso/ubuntu-1104-mini.iso,media=disk,boot=on -m 512 -net nic -net tap -vnc 127.0.0.1:0 -monitor stdio
By specifying the cdrom as in the 2nd -drive above, it creates a spurious drive "23.1 MB ATA QEMU HARDDISK" and ubuntu-1104-mini.iso installer fails to install grub properly. The fix is easy enough, just use the traditional -cdrom option instead as
$ sudo kvm -drive file=ub-master.qcow2,if=virtio,index=0 -cdrom /home/amitava/iso/ubuntu-1104-mini.iso -m 512 -net nic -net tap -vnc 127.0.0.1:0 -monitor stdio
Wednesday, June 15, 2011
Thursday, June 9, 2011
Solution to jruby bug# 5730 - gem update --system fails
http://jira.codehaus.org/browse/JRUBY-5730
rvm install jruby does not install the rubygems-udpate gem on which gem update --system relies on.
Just install rubygems-update and re-run gem update --system
ashee:hooks amitava$ ruby --version
jruby 1.6.2 (ruby-1.9.2-p136) (2011-05-23 e2ea975) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_24) [darwin-x86_64-java]
ashee:hooks amitava$ gem update --system
Updating RubyGems
ERROR: While executing gem ... (NoMethodError)
undefined method `version' for nil:NilClass
ashee:hooks amitava$ gem update --system -V --backtrace
Updating RubyGems
ERROR: While executing gem ... (NoMethodError)
undefined method `version' for nil:NilClass
/Users/amitava/.rvm/rubies/jruby-1.6.2/lib/ruby/site_ruby/1.8/rubygems/commands/update_command.rb:137:in `update_rubygems'
/Users/amitava/.rvm/rubies/jruby-1.6.2/lib/ruby/site_ruby/1.8/rubygems/commands/update_command.rb:54:in `execute'
/Users/amitava/.rvm/rubies/jruby-1.6.2/lib/ruby/site_ruby/1.8/rubygems/command.rb:278:in `invoke'
/Users/amitava/.rvm/rubies/jruby-1.6.2/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:133:in `process_args'
/Users/amitava/.rvm/rubies/jruby-1.6.2/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:103:in `run'
/Users/amitava/.rvm/rubies/jruby-1.6.2/lib/ruby/site_ruby/1.8/rubygems/gem_runner.rb:63:in `run'
/Users/amitava/.rvm/rubies/jruby-1.6.2/bin/gem:25:in `(root)'
rvm install jruby does not install the rubygems-udpate gem on which gem update --system relies on.
Just install rubygems-update and re-run gem update --system
ashee:~ amitava$ gem install rubygems-update
Fetching: rubygems-update-1.8.5.gem (100%)
Successfully installed rubygems-update-1.8.5
1 gem installed
ashee:~ amitava$ gem update --system
Updating RubyGems
Updating RubyGems to 1.8.5
Installing RubyGems 1.8.5
RubyGems 1.8.5 installed
=== 1.8.5 / 2011-05-31
* 2 minor enhancement:
* The -u option to 'update local source cache' is official deprecated.
* Remove has_rdoc deprecations from Specification.
* 2 bug fixes:
* Handle bad specs more gracefully.
* Reset any Gem paths changed in the installer.
------------------------------------------------------------------------------
RubyGems installed the following executables:
/Users/amitava/.rvm/rubies/jruby-1.6.2/bin/jgem
ashee:~ amitava$
Monday, June 6, 2011
KVM bare metal as non-privileged user
I usually drive kvm via libvirt. Mostly via handcrafted xml files. But I want to run kvm (qemu-system-x86_64) directly without virsh and libvirt and ran into the following permission issue.
open /dev/kvm: Permission denied
Turns out ubuntu 10.04 does not grant permissions to "kvm" group on /dev/kvm. So I had to add an udev rule as specified in FAQ.
$ cat /etc/udev/rules.d/40-permissions.rules
KERNEL=="kvm", GROUP="kvm"
Trying to run on SDL did not work for me. I have a minimalistic host
(!) Direct/Util: opening '/dev/fb0' failed
--> Permission denied
(!) DirectFB/FBDev: Error opening framebuffer device!
(!) DirectFB/FBDev: Use 'fbdev' option or set FRAMEBUFFER environment variable.
(!) DirectFB/Core: Could not initialize 'system_core' core!
--> Initialization error!
Could not initialize SDL - exiting
-curses option did not work for me either, so I used vnc on a local port.
Here's the final command to launch kvm
$ qemu-system-x86_64 -hda ub1104-master.qcow2 -m 512 -boot d -cdrom /home/amitava/iso/ubuntu-1104-mini.iso -vnc "127.0.0.1:5"
And here's the command in my macbook to create an ssh tunnel for my vnc client (Chicken of the VNC)
$ ssh -L 5905:127.0.0.1:5905 # invoke vnc client afterwards
Now I have a master qcow2 image that I can clone in less than a minute to spawn a vm guest. And it takes just 14Mb for a guest with nginx-light - thanks to qemu's copy-on-write (COW).
On a final note - ubuntu 11.04 guest (minimal vm guest) boots fine but fails to show the login prompt. I had to switch to virtual console 2 and back to 1 (Ctrl+Alt+2 & Ctrl+Alt+1) to get the prompt.
open /dev/kvm: Permission denied
Turns out ubuntu 10.04 does not grant permissions to "kvm" group on /dev/kvm. So I had to add an udev rule as specified in FAQ.
$ cat /etc/udev/rules.d/40-permissions.rules
KERNEL=="kvm", GROUP="kvm"
Trying to run on SDL did not work for me. I have a minimalistic host
(!) Direct/Util: opening '/dev/fb0' failed
--> Permission denied
(!) DirectFB/FBDev: Error opening framebuffer device!
(!) DirectFB/FBDev: Use 'fbdev' option or set FRAMEBUFFER environment variable.
(!) DirectFB/Core: Could not initialize 'system_core' core!
--> Initialization error!
Could not initialize SDL - exiting
-curses option did not work for me either, so I used vnc on a local port.
Here's the final command to launch kvm
$ qemu-system-x86_64 -hda ub1104-master.qcow2 -m 512 -boot d -cdrom /home/amitava/iso/ubuntu-1104-mini.iso -vnc "127.0.0.1:5"
And here's the command in my macbook to create an ssh tunnel for my vnc client (Chicken of the VNC)
$ ssh -L 5905:127.0.0.1:5905
Now I have a master qcow2 image that I can clone in less than a minute to spawn a vm guest. And it takes just 14Mb for a guest with nginx-light - thanks to qemu's copy-on-write (COW).
On a final note - ubuntu 11.04 guest (minimal vm guest) boots fine but fails to show the login prompt. I had to switch to virtual console 2 and back to 1 (Ctrl+Alt+2 & Ctrl+Alt+1) to get the prompt.
Monday, April 11, 2011
Monday, April 4, 2011
Friday, April 1, 2011
Edge vs Level Trigger in Distrubuted Computing
Reflecting on the excellent blog post at http://gengnosis.blogspot.com/2007/01/level-triggered-and-edge-triggered.html
The author argues against queuing. Instead rely on (a) state propagation/ synchronization (b) allow individual nodes to make localized decision based on local state (which is assumed to be in-or-near synch via the previous point)
NoSQL anyone?
The author argues against queuing. Instead rely on (a) state propagation/ synchronization (b) allow individual nodes to make localized decision based on local state (which is assumed to be in-or-near synch via the previous point)
NoSQL anyone?
Sunday, February 6, 2011
Python - how to pass by reference
While reading this blog post, I came upon the following trick to pass a list into function and have it be mutated i.e. by-reference semantics
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> x = [10, 20]
>>> print x
[10, 20]
>>> def foo(x): x = [30];
...
>>> foo(x)
>>> x
[10, 20] # the assignment of [30] to x inside foo failed
>>> def bar(x): x[:] = [30]
...
>>> bar(x)
>>> x
[30]
>>>
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> x = [10, 20]
>>> print x
[10, 20]
>>> def foo(x): x = [30];
...
>>> foo(x)
>>> x
[10, 20] # the assignment of [30] to x inside foo failed
>>> def bar(x): x[:] = [30]
...
>>> bar(x)
>>> x
[30]
>>>
Subscribe to:
Posts (Atom)