<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>AlexCline.net &#187; Software</title>
	<atom:link href="http://alexcline.net/category/technology/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://alexcline.net</link>
	<description>The musings of a geek, cyclist, cinephile, yogi, diver, philosopher and gamer.</description>
	<lastBuildDate>Wed, 09 May 2012 13:55:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Why Nginx+Passenger is No-Go in a Secure Environment</title>
		<link>http://alexcline.net/2012/05/09/why-nginxpassenger-is-no-go-in-a-secure-environment/</link>
		<comments>http://alexcline.net/2012/05/09/why-nginxpassenger-is-no-go-in-a-secure-environment/#comments</comments>
		<pubDate>Wed, 09 May 2012 13:53:47 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Interesting Links]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://alexcline.net/?p=540</guid>
		<description><![CDATA[I&#8217;ve heard a lot of good things about Nginx. Shawn Wall mentioned how much he likes using it and how easy it is to configure. My experience with it has only been tangential at best. I&#8217;ve heard good things about it (lightweight, performant and scalable) on Hacker News and /r/programming, so when it came time [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve heard a lot of good things about <a href="http://nginx.org">Nginx</a>.  <a href="http://www.shawnwall.com/">Shawn Wall</a> mentioned how much he likes using it and how easy it is to configure.  My experience with it has only been tangential at best.  I&#8217;ve heard good things about it (lightweight, performant and scalable) on <a href="http://news.ycombinator.com/">Hacker News</a> and <a href="http://www.reddit.com/r/programming">/r/programming</a>, so when it came time to deploy a ruby application I&#8217;ve been developing, I thought I would give it a whirl.</p>
<p>There are many competing mantras about how to best deploy a ruby web application into a &#8216;production&#8217; state.  Some people just say, &#8216;start up your framework&#8217;s WEBrick server on 80 and go for it!&#8217;  Others, like myself want more stability and security &#8212; for that we turn to <a href="http://www.modrails.com/">Passenger</a>.  Passenger provides support for Rackable ruby apps on Apache and Nginx.</p>
<p>I&#8217;ve always liked the Apache+Passenger configuration when installing on CentOS &#8212; I can schedule regular yum updates to upgrade Apache and gem updates to upgrade Passenger.  This way, I know that I&#8217;ve got the latest and most secure versions running on my systems.  With monitoring and testing, I know if something breaks and can fix it promptly.</p>
<p>After setting up my fresh CentOS 6 machine, I found the <a href="http://wiki.nginx.org/Install">Nginx yum repos</a> which will happily keep Nginx updated.  Great.  I then went about doing the usual rvm+ruby+gem+passenger dance.  I ran <code>passenger-install-nginx-module</code> to initiate the passenger+nginx config and ran into this:</p>
<pre class="brush: plain; title: ; notranslate">Nginx doesn't support loadable modules such as some other web servers do,
so in order to install Nginx with Passenger support, it must be recompiled.

Do you want this installer to download, compile and install Nginx for you?

 1. Yes: download, compile and install Nginx for me. (recommended)
    The easiest way to get started. A stock Nginx 1.0.15 with Passenger
    support, but with no other additional third party modules, will be
    installed for you to a directory of your choice.

 2. No: I want to customize my Nginx installation. (for advanced users)
    Choose this if you want to compile Nginx with more third party modules
    besides Passenger, or if you need to pass additional options to Nginx's
    'configure' script. This installer will  1) ask you for the location of
    the Nginx source code,  2) run the 'configure' script according to your
    instructions, and  3) run 'make install'.

Whichever you choose, if you already have an existing Nginx configuration file,
then it will be preserved.

Enter your choice (1 or 2) or press Ctrl-C to abort: </pre>
<p><em>&#8216;Doesn&#8217;t support loadable modules&#8217;&#8230; &#8216;stock Nginx 1.0.15&#8242;&#8230; &#8216;compile&#8217;.</em>  <strong>Nope.</strong></p>
<p>So&#8230; I can allow passenger to build itself into an old version of nginx (1.0.15) or I can download the Nginx source and recompile it with Passenger support.  This is where Nginx lost me.</p>
<p>If I want to run a ruby app through Nginx using Passenger (or any other module that integrates Ruby support) I&#8217;ll have to recompile Nginx every time there&#8217;s an update to either system.  Judging by the release frequency of Nginx, that requires recompiling at least once per month.  Or, of course, I could just let my system languish and not upgrade regularly.  That&#8217;ll only leave me open to <a href="http://nginx.org/en/security_advisories.html">vulnerabilities</a> in either system, which is not cool.</p>
<p>So I&#8217;ll return to Apache+Passenger which supports dynamic module loading and independently updating components.  A secure system is a happy system.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexcline.net/2012/05/09/why-nginxpassenger-is-no-go-in-a-secure-environment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AtMail Open Authentication Fix</title>
		<link>http://alexcline.net/2012/04/18/atmail-open-authentication-fix/</link>
		<comments>http://alexcline.net/2012/04/18/atmail-open-authentication-fix/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 03:41:40 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Randomness]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[AtMail]]></category>
		<category><![CDATA[Authentication]]></category>
		<category><![CDATA[Email]]></category>
		<category><![CDATA[Hostname]]></category>
		<category><![CDATA[IMAP]]></category>
		<category><![CDATA[Username]]></category>

		<guid isPermaLink="false">http://alexcline.net/?p=537</guid>
		<description><![CDATA[I&#8217;ve been running AtMail Open for my personal email for a while now. I recently upgraded to the latest version 1.05 for the security updates and ran into a bit of a problem after completing the installation. I likely had to fix this when I first installed AtMail way back in the day. When I [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been running <a href="http://atmail.org">AtMail Open</a> for my personal email for a while now.  I recently upgraded to the latest version 1.05 for the security updates and ran into a bit of a problem after completing the installation.  I likely had to fix this when I first installed AtMail way back in the day.</p>
<p>When I would try to login, it would return an error saying I specified invalid credentials.  Looking at my maillog I saw the connection failing with the username &#8220;user@hostname.tld&#8221;.  My mailserver is configured to use local accounts which means that authentication is done without having to specify the hostname in the address.  Checking my other mail clients confirmed that I only have to specify my username to authenticate.  AtMail uses the combination of username and hostname when it attempts to authenticate.</p>
<p>I dug around the install for a bit and found a little hidden setting in [AtMailHome]/libs/Atmail/Config.php.  To configure AtMail to only send the username to the mailserver for authentication, change this line:</p>
<pre class="brush: plain; title: ; notranslate">'mailserver_auth' =&gt; '1',</pre>
<p> to this
<pre class="brush: plain; title: ; notranslate">'mailserver_auth' =&gt; '0',</pre>
<p>.</p>
<p>A lovely undocumented setting.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexcline.net/2012/04/18/atmail-open-authentication-fix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Advanced Firewall Manipulation Using Puppet</title>
		<link>http://alexcline.net/2012/03/16/advanced-firewall-manipulation-using-puppet/</link>
		<comments>http://alexcline.net/2012/03/16/advanced-firewall-manipulation-using-puppet/#comments</comments>
		<pubDate>Fri, 16 Mar 2012 19:55:16 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://alexcline.net/?p=529</guid>
		<description><![CDATA[When using Puppet for systems configuration management, the new Puppet-Firewall module is really useful for managing iptables rules. Sometimes though, there are some tricks that are required to get the firewall to behave properly. Here are a list of the tricks I&#8217;ve learned so far: Firewall rule numbering: The firewall documentation shows that in order [...]]]></description>
			<content:encoded><![CDATA[<p>When using <a href="http://puppetlabs.com">Puppet</a> for systems configuration management, the new <a href="https://github.com/puppetlabs/puppetlabs-firewall">Puppet-Firewall</a> module is really useful for managing iptables rules.  Sometimes though, there are some tricks that are required to get the firewall to behave properly.</p>
<p>Here are a list of the tricks I&#8217;ve learned so far:</p>
<ol>
<li><strong>Firewall rule numbering:</strong>  The firewall documentation shows that in order to enforce rule ordering, you have to preface your declaration names with a number (e.g. 001, 002, 003, &#8230;, 999, etc).  Since my firewall rules selectively allow a few ports to be open and deny all other requests, it is easier to number the declarations based off the port they declare.
<pre class="brush: plain; title: ; notranslate">firewall { &quot;00000 accept icmp&quot;:
  proto =&gt; &quot;icmp&quot;,
  action =&gt; &quot;accept&quot;
}

firewall { &quot;00001 accept established, related&quot;:
  state  =&gt; ['ESTABLISHED', 'RELATED'],
  proto  =&gt; 'all',
  action =&gt; 'accept',
}

firewall { &quot;00002 accept localhost&quot;:
  source =&gt; '127.0.0.1',
  proto  =&gt; 'all',
  action =&gt; 'accept',
}

firewall { &quot;00080 http on port 80&quot;:
  proto =&gt; &quot;tcp&quot;,
  dport =&gt; &quot;80&quot;,
  action =&gt; &quot;accept&quot;
}

firewall { &quot;65536 drop incoming packets&quot;:
  action =&gt; 'drop'
}</pre>
<p>This way the rules are loaded in port order.  The first rules that setup iptables are loaded in the lowest numbers which are reserved ports and won&#8217;t likely be used by me anyway.  The last rules are numbered after 65535 &#8212; the last port.</li>
<li><strong>Auto-save configuration:</strong>  I&#8217;ve also found it useful to configured every declaration to notify puppet that it should save the iptables configuration.  This way, when one rule gets changed, it automatically saves the new config.
<pre class="brush: plain; title: ; notranslate">firewall { &quot;00080 http on port 80&quot;:
  proto =&gt; &quot;tcp&quot;,
  dport =&gt; &quot;80&quot;,
  action =&gt; &quot;accept&quot;,
  notify =&gt; Exec[&quot;iptables-save&quot;]
}

exec { &quot;iptables-save&quot;:
  command =&gt; $operatingsystem ? {
    &quot;debian&quot; =&gt; &quot;/sbin/iptables-save &gt; /etc/iptables/rules.v4&quot;,
    /(RedHat|CentOS)/ =&gt; &quot;/sbin/iptables-save &gt; /etc/sysconfig/iptables&quot;,
  },
  refreshonly =&gt; true,
  notify =&gt; Service[&quot;iptables&quot;],
}</pre>
</li>
<li><strong>Overriding declared rules:</strong>  Probably the most useful thing I figured out was how to remove firewall rules from the saved ruleset.  For example, by default my httpd rule allows requests from any IP on the Internet.  There is one server that should only allow requests from specific IP addresses.  To configure this, I have to remove the default rule and add in new rules for port 80 in iptables.  This is done using inheritence.
<pre class="brush: plain; title: ; notranslate">class special-http-rules inherits httpd {

  Firewall[&quot;00080 http on port 80&quot;] { ensure =&gt; absent }

  firewall { &quot;00080 http on port 80 from special server (123.45.67.89)&quot;:
    proto =&gt; &quot;tcp&quot;,
    dport =&gt; &quot;80&quot;,
    source =&gt; '123.45.67.89',
    action =&gt; &quot;accept&quot;,
    notify =&gt; Exec[&quot;iptables-save&quot;]
  }
}</pre>
<p>Using the <code>inherits</code> keyword on the parent class, I can call the &#8220;00080 http on port 80&#8243; firewall declaration and ensure that it is <em>absent</em> from the rules applied to the node.  Any server that I assign the &#8220;special-http-rules&#8221; class to will only respond to requests from the special server on port 80.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://alexcline.net/2012/03/16/advanced-firewall-manipulation-using-puppet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Expand LVM in CentOS 6 Running on vCenter</title>
		<link>http://alexcline.net/2012/02/29/expand-lvm-in-centos-6-running-on-vcenter/</link>
		<comments>http://alexcline.net/2012/02/29/expand-lvm-in-centos-6-running-on-vcenter/#comments</comments>
		<pubDate>Wed, 29 Feb 2012 22:03:41 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://alexcline.net/?p=518</guid>
		<description><![CDATA[This is an update to the post I created back in June of 2011 on how to expand an LVM in CentOS 5.6 running on vCenter. CentOS 6 has made some changes to the way the LVMs are setup so I thought I would update this document accordingly. Using your vSphere client, increase the size [...]]]></description>
			<content:encoded><![CDATA[<p>This is an update to the post I created back in June of 2011 on <a href="http://alexcline.net/2011/06/06/expand-centos-5-6-lvm-running-on-vsphere/" title="Expand CentOS 5.6 LVM running on vSphere.">how to expand an LVM in CentOS 5.6 running on vCenter.</a>  CentOS 6 has made some changes to the way the LVMs are setup so I thought I would update this document accordingly.</p>
<ol>
<li>Using your vSphere client, increase the size of the disk attached to the VM.</li>
<li>Boot into the CentOS 6 installation disk and select &#8216;Rescue Mode&#8217; from the list of options.</li>
<li>When prompted to search for LVM partitions on the disk, select &#8216;Skip&#8217;.</li>
<li>Type the following commands at the prompt.  <em>The following assume you have a standard CentOS LVM configuration.</em>
<pre class="brush: bash; title: ; notranslate">fdisk /dev/sda
p  # Print partition table
n  # New partition
p  # Primary partition
3  # ID = 3
# When prompted, add 1 to the end block value for the sda2 partition and use it as the start of the sda3 partition.
# Use the default for the size which should be the rest of the free space on the disk.
t  # Change partition type
3  # Change partition 3
8e # Type = Linux LVM
p  # Print partition table
w  # Write partition table

# Create a new LVM physical volume from the new partition
lvm pvcreate /dev/sda3
lvm pvdisplay

# Mount the volume group
lvm vgscan
lvm vgchange -ay
# You will see the name of the volume group that is activated.  Usually something like 'vg_hostname'.

# Extend the volume group with the new physical volume.  Be sure to substitute the name of your volume group in the command below.
lvm vgextend /dev/vg_hostname /dev/sda3

# Extend the logical volume to include 100% of the free space on the volume group.
lvm lvextend /dev/vg_hostname/lv_root /dev/sda3

# Mount the volume group
lvm vgscan
lvm vgchange -ay

# Run a filesystem check on the newly expanded disk
e2fsck -f /dev/vg_hostname/lv_root

# Resize the filesystem to use the entire disk
resize2fs /dev/vg_hostname/lv_root</pre>
</li>
<li>After rebooting, you can confirm the final size of your disk using:
<pre class="brush: bash; title: ; notranslate">df -h</pre>
</li>
</ol>
<p><strong>As always, have a backup of your data.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://alexcline.net/2012/02/29/expand-lvm-in-centos-6-running-on-vcenter/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Monitor SSH on Non-Standard Port in OpenNMS</title>
		<link>http://alexcline.net/2012/02/10/monitor-ssh-on-non-standard-port-in-opennms/</link>
		<comments>http://alexcline.net/2012/02/10/monitor-ssh-on-non-standard-port-in-opennms/#comments</comments>
		<pubDate>Fri, 10 Feb 2012 16:36:50 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://alexcline.net/?p=511</guid>
		<description><![CDATA[To enhance security, I run SSH on a non-standard port. When using OpenNMS to monitor systems, it only looks for SSH servers on the standard port (22) so I had to update the configuration to monitor systems running SSH on a different port. Here&#8217;s the configuration I used: Note: I spent a long time trying [...]]]></description>
			<content:encoded><![CDATA[<p>To enhance security, I run SSH on a non-standard port.  When using OpenNMS to monitor systems, it only looks for SSH servers on the standard port (22) so I had to update the configuration to monitor systems running SSH on a different port.  Here&#8217;s the configuration I used:</p>
<p><em>Note: I spent a long time trying to figure this out.  The key is that the &#8216;banner&#8217; property is the String that the monitor daemon looks for to confirm that it&#8217;s communicating with an SSH server.  I erroneously put &#8216;SSH-1920&#8242; which would never match the SSH server&#8217;s response banner.</em></p>
<pre class="brush: xml; title: ; notranslate">
&lt;!-- capsd-configuration.xml --&gt;
&lt;protocol-plugin protocol=&quot;SSH-1920&quot; class-name=&quot;org.opennms.netmgt.capsd.plugins.SshPlugin&quot; scan=&quot;on&quot;&gt;
  &lt;property key=&quot;banner&quot; value=&quot;SSH&quot; /&gt;
  &lt;property key=&quot;port&quot; value=&quot;1920&quot; /&gt;
  &lt;property key=&quot;timeout&quot; value=&quot;3000&quot; /&gt;
  &lt;property key=&quot;retry&quot; value=&quot;1&quot; /&gt;
&lt;/protocol-plugin&gt;

&lt;!-- poller-configuration.xml --&gt;
&lt;service name=&quot;SSH-1920&quot; interval=&quot;300000&quot; user-defined=&quot;false&quot; status=&quot;on&quot;&gt;
  &lt;parameter key=&quot;retry&quot; value=&quot;1&quot;/&gt;
  &lt;parameter key=&quot;banner&quot; value=&quot;SSH&quot;/&gt;
  &lt;parameter key=&quot;port&quot; value=&quot;1920&quot;/&gt;
  &lt;parameter key=&quot;timeout&quot; value=&quot;3000&quot;/&gt;
  &lt;parameter key=&quot;rrd-repository&quot; value=&quot;/opt/opennms/share/rrd/response&quot;/&gt;
  &lt;parameter key=&quot;rrd-base-name&quot; value=&quot;ssh-1920&quot;/&gt;
  &lt;parameter key=&quot;ds-name&quot; value=&quot;ssh-1920&quot;/&gt;
&lt;/service&gt;

&lt;!-- ... and farther down below ...  --&gt;

&lt;monitor service=&quot;SSH-1920&quot; class-name=&quot;org.opennms.netmgt.poller.monitors.SshMonitor&quot;/&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://alexcline.net/2012/02/10/monitor-ssh-on-non-standard-port-in-opennms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Message: dualvar is only available with the XS version of Scalar::Util&#8221; Error in CentOS 5</title>
		<link>http://alexcline.net/2012/02/02/message-dualvar-is-only-available-with-the-xs-version-of-scalarutil-error-in-centos-5/</link>
		<comments>http://alexcline.net/2012/02/02/message-dualvar-is-only-available-with-the-xs-version-of-scalarutil-error-in-centos-5/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 19:13:32 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Randomness]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://alexcline.net/?p=508</guid>
		<description><![CDATA[After upgrading the CentOS 5 system that is running my company&#8217;s internal ticketing system (OTRS), the automated cron jobs for processing tickets started throwing the following error: This error was caused by an upgrade to the Compress::Zlib package. The newer version of the package isn&#8217;t compiled with XS support. I found some information about this [...]]]></description>
			<content:encoded><![CDATA[<p>After upgrading the CentOS 5 system that is running my company&#8217;s internal ticketing system (OTRS), the automated cron jobs for processing tickets started throwing the following error:</p>
<pre class="brush: plain; title: ; notranslate">Message: dualvar is only available with the XS version of Scalar::Util at /usr/lib/perl5/vendor_perl/5.8.8/IO/Socket/SSL.pm line 19</pre>
<p>This error was caused by an upgrade to the Compress::Zlib package.  The newer version of the package isn&#8217;t compiled with XS support.  I found some information about this error from this <a href="http://lists.otrs.org/pipermail/otrs/2010-October/033515.html">OTRS mailing list post</a> from 2010 regarding RHEL.  Looks like it takes about a year for RHEL packages to make it downstream to CentOS.</p>
<p>To fix the error, I ran the following from the command line:</p>
<pre class="brush: bash; title: ; notranslate">perl -MCPAN -e &quot;CPAN::Shell-&gt;force(qw(install Scalar::Util));&quot;</pre>
<p>After letting the cronjobs rerun, the error was gone and tickets successfully processed again.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexcline.net/2012/02/02/message-dualvar-is-only-available-with-the-xs-version-of-scalarutil-error-in-centos-5/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Disable nouveau drivers in Fedora 15</title>
		<link>http://alexcline.net/2011/10/12/disable-nouveau-drivers-in-fedora-15/</link>
		<comments>http://alexcline.net/2011/10/12/disable-nouveau-drivers-in-fedora-15/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 14:03:42 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://alexcline.net/?p=458</guid>
		<description><![CDATA[Edit: This also works in Fedora 16. During the upgrade I had to boot into single user mode to switch to run level 3 and reinstall the latest nVidia drivers. Then switch back to run level 5 and reboot. When trying to install the latest nVidia drivers on my Fedora 15 workstation, I kept getting [...]]]></description>
			<content:encoded><![CDATA[<p><em>Edit:  This also works in Fedora 16.  During the upgrade I had to boot into single user mode to switch to run level 3 and reinstall the latest nVidia drivers.  Then switch back to run level 5 and reboot.</em></p>
<p>When trying to install the latest nVidia drivers on my Fedora 15 workstation, I kept getting errors about the default nouveau video driver being loaded into the kernel.  The nVidia installer creates a modprobe config file that is supposed to prevent that module from being loaded but it doesn&#8217;t work fully.</p>
<p>To <em>really</em> disable the nouveau driver, you need to edit the grub config file and add the following to the end of the kernel init line:</p>
<pre class="brush: plain; title: ; notranslate">rdblacklist=nouveau nouveau.modeset=0</pre>
<p>For example, your resulting grub.conf file will look like this:</p>
<pre class="brush: plain; title: ; notranslate">title Fedora (2.6.40.6-0.fc15.x86_64)
        root (hd0,1)
        kernel /vmlinuz-2.6.40.6-0.fc15.x86_64 ro root=/dev/mapper/vg_cline-lv_root noiswmd LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rhgb vga=794 quiet rdblacklist=nouveau nouveau.modeset=0
        initrd /initramfs-2.6.40.6-0.fc15.x86_64.img</pre>
]]></content:encoded>
			<wfw:commentRss>http://alexcline.net/2011/10/12/disable-nouveau-drivers-in-fedora-15/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enable Remote Disk Browsing on a Mac</title>
		<link>http://alexcline.net/2011/08/31/enable-remote-disk-browsing-on-a-mac/</link>
		<comments>http://alexcline.net/2011/08/31/enable-remote-disk-browsing-on-a-mac/#comments</comments>
		<pubDate>Wed, 31 Aug 2011 14:04:22 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[blu-ray]]></category>
		<category><![CDATA[lion]]></category>
		<category><![CDATA[mac os x]]></category>
		<category><![CDATA[remote disk]]></category>
		<category><![CDATA[sharing]]></category>

		<guid isPermaLink="false">http://alexcline.net/?p=352</guid>
		<description><![CDATA[I recently bought a blu-ray drive for my PC to be able to watch movies and burn blu-ray disks easily. Sadly, Apple doesn&#8217;t offer a Mac with a blu-ray drive nor have I found a blu-ray internal drive for Macbook Pros. One thing that is available for Macs is called &#8216;DVD or CD Sharing&#8217;, also [...]]]></description>
			<content:encoded><![CDATA[<p>I recently bought a blu-ray drive for my PC to be able to watch movies and burn blu-ray disks easily.  Sadly, Apple doesn&#8217;t offer a Mac with a blu-ray drive nor have I found a blu-ray internal drive for Macbook Pros.</p>
<p>One thing that is available for Macs is called &#8216;DVD or CD Sharing&#8217;, also called &#8216;Remote Disk&#8217;.  You can find the default instructions on how to set it up over at <a href="http://support.apple.com/kb/HT1777?viewlocale=en_US" target="_blank">Apple&#8217;s support article</a>.  The instructions include how to install the DVD or CD Sharing client on a Windows PC for sharing to a Mac.</p>
<p>What isn&#8217;t included in those instructions is the fact that by default, only Macbook Airs and Mac Minis support Remote Disk out of the box.  I guess this is because they are the only two Mac models that don&#8217;t have optical drives.</p>
<p>Once DVD or CD Sharing has been enabled on a remote system (and the firewalls between the two systems correctly configured), the following two lines will activate the &#8216;Remote Disk&#8217; option in the Finder window.  Run them in a terminal window, then restart your computer.</p>
<pre class="brush: plain; title: ; notranslate">defaults write com.apple.NetworkBrowser EnableODiskBrowsing -bool true
defaults write com.apple.NetworkBrowser ODSSupported -bool true</pre>
<p>After boot, you should see the following options in your Finder.<br />
<a href="http://alexcline.net/2011/08/31/enable-remote-disk-browsing-on-a-mac/remotedisk/" rel="attachment wp-att-353"><img src="http://alexcline.net/files/2011/08/remotedisk-e1314799347763.png" alt="Screenshot of Finder with Remote Disk devices" title="Remote Disk" width="521" height="294" class="aligncenter size-full wp-image-353" /></a><br />
<em>Note: My PC has two disk drives shared in the above picture.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://alexcline.net/2011/08/31/enable-remote-disk-browsing-on-a-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Augeas Lens for Modifying Munin Nodes</title>
		<link>http://alexcline.net/2011/08/11/augeas-lens-for-modifying-munin-nodes/</link>
		<comments>http://alexcline.net/2011/08/11/augeas-lens-for-modifying-munin-nodes/#comments</comments>
		<pubDate>Thu, 11 Aug 2011 21:14:28 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://alexcline.net/?p=347</guid>
		<description><![CDATA[Augeas (from EPEL) doesn&#8217;t come with a default lens for the munin-node.conf files that control Munin Nodes. So I whipped one together.]]></description>
			<content:encoded><![CDATA[<p>Augeas (from EPEL) doesn&#8217;t come with a default lens for the munin-node.conf files that control Munin Nodes.  So I whipped one together.</p>
<pre class="brush: plain; title: ; notranslate">
(* Munin Node module for Augeas *)

module MuninNode =
  autoload xfm

  let record =
    let value = store /[^ \t\n]+([ \t]+[^ \t\n]+)*/ in
      [ key Rx.word . Sep.space . value . Util.eol ]

  let lns = (record | Util.comment | Util.empty) *

  let filter = incl &quot;/etc/munin/munin-node.conf&quot; . Util.stdexcl

  let xfm = transform lns filter
</pre>
]]></content:encoded>
			<wfw:commentRss>http://alexcline.net/2011/08/11/augeas-lens-for-modifying-munin-nodes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Volume group &#8220;VolGroup00&#8243; not found woes.</title>
		<link>http://alexcline.net/2011/06/30/volume-group-volgroup00-not-found-woes/</link>
		<comments>http://alexcline.net/2011/06/30/volume-group-volgroup00-not-found-woes/#comments</comments>
		<pubDate>Thu, 30 Jun 2011 14:08:03 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[lvm]]></category>
		<category><![CDATA[p2v]]></category>

		<guid isPermaLink="false">http://alexcline.net/?p=341</guid>
		<description><![CDATA[My attempts to migrate a physical CentOS installation to a Virtual machine were fraught with perils. First, I had to figure out how to actually transfer the data. There are many tools out there that say they can assist in a P2V conversion, but the simplest method is usually the easiest. I ended up going [...]]]></description>
			<content:encoded><![CDATA[<p>My attempts to migrate a physical CentOS installation to a Virtual machine were fraught with perils.  First, I had to figure out how to actually transfer the data.  There are many tools out there that say they can assist in a P2V conversion, but the simplest method is usually the easiest.  I ended up going with a good old <code>dd</code>.</p>
<ol>
<li>First, you&#8217;ll want to create the new VM that you&#8217;ll be migrating to; we&#8217;ll call this the DestinationVM.  Just configure the hardware &#8212; don&#8217;t install an OS.</li>
<li>Next, boot the VM from the CentOS installation disk and enter rescue mode.  At the prompt, type
<pre class="brush: bash; title: ; notranslate">linux rescue</pre>
</li>
<li>Configure the network interfaces and when it asks to search for installations, allow it to initialize the disks in the VM.  There isn&#8217;t an install present, but we need to setup the disks to perform the copy.</li>
<li>When the VM has booted run
<pre class="brush: bash; title: ; notranslate">nc -l -p 6501 | dd of=/dev/sda</pre>
<p>  This will start the nc daemon and output the data to the /dev/sda disk.  <em>Make sure to change the destination disk if it is different than /dev/sda.</em></li>
<li>On the physical machine run
<pre class="brush: bash; title: ; notranslate">dd if=/dev/sda | nc &lt;ip-of-VM&gt; 6501</pre>
<p>  <em>Tip: Start the command in a <code>screen</code> session if you might be disconnected from the server during the transfer.  It may take a while.</em></li>
<li>You won&#8217;t see anything until the transfer completes.  It took 6 hours for a 250GB drive to copy for me.  YMMV</li>
<li>Once the transfer is complete, reboot the VM and you should be good to go!</li>
</ol>
<p>Sadly, when I rebooted the VM, I encountered the following error:</p>
<pre class="brush: plain; title: ; notranslate">  Reading all physical volumes. This may take awhile...
  Volume group &quot;VolGroup00&quot; not found
Unable to access resume device (/dev/VolGroup00/LogVol01)
mount: could not find filesystem '/dev/root'
setuproot: moving /dev failed: No such file or directory
setuproot: error mounting /proc: No such file or directory
setuproot: error mounting /sys: No such file or directory
switchroot: mount failed: No such file or directory
Kernel panic - not syncing: Attempted to kill init!</pre>
<p>This error likely means that the kernel copied from the old physical system doesn&#8217;t have drivers to support the disk hardware in the virtual machine.  Because of this, the LVM configuration isn&#8217;t loading properly.  The easiest way to resolve this is to reinstall the kernel using <code>yum</code>.</p>
<ol>
<li>Boot the VM into the CentOS install CD and at the prompt, type
<pre class="brush: bash; title: ; notranslate">linux rescue</pre>
</li>
<li>Enable and configure networking and allow the mounting of the local installation.  Make sure to mount is as read/write &#8212; we&#8217;ll be making changes to it.</li>
<li>
<pre class="brush: bash; title: ; notranslate">chroot /mnt/sysconfig
yum remove kernel
yum install kernel
exit
exit</pre>
<p><em>Note, it&#8217;s OK to remove all versions of the kernel.  Just make sure you install one before you reboot.</em>
</li>
<li>The system will reboot, once it does, let it load into the OS.  If everything went OK, your new system will be up and running!</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://alexcline.net/2011/06/30/volume-group-volgroup00-not-found-woes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

