<?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>Your Linux Guy .com</title>
	<atom:link href="http://yourLinuxGuy.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://yourLinuxGuy.com</link>
	<description>...whatis whatis yourCloudGuy.com yourIdentityGuy.com yourNetwareGuy.com yourZcmGuy.com whatis what...</description>
	<lastBuildDate>Mon, 06 Sep 2010 08:11:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>How to do LDAPS queries from Linux to Active Directory</title>
		<link>http://yourLinuxGuy.com/?p=635</link>
		<comments>http://yourLinuxGuy.com/?p=635#comments</comments>
		<pubDate>Mon, 06 Sep 2010 08:11:47 +0000</pubDate>
		<dc:creator>Jeremy Pavlov</dc:creator>
				<category><![CDATA[advanced]]></category>
		<category><![CDATA[ldapsearch]]></category>
		<category><![CDATA[linuxGeneral]]></category>

		<guid isPermaLink="false">http://yourLinuxGuy.com/?p=635</guid>
		<description><![CDATA[Active Directory (AD) is a fact of life.  There, I said it.  And as a predominantly Linux-based consultant, much of my job is often dancing around the periphery of the Microsoft world, making Linuxy things work with Windowsy things.  So, dance I shall&#8230; Often I find myself in the position of setting up a Linux-based [...]]]></description>
			<content:encoded><![CDATA[<p>Active Directory (AD) is a fact of life.  There, I said it.  And as a predominantly Linux-based consultant, much of my job is often dancing around the periphery of the Microsoft world, making <em>Linuxy</em> things work with <em>Windowsy</em> things.  So, dance I shall&#8230;</p>
<p>Often I find myself in the position of setting up a Linux-based service (like an Apache-based service, for instance) that needs to make LDAP calls to somebody&#8217;s AD userbase.  And um&#8230; &#8220;&#8230;plaintext is bad, m&#8217;kay&#8230;?&#8221;</p>
<p>So setting up a Linux-based service to make LDAPS calls (that means encrypted LDAP, by the way) to an AD server has a kind-of strange &#8220;gotcha&#8221; at first, since AD itself is not actually set up out of the box to service LDAP over SSL/TLS correctly in the first place.  You have to make it work before you can query it.</p>
<p>To that end, herein I will provide the steps necessary to get that encrypted LDAPS working on AD; and since this is a <em>Linuxy</em> blog, we&#8217;ll call to it and test it from my Opensuse laptop.  However, these are pretty standard commands that should work on any distro.  Let&#8217;s get to it&#8230;.</p>
<p>First, you must get the AD Root CA cert.  If you&#8217;re like most people, the AD CA is a private/internal one (not a public one from a big-time vendor like Verisign, Thawte, etc.).</p>
<p>Verify/install the Certificate Server &#8220;Role&#8221; in AD on the DC if it is not there already.  If you have to install the role/service for the first time, a reboot will be necessary (mandatory actually, though it does not tell you) to cause server certificate to be requested/generated/installed.  Then, you need to export the Root CA certificate.  Here&#8217;s how to do that:</p>
<ol>
<li> Click Start, Administrative Tools, Certification Authority</li>
<li>Right-click on your CA, and select Properties</li>
<li>In the CA Properties window, click on View Certificate</li>
<li>In the Certificate window, click the Details tab and click Copy to File</li>
<li>In the Certificate Export Wizard window, click Next</li>
<li>Select Base-64 encoded X.509 (.CER), and click Next</li>
<li>Enter the export name (e.g., c:\corpRootCa.cer), and click Next</li>
<li>Click Finish</li>
<li>Now copy certificate to the Linux server using whatever method you please (samba share, filezilla, etc.), for example to <code>/home/jpavlov/RootCerts/corpRootCa.cer</code></li>
</ol>
<p>Second, you have to edit the ldap configuration file on your Linux box, so the ldapsearch tool knows how to behave:</p>
<pre><code>vi /etc/openldap/ldap.conf</code></pre>
<p>&#8230;and add this line to match where you stored the CA cert in step 9 above:</p>
<pre><code>TLS_CACERT /home/jpavlov/RootCerts/corpRootCa.cer</code></pre>
<p>&#8230;there are other lines/options you can add, but this is all you need to get it working.  Also, you can only have one active <code>TLS_CACERT</code> statement in the file at a time, so if you plan to use it with other CAs, make sure to comment the others out for now.</p>
<p>Third, make sure the LDAP server name is resolvable.  The hostname presented in the subject certificate must MATCH the name you use in the query; therefore, it obviously must be resolvable in order to work.  If you have all the relevant hostnames in DNS (as you might in a standard AD environment), you can move on to the next step.  For me, I&#8217;m not using DNS in this case, so I edit the hosts file.  For example:</p>
<pre><code>vi /etc/hosts
10.1.2.3 dc01.corp.com</code></pre>
<p>Finally, make the query!  Remember, <em>I repeat</em>, that the hostname you query *must* match the certificate subject.  Here&#8217;s an example:</p>
<pre><code>ldapsearch -x -H ldaps://dc01.corp.com -b dc=corp,dc=com -D "cn=Administrator,cn=Users,dc=corp,dc=com" -W "mail=*" mail</code></pre>
<p>&#8230;and that should do it.  That&#8217;s enough to get you started.  But I think that in the coming weeks I&#8217;ll toss in a few more caveats and goodies about making LDAP/LDAPS calls to AD, since I can almost read your mind right now and anticipate the next questions you have, and the next limits/problems you&#8217;ll run into&#8230;</p>
<p> <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://yourLinuxGuy.com/?feed=rss2&amp;p=635</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How do I quickly set up Tripwire on Opensuse?</title>
		<link>http://yourLinuxGuy.com/?p=620</link>
		<comments>http://yourLinuxGuy.com/?p=620#comments</comments>
		<pubDate>Mon, 16 Aug 2010 09:44:41 +0000</pubDate>
		<dc:creator>Jeremy Pavlov</dc:creator>
				<category><![CDATA[advanced]]></category>
		<category><![CDATA[opensuse11.3]]></category>
		<category><![CDATA[tripwire]]></category>

		<guid isPermaLink="false">http://yourLinuxGuy.com/?p=620</guid>
		<description><![CDATA[One of the very first posts I wrote on this blog when I started in early 2007 is a tutorial on how to quickly set up Tripwire on &#8220;Suse Linux&#8221; (before they called it &#8220;Opensuse&#8221;).  But the problem with that post is that I used the Tripwire software that was bundled with the distro at [...]]]></description>
			<content:encoded><![CDATA[<p>One of the very first posts I wrote on this blog when I started in early 2007 is a tutorial on <a title="http://yourlinuxguy.com/?p=13" href="http://yourlinuxguy.com/?p=13" target="_blank">how to quickly set up Tripwire on &#8220;Suse Linux&#8221;</a> (before they called it &#8220;Opensuse&#8221;).  But the problem with that post is that I used the Tripwire software that was bundled with the distro at the time, which they stopped including with that very version.  This understandably leads to some confusion with some folks.</p>
<p>So now, I&#8217;ve put together a modernized version of that post.  This time, I&#8217;m using the latest version of Opensuse (11.3) and the freely-available Tripwire from SourceForge (2.4.2) at the time of this writing, to make it a little more universal; since this should basically work on many distros and versions.  Other than that however, I&#8217;m pretty much following the same style, method, and simplicity as my afore-mentioned earlier post;  I&#8217;m going for crude, fast, quick setup, without any in-depth Tripwire administration&#8230;  a &#8220;cheat-sheet&#8221;!  Let&#8217;s get to it&#8230;</p>
<h3>Install software</h3>
<p>Get supporting software from the distro:</p>
<pre><code>zypper in gcc make libstlport_gcc4-devel gcc45-c++ gcc-c++</code></pre>
<p>Get tripwire:</p>
<pre><code>mkdir /tmp/tripwire
cd /tmp/tripwire/
wget http://downloads.sourceforge.net/project/tripwire/tripwire-src/tripwire-2.4.2-src/tripwire-2.4.2-src.tar.bz2?use_mirror=iweb&amp;ts=1280546281
tar -jxvf tripwire-2.4.2-src.tar.bz2
cd tripwire-2.4.2-src</code></pre>
<p>&#8230;now, compile and install to <code>/usr/local </code>(this is the default, which can be changed), according to the INSTALL instructions:</p>
<p><code>./configure<br />
make</code></p>
<p>&#8230;Edit the settings as needed in <code>install/install.cfg</code> and run:</p>
<p><code>make install</code></p>
<p>&#8230;It will prompt you to create and use your &#8220;site&#8221; and &#8220;local&#8221; password.</p>
<h3>Configure Tripwire</h3>
<p>At this point, it has built keys for you, and created sample files for you in <code>/usr/local/etc</code>.  You need a &#8220;config&#8221; file and a &#8220;policy&#8221; file to use tripwire.</p>
<p>To build the configuration file, you can make a default plain-text configuration file, and just edit it to taste and move forward (you can change it later if needed).</p>
<p><code>vi /usr/local/etc/twcfg.txt</code></p>
<p>Then encode and sign the plain-text file and install it as the new configuration file:</p>
<pre><code>/usr/local/sbin/twadmin --create-cfgfile --site-keyfile /usr/local/etc/site.key /usr/local/etc/twcfg.txt</code></pre>
<p>A default policy text file is provided for you as well, and you&#8217;ll need to edit that to tune it to your system:</p>
<p><code>vi /usr/local/etc/twpol.txt</code></p>
<p>To encode that text policy file and install it as a working policy file for your system, build it like this:</p>
<pre><code>/usr/local/sbin/twadmin --create-polfile /usr/local/etc/twpol.txt</code></pre>
<h3>Rock Linux Policy Generator (optional)</h3>
<p>However, if you wish to use the &#8220;rock linux&#8221; policy generator:</p>
<pre><code>mv /usr/local/etc/twpol.txt /usr/local/etc/twpol.txt.bak
cd /tmp/tripwire/
wget http://rocklinux.net/people/pjotr/package/tools/tripwire/mktrippol.pl
wget http://rocklinux.net/people/pjotr/package/tools/tripwire/rockadm.pl
wget http://rocklinux.net/people/pjotr/package/tools/tripwire/rockbasepolicy.txt
wget http://rocklinux.net/people/pjotr/package/tools/tripwire/twinit.sh
wget http://rocklinux.net/people/pjotr/package/tools/tripwire/twsite.pl</code></pre>
<p>I had to modify the paths in the &#8220;Standard settings&#8221; section of the <code>mktrippol.pl</code> file to match my <code>/usr/local</code> installation.   It looked like this in the end:</p>
<pre><code>my $security = 'normal';
my $basefn   = 'rockbasepolicy.txt';
my $twetc    = '/usr/local/etc';
my $twsbin   = '/usr/local/sbin';
my $twvar    = '/usr/local/lib/tripwire';
my $policyfn = "$twetc/twpol.txt";
my $prefix   = undef;</code></pre>
<p>&#8230;Then, execute the <code>mktrippol.pl</code> perl script and it builds the policy file for you.  Again, edit it to make sure it is what you want.</p>
<h3>Complete the configuration</h3>
<p>Now, since you customized the policy, you need to re-bundle it:</p>
<pre><code>/usr/local/sbin/twadmin --create-polfile /usr/local/etc/twpol.txt</code></pre>
<p>To configure email settings, add:</p>
<p><code>emailto  = "root",</code></p>
<p>…to each section after the “rulename” line…</p>
<p>Test your e-mail capability:</p>
<pre><code>/usr/local/sbin/tripwire --test --email jpavlov@yourlinuxguy.com</code></pre>
<p>Now, build the database file:</p>
<pre><code>/usr/local/sbin/tripwire --init</code></pre>
<p>&#8230;and it writes the db file here:</p>
<p><code>/usr/local/lib/tripwire/*.twd</code></p>
<p>If you get any errors, you can edit your policy update the db.  To tweak the policy file, open the plain-text policy file and edit to taste.  Then update your existing policy file and database file with your changes:</p>
<pre><code>/usr/local/sbin/tripwire --update-policy --secure-mode low /usr/local/etc/twpol.txt</code></pre>
<p>Now, run an initial integrity check:</p>
<pre><code>/usr/local/sbin/tripwire --check --interactive</code></pre>
<p>&#8230;and note that when you &#8220;save&#8221; at the end of the report viewing, you are acknowledging the notifications in that report, so that they will be silenced for the future.</p>
<p>There will likely be some false positives and other misc things that don&#8217;t match up.  If so, you&#8217;ll need to update the Tripwire policy text file (<code>twpol.txt</code>) again, and rebuild the policy file (you may need to repeat this a few times until you have it just right):</p>
<pre><code>/usr/local/sbin/tripwire --update-policy --secure-mode low /usr/local/etc/twpol.txt</code></pre>
<p>Then run a (hopefully) final integrity check:</p>
<pre><code>/usr/local/sbin/tripwire --check --interactive</code></pre>
<p>&#8230;which will catch the policy file change (if you made any in the previous step), then you&#8217;re done.</p>
<p>Create cron job (for example):</p>
<p><code>crontab -e</code></p>
<p>&#8230;and add something like this:</p>
<pre><code>0 */5 * * * /usr/local/sbin/tripwire --check --email-report --email-report-level 1</code></pre>
<p>&#8230;of course, since you&#8217;re modifying the crontab, you need to do an interactive check yet again, or you&#8217;ll get flagged on it&#8230;</p>
<p>&#8230;and that should do it!  You now have a functioning Tripwire setup on your system, that will email you every time a change is detected&#8230; You certainly will need to continually tweak the policy a bit as you go forward, as it will likely catch some logs and such.  But you are on your way !</p>
<p> <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_cool.gif' alt='8-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://yourLinuxGuy.com/?feed=rss2&amp;p=620</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to install/configure eDirectory 8.8.5 on Opensuse</title>
		<link>http://yourLinuxGuy.com/?p=601</link>
		<comments>http://yourLinuxGuy.com/?p=601#comments</comments>
		<pubDate>Mon, 02 Aug 2010 06:12:49 +0000</pubDate>
		<dc:creator>Jeremy Pavlov</dc:creator>
				<category><![CDATA[eDirectory]]></category>
		<category><![CDATA[intermediate]]></category>
		<category><![CDATA[ndsconfig]]></category>
		<category><![CDATA[novellGeneral]]></category>
		<category><![CDATA[opensuse11.1]]></category>
		<category><![CDATA[opensuse11.3]]></category>

		<guid isPermaLink="false">http://yourLinuxGuy.com/?p=601</guid>
		<description><![CDATA[UPDATE (post-publish), 20100806:  Though this post was originally tested entirely on 32-bit Opensuse 11.1, thanks to the prompt by Philip (see comments below), I have set up and tested this config on 64-bit Opensuse 11.3 with the 64-bit eDirectory 8.8sp5.  I can confirm that it works well.  Now back to the original post&#8230; A little [...]]]></description>
			<content:encoded><![CDATA[<p><em><span style="color: #800000;">UPDATE</span> (post-publish), 20100806:  Though this post was originally tested entirely on 32-bit Opensuse 11.1, thanks to the prompt by Philip (see comments below), I  have set up and tested this config on 64-bit Opensuse 11.3 with the  64-bit eDirectory 8.8sp5.  I can confirm that it works well.  Now back to the original post&#8230;<br />
</em></p>
<p>A little while ago, I had to get a quick lab up with two redundant LDAP servers for application testing.  I had some Opensuse 11.1 32-bit VM images lying around, and I chose eDirectory, for ease of administration and setup in my short time available.  This is a quick way to get a high-quality, fault-tolerant <em>free directory server</em> on a <em>free OS</em>&#8230;</p>
<p>Of course, I happened to take notes (as I usually do), and thought I&#8217;d post them here for anyone who might be interested in doing the same.</p>
<p>In the following example environment, the two servers are &#8220;node1&#8243; (192.168.6.11) and &#8220;node2&#8243; (192.168.6.12), in the eDirectory tree called &#8220;NODETREE&#8221;.  The rest should be obvious&#8230;</p>
<p>First, install the required supporting library:</p>
<pre><code>zypper in libstdc++33</code></pre>
<p>Get the eDirectory files from Novell:<br />
<a href="http://download.novell.com/Download?buildid=Um8b-a_q0-g~">eDirectory_88SP5_Linux_i586.tar.gz</a></p>
<p>&#8230;and unzip it, and run setup:</p>
<pre><code>cd /tmp/eDirectory/setup
./nds-install</code></pre>
<p>Ignore this &#8220;unsupported&#8221; warning. If we could enter &#8220;Of course!&#8221;, we would, but we can&#8217;t. Just enter &#8220;y&#8221;&#8230;.<br />
<code>%%% Warning: This is not a supported platform for eDirectory 8.8.5. Please refer to NOVELL Documentation for information on supported platforms. Do you want to Continue  '[y/n/q] ? '</code></p>
<p>You are prompted to agree to the license&#8230; &#8230;yes, you agree to the license&#8230;. <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Press &#8220;<code>q</code>&#8221; to quit viewing, and &#8220;<code>y</code>&#8221; to agree.</p>
<p>You are prompted to &#8220;<code>Select the components you wish to install..</code>&#8221;<br />
Choose option <code>1</code> to install the server (or <code>1,2</code> for all). It will install needed packages.</p>
<p>Reboot.</p>
<p>Now edit the eDirectry &#8220;hosts&#8221; config file, since it is a closed environment.  I&#8217;m starting on node2 for some strange reason, so I add that as the address of the tree here:</p>
<pre><code>vi /etc/opt/novell/eDirectory/conf/hosts.nds</code></pre>
<p>&#8230;and create the following entry:</p>
<pre><code>NODETREE       192.168.6.12</code></pre>
<p>If you&#8217;re not using DNS in your lab, you might want to make sure all eDir servers are in the hosts file.  Either way, just make sure they are resolvable:</p>
<pre><code>vi /etc/hosts</code></pre>
<p>&#8230;and create the following entries:</p>
<pre><code>node1       192.168.6.11
node2       192.168.6.12</code></pre>
<p>Now run <code>ndsconfig</code> with the required parameters.   Here is my example to build a new tree with the first of two servers (again, mine happens to use node2 first, but either server is fine to build the tree):</p>
<pre><code>/opt/novell/eDirectory/bin/ndsconfig new -t nodetree -n ou=Services.o=CORP -a cn=admin.o=CORP -i -S node2 -B 192.168.6.12</code></pre>
<p>&#8230;and you will be asked for the new Admin password and the NDS (whoops, eDirectory) instance and DIB location.</p>
<p>Add the other server to that previously-created tree (after repeating the install procedures on the second server):</p>
<pre><code>/opt/novell/eDirectory/bin/ndsconfig add -S node1 -t nodetree -n ou=Services.o=CORP -a cn=admin.o=CORP -B 192.168.6.11 -p 192.168.6.12</code></pre>
<p>﻿&#8230;and that&#8217;s it!  You&#8217;re up and running, and ready for LDAP requests.  Of course, you might want to create an OU for users (perhaps ou=users,o=CORP), and some users, etc., etc., etc&#8230;</p>
<p> <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://yourLinuxGuy.com/?feed=rss2&amp;p=601</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Opensuse 11.3 is out!</title>
		<link>http://yourLinuxGuy.com/?p=596</link>
		<comments>http://yourLinuxGuy.com/?p=596#comments</comments>
		<pubDate>Mon, 19 Jul 2010 06:08:44 +0000</pubDate>
		<dc:creator>Jeremy Pavlov</dc:creator>
				<category><![CDATA[introductory]]></category>
		<category><![CDATA[opensuse11.3]]></category>

		<guid isPermaLink="false">http://yourLinuxGuy.com/?p=596</guid>
		<description><![CDATA[I&#8217;ll spare you all of what you can read all over the Internet about the specifics of the latest Opensuse 11.3 release (and there are some good ones, like All About Linux, and OStatic to name a couple) &#8230;  And instead I&#8217;ll just provide some rambling anecdotes for you&#8230; But I do want to say [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll spare you all of what you can read all over the Internet about the specifics of the latest Opensuse 11.3 release (and there are some good ones, like <a title="http://feedproxy.google.com/~r/AllAboutLinux/~3/iixGen3haHQ/opensuse-113-released-comes-with.html" href="http://feedproxy.google.com/~r/AllAboutLinux/~3/iixGen3haHQ/opensuse-113-released-comes-with.html">All About Linux</a>, and <a title="http://feedproxy.google.com/~r/ostatic/~3/rrC_9oTtNrM/opensuse-11-3-arrives-with-unexpected-extras" href="http://feedproxy.google.com/~r/ostatic/~3/rrC_9oTtNrM/opensuse-11-3-arrives-with-unexpected-extras" target="_blank">OStatic</a> to name a couple) &#8230;  And instead I&#8217;ll just provide some rambling anecdotes for you&#8230;</p>
<p>But I do want to say from the outset:  It really is <em>beautiful</em>.</p>
<p>I had been running the 32 bit version of the &#8220;Release Candidate 1&#8243; on a Lenovo R60 for a week or so, and was blown away.  When it was officially released, I put the 64 bit version on a Lenovo T500 and am even more amazed.</p>
<p>For the most part, it has the bones and muscles of Opensuse 11.2 underneath&#8230;  But at the surface of the skin, everything seems smoother, faster, quicker, prettier, easier&#8230; just better.</p>
<p>You see, I&#8217;ve been running Opensuse for years as a laptop OS, and my laptop is a mission-critical tool to my work as a consultant.  And pretty much on the day of each new release, I download and load up the Opensuse OS, try to figure out how to make iFolder and Jungledisk work, pull back my data, and then try to make the rest of my favorite apps work.  This time, the iFolder3.8 client (part of the distro these days) and Jungledisk installed and worked so easily, I was up in no time flat.</p>
<p>It looks like VMware Server 2x is going to be more of a problem though, given the new kernel version 2.6.34.x&#8230;.  Maybe we can get <a title="http://radu.cotescu.com/2010/02/21/how-to-install-vmware-server-kernel-2-6-32/" href="http://radu.cotescu.com/2010/02/21/how-to-install-vmware-server-kernel-2-6-32/">Radu</a> interested, although maybe not, since <a title="http://radu.cotescu.com/2010/07/02/vmware-server-linux-kernels/" href="http://radu.cotescu.com/2010/07/02/vmware-server-linux-kernels/" target="_blank">he seems pretty fed up</a> with having to support all his awesome previous work.  Well, since it looks like VMware doesn&#8217;t seem to be releasing updates to VMware Server 2x anymore (or at least that&#8217;s the rumors I hear), maybe it&#8217;s time for me to move over to KVM for good this time&#8230;</p>
<p> <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://yourLinuxGuy.com/?feed=rss2&amp;p=596</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Remote Upgrade to SLES 11 SP1 Using Zypper</title>
		<link>http://yourLinuxGuy.com/?p=588</link>
		<comments>http://yourLinuxGuy.com/?p=588#comments</comments>
		<pubDate>Mon, 05 Jul 2010 06:35:40 +0000</pubDate>
		<dc:creator>Jeremy Pavlov</dc:creator>
				<category><![CDATA[advanced]]></category>
		<category><![CDATA[sles11]]></category>
		<category><![CDATA[sles11sp1]]></category>

		<guid isPermaLink="false">http://yourLinuxGuy.com/?p=588</guid>
		<description><![CDATA[As you might have noted in my previous posts, I do not like to visit server consoles for upgrades.  So I want to thank Novell for having outlined a handy little instruction sheet here:  How to upgrade to SLES/SLED 11 SP1 (TID 7005410) on how to do various remote upgrades from SLES 11 to SLES [...]]]></description>
			<content:encoded><![CDATA[<p>As you might have noted in my previous posts, I do not like to visit server consoles for upgrades.   So I want to thank Novell for having outlined a handy little instruction sheet here:  <a href="http://www.novell.com/support/documentLink.do?externalID=7005410">How to upgrade to SLES/SLED 11 SP1 (TID 7005410)</a> on how to do various remote upgrades from SLES 11 to SLES 11 sp1, including remotely via shell session.  I&#8217;ve used these steps outlined in the section called &#8220;<em>Update to SP1 via patches</em>&#8221; &#8211;&gt; &#8220;<em>2) Update by using zypper</em>&#8221; with great success so far.  However, I&#8217;d like to toss one or two little tips back to the community&#8230;</p>
<p>In these steps outlined by Novell, you are required to manually retrieve the values from /etc/products.d/*.prod and individually install the special upgrade/migration packages for each listed product definition.  And that&#8217;s fine in a lab, but with a farm of servers and potentially more than one upgrade/migration type each (in my situation they were cluster/HA servers, so each had two items), this can be a bit of a bother.  So for added convenience, I wrote a little &#8220;for&#8221; loop tweak to take care of those manual steps.</p>
<p>Without further ado, here are the modified steps for the upgrade to SLES11 sp1 using zypper with my tweak (thanks again Novell, and please see the caveats below):</p>
<pre><code>zypper ref -s
zypper up -t patch
zypper up -t patch
for item in `cat /etc/products.d/*.prod|grep '&lt;product&gt;'|sed s/\&lt;*.product\&gt;//g |sed s/" "//g`; do zypper in -t product $item;done
suse_register -d 2 -L /root/.suse_register.log
zypper ref -s
zypper lr
zypper dup</code></pre>
<p>&#8230;and there are a few <em>very important points</em> to be made about the above steps:</p>
<ul>
<li>Do not run those steps as a continuous script;  step through it line-by-line, watching the results at each step.</li>
<li>Make sure your registration keys are all up to date and your repositories are in good shape <em>before starting</em>!  This is especially important and complex if you are using the HA extension or other custom add-on products that require registrations and repositories.</li>
<li>In my experience, I sometimes needed to re-check and repair my repositories after the first or second &#8220;patch&#8221; statement, and sometimes before the &#8220;dup&#8221; statement; I do not know why.  Even Novell&#8217;s doc suggests that there may be complications.</li>
<li>Afterward, you might want to go in and run the yast customer center registration tool, and allow it to clean itself up.</li>
</ul>
<p>I hope that helps!</p>
<p> <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://yourLinuxGuy.com/?feed=rss2&amp;p=588</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ping-per-second / Notify Script</title>
		<link>http://yourLinuxGuy.com/?p=580</link>
		<comments>http://yourLinuxGuy.com/?p=580#comments</comments>
		<pubDate>Mon, 21 Jun 2010 06:45:48 +0000</pubDate>
		<dc:creator>Jeremy Pavlov</dc:creator>
				<category><![CDATA[intermediate]]></category>
		<category><![CDATA[linuxGeneral]]></category>

		<guid isPermaLink="false">http://yourLinuxGuy.com/?p=580</guid>
		<description><![CDATA[As a sysadmin (probably like you), sometimes I need to whip up special-purpose mini-scripts to do simple monitoring tasks that I don&#8217;t want to bother our main monitoring system with&#8230; This is one of them&#8230; I needed to monitor a network device (an appliance, actually) constantly and rapidly, to see if the interface was flapping [...]]]></description>
			<content:encoded><![CDATA[<p>As a sysadmin (probably like you), sometimes I need to whip up special-purpose mini-scripts to do simple monitoring tasks that I don&#8217;t want to bother our main monitoring system with&#8230; This is one of them&#8230;</p>
<p>I needed to monitor a network device (an appliance, actually) constantly and rapidly, to see if the interface was flapping up / down.  So, we settled on one ping per second, with a one-time email notification when it drops, and a one-time notification when it returns.</p>
<p>Below is that script;  all you have to do is copy the contents into a text file (watch out for line wrapping), change the &#8220;<code>PINGDEST</code>&#8221; and &#8220;<code>EMAILADDRESSES</code>&#8221; variables, flag it as executable (<code>chmod 700</code> &lt;scriptname&gt;) , and you should be good to go!</p>
<pre><code>#!/bin/bash

PINGDEST="192.168.1.12"
EMAILADDRESSES="jpavlov@yourLinuxGuy.com,questions@yourLinuxGuy.com"
BITFLAG=0
SENTMAIL=0

while true
do
   /bin/ping -q -c1 -W1 $PINGDEST &gt; /dev/null 2&gt;&amp;1
   PINGRESULT="$?"
   if [ "$PINGRESULT" != "0" ]; then
      BITFLAG=1
   else
      BITFLAG=0
      sleep 1
   fi
   if [ "$BITFLAG" == "1" ] &amp;&amp; [ "$SENTMAIL" == "0" ]; then
      echo "Ping to $PINGDEST FAILED! Generated by $0 on $HOSTNAME" |mailx -s "Ping failure to $PINGDEST"  $EMAILADDRESSES
      SENTMAIL=1
   elif [ "$BITFLAG" == "0" ] &amp;&amp; [ "$SENTMAIL" == "1" ]; then
      echo "Ping to $PINGDEST resumed. Generated by $0 on $HOSTNAME" |mailx -s "Ping responding again on $PINGDEST"  $EMAILADDRESSES
      SENTMAIL=0
   fi
done</code></pre>
<p>A goofy, single-purpose script, to be sure; but you never know, maybe it will help someone&#8230;</p>
<p> <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://yourLinuxGuy.com/?feed=rss2&amp;p=580</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How can I remotely upgrade from OES2-SP1 to OES2-SP2?</title>
		<link>http://yourLinuxGuy.com/?p=380</link>
		<comments>http://yourLinuxGuy.com/?p=380#comments</comments>
		<pubDate>Mon, 07 Jun 2010 07:12:50 +0000</pubDate>
		<dc:creator>Jeremy Pavlov</dc:creator>
				<category><![CDATA[advanced]]></category>
		<category><![CDATA[oes2sp1]]></category>
		<category><![CDATA[oes2sp2]]></category>
		<category><![CDATA[rug]]></category>

		<guid isPermaLink="false">http://yourlinuxguy.com/?p=380</guid>
		<description><![CDATA[This is just a simplified adaptation of a community post by author sakila here: http://www.novell.com/communities/node/9298/patching-and-upgrading-oes2-sp1-oes2-sp2 &#8230;all due credit (and thanks) to the author for putting that together!!  Please read that doc first to get a feel for what I&#8217;m after here, and take in all the warnings and caveats.  Maybe even post a comment, and [...]]]></description>
			<content:encoded><![CDATA[<p>This is just a simplified adaptation of a community post by author <a title="http://www.novell.com/communities/user/6477" href="http://www.novell.com/communities/user/6477" target="_blank">sakila</a> here:<br />
<a title="http://www.novell.com/communities/node/9298/patching-and-upgrading-oes2-sp1-oes2-sp2" href="http://www.novell.com/communities/node/9298/patching-and-upgrading-oes2-sp1-oes2-sp2" target="_blank">http://www.novell.com/communities/node/9298/patching-and-upgrading-oes2-sp1-oes2-sp2</a><br />
&#8230;all due credit (and thanks) to the author for putting that together!!   Please read that doc first to get a feel for what I&#8217;m after here, and take in all the warnings and caveats.   Maybe even post a comment, and thank the author&#8230;  <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>I don&#8217;t know about you, but the last thing I want to have to do during a server OS upgrade is drive all around the state to go hit &#8220;enter&#8221; on a console or something.  If I can&#8217;t do it remotely, I don&#8217;t want to do it!  So my intention here is just to document a possible remote upgrade method, clean up some typos, and so forth.  Please note that I have followed this procedure a good handful of times, and have had great success with it so far.  If you follow this procedure, make sure to drop a comment and let me know how it went.</p>
<p>And for heaven&#8217;s sake, if you don&#8217;t know what you&#8217;re doing, don&#8217;t do this!   Read it all through first, maybe test on a demo machine, etc&#8230;  Also, I hope it goes without saying that you&#8217;ll probably want to make use of the &#8220;<code>screen</code>&#8221; utility to do all this work&#8230;  More on <code>screen</code> another time&#8230;</p>
<p>Anyway, back to the task at hand&#8230;</p>
<p>First, patch your OES2-SP<strong>1</strong> system completely up-to-date with this:</p>
<pre><span style="font-size: xx-small;"><code>rug up -t patch -g security -g recommended OES2-SP1-Updates SLES10-SP2-Updates</code></span></pre>
<p>&#8230;but watch out for being prompted for the <a title="http://yourlinuxguy.com/?p=314" href="http://yourlinuxguy.com/?p=314" target="_blank">move-to-sles10-sp3 issue</a> !!  Reboot as needed.</p>
<p>Now a quick aside or two, right in the midst of things&#8230; If you have a crazy, complicated admin password, change it temporarily for this process.  Set it to &#8220;changeme&#8221;, or &#8220;temp123&#8243;, or anything without special characters.  You&#8217;ll thank me for it later, and it will work better when you create the &#8220;answer&#8221; file.  Also, please remember that if you have an SMT server, make sure to prepare the new channels you&#8217;ll need.  Oh, and if you have custom installation sources (like and ftp server or webserver with ISOs mounted on it or something), they&#8217;ll be useless in a few minutes anyway, so you may want to delete them now&#8230;</p>
<p>Then, assuming all patches are up to date, your server codes are valid, etc., etc., the first step of the process is to get the &#8220;update&#8221; patch in place:</p>
<pre><span style="font-size: xx-small;"><code>rug in -t patch move-to-oes2-sp2</code></span></pre>
<p>&#8230;you should not need to reboot here.</p>
<p>Now the box is mid-way between versions.  We can see that it needs its versioning and control packages (those that define what version it is to be) with this command:</p>
<pre><span style="font-size: xx-small;"><code>rug lu -t patch</code></span></pre>
<p>So now we need to continue to turn it into an extremely un-patched OES2sp<strong>2</strong> server, with this command:</p>
<pre><span style="font-size: xx-small;"><code>rug up -t patch -g recommended</code></span></pre>
<p>&#8230;and DO NOT REBOOT when prompted!   Because if you reboot now, you will need to physically be at the console screen to enter the eDirectory tree Admin password when prompted.   We don&#8217;t want that (unless you have HP Lights-out boards or something).  So, in order to create an answer file to automatically stuff the the Admin password in (remember, you changed it to something simple, right?), do the following:  In a shell session, as root,</p>
<pre><span style="font-size: xx-small;"><code>cd /root</code></span></pre>
<p>&#8230;to ensure the answer file is away from other users, since it will be created in your working directory.   Now create the answer file like this:</p>
<pre><span style="font-size: xx-small;"><code>yast create-answer-file [adminpassword]</code></span></pre>
<p>&#8230;of course, replacing &#8220;<code>[adminpassword]</code>&#8221; with your eDirectory Admin password.  Unfortunately, you must enter the password on the command line, then it re-displays it to you, so:</p>
<ol>
<li> make sure there are no eyes on the monitor other than yours while doing this, and</li>
<li>I strongly recommend that when you finish this session, you log back in and vi /root/.bash_history and remove the line with the admin password (so other users don&#8217;t see it later!)</li>
</ol>
<p>Now, copy it to where it needs to be:</p>
<pre><span style="font-size: xx-small;"><code>cp answer /opt/novell/oes-install/</code></span></pre>
<p>Now reboot:</p>
<pre><span style="font-size: xx-small;"><code>init 6</code></span></pre>
<p>When the server is back up and running, it will complete the update of all the OES-related services; this takes some time.  Once that&#8217;s done, you need to do a final round of patching with our brand-new updated channels:</p>
<pre><span style="font-size: xx-small;"><code>rug up -t patch -g security -g recommended OES2-SP2-Updates SLES10-SP3-Updates</code></span></pre>
<p>&#8230;and reboot if needed.   Oh, and some cleanup&#8230;  Delete the temp answer file:</p>
<pre><span style="font-size: xx-small;"><code>rm /opt/novell/oes-install/answer</code></span></pre>
<p>&#8230;And don&#8217;t forget to remove the answer file password line from your <code>/root/.bash_history</code>&#8230;  And change your Admin password again&#8230;</p>
<p>And as a final step, clean up your installation sources (<code>yast inst_source</code>) if you had custom ones.  And you&#8217;ll also need to re-add your &#8220;Add-On&#8221; source for the OES software;  it&#8217;s a requirement.  So one way to do it would be to run &#8220;<code>yast add-on</code>&#8221; , and walk through the steps of adding the URL to the source, ensuring all the patterns are listed (they should all be set to &#8220;Reconfigure is Disabled&#8221;).</p>
<p>And that&#8217;s it!   If all went well, you should now have a fully upgraded server.  Enjoy!</p>
<p> <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://yourLinuxGuy.com/?feed=rss2&amp;p=380</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Networking Technology Students Visit</title>
		<link>http://yourLinuxGuy.com/?p=570</link>
		<comments>http://yourLinuxGuy.com/?p=570#comments</comments>
		<pubDate>Fri, 28 May 2010 17:25:49 +0000</pubDate>
		<dc:creator>Jeremy Pavlov</dc:creator>
				<category><![CDATA[superfluous]]></category>

		<guid isPermaLink="false">http://yourLinuxGuy.com/?p=570</guid>
		<description><![CDATA[On May 4th of this year, we at Cavalier had a visit from a group of students from Lapeer County Intermediate School District, specializing in networking technology.  They had come for a tour of our technology, and related discussions. Now I know that the first image in your mind when you read that is a [...]]]></description>
			<content:encoded><![CDATA[<p>On May 4th of this year, we at Cavalier had a visit from a group of students from Lapeer County Intermediate School District, specializing in networking technology.  They had come for a tour of our technology, and related discussions.</p>
<p>Now I know that the first image in your mind when you read that is a blend of disaffected/bored and hyper/reckless teens running through the hall, or lighting stuff on fire, etc., right?  Wrong.  These students were well-behaved and attentive, and more importantly, inquisitive.  Of course, the bummer of the visit was that it was very brief (we *do* try to earn a living here <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  );  and even though they were watched and guarded closely, we could not take them to where the <em>really</em> cool stuff is, due to security concerns.</p>
<p>Unfortunately, I could not attend the entire mini-tour since I was busy on other things.  But I managed to join the group at the end when summaries were being given and questions were being taken.  And to me, that was probably the coolest part anyway;  because once the students relaxed a bit and starting asking questions, we all started to get the sense that this group was really absorbing what they saw, and was truly interested in what they are doing.</p>
<p>They asked questions that ran the gamut; about the validity of technical certifications, resume writing, the prevalence of older technology still in the workplace as tech generations change, honesty, human networking, volunteering, and so on.  The small group of Cavalier employees clearly got a kick out of it, and it was over all-too-soon.</p>
<p>After they all left, I was left with a strange feeling&#8230;  I clearly did not realize how much I would enjoy interacting with students <em>that are interested</em>, and I was left thinking I&#8217;d like to do it more.  Hmm.  Maybe volunteer to be a guest lecturer in school technical classes?  Maybe get involved in community technology groups?  Hmm.  Hmm&#8230;&#8230;</p>
<p>I want to thank Kelly R. and Terri W.  for bringing the kids&#8230; er&#8230; young adults&#8230; out for the visit.  And I want to thank the students for interacting, and making it fun;  remember gang, we all started somewhere, and you&#8217;ll all be well on your way if you apply focus and diligence.</p>
<p>It was a kick, and I really enjoyed it.</p>
<p> <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://yourLinuxGuy.com/?feed=rss2&amp;p=570</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iFolder 3.8 Change Local User Password Script&#8230;</title>
		<link>http://yourLinuxGuy.com/?p=561</link>
		<comments>http://yourLinuxGuy.com/?p=561#comments</comments>
		<pubDate>Mon, 17 May 2010 07:42:31 +0000</pubDate>
		<dc:creator>Jeremy Pavlov</dc:creator>
				<category><![CDATA[ifolder3]]></category>
		<category><![CDATA[intermediate]]></category>

		<guid isPermaLink="false">http://yourLinuxGuy.com/?p=561</guid>
		<description><![CDATA[If you have an iFolder 3.8 (and some previous versions) server, and you use the local database (instead of LDAP or what-not), then you may have run into a situation where you have to change a password for a regular user when that current password is not known. Of course, if the user *knows* his [...]]]></description>
			<content:encoded><![CDATA[<p>If you have an iFolder 3.8 (and some previous versions) server, and you use the local database (instead of LDAP or what-not), then you may have run into a situation where you have to change a password for a regular user when that current password is not known.</p>
<p>Of course, if the user *knows* his or her own password, he or she can use the &#8220;settings&#8221; link in the iFolder Web Access page, or the &#8220;Security&#8221; menu item in the client interface.</p>
<p>But if the password is <em>UN</em>known, then you really have no choice but to do it on the command line of the iFolder server.  The problem with that, however, is that in order to do that on the command line, you&#8217;ll need to enter both the admin credentials and the user&#8217;s new credentials as well&#8230; which is never a good idea to do, since that will sit in the command history by default, etc.  Besides, who wants to memorize that crazy string anyway?</p>
<p>So, here&#8217;s a tiny little favor for you&#8230;  I stuffed it all into a tiny little helper script that you can have.  Just paste these contents into a script, do a chmod +x to make it executable, and away you go.  it will prompt you for admin password, username to change, and the new password for that user.</p>
<p>I hope it helps!  Here you go&#8230;</p>
<pre><code>#!/bin/bash
clear
echo ""
echo "This is the user password change tool for iF3..."
echo ""
echo "Please enter the admin password: "
echo ""
read ADMINPW
clear
echo ""
echo "Please enter the username for which you are changing the password: "
echo ""
read USERNAME
clear
echo ""
echo "Please enter the new password for $USERNAME (careful with crazy special characters): "
echo ""
read USERPW
clear
echo ""
echo "Processing..."
echo ""
# For 32 bit...
/usr/bin/mono /usr/lib/simias/bin/UserCmd.exe setpwd --url http://localhost --admin-name admin --admin-password $ADMINPW --user $USERNAME --password $USERPW
# For 64 bit...
#/usr/bin/mono /usr/lib64/simias/bin/UserCmd.exe setpwd --url http://localhost --admin-name admin --admin-password $ADMINPW --user $USERNAME --password $USERPW
echo ""
# I know the exit codes from mono are of no real value, but oh well...
if [ "$?" -eq "0" ];then
echo "If the exit message reads: \"Failed - Invalid admin credentials\", the password for $USERNAME was not changed. "
echo "If the exit message reads: \"SetPassord for $USERNAME - False\", then $USERNAME might not exist in the system. "
echo "If the exit message reads: \"SetPassord for $USERNAME - True\", then the password for $USERNAME is now changed!"
else
echo "...The script encountered a problem! Exiting..."
exit 0
fi
echo ""
echo "...Done!"</code></pre>
<p> <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://yourLinuxGuy.com/?feed=rss2&amp;p=561</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>The LPI, Certification De-Activation, and Disincentivization&#8230;</title>
		<link>http://yourLinuxGuy.com/?p=557</link>
		<comments>http://yourLinuxGuy.com/?p=557#comments</comments>
		<pubDate>Mon, 03 May 2010 06:25:01 +0000</pubDate>
		<dc:creator>Jeremy Pavlov</dc:creator>
				<category><![CDATA[superfluous]]></category>

		<guid isPermaLink="false">http://yourLinuxGuy.com/?p=557</guid>
		<description><![CDATA[I really wanted to get the LPI-3 certification (note the past tense).  It really looked like fun;  it&#8217;s got a whole bunch of hard-core stuff about OpenLDAP and such, which I love and I&#8217;m way in to.  Unfortunately, a great disincentive has appeared.  First, some background&#8230; I achieved the LPI Level 1 certification on 2004-01-30. [...]]]></description>
			<content:encoded><![CDATA[<p>I really wanted to get the LPI-3 certification (note the past tense).  It really looked like fun;  it&#8217;s got a whole bunch of hard-core stuff about OpenLDAP and such, which I love and I&#8217;m way in to.  Unfortunately, a great disincentive has appeared.  First, some background&#8230;</p>
<p>I achieved the LPI Level 1 certification on 2004-01-30.</p>
<p>When I took the LPI-1 tests back in early 2004, they had a promise of perpetual certification.  They were the only certification I had heard of doing that.  Perhaps they later thought better of it, because they eventually removed that standard, and instead set time limits on all new certifications, and imposed an expiry (of 5 years after last certification) on all existing ones.  Of course, I do not begrudge them any of those later actions;  it is arguable that the highly relaxed initial standard was more than a bit short-sighted, and the result of an eager new organization.</p>
<p>I achieved the LPI Level 2 on 2005-04-09.</p>
<p>The LPI-3 didn&#8217;t exist back when I got the LPI-2&#8230;  back when I had lots of time on my hands.  When the LPI-3 was formulated, I watched it evolve, monitoring the news when I could, trying to hatch a plan when I could go get it.  It was released to the public in 2007.  I had heard the news that they were going to remove the &#8220;lifetime&#8221; certification, but then time just went by too fast for me to prepare for the LPI-3.  Life happens.  I&#8217;m not looking for sympathy, my life is great;  busy, and great&#8230;</p>
<p>During that window, it would not have made logical sense (in fact, it seems wasteful) for me to have re-taken one of the tests for an LPI level for which I was already certified in order to re-certify.  I figured there would be plenty of time.  But as the window was closing, I looked much more closely into the requirements, and realized I was un-prepared to take the LPI-3 test.  And due to the limited re-take policy, my limited resources, and the fact that I&#8217;m not the type to do things un-prepared, I declined to take the LPI-3 test(s) as the last days of my window passed.</p>
<p>My LPI-1 and LPI-2 certifications have been moved to an &#8220;inactive&#8221; state on 2010-04-09.</p>
<p>This is because of that aforementioned expiry, and the fact that I have taken not taken any LPI test (to re-certify) since I achieved my LPI-2 certification in 2005.  Again, I can&#8217;t blame them a bit.  It&#8217;s been a while, and they would like to maintain current, fresh standards.</p>
<p>But here&#8217;s the problem:  By rule (and yes, I confirmed with an LPI official), because I didn&#8217;t get completely certified as an LPI-3 before the threatened expiry, in order to achieve the the LPI-3 at this point I must re-certify at ALL LEVELS of the LPI.  This means that <em>in order to be permitted to take and pass the tests for the LPI-3</em>, I must <em>re-take and re-pass all the tests</em> necessary to re-acquire the LPI-1 (two passed tests) and the LPI-2 (two more passed tests), just to arrive right back where I was before 2010-04-09.</p>
<p>There is no tiered &#8220;grandfather&#8221; type clause.  There&#8217;s no &#8220;refresher&#8221;.  There is no &#8220;catch-up&#8221; or &#8220;make-up&#8221;.  Apparently, there is no sympathy for the additional effort, just time from the last certification&#8230;</p>
<p>As a result, it seems to me that the more time and money you invest in the LPI, the more you stand to lose in the event of expiry.</p>
<p>That&#8217;s not just dis-incentivization, it&#8217;s a smack-down.</p>
<p>Now I think I&#8217;m glad I didn&#8217;t get the LPI-3, because since there&#8217;s no LPI-4 now, my LPI-3 would be expiring shortly anyway, then I&#8217;d just have to do it all over again if they ever did make the LPI-4&#8230;</p>
<p>8|</p>
]]></content:encoded>
			<wfw:commentRss>http://yourLinuxGuy.com/?feed=rss2&amp;p=557</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How can I renew my Centos/Apache SSL certificate?</title>
		<link>http://yourLinuxGuy.com/?p=547</link>
		<comments>http://yourLinuxGuy.com/?p=547#comments</comments>
		<pubDate>Mon, 19 Apr 2010 06:14:03 +0000</pubDate>
		<dc:creator>Jeremy Pavlov</dc:creator>
				<category><![CDATA[apache]]></category>
		<category><![CDATA[centOS]]></category>
		<category><![CDATA[intermediate]]></category>
		<category><![CDATA[openSsl]]></category>

		<guid isPermaLink="false">http://yourLinuxGuy.com/?p=547</guid>
		<description><![CDATA[I got this question the other day from a Centos administrator: &#8220;The certwatch tool has been sending the me an email warning me that I need to renew the SSL Certificate. What do I do?&#8221; The email message read like the following (names have been changed): ################# SSL Certificate Warning ################ Certificate for hostname 'www.yourlinuxguy.com', [...]]]></description>
			<content:encoded><![CDATA[<p>I got this question the other day from a Centos administrator: &#8220;<em>The <code>certwatch</code> tool has been sending the me an email warning me that I need to renew the SSL Certificate. What do I do</em>?&#8221;</p>
<p>The email message read like the following (names have been changed):</p>
<p><code>################# SSL Certificate Warning ################</code></p>
<p><code>Certificate for hostname 'www.yourlinuxguy.com', in file:<br />
/etc/pki/tls/certs/www.yourlinuxguy.com.cert<br />
</code><br />
<code>The certificate needs to be renewed; this can be done<br />
using the 'genkey' program.</code></p>
<p><code>Browsers will not be able to correctly connect to this<br />
web site using SSL until the certificate is renewed.<br />
</code><br />
<code>##########################################################<br />
Generated by certwatch(1)</code></p>
<p>The administrator had searched the Internet, and found mostly impolite messages from youngsters about reading the docs.  Accurate, perhaps, but not too helpful.  This person&#8217;s server was not using a public Certificate Authority (CA); just a local one on the box itself (as is common practice in development environments).  If you don&#8217;t understand all that, it will make more sense as we go on&#8230;</p>
<p>First I want to clarify a couple things.  When you run the <code>genkey</code> tool, you are actually doing what the name suggests;  generating a new key pair (public/private), from which the certificate is formulated.  Technically, you are not *renewing* the certificate as the <code>certwatch</code> warning message implies, but that&#8217;s okay (it *is* possible in some situations to &#8220;renew&#8221; a certificate based on an existing key pair, but that&#8217;s not important right now).  The <code>genkey</code> tool makes it so easy and convenient that it is just easier this way.  Remember that a certificate is nothing but a public key that is &#8220;stamped&#8221; with approval by a CA.  In this case, the CA is you, too.  Not exactly a trusted hierarchy, but there you go&#8230;</p>
<p>So to cut to the chase, it&#8217;s really easy.  Here&#8217;s basically what you need to do:  1.) run the tool, and  2.) validate your SSL settings in your <code>httpd.conf</code>.</p>
<p><strong>Run The Tool</strong></p>
<p>At this point, you may or may not want to make a backup of your cert files&#8230;  This is up to you&#8230;  You can do that with something like this command (of course, your mileage may vary):</p>
<p><code>cp -av /etc/pki/tls /etc/pki/tls.bak</code></p>
<p>If you just run the <code>genkey</code> tool without specifying the certificate lifetime, it defaults to something like 30 days.  Let&#8217;s try something a little longer; like 4 years.  Now just specify your hostname on the command line:</p>
<p><code>genkey --days 1460 www.yourlinuxguy.com</code></p>
<p>&#8230;this will launch an interactive tool to do things like generate the random data, make the key pair, and walk you through specifying the content of the certificate (Country, Location, etc.).  It will place the new stuff in some default location, and at the end of the process, tell you where it all is.  You should take note of the location, but it will likely be what I mentioned above for the backup.</p>
<p><strong>Validate Your SSL Settings</strong></p>
<p>Now, theoretically, you should be able to restart your Apache daemon.  However, you might have used custom names or locations for your certificate files in the past, so you might want to check to be sure they match the SSL settings in your Apache config files.  Of course it&#8217;s hard for me to tell you where those settings are, since it&#8217;s so easy to customize Apache; but here&#8217;s a good way to find the two most important values:</p>
<p><code>cd /etc/httpd<br />
egrep -R -e "SSLCertificateKeyFile" -e "SSLCertificateFile" *</code></p>
<p>&#8230;and that will likely return results from a file called &#8220;<code>ssl.conf</code>&#8221; or something like that.  Edit the config file if necessary;  just make sure the values match the place that the <code>genkey</code> tool placed the new private key and cert file, and you should be good.</p>
<p>Now, you can restart Apache&#8230;</p>
<p><code>/etc/init.d/httpd restart</code></p>
<p>&#8230;and you&#8217;re done!  I hope that helps&#8230;</p>
<p> <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://yourLinuxGuy.com/?feed=rss2&amp;p=547</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PC name discovery on a local network</title>
		<link>http://yourLinuxGuy.com/?p=526</link>
		<comments>http://yourLinuxGuy.com/?p=526#comments</comments>
		<pubDate>Mon, 05 Apr 2010 06:06:54 +0000</pubDate>
		<dc:creator>Jeremy Pavlov</dc:creator>
				<category><![CDATA[advanced]]></category>
		<category><![CDATA[linuxGeneral]]></category>
		<category><![CDATA[nmap]]></category>
		<category><![CDATA[nmblookup]]></category>

		<guid isPermaLink="false">http://yourLinuxGuy.com/?p=526</guid>
		<description><![CDATA[Here&#8217;s a fun one for you.  I had a situation recently where the customer had some of his windows PCs properly being populated in his reverse DNS zone (in an AD-controlled environment), and some that were not.  He asked me to quickly scan the network and figure out which were which (before we started to [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a fun one for you.  I had a situation recently where the customer had some of his windows PCs properly being populated in his reverse DNS zone (in an AD-controlled environment), and some that were not.  He asked me to quickly scan the network and figure out which were which (before we started to look into the &#8220;why&#8221; part).  <em>Note that for the examples that follow, the customer&#8217;s fictitious network address is good ol&#8217; 192.168.1.0/24, and the commands were tested with the default packages on Opensuse 11.1 and 11.2.</em></p>
<p>So first, I had to find those that <em>are</em> in the reverse DNS zone&#8230; So I simply made sure my PC points to the correct internal DNS server that is authoritative for the forward and reverse DNS zones, and then ran a sweep with some filtering:</p>
<pre><code>nmap -sP 192.168.1.0/24 |grep -v "^Host 192\.168\.1"|grep "^Host"|awk '{ print $2,$3 }'</code></pre>
<p>Then, in order to get the local netbios name for Windows computers that <em>aren&#8217;t</em> in reverse dns , I came up with this:</p>
<pre><code>for item in `nmap -sP 192.168.1.0/24|awk '{ print $2 }'|grep "^192\.168\.1"`;do thingy=`nmblookup -A $item|grep "<20>"|awk '{ print $1 }'`;echo $thingy \($item\);done</code></pre>
<p>&#8230;of course, non-Windows computers and devices without netbios will simply not respond to the query.  It might be neater to dump the output to file and such if you wish, but I didn&#8217;t bother. I&#8217;m just keeping it simple here.</p>
<p>Note that the above does not take in to account if there are <em>multiple</em> reverse DNS entries per PC. If you need to know that, you could do something like this:</p>
<pre><code>for item in `nmap -sP 192.168.1.0/24 |grep -v "^Host 192\.168\.1" |grep "^Host"|awk '{ print $3 }'|sed s/[\(,\)]//g`; do nslookup $item|grep "name =";echo "";done</code></pre>
<p>&#8230;and so on.  You could really go crazy with this sort of thing&#8230;  It can also be handy if you are in an environment where you don&#8217;t have access to the DNS/DHCP administration tools, but want to see what&#8217;s out there&#8230;.  Now wasn&#8217;t that fun?</p>
<p> <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://yourLinuxGuy.com/?feed=rss2&amp;p=526</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>eDirectory Backup / Restore Cheat-Sheet</title>
		<link>http://yourLinuxGuy.com/?p=518</link>
		<comments>http://yourLinuxGuy.com/?p=518#comments</comments>
		<pubDate>Mon, 15 Mar 2010 06:04:00 +0000</pubDate>
		<dc:creator>Jeremy Pavlov</dc:creator>
				<category><![CDATA[intermediate]]></category>
		<category><![CDATA[ndsbackup]]></category>
		<category><![CDATA[oesLinux]]></category>

		<guid isPermaLink="false">http://yourLinuxGuy.com/?p=518</guid>
		<description><![CDATA[Here&#8217;s a quick cheat-sheet on how to do fast backup of your eDirectory tree from an OES Linux server.  While we&#8217;re at it, we&#8217;ll do a quick restore of an object. First, let&#8217;s back it up!  Let&#8217;s grab the whole tree: ndsbackup cvf /tmp/ndsbackup-treeRoot.bak [Root] &#8230;note that you will be prompted for the admin user [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a quick cheat-sheet on how to do fast backup of your eDirectory tree from an OES Linux server.  While we&#8217;re at it, we&#8217;ll do a quick restore of an object.</p>
<p>First, let&#8217;s back it up!  Let&#8217;s grab the whole tree:</p>
<pre><code>ndsbackup cvf /tmp/ndsbackup-treeRoot.bak [Root]</code></pre>
<p>&#8230;note that you will be prompted for the admin user credentials, and by specifying the &#8220;[Root]&#8221; object, it will grab every single object in the tree and put it in the specified file.</p>
<p>Now, let&#8217;s get a little fancier:</p>
<pre><code>ndsbackup cvf /tmp/ndsbackup.`date +%Y%m%d%H%M`.bak -a admin.corp [Root]</code></pre>
<p>&#8230;here we are adding a date stamp to the output file, and giving it the admin username.   It will still prompt for the admin password, of course.   There are tricks to handle that, too, but this is good enough to get the point across.</p>
<p>If you want to see what&#8217;s in your backup file:</p>
<pre><code>ndsbackup tf /tmp/ndsbackup.201003051421.bak</code></pre>
<p>Make sure to copy that backup file off the server somewhere, somehow.  In reality, you might actually be writing the result directly to an <code>nfs</code> or <code>samba</code> share or something anyway, but the point is to get the data off the box for safety.</p>
<p>So let&#8217;s imagine a week goes by, and whoops&#8230; you deleted someone accidentally.  Don&#8217;t worry!  Because all you have to do to restore that user object is to put the file back on the filesystem where you can reach it, and do something like this&#8230;</p>
<p>To restore just that user you deleted:</p>
<pre><code>ndsbackup wxvf /tmp/ndsbackup.201003051421.bak -a admin.corp cn=duser.ou=Users.o=corp</code></pre>
<p>Or, plow in the whole container if you accidentally wiped it all out:</p>
<pre><code>ndsbackup wxvf /tmp/ndsbackup.201003051421.bak -a admin.corp ou=Users.o=corp</code></pre>
<p>&#8230;If you wish, you can remove the &#8220;<code>w</code>&#8221; from the above restore examples if you don&#8217;t want to be prompted to confirm for each object.  However, I tend to think the &#8220;<code>w</code>&#8221; is a good idea&#8230;</p>
<p>That&#8217;s all for now.  Of course, there are tons more options for <code>ndsbackup</code> if you look in the man page, but I&#8217;m not going in to that, because after all, this *is* a cheat sheet&#8230;</p>
<p> <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://yourLinuxGuy.com/?feed=rss2&amp;p=518</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How to gather and send support info on a Suse system&#8230;</title>
		<link>http://yourLinuxGuy.com/?p=442</link>
		<comments>http://yourLinuxGuy.com/?p=442#comments</comments>
		<pubDate>Mon, 01 Mar 2010 06:43:41 +0000</pubDate>
		<dc:creator>Jeremy Pavlov</dc:creator>
				<category><![CDATA[introductory]]></category>
		<category><![CDATA[supportconfig]]></category>
		<category><![CDATA[suse]]></category>

		<guid isPermaLink="false">http://yourlinuxguy.com/?p=442</guid>
		<description><![CDATA[To help someone (like me, for instance) remotely diagnose your Suse system, sometimes you need to send him or her diagnostic info from that system.  Fortunately, Suse has a toolset called &#8220;supportutils&#8221; to do just that.  This article outlines one of my preferred ways of generating and sending such info.  Note that the examples in [...]]]></description>
			<content:encoded><![CDATA[<p>To help someone (like me, for instance) remotely diagnose your Suse system, sometimes you need to send him or her diagnostic info from that system.  Fortunately, Suse has a toolset called &#8220;<code>supportutils</code>&#8221; to do just that.  This article outlines one of my preferred ways of generating and sending such info.  Note that the examples in this article are targeted toward my existing customers, but you can obviously change the examples to suit.  Or, you can *become* a customer&#8230;  <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>First, <code>su</code> to <code>root</code>, and check to see if the support utilities and <code>sysstat</code> package are installed:</p>
<pre><code>zypper se sysstat supportutils </code></pre>
<p>&#8230;if the result for each has an &#8220;i&#8221; (for &#8220;installed&#8221;) at the far left of the package, it is already installed.  Otherwise, if the package(s) are not already installed, run this to install the <code>sysstat</code> package and the support utilities included with your Suse distro:</p>
<pre><code>zypper in sysstat supportutils</code></pre>
<p>Or, if you wish to run the latest version of the <code>supportutils</code> package (see &#8220;comment&#8221; below about versions), run this to install/upgrade to the latest version at the time of this writing:</p>
<pre><code>rpm -Uvh http://download.opensuse.org/repositories/Novell:/NTS/SLE_10/noarch/supportutils-1.20-1.1.noarch.rpm</code></pre>
<p>(Please see the Supportutils project page at <a title="http://en.opensuse.org/Supportutils" href="http://en.opensuse.org/Supportutils" target="_blank">http://en.opensuse.org/Supportutils</a> for the latest info and versions.)</p>
<p>COMMENT:  Unfortunately, I have discovered that the info collection part of some modules seems to be broken on some versions; I&#8217;m not sure why.  You&#8217;ll know they need to be skipped if you run the tool and it hangs for a long time.  I&#8217;ve seen the DNS module hang on most systems with the older package, the SYSFS module hang on Opensuse with the latest version, the NSS modules hang on OES servers, and so forth.  Personally, and take this for what it&#8217;s worth, I like the distro-provided supportutils package on OpenSuse, and the latest download-able on available for SLES10 and/or OES servers&#8230; all with the caveats, of course&#8230;</p>
<p>So, to get around the sticking/hanging problem, we need to modify the configuration file to skip the info collection for those modules that get stuck  (of course, it is also possible that you want to modify the config file to exclude certain things for other reasons, as well).  For this example, I disable the DNS info collection (which has since been repaired in newer versions).  You can do it interactively with vi or gedit like this:</p>
<pre><code>vi /etc/supportconfig.conf</code></pre>
<p>&#8230;(or via gui, gedit /etc/supportconfig.conf) and change this line:</p>
<pre><code>OPTION_DNS=1</code></pre>
<p>&#8230;to&#8230;</p>
<pre><code>OPTION_DNS=0</code></pre>
<p>&#8230;or do it non-interactively with this example command set:</p>
<pre><code>mv /etc/supportconfig.conf /etc/supportconfig.conf.bak
sed s/OPTION_DNS\=1/OPTION_DNS\=0/ /etc/supportconfig.conf.bak &gt; /etc/supportconfig.conf</code></pre>
<p>Now back to the program; whether you upgraded, modified the config file, or not&#8230;.</p>
<p>Next, create the output with this command:</p>
<pre><code>supportconfig</code></pre>
<p>When completed, it gives you a nice info summary.  One of the first lines in the summary is the resulting tar ball file size.  If it is reasonably small, like under 10MB, feel free to send it to me via email it to me this way (if it is larger than 10MB, I can provide an alternate method of delivery):</p>
<pre><code>echo "See attached." | mailx -a /var/log/nts</code>*`date +%y%m%d_%H`*.tbz<code> -s "Support Config file from $HOSTNAME" jpavlov@yourLinuxGuy.com</code></pre>
<p>&#8230;Note that the above command will send all of the result files that were generated in the current hour; you can take off the &#8220;%H&#8221; if the file you wish to send was generated in a different clock hour.</p>
<p>If you&#8217;re curious, when I get it, I download from my email and unzip it in a temp directory for review:</p>
<pre><code>cd /tmp/support
tar -jxvf nts_lt1101010_100106_1010.tbz</code></pre>
<p>And that&#8217;s it!   I hope it helps.   And, I hope I can help you&#8230;<br />
 <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://yourLinuxGuy.com/?feed=rss2&amp;p=442</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why can&#8217;t I unmount my mount?</title>
		<link>http://yourLinuxGuy.com/?p=349</link>
		<comments>http://yourLinuxGuy.com/?p=349#comments</comments>
		<pubDate>Thu, 18 Feb 2010 07:54:22 +0000</pubDate>
		<dc:creator>Jeremy Pavlov</dc:creator>
				<category><![CDATA[intermediate]]></category>
		<category><![CDATA[linuxGeneral]]></category>
		<category><![CDATA[lsof]]></category>

		<guid isPermaLink="false">http://yourlinuxguy.com/?p=349</guid>
		<description><![CDATA[This basic (re-worded) question came in from Jeff: &#8220;Why won&#8217;t my remote filesystem mount unmount when I try the umount command?&#8221; It&#8217;s very true:  If you try to umount (unmount) a filesystem that is currently being accessed, it will not let you do it.  And it will tell you something like, &#8220;umount: /media/ncp: device is [...]]]></description>
			<content:encoded><![CDATA[<p>This basic (re-worded) question came in from Jeff: &#8220;<em>Why won&#8217;t my remote filesystem mount unmount when I try the <code>umount</code> command?</em>&#8221;</p>
<p>It&#8217;s very true:  If you try to <code>umount</code> (unmount) a filesystem that is currently being accessed, it will not let you do it.  And it will tell you something like, &#8220;<code>umount: /media/ncp: device is busy</code>&#8220;.  What causes this?  Well, it&#8217;s likely to be one of two things:</p>
<ol>
<li>You have (or someone else has) <code>cd</code>&#8216;d onto the remote filesystem and are currently at or below the mount point root</li>
<li>You are running an application that has a file open on that mount point</li>
</ol>
<p>To mitigate item #1 above (if you are the guilty party, not someone else), just <code>cd</code> to the filesystem root (like <code>cd /</code>), or some other place you know is not on the mount point (like <code>cd /tmp</code>).  Then you can run your <code>umount</code> command.</p>
<p>Solving item #2 above is perhaps a tad more tricky.  Of course, if you have a suspicion or direct knowledge of the guilty app, then you can just stop it.  Sometimes doing this:</p>
<p><code>ps -ef | grep </code><br />
&#8230;or&#8230;<br />
<code>ps aux |grep </code></p>
<p>&#8230;will show the process and any files it accessed by the startup command.</p>
<p>Either way, my favorite way to check for both item #1 and #2 above is to use <code>lsof</code>.  This utility will list *every* file that the system has a hold on.  And this is essential because after all, we know that Linux is nothing but a bunch of files, right?</p>
<p>So here&#8217;s what I like to do, for example:</p>
<p><code>lsof| grep "/media"</code></p>
<p>&#8230; this will show you if anyone or anything is currently sitting on the mountpoint (of course, change your mountpoint to suit, be it <code>/media</code>, <code>/mnt</code>, <code>/export</code>, whatever).  If it shows anything, you can see who or what is at fault, and tell them to get off it, or kill them (I mean the app, jeez&#8230;).  If you really need to see the headers of the columns, you can do a double-run for cosmetic purposes that will run once for just the header, then again to grab your detail, like this:</p>
<p><code>lsof |head -1;lsof| grep "/media"</code></p>
<p>Another way is to use the <code>fuser</code> command, referencing your mount point.  Here&#8217;s my favorite set of flags in an example:</p>
<p><code>fuser -uv /media/ncp</code></p>
<p>I hope that helps!</p>
<p> <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://yourLinuxGuy.com/?feed=rss2&amp;p=349</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to configure a USB attached serial port on Linux</title>
		<link>http://yourLinuxGuy.com/?p=498</link>
		<comments>http://yourLinuxGuy.com/?p=498#comments</comments>
		<pubDate>Fri, 12 Feb 2010 02:53:11 +0000</pubDate>
		<dc:creator>Jeremy Pavlov</dc:creator>
				<category><![CDATA[introductory]]></category>
		<category><![CDATA[minicom]]></category>
		<category><![CDATA[opensuse11.2]]></category>

		<guid isPermaLink="false">http://www.yourlinuxguy.com/?p=498</guid>
		<description><![CDATA[Recently I came out of the 1990&#8242;s, and moved to an IBM laptop that does not have a serial port&#8230; Gasp! Of course, this is not a big deal to alot of people, but I&#8217;m a server guy.  I do terminal sessions to Sun/Solaris servers and Cisco routers and such;  I really can&#8217;t live without [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I came out of the 1990&#8242;s, and moved to an IBM laptop that <em>does not have a serial port</em>&#8230;  Gasp!</p>
<p>Of course, this is not a big deal to alot of people, but I&#8217;m a server guy.  I do terminal sessions to Sun/Solaris servers and Cisco routers and such;  I really can&#8217;t live without a serial port.  So I basically had 2 options:</p>
<ol>
<li>Go back to my old latop (nope, no way, nahgahdah)</li>
<li>Get a USB attached serial port</li>
</ol>
<p>&#8230;so after reading a ton of reviews at NewEgg.com, I finally settled on the <a title="http://www.newegg.com/Product/Product.aspx?Item=N82E16812339013" href="http://www.newegg.com/Product/Product.aspx?Item=N82E16812339013" target="_blank">CABLES UNLIMITED USB-2920 USB 2.0 to Serial DB9 Adapter</a>.  At the time I bought it, it was on sale and had a shipping special.  But at the time of this writing it is $16.99.  &#8230;Still not bad, really.</p>
<h3>First, Windows</h3>
<p>As it happens, when I first bought it, I connected it to my laptop, and I fired up a Windows XP guest in VMWare Server 2 on my Opensuse 11.2, and &#8220;virtually&#8221; connected the USB to the XP guest (can&#8217;t do *that* in ESX&#8230; nyah, nyah).  The driver installation in Windows was a little weird,  since the driver installation was a little language-challenged&#8230;  But if you know what you&#8217;re doing, you can get it done.  Once it was all set up in Windows, it was easy to use in Hyper Terminal and Putty, and it really worked perfectly.</p>
<h3>Then, Linux</h3>
<p>A few days later, I needed to do a serial connection again.  This time I didn&#8217;t feel like firing up my VM guest, so decided to stop playing around, and configure it natively in Linux for use in minicom.  Here&#8217;s where it gets good&#8230;  It is sooooo easy to setup in Opensuse, and I hope/assume it is nearly as easy in other distros, though I&#8217;ve not tested it.  Here&#8217;s basically what I did:</p>
<p>Step 1:  Plug into adapter into USB port</p>
<p>Step 2:  Launch <code>minicom -s</code> (to enter configuration)</p>
<p>Step 3:  Configure the port as /dev/ttyUSB0  (that&#8217;s a zero, though it could be a 1 on yours if you have multiple), and save as &#8220;dfl&#8221; (default)</p>
<p>Step 4:  Enjoy!</p>
<p>I hope this helps&#8230;</p>
<p> <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://yourLinuxGuy.com/?feed=rss2&amp;p=498</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How can I disable the firewall on SLES?</title>
		<link>http://yourLinuxGuy.com/?p=468</link>
		<comments>http://yourLinuxGuy.com/?p=468#comments</comments>
		<pubDate>Mon, 01 Feb 2010 06:32:06 +0000</pubDate>
		<dc:creator>Jeremy Pavlov</dc:creator>
				<category><![CDATA[introductory]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[suse]]></category>
		<category><![CDATA[susefirewall2]]></category>

		<guid isPermaLink="false">http://yourlinuxguy.com/?p=468</guid>
		<description><![CDATA[Believe it or not, there are valid reasons why you might want to disable the firewall service on a Suse Linux Enterprise Server (SLES).  For instance, avoiding NCP time-outs on client connections for an OES/SLES server.  If you just want to know how to disable the firewall in most modern incarnations of SLES, read on&#8230; [...]]]></description>
			<content:encoded><![CDATA[<p>Believe it or not, there are valid reasons why you might want to disable the firewall service on a Suse Linux Enterprise Server (SLES).   For instance, avoiding NCP time-outs on client connections for an OES/SLES server.  If you just want to know how to disable the firewall in most modern incarnations of SLES, read on&#8230;</p>
<p>The examples given here are assuming you are remote to the server.  Of course, you could do all of this locally on the console, or adapt my instructions to the gui &#8220;Yast2&#8243;, but I&#8217;m going non-gui here for simplicity.</p>
<p>First, shell into the box, and <code>su</code> to <code>root</code>.</p>
<h3>Method 1:</h3>
<p>Launch the Yast non-gui firewall module:<br />
<code>yast firewall</code></p>
<p>To change to startup setting to &#8220;Manually&#8221;:<br />
&#8220;<code>Alt + m</code>&#8221;</p>
<p>Optionally, to stop the service right now if running:<br />
&#8220;<code>Alt + t</code>&#8221;</p>
<p>To complete the change:<br />
&#8220;<code>Alt + n</code>&#8221;</p>
<p>To accept and finish:<br />
&#8220;<code>Alt + a</code>&#8221;</p>
<h3>Method 2:</h3>
<p>To disable the service at next startup:<br />
<code>chkconfig SuSEfirewall2_setup off</code></p>
<p>Optionally, to stop the service right now if running:<br />
<code>rcSuSEfirewall2 stop</code></p>
<p>I hope that helps!   Now, if you want to argue about how one should never disable the firewall, drop me a line&#8230;</p>
<p> <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://yourLinuxGuy.com/?feed=rss2&amp;p=468</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How I fixed my Openfiler 2.3 server, after updates broke it&#8230;</title>
		<link>http://yourLinuxGuy.com/?p=470</link>
		<comments>http://yourLinuxGuy.com/?p=470#comments</comments>
		<pubDate>Tue, 26 Jan 2010 20:01:11 +0000</pubDate>
		<dc:creator>Jeremy Pavlov</dc:creator>
				<category><![CDATA[advanced]]></category>
		<category><![CDATA[mkinitrd]]></category>
		<category><![CDATA[openfiler]]></category>

		<guid isPermaLink="false">http://yourlinuxguy.com/?p=470</guid>
		<description><![CDATA[This article is written in a story-like retrospective fashion.  (Update, 20100128, morning: Now with a happy ending! See below&#8230;)  It&#8217;s a chain of events that took me from a happy Openfiler user, to and extremely angry Openfiler user, to a cautious Openfiler user.  So let&#8217;s begin.  &#8220;It was a dark and stormy night&#8230;&#8221; It had [...]]]></description>
			<content:encoded><![CDATA[<p><em>This article is written in a story-like retrospective fashion.  (<span style="color: #993300;">Update, 20100128, morning: Now with a happy ending! See below&#8230;</span>)  It&#8217;s a chain of events that took me from a happy Openfiler user, to and extremely angry Openfiler user, to a cautious Openfiler user.  So let&#8217;s begin.  &#8220;It was a dark and stormy night&#8230;&#8221;</em></p>
<p>It had been almost a year since I patched my Openfiler 2.3 server, and some significant updates had been released in that time.  So after planning an outage window, I set out to apply the queued batch of updates (including <code>mkinitrd</code> and a <code>kernel</code> or two, more on that later).  It seemed such a simple task&#8230;.</p>
<p>After the patches were applied, the Openfiler server would not boot.  Instead, it spewed out more errors than I could read to the console, ending with a kernel panic.</p>
<p>So I booted to the Openfiler install cdrom, and entered rescue mode with &#8220;<code>linux rescue</code>&#8220;.  Fortunately, it discovered and mounted all my partitions, and I was able to run with networking in order to reach the package sources or other sources/destinations if I should need them.</p>
<p>I noticed that the errors I had seen on the console pointed me toward missing drivers in the <code>initrd</code>, so I started looking there.  While poking around, I think I noticed that the latest update bundle had re-compiled all my <code>initrd</code>&#8216;s in <code>/boot</code>. I&#8217;m not actually 100% sure about that now in hindsight, but it&#8217;s not important now.  Anyway, I de-constructed one of the <code>initrd</code>&#8216;s this way to see what was up:</p>
<p><code> </code></p>
<pre>mkdir /tmp/temp
cd /tmp/temp
cp /boot/initrd-2.6.29.6-0.15.smp.gcc3.4.x86_64.img initrd-2.6.29.6-0.15.smp.gcc3.4.x86_64.img.gz
gunzip initrd-2.6.29.6-0.15.smp.gcc3.4.x86_64.img.gz
cpio -i --make-directories &lt; initrd-2.6.29.6-0.15.smp.gcc3.4.x86_64.img
ls -l
ls -l lib/</pre>
<p>Hmm.  No drivers there.  Should be a bunch of <code>*.ko</code> files&#8230;  Hmm&#8230;</p>
<p>I decided to roll back;  so I ran <code>conary</code> to revert to the state before the update  (Run &#8220;<code>conary rblist</code>&#8221; to figure out the number of the point-in-time to which to roll back, then &#8220;<code>conary rollback (number)</code>&#8221; to actually do it.  See <a title="http://wiki.rpath.com/wiki/Conary:QuickReference" href="http://wiki.rpath.com/wiki/Conary:QuickReference" target="_blank">this wiki page</a> for details).</p>
<p>For some reason, this did not repair all my <code>initrd</code>&#8216;s, but it did seem to give me a working <code>mkinitrd</code> script (in hindsight, I did not think to analyze it or keep a copy of it&#8230; drat).  So I was now able to hand-build a working <code>initrd</code> for one of the <code>kernels</code> (the most recent before the update) with this command:</p>
<p><code> </code></p>
<pre>mv /boot/initrd-2.6.29.3-0.3.smp.gcc3.4.x86_64.img initrd-2.6.29.3-0.3.smp.gcc3.4.x86_64.img.bad
mkinitrd /boot/initrd-2.6.29.3-0.3.smp.gcc3.4.x86_64.img 2.6.29.3-0.3.smp.gcc3.4.x86_64</pre>
<p>And now, I was able to reboot into this <code>kernel</code> with my new working <code>initrd</code>&#8230;. and this time I made backups of it in my <code>/home</code> directory!</p>
<p>So I proceeded to re-apply the patches bit by bit.  I quickly realized that the dreaded <code>kernel</code> update was a requirement as part of the major Openfiler update, so it came back with the re-run of the last few updates anyway.  But this time, I was ready.  I modified the <code>/boot/grub/menu.lst</code> to use my old trusty <code>kernel</code> and <code>initrd</code>, (<code>default=1</code>), and make sure my hand-made <code>initrd</code> was in place.  Ok, good.  Reboot.  Right.</p>
<p>Back up in my older <code>kernel</code> (phew!), but with my newer <code>kernel</code> installed, I troubleshot&#8230;  I tried to build my own <code>initrd</code> against the new <code>kernel</code>, but I kept getting errors like this for each needed module:</p>
<p><code> </code></p>
<pre>/usr/bin/strip: /lib/modules/2.6.29.6-0.15.smp.gcc3.4.x86_64/./kernel/drivers/rtc/rtc-lib.ko: File format not recognized</pre>
<p>I dove in to the <code>/sbin/mkinitrd</code> and found the cause.  There are some lines in an &#8220;<code>if</code>&#8221; block that optionally call &#8220;<code>strip</code>&#8221; if present, and that is where it seems to err out.  If &#8220;<code>strip</code>&#8221; is not present, it just copies the module, like I want.  Hmm.  I don&#8217;t know if <code>strip</code> was there before or not, or if the <code>mkinitrd</code> suddenly has this new &#8220;<code>if</code>&#8221; block, and I don&#8217;t care.  I commented it out to look like this:</p>
<p><code> </code></p>
<pre>for MODULE in $MODULES; do
#    if [ -x /usr/bin/strip ]; then
#        /usr/bin/strip -g $verbose /lib/modules/$kernel/$MODULE -o $MNTIMAGE/lib/$(basename $MODULE)
#    else
cp $verbose -a /lib/modules/$kernel/$MODULE $MNTIMAGE/lib
#    fi
done</pre>
<p>&#8230;and re-built my <code>initrd</code> for the latest kernel like this:</p>
<p><code> </code></p>
<pre>mv /boot/initrd-2.6.29.6-0.15.smp.gcc3.4.x86_64.img initrd-2.6.29.6-0.15.smp.gcc3.4.x86_64.img.bad
mkinitrd -f -v /boot/initrd-2.6.29.6-0.15.smp.gcc3.4.x86_64.img 2.6.29.6-0.15.smp.gcc3.4.x86_64</pre>
<p>&#8230;and no more errors!  Yay!  I modified the <code>/boot/grub/menu.lst</code> back to use my new <code>kernel</code> and <code>initrd</code>, (<code>default=0</code>), and I re-booted into it with no kernel panic! Yay!</p>
<p>And that&#8217;s my story.  I really hope this helps someone out there&#8230;</p>
<p><span style="color: #993300;">UPDATE, 20100127, evening</span>:  On <a title="http://forums.openfiler.com/viewtopic.php?id=4740" href="http://forums.openfiler.com/viewtopic.php?id=4740" target="_blank">the Openfiler forums</a>, there is talk of a fix.  To quote a Rafiu, <em>&#8220;This was due to a strange situation where 64-bit version of binutils was  not built and the group update succeeded regardless.</em></p>
<p><em>We have  now resolved this issue. Apologies to all that were affected by it. &#8220;</em></p>
<p>I have not yet tested this, but I do see that the latest binutils is in the update list now.  More to come&#8230;</p>
<p><span style="color: #993300;">UPDATE, 20100128, morning</span>:  Yes.  The latest set of updates at this time, *including* the correct set of binutils (2.17.50.0.6-7-0.0.2) for 64-bit, worked perfectly, and my server is still running as smoothly as ever after rebooting.  Hooray.  Though I will never get that Saturday night back that I spent chasing my initrd all over the place, but there you go&#8230;</p>
<p> <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://yourLinuxGuy.com/?feed=rss2&amp;p=470</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Handy little &#8220;rug lu&#8221; commands</title>
		<link>http://yourLinuxGuy.com/?p=411</link>
		<comments>http://yourLinuxGuy.com/?p=411#comments</comments>
		<pubDate>Mon, 18 Jan 2010 06:09:43 +0000</pubDate>
		<dc:creator>Jeremy Pavlov</dc:creator>
				<category><![CDATA[intermediate]]></category>
		<category><![CDATA[oes2sp1]]></category>
		<category><![CDATA[oes2sp2]]></category>
		<category><![CDATA[rug]]></category>

		<guid isPermaLink="false">http://yourlinuxguy.com/?p=411</guid>
		<description><![CDATA[This question came in from Steve in a comment:  &#8220;&#8230;I am looking for a way to run the “rug lu” command and have it dump the output my local machine to look over and see what updates I have ahead of me&#8230;&#8221; So I replied, but then I thought of alot more stuff&#8230; so much [...]]]></description>
			<content:encoded><![CDATA[<p>This question came in from Steve in a <a title="http://yourlinuxguy.com/?page_id=7&amp;cpage=1#comment-4624" href="http://yourlinuxguy.com/?page_id=7&amp;cpage=1#comment-4624" target="_blank">comment</a>:  &#8220;&#8230;<em>I am looking for a way to run the “rug lu” command and have it dump the output my local machine to look over and see what updates I have ahead of me&#8230;</em>&#8221;</p>
<p><span style="color: #888888;">So <a title="http://yourlinuxguy.com/?page_id=7&amp;cpage=1#comment-4625" href="http://yourlinuxguy.com/?page_id=7&amp;cpage=1#comment-4625" target="_blank">I replied</a>, but then I thought of alot more stuff&#8230; so much more in fact, that I thought it deserved its own post&#8230;  So here you go, an &#8220;extended play&#8221; version of my reply&#8230;</span></p>
<p><strong>For OpenSuse servers…</strong></p>
<p>Please see this post:  <a rel="nofollow" href="../?p=324">http://yourlinuxguy.com/?p=324</a></p>
<p>That is exactly what I was going for in the post linked above.  If you download that script I mention there in that post, then change it to executable (for instance, <code>chmod 700 filename</code>), then run it, it will generate a comparison and dump the results to screen and output file, and tell you where the file is.</p>
<p>The script will not actually update your system (in the current state); it will only report about potential updates. But, if you get more brave, you can go in the file and un-comment the zypper lines I commented out that actually update the system…  Or change them to rug lines…  Which leads me to&#8230;</p>
<p><strong>For SLES/OES servers…</strong></p>
<p>Just do this:<br />
<code>rug lu &gt; /tmp/lu.txt</code></p>
<p>&#8230;then go look at the file with:<br />
<code>less /tmp/lu.txt</code></p>
<p>&#8230;Or, you could have it emailed to yourself like this:<br />
<code>rug lu |mailx -s "Updates from $HOSTNAME" root</code></p>
<p>…of course, that assumes that you are having root mail sent off the box (<a title="http://yourlinuxguy.com/?p=38" href="http://yourlinuxguy.com/?p=38" target="_blank">see this</a> if you&#8217;re not).   Otherwise you use your email address instead of root.</p>
<p>But what if you want to limit the updates list?  Perhaps something more specific; to report only that in which you are interested in updating?  See these examples (note that you can change the rug catalog to taste, of course, depending on your version):</p>
<pre><code>rug lu -t patch SLES10-SP3-Updates OES2-SP2-Updates |mailx -s "Updates from $HOSTNAME" root</code></pre>
<p>By adding a grep statement to block out the &#8220;optional&#8221; lines, the result is even cleaner.  Here&#8217;s an example:</p>
<pre><code>rug lu -t patch SLES10-SP3-Updates OES2-SP2-Updates |grep -v optional|mailx -s "Updates from $HOSTNAME" root</code></pre>
<p>On the other hand, by only *including* the lines you want (instead of excluding those you don&#8217;t), you lose the headers and separators, and only get the lines in which you&#8217;re interested (if any).  Here&#8217;s an example:</p>
<pre><code>rug lu -t patch SLES10-SP3-Updates OES2-SP2-Updates |grep -e security -e recommended|mailx -s "Updates from $HOSTNAME" root</code></pre>
<p>Or if you were to be running this in a mass-batch (hmm&#8230; future post&#8230;) to a bunch of servers or a cron job, and just don&#8217;t want an email at all if there are no results (and you *do* want an email if there *are* results):</p>
<pre><code>RESULT=`rug lu -t patch SLES10-SP3-Updates OES2-SP2-Updates |grep -e security -e recommended`;if [ "XX$RESULT" != "XX" ];then echo "optional updates:" $RESULT |mailx -s "Updates from $HOSTNAME" root;fi</code></pre>
<p>Okay now, that&#8217;s good; but here&#8217;s a prettier version of the same&#8230;  Okay, the command itself is uglier, but the resulting email is prettier at least.  The above one doesn&#8217;t format the results as nicely as I like (losing all the line returns), so I had to make use of a temp file to maintain the output formatted with returns:</p>
<pre><code>rug lu -t patch SLES10-SP3-Updates OES2-SP2-Updates |grep -e security -e recommended&gt;/tmp/ruglu.txt;RESULT=`cat /tmp/ruglu.txt`;if [ "XX$RESULT" != "XX" ];then cat /tmp/ruglu.txt|mailx -s "Updates from $HOSTNAME" root;fi</code></pre>
<p>And that&#8217;s about it, with a couple closing thoughts:  Remember, it&#8217;s definitely a good idea to do a &#8220;rug ping&#8221; before doing this, to wake it all up, so you&#8217;re not waiting in silence for each command to run while it wakes up.  Then if you actually need updates, do this:</p>
<pre><code>rug up -y -t patch -g security -g recommended SLES10-SP3-Updates OES2-SP2-Updates</code></pre>
<p>Do you feel updated?  I do.</p>
<p> <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://yourLinuxGuy.com/?feed=rss2&amp;p=411</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VMware Server 2.0.2 on Opensuse 11.2 is a big pain in the&#8230;.</title>
		<link>http://yourLinuxGuy.com/?p=434</link>
		<comments>http://yourLinuxGuy.com/?p=434#comments</comments>
		<pubDate>Mon, 04 Jan 2010 06:20:42 +0000</pubDate>
		<dc:creator>Jeremy Pavlov</dc:creator>
				<category><![CDATA[advanced]]></category>
		<category><![CDATA[opensuse11.2]]></category>
		<category><![CDATA[vmwareServer]]></category>

		<guid isPermaLink="false">http://yourlinuxguy.com/?p=434</guid>
		<description><![CDATA[&#8230;module compilation process. Seriously, folks.  I know there are others of you out there, like me, who upgraded to Opensuse 11.2 (the latest at the  time of this writing), without concern that VMware Server 2.0.2 (also the latest at this writing) may or may not run on it.  Well guess what: it doesn&#8217;t.  Well, not [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230;module compilation process.</p>
<p>Seriously, folks.  I know there are others of you out there, like me, who upgraded to Opensuse 11.2 (the latest at the  time of this writing), without concern that VMware Server 2.0.2 (also the latest at this writing) may or may not run on it.  Well guess what: it doesn&#8217;t.  Well, not without help, that is.</p>
<p>To cut to the chase, as I write this, the problem is that VMware Server 2.0.2 will not work with the newest kernel and libraries that are shipped with Opensuse 11.2, version ﻿2.6.31.x.and.so.forth.  So I found some work-arounds while Googlin&#8217;, that I wanted to record for posterity.  Here&#8217;s what I did:</p>
<ol>
<li>Go to <a title="http://radu.cotescu.com/2009/10/30/how-to-install-vmware-server-2-0-x-on-ubuntu-9-10-karmic-koala/" href="http://radu.cotescu.com/2009/10/30/how-to-install-vmware-server-2-0-x-on-ubuntu-9-10-karmic-koala/" target="_blank">this post from Radu Cotescu</a>.  Read up.  Note that Radu&#8217;s post, problem, and fixes are all about Ubuntu.  Do not fear. <em> (Post-publish update, 20100119:  See <a title="http://radu.cotescu.com/2010/01/19/how-to-install-vmware-server-ubuntu-fedora-opensuse/" href="http://radu.cotescu.com/2010/01/19/how-to-install-vmware-server-ubuntu-fedora-opensuse/" target="_blank">http://radu.cotescu.com/2010/01/19/how-to-install-vmware-server-ubuntu-fedora-opensuse/</a> for a new version that I have not tested yet.)</em></li>
<li>As he instructs in his step 1, download the VMware 2.0.2 <code>tgz</code> file from VMware themselves (version 2.0.2-203138 at this time), and drop it in a directory like <code>/tmp/vmware</code>.  DO NOT decompress the <code>tgz</code> file!  The script will do it for you.</li>
<li>Get <a title="http://codebin.cotescu.com/vmware/vmware-server-2.0.x-kernel-2.6.31-14-install.sh" href="http://codebin.cotescu.com/vmware/vmware-server-2.0.x-kernel-2.6.3x-install.sh" target="_blank">Radu&#8217;s script</a>, and as instructed in his step 2, drop it in the same folder as the VMware <code>tgz</code> file, for instance,<code> /tmp/vmware</code>.</li>
<li>Here is where we slightly vary from the plan&#8230; open the script up in a text editor (vi, gedit, emacs, etc.), go down to the &#8220;install&#8221; section around line 76, and comment out all the &#8220;<code>dpkg-query</code>&#8221; checks from line 77 to line 95.  Save, and quit.  Funny&#8230; but I don&#8217;t remember those checks being there a month or so ago, so he may be changing them from day to day.  Tread carefully, and don&#8217;t necessarily trust my indicated line numbers.</li>
<li>Make sure we have the necessary script support software installed;  you need your kernel version &#8220;devel&#8221; package (for me, since I have <code>kernel-pae</code>, I need <code>kernel-pae-devel</code>), <code>kernel-source</code>,<code> linux-kernel-headers</code>, <code>gcc</code>, and <code>make</code>.  Use <code>zypper in</code> &lt;package-name&gt; to get them installed.</li>
<li>Now return back to Radu&#8217;s step 3, and complete his commands as listed.</li>
<li>If all goes well, when you follow his instructions, it will compile everything, and launch you right into to the VMware installation, and continue into the configuration.  Make sure you have your VMware registration code handy.  Oh, and of course, ignore that GCC version mis-match warning&#8230; And you may want to do a <code>chkconfig vmware off </code>when you&#8217;re done, I always do.</li>
</ol>
<p>So there you go.  That&#8217;s the only way I could get it all to work together.  But if you know of a better way, or if I missed something, please share it with the group!  I assume that VMware will get a corrected version out in the near future that will mitigate this issue, but in the meantime, it&#8217;s a real life-saver.  And many, many thanks to Radu and any others involved&#8230;.</p>
<p> <img src='http://yourLinuxGuy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://yourLinuxGuy.com/?feed=rss2&amp;p=434</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
