<?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-167116169299127812</id><updated>2011-11-27T20:14:15.355-05:00</updated><category term='ruby'/><category term='apache'/><category term='linux'/><category term='id3'/><category term='sysadmin'/><category term='java'/><category term='funny'/><category term='php'/><category term='vmware'/><category term='development'/><category term='perl'/><category term='wan'/><category term='mpls'/><category term='help'/><category term='cisco'/><category term='zenoss'/><category term='plone'/><category term='python'/><category term='rails'/><category term='mongrel'/><category term='zope'/><category term='debian'/><category term='drupal'/><category term='microsoft'/><category term='windows'/><category term='snmp'/><category term='routing'/><category term='mp3'/><category term='network'/><category term='code'/><category term='ubuntu'/><category term='hardware'/><title type='text'>Nootech Notes</title><subtitle type='html'>Technology solutions from my head to yours</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-167116169299127812.post-6008762289098184315</id><published>2007-07-02T22:47:00.000-05:00</published><updated>2007-07-02T22:49:46.634-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='funny'/><title type='text'>moving over to wordpress</title><content type='html'>Why are all Blogspot's themes so narrow?   They don't work very well with the code snippets I've posted.  So let's move over to &lt;a href="http://nootech.wordpress.com"&gt;WordPress &lt;/a&gt;and see how that works ...  One of their themes is &lt;a href="http://drupal.org"&gt;Drupal&lt;/a&gt;'s Garland, which matches that on my &lt;a href="http://nootech.net"&gt;non-blog site.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-6008762289098184315?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/6008762289098184315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=6008762289098184315' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/6008762289098184315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/6008762289098184315'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2007/07/moving-over-to-wordpress.html' title='moving over to wordpress'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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-167116169299127812.post-8980416610387560965</id><published>2007-07-02T22:07:00.000-05:00</published><updated>2007-07-02T22:17:19.244-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Plone + TextIndexNG3 on Windows, Take 2</title><content type='html'>Turns out I forgot to mention a couple extra steps to get TextIndexNG3 compiled and working on Windows.  After failing to follow my own instructions on a new install, and with a reminder from this &lt;a href="http://www.mingw.org/MinGWiki/index.php/Python%20extensions"&gt;MinGW + Python post&lt;/a&gt;, I realized I didn't document the following:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;In addition to the vanilla include directory, also copy the libs folder from the Python tree to %PLONE%\Python&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Create the file %PLONE%\Lib\distutils\distutils.cfg with the contents:&lt;br /&gt;&lt;pre class="tightenable top bottom"&gt;&lt;blockquote&gt;[build]&lt;br /&gt;compiler=mingw32&lt;/blockquote&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Compile the TextIndexNG3 extension with:&lt;br /&gt;&lt;blockquote&gt;%PLONE%\Python\Python.exe setup build -c mingw32&lt;/blockquote&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Make sure to copy the compiled extension to somewhere in Plone's Python's path:&lt;br /&gt;&lt;blockquote&gt;cp %PLONE%\Data\Products\TextIndexNG3\extension_modules\zopyx \ %PLONE%\Python\Lib\site-packages\zopyx&lt;/blockquote&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-8980416610387560965?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/8980416610387560965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=8980416610387560965' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/8980416610387560965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/8980416610387560965'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2007/07/plone-textindexng3-on-windows-take-2.html' title='Plone + TextIndexNG3 on Windows, Take 2'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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-167116169299127812.post-7954288075512404935</id><published>2007-06-17T23:40:00.000-05:00</published><updated>2007-06-17T23:53:17.940-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='help'/><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Plone + TextIndexNG3 on Windows</title><content type='html'>The &lt;a href="http://plone.org/products/plone"&gt;Plone installers for Windows&lt;/a&gt; don't bundle the cool &lt;a href="http://opensource.zopyx.com/software/textindexng3/"&gt;TextIndexNG3&lt;/a&gt; fulltext search add-on.  To enable it, you need to compile the C extension module that comes with it.  There's an &lt;a href="http://downloads.sourceforge.net/textindexng/TextIndexNG3-3.1.8-lib.win32-2.3.zip?modtime=1143086777&amp;amp;big_mirror=0"&gt;older binary version&lt;/a&gt; available, but it's expecting Python 2.3, not the 2.4.4 that comes with the bundle.  &lt;a href="http://rdflib.net/issues/2007/01/03/can%27t_complete_install_because_%22the_.net_framework_sdk_needs_to_be_installed_before_building_extensions_for_python.%22/issue"&gt;Various posts&lt;/a&gt; summarize how to do the compilation, but they don't work as-is for the installer version.&lt;br /&gt;&lt;br /&gt;After getting &lt;a href="http://www.mingw.org/"&gt;mingw32&lt;/a&gt; setup, it took me a little while to realize that the bundled python doesn't have the "include" directory of files, which the compile process obviously needs.  So I downloaded the &lt;a href="http://python.org"&gt;vanilla sources&lt;/a&gt; and copied the include directory over, and it compiled perfectly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-7954288075512404935?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/7954288075512404935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=7954288075512404935' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/7954288075512404935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/7954288075512404935'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2007/06/plone-textindexng3-on-windows.html' title='Plone + TextIndexNG3 on Windows'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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-167116169299127812.post-5018479479884795610</id><published>2007-05-14T21:35:00.000-05:00</published><updated>2007-05-14T21:38:43.915-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Plone with Active Directory</title><content type='html'>The plone site is filled with documentation for authenticating against LDAP/AD with LDAPUserFolder.  But Plone 2.5 has a new Pluggable Authentication Service ala PAM, but strangely no updating docs.  &lt;br /&gt;&lt;br /&gt;Glad I found &lt;a href="http://kokorice.org/blog/archive/2006/08/30/setting-up-windows-active-directory-ldap-authentication-in-plone-2.5"&gt;this post&lt;/a&gt; to save me the time!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-5018479479884795610?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/5018479479884795610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=5018479479884795610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/5018479479884795610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/5018479479884795610'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2007/05/plone-with-active-directory.html' title='Plone with Active Directory'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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-167116169299127812.post-9158904478571082228</id><published>2007-05-06T09:01:00.000-05:00</published><updated>2007-05-06T09:06:34.322-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Plone &amp; MSXML control</title><content type='html'>When accessing a Plone site with IE6/7, the browser pops up the following message at the top of the page:&lt;br /&gt;&lt;br /&gt;&lt;p style="margin: 0in;"&gt;&lt;/p&gt;&lt;blockquote&gt;This website wants to run the following add-on: ‘MSXML  5.0′ from &lt;strong&gt;‘Microsoft Corporation’&lt;/strong&gt;. If you &lt;strong&gt;trust the  website and addon&lt;/strong&gt; and want to allow it to run, click here…&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;Most of the &lt;a href="http://www.google.com/search?hl=en&amp;rls=com.microsoft%3A*%3AIE-SearchBox&amp;amp;rlz=1I7ADBF&amp;q=plone+%22website+wants+to+run%22+msxml"&gt;posts and comments&lt;/a&gt; about it indicate that it's a problem with older versions of Plone (&lt;= 2.5.1) and the included kupu library.  But I've been getting it with the latest 2.5.2 release, which includes the supposedly fixed components. &lt;br /&gt;&lt;br /&gt;After playing around for a bit, I found that I could bypass the error by adding the site to the Intranet zone.   Not an ideal workaround in general, but since I am doing this for a company intranet, it's acceptable for now. &lt;br /&gt;&lt;br /&gt;If anyone finds the correct way to fix it, please tell me!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-9158904478571082228?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/9158904478571082228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=9158904478571082228' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/9158904478571082228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/9158904478571082228'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2007/05/plone-msxml-control.html' title='Plone &amp; MSXML control'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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-167116169299127812.post-1111424342171345964</id><published>2007-04-15T21:56:00.000-05:00</published><updated>2007-04-15T22:00:35.694-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Keeping Plone Content Private</title><content type='html'>Plone's security mechanisms are pretty good: very granular and flexible, so you can tailor the site however neded.  Strangely, though, if you mark a folder Private, by default the contents within are still visible.  Plone's default workflows allow have to be modified to correct this counter-intuitive initial setting.&lt;br /&gt;&lt;br /&gt;It is posted as a how-to, but rather than searching for it everytime, here's the link.  Maybe in a future release this will be fixed in the shipped product.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://plone.org/documentation/how-to/make-folder-hierarchy-private"&gt;http://plone.org/documentation/how-to/make-folder-hierarchy-private&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-1111424342171345964?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/1111424342171345964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=1111424342171345964' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/1111424342171345964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/1111424342171345964'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2007/04/keeping-plone-content-private.html' title='Keeping Plone Content Private'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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-167116169299127812.post-3166871821330373662</id><published>2007-04-15T11:42:00.000-05:00</published><updated>2007-04-15T13:36:08.149-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Building an Intranet: Drupal vs Plone</title><content type='html'>I landed a contract to setup an intranet for a local company.  They had looked at Microsoft's SharePoint, but decided it was way too complex for their needs.  So they asked me to help them find something better.  I originally planned to go with &lt;a href="http://www.drupal.org/"&gt;Drupal&lt;/a&gt;, due to its great taxonomy model.  Having the ability to tag any piece of content from the same vocabulary makes for a very organic structure, allowing the users to find what they need quickly without having to deal with a rigid, arbitrary folder structure.&lt;br /&gt;&lt;br /&gt;Unfortunately, Drupal is missing a lot of other features required for a robust intranet, primarily a robust document management feature.  External files in drupal are treated more as attachments than as primary nodes, which makes it rather difficult for a user to quickly get to that important presentation the boss needs.  There are &lt;a href="http://groups.drupal.org/document-management"&gt; plans&lt;/a&gt; to rectify this, including a Google Summer of Code application this year (though it doesn't appear to have been accepted).  Until then, though, I'll need something else.&lt;br /&gt;&lt;br /&gt;Which led me back to &lt;a href="http://plone.org/"&gt;Plone&lt;/a&gt;.  I played with this during 2.1, and was impressed by it's breadth of features, including document management and granular security.  However, it doesn't have anything close to Drupal's taxonomy model built-in.  There's a basic keyword feature, but it's a single list of terms global to all content types, so it won't scale very far.  There are a couple of add-ons ("Products" in the plone/zope nomenclature) but they can't be applied to the existing content types.  To get the full power, you need to build your own types.  This isn't that big a deal, since it lets you provide content types just the way you want to.  But it requires more work up-front than with drupal.   &lt;br /&gt;&lt;br /&gt;Plus, it means I have to give in and deal with Python and all its whitespace pickiness.  Sure it's a great language (according to the zealots), but c'mon - there are plenty of code samples around the net, but you can't just copy-paste into your app.  You have to go through and verify all the whitespace lines up before you can run it.  How silly.&lt;br /&gt;&lt;br /&gt;Anyway, I'm almost finished with some custom types using &lt;a href="http://plone.org/products/atvocabularymanager"&gt;ATVocabularyManager&lt;/a&gt;.  Then I can get back to building the client's intranet....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-3166871821330373662?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/3166871821330373662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=3166871821330373662' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/3166871821330373662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/3166871821330373662'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2007/04/building-intranet-drupal-vs-plone.html' title='Building an Intranet: Drupal vs Plone'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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-167116169299127812.post-3076510101571469415</id><published>2007-02-16T16:19:00.000-05:00</published><updated>2007-02-16T17:09:35.233-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='zenoss'/><category scheme='http://www.blogger.com/atom/ns#' term='sysadmin'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Zenoss and Syslog catching</title><content type='html'>I got &lt;a href="http://www.zenoss.com"&gt;Zenoss&lt;/a&gt; to gather messages from syslog today.  Actually, I had it up a few days ago, but was having a problem that I finally resolved today.  We already have a &lt;a href="http://www.google.com/search?hl=en&amp;q=centralized+syslog-ng+server&amp;amp;btnG=Search"&gt;centralized syslog server&lt;/a&gt; in the data center using &lt;a href="http://www.balabit.com/products/syslog_ng/"&gt;syslog-ng&lt;/a&gt;, so everything is hitting the monitor station.  So logically it should be easy to feed the messages into Zenoss. But of course it never is.  I ran into 2 problems:&lt;br /&gt;&lt;br /&gt;(1) zenoss defaults to listening on the primary syslog port, UDP 514.  Obviously that conflicts with the existing server.  Zenoss provides an option to give a different port, but the issue is that there's no consistent way (that I've found yet) to specify that.  The documentation hints that you can add to $ZENOSS_HOME/etc/zensyslog.conf, but it also says you have to specify ALL possible options, without a clear explanation of what all is required.  So for now the options are in $ZENOSS_HOME/bin/zensyslog, tacked onto the end of the call (see below for specifics).&lt;br /&gt;&lt;br /&gt;(2) The other problem I had, after fixed the first, is that a lot of the messages were being tagged to the nonexistent host "127.0.0.1".  After a lot of digging, I figured out that it's because zenoss was setting the device to the host that originates the syslog packet, which because it was being re-routed by syslog-ng, was localhost.&lt;br /&gt;&lt;br /&gt;From the syslog-ng docu, there's an option to the destination parameter, spoof_source(yes), that will tell it to write the forwarding packet with the original sender's info.  When syslog-ng started complaining about the option, I had to search some more, finally downloading the source for syslog-ng 2.0x.  This option is mentioned in the docs still, but nothing actually using it in the source code.  So I grabbed v 1.6x, and found it there.  Apparently &lt;a href="http://www.balabit.com/products/syslog_ng/"&gt;BalaBit&lt;/a&gt; (vendor for syslog-ng) rewrote the source in moving to 2.0, stripping out this feature, but hasn't yet updated the docs. Unfortunately Sarge (including backports) can't compile the 1.6 code anymore, so I had to forget that route.  &amp;lt;sigh&amp;gt;&lt;br /&gt;&lt;br /&gt;So after kicking myself for wasting that couple of hours, I looked back at the options for zensyslog.  Not surprisingly, there's another option that can be passed to zensyslog, --parsehosts, to tell it to use what's in the actual message instead of the packet.   What was surprising is that it didn't work!  Watching the debug output showed it still assigning to localhost.  After some more digging, it turns out there's a bug in the function that handles this, where the parsed host gets saved to the wrong variable, thus dropping it (and of course Python merrily allows the assignment to a non-existent member variable without a peep!)&lt;br /&gt;&lt;br /&gt;Once I fixed and reported the bug (ticket &lt;a href="http://dev.zenoss.org/trac/ticket/999"&gt;#999&lt;/a&gt;), logs started flowing into the right buckets.  Yeah!&lt;br /&gt;&lt;br /&gt;Now for the specifics on what all I did:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Add options to zensyslog startup:&lt;/li&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;zenoss@localhost:/opt/zenoss$ more bin/zensyslog&lt;br /&gt;#! /usr/bin/env bash&lt;br /&gt;&lt;br /&gt;. $ZENHOME/bin/zenfunctions&lt;br /&gt;&lt;br /&gt;SUDO=sudo&lt;br /&gt;PRGHOME=$ZENHOME/Products/ZenEvents&lt;br /&gt;PRGNAME=zensyslog.py&lt;br /&gt;CFGFILE=$CFGDIR/zensyslog.conf&lt;br /&gt;PIDFILE=$VARDIR/$PRGNAME.pid&lt;br /&gt;&lt;br /&gt;generic "$@" --syslogport 5514 --parsehost&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Add entries to syslog-ng.conf to setup the forwarding:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;# make sure these options are set, to keep it simple for zenoss&lt;br /&gt;options {&lt;br /&gt;        use_fqdn(no);&lt;br /&gt;        chain_hostnames(no);&lt;br /&gt;        normalize_hostnames(yes);&lt;br /&gt;        log_msg_size(4096);&lt;br /&gt;        keep_hostname(yes);&lt;br /&gt;};&lt;br /&gt;source s_all {&lt;br /&gt;        internal();&lt;br /&gt;        unix-stream("/dev/log" keep-alive(yes) max-connections(100));&lt;br /&gt;        pipe("/proc/kmsg");&lt;br /&gt;        tcp(keep-alive(yes) max-connections(150));&lt;br /&gt;        udp();&lt;br /&gt;};&lt;br /&gt;filter f_warn { priority(warning..emerg); };&lt;br /&gt;destination d_zenoss { udp("localhost" port(5514)); };&lt;br /&gt;log { source(s_all); filter(f_warn); destination(d_zenoss); };&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Fix parsehosts bug:&lt;/li&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;*** $ZENOSS_HOME/Products/ZenEvents/SyslogProcessing.py.orig    2007-01-19 15:32.000000000 -0500&lt;br /&gt;--- $ZENOSS_HOME/Products/ZenEvents/SyslogProcessing.py 2007-02-16 16:13:54.000000000 -0500&lt;br /&gt;***************&lt;br /&gt;*** 136,143 ****&lt;br /&gt;              msg = m.group(2).strip()&lt;br /&gt;          msglist = msg.split()&lt;br /&gt;          if self.parsehost and not self.notHostSearch(msglist[0]):&lt;br /&gt;!             evt.hostname = msglist[0]&lt;br /&gt;!             slog.debug("parseHEADER hostname=%s", evt.hostname)&lt;br /&gt;              msg = " ".join(msglist[1:])&lt;br /&gt;          return evt, msg&lt;br /&gt;&lt;br /&gt;--- 136,143 ----&lt;br /&gt;              msg = m.group(2).strip()&lt;br /&gt;          msglist = msg.split()&lt;br /&gt;          if self.parsehost and not self.notHostSearch(msglist[0]):&lt;br /&gt;!             evt.device = msglist[0]&lt;br /&gt;!             slog.debug("parseHEADER hostname=%s", evt.device)&lt;br /&gt;              msg = " ".join(msglist[1:])&lt;br /&gt;          return evt, msg&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Restart zensyslog and syslog-ng:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;zenoss@localhost:/opt/zenoss$ ./bin/zensyslog restart&lt;br /&gt;&lt;br /&gt;(change to root)&lt;br /&gt;&lt;br /&gt;[root@localhost] # /etc/init.d/syslog-ng restart&lt;br /&gt;Stopping system logging: syslog-ng.&lt;br /&gt;Starting system logging: syslog-ng.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-3076510101571469415?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/3076510101571469415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=3076510101571469415' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/3076510101571469415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/3076510101571469415'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2007/02/zenoss-and-syslog-catching.html' title='Zenoss and Syslog catching'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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-167116169299127812.post-7306185144109625804</id><published>2007-02-14T16:37:00.000-05:00</published><updated>2007-02-14T17:29:10.687-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sysadmin'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Installing PHP4 and PHP5 concurrently on Ubuntu and Apache2</title><content type='html'>I came across &lt;a href="http://ez.no/"&gt;ezPublish&lt;/a&gt; as a possible nice CMS for use in a couple projects I'm working on, but stumbled when it required PHP4.  Rather than downgrading my full Apache2 instance just to test the app, I decided to get both 4 and 5 working on my Ubuntu laptop.  Seem to be various ways to do it, but the best (er, first) I found was &lt;a href="http://devzone.zend.com/node/view/id/633"&gt;Windows-specific&lt;/a&gt;, so in the interests of fair-n-balanced, here's how I did it on my machine.&lt;br /&gt;&lt;br /&gt;Since you can only have one version enabled as a module, the other must be used through CGI.  Ubuntu makes it stupidly simple to do this:  Both versions of PHP are distributed as CLI (command line) and CGI binaries, in addition to the apache module versions (which the package manager restricts to just one).&lt;br /&gt;&lt;br /&gt;So to ensure you have everything, execute:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ wajig installrs php4-cgi libapache2-mod-php5&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;... If by some chance you don't yet have wajig, get with it! &lt;br /&gt;&lt;code&gt;$ sudo apt-get install wajig&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Next, to enable me to have access either version easily, I added an entry to /etc/hosts:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;127.0.0.2        localhost4.local localhost4&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Then I went into /etc/apache2/sites-available and copied 000-default to 001-localhost4.conf.  I changed the NameVirtualHost and VirtualHost settings to use localhost4:80 and added the following lines:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Action php4-script /cgi-bin/php4&lt;br /&gt;AddHandler php4-script .php&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Then execute:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ sudo a2ensite 001-localhost4.conf&lt;br /&gt;$ sudo apache2ctl restart&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Now you should be able to access your site content via http://localhost and http://localhost4.&lt;br /&gt;&lt;br /&gt;To confirm that it's working, if you don't already have one, you can view the php config thusly:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ echo '&amp;lt;?php phpinfo(); ?&amp;gt;' &gt; /tmp/phpinfo.php&lt;br /&gt;$ sudo mv /tmp/phpinfo.php /var/www/phpinfo.php&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Voila!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-7306185144109625804?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/7306185144109625804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=7306185144109625804' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/7306185144109625804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/7306185144109625804'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2007/02/installing-php4-and-php5-concurrently.html' title='Installing PHP4 and PHP5 concurrently on Ubuntu and Apache2'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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-167116169299127812.post-3687315173136005963</id><published>2007-02-07T15:35:00.000-05:00</published><updated>2007-02-07T15:53:50.808-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='network'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='sysadmin'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Windows Event Monitoring through Syslog</title><content type='html'>There seem to be a &lt;a href="http://www.google.com/search?q=windows+syslog"&gt;number&lt;/a&gt; of &lt;a href="http://www.intersectalliance.com/projects/SnareWindows/"&gt;fancy&lt;/a&gt; ways to get Windows machines to send their Events to a syslog server, but for downright simplicity, I chose &lt;a href="https://engineering.purdue.edu/ECN/Resources/Documents/UNIX/evtsys"&gt;evtsys&lt;/a&gt; from the Purdue Engineering Computer Network.   To make it even easier, I added a silent installer on top of it using &lt;a href="http://nsis.sourceforge.net/"&gt;NSIS&lt;/a&gt; so we could deploy through our systems management tools.&lt;br /&gt;&lt;br /&gt;This version send logs to the host &lt;span style="font-style: italic;"&gt;loghost&lt;/span&gt;, so if it's not defined on your network, you could mess up your network, or at least the local host and segment.   You can easily modify the installer script to send to a different IP or hostname.  At the top of the script is a LOGHOST variable, just change the value of loghost to whatever is appropriate for your own network.  Then just recompile using NSIS.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Files:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Installer:  &lt;a target="_blank" href="http://nootech.net/resources/evtsys/evtsys-loghost-installer.exe"&gt;evtsys-loghost-installer.exe&lt;/a&gt;&lt;/li&gt;&lt;li&gt;NSIS script: &lt;a target="_blank" href="http://nootech.net/resources/evtsys/evtsys.nsi"&gt;evtsys.nsi&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/167116169299127812-3687315173136005963?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/3687315173136005963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=3687315173136005963' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/3687315173136005963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/3687315173136005963'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2007/02/windows-event-monitoring-through-syslog.html' title='Windows Event Monitoring through Syslog'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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-167116169299127812.post-7747899176246560350</id><published>2007-02-06T17:10:00.000-05:00</published><updated>2007-02-06T17:25:10.928-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zenoss'/><category scheme='http://www.blogger.com/atom/ns#' term='snmp'/><title type='text'>Zenoss &amp; Process Monitoring</title><content type='html'>I haven't yet figured out how to run custom commands/checks against monitored devices, but I did find the nice way Zenoss watches processes.  You can define any string or regex to watch for, and Zenoss will use SNMP to find it in the process list.  After the next modeling cycle, it will let you set triggers on the process to tell you if/when it restarts.&lt;br /&gt;&lt;br /&gt;To setup, just click on Processes in the left hand menu.  Create sub-folders for categorizing the processes.  I created entries for Web, Veritas, cfengine, etc.  Then from within the target folder (if applicable), just enter a process name into the text field.  You can then edit the entry by clicking on the name, then the Edit tab.  Modify the regex if necessary.  For instance, to monitor the different dhcpd processes, I changed it to "dhcpd3?" to make the 3 optional.  Since it's an open match, this also picks up VMware Server's vmnet-dhcpd processes.  if that's not what you want, you can set the regex to "^dhcpd3?".  &lt;br /&gt;&lt;br /&gt;Now they're being checked, but how to you view them?  Easy!   Just navigate to a device, then click the OS tab.  You'll now see a Processes section below the Interfaces. From here you can tailor the process check to the specific device.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-7747899176246560350?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/7747899176246560350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=7747899176246560350' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/7747899176246560350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/7747899176246560350'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2007/02/zenoss-process-monitoring.html' title='Zenoss &amp; Process Monitoring'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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-167116169299127812.post-5321077734943525799</id><published>2007-02-05T13:23:00.000-05:00</published><updated>2007-02-07T15:54:26.325-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='mongrel'/><category scheme='http://www.blogger.com/atom/ns#' term='sysadmin'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Rails &amp; Subdirectories</title><content type='html'>I spent part of this morning fighting with Rails, trying to get a quick app I wrote hosted below an existing app.  It should have been simple, but getting the various pieces cooperating took longer than it should have.  The solution is to use the --prefix argument to mongrel_rails.  Here's how I got it going:&lt;br /&gt;&lt;br /&gt;Scenario:&lt;br /&gt;RailsApp1 hosted as mysite.com/&lt;br /&gt;RailsApp2 hosted as mysite.com/myapp2&lt;br /&gt;Both apps served via Apache 2.0 + mongrel + pen on Debian Sarge&lt;br /&gt;&lt;br /&gt;Scripts:&lt;br /&gt;&lt;a target="_blank" href="http://nootech.net/resources/rails/mongrel-init.txt"&gt;/etc/init.d/mongrel&lt;/a&gt; (customized from Debian's skeleton)&lt;br /&gt;&lt;a target="_blank" href="http://nootech.net/resources/rails/myapp1.txt"&gt;/etc/mongrel/sites-enabled/myapp1&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" href="http://nootech.net/resources/rails/myapp2.txt"&gt;/etc/mongrel/sites-enabled/myapp2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;No need to modify the rails app itself.  Some messages I found suggested various mixes of modifying .htaccess and/or the relevant environment.rb files, but that didn't work for me.&lt;br /&gt;&lt;br /&gt;Apache Config:&lt;br /&gt;/etc/apache2/sites-enabled/vhost-mysite.conf:&lt;br /&gt;&lt;pre&gt;&lt;blockquote&gt;&lt;br /&gt;&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;&lt;br /&gt;ServerName mysite.com&lt;br /&gt;DocumentRoot /srv/www/myapp1&lt;br /&gt;Alias /myapp2 /srv/www/myapp2&lt;br /&gt;&lt;br /&gt;RewriteEngine On&lt;br /&gt;&lt;br /&gt;RewriteCond %{REQUEST_URI} ^/myapp2 [NC]&lt;br /&gt;RewriteRule ^/.* &lt;a class="linkification-ext" href="http://localhost:8850/" title="Linkification: http://localhost:8850%"&gt;http://localhost:8850%&lt;/a&gt;{REQUEST_URI} [P,QSA]&lt;br /&gt;&lt;br /&gt;RewriteRule .* &lt;a class="linkification-ext" href="http://localhost:8800/" title="Linkification: http://localhost:8800%"&gt;http://localhost:8800%&lt;/a&gt;{REQUEST_URI} [P,QSA]&lt;br /&gt;&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-5321077734943525799?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/5321077734943525799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=5321077734943525799' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/5321077734943525799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/5321077734943525799'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2007/02/rails-subdirectories.html' title='Rails &amp; Subdirectories'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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-167116169299127812.post-841580880698535591</id><published>2007-01-31T15:59:00.000-05:00</published><updated>2007-01-31T16:15:40.156-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='network'/><category scheme='http://www.blogger.com/atom/ns#' term='zenoss'/><title type='text'>Zenoss data gathering</title><content type='html'>Today I figured out how to check the various stats that are gathered by Zenoss.  Took me a little while to figure out just what it does out of the box, how to turn on the rest, and where to look to see the pretty graphs.&lt;br /&gt;&lt;br /&gt;First off, I kept getting errors in different logs saying "Column count doesn't match value count at row 1".  This even came up when I tried to delete some auto-discovered workstations that I didn't want monitored.  Turns out that some MySQL triggers needed to be reset, despite some posts that the 1.1 release was not affected (i blew away my install and started fresh with 1.1).  So I just ran the included &lt;span style="font-weight: bold;"&gt;zenmigrate&lt;/span&gt; script, and it took care of everything.   And thus all the errors went away!&lt;br /&gt;&lt;br /&gt;Out of the box, if a device is discovered via SNMP, Zenoss will setup statistic gathering for ethernet and (if available) host resources such as disk, cpu, etc.  Strangly it didn't pick up the serial interfaces on the Cisco devices, even though it uses all the same OIDs.   The reason is that the preconfigured checks look for an interface name of &lt;span style="font-style: italic;"&gt;ethernetCsmacd&lt;/span&gt;.  The fix is easy: Just copy the performance template and name for the interface needed, in this case &lt;span style="font-style: italic;"&gt;propPointToPointSerial&lt;/span&gt;.  Zenoss then starts gathering the necessary stats.&lt;br /&gt;&lt;br /&gt;As for where to view the information, there is not (by default) a single page containing all the graphs, such as you can get with Cacti.  For interface graphs, you have to navigate to the device you want, then click the OS tab, then click the name under the Interfaces section.   All other stats (memory, load, etc) are access through the Perf tab.&lt;br /&gt;&lt;br /&gt;Next up will be gathering stats on a custom command ... Zenoss can leverage (and even includes many of) the Nagios plugins, so I want to setup a check of the ping latencies around our network, using check_fping.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-841580880698535591?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/841580880698535591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=841580880698535591' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/841580880698535591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/841580880698535591'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2007/01/zenoss-data-gathering.html' title='Zenoss data gathering'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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-167116169299127812.post-345824547277465376</id><published>2007-01-29T14:58:00.000-05:00</published><updated>2007-01-29T15:08:21.674-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='zenoss'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Zenoss 1.1 and setuptools</title><content type='html'>&lt;a href="http://zenoss.com/"&gt;Zenoss&lt;/a&gt; &lt;a href="http://zenoss.com/about/press_releases/2007-01-29_zenoss1_1_release"&gt;announced the release of version 1.1&lt;/a&gt; today.  Of course there'd be a new version just 3 days after I installed it!   Looks to be very easy: just download the tarball, unpack, and run install.sh.  But when I tried that, it died on the version of the python setuptools on the system.  The Sarge backports repository only has 0.6a9-0bpo1, while Zenoss 1.1 requires 0.6c1.&lt;br /&gt;&lt;br /&gt;Luckily, the Python community makes it easy to upgrade, even if it means bypassing Debian's package manager for now.   Just download the latest version of &lt;a href="http://peak.telecommunity.com/dist/ez_setup.py"&gt;ez_setup.py&lt;/a&gt; (currently 0.6c5) from the &lt;a href="http://peak.telecommunity.com/DevCenter/EasyInstall#installing-easy-install"&gt;PEAK page&lt;/a&gt;, run it, and everything is happy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-345824547277465376?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/345824547277465376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=345824547277465376' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/345824547277465376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/345824547277465376'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2007/01/zenoss-11-and-setuptools.html' title='Zenoss 1.1 and setuptools'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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-167116169299127812.post-8083452964402626551</id><published>2007-01-26T15:43:00.000-05:00</published><updated>2007-01-29T15:08:54.444-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='network'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='zenoss'/><category scheme='http://www.blogger.com/atom/ns#' term='vmware'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><category scheme='http://www.blogger.com/atom/ns#' term='zope'/><title type='text'>Zenoss</title><content type='html'>I may have finally found the perfect monitor solution for my network: &lt;a href="http://www.zenoss.com/"&gt;Zenoss&lt;/a&gt;.  I have been using Nagios + Cacti + Smokeping for quite a while now.  It works, but it's not integrated, and for many services, I'm running 2-3 checks.  Running those every 5-10 minutes generates a tremendous amount of traffic (during the last 2 weeks, the monitor station has caused 20% of all traffic crossing the primary firewall!).   The closest all-in-one I'd found previously was OpenNMS,  which is so difficult to really understand and manage well, and so didn't fit my needs.  I'd given some thought to rolling my own in Ruby, but just don't have the time for such an undertaking.&lt;br /&gt;&lt;br /&gt;So while browsing the &lt;a href="http://www.rpath.org/rbuilder"&gt;rPath/rBuilder&lt;/a&gt; site this morning, I discovered Zenoss.  It's Zope-based, which I find a bit interesting.  But from what I've seen in the 30 minutes I've had it running, the developers are right on with what I've been looking for.  It has auto-discovery support, placing everything into a "/Discovered" group if it can't pick the right group on its own (the firewall was placed into the "/Network/Routers" group since it was part of the discovery chain).  But it is smart enough to correlate different IPs to a single device, which OpenNMS can't do.  It also supports Nagios plugins (though only via ssh and not nrpe), so I can leverage that investment while I evaluate the Zenoss way of checking.&lt;br /&gt;&lt;br /&gt;There's also a built-in syslog catcher, so it can correlate log events to devices, which could be another huge time saver.  And it has asset/inventory management so I don't need to keep that data separately either.  What can't this puppy do?!&lt;br /&gt;&lt;br /&gt;You can install from source or RPM, and there's a vmware image available too.  It requires Python 2.3.5+ and MySQL 5.0.22+.  Since I wanted to run on my Debian Sarge monitor station (which already has access to all the devices to manage), I had to upgrade the DB.  Easy enough with the backports.  The only trick I ran into there is that the install process requires port 8100 be available.  You can change after install, but I couldn't find a way to change prior.  The installer doesn't notice if the port is already in use, it just silently fails, and so when starting the Zope DB setup, it gets in a loop of printing "." (dots).  Finally realized I had to shut down a Mongrel-run Rails app to get it going, and it worked perfectly.  (&lt;a href="http://dev.zenoss.org/trac/ticket/933"&gt;Bug #933&lt;/a&gt; has been filed.)&lt;br /&gt;&lt;br /&gt;Stay tuned for more, as I will be playing with this ALOT over the next few weeks!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-8083452964402626551?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/8083452964402626551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=8083452964402626551' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/8083452964402626551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/8083452964402626551'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2007/01/zenoss.html' title='Zenoss'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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-167116169299127812.post-3042397200810178714</id><published>2007-01-09T23:00:00.000-05:00</published><updated>2007-01-09T23:07:15.167-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Browser Launcher</title><content type='html'>This is something I discovered quite a while ago, but re-discovered a bit tonight.  I always love the situations where you want to do something as stupidly simple as launch the user's default browser, only to discover that it's really not all that simple from a cross-platform programming point-of-view.   After a few hacks of my own for a particular project, I came across the BrowserLauncher2 project on SourceForge.   It easily handles all the "let's try it this way .... no?  how about this way .... no again?  ok what about this ... ?", all in a single method call.  It seems to be stuck in 1.0RC? status, but I haven't had any issues with the code as-is.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;br /&gt;http://sourceforge.net/projects/browserlaunch2/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-3042397200810178714?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/3042397200810178714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=3042397200810178714' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/3042397200810178714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/3042397200810178714'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2007/01/browser-launcher.html' title='Browser Launcher'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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-167116169299127812.post-7324549553298434099</id><published>2006-12-19T09:36:00.000-05:00</published><updated>2007-01-09T23:00:47.250-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='funny'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>More Bad Programming from Microsoft</title><content type='html'>Went to join a LiveMeeting demo for a product my company is evaluating, and wanted to view on my Mac so I could keep working on the laptop.  Of course I opened with Firefox, and it got most of the way through the initial registration step, then gave yet another useless error:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_cIvXh_C5prE/RYgPgCR3uuI/AAAAAAAAAAU/iFfN6loQwIw/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_cIvXh_C5prE/RYgPgCR3uuI/AAAAAAAAAAU/iFfN6loQwIw/s400/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5010271628491733730" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Of course the stupid thing is that the "click here" linked to a javascript.reload() command.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-7324549553298434099?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/7324549553298434099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=7324549553298434099' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/7324549553298434099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/7324549553298434099'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2006/12/more-microsoft-stupidity.html' title='More Bad Programming from Microsoft'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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://2.bp.blogspot.com/_cIvXh_C5prE/RYgPgCR3uuI/AAAAAAAAAAU/iFfN6loQwIw/s72-c/Picture+2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-167116169299127812.post-8098498484351723495</id><published>2006-11-19T19:56:00.000-05:00</published><updated>2006-11-19T21:54:13.391-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='help'/><category scheme='http://www.blogger.com/atom/ns#' term='network'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>QUNU</title><content type='html'>I've started helping out on &lt;a href="http://www.qunu.com"&gt;Qunu&lt;/a&gt;.  It's a great little service that matches experts with help-seekers, using IM for real-time chat instead of email, providing a much quicker and better solution to their problems than Usenet or Googling could.  I just added their bot to my chat client (kopete, if you're curious), and can make myself available whenever I have downtime or a slow period.  If someone needs help in an area that matches something in my profile, then Qunu asks if I want to help.  Usually I do, of course, though a couple of times I've had to decline while on a conference call or such.&lt;br /&gt;&lt;br /&gt;It's fun to help with users' problems.  By this point, I've seen and fixed so much, at least with the common problems, so it's a good feeling when I can help others benefit from that experience.&lt;br /&gt;&lt;br /&gt;Check it out at &lt;a href="http://www.qunu.com"&gt;http://www.qunu.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-8098498484351723495?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/8098498484351723495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=8098498484351723495' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/8098498484351723495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/8098498484351723495'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2006/11/qunu.html' title='QUNU'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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-167116169299127812.post-5278115237548720181</id><published>2006-11-17T14:49:00.000-05:00</published><updated>2006-11-17T15:34:04.138-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Restore Sound after suspend</title><content type='html'>The sound on my laptop has always been muted after a suspend/resume cycle.   I had hope Edgy would resolve that, but it didn't.  The various posts (&lt;a href="http://ubuntuforums.org/archive/index.php/t-24430.html"&gt;1&lt;/a&gt;, &lt;a href="http://theorie.physik.uni-wuerzburg.de/%7Earwagner/computer/T41p/#Sound"&gt;2&lt;/a&gt;) I could find on the issue suggested a combination of toggling KDE's KMix setting "Restore volumes on login" (which would logically only apply on startup, anyway) and the alsa-utils save/restore.   Nothing ever worked, so I had to manually reactivate the sound by both unmuting the channels in KMix and setting the levels to something non-zero.&lt;br /&gt;&lt;br /&gt;After a few weeks of this, I realized I need to automate the reset.  After digging around a bit, I discovered that the alsa-utils init script has a reset stanza that does just this.  The resume script only called a restart, which reloads the driver, but it doesn't reset the levels.  So I just updated /etc/acpi/resume.d/67-sound.sh to look like:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;# Get sound back&lt;br /&gt;if [ -x /etc/init.d/alsa-utils ]; then&lt;br /&gt;  /etc/init.d/alsa-utils restart&lt;br /&gt;  /etc/init.d/alsa-utils reset&lt;br /&gt;fi&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;and now my sounds comes back perfectly on restore!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-5278115237548720181?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/5278115237548720181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=5278115237548720181' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/5278115237548720181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/5278115237548720181'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2006/11/restore-sound-after-suspend.html' title='Restore Sound after suspend'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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-167116169299127812.post-3284423207589820785</id><published>2006-11-16T22:59:00.000-05:00</published><updated>2006-11-16T23:29:31.429-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Continuous Integration Systems</title><content type='html'>I've been trying to implement a continuous integration server for one of my bigger projects.  &lt;a href="http://luntbuild.javaforge.com/"&gt;Luntbuild&lt;/a&gt; has a lot of great features, so I've been working with that.  But I keep running into stupid design flaws that always make me reconsider.  For instance, Luntbuild supports a very sophisticated variable system that can be used in numerous ways.  One helpful use is to refer to the previous successful build.  However, I'm passing that variable through the environment for a CommandBuilder, and if there are no builds (such as after I purge them all to recover disk space), that variable is null and blows up the build!  No warnings, no empty string, but an uncaptured Null exception.  How silly is that!!&lt;br /&gt;&lt;br /&gt;So I surfed around, and found out &lt;a href="http://damagecontrol.codehaus.org/"&gt;DamageControl&lt;/a&gt; has gone into hibernation.  It's ruby-based, and has all kinds of great features, but the developer apparently has no time so he's let it dangle.  I don't have time to dive into it, or I might give it a go.  I'd certainly do that before diving into trying to fix Luntbuild's problem....&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;My surfing also led me to a &lt;a href="http://www.javaworld.com/javaworld/jw-11-2006/jw-1101-ci.html"&gt;recent article&lt;/a&gt; comparing some of the java-based tools.  Luntbuild got some good praise out of it, and certainly looked better than CruiseControl or Continuum.   CruiseControl is woefully out of date:  all configuration is done by hand via a single XML file, or using a middle-quality Swing program, and the Web UI amounts to a single status page.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://maven.apache.org/continuum/"&gt;Continuum&lt;/a&gt; looks nice, and is backed by the Apache folks.  But it's much more restrictive than Luntbuild.  Top-level projects are defined as an Ant, Maven 1/2, or shell project, but does not allow mixing of types.  Luntbuild allows mixing, so I have projects that use a combination of Ant  and shell scripts, which is very handy.&lt;br /&gt;&lt;br /&gt;The article also mentioned &lt;a href="https://hudson.dev.java.net/"&gt;Hudson&lt;/a&gt;, which I hadn't seen before.  Looks promising, though it's still very early in its life.  Will have to keep an eye on it thought .....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-3284423207589820785?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/3284423207589820785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=3284423207589820785' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/3284423207589820785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/3284423207589820785'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2006/11/continuous-integration-servers.html' title='Continuous Integration Systems'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-167116169299127812.post-3970147549502321253</id><published>2006-11-09T09:39:00.000-05:00</published><updated>2006-11-17T15:49:42.432-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cisco'/><category scheme='http://www.blogger.com/atom/ns#' term='routing'/><category scheme='http://www.blogger.com/atom/ns#' term='network'/><category scheme='http://www.blogger.com/atom/ns#' term='wan'/><category scheme='http://www.blogger.com/atom/ns#' term='mpls'/><title type='text'>Simple MPLS setup</title><content type='html'>We started migrating from Frame Relay to MPLS this week.  Decided to go with BGP routing during the turn-up, which sounded like it would be the easiest way.  With traditional static routing, (I was told) our provider has to know about our network in order to get the packets to the right segment.  With BGP, we manage our own routes and the provider's core doesn't have to be involved.  Sounds perfect.  I'm not a hardcore routing junkie, so it took a bit more effort than expected.  But I did get it all figured out, and hope this will help someone else in the future.&lt;br /&gt;&lt;br /&gt;The basics of the network are that we have multiple offices connected via MPLS to our data center, which also provides Internet access for everyone.  This lets us centralize and better manage the firewall and security policies.  So each office and the data center has a Cisco 28xx router with a full T1 circuit.  The current 12.4 GD and LD firmwares for the 28xx from Cisco don't include BGP capability, so we had to deploy with an ED release. We setup BGP routing on each router, using a single AS (autonomous system) number, for simplicity.  The data center also has a DMZ network that is on a separate LAN segment from the WAN router.  The serial IPs were assigned by our MPLS provider, and loopback IPs were assigned for convenience.&lt;br /&gt;&lt;br /&gt;&lt;table border="1" cellpadding="1" cellspacing="0"&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;br /&gt;Router A&lt;br /&gt;data center&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;br /&gt;Router B&lt;br /&gt;office #1&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;br /&gt;Router C&lt;br /&gt;office #2&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;&lt;br /&gt;Serial0/0/0&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;1.1.1.2/30&lt;/td&gt;&lt;br /&gt;&lt;td&gt;1.1.2.2/30&lt;/td&gt;&lt;br /&gt;&lt;td&gt;1.1.3.2/30&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;&lt;br /&gt;FastEthernet0/0&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;10.1.1.1/24&lt;/td&gt;&lt;br /&gt;&lt;td&gt;10.1.2.1/24&lt;/td&gt;&lt;br /&gt;&lt;td&gt;10.1.3.1/24&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;&lt;br /&gt;Loopback0&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;10.10.10.1/32&lt;/td&gt;&lt;br /&gt;&lt;td&gt;10.10.10.2/32&lt;/td&gt;&lt;br /&gt;&lt;td&gt;10.10.10.3/32&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;&lt;br /&gt;DMZ Network&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;10.10.1.0/24&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;So the BGP configuration for each router looks like this:&lt;br /&gt;&lt;br /&gt;Router A (data center)&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;router bgp 65000&lt;br /&gt; no synchronization&lt;br /&gt; bgp log-neighbor-changes&lt;br /&gt; network 10.1.1.0 mask 255.255.255.0&lt;br /&gt; network 10.10.1.0 mask 255.255.255.0&lt;br /&gt; network 10.10.10.1 mask 255.255.255.255&lt;br /&gt; neighbor 1.1.1.1 remote-as 100&lt;br /&gt; neighbor 1.1.1.1 default-originate&lt;br /&gt; no auto-summary&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Router B (office #1)&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;router bgp 65000&lt;br /&gt; no synchronization&lt;br /&gt; bgp log-neighbor-changes&lt;br /&gt; network 10.1.2.0 mask 255.255.255.0&lt;br /&gt; network 10.10.10.2 mask 255.255.255.255&lt;br /&gt; neighbor 1.1.2.1 remote-as 100&lt;br /&gt; no auto-summary&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Router C (office #2)&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;router bgp 65000&lt;br /&gt; no synchronization&lt;br /&gt; bgp log-neighbor-changes&lt;br /&gt; network 10.1.3.0 mask 255.255.255.0&lt;br /&gt; network 10.10.10.3 mask 255.255.255.255&lt;br /&gt; neighbor 1.1.3.1 remote-as 100&lt;br /&gt; no auto-summary&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-3970147549502321253?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/3970147549502321253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=3970147549502321253' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/3970147549502321253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/3970147549502321253'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2006/11/simple-mpls-setup.html' title='Simple MPLS setup'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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-167116169299127812.post-6243267770185338663</id><published>2006-11-03T12:14:00.000-05:00</published><updated>2006-11-09T12:30:44.626-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='vmware'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>VMWare on Edgy working</title><content type='html'>OK, so my problem isn't unique:  http://www.vmware.com/community/thread.jspa?messageID=470495&lt;br /&gt;&lt;br /&gt;But at least there's an easy workaround until Edgy &amp;amp; VMware get back on the same page.  No need for the vmware-any-any patch, and it works with Workstations 5.5.2 and Server 1.0.1.  Just prepend the following LD_PRELOAD setting to the command invocation:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;blockquote&gt;# LD_PRELOAD=/usr/lib/libdbus-1.so.3 vmware&lt;/blockquote&gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-6243267770185338663?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/6243267770185338663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=6243267770185338663' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/6243267770185338663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/6243267770185338663'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2006/11/ok-so-my-problem-isnt-unique-httpwww.html' title='VMWare on Edgy working'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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-167116169299127812.post-1816691625691330760</id><published>2006-11-01T00:13:00.000-05:00</published><updated>2006-11-10T17:17:40.176-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='vmware'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Upgraded Laptop from Dapper to Edgy</title><content type='html'>Took the plunge and upgraded the laptop just 2 days after Edgy was released.  Between my DSL acting slow and the servers likely getting pounded, it took a full day to download the 1.2GB of packages.  Eventually got it all upgraded, though, and all was good in Ubuntu land .... except for Vmware Workstation.   The modules recompile and load fine, but the program hangs on startup.  No useful info via strace.&lt;br /&gt;&lt;br /&gt;Just discovered that vmware-server-console has the same issue.....&lt;br /&gt;&lt;br /&gt;Looks like the bundled libraries with the VMware products are somehow incompatible with the new versions in Edgy.   Bummer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-1816691625691330760?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/1816691625691330760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=1816691625691330760' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/1816691625691330760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/1816691625691330760'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2006/10/took-plunge-and-upgraded-laptop-just-2.html' title='Upgraded Laptop from Dapper to Edgy'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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-167116169299127812.post-1499378016796856674</id><published>2006-10-30T09:36:00.000-05:00</published><updated>2006-11-17T15:53:42.013-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mp3'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='id3'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>MP3 renumbering script</title><content type='html'>iTunes is decent enough, primarily for keeping up with podcasts on the ipod, but it's terrible at mass renaming/renumbering. It doesn't come up often, but just enough. I have plenty of multi-disc albums (audio books, mainly), only some of which are in CDDB. So I end up with some tracks with iTunes' default "Track NN" and others with "N-MM" or "Nm", where m/M could be alpha or numeric. Bothers the TypeA in me! I tried MediaMonkey, but it doesn't seem to recognize the disc number (ID3 frame: TPOS), otherwise it appears to have a decent scripting ability.&lt;br /&gt;&lt;br /&gt;So Perl to the rescue!  (Ruby would have been easier, but the current ID3 library only supports read-write for v1.1 tags).  An hour later (mostly due to remembering the syntax), I had the following code.  (&lt;a target="_blank" href="http://whatnot.org/code/renumber.pl.txt"&gt;Downloadable code&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/perl -w&lt;br /&gt;&lt;br /&gt;# use module&lt;br /&gt;use strict;&lt;br /&gt;use MP3::Tag;&lt;br /&gt;use File::Glob ':glob';&lt;br /&gt;&lt;br /&gt;my $dir = shift || ".";&lt;br /&gt;die "Invalid directory specified.\n" unless -d $dir;&lt;br /&gt;&lt;br /&gt;chdir $dir;&lt;br /&gt;my @files = bsd_glob('*.mp3');&lt;br /&gt;&lt;br /&gt;foreach my $filename (@files)&lt;br /&gt;{&lt;br /&gt;  print "Filename: $filename\n";&lt;br /&gt;&lt;br /&gt;  # create new MP3-Tag object&lt;br /&gt;  my $mp3 = MP3::Tag-&gt;new($filename);&lt;br /&gt;&lt;br /&gt;  # get tag information&lt;br /&gt;  $mp3-&gt;get_tags();&lt;br /&gt;&lt;br /&gt;  # if ID3v2 tags exists&lt;br /&gt;  if (exists $mp3-&gt;{ID3v2})&lt;br /&gt;  {&lt;br /&gt;      # get a list of frames as a hash reference&lt;br /&gt;      my $id3 = $mp3-&gt;{ID3v2};&lt;br /&gt;      my $frames = $id3-&gt;get_frame_ids();&lt;br /&gt;&lt;br /&gt;      print "Title: " . $id3-&gt;get_frame('TIT2') . "\n";&lt;br /&gt;      my $disc =  $id3-&gt;get_frame('TPOS');&lt;br /&gt;      my ($discno,$dtotal) = split(/\//, $disc);&lt;br /&gt;      print "Disc: $disc\n";&lt;br /&gt;      my $track = $id3-&gt;get_frame('TRCK');&lt;br /&gt;      my ($trackno,$ttotal) = split(/\//, $track);&lt;br /&gt;      print "Track: $track\n";&lt;br /&gt;&lt;br /&gt;      my $maxdisclen = length($dtotal);&lt;br /&gt;      my $maxtracklen = length($ttotal);&lt;br /&gt;      my $newtitle = sprintf "%.*u-%.*u", &lt;br /&gt;                             $maxdisclen, $discno, &lt;br /&gt;                             $maxtracklen, $trackno;&lt;br /&gt;      print "New Title: $newtitle\n";&lt;br /&gt;      $id3-&gt;change_frame('TIT2', $newtitle);&lt;br /&gt;      $id3-&gt;write_tag();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  # clean up&lt;br /&gt;  $mp3-&gt;close();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;exit 0;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/167116169299127812-1499378016796856674?l=nootech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nootech.blogspot.com/feeds/1499378016796856674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=167116169299127812&amp;postID=1499378016796856674' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/1499378016796856674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/167116169299127812/posts/default/1499378016796856674'/><link rel='alternate' type='text/html' href='http://nootech.blogspot.com/2006/11/itunes-is-decent-enough-primarily-for.html' title='MP3 renumbering script'/><author><name>ghaygood</name><uri>http://www.blogger.com/profile/02370737265021406434</uri><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></feed>
