<?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>Digital-Traffic.net &#187; Technology</title>
	<atom:link href="http://digital-traffic.net/category/technology/feed/" rel="self" type="application/rss+xml" />
	<link>http://digital-traffic.net</link>
	<description>Public thoughts of a network administrator</description>
	<lastBuildDate>Sun, 31 Jan 2010 21:02:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Implementing IPv6 at home—part 2</title>
		<link>http://digital-traffic.net/technology/implementing-ipv6-at-home-part-2/</link>
		<comments>http://digital-traffic.net/technology/implementing-ipv6-at-home-part-2/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 20:58:25 +0000</pubDate>
		<dc:creator>Brian Shacklett</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[cisco]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[networking]]></category>

		<guid isPermaLink="false">http://digital-traffic.net/?p=242</guid>
		<description><![CDATA[A while back I did some experimentation with IPv6 on my Cisco 2611xm. I was using a tunnel provided by Hurricane Electric, which worked well, but I had no firewall and that made me a bit nervous. A little while after I got things set up, I procured a Cisco ASA5505 with a 50 client [...]]]></description>
			<content:encoded><![CDATA[<p>A while back I did some <a href="http://digital-traffic.net/technology/implementing-ipv6-at-home-part-1/">experimentation</a> with IPv6 on my Cisco 2611xm. I was using a tunnel provided by <a href="http://tunnelbroker.net">Hurricane Electric</a>, which worked well, but I had no firewall and that made me a bit nervous. A little while after I got things set up, I procured a Cisco ASA5505 with a 50 client license via eBay.  My hope was that I could use the ASA for the firewall and the router to terminate the tunnel. As it turns out, this would have required a second IP address, because the ASA is not able to pass Protocol 41 traffic.</p>
<p><span id="more-242"></span></p>
<p>
Time Warner&#8217;s reluctance to issue me a second IP address meant that I&#8217;d have to find another solution. <a href="http://www.sixxs.net">SixXS</a> is another tunnel broker which makes use of a protocol called <a href="http://en.wikipedia.org/wiki/Ayiya">AYIYA</a>. AYIYA is capable of traversing NAT, so it would work well in my situation. Unfortunately it&#8217;s not supported by Cisco, so the 2611 was of no use to me anymore.
</p>
<p>
After some failed experiments and lost money with open source firmware and Linksys routers, I decided that a full Linux install would be the best route to go. I built a machine out of spare parts that I had laying around and installed Ubuntu 9.10 on it. Once I got everything up and running, I installed the SixXS client (AICCU) and started working on getting the tunnel up and running.
</p>
<p>
I hit another snag when I found out that the point of presence (the tunnel broker&#8217;s endpoint) was down. I jumped to freenet6 in the interest of keeping things moving. They provide a tunnel via <a href="http://en.wikipedia.org/wiki/Tunnel_Setup_Protocol">TSP</a>, which also traverses NAT. Their nearest POP is all the way over in Montreal, which means big latencies for someone in LA, but I was able to establish a tunnel, which I was satisfied with for the moment. Here&#8217;s my config for their client (gw6c):
</p>
<pre class="brush: bash">
userid=
passwd=
#server=broker.freenet6.net
# Always use Montreal POP
server=montreal.freenet6.net
auth_method=any
prefixlen=64
template=linux
if_tunnel_v6v4=freenet6
if_tunnel_v6udpv4=freenet6
# Assign the v6 address to eth0
if_prefix=eth0
keepalive=yes
keepalive_interval=10
host_type=router
</pre>
<p>
Once I&#8217;d established my connection and saw what my v6 IP was going to be, I used a <a href="http://www.liquidalchemy.com/liquidalchemy/">v6 subnet calculator</a> to find out what my /64 networks would be and noted them down. I then entered the v6 address into /etc/network/interfaces so that I could add static routes as the interface came up:
</p>
<pre class="brush: bash">
# v6 Interface
auto eth0
iface eth0 inet6 static
    #address 169.254.1.2
    #netmask 255.255.0.0
    address 2001::1
    netmask 64
    up ip -6 route add 2001:0:0:1::/64 via 2001::2 dev eth0
</pre>
<p>
You may notice the link local v4 address that&#8217;s been commented out on the v6 address. The reason for this being there is that gw6c can&#8217;t do its magic unless the interface specified is up. Until I had my v6 address, I used this link local address. 2001::2, as specified in the route above, is my ASA, which has had it&#8217;s address manually configured. 2001:0:0:1::/64 is the network that I&#8217;m using for my LAN. I&#8217;ve got 254 more networks that I can make use of if I ever find a reason (2001:0:0:2::/64&#8230;2001:0:0:ff::/64).
</p>
<p>
Configuring the ASA was fairly simple. There&#8217;s an outside and an inside interface that need to be configured, then the default route needs to be set:
</p>
<pre class="brush: plain">
interface Vlan10
 nameif inside
 security-level 100
 ip address 192.168.1.1 255.255.255.0
 ipv6 address 2001:0:0:1::1/64
!
interface Vlan30
 no forward interface Vlan20
 nameif v6tunnel
 security-level 0
 no ip address
 ipv6 address 2001::2/64
!
ipv6 route v6tunnel ::/0 2001::1
</pre>
<p>
As far as I can tell, there&#8217;s really no reason I need to use a second VLAN for the v6 tunnel, so I&#8217;m going to eventually try moving it to the outside VLAN, but for now it&#8217;s working well, and I don&#8217;t need a DMZ at the moment.
</p>
<p>
Once I configured the ASA properly, it started advertising itself and all of the hosts on my LAN are picking up v6 addresses from it. The problem I&#8217;m left with is how to do DNS discovery. Unfortunately there doesn&#8217;t seem to be a good answer here. Microsoft seems to be fond of the idea of using DHCPv6, Apple wants to use well-known anycast addresses and I honestly have no idea what&#8217;s going on in the Linux world.</p>
]]></content:encoded>
			<wfw:commentRss>http://digital-traffic.net/technology/implementing-ipv6-at-home-part-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Upgrading to vSphere Part 2: Hosts and VMs</title>
		<link>http://digital-traffic.net/technology/upgrading-to-vsphere-part-2/</link>
		<comments>http://digital-traffic.net/technology/upgrading-to-vsphere-part-2/#comments</comments>
		<pubDate>Sat, 17 Oct 2009 19:41:23 +0000</pubDate>
		<dc:creator>Brian Shacklett</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[virtual machines]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://digital-traffic.net/?p=215</guid>
		<description><![CDATA[In my last post I described my experience with upgrading from VirtualCenter 2.5 to vCenter4. Here I&#8217;ll be describing the process of upgrading the host machines via a couple of different methods as well as my process for getting the VMs upgraded to the latest verision of VMware&#8217;s virtual hardware. Upgrading Hosts VMWare has made [...]]]></description>
			<content:encoded><![CDATA[<p>
In my last post I described my experience with upgrading from VirtualCenter 2.5 to vCenter4. Here I&#8217;ll be describing the process of upgrading the host machines via a couple of different methods as well as my process for getting the VMs upgraded to the latest verision of VMware&#8217;s virtual hardware.
</p>
<p><span id="more-215"></span></p>
<h3>Upgrading Hosts</h3>
<p>
VMWare has made it very easy to upgrade hosts to ESX 4. I made use of two remote upgrade options in my migration:
</p>
<dl>
<dt>vCenter Update Manager</dt>
<dd>A centralized update management system which can handle anything from security updates to full ESX upgrades</dd>
<dt>The Host Update Utility</dt>
<dd>A standalone application built into the new vSphere client</dd>
</dl>
<h4>vCenter Update Manager</h4>
<p>
For the local host machines, I made use of vCenter&#8217;s update manager. This is an add-on for vCenter and it requires its own database, but I highly recommend using it. Its end functionality is similar to any built-in software update mechanism, but its flexibility is what makes it really impressive. For information on installing, please see the <a href="http://www.vmware.com/pdf/vsp_vum_40_admin_guide.pdf">administration guide</a>.
</p>
<p>
Update Manager works on the idea of a &#8220;baseline&#8221;: a set of minimum requirements that a target needs to meet to be considered compliant. Baselines can be applied at any level in the vCenter hierarchy. To handle the upgrade of our host machines, I created a baseline for ESX hosts specifying that they should be at level 4.0. I then applied this baseline at the datacenter level in both sites. In some cases it may be more apt to apply it at the cluster level, but we have no necessity for legacy hosts in our case.
</p>
<p>
Once the baseline was applied, I selected the host I wished to update and clicked the update manager tab. I could see, as expected, that it was not compliant with the upgrade baseline applied to it. In a DRS cluster, one should be able to click the remediate button and let vCenter do all of the work to migrate VMs off and put the host in maintenance mode prior to the upgrade. This requires that you keep a pretty clean environment, however.
</p>
<p>
In our case, we had some hosts that were unable to vMotion either due to snapshots or mapped drives, so I had to take care of things manually. As soon as the host was in maintenance mode, however, choosing remediate rebooted the host and performed the upgrade all on its own within about 20 minutes or so. The progress bar was fairly accurate at most points of the upgrade and once the host was back up, I could see that it was compliant with the baseline.
</p>
<h4>The Host Update Utility</h4>
<p>
One major concern in my case was a couple of hosts sitting on the other side of a slow (3mbps) WAN link. I’m sure you’ll agree that most IT tasks are at their best when they go unnoticed. Well, taking up a huge chunk of a site’s bandwidth while I transferred an ISO multiple times would certainly not win me any gold stars.
</p>
<p>
VMWare’s Update Manger is capable of staging updates on the target for later install, but this only works on hosts that are at 4.0 or above. It would also require moving the ISO over the WAN multiple times, because the updates are staged to the host rather than another vCenter or Update Manager server. This made the Host Update Utility a much more interesting option.
</p>
<p>
Fortunately, there’s already data replication going on between the main site and the remote one for DR purposes. I was able to mount a snapshot of one of our DR volumes and copy the ISO onto a file server in that site. Launching the host update utility for the first time, I received a prompt to download patches from VMWare. The servers then needed to be added by hostname from the file menu. Once they&#8217;re added, the host update utility will do a quick scan to find out what version they&#8217;re at. If it&#8217;s in an upgradable state, the &#8220;Upgrade Host&#8221; button will initiate the upgrade.
</p>
<p>
Overall the procedure from this point on is very similar to the update manager service. The one notable exception is that there is a lot less feedback regarding the status of the host. There were a few times where I was wondering if the hosts were stalled, but eventually the progress bar jumped forward and I could see that things were still working. For this reason, I definitely recommend using the update manager service where possible.
</p>
<h3>Upgrading VMs</h3>
<p>
To take full advantage of the new functionality in vSphere 4, the VMs, themselves, must be upgraded. ESX 3.x operated on virtual hardware version 4. vSphere uses version 7, which has a number of notable improvements in storage, networking, and hotswap capability. It&#8217;s important to note that there are <a href="http://blog.scottlowe.org/2009/07/05/another-reason-not-to-use-pvscsi-or-vmxnet3/">a few disappointments</a> with the new networking and storage modules, but overall it&#8217;s a large step forward. There is a useful article at <a href="http://www.boche.net/blog/">boche.net</a> that talks about <a href="http://www.boche.net/blog/index.php/2009/05/10/vsphere-memorycpu-hotplug-hot-add/">memory and CPU hotplug</a>.
</p>
<p>
Upgrading the VMs is a two step process requiring at least 2 reboots (my process includes 3). First, the VMWare tools installation must be upgraded in the guest operating system. This may be done either from the vSphere client or from within the guest OS by opening the VMWare tools console. In my case, I chose to upgrade from within the guest so I was keeping an eye on every step of the process. This may not be viable for anyone with a large number of VMs to update. Upgrading the VMWare tools will require a reboot.
</p>
<p>
Secondly, the virtual hardware needs to be upgraded. The virtual machine needs to be powered down for this step. It&#8217;s a simple matter of right-clicking the virtual machine and selecting &#8220;Upgrade virtual hardware&#8221;. A message will pop up notifying you that <em>this is a one-way process</em> and once it&#8217;s finished, <em>your upgraded VM will not work on older versions of ESX</em>. Keep this in mind if you have any legacy hosts staying in your environment.
</p>
<p>
The next time the guest OS boots, it will detect the new hardware and configure it. For Windows VMs, this will require another reboot. I haven&#8217;t, yet, tested the process on a Linux VM. Once the guest OS is finished rebooting, the upgrade process is complete.</p>
]]></content:encoded>
			<wfw:commentRss>http://digital-traffic.net/technology/upgrading-to-vsphere-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upgrading to vSphere Part 1: Installing vCenter</title>
		<link>http://digital-traffic.net/technology/upgrading-to-vsphere-part-1/</link>
		<comments>http://digital-traffic.net/technology/upgrading-to-vsphere-part-1/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 02:38:32 +0000</pubDate>
		<dc:creator>Brian Shacklett</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[upgrade]]></category>
		<category><![CDATA[vcenter]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[vmware]]></category>
		<category><![CDATA[vsphere]]></category>

		<guid isPermaLink="false">http://digital-traffic.net/?p=179</guid>
		<description><![CDATA[Last week I started our migration from VMWare&#8217;s VI3 to vSphere. There are many improvements to the load balancing capabilities as well as the management capabilities. The storage engine has been greatly improved as well. Storage vMotion is available in the GUI without a plugin and thin provisioning is finally available, which is a huge [...]]]></description>
			<content:encoded><![CDATA[<p>
Last week I started our migration from VMWare&#8217;s VI3 to vSphere. There are many improvements to the load balancing capabilities as well as the management capabilities. The storage engine has been greatly improved as well. Storage vMotion is available in the GUI without a plugin and thin provisioning is finally available, which is a huge boon and reason enough to make the move on its own. Most of this process can be completed with no downtime for the virtual machines.
</p>
<p><span id="more-179"></span></p>
<h3>Environment</h3>
<p>Our environment is fairly small in terms of number of hosts, but we have most of the components in place, which makes for a very nice upgrade experience.</p>
<ul>
<li>A VirtualCenter Server v2.5 (primary data center)</li>
<li>Two host machines v3.5 (primary data center)</li>
<li>Two host machines v3.0 (disaster recovery data center)</li>
</ul>
<h3>Procedure</h3>
<p>
The first thing that needs to happen during the migration is upgrading the VirtualCenter server. vCenter 4 is very capable of managing legacy products, but it&#8217;s a good idea to take a look at the <a href="http://www.vmware.com/pdf/vsphere4/r40/vsp_compatibility_matrix.pdf">compatibility matrices</a> just to be safe.
</p>
<h4>Migration Strategy</h4>
<p>
The hardware that our current VirtualCenter Server was running on was less than adequate for running vCenter 4. So, I went ahead and built a new server to host vCenter. This had an added bonus of a very easy rollback plan if anything went wrong. All I would have to do is restore the database and boot up the old server. VMWare has an article that outlines part of this process at <a href="http://kb.vmware.com/kb/5850444">http://kb.vmware.com/kb/5850444</a>
</p>
<h4>Installation</h4>
<p>
To use the existing VirtualCenter database, a system DSN needs to be created to point to the existing database. Enter in the user credentials and set the default database to &#8220;VCDB&#8221; (or whatever your VirtualCenter database is called) and the rest of the settings should be fine at the defaults. It&#8217;s important to note that the VirtualCenter service should be stopped and disabled on the original server before proceeding from here. Bad things can happen if you have two servers trying to access that database.
</p>
<p>
After creating the DSN, I began installing vCenter4. I was greeted with an error saying: <em>&#8220;Please make sure SQL Server Agent service is running on the database server.&#8221;</em> This ended up being an issue with some maintenance jobs that I had set up when migrating the database. Renaming them resolved the issue.
</p>
<p>
The next thing to keep in mind is that VirtualCenter and vCenter make use of SSL certificates. These needed to be copied from the old VirtualCenter server. By default, they are located at <em>%AllUsersProfile%\Application Data\VMWare\VMWare VirtualCenter\SSL</em>. I copied the entire SSL folder onto the new server and vCenter found it without issue.
</p>
<h4>Post-install Configuration</h4>
<p>
From here on out, I let the installer do the rest of the work. In about 5 minutes I had a working vCenter server set up. At this point I had to connect the hosts to the new server. Before the ESX hosts can be connected, however, they need to be licensed. vCenter handles this by allowing you to specify the IP address of an external licensing server for legacy hosts. Adding the IP address the old VirtualCenter server will take care of this for the time being.
</p>
<p>
Each ESX host remembers the IP address of the VirtualCenter server that manages it to prevent conflicts. Right-clicking the server and selecting connect will make vCenter communicate with the hosts and override that information. It will then connect the the new vCenter server to the host.
</p>
<p>
I had a little trouble with our remote ESX hosts. It&#8217;s important that the <em>/tmp/vmware-root</em> directory exists on the target ESX host. If that&#8217;s not there, the vCenter server is unable to transfer binaries that are required to set up the connection. The folder can be created by the root user; default permissions should be fine. One of our servers was a little more difficult than the other and still would not connect after creating the temp directory. Restarting the <strong>vmware-mgmt</strong> service resolved this.
</p>
<h4>Still to come&#8230;</h4>
<p>
vCenter 4 is now managing our ESX 3 and ESX 3.5 hosts. In the next post I&#8217;ll walk through the process of upgrading the host machines and the virtual machines.</p>
]]></content:encoded>
			<wfw:commentRss>http://digital-traffic.net/technology/upgrading-to-vsphere-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Formatting byte values in Excel 2007</title>
		<link>http://digital-traffic.net/technology/formatting-byte-values-in-excel-2007/</link>
		<comments>http://digital-traffic.net/technology/formatting-byte-values-in-excel-2007/#comments</comments>
		<pubDate>Thu, 21 May 2009 02:44:51 +0000</pubDate>
		<dc:creator>Brian Shacklett</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[conditional formatting]]></category>
		<category><![CDATA[excel]]></category>
		<category><![CDATA[formatting]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[spreadsheet]]></category>

		<guid isPermaLink="false">http://digital-traffic.net/?p=132</guid>
		<description><![CDATA[<p>
I was given a project, recently, that involved creating a spreadsheet to list storage capacities and free space. One thing I wasn't sure of, was how to format the values&#8230;
</p>
<p>
&#8230;After thinking about it for a while, I decided to look into Excel's conditional formatting feature. There are premade rules for changing the cell color, etc., but it turns out that it's capable of quite a bit more&#8230;
</p>]]></description>
			<content:encoded><![CDATA[<p>
I was given a project, recently, that involved creating a spreadsheet to list storage capacities and free space. One thing I wasn&#8217;t sure of, was how to format the values.
</p>
<p>
A bit of searching on the internet for formatting KB MB, etc. came up with a <a href="http://www.eggheadcafe.com/conversation.aspx?messageid=33805458&#038;threadid=33805450">post</a> by Ajay on <a href="http://www.eggheadcafe.com">http://www.eggheadcafe.com</a> which suggested pasting the following code into the current worksheet&#8217;s private module:
</p>
<pre class="brush: vb">
Private Sub Worksh5eet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range(&quot;C:C&quot;)) Is Nothing Then
        If Target.Value &lt; 1000 Then
            Target.NumberFormat = &quot;0 \B&quot;
        ElseIf Target.Value &lt; 999500 Then
            Target.NumberFormat = &quot;0.000, \K\B&quot;
        ElseIf Target.Value &lt; 999500000 Then
            Target.NumberFormat = &quot;0.000,, \M\B&quot;
        ElseIf Target.Value &lt; 999500000000# Then
            Target.NumberFormat = &quot;0.000,,, \G\B&quot;
        Else
            Target.NumberFormat = &quot;0.000,,,, \T\B&quot;
        End If
    End If
End Sub
</pre>
<p>
I had some trouble with the macro and eventually abandoned it, but it did give me some ideas. The actual formats were good and I ended up using them later. The criteria for setting the formatting was spot on as well. After thinking about it for a while, I decided to look into Excel&#8217;s conditional formatting feature. There are premade rules for changing the cell color, etc., but it turns out that it&#8217;s capable of quite a bit more.
</p>
<p><span id="more-132"></span></p>
<h3>Setting up formatting rules</h3>
<p>
Conditional formatting is based on sets of rules which are stored in each worksheet. To create a new rule, go to <code class="input">Home &gt; Styles &gt; Conditional Formatting &gt; Manage Rules...</code>. Click <code class="input">New Rule...</code> and select &quot;Format only cells that contain&quot;. Select &quot;Cell Value&quot;, &quot;less than&quot; and enter &quot;1000&quot; for the value.
</p>
<p><img src="http://digital-traffic.net/wp-content/uploads/2009/05/new-rule.png" alt="New Rule... dialog" title="New Rule... dialog" width="520" height="91" class="size-full wp-image-150" /></p>
<p>
Once the condition is set, click <code class="input">Format...</code> set the formatting. In this case we are formatting values that are less than 1KB, so we&#8217;ll want to set a custom format of &quot;0 \B&quot;
</p>
<p><img src="http://digital-traffic.net/wp-content/uploads/2009/05/format-bytes.png" alt="Format Cells dialog" title="Format Cells dialog" width="525" height="340" class="size-full wp-image-157" /></p>
<p>
Make a few more rules for kilobytes, megabytes, etc. You&#8217;ll probably want to show a couple of decimal places for the larger numbers. Add a comma for each order of magnitude as you&#8217;ll be showing a suffix rather than the extra zeros. You should end up with formats similar to this:</p>
<pre>
0 \B
0.00, \K\B
0.00,, \M\B
0.00,,, \G\B
</pre>
</ul>
<h3>Applying the rules</h3>
<p>
Once you finish creating your rules, you&#8217;ll be brought back to the Conditional Formatting Rules Manager. You&#8217;ll probably notice that &#8220;Current Selection&#8221; is selected at the top of the dialog. Change this over to &#8220;This Worksheet&#8221; for better control. Although it shouldn&#8217;t matter too much, I&#8217;d recommend ordering the rules from smallest to largest. This should prevent potentially funky behavior if a cell&#8217;s value should fall on a boundary between rules. I also suggest leaving &#8220;Stop If True&#8221; unchecked to let the latter rule win.
</p>
<p>
You&#8217;ll notice that there is an &#8220;Applies To&#8221; box. This is where we select which cells will be affected by the rules. Click the button and make your selections. Cells in each selection should be adjacent to avoid complications. Use the ctrl key to select multiple ranges. Once you&#8217;ve made your selection, click the button again and copy the contents of the box to the other rules and you&#8217;re done.
</p>
<h3>Other thoughts</h3>
<p>
This approach works based on multiples of 1000 instead of 1024. Setting the criteria to look for the correct boundaries is easy enough by specifying &quot;Cell Value between =Power(2,10) and =Power(2,20)&quot;, but I haven&#8217;t yet found a way to get Excel to see 1024B as 1KB as opposed to 1.024KB. Any input on this would be quite welcome.
</p>
<p>
This approach should work well for formatting any units that are base 10; metric units, for instance. The base unit can be chosen arbitrarily, so it&#8217;s really quite wide open.</p>
]]></content:encoded>
			<wfw:commentRss>http://digital-traffic.net/technology/formatting-byte-values-in-excel-2007/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Remote server administration with Windows Vista</title>
		<link>http://digital-traffic.net/technology/remote-server-administration-with-windows-vista/</link>
		<comments>http://digital-traffic.net/technology/remote-server-administration-with-windows-vista/#comments</comments>
		<pubDate>Sun, 26 Apr 2009 22:30:45 +0000</pubDate>
		<dc:creator>Brian Shacklett</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[administrative tools]]></category>
		<category><![CDATA[remote]]></category>
		<category><![CDATA[vista]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows Server]]></category>

		<guid isPermaLink="false">http://digital-traffic.net/?p=113</guid>
		<description><![CDATA[If you&#8217;re a systems administrator and run Vista, you might have run into some trouble with the server 2003 administration tools package (adminpack). Well, there&#8217;s good news for you. Remote administration is now built into the Vista operating system. Firstly, you should be running service pack 1. I believe the tools are available for the [...]]]></description>
			<content:encoded><![CDATA[<p>
If you&#8217;re a systems administrator and run Vista, you might have run into some trouble with the server 2003 administration tools package (adminpack). Well, there&#8217;s good news for you. Remote administration is now built into the Vista operating system.
</p>
<ol>
<li>
		Firstly, you should be running service pack 1. I believe the tools are available for the original release of Vista, but I haven&#8217;t delved into it.
	</li>
<li>
You&#8217;ll need to download the updated RSAT pack from Microsoft:</p>
<div class="multilink">
<h5>Microsoft Remote Server Administration Tools for Windows Vista&#8230;</h5>
<ul>
<li><a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=D647A60B-63FD-4AC5-9243-BD3C497D2BC5&#038;displaylang=en">&#8230;for x64-based Systems</a>
</li>
<li>
<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9ff6e897-23ce-4a36-b7fc-d52065de9960&#038;DisplayLang=en">&#8230;for x86-based Systems</a>
</li>
</ul>
</div>
</li>
<li>
		Go to the control panel and open &#8220;Programs and Features&#8221;.
	</li>
<li>
		Click on &#8220;Turn Windows features on or off.
	</li>
<li>
		Find and enable &#8220;Remote Server Administration Tools&#8221;.
	</li>
</ol>
<p>
Once you hit OK, your system will spend about 5-10 minutes configuring itself for remote administration and the &#8220;Administrative Tools&#8221; menu should be populated.</p>
]]></content:encoded>
			<wfw:commentRss>http://digital-traffic.net/technology/remote-server-administration-with-windows-vista/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t forget StdErr</title>
		<link>http://digital-traffic.net/technology/dont-forget-stderr/</link>
		<comments>http://digital-traffic.net/technology/dont-forget-stderr/#comments</comments>
		<pubDate>Sat, 28 Mar 2009 18:03:56 +0000</pubDate>
		<dc:creator>Brian Shacklett</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[scripting]]></category>

		<guid isPermaLink="false">http://digital-traffic.net/?p=107</guid>
		<description><![CDATA[I recently ran into an issue where a WSH script was calling an external executable and returning an exit code of 0 even though there had been an error running the external executable. The problem is that I was relying on oExec.StdOut.ReadAll() to block the script until the command had finished processing. The ReadAll() method [...]]]></description>
			<content:encoded><![CDATA[<p>I recently ran into an issue where a WSH script was calling an external executable and returning an exit code of 0 even though there had been an error running the external executable. The problem is that I was relying on <code class="input">oExec.StdOut.ReadAll()</code> to block the script until the command had finished processing. The <code class="input">ReadAll()</code> method functions synchronously, so if the executable had been writing to StdOut, I would have been right. Unfortunately, I was neglecting the StdErr stream. So, not only did I miss the errors that the executable threw, the script didn&#8217;t block on the executable&#8217;s output, so I returned the exit code before the executable had actually finished running. The lesson here is to always think about StdErr no matter what you&#8217;re trying to accomplish.</p>
]]></content:encoded>
			<wfw:commentRss>http://digital-traffic.net/technology/dont-forget-stderr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GnuWin32: A more helpful CLI for Windows</title>
		<link>http://digital-traffic.net/technology/gnuwin32-a-more-helpful-cli-for-windows/</link>
		<comments>http://digital-traffic.net/technology/gnuwin32-a-more-helpful-cli-for-windows/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 06:43:02 +0000</pubDate>
		<dc:creator>Brian Shacklett</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[cli]]></category>
		<category><![CDATA[Gnu]]></category>
		<category><![CDATA[utilities]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://digital-traffic.net/?p=60</guid>
		<description><![CDATA[I cut my system administration teeth on UNIX-based systems (OS X Server and Linux) and I quickly got used to being able to do a multitude of things very easily and efficiently from the command line. Windows, the main platform I support now, is missing a lot of these features. Every once in a while, [...]]]></description>
			<content:encoded><![CDATA[<p>
I cut my system administration teeth on UNIX-based systems (OS X Server and Linux) and I quickly got used to being able to do a multitude of things very easily and efficiently from the command line. Windows, the main platform I support now, is missing a lot of these features. Every once in a while, after working on a Linux system, I&#8217;ll drop into a Windows command line and type something like <code class="input">tail -f foo.log</code> just to get smacked with an error because the system has no idea what I&#8217;m asking of it.
</p>
<p>
Fortunately, the good people working on the <a href="http://gnuwin32.sourceforge.net">GnuWin32</a> project have decided that Windows admins deserve a robust command line as well. GnuWin32 is a set of Windows-native executables that duplicate a large amount of the functionality found on a UNIX or Linux system. A lot of these little programs can make a Windows administrator&#8217;s life much easier. grep, tail, diff&#8230; all available without installing <a href="http://cygwin.org/">Cygwin</a>.
</p>
<p>
The packages are distributed in a number of ways. Binaries are packaged in small collections. There&#8217;s are packages for the core utilities, diff utilities and separate packages for some of the other utilities like grep. There&#8217;s also a setup utility that functions as a package manager to help you keep all of the utilities up to date. Overall, this is a great project that&#8217;s definitely worth a look for anyone that hangs out in the CLI much.</p>
<p>
]]></content:encoded>
			<wfw:commentRss>http://digital-traffic.net/technology/gnuwin32-a-more-helpful-cli-for-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Implementing IPv6 At Home &#8211; Part 1</title>
		<link>http://digital-traffic.net/technology/implementing-ipv6-at-home-part-1/</link>
		<comments>http://digital-traffic.net/technology/implementing-ipv6-at-home-part-1/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 07:33:38 +0000</pubDate>
		<dc:creator>Brian Shacklett</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[cisco]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[routing]]></category>

		<guid isPermaLink="false">http://digital-traffic.net/?p=40</guid>
		<description><![CDATA[There have been a lot of articles floating around the net, lately, that mention how quickly we&#8217;re running out of IPv4 addresses. Seeing all of this got my interests in IPv6 rekindled. I&#8217;d been meaning to get it up and running on my network since I got my Cisco router, but it wasn&#8217;t until lately [...]]]></description>
			<content:encoded><![CDATA[<p>
There have been a lot of articles floating around the net, lately, that mention how quickly we&#8217;re running out of IPv4 addresses. Seeing all of this got my interests in IPv6 rekindled. I&#8217;d been meaning to get it up and running on my network since I got my Cisco router, but it wasn&#8217;t until lately that I was really able to find enough information on the subject to know where to begin. I don&#8217;t have anywhere near enough knowledge to write up a tutorial, but I find it helpful and interesting to hear about other peoples&#8217; experience with new technology. I hope it&#8217;s helpful for you to see how things went for me.
</p>
<p><span id="more-40"></span></p>
<h3>Selecting a transition mechanism</h3>
<p>
With regards to deployment, IPv6 is really in its toddler years right now. We&#8217;ve moved past the old <a href="http://go6.net/ipv6-6bone/">6bone</a> test network, but most ISPs still aren&#8217;t offering native connectivity yet. That means that the majority of people are going to have to choose a transition mechanism to connect to the rest of the world. There are two main types of transition mechanisms:
</p>
<ul>
<li>Dual network stacks running IPv4 and IPv6 simultaneously</li>
<li>Encapsulation of IPv6 packets inside of IPv4 packets (tunneling)</li>
</ul>
<p>
Running dual network stacks is a no-brainer. Even though I&#8217;m setting up v6, I still need to talk to all of the v4 hosts that comprise the majority of the current Internet. The real question was what type of tunnel I wanted to use.. There are quite a few different options out there; the most well known being <a href="http://www.ietf.org/rfc/rfc3056.txt">6to4</a>, <a href="http://www.ietf.org/rfc/rfc4380.txt">Teredo</a> and manual point to point tunneling.
</p>
<p>
6to4 and Teredo are both automatic tunneling protocols. They don&#8217;t require a specific tunnel to be configured and your IPv6 addresses are automatically allocated based on your IPv4 address. Teredo is meant to be used on a single host behind NAT, while 6to4 is generally used on gateway devices. I&#8217;d recommend reading the RFCs for more specific information, but a Google search will go a long way as well.
</p>
<p>
I had a very hard time trying to decide which way to go because I have a dynamic IP address and have no easy way to get a static address. In the end, I chose a manual point to point tunnel. My IP address doesn&#8217;t change that often and I decided that the extra control was worth the extra effort of making a change on the tunnel provider&#8217;s site once every few months. My tunnel is through <a href="http://tunnelbroker.net/">Hurricane Electric</a>. They&#8217;ve got a very easy setup wizard and even have example configurations for many deployment scenarios.
</p>
<h3>Requesting and configuring the tunnel</h3>
<p>
This was the easiest step in the entire setup. I went to <a href="http://tunnelbroker.net">http://tunnelbroker.net</a> and signed up for an account. Then I just clicked on &#8220;Create Regular Tunnel&#8221;. The form asks for your public IP address and gives you a list of servers in different locations to connect to. HE assigns a routed /64 by default, but everyone has the option of allocating a /48 with the click of a link.
</p>
<h3>Router configuration</h3>
<p>
After getting the tunnel set up, I went on to configure my router. As I mentioned before, HE has configurations available for the tunnel, so that didn&#8217;t take much work at all. The rest I was able to piece together from a Cisco article: <a href="http://www.cisco.com/en/US/tech/tk872/technologies_configuration_example09186a00800b49a5.shtml">Tunneling IPv6 through an IPv4 Network</a>. What I came up with in the end was something like this:
</p>
<pre class="brush: plain">
ipv6 unicast-routing
ipv6 cef
!
interface Tunnel0
 description Hurricane Electric IPv6 Tunnel Broker
 no ip address
 ipv6 enable
 ipv6 address 2001:x:x:x::2
 tunnel source x.x.x.x
 tunnel destination x.x.x.x
 tunnel mode ipv6ip
!
interface FastEthernet0/1
 description Inside Network
 ipv6 address 2001:x:x::1/64
 ipv6 enable
!
ipv6 route ::/0 Tunnel0
</pre>
<p>
Line 1 enables unicast IPv6 routing. Line 2 enables Cisco express forwarding for IPv6. The tunnel is configured on lines 4-11. IPv6 is configured and enabled for our inside LAN interface on lines 15 and 16 and I set the default route for IPv6 to the tunnel interface on line 18.
</p>
<p>
By default, this will issue router advertisements and allow machines to do stateless autoconfiguration for IPv6 addressing. I originally ran into trouble with this while I was trying to subnet my /48. I had my inside LAN interface configured with a /52 and none of the machines on my network would autoconfigure themselves. Eventually I realized that all hosts should be sitting on a /64 subnet. This is in an RFC somewhere. I&#8217;ll link to it if I&#8217;m able to find it. Once I made the change everything just magically started working.
</p>
<h3>Final outcome</h3>
<p>
At this point, I&#8217;ve got IPv6 connectivity up and running. I can get to IPv6 enabled sites on the internet by IP address, but I&#8217;m not able resolve AAAA records yet because I haven&#8217;t got DHCP and DNS configured yet. I&#8217;ll get to that in the next post.</p>
]]></content:encoded>
			<wfw:commentRss>http://digital-traffic.net/technology/implementing-ipv6-at-home-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SpamAssassin: Dealing with unrecognized spam</title>
		<link>http://digital-traffic.net/technology/spamassassin-dealing-with-unrecognized-spam/</link>
		<comments>http://digital-traffic.net/technology/spamassassin-dealing-with-unrecognized-spam/#comments</comments>
		<pubDate>Sat, 03 May 2008 20:07:23 +0000</pubDate>
		<dc:creator>Brian Shacklett</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[Maildir]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[SpamAssassin]]></category>

		<guid isPermaLink="false">http://digital-traffic.net/blog/?p=25</guid>
		<description><![CDATA[Everyone hates spam, and one of the main ways that people are fighting it is through the use of SpamAssassin. I&#8217;ve been using it for a while now and have Sieve detecting spam headers and moving them to my Junk folder. The Problem Dealing with spam that went unrecognized has been more of a manual [...]]]></description>
			<content:encoded><![CDATA[<p>Everyone hates spam, and one of the main ways that people are fighting it is through the use of <a href="http://spamassassin.apache.org/">SpamAssassin</a>. I&#8217;ve been using it for a while now and have Sieve detecting spam headers and moving them to my Junk folder.
</p>
<h3>The Problem</h3>
<p>
Dealing with spam that went unrecognized has been more of a manual process. Every once in a while, I&#8217;d have to segregate all of my useful mail from the spam and run &#8220;sa-learn&#8221; on the leftovers. This isn&#8217;t horrible, because I tend to shell into my server fairly frequently, but I really prefer to have menial tasks like this automated.
</p>
<h3>A solution</h3>
<p>
First of all, I created a folder in my mailbox called &#8220;Unrecognized Spam&#8221;. The name isn&#8217;t important, really. It just needs to be a place to file away all of those messages that SpamAssassin didn&#8217;t catch on the way in.<br />
Once that was done, I wrote a very simple little script, which I dropped in /etc/cron.daily/:
</p>
<p><span id="more-25"></span></p>
<pre class="brush: bash">#!/bin/bash

SPAM_DIR=&quot;/home/bshacklett/Maildir/Unrecognized Spam/cur&quot;

cd &quot;$SPAM_DIR&quot;
sa-learn --spam .;
rm *
</pre>
<p>
Nasty, I know, but it did the job. All I had to do when I got spam that went unnoticed by SpamAssassin was drag it into my &#8220;Unrecognized Spam folder&#8221; and it would be learned and gone within 24 hours. Of course, I was also getting mail from the cron daemon complaining when there weren&#8217;t any emails to learn from or delete.
</p>
<h3>Improvements</h3>
<p>
So, this morning I had a little spare time, so I decided to improve on the script a bit:
</p>
<pre class="brush: bash">#!/bin/bash

# Constants
SPAM_PATH=&quot;Maildir/.Unrecognized Spam/cur&quot;;

# Find all of the directories directly under /home/
homeDirectories=(`find /home/ -maxdepth 1 -mindepth 1 -type d`);

# Loop through the found directories and check for spam
for homeDirectory in ${homeDirectories[*]}
do
    fullSpamPath=${homeDirectory}/${SPAM_PATH};

    #Check if the spam directory exists under this home directory
    if [ -d  &quot;${fullSpamPath}&quot; ]; then

        # Check if there is mail under the spam directory
        if [ &quot;$( ls -A &quot;${fullSpamPath}&quot; )&quot; ]; then
            sa-learn --spam &quot;$fullSpamPath&quot;;
            rm &quot;${fullSpammPath}/&quot;*;
        fi
    fi

done
</pre>
<p>
Now I know I&#8217;m not a great shell scripter, but this is working pretty well. It basically scans all of the home directories and looks for the &#8220;Unrecognized Spam&#8221; directory under each one. If it finds it, it will test to make sure that there are emails in the folder, then learn them and remove them.
</p>
<h3>Caveats</h3>
<ul>
<li> This isn&#8217;t going to scale all that well. I&#8217;m guessing it would be fine for 200 users or less, as it runs at night, but it would need some tweaking for anything more.</li>
<li> As it is, this requires that your mail be stored in the <a href="http://en.wikipedia.org/wiki/Maildir">Maildir</a> format. I know that sa-learn can work with mBox stores, but I&#8217;m not sure how you&#8217;d target it effectively.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://digital-traffic.net/technology/spamassassin-dealing-with-unrecognized-spam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Server Upgrade</title>
		<link>http://digital-traffic.net/technology/server-upgrade/</link>
		<comments>http://digital-traffic.net/technology/server-upgrade/#comments</comments>
		<pubDate>Sun, 27 Apr 2008 19:20:41 +0000</pubDate>
		<dc:creator>Brian Shacklett</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Dovecot]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[upgrade]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://digital-traffic.net/blog/?p=24</guid>
		<description><![CDATA[So, now that Hardy Heron is out, I&#8217;ve gone ahead and upgraded my server. It took a little while, but overall it went quite smoothly. Having the ability to go back and forth between the old server image and the new server image made it a much easier experience. Big thanks to Linode and virtualization. [...]]]></description>
			<content:encoded><![CDATA[<p>
So, now that <a href="http://www.ubuntu.com/news/ubuntu-8.04-lts-server">Hardy Heron</a> is out, I&#8217;ve gone ahead and upgraded my server. It took a little while, but overall it went quite smoothly. Having the ability to go back and forth between the old server image and the new server image made it a much easier experience. Big thanks to <a href="http://www.linode.com">Linode</a> and <a href="http://en.wikipedia.org/wiki/Virtualization">virtualization</a>.
</p>
<h3>Changes</h3>
<p>
One large change I made to my configuration is using Dovecot&#8217;s sasl authentication for Postfix rather than Cyrus. Dovecot really seems to be making headway in the mail server market. I strongly reccomend it to anyone looking for a decent IMAP server.
</p>
<p>
I&#8217;ve also upgraded to WordPress 2.5 and a later version of <a href="http://www.roundcube.net/">Roundcube</a> for webmail. Unfortunately, Ubuntu seems to be holding Roundcube back a bit in their package repository. I&#8217;m not sure what the holdup is, but they&#8217;re at least one version behind at the time I&#8217;m writing this. For that matter, WordPress is a couple of releases behind as well. I guess that happens with an LTS release.
</p>
<h3>Todo</h3>
<p>
<del>I&#8217;m still having a bit of trouble getting WordPress&#8217; permalinks working correctly, so you&#8217;ll probably notice that some of the links aren&#8217;t working properly on the blog. I remember having this problem in the past, but, for the life of me, I can&#8217;t remember what I did to solve it.</del>
</p>
<p>
<em>Update:</em> Got the permalink issue taken care of. Apache must be told, with the &#8220;<a href="http://httpd.apache.org/docs/2.0/mod/core.html#allowoverride">AllowOverride</a>&#8221; parameter, to allow .htaccess files. If this isn&#8217;t done, they  will be ignored.</p>
]]></content:encoded>
			<wfw:commentRss>http://digital-traffic.net/technology/server-upgrade/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
