<?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>My Galagzee! &#187; Technical</title>
	<atom:link href="http://my.galagzee.com/category/technical/feed/" rel="self" type="application/rss+xml" />
	<link>http://my.galagzee.com</link>
	<description>Tech in a Galagzee, Not So Far Away.</description>
	<lastBuildDate>Wed, 28 Jul 2010 17:09:34 +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>Mounting an NFS share after boot, and checking up on it periodically&#8230;</title>
		<link>http://my.galagzee.com/2010/07/23/mounting-nfs-share-after-boot-and-checking-up-on-it-periodically/</link>
		<comments>http://my.galagzee.com/2010/07/23/mounting-nfs-share-after-boot-and-checking-up-on-it-periodically/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 19:20:51 +0000</pubDate>
		<dc:creator>Ville Walveranta</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[automatic]]></category>
		<category><![CDATA[boot]]></category>
		<category><![CDATA[circular]]></category>
		<category><![CDATA[nfs]]></category>

		<guid isPermaLink="false">http://my.galagzee.com/?p=433</guid>
		<description><![CDATA[I needed to automatically mount an NFS share after reboot. But the availability of that share could not be guaranteed &#8211; the system on the LAN offering the share might be down for maintenance when the system mounting the share is being rebooted. In such case there would be a lengthy wait during the boot]]></description>
			<content:encoded><![CDATA[<p>I needed to automatically mount an NFS share after reboot. But the availability of that share could not be guaranteed &#8211; the system on the LAN offering the share might be down for maintenance when the system mounting the share is being rebooted. In such case there would be a lengthy wait during the boot sequence until the mount attempt would time out.</p>
<p>So I wrote a short script to handle the situation. <del datetime="2010-07-28T17:01:44+00:00">When initialized at boot time through init.d or rc.d, it&#8217;ll first attempt to mount the share, but then times out in two seconds (this is a LAN NFS share so if the system offering the share is up there should not be a longer delay than that) and so the boot sequence is not slowed down terribly.</del> (see update below) Once boot is complete, the script is run via cron every five minutes. Depending on the criticality of the share you may want to make that time shorter or longer. In this case it is a backup share which is not critical for the system&#8217;s functioning.</p>
<p>This technique would handle circular mounts, too, but obviously you would run into trouble if the mounts are required for successful system boot.</p>
<p>For this to work successfully add a marker file, such as &#8220;.myremoteservertransfers&#8221; in my example script below, in the share folder on the system exporting the share. I usually set the undeletable attribute on the file to make sure it doesn&#8217;t get accidentally deleted.</p>
<p><B>Update:</b> Even with this code the boot sequence appears to hang until portmap times out (which takes quite a while) if the NFS share is not available at boot time. I removed the rc.d mount attempt and just shortened the cron poll period to 1 minute. That way the share will be up very quickly once it becomes available, yet the overhead caused by the periodic ping is minimal (both servers are on local LAN).</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title=""><div class="devcodeoverflow"><ol><li>#!/bin/sh</li><li>&nbsp;</li><li>SHELL=/bin/sh</li><li>PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin</li><li>&nbsp;</li><li># remote system name</li><li>remotesystem=myremoteserver</li><li>&nbsp;</li><li># remote share name</li><li>remoteshare=/nfsexports/backupshare</li><li>&nbsp;</li><li># local mount point</li><li>mountpoint=/localbackups/TRANSFERS/$<span class="br0">&#123;</span>myremoteserver<span class="br0">&#125;</span></li><li>&nbsp;</li><li># file to indicate local mount status</li><li>testfile=$mountpoint/.myremoteservertransfers</li><li>&nbsp;</li><li># --- end variables ---</li><li>&nbsp;</li><li># ping result to the remote system <span class="br0">&#40;</span>2 sec timeout<span class="br0">&#41;</span>; not empty is OK</li><li>remoteping=`ping -c1 -o -q -t2 $<span class="br0">&#123;</span>remotesystem<span class="br0">&#125;</span> | grep &quot; 0.0%&quot;`</li><li>&nbsp;</li><li>if <span class="br0">&#91;</span> &quot;$<span class="br0">&#123;</span>remoteping<span class="br0">&#125;</span>&quot; != &quot;&quot; <span class="br0">&#93;</span> ; then</li><li>&nbsp;</li><li>&nbsp;&nbsp; # server is available so query availability of the remote share; not empty is OK</li><li>&nbsp;&nbsp; offsiteshare=`showmount -e $<span class="br0">&#123;</span>remotesystem<span class="br0">&#125;</span> | grep &quot;$<span class="br0">&#123;</span>remoteshare<span class="br0">&#125;</span>&quot;`</li><li>&nbsp;</li><li>&nbsp;&nbsp; if <span class="br0">&#91;</span> &quot;$<span class="br0">&#123;</span>offsiteshare<span class="br0">&#125;</span>&quot; != &quot;&quot; <span class="br0">&#93;</span> ; then</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if <span class="br0">&#91;</span> ! -e $<span class="br0">&#123;</span>testfile<span class="br0">&#125;</span> <span class="br0">&#93;</span> ; then</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mount -r -t nfs $<span class="br0">&#123;</span>remotesystem<span class="br0">&#125;</span>:$<span class="br0">&#123;</span>remoteshare<span class="br0">&#125;</span> $<span class="br0">&#123;</span>mountpoint<span class="br0">&#125;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi</li><li>&nbsp;&nbsp; fi</li><li>fi</li><li>&nbsp;</li><li>exit <span style="">0</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
]]></content:encoded>
			<wfw:commentRss>http://my.galagzee.com/2010/07/23/mounting-nfs-share-after-boot-and-checking-up-on-it-periodically/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Caching inbound email on LAN with Postfix (and restricting reception of external mail only to the external mail provider)</title>
		<link>http://my.galagzee.com/2010/07/10/caching-inbound-email-on-lan-with-postfix/</link>
		<comments>http://my.galagzee.com/2010/07/10/caching-inbound-email-on-lan-with-postfix/#comments</comments>
		<pubDate>Sat, 10 Jul 2010 20:41:15 +0000</pubDate>
		<dc:creator>Ville Walveranta</dc:creator>
				<category><![CDATA[Mail]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[caching]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[postfix]]></category>

		<guid isPermaLink="false">http://my.galagzee.com/?p=414</guid>
		<description><![CDATA[Externalizing email reception often offers many benefits: firstly, it&#8217;s [more] worry-free than servicing email internally, especially in smaller organizations where there may not be an email administrator on-call 24/7. Or, think of a situation where there is an &#8220;IT guy&#8221; who manages internal email. Then he goes on a vacation and email goes down. Now]]></description>
			<content:encoded><![CDATA[<p>Externalizing email reception often offers many benefits: firstly, it&#8217;s [more] worry-free than servicing email internally, especially in smaller organizations where there may not be an email administrator on-call 24/7. Or, think of a situation where there is an &#8220;IT guy&#8221; who manages internal email. Then he goes on a vacation and email goes down. Now what? And even when the IT guy is present, the budget may not allow for good redundancy for email reception. What if the email server melts down. Perhaps there is a backup plan but without a stand-by server and/or perhaps virtualization option getting mail reception back online could take a day, which potentially would be a big hindrance to business.</p>
<p>However, outsourced email is not without its pitfalls, too. Even with a reasonably fast network connection there is more noticeable latency when accessing a remote email server as opposed to a LAN-based solution. Then there is the issue of outsourced service quality vs. the cost. Some services like Fusemail or Rackspace offer <em>reasonable</em> quality and fairly customizable features. But when something does go wrong you&#8217;re dependent on their response time. You&#8217;ve essentially handed away control of your email reception, for better or for worse. </p>
<p>Mostly, however, reception uptime is good with most well-run outsourced mail services, and the issues that more commonly crop up are related to latency and in some cases (like with Fusemail from time to time) apparent capacity issues. And if you access Fusemail with Outlook 2010&#8242;s IMAP client, you may have noticed frequent spontaneously changing message ID&#8217;s which repeatedly pop up a notification on Outlook.</p>
<p>The client-side issues are easy to remedy by caching inbound email on your local server. It gives you the best of both worlds: quick access to email <em>and</em> safety of someone monitoring mail reception 24/7 with multiple redundancies. If your local caching mail server goes down even for an extended amount of time, all you need to do is to repoint your clients to the external provider&#8217;s IMAP or POP server and you&#8217;re back in business. You may also opt to use your own outbound SMTP service (assuming you have a static IP in use) which makes it possible to isolate your domains&#8217; SPF records to the IPs you own (as opposed to allowing anyone with an account, for example, at Fusemail to spoof mail from your domains without an SPF penalty). And if you use Fusemail, your own SMTP server will give you a peace of mind so that your outbound emails won&#8217;t trigger suspension of your account like happened to me soon after I first signed up with them (see <em><a href="http://my.galagzee.com/2009/05/03/fusemail-auto-suspends/">Fusemail auto-suspends spam-suspect accounts!</a></em>). Perhaps they&#8217;ve fixed that issue since then.</p>
<p>Setting up a caching mail service on your LAN is fairly easy with Postfix. The following tutorial assumes you already have a functioning Postfix/Dovecot setup where you&#8217;re able to send and receive email based on your requirements.</p>
<p>To start with, configure and test local users that you would like to correspond to outsourced email service&#8217;s mailboxes. They do not need to have the same login name, and you can also consolidate multiple external accounts to one local account. In smaller setups it&#8217;s  the easiest to simply create a flat-file for user Dovecot passwords lookups.</p>
<p>Assuming you like to receive all email through an outsourced service (which, if you use an outsourced service, is the preferred option), you will want to restrict mail reception from the outside world only to the sending mail servers of the external mail provider of your choice. To accomplish this some restrictions are added to the local cache server&#8217;s main.cf file. The following is the configuration I use; I&#8217;ve carefully given thought of the restrictions not being too constrictive as to unnecessarily prevent connections, but on the other hand cut off connections that would not result in a successful or desired mail transit.</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title=""><div class="devcodeoverflow"><ol><li></li><li>smtpd_helo_restrictions =</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;permit_mynetworks</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reject_invalid_helo_hostname</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;permit_sasl_authenticated</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reject_non_fqdn_helo_hostname</li><li>&nbsp;</li><li>smtpd_client_restrictions =</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;permit_mynetworks</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;permit_sasl_authenticated</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check_client_access hash:$config_directory/tables/smtpd_client_access</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check_client_access cidr:$config_directory/tables/smtpd_client_access.cidr</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reject</li><li>&nbsp;</li><li>smtpd_etrn_restrictions =</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;permit_mynetworks</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reject</li><li>&nbsp;</li><li>smtpd_sender_restrictions =</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reject_non_fqdn_sender</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reject_unknown_sender_domain</li><li>&nbsp;</li><li>smtpd_recipient_restrictions =</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reject_non_fqdn_recipient</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reject_unknown_recipient_domain</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;permit_mynetworks</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reject_unlisted_recipient</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;permit_sasl_authenticated</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check_recipient_access hash:$config_directory/tables/smtpd_recipient_access</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#the following also permits mynetworks!</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check_recipient_access pcre:$config_directory/tables/smtpd_recipient_access.pcre</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reject_unauth_destination</li><li>&nbsp;</li><li>smtpd_data_restrictions =</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reject_multi_recipient_bounce</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reject_unauth_pipelining</li><li></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>You will notice external hash and PCRE lookup tables &#8220;smtpd_client_access&#8221;, &#8220;smtpd_client_access.cidr&#8221;, &#8220;smtpd_recipient_access&#8221;, and &#8220;smtpd_recipient_access.pcre&#8221;. Let&#8217;s look at them next.</p>
<p>smtpd_client_access (hash) and smtpd_client_access.cidr (example below) list the external IP addresses you allow to connect and hence relay mail to your cache server. If the external IPs are not on this list, the connection is terminated.</p>
<p>Here&#8217;s an example smtpd_client_access (hash, so it&#8217;s converted to smtpd_client_access.db with postmap):<br />
<!--DEVFMTCODE--><pre class="devcodeblock" title=""><div class="devcodeoverflow"><ol><li></li><li># some individual external server I want to allow to connect</li><li>100.200.100.200 PERMIT</li><li></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>And here&#8217;s an example smtpd_client_access.cidr:<br />
<!--DEVFMTCODE--><pre class="devcodeblock" title=""><div class="devcodeoverflow"><ol><li></li><li>1.2.3.4/<span style="">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK</li><li>10.20.30.40&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK</li><li>100.200.201.0/<span style="">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK</li><li></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>While the sending servers of an outsourced service don&#8217;t change often, they <em>may</em> change at any time without a warning. Thus maintaining the above list manually would be a frustrating task. To automate the process, you can cull this information from the outsourced mail service&#8217;s SPF records with a cron-scheduled shell script (note that paths relate to FreeBSD; if you run Linux, adjust them to the taste/requirements):</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title=""><div class="devcodeoverflow"><ol><li></li><li>#!/bin/sh</li><li>&nbsp;</li><li>ORIGINAL=/usr/local/etc/postfix/tables/smtpd_client_access.cidr</li><li>NEW=/tmp/postfix_clients.tmp</li><li>&nbsp;</li><li>dig +short fusemail.net TXT | grep 'v=spf1' | egrep -o 'ip4:<span class="br0">&#91;</span>0-9./<span class="br0">&#93;</span>+' | sed 's/^ip4://' | sed 's/$/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK/' &gt; $NEW</li><li>&nbsp;</li><li>ORIGINAL_CK=`cksum $ORIGINAL | awk '<span class="br0">&#123;</span>print $1<span class="br0">&#125;</span>'`</li><li>NEW_CK=`cksum $NEW | awk '<span class="br0">&#123;</span>print $1<span class="br0">&#125;</span>'`</li><li>&nbsp;</li><li>if <span class="br0">&#91;</span> -s $NEW <span class="br0">&#93;</span> ; then</li><li>&nbsp;&nbsp;if <span class="br0">&#91;</span> $ORIGINAL_CK != $NEW_CK <span class="br0">&#93;</span> ; then</li><li>&nbsp;&nbsp;&nbsp;&nbsp;cp -f $NEW $ORIGINAL</li><li>&nbsp;&nbsp;&nbsp;&nbsp;postfix reload &gt; /dev/null <span style="">2</span>&gt;&amp;<span style="">1</span></li><li>&nbsp;&nbsp;fi</li><li>fi</li><li>&nbsp;</li><li>rm $NEW</li><li>&nbsp;</li><li>exit <span style="">0</span></li><li></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>The above example is obviously for Fusemail, but you can modify it for other providers simply by replacing the provider domain name on the dig line.</p>
<p>In my configuration smtpd_recipient_access (hash) lists simply the nullroute that is often required – such as in php.ini mail configuration where you might put:</p>
<p>sendmail_path = /usr/sbin/sendmail -t -i -f <strong>nullroute@mydomain.com</strong></p>
<p>So in smtpd_recipient_access (hash) I list:<br />
<!--DEVFMTCODE--><pre class="devcodeblock" title=""><div class="devcodeoverflow"><ol><li></li><li>nullroute@mydomain.com&nbsp;&nbsp;PERMIT</li><li></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Meanwhile, smtpd_recipient_access.pcre lists the users who&#8217;re allowed to receive mail externally, from the IPs you defined with smtpd_client_access/smtpd_client_access.pcre:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title=""><div class="devcodeoverflow"><ol><li></li><li>if !/^<span class="br0">&#40;</span>nullroute|abuse|postmaster|user1|user2|user3<span class="br0">&#41;</span>@mydomain\.com$/</li><li>/^/ internal</li><li>endif</li><li></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Again, the above is sufficient for small configurations, but if you have dozens or more users whose external email you&#8217;re caching you may be better off storing the client_access table on a database server.</p>
<p>Finally, as you notice the &#8216;internal&#8217; keyword being added above to user addresses that are not matched by smtpd_client_access.pcre, you want to add the following in main.cf:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title=""><div class="devcodeoverflow"><ol><li></li><li>smtpd_restriction_classes = internal, public</li><li>internal = permit_mynetworks, reject</li><li>public = permit</li><li></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>With these in place you will now receive email only from your external mail provider (and perhaps some other authorized servers if you defined one with smtpd_client_access hash table). This is important because you&#8217;re likely using your outsourced mail provider&#8217;s spam filtering, and you don&#8217;t want spammers contacting your cache mail server directly.</p>
<p>With the local server configured (and hopefully sufficiently tested <img src='http://my.galagzee.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) you can then go ahead and create mail forwarding rules at the external provider of your choice. You would simply copy any arrived email to the corresponding email address at your local cache server. I have additionally created a rule at the external provider which prunes the mailbox after given number of time since the users will not go through and delete read email there.</p>
<p>You may want to allow authenticated client access to your local users so that they can access their email via IMAP or POP remotely, and perhaps over the web (like via locally installed Squirrelmail). It is also a consideration that the email at the external provider will not be synced back – if users delete email from their locally cached mailbox it will not be deleted from the mailbox at the external provider, so under normal circumstances your cached email server should be the only access point for mail. But in an event of the server melt-down it is a minor inconvenience that the external provider&#8217;s mailbox would have older emails (that perhaps were deleted locally) in it – at least the users can continue to access email while you&#8217;re getting the caching server back online!</p>
<p>** NOTE: I&#8217;m using the current GA/Stable version of Postfix (2.7.0). If you&#8217;re using an older version, double-check that the configuration options I propose above are available before using them! This is one reason for why I prefer to use FreeBSD for mail; the ports version of Postfix is kept well up-to-date while CentOS/RHEL Postfix package is — as you would expect from an Enterprise Linux — currently at 2.3.3. You could compile it yourself, I suppose, but I&#8217;m not up to the task since I&#8217;m not a full-time Postfix admin.</p>
]]></content:encoded>
			<wfw:commentRss>http://my.galagzee.com/2010/07/10/caching-inbound-email-on-lan-with-postfix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Things I didn&#8217;t know about ESXi</title>
		<link>http://my.galagzee.com/2010/06/06/vmware-n00b-%e2%80%93-things-i-didnt-know-about-esxi/</link>
		<comments>http://my.galagzee.com/2010/06/06/vmware-n00b-%e2%80%93-things-i-didnt-know-about-esxi/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 04:11:25 +0000</pubDate>
		<dc:creator>Ville Walveranta</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[esxi]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[virtual]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://my.galagzee.com/?p=408</guid>
		<description><![CDATA[I&#8217;m setting up a development server using vmware ESXi virtual server running CentOS 5.5 x64 and FreeBSD 8.0 x64. Currently, the second installation pass is in progress. Being fresh to ESX/ESXi there were couple of things I didn&#8217;t realize: First (the reason for the reinstall), if there is plenty of hard drive space available, it&#8217;s]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m setting up a development server using vmware ESXi virtual server running CentOS 5.5 x64 and FreeBSD 8.0 x64. Currently, the second installation pass is in progress. Being fresh to ESX/ESXi there were couple of things I didn&#8217;t realize:</p>
<p>First (the reason for the reinstall), if there is plenty of hard drive space available, it&#8217;s good idea not to deplete it all for the sytem installations. I split a 1.3Tb RAID 5 array between the two operating systems until I realized that 1) you can&#8217;t shrink vmfs partitions and 2) by consuming all hard drive space one limits the flexibility of the system down the line. Let&#8217;s say you want to install a newer version of an operating system and decide to do a fresh install. You need space for it while you want to keep the old version around at least long enough to migrate settings and data over.</p>
<p>Second, while I was aware of that ESXi doesn&#8217;t offer console access beyond the &#8220;yellow and grey&#8221; terminal, I didn&#8217;t realize you have no access to the VM consoles, either. So, with CentOS or FreeBSD installed, the only way to access their consoles is via the vSphere client (someone correct me if I&#8217;m wrong — I wish I were as I&#8217;d like to have local console access to the guest OS&#8217;es).</p>
<p>Finally, <a href="https://go.vmware.com/">VMware Go</a> &#8220;doesn&#8217;t currently support ESXi servers with multiple datastores&#8221;. So if you have, say, a 3ware/LSI/AMCC RAID controller which isn&#8217;t currently supported under ESXi as a boot device but which you likely still want to use as a datastore, you&#8217;ll end up with at least two datastores. So vSphere is really the only way to go for VM management also for this reason (since LSI provides a vmware-specific driver, one may also be able to direct-connect the LSI RAID array to the VM without it being an ESXi datastore, but that&#8217;s not the configuration I&#8217;m looking for—the boot device is small and houses just ESXi while the VMs and their associated datastores are located on the array).</p>
<p>In the end everything&#8217;s working quite well. I like the flexibility virtualization offers.. and consolidation is useful even in a small environment (one dev machine is less than two or three dev machines <img src='http://my.galagzee.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ).</p>
]]></content:encoded>
			<wfw:commentRss>http://my.galagzee.com/2010/06/06/vmware-n00b-%e2%80%93-things-i-didnt-know-about-esxi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LaserJet P2015dn duplexing on Windows 7</title>
		<link>http://my.galagzee.com/2010/06/05/laserjet-p2015dn-duplexing-on-windows-7/</link>
		<comments>http://my.galagzee.com/2010/06/05/laserjet-p2015dn-duplexing-on-windows-7/#comments</comments>
		<pubDate>Sun, 06 Jun 2010 00:30:07 +0000</pubDate>
		<dc:creator>Ville Walveranta</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[duplexing]]></category>
		<category><![CDATA[laserjet]]></category>
		<category><![CDATA[P2015]]></category>
		<category><![CDATA[windows 7]]></category>

		<guid isPermaLink="false">http://my.galagzee.com/?p=405</guid>
		<description><![CDATA[HP LaserJet P2015 models use &#8220;Universal&#8221; driver under Windows 7. When first installed, duplexing doesn&#8217;t work by default. This is a surprise for many who come from Windows XP environment where the dedicated drivers had P2015&#8242;s built-in duplexing availability turned on, of course, by default. In Windows 7, however, the duplexing selector for P2015 says]]></description>
			<content:encoded><![CDATA[<p>HP LaserJet P2015 models use &#8220;Universal&#8221; driver under Windows 7. When first installed, duplexing doesn&#8217;t work by default. This is a surprise for many who come from Windows XP environment where the dedicated drivers had P2015&#8242;s built-in duplexing availability turned on, of course, by default. In Windows 7, however, the duplexing selector for P2015 says by default: &#8220;Print on both sides (manually)&#8221;.</p>
<p>To enable P2012&#8242;s automatic duplexing on Windows 7 go to <strong>Devices and Printers</strong>, highlight the P2015, right click, and select <strong>Printer Properties</strong> from the context popup menu. Go to <strong>Device Settings</strong> tab and look for &#8220;Duplex Unit (for 2-Sided Printing)&#8221; option. It&#8217;s set to &#8220;Not Installed&#8221; by default. Change it to &#8220;Installed&#8221; and click on &#8220;OK&#8221;. Now when you go to Preferences when getting ready to print, the automatic (not &#8220;manually&#8221;) option is available on the Finishing tab, and automatic duplexing works.</p>
<p>Also if you use the excellent <a href="http://www.priprinter.com/" target="_blank">priPrinter</a> utility, P2015 honors the &#8220;Double Sided&#8221; toggle on the Page Layout tab. Same goes for the &#8220;Double-sided&#8221; checkbox on <a href="http://www.fineprint.com/" target="_blank">FinePrint</a> utility, and other applications that provide the option to turn automatic duplexing on or off.</p>
]]></content:encoded>
			<wfw:commentRss>http://my.galagzee.com/2010/06/05/laserjet-p2015dn-duplexing-on-windows-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding graphics, comments to PDFs</title>
		<link>http://my.galagzee.com/2010/03/05/adding-graphics-comments-to-pdfs/</link>
		<comments>http://my.galagzee.com/2010/03/05/adding-graphics-comments-to-pdfs/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 01:40:50 +0000</pubDate>
		<dc:creator>Ville Walveranta</dc:creator>
				<category><![CDATA[Rants]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Workflow]]></category>
		<category><![CDATA[Acrobat]]></category>
		<category><![CDATA[flatten]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[stamp]]></category>

		<guid isPermaLink="false">http://my.galagzee.com/?p=398</guid>
		<description><![CDATA[I needed to fill out a PDF document today, date it, and sign it. It took me a good hour to accomplish the task as while the latest incarnation of Acrobat has custom stamp feature, annotated text doesn&#8217;t print by default (I also wanted to avoid having to print out the document only to scan]]></description>
			<content:encoded><![CDATA[<p>I needed to fill out a PDF document today, date it, and sign it. It took me a good hour to accomplish the task as while the latest incarnation of Acrobat has custom stamp feature, annotated text doesn&#8217;t print by default (I also wanted to avoid having to print out the document only to scan it back in). In fact, I found <em>no</em> way to print text annotations. Whether &#8220;Documents and Stamps&#8221; was selected in the Print properties or not, the text annotations would remain missing from the printout. It should not be this difficult to add a text box to a PDF document and then flatten it to be part of the document, and not an annotation per se.</p>
<p>After some more Googling later I happened on <a href="http://www.aecbytes.com/tipsandtricks/2006/issue2-acrobat.html">this</a> page that outlines a simple way to add &#8220;flatten&#8221; options to the Acrobat document menu. The associated script to be placed in “<strong>Program Files/Adobe/Acrobat 9.0/Acrobat/Javascripts/</strong>” folder (the script works with older Acrobat versions, too, as the mentioned instructions are for Acrobat 7.0) is just two lines long:<br />
<!--DEVFMTCODE--><pre class="devcodeblock" title=""><div class="devcodeoverflow"><ol><li></li><li>app.addMenuItem<span class="br0">&#40;</span><span class="br0">&#123;</span> cName: &quot;Flatten page&quot;, cParent: &quot;Document&quot;, cExec: &quot;flattenPages<span class="br0">&#40;</span>this.pageNum<span class="br0">&#41;</span>&quot;,cEnable: 1, nPos: 16<span class="br0">&#125;</span><span class="br0">&#41;</span>;</li><li>app.addMenuItem<span class="br0">&#40;</span><span class="br0">&#123;</span> cName: &quot;Flatten document&quot;, cParent: &quot;Document&quot;, cExec: &quot;flattenPages<span class="br0">&#40;</span><span class="br0">&#41;</span>&quot;,cEnable: 1, nPos: 17<span class="br0">&#125;</span><span class="br0">&#41;</span>;</li><li></li></ol></div></pre><!--END_DEVFMTCODE--><br />
With the above script installed, the task was a snap: I added my signature from a transparent PNG as a custom stamp, added the text annotations, and then flattened the document. Done! Now the annotations print out as they should (whether or not &#8220;Documents and Stamps&#8221; is selected in the Print properties as now the annotations are part of the &#8216;base&#8217; document). I can&#8217;t imagine why Adobe doesn&#8217;t include &#8220;flatten&#8221; as a default feature!</p>
]]></content:encoded>
			<wfw:commentRss>http://my.galagzee.com/2010/03/05/adding-graphics-comments-to-pdfs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ternary beauty</title>
		<link>http://my.galagzee.com/2010/02/08/ternary-beauty/</link>
		<comments>http://my.galagzee.com/2010/02/08/ternary-beauty/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 23:06:33 +0000</pubDate>
		<dc:creator>Ville Walveranta</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ternary]]></category>

		<guid isPermaLink="false">http://my.galagzee.com/?p=391</guid>
		<description><![CDATA[I love the ternary operator. It can often simplify a much more complex conditional into few characters. In PHP (and other c-like languages) it&#8217;s possible to do all sorts of things with the ternary. The following are examples from PHP. If $b is true, print &#8220;true&#8221;, otherwise print &#8220;false&#8221;. Echo doesn&#8217;t work here. $b ?]]></description>
			<content:encoded><![CDATA[<p>I love the ternary operator. It can often simplify a much more complex conditional into few characters.  In PHP (and other c-like languages) it&#8217;s possible to do all sorts of things with the ternary. The following are examples from PHP.</p>
<p>If $b is true, print &#8220;true&#8221;, otherwise print &#8220;false&#8221;. Echo doesn&#8217;t work here.<br />
<!--DEVFMTCODE--><pre class="devcodeblock" title=""><div class="devcodeoverflow"><ol><li></li><li>$b ? print &quot;true&quot; : print &quot;false&quot;;</li><li></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Here&#8217;s something I learned today: it&#8217;s possible to assign a complex variable to an &#8220;internal&#8221; shorthand, and then in turn use the shorthand for the final assignment (based on the comparison). This way it&#8217;s not necessary to repeat the complex variable in the assignment section which makes the ternary much shorter and thus cleaner.</p>
<p>So instead of this:<br />
<!--DEVFMTCODE--><pre class="devcodeblock" title=""><div class="devcodeoverflow"><ol><li></li><li>$a = <span class="br0">&#40;</span>$myObject-&gt;anotherObject-&gt;arr<span class="br0">&#91;</span>'somekey'<span class="br0">&#93;</span> &gt; 7 ? 7 : $myObject-&gt;anotherObject-&gt;arr<span class="br0">&#91;</span>'somekey'<span class="br0">&#93;</span><span class="br0">&#41;</span>;</li><li></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>You can do this:<br />
<!--DEVFMTCODE--><pre class="devcodeblock" title=""><div class="devcodeoverflow"><ol><li></li><li>$a = <span class="br0">&#40;</span><span class="br0">&#40;</span>$b = $myObject-&gt;arr<span class="br0">&#91;</span>'somekey'<span class="br0">&#93;</span><span class="br0">&#41;</span> &gt; 7 ? 7 : $b<span class="br0">&#41;</span>;</li><li></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Awesome!! <img src='http://my.galagzee.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://my.galagzee.com/2010/02/08/ternary-beauty/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How To Destroy Brand Confidence In One Hit</title>
		<link>http://my.galagzee.com/2010/01/20/how-to-destroy-brand-confidence-in-one-hit/</link>
		<comments>http://my.galagzee.com/2010/01/20/how-to-destroy-brand-confidence-in-one-hit/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 02:46:02 +0000</pubDate>
		<dc:creator>Ville Walveranta</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[ocz]]></category>
		<category><![CDATA[power supply]]></category>
		<category><![CDATA[psu]]></category>
		<category><![CDATA[warranty]]></category>

		<guid isPermaLink="false">http://my.galagzee.com/?p=384</guid>
		<description><![CDATA[Couple of a weeks ago the power supply of one of our PCs failed. The system is about one and half years old, so fine – sometimes things break. I replaced the power supply and the system was back up and running. The failed OCZ power supply was under warranty, and so I sent it]]></description>
			<content:encoded><![CDATA[<p>Couple of a weeks ago the power supply of one of our PCs failed. The system is about one and half years old, so fine – sometimes things break. I replaced the power supply and the system was back up and running. The failed OCZ power supply was under warranty, and so I sent it in for replacement. The usual way: I pay the shipping in, they pay the shipping back.</p>
<p>The replacement – a reconditioned unit – arrived yesterday. First thing I noticed that the &#8220;WARRANTY VOID IF BROKEN OR REMOVED&#8221; sticker was, well, broken. Hm. So today I went ahead and installed it back into the original system, taking out the temporary PSU. I really hate replacing power supplies when the case is even slightly congested and this one was pretty tough to get to. Finally, the replacement PSU was in place and I hit the power button. Nothing!</p>
<p>Few moments of testing later I had determined that the unit OCZ sent as a replacement was DOA. I had to rip it out and put the temp PSU back in. Note to self: from now on the PSU replacement protocol will include stand-alone testing the new unit before I touch the target system.</p>
<p>I very much doubt the unit broke in transit; I&#8217;m guessing they either didn&#8217;t test it after repairs were completed, or for some reason the unit was never serviced and so I got someone else&#8217;s failed PSU in exchange to PSU I sent in for warranty service. The only way OCZ can salvage the situation at this point and avoid getting on my bad list is if they offer to pay shipping both ways. It&#8217;s not that much money, but the time wasted on this far exceeded what the replacement is worth.</p>
<p>Many companies forget that the value of warranty they offer not only comes from what they can advertise but also from the PR – positive or negative – depending how they handle warranty.</p>
<p><strong>UPDATE 21 January 2010: Five Star Damage Control</strong></p>
<p>OCZ handled the situation about the only way they could&#8217;ve handled it to minimize the negative impression that had already been created: they offered a free upgrade to a new product, or a pre-paid shipping label to return the DOA unit to service/exchange  (apparently in case I <em>had</em> to keep the same model, such as a component for a tightly specified system). I chose the upgrade. Let&#8217;s hope the new unit works! <img src='http://my.galagzee.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>UPDATE 22 January 2010: Not so fast, my friend</strong></p>
<p>More to come. Dealing with OCZ tech support turned out to be less than what the first impression promised.</p>
]]></content:encoded>
			<wfw:commentRss>http://my.galagzee.com/2010/01/20/how-to-destroy-brand-confidence-in-one-hit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Disabling reCAPTCHA extra function buttons from tab index using jQuery</title>
		<link>http://my.galagzee.com/2009/09/30/disabling-recaptcha-function-keys-tabindex-jquery/</link>
		<comments>http://my.galagzee.com/2009/09/30/disabling-recaptcha-function-keys-tabindex-jquery/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 04:13:09 +0000</pubDate>
		<dc:creator>Ville Walveranta</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[captcha]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://my.galagzee.com/?p=378</guid>
		<description><![CDATA[Here&#8217;s an easy way to disable the &#8220;Get a new challenge&#8221;, &#8220;Audio Challenge&#8221;, and &#8220;Help&#8221; buttons from reCAPTCHA display block using jQuery. Simply add the following to $(document).ready(function() { &#8230; } on the page you have reCAPTCHA on: $&#40;document&#41;.ready&#40;function&#40;&#41; &#123;&#160;&#160; $&#40;&#34;#recaptcha_reload_btn, #recaptcha_switch_audio_btn, #recaptcha_whatsthis_btn&#34;&#41;.attr&#40;&#34;tabindex&#34;, -1&#41;;&#125;&#41;; Now when you tab out of the word entry field, the]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s an easy way to disable the &#8220;Get a new challenge&#8221;, &#8220;Audio Challenge&#8221;, and &#8220;Help&#8221; buttons from <a href="http://recaptcha.net/" target="_blank">reCAPTCHA</a> display block using jQuery.</p>
<p>Simply add the following to <strong>$(document).ready(function() { &#8230; }</strong> on the page you have reCAPTCHA on:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title=""><div class="devcodeoverflow"><ol><li></li><li>$<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.ready<span class="br0">&#40;</span>function<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></li><li>&nbsp;&nbsp; $<span class="br0">&#40;</span>&quot;#recaptcha_reload_btn, #recaptcha_switch_audio_btn, #recaptcha_whatsthis_btn&quot;<span class="br0">&#41;</span>.attr<span class="br0">&#40;</span>&quot;tabindex&quot;, -1<span class="br0">&#41;</span>;</li><li><span class="br0">&#125;</span><span class="br0">&#41;</span>; </li><li></li></ol></div></pre><!--END_DEVFMTCODE--><br />
<br />
Now when you tab out of the word entry field, the extra function buttons are skipped. This is a usability issue because if the extra buttons are left active in tab index, user can easily accidentally reload the challenge image when she thinks she is moving to the next item on the form (which is often the &#8220;submit&#8221; button), and then quickly hits Enter.</p>
]]></content:encoded>
			<wfw:commentRss>http://my.galagzee.com/2009/09/30/disabling-recaptcha-function-keys-tabindex-jquery/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Explorations in the World of Linux</title>
		<link>http://my.galagzee.com/2009/09/05/explorations-in-the-world-of-linux/</link>
		<comments>http://my.galagzee.com/2009/09/05/explorations-in-the-world-of-linux/#comments</comments>
		<pubDate>Sun, 06 Sep 2009 03:55:02 +0000</pubDate>
		<dc:creator>Ville Walveranta</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[bsd]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://my.galagzee.com/?p=375</guid>
		<description><![CDATA[I&#8217;ve been a FreeBSD admin for the past decade, and during this time have become quite familiar with the *BSD system. It has its quirks, but overall it&#8217;s very clean and easy to maintain. From time to time – usually when I&#8217;ve been getting ready to upgrade to the next major revision of FreeBSD –]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been a FreeBSD admin for the past decade, and during this time have become quite familiar with the *BSD system. It has its quirks, but overall it&#8217;s very clean and easy to maintain. </p>
<p>From time to time – usually when I&#8217;ve been getting ready to upgrade to the next major revision of FreeBSD – I&#8217;ve taken some time to research what the current pros and cons are for FreeBSD vs. some Linux distro. Always, in the end, FreeBSD has won.  However, a development project I&#8217;m starting to work on will utilize <a href="http://www.zend.com/en/products/server/" target="_blank">Zend Server</a>, which is only supported on handful of common Linux distros and on Windows (which is, by default, not an option as I strongly maintain that Windows is not suitable as a web server platform). There is, of course, Linux compatibility layer in FreeBSD, but as Zend doesn&#8217;t currently support it as a platform for Zend Server, I wouldn&#8217;t feel comfortable using it in a production environment.</p>
<p>So even though I find FreeBSD superior to Linux in many ways, I&#8217;ve now spent some time getting acquainted with Linux. I first started with Red Hat, then moved to CentOS which is the Linux distribution I&#8217;m currently testing. Now it&#8217;s not <em>bad</em>, per se, but I frequently come back to the thought: &#8220;Why would someone, anyone prefer THIS over a BSD system?!&#8221;  The package management with yum, rpm, and the GUI overlays is easy enough, but <em>it&#8217;s chaotic!</em> Having to enable and disable repos, set their priorities, etc. seems unnecessarily complicated. On the FreeBSD side there is the <a href="http://en.wikipedia.org/wiki/Ports_collection" target="_blank">ports collection</a> which provides most of the software that one can imagine ever needing.  The odd few items that either aren&#8217;t available in ports, or whose configuration is somehow not complete enough through ports can be easily compiled from the source tarball. Everything&#8217;s quite easy to keep track of, and to duplicate if one&#8217;s building a new system.</p>
<p>I&#8217;m sure some of this feeling stems from the fact that I have been using a BSD system for so long, and from the fact that I probably don&#8217;t yet know Linux well enough (say, to build the system from a scratch..). But as far as I can tell, package management <em>is</em> done with yum and rpm (on CentOS, say), by adjusting repository priorities, and enabling/disabling repositories. That is messy!</p>
<p>Well, I now have a functional development server running Zend Server with Apache, Subversion, and MySQL, and as the vendor (Zend) dictates the rules, I must continue development on Linux. Perhaps in six months time I&#8217;ll have more favorable comments about it as compared to FreeBSD&#8230; but I sort of doubt it.  My guess is I&#8217;ll just learn to live with it, every now and then wistfully glancing to the direction of the BSD server.</p>
]]></content:encoded>
			<wfw:commentRss>http://my.galagzee.com/2009/09/05/explorations-in-the-world-of-linux/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Something I didn&#8217;t know about KVM switches and Motherboard BIOS&#8230;</title>
		<link>http://my.galagzee.com/2009/09/02/something-i-didnt-know-about-kvm-switches-and-motherboard-bios/</link>
		<comments>http://my.galagzee.com/2009/09/02/something-i-didnt-know-about-kvm-switches-and-motherboard-bios/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 19:31:06 +0000</pubDate>
		<dc:creator>Ville Walveranta</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[bios]]></category>
		<category><![CDATA[gigabyte]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[motherboard]]></category>

		<guid isPermaLink="false">http://my.galagzee.com/?p=366</guid>
		<description><![CDATA[I recently installed Gigabyte GA-EP45T-UD3LR motherboard to a small LAN file server. It&#8217;s a decent, stable, inexpensive board. But what I didn&#8217;t realize is that if you want to use a shared USB keyboard and mouse with a Windows system, some BIOS options must be available and editable (assuming they&#8217;re not set &#8220;correctly&#8221; by default]]></description>
			<content:encoded><![CDATA[<p>I recently installed <a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16813128371&#038;Tpk=gigabyte%20ga-ep45t-ud3lr">Gigabyte GA-EP45T-UD3LR</a> motherboard to a small LAN file server. It&#8217;s a decent, stable, inexpensive board. But what I didn&#8217;t realize is that if you want to use a shared USB keyboard and mouse with a Windows system, some BIOS options must be available and editable (assuming they&#8217;re not set &#8220;correctly&#8221; by default from the <abbr title="Keyboard, Video, Mouse">KVM</abbr> switch&#8217;s point of view). This motherboard&#8217;s BIOS doesn&#8217;t have those options and apparently the BIOS defaults aren&#8217;t the right ones for this kind of use. The result: once USB keyboard and mouse have been switched away from the system with a KVM switch, they&#8217;ll never be reacquired by the system until the system is rebooted. Fortunately <abbr title="Remote Desktop Connection">RDC</abbr> works so that the console is not usually—or at least is very rarely—needed&#8230;</p>
<p>For reference, if you&#8217;re planning to use a Windows system with a KVM switch, make sure its BIOS has the following options:</p>
<ul>
<li>HALT ON ERROR: All but keyboard (usually in Standard CMOS settings)</li>
<li>PnP OS: yes (usually in PnP/PCI settings)</li>
<li>USB IRQ: enabled (usually in PnP/PCI settings)</li>
</ul>
<p>Without these options set the only way to find out whether a specific motherboard will or will not work with a USB KVM switch, is to try. Gigabyte GA-EP45T-UD3LR does not.</p>
]]></content:encoded>
			<wfw:commentRss>http://my.galagzee.com/2009/09/02/something-i-didnt-know-about-kvm-switches-and-motherboard-bios/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
