<?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>Dan Klassen &#187; server admin</title>
	<atom:link href="http://danklassen.com/wordpress/category/server-admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://danklassen.com/wordpress</link>
	<description>Apps, tech-news, and other interesting stuff.</description>
	<lastBuildDate>Wed, 06 May 2009 17:44:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Configuring SSH</title>
		<link>http://danklassen.com/wordpress/2009/02/configuring-ssh/</link>
		<comments>http://danklassen.com/wordpress/2009/02/configuring-ssh/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 15:00:26 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[server admin]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://danklassen.com/wordpress/?p=97</guid>
		<description><![CDATA[In the last while I have been having to connect to various servers using different accounts with different types of credential requirements. This has lead to some interesting ssh commands such as

ssh -l some_user -i ~/.ssh/other_key.pub example.com

After having a few servers and starting to lose the commands in my history, I figured there must be [...]]]></description>
			<content:encoded><![CDATA[<p>In the last while I have been having to connect to various servers using different accounts with different types of credential requirements. This has lead to some interesting ssh commands such as</p>

<div class="wp_codebox"><table width="100%" ><tr id="p975"><td class="code" id="p97code5"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ssh</span> <span style="color: #660033;">-l</span> some_user <span style="color: #660033;">-i</span> ~<span style="color: #000000; font-weight: bold;">/</span>.ssh<span style="color: #000000; font-weight: bold;">/</span>other_key.pub example.com</pre></td></tr></table></div>

<p>After having a few servers and starting to lose the commands in my history, I figured there must be a better way to keep track of this. Turns out there is (surprise surprise). Inside your home directory, there&#8217;s a .ssh folder where you can drop a config file. So, to recreate the above example you would add the following section:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p976"><td class="code" id="p97code6"><pre class="bash" style="font-family:monospace;">Host example.com
    User some_user
    IdentityFile ~<span style="color: #000000; font-weight: bold;">/</span>.sh<span style="color: #000000; font-weight: bold;">/</span>other_key.pub</pre></td></tr></table></div>

<p>and now I can connect with</p>

<div class="wp_codebox"><table width="100%" ><tr id="p977"><td class="code" id="p97code7"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ssh</span> example.com</pre></td></tr></table></div>

<p>There is a whack of documentation about how this can make your life easier. Check out the man pages</p>

<div class="wp_codebox"><table width="100%" ><tr id="p978"><td class="code" id="p97code8"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">man</span> ssh_config</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://danklassen.com/wordpress/2009/02/configuring-ssh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RAM &#8211; who knew it could take out a computer?</title>
		<link>http://danklassen.com/wordpress/2009/01/ram-who-knew-it-could-take-out-a-computer/</link>
		<comments>http://danklassen.com/wordpress/2009/01/ram-who-knew-it-could-take-out-a-computer/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 16:15:43 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[server admin]]></category>
		<category><![CDATA[hardware]]></category>

		<guid isPermaLink="false">http://danklassen.com/wordpress/?p=90</guid>
		<description><![CDATA[At one point or another I&#8217;m sure most of you have run across bad hardware. This past week I built a computer and was running into an odd situation. After about 2 minutes of running (or less) the system would completely lock up. Rebooting would sometimes make it to the login screen while other times [...]]]></description>
			<content:encoded><![CDATA[<p>At one point or another I&#8217;m sure most of you have run across bad hardware. This past week I built a computer and was running into an odd situation. After about 2 minutes of running (or less) the system would completely lock up. Rebooting would sometimes make it to the login screen while other times it would just die part way through. Other times, the system wouldn&#8217;t event make it past the POST or show the BIOS loading screen.</p>
<p>Fearing a faulty motherboard, or inproper CPU installation, I decided to watch what was happening to the temperature in the BIOS. The temp was staying quite low ( &lt; 30 C for both the CPU and motherboard) but, the system would still lock up&#8230; even in the BIOS screen. At this point I had detached everything except for the video card, 1 stick of RAM, and the hard drive and was still getting the same problem.</p>
<p>As a last ditch attempt, I swapped out the final stick of RAM for one of the other ones in the pile of components sitting beside the case. And what do you know, it worked!</p>
<p>Now, the only conclusion I can come to is that the RAM was overheating after about 2 minutes or so of use, and then completely ceasing to function. The bad memory addresses must have been quite close the beginning since even in the BIOS screen (where I&#8217;m assuming it doesn&#8217;t do all that much with RAM) would lock up.</p>
<p>Has any one else ever experienced something like this? For the record it was a Corsair 2GB stick.</p>
]]></content:encoded>
			<wfw:commentRss>http://danklassen.com/wordpress/2009/01/ram-who-knew-it-could-take-out-a-computer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Setting up VPN Connection with gnome Network Manager</title>
		<link>http://danklassen.com/wordpress/2008/12/setting-up-vpn-connection-with-gnome-network-manager/</link>
		<comments>http://danklassen.com/wordpress/2008/12/setting-up-vpn-connection-with-gnome-network-manager/#comments</comments>
		<pubDate>Sat, 06 Dec 2008 04:32:58 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[security]]></category>
		<category><![CDATA[server admin]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[system admin]]></category>

		<guid isPermaLink="false">http://danklassen.com/wordpress/?p=54</guid>
		<description><![CDATA[Recently for a project I&#8217;ve been working on at the office I had to set up a VPN connection to gain access to the client&#8217;s network. They already had vpn set up on their end (thankfully) however, oddly enough I didn&#8217;t have a vpn client. I noticed that the gnome Network Manager had a tab [...]]]></description>
			<content:encoded><![CDATA[<p>Recently for a project I&#8217;ve been working on at the office I had to set up a VPN connection to gain access to the client&#8217;s network. They already had vpn set up on their end (thankfully) however, oddly enough I didn&#8217;t have a vpn client. I noticed that the gnome Network Manager had a tab for VPN, however the add button was disabled. After a quick google, I found out that you just have to install the packages &#8216;network-manager-pptp&#8217; and &#8216;pptp-linux&#8217; to enable it.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p5410"><td class="code" id="p54code10"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> network-manager-pptp pptp-linux</pre></td></tr></table></div>

<div id="attachment_57" class="wp-caption alignnone" style="width: 310px"><a href="http://danklassen.com/wordpress/wp-content/uploads/2008/12/screenshot-network-connections.png"><img class="size-medium wp-image-57" title="Network Manager Window" src="http://danklassen.com/wordpress/wp-content/uploads/2008/12/screenshot-network-connections-300x224.png" alt="Network Manager Window" width="300" height="224" /></a></dt>
</dl>
</div>
<p>Did the trick and now it was just a matter of entering the server information, username, password. At this point I was still unable to connect to the network. I double and triple checked my info and it was all right. It turned out I had to enable Point to Point Encryption (makes sense) in the advanced section.</p>
<div class="mceTemp">
<dl id="attachment_58" class="wp-caption alignnone" style="width: 209px;">
<dt class="wp-caption-dt"><a href="http://danklassen.com/wordpress/wp-content/uploads/2008/12/screenshot-nm-connection-editor.png"><img class="size-medium wp-image-58" title="Use Point to Point encryption" src="http://danklassen.com/wordpress/wp-content/uploads/2008/12/screenshot-nm-connection-editor-199x300.png" alt="Use Point to Point encryption" width="199" height="300" /></a></dt>
</dl>
</div>
<p>Now, I have a nice little &#8216;locked&#8217; icon on my network status bar.</p>
<div class="mceTemp">
<dl id="attachment_56" class="wp-caption alignnone" style="width: 310px;">
<dt class="wp-caption-dt"><a href="http://danklassen.com/wordpress/wp-content/uploads/2008/12/network-manager-locked.png"><img class="size-medium wp-image-56" title="VPN Connection in Network Manager" src="http://danklassen.com/wordpress/wp-content/uploads/2008/12/network-manager-locked-300x20.png" alt="VPN Connection in Network Manager" width="300" height="20" /></a><p class="wp-caption-text">VPN Connection in Network Manager</p></div>
<p>Who knew it would be that easy?</p>
]]></content:encoded>
			<wfw:commentRss>http://danklassen.com/wordpress/2008/12/setting-up-vpn-connection-with-gnome-network-manager/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stress Testing Apache Using ab</title>
		<link>http://danklassen.com/wordpress/2008/11/stress-testing-apache-using-ab/</link>
		<comments>http://danklassen.com/wordpress/2008/11/stress-testing-apache-using-ab/#comments</comments>
		<pubDate>Sun, 30 Nov 2008 20:49:04 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[server admin]]></category>
		<category><![CDATA[system admin]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://danklassen.com/wordpress/?p=50</guid>
		<description><![CDATA[If you&#8217;ve ever written a web-app you&#8217;ve probably wondered how well it will hold up once the world discovers your awesome service. Will it work if you get dugg? What happens if 200 people all try to access your site at once? This is where benchmarking can provide some useful numbers to give you an [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve ever written a web-app you&#8217;ve probably wondered how well it will hold up once the world discovers your awesome service. Will it work if you get dugg? What happens if 200 people all try to access your site at once? This is where benchmarking can provide some useful numbers to give you an idea as to how your server will hold up.</p>
<p><span id="more-50"></span></p>
<p>Apache Benchmark can be a helpful tool to determine response times based on various traffic patterns. It lets you determine how many requests per second your server should be able to handle, and how long each visitor will have to wait to receive a response.</p>
<p>The syntax is pretty straight forward:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p5013"><td class="code" id="p50code13"><pre class="bash" style="font-family:monospace;">ab <span style="color: #660033;">-c</span> 10 <span style="color: #660033;">-n</span> <span style="color: #000000;">1000</span> http:<span style="color: #000000; font-weight: bold;">//</span>yourdomain.com<span style="color: #000000; font-weight: bold;">/</span></pre></td></tr></table></div>

<p>(note the trailing / if you are wanting to test your main document). The -c tells ab to make 10 concurrent requests at a time and -n tells it to make 1000 requests total. This will create output similar to</p>

<div class="wp_codebox"><table width="100%" ><tr id="p5014"><td class="code" id="p50code14"><pre class="bash" style="font-family:monospace;">This is ApacheBench, Version 2.3 <span style="color: #000000; font-weight: bold;">&amp;</span>lt;<span style="color: #007800;">$Revision</span>: 655654 $<span style="color: #000000; font-weight: bold;">&amp;</span>gt;
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http:<span style="color: #000000; font-weight: bold;">//</span>www.zeustech.net<span style="color: #000000; font-weight: bold;">/</span>
Licensed to The Apache Software Foundation, http:<span style="color: #000000; font-weight: bold;">//</span>www.apache.org<span style="color: #000000; font-weight: bold;">/</span>
&nbsp;
Benchmarking yourdomain.com <span style="color: #7a0874; font-weight: bold;">&#40;</span>be patient<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
&nbsp;
Server Software:        Apache<span style="color: #000000; font-weight: bold;">/</span>2.2.9
Server Hostname:        yourdomain.com
Server Port:            80
&nbsp;
Document Path:          <span style="color: #000000; font-weight: bold;">/</span>
Document Length:        240 bytes
&nbsp;
Concurrency Level:      10
Time taken <span style="color: #000000; font-weight: bold;">for</span> tests:   <span style="color: #000000;">20.824</span> seconds
Complete requests:      <span style="color: #000000;">1000</span>
Failed requests:        <span style="color: #000000;">0</span>
Write errors:           <span style="color: #000000;">0</span>
Non-2xx responses:      <span style="color: #000000;">1000</span>
Total transferred:      <span style="color: #000000;">565000</span> bytes
HTML transferred:       <span style="color: #000000;">240000</span> bytes
Requests per second:    <span style="color: #000000;">48.02</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #666666; font-style: italic;">#/sec] (mean)</span>
Time per request:       208.238 <span style="color: #7a0874; font-weight: bold;">&#91;</span>ms<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>mean<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Time per request:       20.824 <span style="color: #7a0874; font-weight: bold;">&#91;</span>ms<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>mean, across all concurrent requests<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Transfer rate:          26.50 <span style="color: #7a0874; font-weight: bold;">&#91;</span>Kbytes<span style="color: #000000; font-weight: bold;">/</span>sec<span style="color: #7a0874; font-weight: bold;">&#93;</span> received
&nbsp;
Connection Times <span style="color: #7a0874; font-weight: bold;">&#40;</span>ms<span style="color: #7a0874; font-weight: bold;">&#41;</span>
              min  mean<span style="color: #7a0874; font-weight: bold;">&#91;</span>+<span style="color: #000000; font-weight: bold;">/</span>-sd<span style="color: #7a0874; font-weight: bold;">&#93;</span> median   max
Connect:       59  120 376.0     68    3093
Processing:    61   80  44.0     70     466
Waiting:       61   80  44.0     70     466
Total:        121  200 377.8    144    3165
&nbsp;
Percentage of the requests served within a certain <span style="color: #000000; font-weight: bold;">time</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>ms<span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000;">50</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">144</span>
<span style="color: #000000;">66</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">151</span>
<span style="color: #000000;">75</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">156</span>
<span style="color: #000000;">80</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">162</span>
<span style="color: #000000;">90</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">176</span>
<span style="color: #000000;">95</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">203</span>
<span style="color: #000000;">98</span><span style="color: #000000; font-weight: bold;">%</span>    <span style="color: #000000;">520</span>
<span style="color: #000000;">99</span><span style="color: #000000; font-weight: bold;">%</span>   <span style="color: #000000;">3132</span>
<span style="color: #000000;">100</span><span style="color: #000000; font-weight: bold;">%</span>   <span style="color: #000000;">3165</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>longest request<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></td></tr></table></div>

<p>From this we can see that the server tested was able to hand approximately 48 requests per second and was able to process 1000 requests in just under 21 seconds. Whether or not these are acceptable values completely depends on the requirements of your project and application.</p>
<p>You are also able to send in post and cookie data (check the man pages for instructions on how to do that) if you would like to benchmark an authentication process or some form processing.</p>
<p>I&#8217;ve found ab to be  a useful tool to determine which pages on a site are taking too long to server / bogging down the server. It&#8217;s certainly not the end-all / be-all but can get you pointed in the right direction. After collecting some baseline data though ab, it may give you some ideas as to what code to optimize or where to implement caching on your server.</p>
<p>Remember, be kind and only stress test your own servers. Other people may not take kindly to you hammering their server just to see how they hold up.</p>
<p><em>edit</em></p>
<p>Just a quick note about dynamic urls. You can use these if you put single quotes around the entire url. For example:</p>
<p>ab -c 5 -n 2000 &#8216;http://yourdomain.com/index.php?id=27&amp;action=edit&#8217;</p>
]]></content:encoded>
			<wfw:commentRss>http://danklassen.com/wordpress/2008/11/stress-testing-apache-using-ab/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Save Your State with Rsnapshot</title>
		<link>http://danklassen.com/wordpress/2008/11/save-your-state-with-rsnapshot/</link>
		<comments>http://danklassen.com/wordpress/2008/11/save-your-state-with-rsnapshot/#comments</comments>
		<pubDate>Sat, 15 Nov 2008 20:35:16 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[server admin]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[system admin]]></category>

		<guid isPermaLink="false">http://danklassen.com/wordpress/?p=43</guid>
		<description><![CDATA[We all know backups are an essential part of running a server. Being able to restore in the worst case scenario of complete drive corruption (let&#8217;s say that your RAID setup failed somehow as well) as quickly as possible is key. Another situation could be one of your clients deleted their incredibly important file 3 [...]]]></description>
			<content:encoded><![CDATA[<p>We all know backups are an essential part of running a server. Being able to restore in the worst case scenario of complete drive corruption (let&#8217;s say that your RAID setup failed somehow as well) as quickly as possible is key. Another situation could be one of your clients deleted their incredibly important file 3 days ago, but decided to call you about it now.</p>
<p>Rsnapshot is a series of scripts and commands which can automate the process of backing up your files to a remote location, as well as keeping a incremental copy of any changes. I have it set to keep 7 daily copies, 4 weekly copies (on Saturdays) and 6 monthly copies. Now this may sound like it will use up a great deal of disk space, but rsnapshot makes clever use of hard links, which means it only needs to store copies of files that have changed since the last backup as well as aslight overhead. In my case, this means that for every 100 megs that is backed up, on average only 1 extra meg is stored per copy. So, if I had 1GB of data and 17 old versions (7 days + 4 weeks + 6 months) it would require approximately 1.2GB of physical disk space.</p>
<p><span id="more-43"></span></p>
<p>Installing rsnapshot using Linux is pretty straight forward. You&#8217;ll need rsync installed, and ssh access to the remote server. In Debian based distributions, a simple</p>

<div class="wp_codebox"><table width="100%" ><tr id="p4320"><td class="code" id="p43code20"><pre class="sh" style="font-family:monospace;">sudo apt-get install rsnapshot</pre></td></tr></table></div>

<p>will install it for you on the client side. If you are using Fedora, or CentOS there is an rpm on the rsnapshot <a title="download rsnapshot" href="http://rsnapshot.org/downloads.html" target="_blank">download page</a> as well as gzip for any other distribution.</p>
<p>Once that step is complete, it&#8217;s time to configure it. The configuration file by default is read from /etc/rsnapshot.conf. There is an important message at the very top of this file that I managed to miss. Note that the file requires trailing slashes on any directories you specify (ie: /home/danklassen/) and it uses tabs and not spaces. Failing to follow these two simple standards can lead to untold amounts of grief (not that I would know of course).</p>
<p>Before going much further, it would be good to set up ssh keys between your client and server. If you&#8217;re not sure how to do this, I conveninently have a post about that titled <a title="Creating SSH Keys for passwordless login" href="/wordpress/2008/05/creating-ssh-keys/" target="_self">Creating SSH Keys.</a> This will keep you from having to type in a password each time rsnapshot tries to connect to the remote server.</p>
<p>Since we are going to be backing up a remote server, we&#8217;ll want to double check that cmd_ssh line is uncommented and points to where where the ssh command resides on your system (double check with &#8216;which ssh&#8217; if you are unsure). Also, we&#8217;re using linux, so we will want to uncomment the cmp_cp line as well. Since linux&#8217;s cp command has a few extra features built it, this will allow rsnapshot to take care of normal files and special files all in one pass which should be quicker.</p>
<p>I found I had to play with the rsync_long_args line a little bit to get things to work as expected. What I ended up with is:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p4321"><td class="code" id="p43code21"><pre class="sh" style="font-family:monospace;">rsync_long_args --delete --numeric-ids --delete-excluded</pre></td></tr></table></div>

<p>Which will delete any files that have been removed on the server, use numeric ids for user / group permissions, and delete any files that are in the excluded list. If you have any other fancy parameters you want to pass along to rsync, this would be the place to enter them.</p>
<p>Now the important part: setting what to back up, and how often. Near the top of the config file are the lines:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p4322"><td class="code" id="p43code22"><pre class="sh" style="font-family:monospace;">interval    hourly    6
interval    daily    7
interval    weekly    4
interval    monthly    6</pre></td></tr></table></div>

<p>These lines will define how many copies to store of each &#8216;interval&#8217;. If you want, you can add &#8216;interval    yearly    5&#8242; in there as well. You will need to set up cron jobs for each of these intervals.</p>
<p>The backup points section defines what to backup. An example for a remote server would be something like:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p4323"><td class="code" id="p43code23"><pre class="sh" style="font-family:monospace;">backup    user@example.com:/home/danklassen/    danklassen/</pre></td></tr></table></div>

<p>What this will do is ssh over to example.com with the username &#8216;user&#8217; and back up the /home/danklassen/ directory into a folder called danklassen/ in the snapshot_root of the client computer. Again, you&#8217;ll want ssh keys working first so that you can do this without having to enter a password.</p>
<p>The last step once you have gotten everything working is to cron your scripts because who are we kidding, you won&#8217;t remember to run them yourself. A quick crontab -e and enter something like</p>

<div class="wp_codebox"><table width="100%" ><tr id="p4324"><td class="code" id="p43code24"><pre class="sh" style="font-family:monospace;">00 * * * * rsnapshot hourly
30 23 * * * rsnapshot daily
30 23 * * 6 rsnapshot weekly
30 23 1 * * rsnapshot monthly</pre></td></tr></table></div>

<p>I hope this gets you on the right path. If you&#8217;re looking for any more details, the <a title="Rsnapshot home page" href="http://rsnapshot.org" target="_blank">rsnapshot site</a> has some example setups and typing &#8216;man rsnapshot&#8217; will explain every setting for you. Now when your client calls and tells you they deleted their precious data a few days ago, you&#8217;ll be able to go back in time and save the day!</p>
<p>Coming up, I&#8217;ll show you how to do a similar setup for your mysql databases.</p>
]]></content:encoded>
			<wfw:commentRss>http://danklassen.com/wordpress/2008/11/save-your-state-with-rsnapshot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Virtual Server Setup</title>
		<link>http://danklassen.com/wordpress/2008/06/virtual-server-setup/</link>
		<comments>http://danklassen.com/wordpress/2008/06/virtual-server-setup/#comments</comments>
		<pubDate>Sat, 28 Jun 2008 16:35:58 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[server admin]]></category>
		<category><![CDATA[Internet Exploder]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[virtualization]]></category>

		<guid isPermaLink="false">http://danklassen.ca/wordpress/?p=27</guid>
		<description><![CDATA[Recently, I needed a clean environment to do some development for a project at work. The OS (ubuntu) I have installed on my development computer wasn&#8217;t the same as what the application was originally developed and deployed in (red hat) and this was causing a few issues. I debated bringing up a slicehost slice solely [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, I needed a clean environment to do some development for a project at work. The OS (ubuntu) I have installed on my development computer wasn&#8217;t the same as what the application was originally developed and deployed in (red hat) and this was causing a few issues. I debated bringing up a <a title="Slice Host" href="http://www.slicehost.com" target="_blank">slicehost</a> slice solely for coding and testing, but this seemed like a hassle, as well as an extra expense.</p>
<p>Enter virtualization. There are a number of options to create a virtual computer on your host system. The most popular hypervisors are <a title="VMware" href="http://vmware.com" target="_blank">VMware</a> and <a title="Xen Open Source Version" href="http://xen.xensource.com/" target="_blank">Xen</a>. What these programs will let you do is create a completely separate installation of an operating system inside your current one. This let me create the clean environment I needed for this project.</p>
<p><span id="more-27"></span></p>
<p>VM&#8217;s can come in handy in quite a few different situations. There&#8217;s the previously mentioned fresh development environment. Also, you can install windows so that you can test sites in Internet Explorer 6 and 7 to make sure things render properly for your clients if you&#8217;re doing web development. Also, if you want to test out the latest and greatest release of your favourite distribution, but don&#8217;t want to commit to a beta release or something, you can test to your heart&#8217;s content in a VM. If you are hosting sites, a VM is a much more cost-effective way to give a client a dedicated environment as opposed to having dedicated hardware.</p>
<p>In my case, I&#8217;m running Ubuntu, but needed a CentOS based server to test this code on. To do this in VMware, it was as simple as clicking file -&gt; new virtual machine and a wizard will walk you through the rest of the steps. Also available are pre-built &#8216;appliances&#8217; which are ready-to-go environments that you need to boot up. (check out the <a title="VMWare appliances" href="http://www.vmware.com/appliances/" target="_blank">vmware appliance listings</a>).</p>
<p>Initially getting VMware to run was a little bit more involved however. First hit their site and download the latest version from http://www.vmware.com/download/server/ (1.06 at time of writing). While it&#8217;s downloading, register for a serial number (yes, it&#8217;s free) so that you have that part ready to go when needed. After the file has downloaded, extract it, and run the installer as root with the command</p>

<div class="wp_codebox"><table width="100%" ><tr id="p2730"><td class="code" id="p27code30"><pre class="sh" style="font-family:monospace;">sudo ./vmware-install.pl</pre></td></tr></table></div>

<p>This script will run through the entire setup with you. I was able to accept the defaults in most cases, but instead of using eth0 for networking, I switched to wlan0 since I&#8217;m on wireless. During the process you may need to compile support for your kernel (don&#8217;t worry, it takes care of everything for you. Just make sure you have the kernel headers installed through apt or yum).</p>
<p>After the script finished running and I entered my serial, I was in business, or so I thought. For some reason, running vmware brought up nothing but the following output</p>

<div class="wp_codebox"><table width="100%" ><tr id="p2731"><td class="code" id="p27code31"><pre class="sh" style="font-family:monospace;">~$ vmware
/usr/lib/vmware/bin/vmware: /usr/lib/vmware/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_3.4' not found (required by /usr/lib/libcairo.so.2)
/usr/lib/vmware/bin/vmware: /usr/lib/vmware/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/libstdc++.so.6)
/usr/lib/vmware/bin/vmware: /usr/lib/vmware/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_3.4' not found (required by /usr/lib/libcairo.so.2)
/usr/lib/vmware/bin/vmware: /usr/lib/vmware/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/libstdc++.so.6)
/usr/lib/vmware/bin/vmware: /usr/lib/vmware/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_3.4' not found (required by /usr/lib/libcairo.so.2)
/usr/lib/vmware/bin/vmware: /usr/lib/vmware/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/libstdc++.so.6)</pre></td></tr></table></div>

<p>A bit of googling brought up the solution:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p2732"><td class="code" id="p27code32"><pre class="sh" style="font-family:monospace;">sudo mkdir /usr/lib/vmware/lib/bak
sudo mv /usr/lib/vmware/lib/libgcc_s.so.1/libgcc_s.so.1 /usr/lib/vmware/lib/bak/.</pre></td></tr></table></div>

<p>to move the offending library. After that everything worked great!</p>
<p>After creating the VM, I bumped up the allocated ram from the default 256 up to 512. To get networking working, I switched from Bridged networking to Custom. (do an ifconfig on your host OS to figure out which specific virtual network to use. In my case it was /dev/vmnet8).</p>
<p>The thought of doing this coding project entirely in vi wasn&#8217;t too exciting, so I needed a way to access the code that is on the VM from my host OS so I could use Eclipse to do the editing. The easiest way to do this that I found was to mount a folder over ssh using <a href="apt:sshfs">ssh-fuse</a>. (sudo apt-get install sshfs). Then, create a mount point and mount (swap in your VM&#8217;s IP / username where necessary).</p>

<div class="wp_codebox"><table width="100%" ><tr id="p2733"><td class="code" id="p27code33"><pre class="sh" style="font-family:monospace;">sudo mkdir /media/vm_mount
sudo sshfs user@192.168.46.128:/var/www /media/vm_mount</pre></td></tr></table></div>

<p>next I symbolically linked it to my Eclipse workspace with</p>

<div class="wp_codebox"><table width="100%" ><tr id="p2734"><td class="code" id="p27code34"><pre class="sh" style="font-family:monospace;">ln -s /media/vm_mount ~/workspace/vm_code</pre></td></tr></table></div>

<p>And there you have it. Now I can edit the code as if it was local, yet it is residing on a completely separate operating system. Sheer development bliss.</p>
]]></content:encoded>
			<wfw:commentRss>http://danklassen.com/wordpress/2008/06/virtual-server-setup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Faster DNS lookups with OpenDNS</title>
		<link>http://danklassen.com/wordpress/2008/06/faster-dns-lookups-with-opendns/</link>
		<comments>http://danklassen.com/wordpress/2008/06/faster-dns-lookups-with-opendns/#comments</comments>
		<pubDate>Tue, 03 Jun 2008 06:56:20 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[server admin]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[web service]]></category>

		<guid isPermaLink="false">http://danklassen.ca/wordpress/?p=23</guid>
		<description><![CDATA[So, first off, what is DNS and why do you care if it&#8217;s fast? A crash course in dns is that it changes a nice, memorable name like, oh say, danklassen.ca to it&#8217;s actual IP address (209.20.65.249 in this case). Think of it as flipping through the phonebook to find out somebody&#8217;s phone number.
Now, as [...]]]></description>
			<content:encoded><![CDATA[<p>So, first off, what is <abbr title="Domain Name Server">DNS</abbr> and why do you care if it&#8217;s fast? A crash course in dns is that it changes a nice, memorable name like, oh say, <a title="Dan Klassen - Apps, tech-news, and other interesting stuff" href="http://danklassen.ca" target="_self">danklassen.ca</a> to it&#8217;s actual IP address (209.20.65.249 in this case). Think of it as flipping through the phonebook to find out somebody&#8217;s phone number.</p>
<p>Now, as you are browsing the web sometimes you may notice that it can take quite a while for the page to initiate a connection with the remote server. This can sometimes be caused by a slow response from a dns server so it takes a while for your browser to figure out who to ask for content. Imagine you&#8217;re running a server and you are sending out a few thousand emails an hour, as well as pulling in content from multiple sources, and doing reverse lookups on numerous IP addresses. Any slight delay will add up to huge latency over time, and DNS lookups can be quite costly (time-wise).</p>
<p><span id="more-23"></span></p>
<p><a title="OpenDNS" href="http://opendns.com" target="_blank">OpenDNS</a> is a free service that has a number of servers around the world. They&#8217;ve created an amazingly reliable (and quick) network of DNS servers that are free for anyone to use. To set this up on any linux box:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p2337"><td class="code" id="p23code37"><pre class="sh" style="font-family:monospace;">sudo vi /etc/resolv.conf</pre></td></tr></table></div>

<p>and enter the lines:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p2338"><td class="code" id="p23code38"><pre class="sh" style="font-family:monospace;">nameserver: 208.67.222.222
nameserver: 208.67.220.220</pre></td></tr></table></div>

<p>And that&#8217;s it. No really, that is all you need to do.</p>
<p>As an added bonus, they provide you with an easy <a title="OpenDNS Cache Check" href="http://www.opendns.com/support/cache/" target="_blank">cache check</a> to see what a domain (or sub-domain) currently resolves to. If you have recently updated, you can force OpenDNS to pull down the latest zone file with your changes, something that can take hours, or even days on other name servers. One thing to realize though, is that once you start using OpenDNS, even non-existent domains and subdomains will resolve to an IP, usually 208.x.x.x, but is something to be aware of. If you don&#8217;t know how this could effect you, don&#8217;t worry about it.</p>
<p>For home/corporate users, they have phishing philtering, adult site blocking, customizable domain black/white listing, etc. The way they seems to be supporting their financial costs is through serving ads when you type in a domain that doesn&#8217;t exist (ie: for some reason, google hasn&#8217;t seen fit to set up danklassen.google.com)</p>
<p>Hey, if they can handle 6.3 Billion (yes, that&#8217;s a B at the front) dns requests every day, I&#8217;m pretty sure they can handle your needs.</p>
]]></content:encoded>
			<wfw:commentRss>http://danklassen.com/wordpress/2008/06/faster-dns-lookups-with-opendns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Server Monitoring Solutions</title>
		<link>http://danklassen.com/wordpress/2008/06/server-monitoring-solutions/</link>
		<comments>http://danklassen.com/wordpress/2008/06/server-monitoring-solutions/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 15:30:11 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[server admin]]></category>

		<guid isPermaLink="false">http://danklassen.ca/wordpress/?p=17</guid>
		<description><![CDATA[Where I work, we run a number of servers around the world to meet the varying needs of our customers. Some of these are dedicated hardware, virtual private servers, shared hosting, dedicated database server, intranets, you name it. One thing we have always found challenging is monitoring the general status of the servers in a [...]]]></description>
			<content:encoded><![CDATA[<p>Where I work, we run a number of servers around the world to meet the varying needs of our customers. Some of these are dedicated hardware, virtual private servers, shared hosting, dedicated database server, intranets, you name it. One thing we have always found challenging is monitoring the general status of the servers in a reliable fashion. We currently are using a combination of services and tools to achieve our goal.</p>
<p>We use <a title="Pingdom" href="http://www.pingdom.com" target="_blank">Pingdom</a> to monitor our web, <abbr title="Domain Name Server">dns</abbr> and email servers. Pingdom is a relatively inexpensive service that will ping your server on a regular basis from multiple locations around the world and time the responses. It will then create some nice pretty graphs reporting your uptime. If there should ever happen to be some down time (that never happens does it?), it can notify a list of people via email or sms. The main downside to pingdom is that it is only a reactive service. By the time it sends out an email, the server is down.</p>
<p>A more ideal solution is to have a pro-active monitoring system. For this we use a <abbr title="Open Source Software">OSS</abbr> solution named <a title="Monit" href="http://www.tildeslash.com/monit/" target="_blank">Monit</a>. It can be configured to trigger actions when certain limits are met. For example, if Apache is using up &gt;= 75% of your system&#8217;s memory, Monit can trigger a restart of httpd. Or, if you volume is &gt;= 95% full, it can send out a notification email to an admin to take appropriate actions. Check out their samples and documentation. It&#8217;s a pretty powerful system that can help prevent a complete server crash. One thing we have noticed how ever&#8230; if you intentionally bring down apache for maintenance and Monit is checking for a live instance of the webserver, be sure to kill monit first. Otherwise, it will unexpectedly restart apache causing potential issues.</p>
<p><span id="more-17"></span></p>
<p>Since I thought only the source was available for the linux distribution on one of the servers I manage I had to compile it. Afterwards, I did find a .rpm though but hey, compiling has never killed anyone right? Thankfully it was a pretty straight forward</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1742"><td class="code" id="p17code42"><pre class="bash" style="font-family:monospace;">yum <span style="color: #c20cb9; font-weight: bold;">install</span> byacc <span style="color: #c20cb9; font-weight: bold;">flex</span> <span style="color: #c20cb9; font-weight: bold;">gcc</span>
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>www.tildeslash.com<span style="color: #000000; font-weight: bold;">/</span>monit<span style="color: #000000; font-weight: bold;">/</span>dist<span style="color: #000000; font-weight: bold;">/</span>monit-4.10.1.tar.gz
md5sum monit-4.10.1.tar.gz
<span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-zxvf</span> monit-4-10.1.tar.gz
<span style="color: #7a0874; font-weight: bold;">cd</span> monit-4.10.1
.<span style="color: #000000; font-weight: bold;">/</span>configure
<span style="color: #c20cb9; font-weight: bold;">make</span>
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span></pre></td></tr></table></div>

<p>Then edit /etc/monitrc to add some checks into it. Change this to whatever will make sense for you. Feel free to take a look at some of the configuration samples on the <a title="Monit Documentation" href="http://mmonit.com/monit/documentation/monit.html#examples" target="_blank">Monit Documentation</a> page.</p>
<pre>set daemon  60 #number of seconds between checks

#where and how to log stuff
set logfile syslog facility log_daemon

#outgoing mail settings
set mail-format { from: you_server@address.here
 subject: Server monit alert -- $SERVICE $EVENT
}

#email addresses to notify
set alert email@1.com
set alert email@2.com

#overall system health checks
  check system server_name-memory_cpu
    if loadavg (1min) &gt; 5 for 3 cycles then alert
    if loadavg (5min) &gt; 2 for 3 cycles then alert
    if memory usage &gt; 90% then alert
    if cpu usage (user) &gt; 95% then alert
    if cpu usage (system) &gt; 95% then alert
    if cpu usage (wait) &gt; 95% then alert

#apache web server checks
  check process apache with pidfile /var/run/httpd.pid
    start program = "/etc/init.d/httpd start"
    stop program  = "/etc/init.d/httpd stop"
    #if cpu &gt; 60% for 2 cycles then alert
    #if cpu &gt; 80% for 5 cycles then restart
    if totalmem &gt; 512.0 MB for 5 cycles then alert
    if children &gt; 400 then restart
    if failed host www.yourdomain.com port 80 protocol http
       and request "/index.html"
       for 2 cycles then alert

#drive space checks
check device datafs_main with path /dev/sda1
if space usage &gt; 90% for 5 times within 15 cycles then alert
if inode usage &gt; 80% then alert</pre>
<p>then double check things will work with</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1743"><td class="code" id="p17code43"><pre class="bash" style="font-family:monospace;">monit validate</pre></td></tr></table></div>

<p>If you get the thumbs up, finally start the daemon with</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1744"><td class="code" id="p17code44"><pre class="bash" style="font-family:monospace;">monit</pre></td></tr></table></div>

<p>It should send out an email to your contact address letting you know that it has started. Now any time something starts to go awry on your server, you&#8217;ll know ahead of time.</p>
<p>It&#8217;s great to have a combination of monitoring solutions in place. Monit is good for notifying you before serious server issues happen. The main downside is, if sendmail dies on your system, there will be no way for it to send out it&#8217;s notifications. This is where having another solution such as Pingdom as a backup is very handy.</p>
<p>Has anyone else found a better solution for monitoring multiple remote servers? Something that will be pro-active and still work if the server completely fails? Feel free to comment and let me know.</p>
<p>UPDATE:</p>
<p>The developers of Monit were very kind and pointed out a couple of things I missed. To prevent monit from restarting apache (during maintenance, or whatever) use the command:</p>
<pre>monit unmonitor apache</pre>
<p>and then when you&#8217;re ready to go again,</p>
<pre>monit monitor apache</pre>
<p>Also, monit has a built in event queue (for the situation where sendmail dies for example) as well as options for backup smtp servers. To set these up, use the following lines in your config file:</p>
<pre>set eventqueue basedir /var/monit slots 100
set mailserver smtp1.foo.bar, smtp2.foo.bar
</pre>
<p>Thanks again Monit Team!</p>
]]></content:encoded>
			<wfw:commentRss>http://danklassen.com/wordpress/2008/06/server-monitoring-solutions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Password Security</title>
		<link>http://danklassen.com/wordpress/2008/05/password-security/</link>
		<comments>http://danklassen.com/wordpress/2008/05/password-security/#comments</comments>
		<pubDate>Thu, 29 May 2008 14:30:27 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[security]]></category>
		<category><![CDATA[server admin]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[system admin]]></category>

		<guid isPermaLink="false">http://danklassen.ca/wordpress/?p=14</guid>
		<description><![CDATA[So, everything requires a password these days right? Whether you&#8217;re setting up a new email account, signing up for twitter, or creating a new bank account. How in the world do you remember all of these passwords? Well, I&#8217;ve seen the old sticky note on the monitor (in the drawer, under the keyboard, you name [...]]]></description>
			<content:encoded><![CDATA[<p>So, everything requires a password these days right? Whether you&#8217;re setting up a new <a title="gMail - The Best Webmail Out There" href="http://www.gmail.com" target="_blank">email account</a>, signing up for <a href="http://danklassen.ca/wordpress/2008/05/twittering/">twitter</a>, or creating a new bank account. How in the world do you remember all of these passwords? Well, I&#8217;ve seen the old sticky note on the monitor (in the drawer, under the keyboard, you name it) all too often, and we all know that we shouldn&#8217;t use the same password everywhere right? That leaves two options: have an amazing memory (ask my wife, I don&#8217;t) or find a way to securely manage your passwords.</p>
<p><a href="http://danklassen.ca/wordpress/wp-content/uploads/2008/05/keepassx1.png"><img class="alignright size-medium wp-image-21" title="keepassx Main Window" src="http://danklassen.ca/wordpress/wp-content/uploads/2008/05/keepassx1-300x199.png" alt="" width="300" height="199" /></a>Thankfully <a title="KeePass Home Page" href="http://keepass.info" target="_blank">KeePass</a> (or <a href="http://www.keepassx.org/" target="_blank">KeepassX</a> on Linux or Mac OS-X) can help out where my memory lacks. KeePass will provide you with a secure place to store all of you passwords in an encrypted format. From the screenshot you can get a rough idea as to what the interface looks like. When you highlight any of the entries, you can just Ctrl+C to copy the password and paste it into whatever application is asking for it. For websites, there&#8217;s even an &#8216;auto-type&#8217; feature. To use this, you first go to the site you want to log in to, click in the username box, and then open KeePass and click on the entry for the site. Then press Ctrl+V and it will type in your username / password for you. Slick eh?</p>
<p><span id="more-14"></span></p>
<p><a href="http://danklassen.ca/wordpress/wp-content/uploads/2008/05/keepassx2.png"><img class="alignleft size-medium wp-image-22" title="keepassx Password Generation" src="http://danklassen.ca/wordpress/wp-content/uploads/2008/05/keepassx2-280x300.png" alt="" width="280" height="300" /></a>I&#8217;ve also been asked about how to generate secure passwords. If you are going to use something like KeePass, I would recommend using it&#8217;s built in password generator tool (take a look to the left). It gives you a few options to configure, and then spits out a nice random password for you. For those of you using Ubuntu (or any variant of linux for that matter) you can use the command line tool pwgen (click to <a href="apt:pwgen">install</a> in Ubuntu or &#8216;apt-get install pwgen&#8217;). After installing run something like:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1447"><td class="code" id="p14code47"><pre class="sh" style="font-family:monospace;">pwgen -B -N 5 -1</pre></td></tr></table></div>

<p>To get a list of passwords similar to:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1448"><td class="code" id="p14code48"><pre class="sh" style="font-family:monospace;">eiyah7Ei
Aeh3Ooxo
jaW9ahFi
rohxiJ7z
uth9ZieY</pre></td></tr></table></div>

<p>The -B parameter tells it to not use ambiguous characters (is it a 0 or an O? l or I?). -N 5 creates 5 for you to choose from and -1 puts them each on their own line to make it easier to pick.</p>
<p>If you don&#8217;t have access to either of those tools, or you need something that you&#8217;ll have a better shot of remembering, try basing the password off of a phrase or something you&#8217;ll remember, and add in a couple twists. Let&#8217;s try one here&#8230; off the top of my head, the first phrase that came to mind was &#8220;an apple a day keeps the doctor away&#8221; and the password I came up with is &#8220;4pP13/d=!phD&#8221;. (4pp13 kinda loos like apple, /d is short for per day, =! is &#8216;not equals&#8217; in programming, and phD is a doctor.. apple/day equals no doctor). Okay, that may not be the best example, but you get the idea right?</p>
<p>If you are needing to create a password for a remote server, I would recommend looking into <a title="Creating SSH Keys" href="/wordpress/2008/05/creating-ssh-keys/" target="_self">ssh keys</a>. Used well they can provide better security and less hassle for you.</p>
<p>Anyone else have any password strategies they&#8217;d like to share? Please, please don&#8217;t say &#8220;my favorite pet&#8217;s name&#8221; or &#8220;my birthday and last 4 digits of my phone number&#8221;&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://danklassen.com/wordpress/2008/05/password-security/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
