<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7675198835971134034</id><updated>2012-02-01T09:16:26.509-05:00</updated><category term='string'/><category term='linux'/><category term='lint'/><category term='mail'/><category term='job'/><category term='emacs'/><category term='easier open moko'/><category term='mail dns'/><category term='workaround'/><category term='shell'/><category term='python'/><category term='web'/><category term='unix'/><category term='programming'/><category term='dictionary'/><category term='top'/><category term='network'/><category term='nice'/><category term='urlencode'/><title type='text'>*nix hacks</title><subtitle type='html'>A log of what I've been doing with various unix systems</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default?start-index=101&amp;max-results=100'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>327</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-7645435381801210090</id><published>2012-02-01T09:09:00.002-05:00</published><updated>2012-02-01T09:16:26.519-05:00</updated><title type='text'>emacs usb foot switch</title><content type='html'>Found an entry on emacswiki.org about &lt;a href="http://www.emacswiki.org/emacs/FootSwitches"&gt;foot switches&lt;/a&gt;. I see that &lt;a href="http://xkeys.com/xkeys/xkfoot.php"&gt;xkeys&lt;/a&gt; now has a GPL'd &lt;a href="http://xkeys.com/developer/LinuxSDK.php"&gt;SDK&lt;/a&gt;. I think it's time to get my feet in on the action...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-7645435381801210090?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/7645435381801210090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=7645435381801210090' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/7645435381801210090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/7645435381801210090'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2012/02/emacs-usb-foot-switch.html' title='emacs usb foot switch'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-5463059723273676029</id><published>2012-01-24T10:14:00.002-05:00</published><updated>2012-01-24T10:24:42.412-05:00</updated><title type='text'>DNS TTL Cheat Sheet</title><content type='html'>When migrating a DNS from an old server to a new server I lower the TTL 24 hours before so that when I make the change external users get the new site within an hour instead of the old site because the DNS information is cached for 24 hours. 
&lt;p&gt;
When lowering the TTL I end up having to ask someone or look it up enough that I'm posting this cheat sheet for myself to search in the future. So if a longer TTL is inherited from the top of the zone file and foo.tld inherits that time it would look like the following: 
&lt;pre&gt;
foo                        A       123.456.7.8
&lt;/pre&gt;
To lower it's TTL to one hour I simply insert the time with units (else it's seconds) in between the hostname and the A: 
&lt;pre&gt;
foo        1h              A       123.456.7.8
&lt;/pre&gt;
Then after reloading the zone file query that DNS server for the name: 
&lt;pre&gt;
dig @123.456.2.1 calendar.lafayette.edu
&lt;/pre&gt;
and make sure the ANSWER section contains 3600, which is the number of seconds in an hour: 
&lt;pre&gt;
;; ANSWER SECTION:
foo.tld. 3600    IN      A       123.456.7.8
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-5463059723273676029?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/5463059723273676029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=5463059723273676029' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/5463059723273676029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/5463059723273676029'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2012/01/dns-ttl-cheat-sheet.html' title='DNS TTL Cheat Sheet'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-7708335307335231512</id><published>2012-01-16T17:52:00.004-05:00</published><updated>2012-01-16T17:58:10.010-05:00</updated><title type='text'>svn2git</title><content type='html'>&lt;p&gt;
Nothingmuch's &lt;a href="http://blog.woobling.org/2009/06/git-svn-abandon.html"&gt;Migrating from Subversion to Git&lt;/a&gt; worked for me for two SVN repos that I'm actively working on. 
&lt;/p&gt;
&lt;p&gt;
Quick notes:
&lt;/p&gt;
&lt;pre&gt;
yum install git-svn
git svn clone --prefix=svn/ --stdlayout --authors-file=authors.txt &lt;SVN REPO LOCATION&gt;
git svn-abandon-fix-refs
git svn-abandon-cleanup
&lt;/pre&gt;
This makes a clean git repo complete with tags, branches, and history.  Now set the "central" repo location :
&lt;pre&gt;
git remote add origin &lt;GIT REPO LOCATION&gt;
git config branch.master.remote origin
git config branch.master.merge refs/heads/master
&lt;/pre&gt;
finally, push it up to the server :
&lt;pre&gt;
git push origin master
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-7708335307335231512?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/7708335307335231512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=7708335307335231512' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/7708335307335231512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/7708335307335231512'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2012/01/svn2git.html' title='svn2git'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-2784868731373320169</id><published>2011-12-18T17:15:00.003-05:00</published><updated>2011-12-18T17:38:32.048-05:00</updated><title type='text'>Mac 10.7, python-ldap, MySQL-python, homebrew</title><content type='html'>I configured a Mac 10.7 machine to resume writing a Python program I had to put on hold. I needed &lt;a href="http://pypi.python.org/pypi/python-ldap/2.4.6"&gt;python-ldap&lt;/a&gt; and found a &lt;a href="http://projects.skurfer.com/posts/2011/python_ldap_lion/"&gt;guide&lt;/a&gt; on how to get it working on Lion. I was also introduced to &lt;a href="http://mxcl.github.com/homebrew/"&gt;homebrew&lt;/a&gt; in the process. I also found a 
&lt;a href="http://www.rustyrazorblade.com/2011/11/installing-mysqldb-on-macos-lion/"&gt;workaround&lt;/a&gt; for &lt;a href="http://pypi.python.org/pypi/MySQL-python/1.2.3"&gt;MySQL-python&lt;/a&gt; on Lion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-2784868731373320169?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/2784868731373320169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=2784868731373320169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2784868731373320169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2784868731373320169'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/12/mac-107-python-ldap-mysql-python.html' title='Mac 10.7, python-ldap, MySQL-python, homebrew'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-5515626256638304658</id><published>2011-11-09T08:37:00.003-05:00</published><updated>2011-11-17T09:30:10.292-05:00</updated><title type='text'>RHEL6 latency on Dell M610: C States</title><content type='html'>&lt;p&gt;
We ran into latency problems on Dell M610 servers using RHEL6 while RHEL5 performed perfectly. The RHEL6 stock kernel has a module called intel_idle which ignores Dell's BIOS settings to disable &lt;a href="http://software.intel.com/en-us/blogs/2008/03/27/update-c-states-c-states-and-even-more-c-states/"&gt;C-states&lt;/a&gt;. We've set the following in the tail of the boot line in /etc/grub.conf and so far so good. 
&lt;pre&gt;
intel_idle.max_cstate=0 processor.max_cstate=1
&lt;/pre&gt;
When I started here six years ago we had a DNS server with a similar problem solved basically the same way; with a "acpi=off" to disable &lt;a href="http://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface"&gt;ACPI&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Update:&lt;/strong&gt;
The above seems to have helped servers connected to the SAN but not one which just uses the local disk. RedHat had some interesting tweaks to try with &lt;a href="http://www.bxtra.net/comment/137"&gt;MegaCli&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Hdparm"&gt;hdparm&lt;/a&gt;, and the scheduler as they think it's IO related: 
&lt;/p&gt;
&lt;p&gt;
Set policy to cache data: 
&lt;pre&gt;
# MegaCli64 -LDSetProp -Cached -LAll -aAll
&lt;/pre&gt;
Enable disks' cache:
&lt;pre&gt;
# MegaCli64 -LDSetProp EnDskCache -LAll -aAll
# MegaCli64 -LDSetProp ADRA -LALL -aALL
&lt;/pre&gt;
Enable write cache, but first verify if the controller is battery backed: 
&lt;pre&gt;
# MegaCli64 -AdpBbuCmd -GetBbuStatus -a0 | grep -e '^isSOHGood' -e '^Charger Status' 
&lt;/pre&gt;
If the above results display no BBU, do not proceed. 
&lt;br /&gt;
If we have a battery backed controller, enable write cache.     
&lt;pre&gt;
# MegaCli64 -LDSetProp WB -LALL -aALL
&lt;/pre&gt;
If battery fails or is discharged, disable write cache: 
&lt;pre&gt;
# MegaCli64 -LDSetProp NoCachedBadBBU -LALL -aALL
&lt;/pre&gt;
Verify policy is Enabled: 
&lt;pre&gt;
# MegaCli64 -LDInfo -LAll -aAll |grep 'Disk Cache'
&lt;/pre&gt;
Disk Cache Policy: Enabled
&lt;br /&gt;
Disable local device caching: 
&lt;pre&gt;
# hdparm -W0 /dev/sda
&lt;/pre&gt;
- Add the above to /etc/rc.local to persist reboots.  
&lt;pre&gt;
Edit /etc/fstab and modify the mount options, ie: 
/dev/mapper/vg_root-lv_root / ext4 defaults,nobarriers,data=writeback 1 1
...
...
&lt;/pre&gt;
The filesystem(s) would need be remounted for changes to take effect.  
&lt;br /&gt;
Next, we will change  the scheduler to Deadline.  
&lt;pre&gt;
# echo 'deadline' &gt; /sys/block/sda/queue/scheduler
# echo 200 &gt; /sys/block/sda/queue/iosched/read_expire
# echo 500 &gt; /sys/block/sda/queue/iosched/write_expire
&lt;/pre&gt;
- Add the above commands to /etc/rc.local to persist reboots.  
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-5515626256638304658?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/5515626256638304658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=5515626256638304658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/5515626256638304658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/5515626256638304658'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/11/rhel6-latency-on-dell-m610-c-states.html' title='RHEL6 latency on Dell M610: C States'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-831335058521856118</id><published>2011-10-31T09:10:00.004-04:00</published><updated>2011-11-17T09:19:44.734-05:00</updated><title type='text'>KVM PCI device assignment</title><content type='html'>My coworker is setting up &lt;a href="http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization/chap-Virtualization-PCI_passthrough.html"&gt;KVM PCI device assignment&lt;/a&gt; to get around a problem he had with assigning more than four drives per server. Normally we'd just use clustered LVM and assign drives directly from the SAN by editing that VMs XML file contained in /etc/libvirt/qemu/ . However, this is the first time we've needed more than four drives per VM and KVM will only allow 4 drives per server since we're limited to a single disk controller.
&lt;p&gt;
&lt;strong&gt;Update&lt;/strong&gt;: Turns out this was not a good idea since the VM would monopolize the device on the physical machine; e.g. the VM would get an HBA to the SAN. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Update 2&lt;/strong&gt;: Using &lt;a href="http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization/chap-Para-virtualized_Windows_Drivers_Guide-N_Port_ID_Virtualization_NPIV.html"&gt;NPIV&lt;/a&gt; seems to be the right thing for this. 
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-831335058521856118?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/831335058521856118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=831335058521856118' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/831335058521856118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/831335058521856118'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/10/kvm-pci-device-assignment.html' title='KVM PCI device assignment'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-1393986797257427057</id><published>2011-10-10T22:41:00.002-04:00</published><updated>2011-10-10T22:50:22.029-04:00</updated><title type='text'>MySQL: replace into</title><content type='html'>I am having one of those nights where I appreciate Shlomi Noach's &lt;a href="http://code.openark.org/blog/mysql/replace-into-think-twice"&gt;REPLACE INTO: think twice&lt;/a&gt;. "REPLACE INTO" is not a conditional insert or &lt;em&gt;update&lt;/em&gt; based on if the same key exists. It's better thought of as a conditional insert OR &lt;em&gt;delete then insert&lt;/em&gt; query. This will get you if you're trying to do a field_name=field_name in your query to preserve it's value as you would do with an update since the original field_value would be lost. I re-wrote my query to do a "INSERT ... ON DUPLICATE
KEY UPDATE" instead.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-1393986797257427057?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/1393986797257427057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=1393986797257427057' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1393986797257427057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1393986797257427057'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/10/mysql-replace-into.html' title='MySQL: replace into'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-4313566538197866826</id><published>2011-09-26T23:29:00.002-04:00</published><updated>2011-09-26T23:47:06.538-04:00</updated><title type='text'>web.py on Mac OS X 10.7</title><content type='html'>Lion comes with Python 2.7.1 and easy_install is working so all you have to do is: 
&lt;pre&gt;
$ sudo easy_install web.py
Password:
Searching for web.py
Reading http://pypi.python.org/simple/web.py/
Reading http://webpy.org/
Best match: web.py 0.36
Downloading http://pypi.python.org/packages/source/w/web.py/web.py-0.36.tar.gz#md5=3f9ee778c5c34357a0233c1f0e024d00
Processing web.py-0.36.tar.gz
Running web.py-0.36/setup.py -q bdist_egg --dist-dir /tmp/easy_install-qC65Ak/web.py-0.36/egg-dist-tmp-CjDoLl
zip_safe flag not set; analyzing archive contents...
web.application: module references __file__
web.debugerror: module references __file__
Adding web.py 0.36 to easy-install.pth file

Installed /Library/Python/2.7/site-packages/web.py-0.36-py2.7.egg
Processing dependencies for web.py
Finished processing dependencies for web.py
$  
&lt;/pre&gt;
You might also be interested in &lt;a href="http://akrabat.com/php/setting-up-php-mysql-on-os-x-10-7-lion/"&gt;Setting up PHP &amp; MySQL on OS X 10.7 Lion&lt;/a&gt; to get it working with MySQL.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-4313566538197866826?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/4313566538197866826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=4313566538197866826' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4313566538197866826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4313566538197866826'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/09/webpy-on-mac-os-x-107.html' title='web.py on Mac OS X 10.7'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-7123338962531427999</id><published>2011-09-09T11:32:00.005-04:00</published><updated>2011-09-09T16:14:23.710-04:00</updated><title type='text'>Claws Mail Client</title><content type='html'>Thunderbird has been performing so badly that I've switched to &lt;a href="http://www.claws-mail.org/"&gt;Claws&lt;/a&gt;. The important features for me from Thunderibrd were satisfied by Claws:
&lt;ul&gt;
&lt;li&gt;Quick response (Thunderbird was getting too slow)&lt;/li&gt;
&lt;li&gt;IMAP/SMTP over SSL&lt;/li&gt;
&lt;li&gt;Threaded View&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.claws-mail.org/faq/index.php/Interface#Can_I_use_a_different_editor_to_write_my_mails.3F"&gt;Emacs as my editor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.claws-mail.org/plugin.php?plugin=gpg"&gt;GPG Plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for &lt;a href="http://blogs.sourceallies.com/2010/02/the-easiest-way-to-organize-zimbra-email/"&gt;Zimbra tags&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Easy view of mail headers&lt;/li&gt;
&lt;li&gt;Some type of scripting support (&lt;a href="http://www.claws-mail.org/plugin.php?plugin=python"&gt;Python&lt;/a&gt; and Perl)&lt;/li&gt;
&lt;/ul&gt;
It also has a &lt;a href="http://www.claws-mail.org/plugin.php?plugin=vcalendar"&gt;calendar plugin&lt;/a&gt; I might try; I've been sticking with Zimbra webmail for calendars/contacts.
&lt;p&gt;
On Fedora you can easily install it with its plugins: 
&lt;pre&gt;
yum install claws-mail
 claws-mail-plugins-smime
 claws-mail-plugins-pgp 
 claws-mail-plugins-python 
 &lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-7123338962531427999?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/7123338962531427999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=7123338962531427999' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/7123338962531427999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/7123338962531427999'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/09/claws-mail-client.html' title='Claws Mail Client'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-9119854917721463417</id><published>2011-08-23T15:08:00.002-04:00</published><updated>2011-08-23T15:27:46.910-04:00</updated><title type='text'>Whiptail in New York Times</title><content type='html'>&lt;a href="http://www.whiptailtech.com/"&gt;Whiptail&lt;/a&gt; was mentioned in the &lt;a href="http://bits.blogs.nytimes.com/2011/08/23/why-flash-is-the-future-of-storage-in-data-centers/"&gt;New York Times&lt;/a&gt;. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-9119854917721463417?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/9119854917721463417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=9119854917721463417' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/9119854917721463417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/9119854917721463417'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/08/whiptail-in-new-york-times.html' title='Whiptail in New York Times'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-4122280179305310211</id><published>2011-08-17T11:55:00.004-04:00</published><updated>2011-08-17T12:09:24.318-04:00</updated><title type='text'>pychart &amp; web.py</title><content type='html'>I'm writing a web interface in &lt;a href="http://webpy.org/"&gt;web.py&lt;/a&gt; to display statistics on a migration of data that will take days to run. The migration will be done by several scripts which rsync on a loop to keep the data fresh and I expect that each run of the program will take less time than the previous run. The migration scripts are logging this and I want my web interface to display the shrinking synchronization window graphically. I used &lt;a href="http://home.gna.org/pychart/doc/node2.html"&gt;PyChart&lt;/a&gt; to create a graph within a web.py GET class and used PyChart's canvas and Python's StringIO to get web.py to display the image dynamically. 
&lt;pre&gt;
class pychart:
    def GET(self):
        # sample data, that will be passed as an argument (left for this demo)
        data = [(1, 6), # the first run took 6 days
                (2, 3), # the second run took 3 days
                (3, 1)] # the third run too
        import cStringIO
        from pychart import theme, axis, area, line_plot, line_style, tick_mark, canvas
        f = cStringIO.StringIO()
        can = canvas.init(f, format="png")
        theme.use_color = 1
        theme.scale_factor = 2
        theme.reinitialize()
        theme.get_options()
        xaxis = axis.X(format="/a-60/hL%d", tic_interval = 1, label="Runs")
        yaxis = axis.Y(tic_interval = 1, label="Days")
        ar = area.T(x_axis=xaxis, y_axis=yaxis, y_range=(0,None))
        plot = line_plot.T(label="Time to run", data=data,
                           line_style=line_style.red,
                           ycol=1, tick_mark=tick_mark.square)
        ar.add_plot(plot)
        ar.draw(can) 
        can.close()
        f.seek(0)
        web.header('Content-Type', 'image/png')
        return f
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-4122280179305310211?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/4122280179305310211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=4122280179305310211' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4122280179305310211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4122280179305310211'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/08/pychart-webpy.html' title='pychart &amp; web.py'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-4682652495271946731</id><published>2011-07-22T17:34:00.002-04:00</published><updated>2011-07-22T17:40:27.140-04:00</updated><title type='text'>Aeolus todo</title><content type='html'>RHEL is to Fedora as &lt;a href="http://www.redhat.com/solutions/cloud/cloudforms/"&gt;CloudForms&lt;/a&gt; is to &lt;a href="http://www.aeolusproject.org/"&gt;Aeolus&lt;/a&gt;. So rather than wait to be approved for the CloudForms beta we're looking into trying Aeolus now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-4682652495271946731?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/4682652495271946731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=4682652495271946731' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4682652495271946731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4682652495271946731'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/07/aeolus-todo.html' title='Aeolus todo'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-1667213110353624382</id><published>2011-07-13T14:16:00.001-04:00</published><updated>2011-07-13T14:17:51.094-04:00</updated><title type='text'>Pwn Plug Wireless</title><content type='html'>A friend shared this link to &lt;a href="http://pwnieexpress.com/wireless.html"&gt;a commercial-grade wireless pentesting drop box&lt;/a&gt; with me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-1667213110353624382?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/1667213110353624382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=1667213110353624382' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1667213110353624382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1667213110353624382'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/07/pwn-plug-wireless.html' title='Pwn Plug Wireless'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-6941050571213935863</id><published>2011-07-12T16:33:00.002-04:00</published><updated>2011-07-12T16:43:43.598-04:00</updated><title type='text'>python configparser</title><content type='html'>I'm writing a Python program and as it grows I realize that it would be best to have certain variables in a configuration file. Python &lt;a href="http://docs.python.org/library/configparser.html"&gt;ConfigParser&lt;/a&gt; to the rescue! It's nice that this is a built-in. I just followed the &lt;a href="http://wiki.python.org/moin/ConfigParserExamples"&gt;examples&lt;/a&gt; and I was up and running quickly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-6941050571213935863?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/6941050571213935863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=6941050571213935863' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6941050571213935863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6941050571213935863'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/07/python-configparser.html' title='python configparser'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-2566015564564820292</id><published>2011-07-10T14:30:00.003-04:00</published><updated>2011-07-10T14:49:26.664-04:00</updated><title type='text'>php:include "bar.php" 2 python:?</title><content type='html'>&lt;p&gt;
PHP programmers are used to having code in one file they can use in another file simply by calling &lt;a href="http://php.net/manual/en/function.include.php"&gt;include&lt;/a&gt;. Python&amp;#039;s &lt;a href="http://docs.python.org/tutorial/modules.html"&gt;module&lt;/a&gt; system supports more than just including files, but if you want to just include a file the following code provides an example: 
&lt;/p&gt;
&lt;pre&gt;
&gt; ls 
foo.py mod/
&gt; ls mod/
bar.py
&gt; 
&gt; cat mod/bar.py 
def f():
    print("I am bar")
&gt; 
&gt; cat foo.py 
print("I am foo")
import sys
sys.path.append("mod/")
import bar
bar.f()
&gt; 
&gt; python foo.py 
I am foo
I am bar
&gt; 
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-2566015564564820292?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/2566015564564820292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=2566015564564820292' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2566015564564820292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2566015564564820292'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/07/phpinclude-barphp-2-python.html' title='php:include &quot;bar.php&quot; 2 python:?'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-7340766381721570467</id><published>2011-07-07T22:05:00.009-04:00</published><updated>2011-07-07T23:12:18.095-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Simple python inheritance example</title><content type='html'>&lt;p&gt;
Python's &lt;a href="http://docs.python.org/tutorial/classes.html#random-remarks"&gt;Classes documentation&lt;/a&gt; has a bag class. Since I'm writing a program in which I want to do inheritance but haven't done it in a while and need a refresh, I thought I'd extend bag into a wet paper bag; which looses things you put in it nearly half the time. I came up with this:
&lt;pre&gt;
class Bag(object):
    def __init__(self):
        self.data = []
    def add(self, x):
        self.data.append(x)
    def addtwice(self, x):
        self.add(x)
        self.add(x)

class WetPaper(Bag):
    def __init__(self):
        super(WetPaper, self).__init__()
    def add(self, x):
        from random import randint
        if (randint(1,10) &gt; 4):
            super(WetPaper, self).add(x)

if __name__ == '__main__':
    bag = Bag()
    bag.addtwice(1)
    print "Bag:", bag.data
    wet = WetPaper()
    wet.addtwice(1)
    print "WetPaper:", wet.data
&lt;/pre&gt;
Since I'm extending Bag, defining the constructor was simplified and I didn't have to worry about how add() was implemented; I could just flip a coin with rand to see if the inherited add() should be called. I also didn't have to define addtwice() and it inherited the unreliable aspect of WetPaper's add(). 
&lt;p&gt;
When writing the above, the first thing I had to do was update the original Bag definition to a &lt;a href="http://stackoverflow.com/questions/54867/old-style-and-new-style-classes-in-python"&gt;new style class&lt;/a&gt; descended from object. Until I did this I got a "TypeError: must be type, not classobj" error when I used super and I had to directly use the parent class name instead:
&lt;pre&gt;
    def __init__(self):
        Bag.__init__(self)
&lt;/pre&gt;
While working on this I found &lt;a href="http://fuhm.net/super-harmful/"&gt;Python's Super is nifty, but you can't use it&lt;/a&gt;. I also found out that in Python 3 self will become implicit in super calls so instead of: 
&lt;pre&gt;
  super(WetPaper, self).__init__()
&lt;/pre&gt;
I will just be able to do: 
&lt;pre&gt;
  super().__init__()
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-7340766381721570467?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/7340766381721570467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=7340766381721570467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/7340766381721570467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/7340766381721570467'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/07/simple-python-inheritance-example.html' title='Simple python inheritance example'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-5369686736421467946</id><published>2011-07-07T11:28:00.004-04:00</published><updated>2011-07-07T16:37:22.539-04:00</updated><title type='text'>Cloud Computing Definition</title><content type='html'>&lt;p&gt;
I read an article in the &lt;a href="http://www.fsf.org/bulletin/"&gt;FSF Bulletin&lt;/a&gt; about &lt;a href="http://merlincloud.org/"&gt;Merlin&lt;/a&gt;. It contained a good definition of Cloud Computing, which I think is worth posting since there is a lot of confusion about what Cloud Computing is. 
&lt;/p&gt;
&lt;p&gt;
"Cloud Computing is about (a) aggregating server, network, and storage resources into a seemingly contiguous system ("the cloud"), (b) providing some kind of interface for the user to request or release these resources, and (c) making these resources network or location agnostic, so that the resources are accessible from anywhere, even in the face of system or network failures." -- &lt;a href="http://deadmemes.net/"&gt;Justin Baugh&lt;/a&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-5369686736421467946?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/5369686736421467946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=5369686736421467946' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/5369686736421467946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/5369686736421467946'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/07/cloud-computing-definition.html' title='Cloud Computing Definition'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-8751689143437449946</id><published>2011-07-04T09:56:00.001-04:00</published><updated>2011-07-04T09:58:02.652-04:00</updated><title type='text'>Python Logging</title><content type='html'>I read Doug Hellmann's &lt;a href="http://blog.doughellmann.com/2007/05/pymotw-logging.html"&gt;blogpost&lt;/a&gt; on logging with Python.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-8751689143437449946?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/8751689143437449946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=8751689143437449946' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/8751689143437449946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/8751689143437449946'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/07/python-logging.html' title='Python Logging'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-7273312146328818340</id><published>2011-06-27T15:24:00.000-04:00</published><updated>2011-06-27T15:25:59.828-04:00</updated><title type='text'>zfone</title><content type='html'>"&lt;a href="http://zfoneproject.com/"&gt;Zfone&lt;/a&gt; is a new secure VoIP phone software product which lets you make encrypted phone calls over the Internet. Its principal designer is Phil Zimmermann, the creator of PGP."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-7273312146328818340?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/7273312146328818340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=7273312146328818340' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/7273312146328818340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/7273312146328818340'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/06/zfone.html' title='zfone'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-9144192588928263262</id><published>2011-06-04T21:48:00.005-04:00</published><updated>2011-06-04T22:04:01.982-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>web.py, mod_wsgi , RHEL6</title><content type='html'>&lt;a href="http://webpy.org/"&gt;web.py&lt;/a&gt; can be run in a production environment  on RHEL6 with &lt;a href="http://code.google.com/p/modwsgi/"&gt;mod_wsgi&lt;/a&gt; using stock packages from yum with the exception of web.py itself (which can be inserted into the system Python library). 
&lt;p&gt;
1. Install the packages that RHEL6 provides: 
&lt;pre&gt;
 yum install httpd mod_ssl mod_wsgi mysql-devel MySQL-python 
&lt;/pre&gt;
&lt;p&gt;
2. Insert web.py directly into RHEL's python2.6 site-packages: 
&lt;pre&gt;
cd /tmp
wget http://pypi.python.org/packages/source/w/web.py/web.py-0.35.tar.gz
tar xzf web.py-0.35.tar.gz
cd /usr/lib/python2.6/site-packages
mv /tmp/web.py-0.35/web .
&lt;/pre&gt;
&lt;p&gt;
3. Configure a place to host your application: 
&lt;pre&gt;
mkdir /var/www/myapp
&lt;/pre&gt;
&lt;p&gt;
4. Install some basic code in /var/www/myapp/code.py
&lt;pre&gt;
import web
urls = (
        '/.*', 'hello',
        )
class hello:
        def GET(self):
                return "Hello World"
application = web.application(urls, globals()).wsgifunc()
&lt;/pre&gt;
&lt;p&gt;
5. Configure mod_wsgi directives for Apache in /etc/httpd/conf.d/wsgi.conf:
&lt;pre&gt;
LoadModule wsgi_module modules/mod_wsgi.so
WSGIScriptAlias /myapp /var/www/myapp/code.py/
&amp;lt;Directory /var/www/tentacle/&amp;gt;
  Order allow,deny
  Allow from all
&amp;lt;/Directory&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
When configuring the above I used the &lt;a href="http://webpy.org/cookbook/mod_wsgi-apache"&gt;webpy.org cookbook&lt;/a&gt; as a reference. Note that my &lt;a href="http://starnixhacks.blogspot.com/2011/06/webpy.html"&gt;previous example&lt;/a&gt; was development only.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-9144192588928263262?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/9144192588928263262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=9144192588928263262' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/9144192588928263262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/9144192588928263262'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/06/webpy-modwsgi-rhel6.html' title='web.py, mod_wsgi , RHEL6'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-6396070851026386461</id><published>2011-06-04T17:52:00.007-04:00</published><updated>2011-06-04T22:04:24.369-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>web.py</title><content type='html'>I tried &lt;a href="http://webpy.org/"&gt;web.py&lt;/a&gt;. 
&lt;p&gt;
I like it because it's simple and I found it intuitive and easy to learn. You can set it up quickly on Fedora with: 
&lt;pre&gt;
yum install python-webpy
yum install MySQL-python 
&lt;/pre&gt;
It was straight forward to follow the &lt;a href="http://webpy.org/docs/0.3/tutorial"&gt;tutorial&lt;/a&gt;, except it's not obvious in the tutorial how to specify a different DB server besides the default localhost. The keyword argument is 'host' just like in MySQLdb.connect(), which is provided by the Python package MySQLdb; i.e. the MySQL-python yum package. Here's the example from the tutorial in which an external DB server is declared:
&lt;pre&gt;
db = web.database(dbn='mysql',\
                  user='user',\
                  pw='password',\
                  db='todo',\
                  host='mysql.example.com')
&lt;/pre&gt;
Also, the PostgreSQL example translates into MySQL like this:
&lt;pre&gt;
CREATE TABLE todo (   id serial primary key,   title text,   
                    created timestamp default now(),   
        `done` boolean default '0'    );
&lt;/pre&gt;
specifically boolean is an synonym for tinyint in MySQL so it uses not 'f' but '0' to represent false.
&lt;p&gt;
The output code from my tutorial is:
&lt;p&gt;
code.py:
&lt;pre&gt;
#!/usr/bin/env python
# Filename:                code.py
# Description:             intro to web.py
# Supported Langauge(s):   Python 2.7.x
# Time-stamp:              &lt;2011-06-04 18:15:06 someguy&gt; 
# -------------------------------------------------------
import web
# -------------------------------------------------------
render = web.template.render('templates/')
urls = (
    '/', 'index',
    '/add', 'add'
)
app = web.application(urls, globals())
db = web.database(dbn='mysql',\
                  user='todo',\
                  pw='redacted',\
                  db='todo',\
                  host='mysql.example.com')
# -------------------------------------------------------
class index:        
    def GET(self):
        todos = db.select('todo')
        return render.index(todos)

class add:
    def POST(self):
        i = web.input()
        n = db.insert('todo', title=i.title)
        raise web.seeother('/')
# -------------------------------------------------------
if __name__ == "__main__":
    app.run()
&lt;/pre&gt;
templates/index.html
&lt;pre&gt;
$def with (todos)
&amp;lt;ul&amp;gt;
$for todo in todos:
    &amp;lt;li id="t$todo.id"&amp;gt;$todo.title&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;

&amp;lt;form method="post" action="add"&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;input type="text" name="title" /&amp;gt; 
&amp;lt;input type="submit" value="Add" /&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-6396070851026386461?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/6396070851026386461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=6396070851026386461' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6396070851026386461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6396070851026386461'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/06/webpy.html' title='web.py'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-307942232442352107</id><published>2011-05-23T11:07:00.003-04:00</published><updated>2011-05-23T11:27:44.421-04:00</updated><title type='text'>AI TouchBook</title><content type='html'>&lt;a href="http://www.alwaysinnovating.com/"&gt;Always Innovating (AI)&lt;/a&gt; sells a &lt;a href="https://www.alwaysinnovating.com/products/touchbook.htm"&gt;a tablet + pluggable keybaord&lt;/a&gt; that runs &lt;a href="https://www.alwaysinnovating.com/products/aios.htm"&gt;AIOS, Android, Ubuntu, and ChromiumOS&lt;/a&gt; for &lt;a href="https://www.alwaysinnovating.com/store/product.php?productid=10"&gt;$550&lt;/a&gt; which is &lt;a href="https://www.alwaysinnovating.com/community/"&gt;open {source, hardware, community}&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-307942232442352107?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/307942232442352107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=307942232442352107' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/307942232442352107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/307942232442352107'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/05/ai-touchbook.html' title='AI TouchBook'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-7739011397673909589</id><published>2011-05-15T16:20:00.004-04:00</published><updated>2011-05-15T16:41:30.912-04:00</updated><title type='text'>goodbye openoffice, hello abiword</title><content type='html'>I don't often use Word Processors. Instead I edit text. I like emacs for lots of editing and vi for quickly tweaking a configuration file. If I had to make something look nice I'd type set it with &lt;a href="http://www.latex-project.org/"&gt;LaTeX&lt;/a&gt;. However, I have recently been collaborating with people sending me .doc files. I used to save them as text, edit them in emacs, and import them back into openoffice but the overhead from loss of formatting was making it not worth it so I started just using openoffice but the key-bindings were the hardest part; e.g. my muscle memory thinks that Ctrl-f moves the cursor forward and shouldn't open up a Find/Replace dialog. Openoffice &lt;a href="http://openoffice.org/bugzilla/show_bug.cgi?id=89663"&gt;refuses&lt;/a&gt; to accommodate vi or emacs key bindings but I found that AbiWord does (successfully using AbiWord 2.8.6). Also, AbiWord is smaller than openoffice so it's faster. I didn't have luck changing the key-bindings by just doing what's described on the AbiWord &lt;a href="http://www.abisource.com/support/faq/"&gt;FAQ&lt;/a&gt;, instead I got it working as described in a &lt;a href="http://linuxmafia.com/faq/Apps/abiword-vi-mode.html"&gt;linuxgazette.net mailing list&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-7739011397673909589?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/7739011397673909589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=7739011397673909589' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/7739011397673909589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/7739011397673909589'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/05/goodbye-openoffice-hello-abiword.html' title='goodbye openoffice, hello abiword'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-2051562720654665290</id><published>2011-04-25T17:25:00.003-04:00</published><updated>2011-04-25T17:37:57.562-04:00</updated><title type='text'>tried spice</title><content type='html'>I tried a &lt;a href="http://www.spicespace.org/"&gt;spice&lt;/a&gt; desktop today from my Fedora client:
&lt;pre&gt;
sudo yum install spice-client
spicec -h $server -p $port -w $passwd
shift-ctrl-f12
&lt;/pre&gt;
It really works. 

The image of my VM was less than 100M since it's stored in &lt;a href="http://nocoast-tech.blogspot.com/2010/05/converting-kvm-guests-from-lvm-to-qcow2.html"&gt;qcow2&lt;/a&gt; format. This also allows images given to each user (one per port) to inherit software updates to the master image (requires qcow2 images to go offline).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-2051562720654665290?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/2051562720654665290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=2051562720654665290' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2051562720654665290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2051562720654665290'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/04/spice-must-flow.html' title='tried spice'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-8114075970396503990</id><published>2011-04-25T16:07:00.000-04:00</published><updated>2011-04-25T16:08:15.391-04:00</updated><title type='text'>Link: How To Safely Store A Password</title><content type='html'>&lt;a href="http://codahale.com/how-to-safely-store-a-password/"&gt;http://codahale.com/how-to-safely-store-a-password/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-8114075970396503990?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/8114075970396503990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=8114075970396503990' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/8114075970396503990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/8114075970396503990'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/04/link-how-to-safely-store-password.html' title='Link: How To Safely Store A Password'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-5901209536593799835</id><published>2011-04-07T22:12:00.004-04:00</published><updated>2011-04-07T22:27:04.640-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><category scheme='http://www.blogger.com/atom/ns#' term='lint'/><title type='text'>flymake &amp; pyflakes</title><content type='html'>I am writing Python using &lt;a href="http://flymake.sourceforge.net/"&gt;flymake&lt;/a&gt; in Emacs with 
&lt;a href="http://pypi.python.org/pypi/pyflakes"&gt;pyflakes&lt;/a&gt; as described in chrism&amp;#039;s blog entry on &lt;a href="http://plope.com/Members/chrism/flymake-mode"&gt;Flymake Mode for Emacs / Python&lt;/a&gt;. 

&lt;pre&gt;
cd ~/elisp
wget http://cvs.savannah.gnu.org/viewvc/*checkout*/emacs/emacs/lisp/progmodes/flymake.el?revision=1.2.4.41
mv flymake.el\?revision\=1.2.4.41 flymake.el
easy_install pyflakes

add the following to .emacs:

  (when (load "flymake" t) 
         (defun flymake-pyflakes-init () 
           (let* ((temp-file (flymake-init-create-temp-buffer-copy 
                              'flymake-create-temp-inplace)) 
              (local-file (file-relative-name 
                           temp-file 
                           (file-name-directory buffer-file-name)))) 
             (list "pyflakes" (list local-file)))) 

         (add-to-list 'flymake-allowed-file-name-masks 
                  '("\\.py\\'" flymake-pyflakes-init))) 

   (add-hook 'find-file-hook 'flymake-find-file-hook)
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-5901209536593799835?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/5901209536593799835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=5901209536593799835' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/5901209536593799835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/5901209536593799835'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/04/flymake-pyflakes.html' title='flymake &amp; pyflakes'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-6630684718006182188</id><published>2011-03-30T10:57:00.003-04:00</published><updated>2011-03-30T11:04:22.606-04:00</updated><title type='text'>todo: try Mongo GridFS</title><content type='html'>&lt;p&gt;
I've been thinking about traditional file systems mkfs'd on block devices vs distributed file systems and I would like to set some time aside to play with 
&lt;a href="http://www.mongodb.org/display/DOCS/GridFS"&gt;Mongo GridFS&lt;/a&gt;. It looks like given a sharded mongo installation you can use the API to save a large file and it will split it across multiple servers. This looks like a nice way to store a large data set across multiple machines as opposed to having a large file system attached to one server which requires an occasional file system check. 
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-6630684718006182188?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/6630684718006182188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=6630684718006182188' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6630684718006182188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6630684718006182188'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/03/todo-try-mongo-gridfs.html' title='todo: try Mongo GridFS'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-6109132112840767870</id><published>2011-03-30T10:04:00.003-04:00</published><updated>2011-03-30T10:13:11.279-04:00</updated><title type='text'>persistent connections within cisco firewall</title><content type='html'>Our cisco firewall tears down old connections so I sometimes modify the kernel to send keep alives on tcp connections: 
&lt;pre&gt;
[root@server ~]# tail -2 /etc/sysctl.conf
# keep persistent connection (so firewall doesn't tear down)
net.ipv4.tcp_keepalive_time = 900
[root@server ~]#
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-6109132112840767870?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/6109132112840767870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=6109132112840767870' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6109132112840767870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6109132112840767870'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/03/persistent-connections-within-cisco.html' title='persistent connections within cisco firewall'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-553826793091015039</id><published>2011-03-29T16:58:00.002-04:00</published><updated>2011-03-29T17:02:21.622-04:00</updated><title type='text'>prgmr.com</title><content type='html'>&lt;p&gt;
I like the approach that &lt;a href="http://prgmr.com/"&gt;prgmr.com&lt;/a&gt; offers to being a hosting company. Also, their prices seem very reasonable. 
&lt;/p&gt;
&lt;p&gt;
Disclaimer: I am not yet a customer. All I can say so far is that this looks like the kind of hosting company that I'd like for my personal server. 
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-553826793091015039?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/553826793091015039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=553826793091015039' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/553826793091015039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/553826793091015039'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/03/prgmrcom.html' title='prgmr.com'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-2353641046858308605</id><published>2011-03-28T14:58:00.004-04:00</published><updated>2011-03-28T15:02:24.706-04:00</updated><title type='text'>at</title><content type='html'>Good old &lt;a href="http://www.rahul.net/raithel/MyBackPages/crontab.html"&gt;at&lt;/a&gt; is handy: 
&lt;pre&gt;
me@box:~&amp;gt; at now + 15 minutes
at&gt; echo -e "remember that at(1) is your friend" | mail -s "at: `hostname`" me@tld.com
at&gt; ^D
job 2 at Mon Mar 28 15:11:00 2011
me@box:~&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-2353641046858308605?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/2353641046858308605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=2353641046858308605' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2353641046858308605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2353641046858308605'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/03/at1.html' title='at'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-4483983559221585491</id><published>2011-03-26T21:34:00.005-04:00</published><updated>2011-03-26T23:18:26.394-04:00</updated><title type='text'>Pylons</title><content type='html'>I am experimenting with &lt;a href="http://pylonshq.com/"&gt;pylons&lt;/a&gt;. Fedora made this easy:
&lt;pre&gt;
yum install python-sqlalchemy python-pylons
paster create -t pylons HelloWorld
cd HelloWorld
paster serve --reload development.ini
firefox4 http://127.0.0.1:5000
&lt;/pre&gt;
and then I was able to directly go to the examples in &lt;a href="http://pylonsbook.com/en/1.1/exploring-pylons.html"&gt;Chapter 3&lt;/a&gt; of &lt;a href="http://pylonsbook.com/"&gt;Definitive Guide to Pylons&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-4483983559221585491?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/4483983559221585491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=4483983559221585491' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4483983559221585491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4483983559221585491'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/03/pylons.html' title='Pylons'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-7353379060332626333</id><published>2011-03-26T21:27:00.004-04:00</published><updated>2011-03-26T21:33:46.982-04:00</updated><title type='text'>firefox4</title><content type='html'>I am now using &lt;a href="http://fedoraproject.org/wiki/Firefox_4"&gt;fedora's firefox4 package&lt;/a&gt; as my main browser with the following plugins:
&lt;ul&gt;
 &lt;li&gt;firebug
 &lt;li&gt;https-everywhere
 &lt;li&gt;tree style tab
 &lt;li&gt;vimperator
 &lt;li&gt;web developer
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-7353379060332626333?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/7353379060332626333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=7353379060332626333' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/7353379060332626333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/7353379060332626333'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/03/firefox4.html' title='firefox4'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-6277800244311244736</id><published>2011-03-25T15:55:00.003-04:00</published><updated>2011-03-25T16:06:00.747-04:00</updated><title type='text'>Professional IT Community Conference</title><content type='html'>I'll be attending the Professional IT Community Sysadmin Conference
&lt;p&gt;
&lt;a href="http://www.picconf.org"&gt; &lt;img border="1" alt="PICC &amp;#39;11" src="http://www.picconf.org/art/picc-150x300pg.jpg" width="150" height="300" /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-6277800244311244736?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/6277800244311244736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=6277800244311244736' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6277800244311244736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6277800244311244736'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/03/professional-it-community-conference.html' title='Professional IT Community Conference'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-1411453373457428109</id><published>2011-02-22T17:33:00.007-05:00</published><updated>2011-02-22T18:05:09.182-05:00</updated><title type='text'>Cisco Firewall Translation, RPC Portmapper, and NFS</title><content type='html'>&lt;p&gt;
I've posted &lt;a href="http://starnixhacks.blogspot.com/search?q=rpc"&gt;before&lt;/a&gt; about problems using NFS with a Firewall which occur because of RPC. I think the correct way to solve the problem is to configure the NFS server so that RPC services like nlockmgr, rquotad, and mountd are hard coded. On a RedHat based system this comes down to uncommenting the following in /etc/sysconfig/nfs: 
&lt;pre&gt;
 RQUOTAD_PORT=875 
 LOCKD_TCPPORT=32803
 LOCKD_UDPPORT=32769
 MOUNTD_PORT=892
 STATD_PORT=662
&lt;/pre&gt;
and then configuring your firewall to allow only the above ports through in addition to RPC:tcp/udp 111 and NFS:tcp/udp 2049, for NFS. 
&lt;/p&gt;
&lt;p&gt;
Today I learned that if you are using a Cisco firewall it is possible to not do the above but to enable &lt;a href="http://secret-epedemiology-statistic.org.ua/1587052091/ch08lev1sec15.html"&gt;inspect rpc&lt;/a&gt;  so that when port mapper tells the client to use random ports for services like nlockmgr, rquotad, and mountd, that the firewall will then dynamically open the same random port exclusively between the NFS client and NFS server. This surprised me as it seems odd to imagine a server asking the firewall to open a port because it wants to use it. What also surprised me is that for FWSM versions older than 3.2, this won't work if you use xlate-bypass. So, if you thought along the lines of "I don't need NAT, let's turn off xlates" and enabled xlate-bypass then you will break sunrpc. I am personally in favor of not using xlates nor sunrpc. 
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-1411453373457428109?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/1411453373457428109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=1411453373457428109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1411453373457428109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1411453373457428109'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/02/cisco-firewall-translation-rpc.html' title='Cisco Firewall Translation, RPC Portmapper, and NFS'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-197123032358338403</id><published>2011-02-18T14:39:00.002-05:00</published><updated>2011-02-18T14:41:56.902-05:00</updated><title type='text'>Freedom Box Foundation</title><content type='html'>I &lt;a href="http://starnixhacks.blogspot.com/2010/03/eben-moglen-freedom-in-cloud.html"&gt;posted about Eben Moglen's Freedom in the Cloud Talk&lt;/a&gt;. There is now a &lt;a href="http://www.freedomboxfoundation.org/"&gt;Feedom Box Foundation&lt;/a&gt; with a &lt;a href="http://www.kickstarter.com/projects/721744279/push-the-freedombox-foundation-from-0-to-60-in-30"&gt;kickstarter project&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-197123032358338403?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/197123032358338403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=197123032358338403' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/197123032358338403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/197123032358338403'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/02/freedom-box-foundation.html' title='Freedom Box Foundation'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-4900944961846874746</id><published>2011-02-10T14:28:00.002-05:00</published><updated>2011-02-10T14:55:01.076-05:00</updated><title type='text'>RedHat Cloud Offerings: Update</title><content type='html'>&lt;p&gt;
I previously posted about &lt;a href="http://starnixhacks.blogspot.com/2010/10/redhat-cloud-offerings.html"&gt;RedHat Cloud Offerings&lt;/a&gt; and emphasized what my organization is lacking: Satellite, RHEV-M, and MRG Grid. 
&lt;/p&gt;
&lt;p&gt;
We're now running Satellite and will be registering all of our servers to use it. We've also been able to use Satellite alone to kickstart a VM on our KVM servers without touching the hypervisors. We're going to keep experimenting with Satellite and roll it into production very soon. 
&lt;/p&gt;
&lt;p&gt;
We're less interested in RHEV-H and RHEV-M since we are already happy with KVM running on RHEL and prefer to use our command line tools for management as opposed to the "vmware-like" RHEV-M GUI. We're also less interested in MRG Grid since HPC is not our focus. 
&lt;/p&gt;
&lt;p&gt;
We are interested in &lt;a href="http://incubator.apache.org/deltacloud/"&gt;Deltacloud&lt;/a&gt; but in a development sense only. We don't expect it to be production-ready for a while. For now we're going to use a by-the-hour EC2 account with our development KVM cluster and see what it's like creating and migrating VMs between EC2 and our cluster (or &lt;em&gt;private cloud&lt;/em&gt; (if you must)). 
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-4900944961846874746?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/4900944961846874746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=4900944961846874746' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4900944961846874746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4900944961846874746'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2011/02/redhat-cloud-offerings-update.html' title='RedHat Cloud Offerings: Update'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-5419583268196005358</id><published>2010-12-03T11:06:00.002-05:00</published><updated>2010-12-03T11:09:13.905-05:00</updated><title type='text'>me, make, meet</title><content type='html'>I evolved a variation of the calendar scheduling described in &lt;a href="http://managinguxteams.com/2010/03/27/me-make-meet-how-to-manage-a-ux-managers-calendar/"&gt;me, make, meet&lt;/a&gt; when I was in college. Glad to see others have a similar system. Some people thought I was weird for scheduling so much of my day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-5419583268196005358?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/5419583268196005358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=5419583268196005358' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/5419583268196005358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/5419583268196005358'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/12/me-make-meet.html' title='me, make, meet'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-1907432010969535818</id><published>2010-11-30T15:56:00.002-05:00</published><updated>2010-11-30T16:24:49.782-05:00</updated><title type='text'>iptables state and cisco firewalls</title><content type='html'>RedHat's {G,T}UI allows one to easily run iptables to allow connections only on certain ports. So if you allowed only HTTPS the following rule would be added to /etc/sysconfig/iptables:
&lt;pre&gt;
- -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
&lt;/pre&gt;
The above however is for NEW connections only. However, a rule like the following is also added by RedHat's tool which allows anything related to an existing state entry to pass:
&lt;pre&gt;
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
&lt;/pre&gt;
This all seems reasonable but I'm having a problem where packets are in an INVALID state and are getting blocked by iptables (confirmed with an iptables log). The workaround that my colleague came up with is to drop state out of the equation by simply having: 
&lt;pre&gt;
- -A RH-Firewall-1-INPUT -m tcp -p tcp --dport 443 -j ACCEPT
&lt;/pre&gt;
The same colleague also found a blog post on &lt;a href="http://blog.endpoint.com/2009/12/cisco-pix-mangled-packets-and-iptables.html"&gt;Cisco PIX mangled packets and iptables state tracking&lt;/a&gt; which offers are much more satisfying explanation. We're looking into this further.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-1907432010969535818?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/1907432010969535818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=1907432010969535818' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1907432010969535818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1907432010969535818'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/11/iptables-state-and-cisco-firewalls.html' title='iptables state and cisco firewalls'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-4220648374369770428</id><published>2010-10-29T16:02:00.011-04:00</published><updated>2010-10-29T17:54:53.385-04:00</updated><title type='text'>RedHat Cloud Offerings</title><content type='html'>&lt;p&gt;
My organization has server clusters that host about 100 VMs and more are coming. These systems were built using RedHat's &lt;a href="http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5.4/html/Cluster_Administration/index.html"&gt;cluster manager&lt;/a&gt; and Xen or KVM &lt;a href="http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/Virtualization_Guide/index.html"&gt;virtualization&lt;/a&gt;. Do we have what some would call a private cloud? Not yet, but we're considering getting closer. Since we're already using RedHat we're looking into what they recommend first. 
&lt;/p&gt;
&lt;p&gt;
According to a RedHat sponsored IDC paper: "Cloud services are shared, standardized service and are available from a self-service catalog; able to scale in an 'elsatic' fashion as needed; [can be] priced on actual usage; accessible via the Internet; and supportive of published APIs". 
&lt;/p&gt;
&lt;p&gt;
The above definition makes me believe we're on our way to having a private cloud and RedHat's &lt;a href="https://www.redhat.com/solutions/cloud/foundations/"&gt;cloud offerings&lt;/a&gt; include everything we've done above with a few additions which would allow our clusters to satisfy the cloud definition. The additions are specifically what RedHat calls &lt;em&gt;cloud management services&lt;/em&gt; and RedHat implements them with the following three packages.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.redhat.com/red_hat_network/"&gt;Satellite&lt;/a&gt;, which provides configuration management and network services via DHCP, DNS, and PXE. Since we use RHN and have a kickstart server this doesn't seem like too much of a reach for us. I can also imagine Satellite offering the functionality I experienced when I tried out EC2. We're going to look more into satellite, &lt;a href="http://spacewalk.redhat.com/"&gt;spacewalk&lt;/a&gt;, and possibly &lt;a href="http://www.puppetlabs.com/"&gt;puppet&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.redhat.com/virtualization/rhev/desktop/rhevm/"&gt;RHEV-M&lt;/a&gt;, which offers a GUI for managing VMs similar to vmWare's virtual infrastructure client or EC2's VM manager. It implements the &lt;em&gt;catalog&lt;/em&gt; aspect of the cloud definition and allows for easy deployment. Our current method of deploying VMs is to &lt;a href="http://linux.die.net/man/1/virt-clone"&gt;virt-clone&lt;/a&gt; a golden image and our catalog consists of Ubuntu Server, Fedora 13, Win200{3,8} (yuck), and RHEL5.5. We then console into the cloned system, update it's network configuration (our clusters have several networks trunked into them) and other settings. Does RHEV-M make this easier? RHEV-M also offers live migration, high availability, load balancing, and power saving, though we have all of this from vanilla &lt;a href=http://linux.die.net/man/8/clusvcadm"&gt;clusvcadm&lt;/a&gt; and just haven't yet implemented power saving or ballooned dynamic memory. We're comfortable doing this via the CLI and are considering scripting it, though we're still considering trying RHEV-M to make sure we're not missing out.&lt;/li&gt;

&lt;li&gt;&lt;a href="https://www.redhat.com/mrg/grid/"&gt;MRG Grid&lt;/a&gt;, which implements the API aspect defined above for portability between clouds. This feature allows one to automatically spin a VM out to EC2 as per a &lt;a href="https://www.redhat.com/solutions/cloud/amazon/"&gt;certification between RedHat and Amazon&lt;/a&gt;. We have do not yet have this feature and move VMs using tricks like dd|nc, mounting snapshots and doing virt-clones, etc. I wonder how quickly and what with service interruption a VM can be moved to another cloud and back.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-4220648374369770428?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/4220648374369770428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=4220648374369770428' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4220648374369770428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4220648374369770428'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/10/redhat-cloud-offerings.html' title='RedHat Cloud Offerings'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-1248749213234646163</id><published>2010-10-25T09:13:00.002-04:00</published><updated>2010-10-25T09:39:23.853-04:00</updated><title type='text'>evercookie</title><content type='html'>Beware the &lt;a href="http://samy.pl/evercookie/"&gt;evercookie&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-1248749213234646163?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/1248749213234646163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=1248749213234646163' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1248749213234646163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1248749213234646163'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/10/evercookie.html' title='evercookie'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-5264998620753450204</id><published>2010-10-20T13:17:00.002-04:00</published><updated>2010-10-20T13:47:00.240-04:00</updated><title type='text'>Disable Evoluent vertical mouse thumb and bottom buttons</title><content type='html'>My &lt;a href="http://www.evoluent.com/support.htm"&gt;Evoluent vertical mouse&lt;/a&gt; has a thumb and bottom button. I got the mouse for ergonomic reasons, not for these buttons, and I occasionally click them by accident which causes actions I didn't intend. The following xmodmap command disables them:
&lt;pre&gt;
xmodmap -e "pointer = 1 2 3 4 5 15 14 13 12 10 11 9 8 7 6"
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-5264998620753450204?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/5264998620753450204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=5264998620753450204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/5264998620753450204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/5264998620753450204'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/10/disable-evoluent-vertical-mouse-thumb.html' title='Disable Evoluent vertical mouse thumb and bottom buttons'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-4173167387093023374</id><published>2010-10-10T21:14:00.002-04:00</published><updated>2010-10-10T21:32:43.122-04:00</updated><title type='text'>bash set theory</title><content type='html'>Intersection of two files:
&lt;pre&gt;
$ cat one
a
b
c
$ cat two
b
c
d
e
$ for x in `cat one`; do grep $x two; done
b
c
$
&lt;/pre&gt;
Complement of two files:
&lt;pre&gt;
$ cat one
a
b
c
$ cat two
b
c
d
e
$ sort one one two | uniq -u
d
e
$ sort two two one | uniq -u
a
$ 
&lt;/pre&gt;
After playing around for a little I found &lt;a href="http://www.catonmat.net/blog/set-operations-in-unix-shell/"&gt;Peteris Krumins' blog&lt;/a&gt; who provided the complement method I'm pasting above.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-4173167387093023374?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/4173167387093023374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=4173167387093023374' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4173167387093023374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4173167387093023374'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/10/bash-set-theory.html' title='bash set theory'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-6970317564840938381</id><published>2010-09-30T16:02:00.004-04:00</published><updated>2010-09-30T16:19:05.704-04:00</updated><title type='text'>udev: renamed network interface eth0 to eth1</title><content type='html'>I ran into this problem today after cloning a Fedora13 VM (running KVM):
&lt;pre&gt;
 Device eth0 does not seem to be present, delaying initialization
&lt;/pre&gt;
dmesg revealed that it had renamed eth0 to eth1:
&lt;pre&gt;
 udev: renamed network interface eth0 to eth1
&lt;/pre&gt;
I want eth0, not eth1. Virt-cloning changes the mac address so that probably confused udev. If this happens, then you can remove the a bad rule that it made for itself and ask it to try again. In other words:
&lt;pre&gt;
 rm /etc/udev/rules.d/70-persistent-net.rules
&lt;/pre&gt;
then reboot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-6970317564840938381?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/6970317564840938381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=6970317564840938381' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6970317564840938381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6970317564840938381'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/09/udev-renamed-network-interface-eth0-to.html' title='udev: renamed network interface eth0 to eth1'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-6139649599733636331</id><published>2010-09-30T10:09:00.002-04:00</published><updated>2010-09-30T10:17:33.256-04:00</updated><title type='text'>tahoe-lafs</title><content type='html'>&lt;a href="http://tahoe-lafs.org/source/tahoe/trunk/docs/about.html"&gt;Tahoe-LAFS&lt;/a&gt; offers a GPL'd file system which supports decentralized storage system with provider-independent security.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-6139649599733636331?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/6139649599733636331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=6139649599733636331' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6139649599733636331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6139649599733636331'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/09/tahoe-lafs.html' title='tahoe-lafs'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-148027944539655652</id><published>2010-09-27T17:17:00.002-04:00</published><updated>2010-09-27T17:21:28.037-04:00</updated><title type='text'>pymazon</title><content type='html'>You can download your non-DRM'd music with a GPL3'd client &lt;a href="http://code.google.com/p/pymazon/"&gt;pymanzon&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-148027944539655652?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/148027944539655652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=148027944539655652' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/148027944539655652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/148027944539655652'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/09/pymazon.html' title='pymazon'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-3663070490856846846</id><published>2010-09-27T12:15:00.001-04:00</published><updated>2010-09-27T12:16:48.893-04:00</updated><title type='text'>facebook postmortem</title><content type='html'>The &lt;a href="http://www.facebook.com/notes/facebook-engineering/more-details-on-todays-outage/431441338919"&gt;facebook postmortem&lt;/a&gt; is technically interesting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-3663070490856846846?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/3663070490856846846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=3663070490856846846' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/3663070490856846846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/3663070490856846846'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/09/facebook-postmortem.html' title='facebook postmortem'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-2652118899472775018</id><published>2010-09-27T09:14:00.002-04:00</published><updated>2010-09-27T09:18:15.386-04:00</updated><title type='text'>OpenLDAP memberOf Overlay</title><content type='html'>We use LDAP groups with the memberOf attribute in OpenLDAP. We're looking into the &lt;a href="http://www.openldap.org/doc/admin24/overlays.html#Reverse%20Group%20Membership%20Maintenance"&gt;memberOf Overlay&lt;/a&gt; so that we can have &lt;a href="http://en.wikipedia.org/wiki/Atomicity_(database_systems)"&gt;atomicity&lt;/a&gt; during updates to this attribute.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-2652118899472775018?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/2652118899472775018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=2652118899472775018' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2652118899472775018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2652118899472775018'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/09/openldap-memberof-overlay.html' title='OpenLDAP memberOf Overlay'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-2352102208345276600</id><published>2010-09-20T10:17:00.002-04:00</published><updated>2010-09-20T10:20:57.730-04:00</updated><title type='text'>Simple idea for multifactor authentication</title><content type='html'>Google Apps will soon offer &lt;a href="http://arstechnica.com/business/news/2010/09/google-apps-get-extra-layer-of-security-with-two-step-verification.ars"&gt;a user-friendly way to implement multifactor auth with a cell phone&lt;/a&gt;. I'm looking forward to when it's an FOSS module that we can plug into our web-based services so that we can have extra security.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-2352102208345276600?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/2352102208345276600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=2352102208345276600' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2352102208345276600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2352102208345276600'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/09/simple-idea-for-multifactor.html' title='Simple idea for multifactor authentication'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-8596814948610134933</id><published>2010-09-16T14:17:00.001-04:00</published><updated>2010-09-16T14:17:38.861-04:00</updated><title type='text'>SET: Social Engineering Toolkit</title><content type='html'>The &lt;a href="http://www.secmaniac.com/"&gt;SET: Social Engineering Toolkit&lt;/a&gt; shows how easy it is to socially engineer people. Not that I intend to do this, I just find it concerning as a sysadmin. &lt;div style='clear: both; text-align: center; font-size: xx-small;'&gt;Published with Blogger-droid v1.5.9&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-8596814948610134933?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/8596814948610134933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=8596814948610134933' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/8596814948610134933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/8596814948610134933'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/09/set-social-engineering-toolkit.html' title='SET: Social Engineering Toolkit'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-1007177853578399431</id><published>2010-09-16T09:47:00.003-04:00</published><updated>2010-09-16T09:55:51.475-04:00</updated><title type='text'>gpg2, gpg-agent, enigmail</title><content type='html'>A 'yum upgrade' on Fedora 13 brought in gpg2 instead of the original gpg. It is "more suited for server and embedded platforms... and more targeted to the desktop", as per the &lt;a href="http://linux.die.net/man/1/gpg2"&gt;man page&lt;/a&gt;. Fedora is now also providing Thunderbird 3.1.3 which works nicely with &lt;a href="http://enigmail.mozdev.org/home/index.php"&gt;enigmail 1.2.2&lt;/a&gt;, provided that you invoke &lt;a href="http://www.gnupg.org/documentation/manuals/gnupg/Invoking-GPG_002dAGENT.html"&gt;gpg-agent&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-1007177853578399431?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/1007177853578399431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=1007177853578399431' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1007177853578399431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1007177853578399431'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/09/gpg2-gpg-agent-enigmail.html' title='gpg2, gpg-agent, enigmail'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-6062174161802170256</id><published>2010-09-15T11:59:00.000-04:00</published><updated>2010-09-15T12:00:06.582-04:00</updated><title type='text'>FSF responds to Oracle v. Google</title><content type='html'>&lt;a href="http://www.fsf.org/news/oracle-v-google"&gt;FSF responds to Oracle v. Google and the threat of software patents&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-6062174161802170256?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/6062174161802170256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=6062174161802170256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6062174161802170256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6062174161802170256'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/09/fsf-responds-to-oracle-v-google.html' title='FSF responds to Oracle v. Google'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-3900970695548793941</id><published>2010-09-14T09:22:00.002-04:00</published><updated>2010-09-14T09:22:34.296-04:00</updated><title type='text'>Life, the Universe, Everything!</title><content type='html'>&lt;a href="http://www.wolframalpha.com/input/?i=pi+%25+of+1337"&gt;pi % of 1337&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-3900970695548793941?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/3900970695548793941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=3900970695548793941' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/3900970695548793941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/3900970695548793941'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/09/life-universe-everything.html' title='Life, the Universe, Everything!'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-6702771670970325270</id><published>2010-09-05T08:44:00.003-04:00</published><updated>2010-09-05T08:56:25.000-04:00</updated><title type='text'>The Elements of Style: 0</title><content type='html'>This is not directly related to Unix, but makes me think of good code.
&lt;p&gt;
"The approach to style is by way of plainness, simplicity, orderliness, and sincerity."
&lt;/p&gt;
&lt;p&gt;
"Rich, ornate prose, is hard to digest, generally unwholesome, and sometimes nauseating."
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://en.wikipedia.org/wiki/The_Elements_of_Style"&gt;The Elements of Style&lt;/a&gt;, Strunk and White.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-6702771670970325270?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/6702771670970325270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=6702771670970325270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6702771670970325270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6702771670970325270'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/09/elements-of-style-0.html' title='The Elements of Style: 0'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-261637547543723685</id><published>2010-09-05T07:59:00.003-04:00</published><updated>2010-09-05T08:22:32.192-04:00</updated><title type='text'>gns3</title><content type='html'>&lt;p&gt;
"&lt;a href="http://www.gns3.net/"&gt;GNS3&lt;/a&gt; is a graphical network simulator that allows simulation of complex networks. It can also be used to experiment features of Cisco IOS, Juniper JunOS or to check configurations that need to be deployed later on real routers."
&lt;/p&gt;
&lt;p&gt;
Installing it looks very easy as per the &lt;a href="http://www.blindhog.net/tutorials/gns3-linux-install/gns3-linux-install.html"&gt;installation video&lt;/a&gt;. It also has a &lt;a href="http://sourceforge.net/projects/gns-3/files/GNS3/0.5/GNS3-0.5-tutorial.pdf/download"&gt;tutorial&lt;/a&gt;.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-261637547543723685?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/261637547543723685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=261637547543723685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/261637547543723685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/261637547543723685'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/09/gns3.html' title='gns3'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-6981945785105289750</id><published>2010-09-03T14:20:00.002-04:00</published><updated>2010-09-03T14:20:45.995-04:00</updated><title type='text'>XIV in New York Times</title><content type='html'>&lt;a href="http://bits.blogs.nytimes.com/2010/09/03/why-i-b-m-took-a-different-path-in-storage/?ref=business"&gt;XIV article in New York Times&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-6981945785105289750?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/6981945785105289750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=6981945785105289750' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6981945785105289750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6981945785105289750'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/09/xiv-in-new-york-times.html' title='XIV in New York Times'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-1236365545043572402</id><published>2010-08-31T15:41:00.002-04:00</published><updated>2010-08-31T15:47:29.666-04:00</updated><title type='text'>MTR</title><content type='html'>"&lt;a href="http://www.bitwizard.nl/mtr/"&gt;MTR&lt;/a&gt; combines the functionality of the 'traceroute' and 'ping' programs in a single network diagnostic tool." Seems to have come with a stock Fedora 13:
&lt;pre&gt;
sh-4.1# rpm -qa | grep mtr
mtr-0.75-6.fc13.x86_64
sh-4.1# 
&lt;/pre&gt;
It's sort of like the top of traceroute.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-1236365545043572402?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/1236365545043572402/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=1236365545043572402' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1236365545043572402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1236365545043572402'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/08/mtr.html' title='MTR'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-1292993516782906279</id><published>2010-08-19T15:44:00.002-04:00</published><updated>2010-08-19T15:48:52.693-04:00</updated><title type='text'>tcp timeout in linux kernel</title><content type='html'>Some processes on our systems leave idle connections which get cut off by our external firewall after a certain amount of time as per its intentional configuration. We're attempting to fix this by modifying the tcp timeout directly in the linux kernel. My colleague believes that echo'ing a new value into: 
&lt;pre&gt;
/proc/sys/net/ipv4/tcp_keepalive_time
&lt;/pre&gt;
that is lower than the default of 7200 seconds and which correlates better with the firewall timeout will fix our problem. I'll be curious if it works.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-1292993516782906279?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/1292993516782906279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=1292993516782906279' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1292993516782906279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1292993516782906279'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/08/tcp-timeout-in-linux-kernel.html' title='tcp timeout in linux kernel'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-421520592449336490</id><published>2010-08-19T15:40:00.001-04:00</published><updated>2010-08-19T15:40:11.845-04:00</updated><title type='text'>rootsh and sudosh</title><content type='html'>I'm considering using &lt;a href="http://sourceforge.net/projects/rootsh/"&gt;rootsh&lt;/a&gt; and &lt;a href="http://sourceforge.net/projects/sudosh/"&gt;sudosh&lt;/a&gt; on my servers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-421520592449336490?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/421520592449336490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=421520592449336490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/421520592449336490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/421520592449336490'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/08/rootsh-and-sudosh.html' title='rootsh and sudosh'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-4344532269957635950</id><published>2010-08-12T17:05:00.001-04:00</published><updated>2010-08-12T17:05:37.635-04:00</updated><title type='text'>Password Strength</title><content type='html'>I just referred someone to John P&amp;#039;s &lt;a href="http://onemansblog.com/2007/03/26/how-id-hack-your-weak-passwords/"&gt;How I&amp;#039;d Hack Your Weak Passwords&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-4344532269957635950?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/4344532269957635950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=4344532269957635950' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4344532269957635950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4344532269957635950'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/08/password-strength.html' title='Password Strength'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-7919204205780788527</id><published>2010-08-06T16:13:00.001-04:00</published><updated>2010-08-06T16:13:59.295-04:00</updated><title type='text'>Tunnel programs</title><content type='html'>Todo: try ptunnel ozymandns proxytunnel and SSH port forwaring,  &lt;br/&gt; Note: I'm on a bus reading a magazine with cool tricks with the above but I'm about to throw the magazine away. &lt;div style='clear: both; text-align: center; font-size: xx-small;'&gt;Published with Blogger-droid v1.4.9&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-7919204205780788527?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/7919204205780788527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=7919204205780788527' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/7919204205780788527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/7919204205780788527'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/08/tunnel-programs.html' title='Tunnel programs'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-6663779610129589970</id><published>2010-08-05T11:07:00.007-04:00</published><updated>2010-08-05T11:55:26.963-04:00</updated><title type='text'>6to4 outbound relay servers, web apps, and programmer archaeologists to dig through the layers</title><content type='html'>&lt;p&gt;
At work yesterday we discussed how backwards compatibility over time leads to so many layers that there might actually be careers for programmer archaeologists. 
&lt;/p&gt;
&lt;p&gt;
Our conversation started with our organization's move towards &lt;a href="http://en.wikipedia.org/wiki/IPv6"&gt;IPv6&lt;/a&gt; (start early, learn early, act as a  consultant for those who waited, and profit!) and got into the details of a life of a packet for a person using IPv4 to access a resource we might host over IPv6 only. Someone pointed out how a 6to4 outbound relay server would help us as &lt;a href="http://www.potaroo.net/ispcol/2010-05/v6hints.html"&gt;recommended&lt;/a&gt; by Geoff Huston. 
&lt;/p&gt;
&lt;p&gt;
We then tried to imagine the same transaction occurring for a web app where javascript requests XML (you do this every time you click a message in gmail) and just how much has to happen. The XML was generated on the server side by a script, which ran on top of a JVM (running on top of Xen or KVM (which was live migrating via a CLVM-based cluster)) which queried a database, which was using the ext3 file system, which retrieved blocks through a fibre switch to get it from a SAN, which distributed the data over 120 SATA disks using &lt;a href="http://ktstevenson.com/2010/01/21/raid-in-the-21st-century/"&gt;RAID-X&lt;/a&gt;.... all the way back and up down through &lt;a href="http://en.wikipedia.org/wiki/OSI_model"&gt;OSI&lt;/a&gt; but cranked back through a &lt;a href="http://www.getipv6.info/index.php/Cisco_6to4_Relay_Service"&gt;6to4 Relay Service&lt;/a&gt; and finally applied to the DOM in a browser with more lines of code than a Unix kernel (a relic left over from the browser wars for backward compatibility with invalid HTML)... and we had to laugh... Glad I learned to deal with abstraction early. 
&lt;/p&gt;
&lt;p&gt;
Someone mentioned the book &lt;a href="http://en.wikipedia.org/wiki/A_Deepness_in_the_Sky"&gt;A Deepness in the Sky&lt;/a&gt; to bring up the concept of a programmer archaeologists which I found rather funny. As per the wikipedia: 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;
"An interesting feature of the Qeng Ho's computer and timekeeping systems is the advent of "programmer archaeologists"[1]: the Qeng Ho are packrats of computer programs and systems, retaining them over millennia, even as far back to the era of Unix programs (as implied by one passage mentioning that the fundamental time-keeping system is the Unix epoch, retained for backwards compatibility). This massive accumulation of data implies that almost any useful program one could want already exists in the Qeng Ho fleet library, hence the need for computer archaeologists to dig up needed programs, work around their peculiarities and bugs, and assemble them into useful constructs."
&lt;/em&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-6663779610129589970?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/6663779610129589970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=6663779610129589970' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6663779610129589970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6663779610129589970'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/08/6to4-outbound-relay-servers-web-apps.html' title='6to4 outbound relay servers, web apps, and programmer archaeologists to dig through the layers'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-33617452723343121</id><published>2010-07-30T11:42:00.001-04:00</published><updated>2010-07-30T11:43:44.824-04:00</updated><title type='text'>11th Annual System Administrator Appreciation Day</title><content type='html'>Here I go again: &lt;a href="http://www.sysadminday.com/"&gt;sysadminday.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-33617452723343121?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/33617452723343121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=33617452723343121' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/33617452723343121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/33617452723343121'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/07/11th-annual-system-administrator.html' title='11th Annual System Administrator Appreciation Day'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-4061653701853151618</id><published>2010-07-30T09:08:00.003-04:00</published><updated>2010-07-30T09:58:35.779-04:00</updated><title type='text'>New Mouse</title><content type='html'>I just got an &lt;a href="http://www.amazon.com/Evoluent-VM3R2-RSB-Vertical-Mouse-3/dp/B000O3OEGE/ref=wl_it_dp_o?ie=UTF8&amp;coliid=I3BA6LC07ITPEC&amp;colid=6T099NBY4PX"&gt;Evoluent VM3R2-RSB Vertical Mouse 3&lt;/a&gt;. It does feel more natural and I guess you never know how much it hurts your wrists to keep them flat all day, until you try this mouse. I'm still getting used to it however. It's sensitive and I keep over moving it. So far I like it and am looking forward to getting used to it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-4061653701853151618?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/4061653701853151618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=4061653701853151618' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4061653701853151618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4061653701853151618'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/07/new-mouse.html' title='New Mouse'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-7111709246023523257</id><published>2010-07-29T09:53:00.002-04:00</published><updated>2010-07-29T10:07:20.057-04:00</updated><title type='text'>New Sorting World Record</title><content type='html'>There is a new &lt;a href="http://scienceblog.com/36957/data-sorting-world-record-falls-computer-scientists-break-terabyte-sort-barrier-in-60-seconds/"&gt;Data sorting world record: 1 terabyte, 1 minute&lt;/a&gt; using &lt;a href="http://sortbenchmark.org/tritonsort_2010_May_15.pdf"&gt;TritonSort&lt;/a&gt;. I think this is really cool! It nicely combines things I found interesting from my good old Algorithms Class with my recent interest in building powerful computers using commodity hardware.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-7111709246023523257?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/7111709246023523257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=7111709246023523257' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/7111709246023523257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/7111709246023523257'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/07/new-sorting-world-record.html' title='New Sorting World Record'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-7253157778399145346</id><published>2010-07-27T10:03:00.003-04:00</published><updated>2010-07-27T10:11:02.859-04:00</updated><title type='text'>DMCA Exceptions</title><content type='html'>&lt;p&gt;
More often than not there is bad news in the area of copyright that involves people loosing freedom. Yesterday, as a friend of mine pointed out, there was good news. 
&lt;/p&gt;
&lt;p&gt;
The Library of Congress introduced new DMCA exceptions documented by the 
&lt;a href="https://www.eff.org/press/archives/2010/07/26"&gt;EFF&lt;/a&gt; and &lt;a href="http://gizmodo.com/5596677/drm-buster-faq-what-it-means-for-you"&gt;gizmodo&lt;/a&gt;. Also, GE played the role of the good guys and took a case to the 5th Circuit Appeals Court against MGE UPS Systems and won a ruling from a Federal judge that: &lt;a href="http://gizmodo.com/5596571/federal-judge-ok-to-break-drm-for-fair-use"&gt;It's OK to Break DRM for Fair Use&lt;/a&gt;. 
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-7253157778399145346?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/7253157778399145346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=7253157778399145346' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/7253157778399145346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/7253157778399145346'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/07/dmca-exceptions.html' title='DMCA Exceptions'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-3408351205422496875</id><published>2010-07-25T09:21:00.002-04:00</published><updated>2010-07-25T09:23:11.216-04:00</updated><title type='text'>Network Topology Icons</title><content type='html'>Cisco hosts charts of their &lt;a href="http://www.cisco.com/web/about/ac50/ac47/2.html"&gt;Network Topology Icons&lt;/a&gt; including a &lt;a href="http://www.cisco.com/web/about/ac50/ac47/PDF_icons.zip"&gt;PDF&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-3408351205422496875?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/3408351205422496875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=3408351205422496875' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/3408351205422496875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/3408351205422496875'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/07/network-topology-icons.html' title='Network Topology Icons'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-1550772092994833887</id><published>2010-07-22T15:50:00.003-04:00</published><updated>2010-07-22T17:23:58.507-04:00</updated><title type='text'>yum confused?</title><content type='html'>If you run a 'yum upgrade' and end up with a message like this:
&lt;pre&gt;
Error: failed to retrieve repodata/filelists.xml.gz from rhel-x86_64-server-5 
error was [Errno -1] Metadata file does not match checksum 
 You could try using --skip-broken to work around the problem 
 You could try running: package-cleanup --problems 
                        package-cleanup --dupes 
                        rpm -Va --nofiles --nodigest 
&lt;/pre&gt;
it's likely that yum got confused. This happened to me when I changed a subscription channel, re-registered a system and tried to yum upgrade. I have been able to consistently fix it by running:
&lt;pre&gt;
 rm -rf /var/cache/yum/*
 yum clean all
 yum update
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-1550772092994833887?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/1550772092994833887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=1550772092994833887' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1550772092994833887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1550772092994833887'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/07/yum-confused.html' title='yum confused?'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-4080020045371169968</id><published>2010-07-20T08:23:00.006-04:00</published><updated>2010-07-20T08:46:49.689-04:00</updated><title type='text'>Qlogic retry interval</title><content type='html'>&lt;p&gt;
I posted earlier about &lt;a href="http://starnixhacks.blogspot.com/2010/05/xiv-resiliency-under-some-load.html"&gt;a test with the XIV&lt;/a&gt; with where the retry interval was too high and IO was queued longer than it had to be on the system buffer as opposed to being written to disk (&lt;a href="http://1.bp.blogspot.com/_cxpOa4vKPXw/S-IBEktWOxI/AAAAAAAAAH8/nNW3HR9b6ig/s1600/multipath_recovery.png"&gt;see graph&lt;/a&gt;). We solved this a while ago, but I forgot to post an update. 
&lt;/p&gt;
&lt;p&gt;
Qlogic cards have an on-board BIOS setting, which sets the path failure delay to 45 seconds. In order for multipath to perform properly on these systems, this limit should be lowered. We're currently setting the limit to 0. The options to find in the BIOS are under the advanced settings for each host controller.
&lt;/p&gt;
&lt;p&gt;
You should also set the following in in /etc/modprobe.conf (Fedora/RedHat/CentOS) or /etc/modprobe.d/aliases (Debian/Ubuntu):
&lt;pre&gt;
options qla2xxx ql2xfailover=0 
options qla2xxx qlport_down_retry=1
options qla2xxx ql2xmaxqdepth=64
&lt;/pre&gt;
Note that the maxqdepth setting on the third line isn't about fail over but about getting more &lt;a href="http://en.wikipedia.org/wiki/IOPS"&gt;IOPS with respect to the queue depth&lt;/a&gt;. This is a standard &lt;a herf="http://www.radtke.eu/xiv-storage-blog/performance/58-general-xiv-performance-considerations"&gt;XIV tuning&lt;/a&gt; practice. If you're using Emulex cards you can set the queue depth to 64 with the following line in your modprobe configuration file:
&lt;pre&gt;
options lpfc lpfc_hba_queue_depth=64
&lt;/pre&gt;
but it is not necessary to change a retry or failover interval. 
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-4080020045371169968?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/4080020045371169968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=4080020045371169968' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4080020045371169968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4080020045371169968'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/07/qlogic-retry-interval.html' title='Qlogic retry interval'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-1905575971486294393</id><published>2010-07-19T16:55:00.016-04:00</published><updated>2010-07-20T08:19:21.849-04:00</updated><title type='text'>Debian, Dell m600, XIV SAN</title><content type='html'>&lt;p&gt;
Installing Debian on a Dell m600 for use with an IBM XIV SAN (or any multipath'd SAN) requires a few tricks. 
&lt;/p&gt;
&lt;h4&gt;Modified Network Install ISO&lt;/h4&gt;
&lt;p&gt;
The Broadcom NetExtreme II NICs that come in the Dell blades require non-free firmware &lt;a href="http://www.mail-archive.com/linux-poweredge@dell.com/msg00010.html"&gt;not included in Lenny&lt;/a&gt;. I don't fault Debian for this. The same problem exists for the Qlogic HBA's. You can get around this by making your own custom Lenny install boot ISO. J Snell's &lt;a href="http://ftzdomino.blogspot.com/2009/06/debianbroadcom-driver-fix.html" class="external text" title="http://ftzdomino.blogspot.com/2009/06/debianbroadcom-driver-fix.html" rel="nofollow"&gt;howto&lt;/a&gt; describes how to add firmware for the NIC, but not the HBA. However, adding the HBA is just as easy. Note that the install will go more smoothly (no ambiguity as to which disk is /dev/sda) if no LUNs are mapped by the SAN. You'll see it question where it can load that firmware (bnx2-06-4.0.5.fw and ql2400_fw.bin) during the install. 
&lt;/p&gt;
&lt;p&gt;Some details on how I created my ISO are:&lt;/p&gt;
&lt;pre&gt; 
cd /mnt/
mkdir cdrom
mount -o loop debian-testing-amd64-CD-1.iso cdrom
cd /home/$USER/debian
mkdir isocopy
cp -av cdrom isocopy
cd isocopy/
 
dpkg-deb -x firmware-bnx2_0.25_all.deb nic-firmware
cp nic-firmware/lib/firmware/* isocopy/cdrom
 
dpkg-deb -x firmware-qlogic_0.14+lenny2_all.deb hba-firmware
cp hba-firmware/lib/firmware/* isocopy/cdrom
 
cd isocopy/cdrom
mkisofs -o ../modified-debian.iso -b isolinux/isolinux.bin -c isolinux/boot.cat\
 -no-emul-boot -boot-load-size 4 -boot-info-table -J -R -V disks .
&lt;/pre&gt; 
&lt;p&gt;Burn the modified-debian.iso to a CD-ROM and boot the server from it. Once booted to the new ISO, you need to immediately switch to another console and copy the files over before the installer looks for them:
&lt;pre&gt; 
mkdir lib/firmware
cp /cdrom/*.fw lib/firmware
&lt;/pre&gt; 
After that's done, the Debian installer should be able to autoload the bnx2 
driver without any problems. Note that you can't do the above until after the system mounts the CD ROM. It will do this automatically. You'll want to do this before you scan for network devices but after the system mounts the CD ROM. I.e. if you try to do the above before the system automounts the CD you'll have trouble.&lt;/p&gt;
&lt;/p&gt; 

&lt;h4&gt;Mount by UUID&lt;/h4&gt;

After assigning multiple paths from the SAN the Debian system became confused as to which block device was the local disk where / should be mounted. E.g. 
&lt;pre&gt;
server:~# ls /dev/sd&amp;lt;tab&amp;gt;&amp;lt;tab&amp;gt;
sda    sdaa1  sdaf   sdaj   sdan1  sdd1   sdi    sdm1   sdr    sdv1   
sda1   sdab   sdaf1  sdak   sdao   sde    sdi1   sdn    sdr1   sdw    
sda2   sdab1  sdag   sdak1  sdap   sde1   sdj    sdn1   sds    sdw1   
sda5   sdac   sdag1  sdal   sdb    sdf    sdj1   sdo    sds1   sdx    
sda6   sdac1  sdah   sdal1  sdb1   sdg    sdk    sdo1   sdt    sdx1   
sda7   sdad   sdah1  sdam   sdc    sdg1   sdl    sdp    sdt1   sdy    
sda8   sdad1  sdai   sdam1  sdc1   sdh    sdl1   sdq    sdu    sdy1   
sdaa   sdae   sdai1  sdan   sdd    sdh1   sdm    sdq1   sdv    sdz    
server:~# 
&lt;/pre&gt;
Not only that, but it changed after each reboot. So, /dev/sda{1,2,5,6,7,8} was the local disk in the above scenario, but after a reboot it was /dev/sdao{1,2,5,6,7,8} etc. If this happens you'll see a message like the following after waiting for the system to boot:
&lt;pre&gt;
Target filesystem doesn't have /sbin/init
No init found. Try passing init= bootarg
&lt;/pre&gt;
You'll then be dropped into BusyBox. You should then determine which disk is your local disk and mount it. In my case I was able to know it by the amount of partitions that it had as per above (e.g. only sdX had six partitions). Then mount that block device:
&lt;pre&gt;
cd /
mkdir /root
mount -t ext3 /dev/sdap1 /root
&lt;/pre&gt;
Then bind /dev into your new root directory:
&lt;pre&gt;
mount --bind /dev/ /root/dev/
&lt;/pre&gt;
Then chroot into your new root directory:
&lt;pre&gt;
chroot /root/
&lt;/pre&gt;
then modify your /etc/fstab so you can mount the new block device. BusyBox doesn't have vi so you can use use sed:
&lt;pre&gt;
sed s/sda/sdap/g -i /etc/fstab
&lt;/pre&gt;
You should then be able to mount everything:
&lt;pre&gt;
mount -a
&lt;/pre&gt;
I would normally mount by label at this point, but e2label does not work on Debian the way it works on RedHat/Fedora. However, you can mount by UUID with Debian and you can find the UUID with the vol_id command:
&lt;pre&gt;
vol_id /dev/sdao7
&lt;/pre&gt;
If you grep UUID from the above you should be able to set $UUID to the output and then 
modify another sed script to bring the UUID into the /etc/fstab. Once you're able to mount a copule of partitions by UUID reboot to see if you can bring the system up with / mounting correctly. 
&lt;/p&gt;
&lt;h4&gt;Multipath&lt;/h4&gt;
Multipath is able to resolve the confusion from the many block devices and allow you to mount by nice names like /dev/mpathX. 

&lt;pre&gt;
apt-get install multipath-tools dmsetup
modprobe dm_mod dm-multipath dm-round-robin
&lt;/pre&gt;

You can optimize the queue depth for the XIV on Debian with Qlogic HBAs by adding the following to /etc/modprobe.d/aliases: 
&lt;pre&gt;
options qla2xxx ql2xmaxqdepth=64
options qla2xxx ql2xfailover=0 
options qla2xxx qlport_down_retry=1
&lt;/pre&gt;
I was then able to test multipath successfully.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-1905575971486294393?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/1905575971486294393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=1905575971486294393' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1905575971486294393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1905575971486294393'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/07/debian-dell-m600-xiv-san.html' title='Debian, Dell m600, XIV SAN'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-3393006552035020764</id><published>2010-07-19T15:08:00.002-04:00</published><updated>2010-07-19T15:18:34.054-04:00</updated><title type='text'>Configuration Management and Security: Bellovin &amp; Bush</title><content type='html'>I started reading a paper on Configuration Management and Security which is good. I should remember to finish it. 
&lt;p&gt;
IEEE JOURNAL ON SELECTED AREAS IN COMMUNICATIONS, VOL. 27, NO. 3, APRIL 2009
&lt;br /&gt;Configuration Management and Security
&lt;br /&gt;Steven M. Bellovin and Randy Bush
&lt;/p&gt;
&lt;p&gt;Abstract:
&lt;br /&gt;
Proper configuration management is vital for host and network security. We outline the problems, especially for large-scale environments, and discuss the security aspects of a number of different configuration scenarios, including security appliances (e.g., firewalls), desktop and server computers, and PDAs. We conclude by discussing research challenges.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-3393006552035020764?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/3393006552035020764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=3393006552035020764' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/3393006552035020764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/3393006552035020764'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/07/configuration-management-and-security.html' title='Configuration Management and Security: Bellovin &amp; Bush'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-2455894611952788210</id><published>2010-07-15T20:46:00.008-04:00</published><updated>2010-07-15T21:19:12.520-04:00</updated><title type='text'>Cisco 2501</title><content type='html'>My friend let me borrow an old &lt;a href="http://en.wikipedia.org/wiki/Cisco_2500_series"&gt;Cisco 2501 Router&lt;/a&gt; so I could play with &lt;a href="http://en.wikipedia.org/wiki/Cisco_IOS"&gt;IOS&lt;/a&gt; at home. I plugged a rj45 to rs232 adapter into the 2501 and my thinkpad running &lt;a href="http://www.xubuntu.org/"&gt;Xubuntu&lt;/a&gt; and set up my serial console with &lt;a href="http://freshmeat.net/projects/minicom/"&gt;minicom&lt;/a&gt; as per the &lt;a href="https://help.ubuntu.com/community/CiscoConsole"&gt;Ubuntu CiscoConsole howto&lt;/a&gt;.
&lt;p&gt;
After starting minicom back up I see:
&lt;pre&gt;
Welcome to minicom 2.2

OPTIONS: I18n 
Compiled on Apr 27 2007, 15:50:20.
Port /dev/ttyS0

               Press CTRL-A Z for help on special keys
                                                     
                                                     
                                                     
First, would you like to see the current interface summary? [yes]: AT S7=45 S0=0
% Please answer 'yes' or 'no'.

First, would you like to see the current interface summary? [yes]: yes

Any interface listed with OK? value "NO" does not have a valid configuration

Interface        IP-Address      OK?  Method    Status                 Protocol
Ethernet0        unassigned      NO   not set   up                     down    
Serial0          unassigned      NO   not set   down                   down    
Serial1          unassigned      NO   not set   down                   down    

Configuring global parameters:

  Enter host name [Router]: 
...
Use this configuration? [yes/no]: yes
Building configuration...



Press RETURN to get started!


%LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0, changed state to down
%LINEPROTO-5-UPDOWN: Line protocol on Interface Serial0, changed state to down
%LINEPROTO-5-UPDOWN: Line protocol on Interface Serial1, changed state to down
%LINK-3-UPDOWN: Interface Ethernet0, changed state to up
%LINK-3-UPDOWN: Interface Serial0, changed state to down
%LINK-3-UPDOWN: Interface Serial1, changed state to down
%LINK-5-CHANGED: Interface Ethernet0, changed state to administratively down
%LINK-5-CHANGED: Interface Serial0, changed state to administratively down
%LINK-5-CHANGED: Interface Serial1, changed state to administratively down
%SYS-5-RESTART: System restarted --
Cisco Internetwork Operating System Software 
IOS (tm) 3000 Software (CPA25-Y-L), Version 11.0(4), RELEASE SOFTWARE (fc1)
Copyright (c) 1986-1995 by cisco Systems, Inc.
Compiled Mon 18-Dec-95 19:21 by alanyu
%SNMP-3-SOCKET: can't open UDP socket
Router&gt;
Router&gt;
Router&gt;sh version
Cisco Internetwork Operating System Software 
IOS (tm) 3000 Software (CPA25-Y-L), Version 11.0(4), RELEASE SOFTWARE (fc1)
Copyright (c) 1986-1995 by cisco Systems, Inc.
Compiled Mon 18-Dec-95 19:21 by alanyu
...
cisco 2500 (68030) processor (revision L) with 2044K/2048K bytes of memory.
Processor board ID 02425768, with hardware revision 00000000
...
Router&gt;
Router&gt;
Router&gt;
&lt;/pre&gt;
All set. Looks like I'll be playing with &lt;a href="http://www.cisco.com/univercd/cc/td/doc/product/software/ios11/"&gt;IOS 11.0&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-2455894611952788210?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/2455894611952788210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=2455894611952788210' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2455894611952788210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2455894611952788210'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/07/cisco-2501.html' title='Cisco 2501'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-5016788339971158966</id><published>2010-07-15T18:13:00.000-04:00</published><updated>2010-07-15T18:13:04.381-04:00</updated><title type='text'>Mail Clients: mutt + zimbra et al</title><content type='html'>We run &lt;a href="http://www.zimbra.com/"&gt;Zimbra&lt;/a&gt; where I work. I've been using &lt;a href="http://www.mozillamessaging.com/en-US/thunderbird/"&gt;Thunderbird&lt;/a&gt; (and webmail for Calendaring) but I used to use &lt;a href="http://www.mutt.org/"&gt;mutt&lt;/a&gt; when my mail was just on a server running &lt;a href="http://cr.yp.to/qmail.html"&gt;qmail&lt;/a&gt;. 
&lt;p&gt;
A friend of mine caught me saying I was tempted to get mutt working with zimbra via imap/smtp. He beat me to it. Here's a .muttrc:
&lt;pre&gt;
# Automatically log in to this mailbox at startup
set spoolfile="imaps://netid@incoming.domain.tld/"
# Define the = shortcut, and the entry point for the folder browser
set folder="imaps://netid@incoming.domain.tld/"
# Use a well-defined SMTP server
set smtp_url="smtps://netid@outgoing.domain.tld:465/"
# Define Zimbra-default folders
set record="=Sent"
set postponed="=Drafts"
# activate TLS if available on the server
set ssl_starttls=yes
# always use SSL when connecting to a server
set ssl_force_tls=yes
# Don't wait to enter mailbox manually
unset imap_passive
# Automatically poll subscribed mailboxes for new mail
set imap_check_subscribed
# Reduce polling frequency to a sane level
set mail_check=60
# And poll the current mailbox more often (not needed with IDLE in post
1.5.11)
set timeout=10
# keep a cache of headers for faster loading (1.5.9+?)
set header_cache=~/.hcache
# Display download progress every 5K
set net_inc=5
# Use emacs (remember to server-start)
set editor="emacsclient -t"
# Set From: address
my_hdr From: First Last &lt;netid@domain.tld&gt;
&lt;/pre&gt;
Note that you must have emacs running in the background to use "emacsclient -t". If you do this add "(server-start)" to your .emacs or use "M-x server-start". 
&lt;p&gt;
Our discussion on mail clients lead to others worth checking out:
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.claws-mail.org/screenshots.php?section=general"&gt;Claws Mail - Screenshots&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.gohome.org/wl/"&gt;Wanderlust&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-5016788339971158966?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/5016788339971158966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=5016788339971158966' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/5016788339971158966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/5016788339971158966'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/07/mail-clients-mutt-zimbra-et-al.html' title='Mail Clients: mutt + zimbra et al'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-6577331213158165956</id><published>2010-07-15T11:07:00.002-04:00</published><updated>2010-07-15T11:09:44.164-04:00</updated><title type='text'>Droid X bricks if you try to mod it</title><content type='html'>Someone passed a long a mobilecrunch.com article: &lt;a href="http://www.mobilecrunch.com/2010/07/14/droid-x-actually-self-destructs-if-you-try-to-mod-it/"&gt;Droid X actually self-destructs if you try to mod it&lt;/a&gt;. If this is true I'm glad I didn't hold out for one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-6577331213158165956?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/6577331213158165956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=6577331213158165956' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6577331213158165956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6577331213158165956'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/07/droid-x-bricks-if-you-try-to-mod-it.html' title='Droid X bricks if you try to mod it'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-8063119679689129649</id><published>2010-07-10T13:54:00.000-04:00</published><updated>2010-07-10T13:54:37.990-04:00</updated><title type='text'>Fully Free Android system-image?</title><content type='html'>The &lt;a href="http://android-developers.blogspot.com/2010/06/froyo-code-drop.html"&gt;Android Developer's blog&lt;/a&gt; recently posted that: "You can now build and boot a fully open-source system image out of the box, for the emulator, as well as for Dream (ADP1), Sapphire (ADP2), and Passion (Nexus One)."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-8063119679689129649?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/8063119679689129649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=8063119679689129649' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/8063119679689129649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/8063119679689129649'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/07/fully-free-android-system-image.html' title='Fully Free Android system-image?'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-6516473004972712261</id><published>2010-07-10T13:33:00.008-04:00</published><updated>2010-07-10T13:56:47.909-04:00</updated><title type='text'>iPhone to Nexus One</title><content type='html'>I switched from an iPhone to a Nexus One this week. My AT&amp;T contract does not expire for a while. Switching was easy; once I received the phone in the mail I removed the iPhone sim card with a paper clip and inserted it into the Nexus One. After charging the Nexus One everything worked flawlessly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-6516473004972712261?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/6516473004972712261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=6516473004972712261' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6516473004972712261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6516473004972712261'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/07/iphone-to-nexus-one.html' title='iPhone to Nexus One'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-943534988937272732</id><published>2010-07-09T17:03:00.000-04:00</published><updated>2010-07-09T17:04:18.678-04:00</updated><title type='text'>EFF 20th Anniversary Animation</title><content type='html'>Amusing &lt;a href="https://w2.eff.org/ninapaley/"&gt;EFF 20th Anniversary Animation by Nina Paley&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-943534988937272732?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/943534988937272732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=943534988937272732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/943534988937272732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/943534988937272732'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/07/eff-20th-anniversary-animation.html' title='EFF 20th Anniversary Animation'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-4937427129577117345</id><published>2010-06-30T18:10:00.004-04:00</published><updated>2010-07-01T03:55:39.485-04:00</updated><title type='text'>openssl the command is amazing</title><content type='html'>There are &lt;a href="http://www.madboa.com/geek/openssl/"&gt;lots of things&lt;/a&gt; you can do with the openssl command that I didn't know about:
&lt;p&gt;
Verify if numbers are prime:
&lt;pre&gt;
$ openssl prime 119054759245460753
1A6F7AC39A53511 is not prime
$  
&lt;/pre&gt;
&lt;p&gt;
Encrypt a file with your favorite cipher:
&lt;pre&gt;
openssl list-cipher-commands
&lt;/pre&gt;
&lt;p&gt;
base64 encode a file
&lt;pre&gt;
openssl enc -base64 -in file.txt
&lt;/pre&gt;
&lt;p&gt;
Generate a shadow-style password hash:
&lt;pre&gt;
$ openssl passwd -1 MySecret
$1$sXiKzkus$haDZ9JpVrRHBznY5OxB82.
$ 
&lt;/pre&gt;
&lt;p&gt;
Many others. I never knew it could do some much. Thanks &lt;a href="http://www.madboa.com/people/paul/"&gt;madboa.com&lt;/a&gt;.
&lt;p&gt;
Also, I played around with openssl while updating certificates for about 30 web servers. I was able to check that the new cert was installed correctly on all of the hosts easily looking at that host's SSL finger prints as served from Apache:
&lt;pre&gt;
echo EOF | openssl s_client -connect $host:443 -showcerts | openssl x509 -fingerprint -noout -md5
&lt;/pre&gt;
The above fits well into a bash loop which can be run before and after you replace the certs: 
&lt;pre&gt;
for x in `cat vhosts.txt`; do 
   echo "vhost: $x";echo EOF | openssl \
     s_client -connect $x:443 -showcerts \
     | openssl x509 -fingerprint -noout \
     -md5; 
done 
| egrep "vhost|Fingerprint" &gt; finger_prints.txt
&lt;/pre&gt;
You can then diff the finger prints files to verify that they're what you're expecting them to be.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-4937427129577117345?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/4937427129577117345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=4937427129577117345' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4937427129577117345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4937427129577117345'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/06/openssl-command-is-amazing.html' title='openssl the command is amazing'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-3196215577982266982</id><published>2010-06-27T09:43:00.001-04:00</published><updated>2010-06-27T09:44:27.842-04:00</updated><title type='text'>Android Development with Clojure</title><content type='html'>Android Development is now looking even more attractive: &lt;a href="http://riddell.us/ClojureAndAndroidWithEmacsOnUbuntu.html"&gt;Clojure and Android with Emacs on Ubuntu&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-3196215577982266982?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/3196215577982266982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=3196215577982266982' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/3196215577982266982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/3196215577982266982'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/06/android-development-with-clojure.html' title='Android Development with Clojure'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-978256156553826742</id><published>2010-06-26T12:42:00.014-04:00</published><updated>2010-06-26T14:39:24.199-04:00</updated><title type='text'>FLOSS Smart Phones</title><content type='html'>Brad Kuhn wrote an &lt;a href="http://www.ebb.org/bkuhn/blog/2010/03/04/mobile.html"&gt;article&lt;/a&gt; on the state of Smart Phones with respect to Free, Libre, and Open Source Software (FLOSS) and says:
&lt;blockquote&gt;
&lt;a href="http://www.htc.com/www/product/dream/overview.html"&gt;HTC Dream&lt;/a&gt; currently gives the most software freedom among Android/Linux deployments. It is unlikely that Google wants anything besides their applications to be proprietary. While Google has been unresponsive when asked why these hardware interface libraries are proprietary, it is likely that HTC, the hardware maker with whom Google contracted, insisted that these components remain proprietary, and perhaps fear patent suits... no detailed analysis of the &lt;a href="http://www.google.com/phone"&gt;Nexus One&lt;/a&gt; is yet available, it's likely similar to the HTC Dream.
&lt;/blockquote&gt;
With regard to permission to run one's own software on the device -- something central to phone development -- Brad points out:
&lt;blockquote&gt;
Google is our best ally in this regard. The HTC Dream developer models, called the &lt;a href="http://developer.android.com/guide/developing/device.html#dev-phone-1"&gt;Android Dev Phone 1 (aka ADP1)&lt;/a&gt;. permit the user to install any operating system on the phone, and the purchase agreement extract no promises from the purchaser regarding what software runs on the device. Google has no interest in locking you to a single carrier, but only to a single Google experience application vendor. Offering a user “carrier freedom of choice”, while tying those users tighter to Google applications, is probably a central part of their marketing plans.
&lt;/blockquote&gt;
Other interesting quotes include:
&lt;ul&gt;
&lt;li&gt;Community-oriented forks... [must] begin in the Android/Linux space.&lt;/li&gt;
&lt;li&gt;A traditional “get some volunteers together and write some code” approach can achieve great advancement toward community-oriented FLOSS systems on mobile devices. Developers could initially focus on applications for the existing “mostly FLOSS” platforms of MeeGo and Android/Linux.&lt;/li&gt;
&lt;li&gt;We need to identify the proprietary software that is important, and write free software replacements. It's catch-up work, but our community is usually successful at such tasks. So, let's get coding on mobile! (see FSF Bulletin, Issue 16, May 2010)&lt;/li&gt;
&lt;/ul&gt;
Brad has some additional &lt;a href="http://www.ebb.org/bkuhn/tags.html#android"&gt;blog entires on android&lt;/a&gt; and is a co-founder of the &lt;a href="http://trac.osuosl.org/trac/replicant/wiki"&gt;Replicant project&lt;/a&gt;. I'm curious about &lt;a href="http://starnixhacks.blogspot.com/2010/05/credo-and-hero.html"&gt;switching providers&lt;/a&gt; so I'm curious about the distinction between the &lt;a href="http://en.wikipedia.org/wiki/HTC_Hero"&gt;Hero&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/HTC_Dream"&gt;Dream&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-978256156553826742?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/978256156553826742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=978256156553826742' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/978256156553826742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/978256156553826742'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/06/floss-smart-phones.html' title='FLOSS Smart Phones'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-4547093226926026327</id><published>2010-06-24T20:01:00.002-04:00</published><updated>2010-06-24T20:03:54.598-04:00</updated><title type='text'>PostgreSQL has an IP address data type</title><content type='html'>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.postgresql.org/docs/8.3/static/datatype-net-types.html"&gt;Network Address Types&lt;/a&gt;
&lt;li&gt;&lt;a href="http://www.postgresql.org/docs/8.3/static/functions-net.html"&gt;Network Address Functions and Operators&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-4547093226926026327?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/4547093226926026327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=4547093226926026327' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4547093226926026327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4547093226926026327'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/06/postgresql-has-ip-address-data-type.html' title='PostgreSQL has an IP address data type'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-5549511348479140134</id><published>2010-06-23T16:30:00.003-04:00</published><updated>2010-06-23T16:59:52.719-04:00</updated><title type='text'>Goodbye EMC</title><content type='html'>I have been getting up around 2:30 every morning once a week for the last six weeks, to work during agreed upon maintenance windows, to migrate data from two EMC Clariions to two IBM XIVs. Today was the last migration. All of the production data on both EMCs has been moved. If it breaks tomorrow, it wouldn't be so bad, though we'd loose our new development storage system. I'm very happy to be rid of depending on EMC.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-5549511348479140134?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/5549511348479140134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=5549511348479140134' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/5549511348479140134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/5549511348479140134'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/06/goodbye-emc.html' title='Goodbye EMC'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-2903250646147093654</id><published>2010-06-23T15:50:00.000-04:00</published><updated>2010-06-23T15:51:03.881-04:00</updated><title type='text'>xwrits</title><content type='html'>todo: try &lt;a href="http://www.lcdf.org/~eddietwo/xwrits/"&gt;xwrits&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-2903250646147093654?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/2903250646147093654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=2903250646147093654' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2903250646147093654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2903250646147093654'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/06/xwrits.html' title='xwrits'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-9096127397496280869</id><published>2010-06-23T10:57:00.016-04:00</published><updated>2010-06-23T11:37:50.986-04:00</updated><title type='text'>"Linux Magazine" article on SSD file systems</title><content type='html'>"Linux Magazine" recently did an &lt;a href="http://www.linux-magazine.com/Issues/2010/115/SAVE-IT/(kategorie)/0"&gt;article&lt;/a&gt; (referenced but not included in link) on choosing a file system for your SSD. I am now running Fedora 13 on an Intel X25-M as mentioned earlier in &lt;a href="http://starnixhacks.blogspot.com/2010/04/ssd-experiment.html"&gt;SSD experiment&lt;/a&gt;. I'm using ext4 and mounting with the noatime,nodiratime options. Performance is snappy. The article had the following benchmark.
&lt;pre&gt;
                                   MBps
test                     ext2  ext4  ext4 no jrnl   btrfs   btrfs(ssd_spread)
-----------------------------------------------------------------------------
dbench -D /test 10       520   407   428            347     347
bonnie++ /test -s 2048   38    58    72             64      67
&lt;/pre&gt;
The article also had some useful links.
&lt;ul&gt;
 &lt;li&gt;&lt;a href="http://torvalds-family.blogspot.com/2008/10/so-i-got-one-of-new-intel-ssds.html"&gt;Linus' blog post his SSD&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://thunk.org/tytso/blog/2009/03/01/ssds-journaling-and-noatimerelatime/"&gt;SSD’s, Journaling, and noatime/relatime&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://www.linux-mag.com/id/7272"&gt;Theodore Ts'o on Trim Support for ext4&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="https://btrfs.wiki.kernel.org/index.php/Changelog#Support_for_.22discard.22_operation_on_SSD_devices"&gt;btrfs discard function&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="https://btrfs.wiki.kernel.org/index.php/FAQ#Is_Btrfs_optimized_for_SSD.3F"&gt;btrfs SSD optimizations&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://disktrim.sourceforge.net/"&gt;DiskTRIM&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-9096127397496280869?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/9096127397496280869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=9096127397496280869' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/9096127397496280869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/9096127397496280869'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/06/linux-magazine-article-on-ssd-file.html' title='&quot;Linux Magazine&quot; article on SSD file systems'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-1090671846841111364</id><published>2010-06-21T16:42:00.003-04:00</published><updated>2010-06-21T16:58:57.991-04:00</updated><title type='text'>Foot Pedals</title><content type='html'>I am looking for a USB Foot Pedal to act as a control key and an alt/meta key. Bill Clemson &lt;a href="http://bc.tech.coop/blog/060131.html"&gt;did this&lt;/a&gt;. I'll be looking around.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-1090671846841111364?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/1090671846841111364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=1090671846841111364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1090671846841111364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1090671846841111364'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/06/foot-pedals.html' title='Foot Pedals'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-4296836620809238293</id><published>2010-06-10T21:08:00.011-04:00</published><updated>2010-06-10T21:33:26.062-04:00</updated><title type='text'>Multicast and Red Hat Cluster Suite</title><content type='html'>Getting members of a &lt;a href="http://en.wikipedia.org/wiki/Red_Hat_Cluster_Suite"&gt;Red Hat Cluster Suite&lt;/a&gt; to communicate and get quorum can be difficult. This post documents how I verified that multicast was working as I step towards setting up a cluster.

&lt;p&gt;
After you start your cluster see which multicast address was assigned: 
&lt;pre&gt;
[root@vserver0 ~]# grep "default multicast" /var/log/messages
Dec 27 16:51:51 vserver0 openais[6953]: [MAIN ] Using default multicast address of 239.192.104.1 
Dec 27 18:26:33 vserver0 openais[3664]: [MAIN ] Using default multicast address of 239.192.104.1 
Dec 28 04:25:28 vserver0 openais[13028]: [MAIN ] Using default multicast address of 239.192.104.1 
Dec 30 14:02:35 vserver0 openais[9533]: [MAIN ] Using default multicast address of 239.192.104.1 
[root@vserver0 ~]# 
&lt;/pre&gt;
&lt;p&gt;
I also see that each node is listening on the same address: 
&lt;pre&gt;
[root@vserver0 ~]# netstat -an | grep 239
udp        0      0 239.192.104.1:5405          0.0.0.0:*
[root@vserver0 ~]# 

[root@vserver1 ~]# netstat -an | grep 239
udp        0      0 239.192.104.1:5405          0.0.0.0:*
[root@vserver1 ~]# 

[root@vserver2 ~]# netstat -an | grep 239
udp        0      0 239.192.104.1:5405          0.0.0.0:*
[root@vserver2 ~]# 
&lt;/pre&gt;
&lt;p&gt;
The cluster documentation talks about configuring multicast and implies that you might have to enable it on your router. You can verify if your router is passing multicast packets between nodes with tcpdump and iperf as described in &lt;a href="http://taosecurity.blogspot.com/2006/09/generating-multicast-traffic.html"&gt;taosecurity.blogspot.com&lt;/a&gt;. I can reproduce the results described in the taosecurity blog in my cluster as so: 
&lt;pre&gt;
wget ftp://ftp.pbone.net/mirror/ftp.freshrpms.net/pub/freshrpms/pub/dag/redhat/el5/en/x86_64/dries/RPMS/iperf-
2.0.4-1.el5.rf.x86_64.rpm
rpm -ivh iperf-2.0.4-1.el5.rf.x86_64.rpm 
&lt;/pre&gt;
I set up vserver0 as an iperf server listening on multicast address 239.192.104.1:
&lt;pre&gt;
[root@vserver0 ~]# iperf -s -u -B 239.192.104.1 -i 1
------------------------------------------------------------
Server listening on UDP port 5001
Binding to local address 239.192.104.1
Joining multicast group  239.192.104.1
Receiving 1470 byte datagrams
UDP buffer size:   126 KByte (default)
------------------------------------------------------------
&lt;/pre&gt;
Now I generate multicast traffic from vserver1.
&lt;pre&gt;
[root@vserver1 ~]# iperf -c 239.192.104.1 -u -T 32 -t 3 -i 1
------------------------------------------------------------
Client connecting to 239.192.104.1, UDP port 5001
Sending 1470 byte datagrams
Setting multicast TTL to 32
UDP buffer size:   126 KByte (default)
------------------------------------------------------------
[  3] local 192.168.1.129 port 48770 connected with 239.192.104.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 1.0 sec    129 KBytes  1.06 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3]  1.0- 2.0 sec    128 KBytes  1.05 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3]  2.0- 3.0 sec    128 KBytes  1.05 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 3.0 sec    386 KBytes  1.05 Mbits/sec
[  3] Sent 269 datagrams
[root@vserver1 ~]# 
&lt;/pre&gt;
Here is what vserver0 sees:
&lt;pre&gt;
------------------------------------------------------------
[  3] local 239.192.104.1 port 5001 connected with 192.168.1.129 port 48770
[ ID] Interval       Transfer     Bandwidth       Jitter   Lost/Total Datagrams
[  3]  0.0- 1.0 sec    134 KBytes  1.09 Mbits/sec  1.109 ms    0/   93 (0%)
[ ID] Interval       Transfer     Bandwidth       Jitter   Lost/Total Datagrams
[  3]  1.0- 2.0 sec    128 KBytes  1.05 Mbits/sec  0.136 ms    0/   89 (0%)
[ ID] Interval       Transfer     Bandwidth       Jitter   Lost/Total Datagrams
[  3]  0.0- 3.0 sec    386 KBytes  1.07 Mbits/sec  0.957 ms    0/  269 (0%)
&lt;/pre&gt;
The traffic looks like this:
&lt;pre&gt;
[root@vserver0 ~]# tcpdump -n -i eth0 -s 1515 udp | grep  239.192.104.1 &gt; muticast.txt
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 1515 bytes
343 packets captured
343 packets received by filter
0 packets dropped by kernel

[root@vserver0 ~]# 

[root@vserver0 ~]# wc -l muticast.txt 
283 muticast.txt
[root@vserver0 ~]# head -5 muticast.txt 
15:09:23.364851 IP 192.168.1.129.5149 &gt; 239.192.104.1.netsupport: UDP, length 118
15:09:23.760086 IP 192.168.1.129.5149 &gt; 239.192.104.1.netsupport: UDP, length 118
15:09:24.156427 IP 192.168.1.129.5149 &gt; 239.192.104.1.netsupport: UDP, length 118
15:09:24.555871 IP 192.168.1.129.5149 &gt; 239.192.104.1.netsupport: UDP, length 118
15:09:24.956558 IP 192.168.1.129.5149 &gt; 239.192.104.1.netsupport: UDP, length 118
[root@vserver0 ~]# 
&lt;/pre&gt;
So, I seem to have generated multicast traffic and ensured that a member of the multicast group actually received it.
&lt;p&gt;
According to RedHat (http://sources.redhat.com/cluster/doc/usage.txt): "CMAN can be configured to use multicast instead of broadcast (broadcast is used by default if no multicast parameters are given)." They also go on to say that you must enable it in /etc/cluster/cluster.conf:  
&lt;pre&gt;
&amp;lt;cman&amp;gt;
    &amp;lt;multicast addr="224.0.0.1"/&amp;gt;
&amp;lt;/cman&amp;gt;
&amp;lt;clusternode name="nd1"&amp;gt;
    &amp;lt;multicast addr="224.0.0.1" interface="eth0"/&amp;gt;
&amp;lt;/clusternode&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-4296836620809238293?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/4296836620809238293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=4296836620809238293' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4296836620809238293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4296836620809238293'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/06/multicast-and-red-hat-cluster-suite.html' title='Multicast and Red Hat Cluster Suite'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-3282172196265830617</id><published>2010-06-10T09:02:00.001-04:00</published><updated>2010-11-24T11:20:57.291-05:00</updated><title type='text'>SELinux: the basic idea and how to debug</title><content type='html'>SELinux stores file context as objects which you can see with the -Z flag to ls or ps.  Try to cp '/etc/hosts /home/$USER' and then 'mv /home/$USE/hosts /var/www/html' after editing it.  The home context will stop Apache from serving the file.  You'll see an error in /var/log/messages with what sealert options to run to see exactly what was blocked and how to fix it with restorecon.

&lt;p&gt;&lt;strong&gt;Update: 11/24/10&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
Correction: A lot of the time restorecon won't fix it. Instead you'll need to change it with chcon. A typical example is when SELinux and Apache have a disagreement because you want to serve from a directory besides /var/www/, say /mnt/webapps/subversion for example. Even if you configure your httpd.conf to tell it that /mnt/webapps/subversion is a valid web directory it doesn't seem to work for permissions related reasons. The way to check this is to run: 
&lt;/p&gt;
&lt;pre&gt;
ls -Z /var/www/html/
ls -Z /mnt/webapps/subversion
&lt;/pre&gt;
and see if you notice a difference. One difference that might been seen is the following:
&lt;pre&gt;
unconfined_u:object_r:httpd_sys_content_t:s0
unconfined_u:object_r:mnt_t:s0
&lt;/pre&gt;
An easy way to fix this with chcon is: 
&lt;pre&gt;
chcon -R -t httpd_sys_content_t /mnt/webapps/subversion/
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-3282172196265830617?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/3282172196265830617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=3282172196265830617' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/3282172196265830617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/3282172196265830617'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/06/selinux-basic-idea-and-how-to-debug.html' title='SELinux: the basic idea and how to debug'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-2088794863816696471</id><published>2010-05-27T10:20:00.001-04:00</published><updated>2010-05-27T10:21:57.153-04:00</updated><title type='text'>yum local install</title><content type='html'>Given a set of RPMs you can install them with 'yum localinstall' and yum will resolve the dependencies: 

&lt;pre&gt;
yum localinstall --nogpgcheck file1.rpm file2.rpm ...
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-2088794863816696471?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/2088794863816696471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=2088794863816696471' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2088794863816696471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2088794863816696471'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/05/yum-local-install.html' title='yum local install'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-2340882949584053368</id><published>2010-05-24T09:47:00.004-04:00</published><updated>2010-05-25T08:31:10.293-04:00</updated><title type='text'>XIV IOPS</title><content type='html'>The following table shows how the &lt;a href="http://en.wikipedia.org/wiki/IOPS"&gt;IOPS&lt;/a&gt; increase as you add more modules. It is for an &lt;a href="http://www.xivstorage.com/"&gt;XIV&lt;/a&gt; with 1T disks:
&lt;p&gt;
&lt;table border=1 cellspacing=0&gt;&lt;tr&gt; 
&lt;tr&gt;
  &lt;th&gt;Nodes&lt;/th&gt; 
  &lt;th&gt;IOPs&lt;/th&gt; 
  &lt;th&gt;TB&lt;/th&gt;
&lt;/tr&gt; 
&lt;tr&gt; 
  &lt;td align='center'&gt;6&lt;/td&gt; 
  &lt;td align='center'&gt;52,000&lt;/td&gt;
  &lt;td align='center'&gt;27&lt;/td&gt;
&lt;/tr&gt; 
&lt;tr&gt; 
  &lt;td align='center'&gt;9&lt;/td&gt; 
  &lt;td align='center'&gt;70,000&lt;/td&gt;
  &lt;td align='center'&gt;43&lt;/td&gt;
&lt;/tr&gt; 
&lt;tr&gt; 
  &lt;td align='center'&gt;10&lt;/td&gt; 
  &lt;td align='center'&gt;78,000&lt;/td&gt;
  &lt;td align='center'&gt;50&lt;/td&gt;
&lt;/tr&gt; 
&lt;tr&gt; 
  &lt;td align='center'&gt;15&lt;/td&gt; 
  &lt;td align='center'&gt;105,000&lt;/td&gt;
  &lt;td align='center'&gt;79&lt;/td&gt;
&lt;/tr&gt; 
&lt;/table&gt;
&lt;p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-2340882949584053368?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/2340882949584053368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=2340882949584053368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2340882949584053368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2340882949584053368'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/05/xiv-iops.html' title='XIV IOPS'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-6656940545887442985</id><published>2010-05-13T09:03:00.003-04:00</published><updated>2010-05-13T09:26:17.751-04:00</updated><title type='text'>CREDO and Hero</title><content type='html'>I have an AT&amp;amp;T plan. I&amp;#039;m considering switching to CREDO now that they have an &lt;a href="http://action.credomobile.com/signup/hero/"&gt;Android-based Phone&lt;/a&gt;. I am a little concerned that the &lt;a href="http://en.wikipedia.org/wiki/HTC_Hero"&gt;HTC Hero&lt;/a&gt; is a little dated however; e.g. a 528MHz vs 1GHz snapdragon that the newer phones have. I've asked CREDO what's to stop someone from getting an &lt;a href="http://en.wikipedia.org/wiki/HTC_EVO_4G"&gt;EVO&lt;/a&gt; and using it under their plan. I&amp;#039;ll post an update if they write back.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-6656940545887442985?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/6656940545887442985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=6656940545887442985' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6656940545887442985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/6656940545887442985'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/05/credo-and-hero.html' title='CREDO and Hero'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-1673239758182376594</id><published>2010-05-13T09:00:00.002-04:00</published><updated>2010-05-13T09:03:02.762-04:00</updated><title type='text'>diaspora</title><content type='html'>A while ago I &lt;a href="http://starnixhacks.blogspot.com/2010/03/eben-moglen-freedom-in-cloud.html"&gt;linked to&lt;/a&gt; Eben Moglen's talk on Freedom in the Cloud. Some NYU students have started working on such a project: &lt;a href="http://gizmodo.com/5537502/diaspora-the-student+made-privacy+respecting-facebook-alternative"&gt;diaspora&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-1673239758182376594?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/1673239758182376594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=1673239758182376594' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1673239758182376594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/1673239758182376594'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/05/diaspora.html' title='diaspora'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-2583962235620073435</id><published>2010-05-07T15:40:00.001-04:00</published><updated>2010-05-07T15:40:42.251-04:00</updated><title type='text'>cheat sheets</title><content type='html'>Nice &lt;a href="http://packetlife.net/library/cheat-sheets/"&gt;Cheat Sheets&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-2583962235620073435?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/2583962235620073435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=2583962235620073435' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2583962235620073435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2583962235620073435'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/05/cheat-sheets.html' title='cheat sheets'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-2181604012104758373</id><published>2010-05-05T19:18:00.017-04:00</published><updated>2010-07-20T08:41:46.549-04:00</updated><title type='text'>XIV resiliency under some load</title><content type='html'>Today we beat up the &lt;a href="http://www.xivstorage.com/"&gt;XIV&lt;/a&gt; by pulling a disk, pulling a whole module of 12 disks and re-zoning its fabric switch so that one of the HBAs lost connectivity, all while under some IO load. It did well. 
&lt;p&gt;
We used a development server called physics0, which is a Dell M610 with a QLogic HBA running RHEL5.5. It was connected to a six-node XIV 2814 with 1T disks. 
&lt;p&gt;
We started running four dd's: 
&lt;pre&gt;
$ ps axu | grep dd
root     12994 23.9  0.0  63156   580 pts/0    R    11:13   4:22 dd if /dev/mapper/mpath1p1 of /dev/null
root     12995 23.8  0.0  63156   572 pts/0    D    11:13   4:20 dd if /dev/mapper/mpath1p1 of /dev/null
root     12996 24.0  0.0  63156   572 pts/0    R    11:13   4:23 dd if /dev/mapper/mpath1p1 of /dev/null
root     12997 23.7  0.0  63156   576 pts/0    R    11:13   4:19 dd if /dev/mapper/mpath1p1 of /dev/null
$ 
&lt;/pre&gt;
top looked like this: 
&lt;pre&gt;
top - 11:43:35 up 4 days, 18:45,  3 users,  load average: 4.00, 4.00, 3.40
Tasks: 214 total,   3 running, 211 sleeping,   0 stopped,   0 zombie
Cpu0  :  0.4%us,  4.0%sy,  0.0%ni, 80.8%id, 14.8%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  0.0%us, 10.6%sy,  0.0%ni, 53.1%id, 36.3%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  :  0.0%us, 12.0%sy,  0.0%ni, 49.1%id, 38.9%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :  0.0%us,  1.0%sy,  0.0%ni, 95.6%id,  3.2%wa,  0.2%hi,  0.0%si,  0.0%st
Cpu4  :  0.0%us,  1.0%sy,  0.0%ni, 95.6%id,  3.4%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu5  :  0.2%us, 26.4%sy,  0.0%ni,  7.8%id, 49.6%wa,  1.4%hi, 14.6%si,  0.0%st
Cpu6  :  0.0%us, 26.9%sy,  0.0%ni,  7.6%id, 50.3%wa,  1.0%hi, 14.2%si,  0.0%st
Cpu7  :  0.0%us,  3.2%sy,  0.0%ni, 95.6%id,  1.2%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   8177436k total,  8130020k used,    47416k free,  7084504k buffers
Swap:  2096472k total,      220k used,  2096252k free,    36764k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND           
12996 root      18   0 63156  572  476 D 26.0  0.0   7:00.78 dd                 
12995 root      18   0 63156  572  476 D 22.8  0.0   6:57.09 dd                 
12997 root      18   0 63156  576  476 D 22.6  0.0   6:55.44 dd                 
12994 root      18   0 63156  580  476 R 22.2  0.0   6:58.79 dd                 
  363 root      10  -5     0    0    0 R  2.8  0.0   1:17.65 kswapd0            
 4134 root      18   0 10228  740  628 S  0.2  0.0   0:18.81 hald-addon-stor    
&lt;/pre&gt;
First we removed a disk. You can see the dip in IO and quick recovery:
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_cxpOa4vKPXw/S-H_log1QUI/AAAAAAAAAH0/4NQ8MMgKJdU/s1600/pull_disk.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_cxpOa4vKPXw/S-H_log1QUI/AAAAAAAAAH0/4NQ8MMgKJdU/s320/pull_disk.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5467932444599861570" /&gt;&lt;/a&gt;
The graph above was made with the xivtop program (control click IOPS, Latency, BW to see all three at the same time). 
&lt;p&gt;
We saw a graphical representation of the disk turning red on the XIV GUI and were then able to test it, add it, watch it rebuild. As it rebuilt we could get an update on the status with the xcli:
&lt;pre&gt;
&amp;gt; &amp;gt; monitor_redist 
Type             Initial Capacity to Copy (GB)   Capacity Remaining to Copy (GB)   -1210286092one   Time Started          Estimated Time to Finish   Time Elapsed   
Redistribution   26                              17                                33      2010-05-05 11:25:31   0:04:08                    0:02:02        
&amp;gt; &amp;gt;
&lt;/pre&gt;
We then had the Cisco MDS9124 disable access to Module4 port 2 on the XIV. There was 100% a drop in IO until the retry interval ran out and it switched to an alternate path. IOs were queued until it passed them down a different path. The queue held it and I expect that it will hold it but we want to lower the retry interval so that it doesn't queue it as long. You can see the dip in IO on the graph. It queued it for 45 seconds:
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_cxpOa4vKPXw/S-IBEktWOxI/AAAAAAAAAH8/nNW3HR9b6ig/s1600/multipath_recovery.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_cxpOa4vKPXw/S-IBEktWOxI/AAAAAAAAAH8/nNW3HR9b6ig/s320/multipath_recovery.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5467934075666184978" /&gt;&lt;/a&gt;
We also observed that the event log saw the available paths lesson:
&lt;pre&gt;
&amp;gt; &amp;gt; event_list
...
2010-05-05 12:09:27   Informational   HOST_MULTIPATH_OK                                  Host 'nfile0' has redundant connections to the system. #paths=3                                                                                                              
2010-05-05 12:12:15   Informational   HOST_NO_MULTIPATH_ONLY_ONE_PORT                    Host 'physics0' is connected to the system through only one of its ports. #paths=2                                                                                           
2010-05-05 12:13:13   Informational   HOST_MULTIPATH_OK
Host 'physics0' has redundant connections to the system. #paths=4     

&amp;gt; &amp;gt;
&lt;/pre&gt;
&lt;strong&gt;Update:&lt;/strong&gt; see 
&lt;a href="http://starnixhacks.blogspot.com/2010/07/qlogic-retry-interval.html"&gt;Qlogic retry interval&lt;/a&gt; for how to implement instantaneous fail over as opposed to queuing for 45 seconds. 

&lt;p&gt;
Unplugging the module was the most satisfying. I walked right up behind the unit and pulled both power cords out. The interruption in IO dip was longer as a result of loosing the module. Also IOPs averaged out not at 14,500 IOPs but 10,000 IOPs:
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_cxpOa4vKPXw/S-ICXNPecwI/AAAAAAAAAIE/iz1dHZpYevw/s1600/pull_module.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_cxpOa4vKPXw/S-ICXNPecwI/AAAAAAAAAIE/iz1dHZpYevw/s320/pull_module.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5467935495296021250" /&gt;&lt;/a&gt;
The event log showed the unplugged module:
&lt;pre&gt;
&amp;gt; &amp;gt; event_list
...
2010-05-05 12:46:14   Critical        MODULE_FAILED                                      1:Module:4 failed.                                                                                                                                                           
2010-05-05 12:46:17   Informational   DATA_REBUILD_STARTED                               Rebuild process started because system data is not protected. 1726767077764f the data must be rebuilt.                                                                                                                                                                 
2010-05-05 12:46:20   Informational   HOST_NO_MULTIPATH_ONLY_ONE_MODULE                  Host 'physics0' is connected to the system through only one interface module. #paths=2                                                                                       
2010-05-05 12:49:49   Informational   DATA_REBUILD_COMPLETED                             Rebuild process completed. System data is now protected.     
2010-05-05 13:16:37   Informational   DISK_FINISHED_PHASEIN                 System finished phasing in 1:Disk:4:1.                                                                                                                                       
2010-05-05 13:16:37   Informational   DISK_FINISHED_PHASEIN                 System finished phasing in 1:Disk:4:2.                                                                                                                                       
...
2010-05-05 13:16:38   Informational   DISK_FINISHED_PHASEIN                 System finished phasing in 1:Disk:4:12.                                                                                                     

&amp;gt; &amp;gt;
&lt;/pre&gt;
We can also observe what's "not ok" while the module is unblocked: 
&lt;pre&gt;
&amp;gt; &amp;gt; component_list filter=notok
Component ID           Status         Currently Functioning   
1:Disk:4:1             Failed         no                      
1:Disk:4:2             Failed         no                      
1:Disk:4:3             Failed         no                      
1:Disk:4:4             Failed         no                      
1:Disk:4:5             Failed         no                      
1:Disk:4:6             Failed         no                      
1:Disk:4:8             Failed         no                      
1:Disk:4:9             Failed         no                      
1:Disk:4:10            Failed         no                      
1:Disk:4:11            Failed         no                      
1:Disk:4:12            Failed         no                      
1:Module:4             Initializing   yes                     
1:Data:4               Failed         no                      
1:Interface:4          Failed         no                      
1:Remote:4             Failed         no                      
1:Interface:6          Ready          yes                     
1:Remote:6             Ready          yes                     
1:Ethernet_Cable:4:1   Failed         yes                     
1:Ethernet_Cable:4:2   Failed         yes                     
1:Ethernet_Cable:4:7   Failed         yes                     
1:Ethernet_Cable:4:8   Failed         yes                     
1:Ethernet_Cable:4:9   Failed         yes                     
1:Ethernet_Cable:4:10  Failed         yes                     
1:Disk:4:7             Failed         no                      
&amp;gt; &amp;gt;
&lt;/pre&gt;
and being added back in:
&lt;pre&gt;
&amp;gt; &amp;gt; component_list filter=notok
Component ID   Status       Currently Functioning   
1:Interface:6  Ready        yes                     
1:Remote:6     Ready        yes                     
1:Disk:4:1     Phasing In   yes                     
1:Disk:4:2     Phasing In   yes                     
1:Disk:4:3     Phasing In   yes                     
1:Disk:4:4     Phasing In   yes                     
1:Disk:4:5     Phasing In   yes                     
1:Disk:4:6     Phasing In   yes                     
1:Disk:4:7     Phasing In   yes                     
1:Disk:4:8     Phasing In   yes                     
1:Disk:4:9     Phasing In   yes                     
1:Disk:4:10    Phasing In   yes                     
1:Disk:4:11    Phasing In   yes                     
1:Disk:4:12    Phasing In   yes  
&amp;gt; &amp;gt;
&lt;/pre&gt;
It's good to know it can take a beating before being sent into production.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-2181604012104758373?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/2181604012104758373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=2181604012104758373' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2181604012104758373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2181604012104758373'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/05/xiv-resiliency-under-some-load.html' title='XIV resiliency under some load'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_cxpOa4vKPXw/S-H_log1QUI/AAAAAAAAAH0/4NQ8MMgKJdU/s72-c/pull_disk.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-9133683443500626767</id><published>2010-05-02T11:04:00.010-04:00</published><updated>2010-05-02T11:22:19.366-04:00</updated><title type='text'>The XIV is here...</title><content type='html'>My organization's &lt;a href="http://www.xivstorage.com/"&gt;XIV&lt;/a&gt; arrived recently:
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_cxpOa4vKPXw/S92U--vyf7I/AAAAAAAAAHM/af_m8ULRO2A/s1600/IMG_0720.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://1.bp.blogspot.com/_cxpOa4vKPXw/S92U--vyf7I/AAAAAAAAAHM/af_m8ULRO2A/s320/IMG_0720.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5466689332413890482" /&gt;&lt;/a&gt;

Each rack has several commodity 2U servers with 12 1T drives:
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_cxpOa4vKPXw/S92Va1yAgQI/AAAAAAAAAHU/po_utmXPJfU/s1600/IMG_0713.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_cxpOa4vKPXw/S92Va1yAgQI/AAAAAAAAAHU/po_utmXPJfU/s320/IMG_0713.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5466689811043614978" /&gt;&lt;/a&gt;

Inside of each server is 8G of RAM and two 2.3 Ghz Intel Quad Cores:
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_cxpOa4vKPXw/S92WjYHBBsI/AAAAAAAAAHc/D1AXg_X_8Dk/s1600/IMG_0719.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_cxpOa4vKPXw/S92WjYHBBsI/AAAAAAAAAHc/D1AXg_X_8Dk/s320/IMG_0719.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5466691057209116354" /&gt;&lt;/a&gt;

which are connected together with Ethernet in a pre-wired APC cabinet:
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_cxpOa4vKPXw/S92W3QPspTI/AAAAAAAAAHk/p6p0tqWKDEc/s1600/IMG_0715.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://1.bp.blogspot.com/_cxpOa4vKPXw/S92W3QPspTI/AAAAAAAAAHk/p6p0tqWKDEc/s320/IMG_0715.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5466691398695429426" /&gt;&lt;/a&gt;

Also, the two 60A, 200-240 VAC, single phase, two pole, line-line ground female receptacles are huge:
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_cxpOa4vKPXw/S92XmN5YgpI/AAAAAAAAAHs/RA_NrHKC1f0/s1600/IMG_0717.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_cxpOa4vKPXw/S92XmN5YgpI/AAAAAAAAAHs/RA_NrHKC1f0/s320/IMG_0717.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5466692205518815890" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-9133683443500626767?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/9133683443500626767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=9133683443500626767' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/9133683443500626767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/9133683443500626767'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/05/xiv-is-here.html' title='The XIV is here...'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_cxpOa4vKPXw/S92U--vyf7I/AAAAAAAAAHM/af_m8ULRO2A/s72-c/IMG_0720.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-2884754578888679169</id><published>2010-04-30T08:56:00.000-04:00</published><updated>2010-04-30T08:57:20.086-04:00</updated><title type='text'>Zimbra and Exchange TCO Comparison from the University of  Pennsylvania</title><content type='html'>&lt;a href="http://blog.zimbra.com/blog/archives/2010/04/zimbra-tco-bests-microsoft-exchange-in-university-of-pennsylvania-case-study.html"&gt;Zimbra and Exchange TCO Comparison from the University of  Pennsylvania&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-2884754578888679169?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/2884754578888679169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=2884754578888679169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2884754578888679169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2884754578888679169'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/04/zimbra-and-exchange-tco-comparison-from.html' title='Zimbra and Exchange TCO Comparison from the University of  Pennsylvania'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-5053191156356442141</id><published>2010-04-28T14:56:00.008-04:00</published><updated>2010-04-28T15:54:59.270-04:00</updated><title type='text'>SSD Experiment</title><content type='html'>I've been considering experimenting with an SSD drive. I already have a &lt;a href="http://www.cdw.com/shop/products/default.aspx?EDC=1698580"&gt;1T Seagate Barracuda&lt;/a&gt;. My plan is to get a &lt;a href="http://www.cdw.com/shop/products/default.aspx?EDC=1818131"&gt;160G Intel X25-M SSD&lt;/a&gt;. 

On a hardware layer, it looks like it would work with my Dell Precision 690 using the SATA-300 interface. I also see that it includes a 3.5-inch bay adapter (given that a standard SATA drive is 3.5" and this is a a 2.5" drive). 

On a software layer, I would configure the two drives as follows: 
&lt;ul&gt;
&lt;li&gt;160G SSD:&lt;br /&gt;
* 96G system drive with the following partitions: 
&lt;pre&gt;
/                     10G
/home                 10G
/tmp                   5G
/usr                  10G
/var                  61G
&lt;/pre&gt;
* 64G of cache/swap:
I would like to use the extra speed for cache, not storage. Ideas:
&lt;ul&gt;
 &lt;br /&gt;
 &lt;li&gt;Swap: The simplest thing is to swapon to it and then run a lot of VMs under KVM and see if performance for the VM is tolerable. If it is then its much cheaper than buying more RAM. 
 &lt;/li&gt;
 &lt;br /&gt;
 &lt;li&gt;Disk Cache: If I were running ZFS I'd &lt;a href="http://www.solarisinternals.com/wiki/index.php/ZFS_Best_Practices_Guide#Separate_Cache_Devices"&gt;add the SSDs to the L2ARC on-disk cache&lt;/a&gt;. 
 &lt;/li&gt;
 &lt;br /&gt;
 &lt;li&gt;Other types of Cache: Lots of ideas on this topic recently posted on &lt;a href="http://ask.slashdot.org/story/10/04/22/219211/Software-SSD-Cache-Implementation-For-Linux"&gt;slashdot&lt;/a&gt;. 
&lt;/ul&gt;
&lt;/li&gt;
&lt;p&gt;
&lt;li&gt;1T SATA:&lt;br /&gt;
I would then use the remaining 1T for directories under /home and /var to store VMs (as raw LVs) as well media. I'd also keep an extra 20G of the SATA space free to play with new file systems. 
&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-5053191156356442141?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/5053191156356442141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=5053191156356442141' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/5053191156356442141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/5053191156356442141'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/04/ssd-experiment.html' title='SSD Experiment'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-2997788025637247069</id><published>2010-04-28T12:34:00.002-04:00</published><updated>2010-04-28T12:40:22.406-04:00</updated><title type='text'>postmortem of the apache.org crack</title><content type='html'>apache.org has &lt;a href="https://blogs.apache.org/infra/entry/apache_org_04_09_2010"&gt;posted&lt;/a&gt; a good model for the self-reporting of incidents.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-2997788025637247069?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/2997788025637247069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=2997788025637247069' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2997788025637247069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/2997788025637247069'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/04/postmortem-of-apacheorg-crack.html' title='postmortem of the apache.org crack'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-3730524273618155200</id><published>2010-04-11T23:23:00.000-04:00</published><updated>2010-04-11T23:48:13.739-04:00</updated><title type='text'>tiered ram</title><content type='html'>A friend of mine suggested that I could get more memory related performance out of my servers by using fast disk for swap. Specifically, I could buy 1TB of SSD disk and have a dom0 Xen server swapon it. E.g. the largest VM server in my organization's data center has 128G of RAM. If I needed to run more VMs and some percentage of them could take a slight performance hit, then I could allocate 256G of SSD as swap space to up to four equally large servers to have RAM*2 of swap. I could then rely on Linux's paging algorithm to prioritize for those VMs that really need real RAM and run a lot more VMs for cheaper than if I had to buy 1TB of RAM. &lt;br/&gt;&lt;br/&gt;Disclaimer: I have not tried this. 
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-3730524273618155200?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/3730524273618155200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=3730524273618155200' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/3730524273618155200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/3730524273618155200'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/04/tiered-ram.html' title='tiered ram'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-9185123530421082205</id><published>2010-04-08T18:39:00.004-04:00</published><updated>2010-04-08T19:03:03.560-04:00</updated><title type='text'>Gratuitous ARPs whenever you need them</title><content type='html'>Today I cloned a VM which had several IPs bounded to eth0. When I brought up the clone eth0 answered pings from my workstation (which is on a different network), but eth0:1, eth0:2, .. eth0:N did not. &lt;a href="http://linux.die.net/man/1/virt-clone"&gt;virt-clone&lt;/a&gt; had changed the MAC address as expected but why would a mac address change cause this problem? 

Turns out that the router between my workstation and dom0 had the old MAC address in its ARP cache and the ARP cache timeout is set high enough that I'd have to wait for it in order to reach the other IPs. But why wouldn't eth0 also be affected? Apparently when you boot a server it sends a &lt;a href="http://wiki.wireshark.org/Gratuitous_ARP"&gt;Gratuitous ARP&lt;/a&gt; for eth0 but not eth0:1 etc. So the ARP cache for eth0 was updated but not the other IPs bound to eth0. What I wanted was to send a Gratuitous ARP for every IP bound to eth0 so that the cache would be refreshed. This is where &lt;a href="http://linux.die.net/man/8/arping"&gt;arping&lt;/a&gt; is useful. E.g. to send a gratuitous ARP for the IP 192.168.6.212 whose gateway is 192.168.6.1, run: 
&lt;pre&gt;
/sbin/arping -s 192.168.6.212 -I eth0 192.168.6.1
&lt;/pre&gt;
From there it was just a matter of using a bash loop:
&lt;pre&gt;
for x in `ifconfig | grep 192 | awk {'print $2'} | sed s/addr://g`; 
  do /sbin/arping -c 1 -s $x -I eth0 192.168.6.1 ;
done
&lt;/pre&gt;
I'm lucky my co-workers were able to help me understand this problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-9185123530421082205?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/9185123530421082205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=9185123530421082205' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/9185123530421082205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/9185123530421082205'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/04/gratuitous-arps-whenever-you-need-them.html' title='Gratuitous ARPs whenever you need them'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-4640743249656443256</id><published>2010-04-08T18:29:00.004-04:00</published><updated>2011-12-06T14:09:32.644-05:00</updated><title type='text'>shaping like behavior while doing an scp</title><content type='html'>While scp'ing a large file between two systems on the same network I experienced something similar to shaping, though I was not shaped: 
&lt;pre&gt;
$ scp drupal1* user@host:/var/foo/
drupal1_data.img.gz                             2% 3122MB  33.6MB/s 
...
drupal1_data.img.gz                            20%  294MB   0.0KB/s -
stalled -Write failed: Broken pipe
lost connection
$
&lt;/pre&gt;
The ascii illustration above isn't a direct paste but should convey what happened. I watched 33.6MB/s show down to a complete stop. What's odd is that I was then able to do the scp again and maintain 33.6MB/s and get the scp done. However, I also saw the issue above now and then intermittently. I was going from Fedora 12 to RHEL5.5. I'm curious and want to look into this more. Someone suggested I would find relative information at &lt;a href="http://www.psc.edu/networking/projects/hpn-ssh/"&gt;High Performance SSH/SCP - HPN-SSH&lt;/a&gt;
&lt;p&gt;
&lt;b&gt;Update Dec 2011:&lt;/b&gt;:&lt;br /&gt;

A solution to the above is posted at &lt;a href="http://linuxsecure.blogspot.com/2008/05/scp-stalled-through-firewall-ssh-no.html"&gt;linuxsecure.blogspot.com&lt;/a&gt;. It comes down to adding:
&lt;pre&gt;
net.ipv4.tcp_sack = 0
&lt;/pre&gt;
to /etc/sysctl.conf and then enacting it with "sysctl -p".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-4640743249656443256?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/4640743249656443256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=4640743249656443256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4640743249656443256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/4640743249656443256'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/04/shaping-like-behavior-while-doing-scp.html' title='shaping like behavior while doing an scp'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7675198835971134034.post-8300924323095338567</id><published>2010-04-05T17:53:00.003-04:00</published><updated>2010-04-05T18:02:16.985-04:00</updated><title type='text'>Python SSH with Paramiko quickly</title><content type='html'>A quick python script to SSH into a server and run a list of commands. 

Uses &lt;a href="http://www.lag.net/paramiko/"&gt;Paramiko&lt;/a&gt; (&lt;a href="http://www.lag.net/paramiko/docs/"&gt;doc&lt;/a&gt;). Fedora has a &lt;a href="https://admin.fedoraproject.org/pkgdb/acls/name/python-paramiko?_csrf_token=81cf1be54e587e32c3d3b8c50c6f0ea28c49fe88"&gt;package&lt;/a&gt;:
&lt;pre&gt;
yum install python-paramiko
&lt;/pre&gt;
Assumes you are using RSA &lt;a href="http://sial.org/howto/openssh/publickey-auth/"&gt;Public Key Authentication&lt;/a&gt;:
&lt;pre&gt;
#!/usr/bin/python
import paramiko, os, getpass

# Variables
username = 'you'
host = 'your.server.com'
port = 22
key = '~/.ssh/id_rsa'
msg = "Enter passphrase for key '" + key + "': "
private_key_pass = getpass.getpass(prompt=msg)
private_key_file = os.path.expanduser(key)

# Connctions
pkey = paramiko.RSAKey.from_private_key_file(private_key_file,\
                                              private_key_pass)
transport = paramiko.Transport((host, port))
transport.connect(username = username, pkey = pkey)

# Commands
cmds = ['ls', 'ls /foo']
for cmd in cmds:
    channel = transport.open_session()
    channel.exec_command(cmd)
    output = channel.makefile('rb', -1).readlines()
    if output:
        print "Success:"
        print output
    else:
        print "Error:"
        print channel.makefile_stderr('rb', -1).readlines()

transport.close()
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7675198835971134034-8300924323095338567?l=starnixhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://starnixhacks.blogspot.com/feeds/8300924323095338567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7675198835971134034&amp;postID=8300924323095338567' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/8300924323095338567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7675198835971134034/posts/default/8300924323095338567'/><link rel='alternate' type='text/html' href='http://starnixhacks.blogspot.com/2010/04/python-paramiko-quick.html' title='Python SSH with Paramiko quickly'/><author><name>John</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
