<?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>Michael Kuron&#039;s Blog</title>
	<atom:link href="http://blog.michael.kuron-germany.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.michael.kuron-germany.de</link>
	<description></description>
	<lastBuildDate>Mon, 21 May 2012 08:08:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Active PA speaker systems</title>
		<link>http://blog.michael.kuron-germany.de/2012/03/active-pa-speaker-systems/</link>
		<comments>http://blog.michael.kuron-germany.de/2012/03/active-pa-speaker-systems/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 13:42:17 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Sound]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=221</guid>
		<description><![CDATA[During my high school time, I did a lot of work as a sound technician and lighting designer at all kinds of events, both as a volunteer at school and outside of school. Recently someone from the school told me that they were looking at buying a new portable speaker system, both to replace their [...]]]></description>
			<content:encoded><![CDATA[<p>During my high school time, I did a lot of work as a sound technician and lighting designer at all kinds of events, both as a volunteer at school and outside of school. Recently someone from the school told me that they were looking at buying a new portable speaker system, both to replace their old/broken/underpowered one and because they were paying more than a thousand euros in rental fees for additional speakers every year. They asked me if I could help them choose one. We quickly reached the conclusion that active speakers were the way to go because of their flexibility and because they would often be operated by people who didn&#8217;t know a lot about all the technical stuff.</p>
<p>We ended up narrowing it down to three candidates: the <a href="http://www.yamahaproaudio.com/global/en/products/speakers/dsr_series/">Yamaha DSR</a> series, the <a href="http://www.jblpro.com/catalog/general/productfamily.aspx?fid=93&amp;mid=3">JBL PRX600</a> series, and the <a href="http://www.qscaudio.com/products/speakers/kw_series/">QSC KW</a> series. These are the top-of-the-line active systems the largest and most reputable speaker manufacturers have to offer, as of early 2012. The next step was to find a place where we could listen to all three and compare them. <a href="http://www.thomann.de/">Thomann</a>, the largest online shop for musical instruments and PA equipment in Europe, where we have been buying sound equipment for years, has a huge store and showroom in a small town in northern Bavaria. They ordered and set up all these speakers for us and let us listen to them for more than an hour. If the friendly sales guy ever grew tired of listening to our test songs like &#8220;He&#8217;s A Pirate&#8221; by Klaus Badelt or &#8220;Man in the Mirror&#8221; by Michael Jackson over and over again, he certainly didn&#8217;t show it.</p>
<p>We almost immediately ruled out the QSC: We had the <a href="http://www.thomann.de/de/qsc_kw_153.htm">QSC KW 153</a> three-way 15&#8243; top coupled with a <a href="http://www.thomann.de/de/qsc_kw_181.htm">QSC KW 181</a> 18&#8243; subwoofer set up, but the mids and highs just sounded muddy.</p>
<p>Some other speakers we temporarily had in the test were some JBL Eon (by accident), which just sounded cheap compared to the others, and some RCF Art, which had crisp and powerful base, but not exactly outstanding highs.</p>
<p><span style="color: #000080;">Now we only had the <a href="http://www.thomann.de/de/jbl_prx_615m.htm"><span style="color: #000080;">JBL PRX 615</span></a> two-way 15&#8243; top coupled with the <a href="http://www.thomann.de/de/jbl_prx_618s_xlf.htm"><span style="color: #000080;">JBL PRX618-XLF</span></a> 18&#8243; subwoofer and the <a href="http://www.thomann.de/de/yamaha_dsr_115.htm"><span style="color: #000080;">Yamaha DSR 115</span></a> two-way 15&#8243; top coupled with the <a href="http://www.thomann.de/de/yamaha_dsr_118w.htm"><span style="color: #000080;">Yamaha DSR 118W</span></a> 18&#8243; subwoofer left over. We tested and compared them for almost an hour: sometimes we tended towards the JBLs, other times we liked the Yamahas more.</span></p>
<p><span style="color: #000080;">The JBLs sounded very smooth (if you want to be mean, you could call them a tiny bit muddy) and their base stretched down to 30 Hz. On the other hand, the Yamahas had super-clear mids and highs and very precise and crisp base. After quite some discussion, we decided to go with the Yamahas. Another advantage was their significantly lower price and their more advanced DSP circuitry to protect the speakers.</span></p>
<p>They got delivered a few days ago and so far we&#8217;re really happy with them. They sound amazing: Perfect for the school&#8217;s numerous music performances. And they are powerful: Perfect for events like dances and parties.</p>
<p><span style="color: #000080;">If you&#8217;re looking for a set of high-quality portable speakers for a school, church, band or DJ, the Yamaha DSR series is most likely your best choice. They sound great, have lots of power and are well worth their money.</span></p>
<p>If you just use them for speech, a set of Yamaha DSR 112 would probably be a fine choice (I didn&#8217;t test the DSR 112, but assume they&#8217;re as good as the DSR 115 with a little less low-mids). If you&#8217;re using them for a band, go for a set of DSR 115, and if you have drums, base or anything else below 120 Hz, definitely get a pair of DSR 118W subwoofers along with them. Same goes for DJ and party use: a pair each of DSR 115 and DSR 118W should suffice to bring high-decibel, high-quality sound to a few hundred audience members.</p>
<p>If you have experiences with the Yamaha DSR (or the recently-released smaller DXR and DSW series), or have found other speakers in the same price range that sound better, please feel free to share them in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2012/03/active-pa-speaker-systems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integrating BIND with AD-integrated Microsoft DNS</title>
		<link>http://blog.michael.kuron-germany.de/2011/10/integrating-bind-with-ad-integrated-microsoft-dns/</link>
		<comments>http://blog.michael.kuron-germany.de/2011/10/integrating-bind-with-ad-integrated-microsoft-dns/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 09:36:33 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Windows Server]]></category>
		<category><![CDATA[ActiveDirectory]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[BIND9]]></category>
		<category><![CDATA[Microsoft DNS]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=191</guid>
		<description><![CDATA[I recently set up BIND9 to run secondary zones for an ActiveDirectory-integrated DNS server (the reason being that I hated effectively losing internet access when I rebooted my W2k8R2 server). While that was really easy (add the Linux server to the nameservers tab in DNS Admin, allow zone transfers and notifications, add slave zones in [...]]]></description>
			<content:encoded><![CDATA[<p>I recently set up BIND9 to run secondary zones for an ActiveDirectory-integrated DNS server (the reason being that I hated effectively losing internet access when I rebooted my W2k8R2 server). While that was really easy (add the Linux server to the nameservers tab in DNS Admin, allow zone transfers and notifications, add slave zones in the named.conf), I thought that it shouldn&#8217;t be too difficult to also automatically replicate AD-integrated Conditional Forwarders.</p>
<p>While they are easily found in the <em>DC=DomainDnsZones</em> and <em>DC=ForestDnsZones</em> branch inside the AD, it turns out that the server information is stored in <em>dnsproperty</em> attributes containing binary data. However, Microsoft actually provides a <a href="http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-DNSP%5D.pdf">specification</a> for their DNS data structures, which is certainly very commendable. But as it turns out, it appears to have been written by someone who had no clue about Endianness or how many bits are in a byte (*).<br />
The essence is: everything is Big Endian, except for IP addresses (the spec claims they are Network Byte Order, but in reality they are Little Endian), and every occurence of &#8220;1 byte&#8221; in section 2.3.1.1 dnsProperty should be replaced with &#8220;4 byte&#8221;.</p>
<p>So after taking about two hours for something that I expected would only take a couple minutes to hack together, I ended up with 400 lines of code that generate a file you can include in your named.conf that will look something like this:<br />
<code>zone "google.com" {<br />
    type forward;<br />
    forward first;<br />
    forwarders { 74.82.42.42; 2001:470:20:0:0:0:0:2; };<br />
};</p>
<p>zone "youtube.com" {<br />
    type forward;<br />
    forward first;<br />
    forwarders { 74.82.42.42; 2001:470:20:0:0:0:0:2; };<br />
};</code><br />
(For those curious, this sample configuration would point google.com and youtube.com at Hurricane Electric&#8217;s DNS server so that you get AAAA records, a.k.a. <a href="http://www.google.com/intl/en/ipv6/">Google over IPv6</a>)</p>
<p>After this worked, I decided to also pull my slave zone definitions through the same mechanism. It only took me a minute to do that.<br />
<code>zone "example.com" {<br />
	type slave;<br />
	file "slave_example.com";<br />
	masters { 10.0.0.1; };<br />
	allow-notify { 10.0.0.1; };<br />
};</code></p>
<p>So here we are: BIND9 as a fully-blown sync partner for AD-integrated DNS zones. To add a zone or conditional forwarder to BIND, add it to AD, set it to replicate to all DNS/domain controllers in this domain or forest, add the BIND server to the nameservers tab and allow zone transfers and notifications, and wait for the cron job to kick in.</p>
<p>I ended up having to write this script in PHP because Python&#8217;s LDAP module appears to have a broken SASL implementation, and you need SASL to use Kerberos for an LDAP connection.</p>
<p>The <a href='http://blog.michael.kuron-germany.de/wp-content/uploads/2011/10/condfwds.php_.txt'>PHP script</a> takes two parameters (1. the AD server&#8217;s address or the AD DNS domain name; 2. the AD base DN) and requires a valid Kerberos ticket.<br />
The <a href='http://blog.michael.kuron-germany.de/wp-content/uploads/2011/10/condfwds.sh_.txt'>shell script</a> (which you will most likely want to run from a cron job), which shares much of its code with my script from <a href="http://blog.michael.kuron-germany.de/2011/02/isc-dhcpd-dynamic-dns-updates-against-secure-microsoft-dns/" title="ISC DHCPd: Dynamic DNS updates against secure Microsoft DNS">ISC DHCPd: Dynamic DNS updates against secure Microsoft DNS</a>, needs to be configured with your realm, domain, base DN, user name (principal) and path to a keytab for that user (instruction on how to generate the keytab using ktutil are in the script&#8217;s comments).</p>
<p>(*) After doing all this, I figured that people from projects like Samba that write open source software to re-implement or interface with Microsoft products are doing an absolutely amazing job. They most likely aren&#8217;t getting any better specs than the one I found on MS DNS (if they get specs at all), and yet still somehow create almost perfect software that is a lot more complex than the simple stuff I did here.</p>
<p><strong>UPDATE 2011-10-30:</strong> Apparently, AD refuses all requests from Linux clients that come in via IPv6. To force IPv4, line 7 of the PHP script needs to be changed to <code>$conn = ldap_connect(gethostbyname($adserver), 389);</code>, which is also fixed in the downloadable script.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2011/10/integrating-bind-with-ad-integrated-microsoft-dns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mount ext3 VMDK in VMWare Fusion using VMDKMounter</title>
		<link>http://blog.michael.kuron-germany.de/2011/10/mount-ext3-vmdk-in-vmware-fusion/</link>
		<comments>http://blog.michael.kuron-germany.de/2011/10/mount-ext3-vmdk-in-vmware-fusion/#comments</comments>
		<pubDate>Sat, 22 Oct 2011 19:06:16 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=184</guid>
		<description><![CDATA[VMWare Fusion 3 comes with a tool called VMDKMounter.app. It allowed you to simply double-click NTFS or FAT32 VMDKs and they would be mounted on your desktop. VMWare Fusion 4 dropped this tool, but you can download version 3.1.3 and extract /Library/Application Support/VMware Fusion/VMDKMounter.app from the package using Pacifist (just make sure that VMDKMounter.app/Contents/MacOS/vmware-vmdkMounterTool has [...]]]></description>
			<content:encoded><![CDATA[<p>VMWare Fusion 3 comes with a tool called VMDKMounter.app. It allowed you to simply double-click NTFS or FAT32 VMDKs and they would be mounted on your desktop.</p>
<p>VMWare Fusion 4 dropped this tool, but you can download version 3.1.3 and extract <em>/Library/Application Support/VMware Fusion/VMDKMounter.app</em> from the package using <a href="http://www.charlessoft.com/">Pacifist</a> (just make sure that VMDKMounter.app/Contents/MacOS/vmware-vmdkMounterTool has the sticky bit set and is owned by root:wheel after you extract it).</p>
<p>Next, install <a href="http://osxfuse.github.com/">OSXFUSE</a> (the successor to <a href="http://code.google.com/p/macfuse/">MacFUSE</a>) and <a href="http://sourceforge.net/projects/fuse-ext2/">fuse-ext2</a> if you don&#8217;t already have them installed.</p>
<p>VMDKMounter attempts to mount EXT2 using <strong>/System/Library/Filesystems/ext2.fs/Contents/Resources/mount_ext2</strong>, so we need to create two symlinks:</p>
<p><code>cd /System/Library/Filesystems<br />
sudo ln -s fuse-ext2.fs ext2.fs<br />
cd ext2.fs/Contents/Resources<br />
sudo ln -s ../../mount_fuse-ext2 mount_ext2</code></p>
<p>Now we&#8217;re all set, you can simply open a VMDK by double-clicking it, or you can right-click a VMWare VM and open it with VMDKMounter.app and automatically have all its VMDKs mounted.</p>
<p>If you are receiving an NTFS-3G error message when mounting a non-NTFS VMDK: that&#8217;s perfectly normal, so you can just click OK. The error message is due to VMDKMounter simply trying a bunch of file system mounters until it finds one that doesn&#8217;t fail. As far as I can tell, it tries (in that order) ntfs, msdos, ntfs-3g, hfs, ext2, ext3.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2011/10/mount-ext3-vmdk-in-vmware-fusion/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>How-To: Converting Xen Linux VMs to VMWare ESXi</title>
		<link>http://blog.michael.kuron-germany.de/2011/10/how-to-converting-xen-linux-vms-to-vmware-esxi/</link>
		<comments>http://blog.michael.kuron-germany.de/2011/10/how-to-converting-xen-linux-vms-to-vmware-esxi/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 10:47:59 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Virtualization]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=179</guid>
		<description><![CDATA[I have a couple Linux VMs I created on Xen using xen-create-image (as such, they are using pygrub and have one virtual disk file per partition). Now I want to migrate those over to a VMWare ESXi box. To convert your raw Xen disk images to VMWare vmdk files, do this: 1. In VMWare Fusion [...]]]></description>
			<content:encoded><![CDATA[<p>I have a couple Linux VMs I created on Xen using xen-create-image (as such, they are using pygrub and have one virtual disk file per partition). Now I want to migrate those over to a VMWare ESXi box. To convert your raw Xen disk images to VMWare vmdk files, do this:</p>
<p>1. In VMWare Fusion or Workstation, do a basic install of Debian Squeeze onto a flat-file (not split into 2GB segments and preallocated) VMDK that is slightly larger than your virtual Xen disk with a separate VMDK for swap.<br />
2. Downgrade it to Grub 1 using <em>apt-get install grub-legacy</em>, <em>grub-install /dev/sda</em>, <em>update-grub</em> (as Grub 2 is not compatible with /boot/grub/menu.lst files as generated by xen-create-image).<br />
3. Shut down and make a copy of the VMDK.<br />
4. Boot the VM back up and re-install Grub2 using <em>apt-get install grub</em>.<br />
5. Edit /boot/grub/grub.cfg and replace <em>root=UUID=xxxxxxxxxx</em> in the linux lines with <em>root=/dev/sda1</em><br />
6. Shut down the VM and attach the VMDK you copied in step 3 as an additional disk (this will be the target disk for our conversion).<br />
7. Boot it up and make sure that you&#8217;re getting a Grub2 screen (i.e. it is not booting from the copied VMDK).<br />
8. Using <em>mount</em>, check that your root disk is sda1 (which usually should be the first disk, not the copied disk). Using <em>ls /dev/sd*</em>, make sure it sees the target disk as sdc.<br />
9. <em>dd if=/path/to/xen/vm/disk.img of=/dev/sdc1 bs=1048576</em><br />
10. mount /dev/sdc1 /mnt; cd /mnt<br />
11. nano etc/fstab: replace swap disk /dev/xvda1 with /dev/sdb1 and root disk /dev/xvda2 with /dev/sda1<br />
12. nano etc/inittab: replace hvc0 with tty1<br />
13. nano boot/grub/menu.lst: replace /dev/xvda2 with /dev/sda1<br />
14. umount /mnt<br />
15. Attach the new virtual disk to a VM and boot a rescue system. There, drop to a shell on /dev/sda1 and apt-get update, apt-get install grub<br />
16. Reboot<br />
17. Done!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2011/10/how-to-converting-xen-linux-vms-to-vmware-esxi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Intel AMT&#8217;s VNC server</title>
		<link>http://blog.michael.kuron-germany.de/2011/10/using-intel-amts-vnc-server/</link>
		<comments>http://blog.michael.kuron-germany.de/2011/10/using-intel-amts-vnc-server/#comments</comments>
		<pubDate>Sat, 08 Oct 2011 09:27:03 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[intel amt]]></category>
		<category><![CDATA[remote kvm]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[vpro]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=173</guid>
		<description><![CDATA[Newer Intel Chipsets with vPro/Intel AMT, such as the Q57, Q67 and C206 (as long as they&#8217;re paired with a Core i5/i7 or Xeon with integrated graphics), have a feature called Remote KVM. To use it, press Ctrl-P at the BIOS splash screen to get to the MEBx menu, set a password (minimum 8 characters, [...]]]></description>
			<content:encoded><![CDATA[<p>Newer Intel Chipsets with vPro/Intel AMT, such as the Q57, Q67 and C206 (as long as they&#8217;re paired with a Core i5/i7 or Xeon with integrated graphics), have a feature called Remote KVM.</p>
<p>To use it, press Ctrl-P at the BIOS splash screen to get to the MEBx menu, set a password (minimum 8 characters, mixed case, numbers and special characters are enforced), configure the network settings (they can even match the OS&#8217;s IP address), enable Remote KVM and disable User Opt-In.</p>
<p>Next, download the <a href="http://software.intel.com/en-us/articles/download-the-latest-intel-amt-software-development-kit-sdk/">Intel AMT SDK</a>, extract the ZIP and open .\Windows\Intel_AMT\Bin\KVM\KVMControlApplication.exe . There, you can enable KVM as seen in the following screenshot:<br />
<a href="http://blog.michael.kuron-germany.de/wp-content/uploads/2011/10/Screen-shot-2011-10-08-at-10.28.40.png"><img class="aligncenter size-full wp-image-174" title="Intel AMT KVM Console Remote Machine Settings" src="http://blog.michael.kuron-germany.de/wp-content/uploads/2011/10/Screen-shot-2011-10-08-at-10.28.40.png" alt="" width="923" /></a></p>
<p>KVM Status can either be set to &#8220;redirection ports&#8221; (meaning it will only be accessible to VNC clients that specifically support Intel AMT, such as RealVNC Viewer Plus or Intel&#8217;s KVM Console, the former of which costs $100, the latter of which constantly overlays a RealVNC logo on the screen), to &#8220;default port&#8221; (meaning it will be accessible on TCP port 5900 to any VNC client), or to &#8220;all ports&#8221; (which is the combination of both).<br />
If you enable VNC access, you will also need to set an RFB Password. As I found out the hard way (Intel actually has it hidden in their <a href="http://software.intel.com/sites/manageability/AMT_Implementation_and_Reference_Guide/DOCS/Implementation%20and%20Reference%20Guide/HTMLDocuments/WS-Management_Class_Reference/IPS_KVMRedirectionSettingData.htm#RFBPassword">documentation</a> as well), it gets truncated at 8 characters and at the same time has the same security requirements as the general AMT password.<br />
If you disabled User Opt-In in the MEBx menu, you can disable it here as well.</p>
<p>So that&#8217;s it, now you can use almost any VNC client you like (RealVNC and Chicken of the VNC work fine, while Apple Remote Desktop appears to cause the VNC server to freeze) and control the machine just as if you were sitting in front of it.<br />
Two things I noticed: On my machine, the BIOS splash screen was not visible during a KVM connection (not even on a directly-attached screen), so to get to the BIOS I needed to blindly hit the corresponding key. Also, it is not possible to enter the MEBx menu during a KVM connection (probably for some obscure security reasons): if you hit the corresponding key, it immediately exits and continues normal bot; if you establish a KVM connection while in MEBx, you get disconnected immediately.</p>
<p>After about half an hour of playing with Intel AMT, I have to say it&#8217;s really cool. If you&#8217;re buying/building a home server, you should definitely consider getting a mainboard with Intel AMT 6.0 or later: You get server-grade remote management capabilities for a very small premium, which are very useful if you ever lock yourself out while remotely connected to the server.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2011/10/using-intel-amts-vnc-server/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Running Mac OS X 10.4, 10.5, 10.6 and 10.7 in VMWare Fusion 4.0</title>
		<link>http://blog.michael.kuron-germany.de/2011/09/running-mac-os-x-10-4-10-5-10-6-and-10-7-in-vmware-fusion-4-0/</link>
		<comments>http://blog.michael.kuron-germany.de/2011/09/running-mac-os-x-10-4-10-5-10-6-and-10-7-in-vmware-fusion-4-0/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 14:28:37 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[10.4]]></category>
		<category><![CDATA[10.5]]></category>
		<category><![CDATA[10.6]]></category>
		<category><![CDATA[10.7]]></category>
		<category><![CDATA[leopard]]></category>
		<category><![CDATA[lion]]></category>
		<category><![CDATA[mac os x]]></category>
		<category><![CDATA[snow leopard]]></category>
		<category><![CDATA[tiger]]></category>
		<category><![CDATA[vmware fusion]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=149</guid>
		<description><![CDATA[UPDATE 2011-11-19: According to several blogs, VMWare Fusion 4.1 now officially runs Mac OS X 10.5, 10.6 and 10.7 (as long as you confirm that you have a valid license for virtualization). A VMWare TechNote confirms this, so I assume the change is here to stay. In my testing, even my 10.4 VM worked just [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: green;"><strong>UPDATE 2011-11-19</strong>: According to <a title="MacWorld" href="http://www.macworld.com/article/163755/2011/11/vmware_fusion_update_lets_users_virtualize_leopard_snow_leopard.html">several blogs</a>, VMWare Fusion 4.1 now officially runs Mac OS X 10.5, 10.6 and 10.7 (as long as you confirm that you have a valid license for virtualization). A <a href="http://kb.vmware.com/selfservice/microsites/search.do?cmd=displayKC&amp;docType=kc&amp;externalId=2009714&amp;sliceId=1&amp;docTypeID=DT_KB_1_1&amp;dialogID=245572183&amp;stateId=0%200%20245574249">VMWare TechNote</a> confirms this, so I assume the change is here to stay. In my testing, even my 10.4 VM worked just as before.</span></p>
<p><strong>UPDATE 2011-11-22</strong>: <a href="http://blogs.vmware.com/teamfusion/2011/11/vmware-fusion-41-and-mac-os-x-virtual-machines.html">According to VMWare</a>, this new feature is a bug. The TechNote linked above is no longer available and the whole thing pretty much sounds like VMWare changed their mind and/or was pressured by Apple.</p>
<p>Back in 2009, I wrote about how to install <a href="http://blog.michael.kuron-germany.de/2009/03/running-mac-os-x-non-server-in-vmware-fusion/">Mac OS X (non-Server) versions in VMWare Fusion</a>. Since then, Apple has released Snow Leopard (which worked just fine using the exact same hints). VMWare just released Fusion 4.0 today (which officially supports Lion as a guest OS), so I wanted to see whether my old hint still works.</p>
<p>Fusion 4.0 no longer uses <em>/Library/VMWare Fusion</em> for all its support files, but is all self-contained (it even runs all its background services on-demand, which I quite like) and has its stuff in <em>/Applications/VMWare Fusion.app/Contents/Library</em>. So <a href="ftp://ftp.heise.de/pub/ct/listings/0824-266.zip">MultiMac Helper</a> (which patches Fusion&#8217;s Mac OS X Server detection stuff to trick it into also allowing the non-Server versions) no longer worked, but worked fine after fixing the paths. Grab a copy here: <a href="http://blog.michael.kuron-germany.de/wp-content/uploads/2011/09/MultiMac-Helper-4.app_.zip">MultiMac Helper 4.app</a></p>
<p>Next, I fired up my Snow Leopard, Leopard and Tiger VMs one after another. Some of them showed &#8220;No operating system found&#8221; messages, but I was able to fix that by going into the CD/DVD settings and making sure the virtual drive was enabled and set to my physical SuperDrive. It still shows that message sometimes upon boot of the guest OS, but that can be fixed by restarting the VM, shutting it down and starting it again, or hitting Ctrl-Alt-Del. It might take a few tries to get it to work (might be a timing issue?), but will eventually boot up. The boot loader shows some EBIOS errors, but those don&#8217;t seem to matter.</p>
<p>I have not yet tried creating new 10.4/10.5/10.6 VMs yet, but that should still work the same as before.</p>
<p>If you&#8217;re having any issues (and if possible fixes for those), please let me know in the comments and I&#8217;ll update my post. I&#8217;m also attaching my VMX files to this post so that you can compare yours to them if you have trouble getting it to work: <a href="http://blog.michael.kuron-germany.de/wp-content/uploads/2011/09/SnowLeopard.vmx_.txt">SnowLeopard.vmx</a> <a href="http://blog.michael.kuron-germany.de/wp-content/uploads/2011/09/Leopard.vmx_.txt">Leopard.vmx</a> <a href="http://blog.michael.kuron-germany.de/wp-content/uploads/2011/09/Tiger.vmx_.txt">Tiger.vmx</a></p>
<p>I can&#8217;t help it, every time I fire up my Tiger VM (which I only do like twice a year), I get all nostalgic about the Aqua GUI. Ok, it&#8217;s horribly inconsistent (glossy white menu bar, structured semi-transparent menus and light gray title bars), but hey, it still looks cool.</p>
<p><a href="http://blog.michael.kuron-germany.de/wp-content/uploads/2011/09/Screen-shot-2011-09-14-at-16.25.43.png"><img class="aligncenter size-medium wp-image-156" title="Mac OS X 10.4 running in VMWare Fusion 4.0" src="http://blog.michael.kuron-germany.de/wp-content/uploads/2011/09/Screen-shot-2011-09-14-at-16.25.43-300x245.png" alt="" width="300" height="245" /></a></p>
<p><span style="color: red;"><strong>Note</strong><br />
Before proceeding, make sure you have an appropriate license for Mac OS X. I.e., don&#8217;t install two copies if you only own one &#8212; in general, this means you need the Family Pack or an additional copy. Also, make sure that you&#8217;re allowed to virtualize your copy of OS X &#8212; in Germany that usually is fine as limitations imposed by the EULA are effectively not legally binding (which is the reason why the German computer magazine c&#8217;t was able to publish MultiMac Helper), but you will need to check what applies in your own country.</span></p>
<p><strong>UPDATE:</strong> If you create a new VM, you need to remove <code>firmware = "efi"</code> from the VMX, or it will complain about the OS not being the server version at some point during boot. If you see the black BIOS-style screen right after powering up the VM, you&#8217;re fine. If you see a grey screen with the VMWare logo on it, the VM is set to EFI mode.<br />
However, even then I have not been able to successfully boot a Snow Leopard DVD. This appears to be due to the way VMWare Fusion handles non-EFI OS X boots: Upon boot, it connects darwin.iso to the VM, loads its special bootloader from there. VMWare Fusion 2.0 and 3.0 somehow managed to do that without interfering with the Snow Leopard DVD, but Fusion 4.0 fails at that. I assume it&#8217;s not something the VMWare folks would be regression testing because Fusion 3.0 and later by default boot OS X guests in EFI mode.<br />
So the conclusion would be (at least until someone figures out how to patch the virtual EFI) that you need to create your 10.4/10.5/10.6 VMs on VMWare Fusion 2.0 (or 3.0 which requires you to manually remove the <code>firmware = "efi"</code> line as well). They&#8217;ll run in Fusion 4.0 just fine.</p>
<p>Alternatively, you could try (haven&#8217;t tested it yet) to leave the VMX with <code>firmware = "efi"</code>, pull an image from your OS X DVD, convert it to read/write, <em>touch /Volumes/OS X Install DVD/System/Library/CoreServices/ServerVersion.plist</em> (to make Fusion believe it&#8217;s a server DVD), convert it to read-only, boot it in the VM, install it. Rebooting into the OS will fail (as it does not have ServerVersion.plist), so remove the <code>firmware = "efi"</code> to switch the VM back to the patched non-EFI bootloader.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2011/09/running-mac-os-x-10-4-10-5-10-6-and-10-7-in-vmware-fusion-4-0/feed/</wfw:commentRss>
		<slash:comments>44</slash:comments>
		</item>
		<item>
		<title>Xen 4.0 and Citrix WHQL PV drivers for Windows</title>
		<link>http://blog.michael.kuron-germany.de/2011/06/141/</link>
		<comments>http://blog.michael.kuron-germany.de/2011/06/141/#comments</comments>
		<pubDate>Sat, 18 Jun 2011 09:29:00 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[Windows Server]]></category>
		<category><![CDATA[64-bit]]></category>
		<category><![CDATA[citrix]]></category>
		<category><![CDATA[windows server 2008 r2]]></category>
		<category><![CDATA[x64]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=141</guid>
		<description><![CDATA[Xen 4.0 is supposed to be able to use Citrix&#8217;s WHQL certified Windows paravirtualization drivers. Their advantage over the GPLPV drivers is that they are code-signed, meaning they run on 64-bit Windows without disabling some of Windows&#8217; security features. UPDATE 2011-10-17: Signed GPLPV drivers are now available. I have not yet tested them, but I [...]]]></description>
			<content:encoded><![CDATA[<p>Xen 4.0 is <a href="http://wiki.xensource.com/xenwiki/Xen4.0">supposed</a> to be able to use Citrix&#8217;s WHQL certified Windows paravirtualization drivers. Their advantage over the <a href="http://wiki.xensource.com/xenwiki/XenWindowsGplPv">GPLPV drivers</a> is that they are code-signed, meaning they run on 64-bit Windows without disabling some of Windows&#8217; security features.</p>
<p><strong>UPDATE 2011-10-17</strong>: <a href="http://www.h-online.com/open/news/item/Univention-signs-Xen-Windows-driver-1361143.html">Signed GPLPV drivers are now available.</a> I have not yet tested them, but I assume the fix below is no longer necessary.</p>
<p>While the Citrix drivers included in XenServer 5.5 work (<a href="http://xenbits.xen.org/hg/xen-4.0-testing.hg/rev/be9b8be3c648?revcount=960">after making a single registry tweak</a>), the more recent ones included in e.g. <a href="http://downloads.xen.org/XCP/42052/XCP-1.0-base-42052.iso">Xen Cloud Platform 1.0</a> do not work right away:</p>
<p>If you install the XCP drivers, make that registry tweak and reboot the DomU, you&#8217;ll notice messages like <code>XENUTIL: WARNING: CloseFrontend: timed out in XenbusWaitForBackendStateChange: /local/domain/0/backend/console/[id]/0 in state INITIALISING; retry.</code> in your <em>/var/log/xen/qemu-dm-*.log</em> and Windows just gets stuck during boot and keeps spinning forever. To get it back to work, you&#8217;ll need to<br />
<code>xenstore-rm /local/domain/0/backend/console/[id]<br />
xenstore-rm /local/domain/0/backend/vfb/[id]</code><br />
after starting the VM (thanks to <a href="http://lists.xensource.com/archives/html/xen-users/2011-02/msg00631.html">Keith Coleman</a>&#8216;s mailing list post!).</p>
<p>To automatically run these commands upon DomU start, create a script named <em>/usr/lib/xen/bin/qemu-dm-citrixpv</em> with the following contents<br />
<code>#!/bin/sh</p>
<p>xenstore-rm /local/domain/0/backend/console/$2<br />
xenstore-rm /local/domain/0/backend/vfb/$2</p>
<p>sh -c "sleep 10; xenstore-rm /local/domain/0/backend/console/$2; xenstore-rm /local/domain/0/backend/vfb/$2" &#038;</p>
<p>exec /usr/lib/xen/bin/qemu-dm $*</code><br />
and <code>chmod +x</code> it.</p>
<p>Then, edit your DomU config file and modify the device_model line and point it to your new script:<br />
<code>device_model = '/usr/lib/xen/bin/qemu-dm-citrixpv'</code></p>
<p>Now your Windows Server 2008 R2 x64 HVM-DomU is all set!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2011/06/141/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Asterisk: Remotely retrieving voicemail by pressing *</title>
		<link>http://blog.michael.kuron-germany.de/2011/04/asterisk-remotely-retrieving-voicemail-by-pressing/</link>
		<comments>http://blog.michael.kuron-germany.de/2011/04/asterisk-remotely-retrieving-voicemail-by-pressing/#comments</comments>
		<pubDate>Sat, 16 Apr 2011 12:00:07 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=135</guid>
		<description><![CDATA[Many howtos around the internet on how to remotely access your voicemail box involve a dedicated extension reachable from the outside or an IVR menu entry. But wouldn&#8217;t it be much nicer if you could just press the * DTMF key during the announcement? Turns out, this is quite simple: [incoming-external] exten => s,1,Dial(SIP/1234,20) exten [...]]]></description>
			<content:encoded><![CDATA[<p>Many howtos around the internet on how to remotely access your voicemail box involve a dedicated extension reachable from the outside or an IVR menu entry. But wouldn&#8217;t it be much nicer if you could just press the * DTMF key during the announcement? Turns out, this is quite simple:</p>
<p><code>[incoming-external]<br />
exten => s,1,Dial(SIP/1234,20)<br />
exten => s,n,Voicemail(1234,us)<br />
exten => a,1,VoiceMailMain(1234)<br />
exten => a,n,Hangup()</code></p>
<p>And it even works when you&#8217;re using macros (like I am):</p>
<p><code>[incoming-external]<br />
exten => 5551234,1,Macro(incoming-plus-voicemail,SIP/1234,20,1234)<br />
exten => 5551337,1,Macro(incoming-plus-voicemail,SIP/1337,20,1337)</p>
<p>[macro-incoming-plus-voicemail] ; SIP/xxx, wait time, voicemail<br />
exten => s,1,Dial(${ARG1},${ARG2}<br />
exten => s,n,Voicemail(${ARG3},us)<br />
; </code>push * during the announcement to access your mailbox<br />
<code>exten => a,1,VoiceMailMain(${ARG3})<br />
exten => a,n,Hangup()</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2011/04/asterisk-remotely-retrieving-voicemail-by-pressing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asterisk: Compile SRTP Module without recompiling Asterisk</title>
		<link>http://blog.michael.kuron-germany.de/2011/04/asterisk-compile-srtp-module-without-recompiling-asterisk/</link>
		<comments>http://blog.michael.kuron-germany.de/2011/04/asterisk-compile-srtp-module-without-recompiling-asterisk/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 21:20:27 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[Asterisk]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=129</guid>
		<description><![CDATA[I recently installed Asterisk 1.8.3 (the Asterisk team now provides pre-built Debian packages at http://packages.asterisk.org). Unfortunately, that package came without the res_srtp SRTP module. (UPDATE: Starting in 1.8.4, it does come with it.) Because I didn&#8217;t feel like re-compiling the entire package, I just took the corresponding version of res_srtp.c from the SVN, added the [...]]]></description>
			<content:encoded><![CDATA[<p>I recently installed Asterisk 1.8.3 (the Asterisk team now provides pre-built Debian packages at <a href="https://wiki.asterisk.org/wiki/display/AST/Asterisk+Packages">http://packages.asterisk.org</a>).<br />
Unfortunately, that package came without the res_srtp SRTP module. <em>(<strong>UPDATE</strong>: Starting in 1.8.4, it does come with it.)</em> Because I didn&#8217;t feel like re-compiling the entire package, I just took the corresponding version of <a href="http://svnview.digium.com/svn/asterisk/tags/1.8.3/res/res_srtp.c?revision=308575">res_srtp.c</a> from the SVN, added the following lines to the beginning of it:</p>
<p><code>#ifndef AST_MODULE<br />
#define AST_MODULE "res_srtp"<br />
#endif</code></p>
<p>and compiled and installed it using</p>
<p><code>gcc -shared res_srtp.c -o res_srtp.so -lsrtp<br />
sudo cp res_srtp.so /usr/lib/asterisk/modules/</code></p>
<p>You&#8217;ll need to have libsrtp0-dev and asterisk-dev installed, otherwise the compile will fail.<br />
Then, you can do <code>sudo asterisk -r</code> and load the module using <code>module load res_srtp</code> (or just restart Asterisk).</p>
<p>I&#8217;m still working on getting SRTP working flawlessly both incoming and outgoing and with stuff like transfers. Asterisk <a href="https://wiki.asterisk.org/wiki/display/AST/Secure+Calling+Specifics">Secure Calling Specifics</a> are a good starting point, but I&#8217;m also planning to write another post about this in the near future.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2011/04/asterisk-compile-srtp-module-without-recompiling-asterisk/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Asterisk: Change Callee-ID using CONNECTEDLINE</title>
		<link>http://blog.michael.kuron-germany.de/2011/04/asterisk-change-callee-id-using-connectedline/</link>
		<comments>http://blog.michael.kuron-germany.de/2011/04/asterisk-change-callee-id-using-connectedline/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 21:10:38 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[sip]]></category>
		<category><![CDATA[voip]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=122</guid>
		<description><![CDATA[It&#8217;s easy to change your Caller ID (assuming your phone provider doesn&#8217;t filter it) in Asterisk using something like Set(CALLERID(name)=blah). This is often used to choose which number to use for an outgoing call if you have multiple on a single SIP or ISDN trunk. But did you know it&#8217;s just as easy to change [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s easy to change your Caller ID (assuming your phone provider doesn&#8217;t filter it) in Asterisk using something like <em>Set(CALLERID(name)=blah)</em>. This is often used to choose which number to use for an outgoing call if you have multiple on a single SIP or ISDN trunk.</p>
<p>But did you know it&#8217;s just as easy to change the Callee ID on an outgoing call, i.e. change what your phone displays during the call? This can be very useful to display on the phone which one of several possible outgoing lines (multiple SIP providers, ISDN, &#8230;) was used or at which point in an IVR menu you are at the moment. To do this, use <em>Set(CONNECTEDLINE(name)=blah)</em>. Before getting started, set <em>sendrpid = pai</em> in your sip.conf.</p>
<p>To make things easier, I created two macros in my dialplan:</p>
<p><code>[macro-connectedline-name-number]<br />
exten =&gt; s,1,Set(CONNECTEDLINE(name,i)=${ARG1})<br />
exten =&gt; s,n,Set(CONNECTEDLINE(number,i)=${ARG2})<br />
exten =&gt; s,n,Set(CONNECTEDLINE(pres)=allowed)</code></p>
<p><code>[macro-connectedline-name]<br />
exten =&gt; s,1,Macro(connectedline-name-number,${ARG1}, ${MACRO_EXTEN})</code></p>
<p>Now I can do things like</p>
<p><code>[internal-test]<br />
exten =&gt; 101,1,Answer()<br />
exten =&gt; 101,n,Macro(connectedline-name,<em>Hello World</em>)<br />
exten =&gt; 101,n,Playback(hello-world)<br />
exten =&gt; 101,n,Hangup()</code></p>
<p>in my dialplan (IVR example).</p>
<p>Or how about</p>
<p><code>[outgoing]<br />
exten => 100,1,Macro(connectedline-name,<em>Mailbox</em>)<br />
exten => 100,n,VoiceMailMain(${CALLERID(num)},s)<br />
exten =&gt; _XXX.,n,Macro(connectedline-name,<em>VoIP 1</em>)<br />
exten =&gt; _XXX.,n,Dial(SIP/${EXTEN}@voipprovider)</code></p>
<p>(outgoing line example).</p>
<p>The Asterisk Wiki also has an entire page on <a href="https://wiki.asterisk.org/wiki/display/AST/Manipulating+Party+ID+Information">Manipulating Party ID Information</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2011/04/asterisk-change-callee-id-using-connectedline/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>NFS Performance: rsize and wsize</title>
		<link>http://blog.michael.kuron-germany.de/2011/03/nfs-performance-rsize-and-wsize/</link>
		<comments>http://blog.michael.kuron-germany.de/2011/03/nfs-performance-rsize-and-wsize/#comments</comments>
		<pubDate>Fri, 18 Mar 2011 11:23:29 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[nfs]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=119</guid>
		<description><![CDATA[NFS is supposed to be a very simple and fast network file protocol. However, when I tried to use it on my Xen box between a Debian Squeeze DomU and an NFS server running on the Debian Squeeze Dom0, I noticed that write performance was abysmal: any write more than a couple KB in size [...]]]></description>
			<content:encoded><![CDATA[<p>NFS is supposed to be a very simple and fast network file protocol. However, when I tried to use it on my Xen box between a Debian Squeeze DomU and an NFS server running on the Debian Squeeze Dom0, I noticed that write performance was abysmal: any write more than a couple KB in size would not only slow down to a crawl, but also bog down the DomU, making it rather difficult to even cancel the write.</p>
<p>After some researching and testing, I tracked it down to the rsize and wsize mount options: they specify the size of the chunks sent at a single time. Apparently, they are set to 1M if you don&#8217;t specify anything else. In my case, wsize=131072 and rsize=262144 showed the highest write and read speeds respectively. However, wsize=131072 is not too far away from the cliff after which writing drops to a crawl, so I decided to back it down to 65536.</p>
<p><a href="http://blog.michael.kuron-germany.de/wp-content/uploads/2011/03/nfs-size.png"><img class="aligncenter size-medium wp-image-120" title="NFS wsize/rsize" src="http://blog.michael.kuron-germany.de/wp-content/uploads/2011/03/nfs-size-300x146.png" alt="" width="300" height="146" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2011/03/nfs-performance-rsize-and-wsize/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Patching DSDT in recent Linux kernels without recompiling</title>
		<link>http://blog.michael.kuron-germany.de/2011/03/patching-dsdt-in-recent-linux-kernels-without-recompiling/</link>
		<comments>http://blog.michael.kuron-germany.de/2011/03/patching-dsdt-in-recent-linux-kernels-without-recompiling/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 14:18:04 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[acpi]]></category>
		<category><![CDATA[dsdt]]></category>
		<category><![CDATA[kernel]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=115</guid>
		<description><![CDATA[Up until a year or two ago, the Linux kernel let you replace the ACPI DSDT by adding a customized version to the initrd. However, more recent versions disable that by default. If you&#8217;re using Grub2 as your bootloader though, the alternative is simple: just add acpi /boot/dsdt.aml to your Grub config. If you prefer [...]]]></description>
			<content:encoded><![CDATA[<p>Up until a year or two ago, the Linux kernel let you replace the ACPI DSDT by adding a customized version to the initrd. However, more recent versions disable that by default. If you&#8217;re using Grub2 as your bootloader though, the alternative is simple: just add acpi /boot/dsdt.aml to your Grub config. If you prefer a more elegant solution, just add the attached <a href="http://blog.michael.kuron-germany.de/wp-content/uploads/2011/03/01_acpi.txt">01_acpi.txt</a> to /etc/grub.d, renamed it to 01_acpi and <i>chmod +x</i> it; then run <i>update-grub2</i> to rebuild your Grub config. It originally came from <a href="http://ubuntuforums.org/attachment.php?attachmentid=173402&amp;d=1287953669">ubuntuforums.org</a> and I removed the -e flag in the acpi line, which caused the new DSDT only to be visible to Grub, but not to the OS.</p>
<p>I believe the acpi command in Grub2 originally came from the Hackintosh community &#8211; messing around with DSDTs is a lot more common there because Mac OS X is rather picky.</p>
<p>For those of you who don&#8217;t know what I&#8217;m talking about: the DSDT describes certain hardware features your PC has, such as buttons, CPU power save modes, and lots of other things. Some mainboards have very poorly done BIOSes that have equally messed up DSDT tables. I won&#8217;t go into a lot of detail regarding how to fix those here though (it&#8217;s as simple as <em>cat /proc/acpi/dsdt &gt; dsdt.dat</em>; <em>iasl -d dsdt.dat</em>; editing <em>dsdt.dsl </em>to your liking; <em>iasl -tc dsdt.dsl</em> (this last step will probably produce a number of errors that can be solved by googling for the error number and making the appropriate changes in dsdt.dsl)).</p>
<p>Another valuable hint for people messing around with DSDTs: the DSDT is not the only place that can contain this kind of information, the other place would be the SSDT and possibly additional SSDTs. You can find them in /sys/firmware/acpi/tables and decompile them just like the DSDT as described above. Instead of recompiling the SSDT by itself, you could probably also consider merging it into your custom DSDT at the appropriate places.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2011/03/patching-dsdt-in-recent-linux-kernels-without-recompiling/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Using motd to warn you of upcoming fsck</title>
		<link>http://blog.michael.kuron-germany.de/2011/03/using-motd-to-warn-you-of-upcoming-fsck/</link>
		<comments>http://blog.michael.kuron-germany.de/2011/03/using-motd-to-warn-you-of-upcoming-fsck/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 14:03:10 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[fsck]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=112</guid>
		<description><![CDATA[Has it ever happened to you that you remotely rebooted a Linux server and wondered why after 10 minutes you still couldn&#8217;t Ping or SSH into it? Quite often, this is caused by a lengthy run of fsck on one of your ext3 file systems (on current multi-TB disks, they can take an hour or [...]]]></description>
			<content:encoded><![CDATA[<p>Has it ever happened to you that you remotely rebooted a Linux server and wondered why after 10 minutes you still couldn&#8217;t Ping or SSH into it? Quite often, this is caused by a lengthy run of fsck on one of your ext3 file systems (on current multi-TB disks, they can take an hour or longer). They usually get triggered automatically around every six months or 30 mounts, and there&#8217;s no easy way of knowing when it will happen.</p>
<p>My solution to this is rather simple: <em>tune2fs -l</em> tells you when the next fsck is coming up, so why not run a script upon every boot and have it write that information into /etc/motd so that you can see it every time you SSH in? The script is below (as a bonus, drives being fscked in less than 5 mounts or a week are printed in red), so all you need to do is put it somewhere on your hard drive and add something like<br />
<code># Add FSCK status to MOTD<br />
	[ -f /root/fsck_stats.sh ] &#038;&#038; bash /root/fsck_stats.sh >> /var/run/motd</code><br />
to the init script that generates your motd (on Debian Squeeze, that would be /etc/init.d/bootlogs).</p>
<p><code>#!/bin/bash</code></p>
<p><code> </code></p>
<p><code>echo</p>
<p>for disk in /dev/sda1 /dev/mapper/vm--storage-vms /dev/sdb1<br />
do<br />
cur_mounts=$(tune2fs -l $disk | grep "Mount count:" | awk '{print $3}')<br />
max_mounts=$(tune2fs -l $disk | grep "Maximum mount count:" | awk '{print $4}')<br />
diff_mounts=$(echo $max_mounts-$cur_mounts | bc)<br />
last_check=$(tune2fs -l $disk | grep "Last checked:" | awk '{print $3}')<br />
next_check=$(tune2fs -l $disk | grep "Next check after:" | awk '{print $4" "$5" "$6" "$7" "$8}')<br />
next_check_timestamp=$(date -d "$next_check" "+%s")<br />
cur_timestamp=$(date "+%s")<br />
diff_next=$(echo $next_check_timestamp-$cur_timestamp | bc)</p>
<p>color=""<br />
[ $diff_mounts -lt 5 ] &amp;&amp; color="\033[31m"<br />
[ $diff_next -lt 604800 ] &amp;&amp; color="\033[31m"</p>
<p></code></p>
<p><code>echo -e "$color Next FSCK on $(basename $disk): $next_check or in $diff_mounts mounts\033[0m"</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2011/03/using-motd-to-warn-you-of-upcoming-fsck/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IPv6 router on Linux</title>
		<link>http://blog.michael.kuron-germany.de/2011/02/ipv6-router-on-linux/</link>
		<comments>http://blog.michael.kuron-germany.de/2011/02/ipv6-router-on-linux/#comments</comments>
		<pubDate>Mon, 21 Feb 2011 10:08:47 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[ipv6]]></category>
		<category><![CDATA[radvd]]></category>
		<category><![CDATA[tunnelbroker.net]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=110</guid>
		<description><![CDATA[Setting up Linux as an IPv6 router is really easy. Even if your ISP doesn&#8217;t do IPv6 yet (like mine), there&#8217;s no reason not to get an IPv6 tunnel from Tunnelbroker.net and be IPv6-ready within minutes. Do a basic install of your favorite Linux distribution. Since my server runs Xen, I just did xen-create-image &#8211;ip=192.168.200.5 &#8211;netmask=255.255.255.0 [...]]]></description>
			<content:encoded><![CDATA[<p>Setting up Linux as an IPv6 router is really easy. Even if your ISP doesn&#8217;t do IPv6 yet (like mine), there&#8217;s no reason not to get an IPv6 tunnel from <a href="http://www.tunnelbroker.net">Tunnelbroker.net </a>and be IPv6-ready within minutes.</p>
<ol>
<li>Do a basic install of your favorite Linux distribution.<br />
Since my server runs Xen, I just did <em>xen-create-image &#8211;ip=192.168.200.5 &#8211;netmask=255.255.255.0 &#8211;gateway=192.168.200.1 &#8211;nameserver=192.168.200.23 &#8211;mirror=http://ftp.de.debian.org/debian/ &#8211;passwd &#8211;hostname=router-ipv6 &#8211;dist=squeeze &#8211;arch=i386 &#8211;size=4G &#8211;swap=1G &#8211;dir=/data/vms/router-ipv6 &#8211;memory=64M &#8211;role=udev &#8211;pygrub </em>and ran <em>ln -s /etc/xen/router-ipv6.cfg /etc/xen/auto</em> to have it automatically start upon reboot. To start the VM, do xm create router-ipv6.cfg</li>
<li>SSH into the virtual machine and configure the LAN and the WAN interface. Since I&#8217;m using a tunnel, my WAN interface is a 6in4 interface; if you&#8217;re using a physical one you&#8217;ll need to manually edit the Xen VM config file to add the physical interface to the VM. So we&#8217;re adding the following lines to /etc/network/interfaces<br />
<code>iface eth0 inet6 static<br />
address 2001:470:xxxb:xxxx::1<br />
netmask 64</p>
<p>auto 6in4<br />
iface 6in4 inet6 v4tunnel<br />
address 2001:470:xxxa:xxxx::2<br />
netmask 64<br />
endpoint 216.66.80.30<br />
gateway 2001:470:xxxa:xxxx::1<br />
up ip route add ::/0 dev 6in4</code></li>
<li>Next, edit /etc/sysctl.conf and set net.ipv6.conf.all.forwarding=1 by removing the comment sign from the beginning of the line.</li>
<li><em>apt-get install radvd</em> and then edit /etc/radvd.conf to look like this:<br />
<code>interface eth0<br />
{<br />
AdvSendAdvert on;<br />
AdvLinkMTU 1280;<br />
prefix 2001:470:xxxb:xxxx::1/64<br />
{<br />
AdvOnLink on;<br />
AdvAutonomous on;<br />
};<br />
RDNSS 2001:470:xxxb:xxx:yyyy:yyyy:yyyy:yyyy<br />
{<br />
};<br />
</code><br />
Most of this is pretty self-explanatory (the prefix line should contain the address of the router&#8217;s network interface and everything else just enables router advertisements), however the RDNSS line needs to point to the IPv6 address (it will automatically get one after you finish step 6) of your local DNS forwarder.</li>
<li>Next, you&#8217;ll probably want to configure the firewall so that your computers can&#8217;t be accessed from outside (remember, with IPv6 every device gets a publicly routable address). apt-get install shorewall6 and then edit the following files to configure it:<br />
In /etc/default/shorewall6: <code>startup=1</code> (enables the firewall) and <code>wait_interface="6in4"</code> (your WAN interface)<br />
In /etc/shorewall6/zones: Add the lines <code>fw firewall</code>, <code>net ipv6</code> and <code>loc ipv6</code><br />
In /etc/shorewall6/interfaces: Add the lines <code>net 6in4 detect</code> and <code>loc eth0 detect</code><br />
In /etc/shorewall6/policy: Add the lines <code>net all REJECT notice</code>, <code>loc all ACCEPT</code>, <code>fw all ACCEPT</code> and <code>all all REJECT notice</code><br />
In /etc/shorewall6/rules: Configure the firewall rules to your liking. I added <code>Ping(ACCEPT) all all</code> to allow incoming pings (I don&#8217;t believe in this security-by-obscurity stuff). I also added <code>ACCEPT all loc:2001:470:xxxb:xxxx:zzzz:zzzz:zzzz:zzzz</code> because that machine has its own IPv6-configured firewall.</li>
<li>Reboot the VM.</li>
</ol>
<p>All your IPv6-ready clients should start picking up addresses automatically. Linux, Mac OS X and iPhones do as expected and base their IP on the MAC address. Windows 7 does the same, but also makes up a random IP which gets used by default for all outgoing connections due to privacy reasons. On Windows XP, you need to manually add IPv6 to the network protocols in the network connection properties, after which it&#8217;ll behave similarly to Windows 7.<br />
The DNS server announced by radvd however only gets picked up by the iPhone. Mac OS X only supports manually-configured IPv6 DNS servers as far as I can tell. Windows automatically configures fec0:0:0:ffff::1, fec0:0:0:ffff::2 and fec0:0:0:ffff::3 as its DNS servers; you could add one of these addresses to your DNS server (and add some other address in the fec0:0:0:ffff::/64 range to your IPv6 router VM&#8217;s LAN interface so that clients can actually find a route to it), but unfortunately the site-local prefix fec0::/10 has been deprecated for more than half a decade and should no longer be used. But fear not, it&#8217;s perfectly fine to talk to your DNS server using IPv4 &#8211; it will still resolve AAAA (IPv6 A) queries without issues. And I expect IPv4 to stay around for at least another decade, so you&#8217;re not likely to run into trouble for a long time.</p>
<ol></ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2011/02/ipv6-router-on-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ISC DHCPd: Dynamic DNS updates against secure Microsoft DNS</title>
		<link>http://blog.michael.kuron-germany.de/2011/02/isc-dhcpd-dynamic-dns-updates-against-secure-microsoft-dns/</link>
		<comments>http://blog.michael.kuron-germany.de/2011/02/isc-dhcpd-dynamic-dns-updates-against-secure-microsoft-dns/#comments</comments>
		<pubDate>Tue, 15 Feb 2011 13:31:46 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[active directory]]></category>
		<category><![CDATA[ad]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[dhcp]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[kerberos]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=99</guid>
		<description><![CDATA[ISC DHCPd is capable of Dynamic DNS updates against servers like BIND that support shared-key authentication or any other server that supports unauthenticated updates (such as BIND or Microsoft DNS with secure updates disabled). So, what to do if you want to run ISC DHCPd on your Windows network, which is obviously running Microsoft&#8217;s DNS [...]]]></description>
			<content:encoded><![CDATA[<p>ISC DHCPd is capable of Dynamic DNS updates against servers like BIND that support shared-key authentication or any other server that supports unauthenticated updates (such as BIND or Microsoft DNS with secure updates disabled).</p>
<p>So, what to do if you want to run ISC DHCPd on your Windows network, which is obviously running Microsoft&#8217;s DNS server? BIND&#8217;s nsupdate tool supports Microsoft&#8217;s Kerberos authentication scheme when using the -g flag (the -o flag is only necessary for Windows 2000 Server, but not anymore for Windows Server 2008 R2), and DHCPd supports on commit/release/expiry blocks that let you run scripts upon these events. So here is my script:</p>
<p><code>#!/bin/bash</code></p>
<p><code>## CONFIGURATION ##</code></p>
<p><code>realm=EXAMPLE.COM<br />
principal=dhcpduser@$realm<br />
keytab=/root/dhcpduser.keytab<br />
domain=example.com<br />
ns=example-domain01.example.com</p>
<p>export KRB5CCNAME="/tmp/dhcp-dyndns.cc"</p>
<p># keytab can be generated using<br />
# $ ktutil<br />
# ktutil: addent -password -p dhcpduser@EXAMPLE.COM -k 1 -e aes256-cts-hmac-sha1-96<br />
# Password for dhcpduser@EXAMPLE.COM:<br />
# ktutil:  wkt dhcpduser.keytab<br />
# ktutil:  quit</p>
<p>## VARIABLES ##</p>
<p>action=$1<br />
ip=$2<br />
name=$(echo $3 | awk -F '.' '{print $1}')<br />
mac=$4</p>
<p>usage()<br />
{<br />
echo "USAGE:"<br />
echo $0 add 192.0.2.123 testhost 00:11:22:33:44:55<br />
echo $0 add 192.168.0.127 "" 00:11:22:44:33:55<br />
echo $0 delete 192.0.2.123 testhost 00:11:22:33:44:55<br />
echo $0 delete 192.0.2.127 "" 00:11:22:44:33:55<br />
}</p>
<p>if [ "$ip" = "" ]; then<br />
echo "IP missing"<br />
usage<br />
exit 101<br />
fi<br />
if [ "$name" = "" ]; then<br />
#echo "name missing"<br />
#usage<br />
#exit 102<br />
name=$(echo $ip | awk -F '.' '{print "dhcp-"$1"-"$2"-"$3"-"$4}')</p>
<p>if [ "$action" = "delete" ]; then<br />
name=$(host $ip | awk '{print $5}' | awk -F '.' '{print $1}')</p>
<p>echo $name | grep NXDOMAIN 2&gt;$1 &gt;/dev/null<br />
if [ "$?" = "0" ]; then<br />
exit 0;<br />
fi<br />
fi<br />
fi</p>
<p>ptr=$(echo $ip | awk -F '.' '{print $4"."$3"."$2"."$1".in-addr.arpa"}')</p>
<p>## KERBEROS ##</p>
<p>#export LD_LIBRARY_PATH=/usr/local/krb5-1.7/lib<br />
#export PATH=/usr/local/krb5-1.7/bin:$PATH</p>
<p>klist 2&gt;&amp;1 | grep $realm | grep '/' &gt; /dev/null<br />
if [ "$?" = 1 ]; then<br />
expiration=0<br />
else<br />
expiration=$(klist | grep $realm | grep '/' | awk -F '  ' '{system ("date -d \""$2"\" +%s")}' | sort | head -n 1)<br />
fi</p>
<p>now=$(date +%s)<br />
if [ "$now" -ge "$expiration" ]; then<br />
echo "Getting new ticket, old one expired $expiration, now is $now"<br />
kinit -F -k -t $keytab $principal<br />
fi</p>
<p>## NSUPDATE ##</p>
<p>case "$action" in<br />
add)<br />
echo "Setting $name.$domain to $ip on $ns"</p>
<p>oldname=$(host $ip $ns | grep "domain name pointer" | awk '{print $5}' | awk -F '.' '{print $1}')<br />
if [ "$oldname" = "" ]; then<br />
oldname=$name<br />
elif [ "$oldname" = "$name" ]; then<br />
oldname=$name<br />
else<br />
echo "Also deleting $oldname A record"<br />
fi</p>
<p>nsupdate -g &lt;<br />
server $ns<br />
realm $realm<br />
update delete $oldname.$domain 3600 A<br />
update delete $name.$domain 3600 A<br />
update add $name.$domain 3600 A $ip<br />
send<br />
UPDATE<br />
result1=$?<br />
nsupdate -g &lt;<br />
server $ns<br />
realm $realm<br />
update delete $ptr 3600 PTR<br />
update add $ptr 3600 PTR $name.$domain<br />
send<br />
UPDATE<br />
result2=$?<br />
;;</p>
<p>delete)<br />
echo "Deleting $name.$domain to $ip on $ns"<br />
nsupdate -g &lt;<br />
server $ns<br />
realm $realm<br />
update delete $name.$domain 3600 A<br />
send<br />
UPDATE<br />
result1=$?<br />
nsupdate -g &lt;<br />
server $ns<br />
realm $realm<br />
update delete $ptr 3600 PTR<br />
send<br />
UPDATE<br />
result2=$?<br />
;;<br />
*)<br />
echo "Invalid action specified"<br />
exit 103<br />
;;<br />
esac</p>
<p>result=$result1$result2<br />
if [ "$result" != "00" ]; then<br />
echo "DHCP-DNS Update failed: $result"<br />
logger "DHCP-DNS Update failed: $result"<br />
fi</p>
<p></code></p>
<p><code>exit $result</code></p>
<p>and here is the relevant part of my dhcpd.conf:</p>
<p><code>on commit {<br />
set noname = concat("dhcp-", binary-to-ascii(10, 8, "-", leased-address));<br />
set ClientIP = binary-to-ascii(10, 8, ".", leased-address);<br />
set ClientMac = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));<br />
set ClientName = pick-first-value(option host-name, host-decl-name, config-option host-name, noname);<br />
log(concat("Commit: IP: ", ClientIP, " Mac: ", ClientMac, " Name: ", ClientName));</code></p>
<p><code>execute("/root/dhcp-dyndns.sh", "add", ClientIP, ClientName, ClientMac);<br />
}<br />
on release {<br />
set ClientIP = binary-to-ascii(10, 8, ".", leased-address);<br />
set ClientMac = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));<br />
log(concat("Release: IP: ", ClientIP, " Mac: ", ClientMac));<br />
# cannot get a ClientName here, for some reason that always fails</code></p>
<p><code>execute("/root/dhcp-dyndns.sh", "delete", ClientIP, "", ClientMac);<br />
}<br />
on expiry {<br />
set ClientIP = binary-to-ascii(10, 8, ".", leased-address);<br />
# cannot get a ClientMac here, apparently this only works when actually receiving a packet<br />
log(concat("Expired: IP: ", ClientIP));<br />
# cannot get a ClientName here, for some reason that always fails</p>
<p></code></p>
<p><code> execute("/root/dhcp-dyndns.sh", "delete", ClientIP, "", "0");<br />
}</code></p>
<p>Figuring this all out took me several afternoons because Kerberos 5 1.8 has a bug where forwardable tickets (which is the default on Debian) are incompatible with nsupdate. Manually compiling 1.7 or getting 1.9 from the experimental Debian branch helps, as does adding the -F flag to kinit (which I did in the script above) to make the ticket non-forwardable.<br />
I filed a bug with Debian (<a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=611906" target="_blank">#611906</a>) and Sam Hartman (thanks!) helped me track it down.</p>
<p><strong>EDIT 2011-11-17:</strong><br />
I recently ran into the issue that if the AD server could not be reached, dhcpd would stall (and not respond to DHCP requests during that time) until nsupdate reached its timeout. The fix is simple: rename dhcp-dyndns.sh to dhcp-dyndns-real.sh and create dhcp-dyndns.sh with the following contents to fork off the real script into the background:<br />
<code>#!/bin/bash</p>
<p>$(dirname $0)/dhcp-dyndns.sh $@ 2>&#038;1 | logger &#038;</code></p>
<p>Also, I updated the <i>on commit</i> section in the dhcpd.conf excerpt above to compose a fallback name from the IP address if the client provides no hostname. This fixes the issue that nsupdate tries to register a record based on the name and fails.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2011/02/isc-dhcpd-dynamic-dns-updates-against-secure-microsoft-dns/feed/</wfw:commentRss>
		<slash:comments>66</slash:comments>
		</item>
		<item>
		<title>Extending Active Directory for Mac OS X clients</title>
		<link>http://blog.michael.kuron-germany.de/2011/02/active-directory-mac-os-x-mcx/</link>
		<comments>http://blog.michael.kuron-germany.de/2011/02/active-directory-mac-os-x-mcx/#comments</comments>
		<pubDate>Tue, 15 Feb 2011 13:20:05 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Technical Stuff]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[active directory]]></category>
		<category><![CDATA[ad]]></category>
		<category><![CDATA[ldap]]></category>
		<category><![CDATA[mcx]]></category>
		<category><![CDATA[opendirectory]]></category>
		<category><![CDATA[windows server 2008 r2]]></category>
		<category><![CDATA[workgroup manager]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=94</guid>
		<description><![CDATA[After I wrote about building your own OpenDirectory server on Linux a while back, I decided to do the same thing on Windows Server 2008 R2. The process of extending the AD schema to include Apple classes and attributes is documented by Apple (this is the Leopard version of the document &#8211; if you don&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>After I wrote about building your own <a href="http://blog.michael.kuron-germany.de/2009/04/building-your-own-opendirectory-server-on-linux/">OpenDirectory server on Linux</a> a while back, I decided to do the same thing on Windows Server 2008 R2. The process of extending the AD schema to include Apple classes and attributes is <a href="http://images.apple.com/business/solutions/it/docs/Modifying_the_Active_Directory_Schema.pdf">documented by Apple</a> (this is the Leopard version of the document &#8211; if you don&#8217;t plan on having exclusively Snow Leopard clients, you can follow the <a href="http://images.apple.com/business/solutions/it/docs/L407117B-US_Mod_AD_Schema_Support_Macs_WP-4.pdf">newer version</a> of the document that skips a couple of things that Snow Leopard no longer needs).</p>
<p>But since schema extensions are generally frowned upon in the Windows world because they&#8217;re irreversible (why the heck, Microsoft&#8230;?), I initially tried a dual-directory (golden triangle, magic triangle) type approach where I&#8217;d be augmenting my AD with Apple records coming from an AD LDS (Active Directory Lightweight Directory Services, previously called ADAM, Active Directory User Mode, which is basically a plain LDAP server from Microsoft). While this may sound like a great idea, I just couldn&#8217;t get it to work. After dozens of manual schema extensions to AD LDS (Microsoft doesn&#8217;t include many standard LDAP attributes, so I had to dig through the dependencies of apple.schema and even tried importing a complete OD schema), I gave up because I could not get Workgroup Manager to authenticate against it to allow me to make changes.</p>
<p>So the next thing to do was follow Apple&#8217;s AD schema extension guide (linked above) and do what everybody else did. This was rather straight-forward (managed preferences for users, groups and computers worked right away), but when I tried to create a computer list (which is not possible using Snow Leopard&#8217;s Server Admin Tools, but requires Tiger&#8217;s (which throw loads of errors on Snow Leopard but still get the job done) since Leopard introduced computer groups which however are not supported by the AD plugin), it just said I didn&#8217;t have permission to do that. After enabling DirectoryService debug logging (<em>killall -USR1 DirectoryService &amp;&amp; killall -USR2 DirectoryService</em>), I traced it down to <em>Active Directory: Add record CN=Untitled_1,CN=Mac OS X,DC=xxx,DC=zz with FAILED &#8211; LDAP Error 19</em> in /Library/Logs/DirectoryService/*. Apparently, that&#8217;s caused by some versions of ADSchemaAnalyzer setting <em>objectClassCategory</em> to 0 instead of 1 on all exported classes. Too bad AD schema extensions are irreversible and that&#8217;s one of the attributes you can&#8217;t change later on&#8230; <img src='http://blog.michael.kuron-germany.de/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  Well, with AD Schema Management MMC snap-in, I was able to rename the botched apple-computer-list class, defunct it and add a new one using ldifde. With some really wild hacking in the AD Schema using ADSI Editor, I was then able to  eventually get OS X to no longer look at the renamed attribute, but instead at the new one. To see whether you have been successful, <em>killall DirectoryService</em>, wait a few seconds and <em>grep -H computer-list /Library/Preferences/DirectoryService/ActiveDirectory*</em> will show a line indicating which class in the schema it&#8217;s using.</p>
<p>Once you&#8217;re there, everything should work as expected. If you don&#8217;t want to use Tiger&#8217;s Workgroup Manager to create old-style computer lists, you can do that in ADSI Editor and create <em>apple-computer-list</em> objects in the <em>CN=Mac OS X</em> branch by hand.</p>
<p>So, attached is the schema ldif that&#8217;s exactly the way it should be. I really wonder why Apple doesn&#8217;t provide it themselves &#8211; it&#8217;s going to turn out exactly like that every time you follow their guide on any Windows server&#8230; <a href="http://blog.michael.kuron-germany.de/wp-content/uploads/2011/02/mods.ldif_.txt">Apple Schema for Active Directory</a></p>
<p>I guess that the overall conclusion of this should be that AD schema extensions in general and specifically Mac OS X managed clients in AD environments are a nasty hack. I suppose the dual directory/magic triangle/golden triangle approach with a Microsoft AD and an Apple OD would work, but it requires maintaining two separate directories, which may not be that great in a larger environment either.</p>
<p>If Apple discontinues Mac OS X Server at some point in the near future (which the demise of the Xserve and the lack of announcements regarding Mac OS X 10.7 Server alongside Mac OS X Lion suggest), this is definitely something they need to improve. There are some third-party solutions that store MCX settings outside of AD (similar to Windows GPOs, which are stored on the SYSVOL share) such <a href="http://www.thursby.com/products/admitmac.html">Thursby ADmitMac</a> &#8211; however that&#8217;s a rather expensive solution (a dozen client licenses costs about as much as two Mac mini servers) and might break after OS updates (though from what I&#8217;ve heard, they&#8217;re rather quick at providing updates). If Apple does discontinue Mac OS X Server, they should definitely improve Lion&#8217;s AD integration to replicate ADmitMac&#8217;s features.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2011/02/active-directory-mac-os-x-mcx/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
		</item>
		<item>
		<title>HTML to ePub using Sigil</title>
		<link>http://blog.michael.kuron-germany.de/2010/12/html-to-epub-using-sigil/</link>
		<comments>http://blog.michael.kuron-germany.de/2010/12/html-to-epub-using-sigil/#comments</comments>
		<pubDate>Sun, 26 Dec 2010 22:11:19 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[ebooks]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[applescript]]></category>
		<category><![CDATA[calibre]]></category>
		<category><![CDATA[epub]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sigil]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=87</guid>
		<description><![CDATA[I was looking for a way to convert HTML books into an ePub file. The general layout of the file should be preserved (including images), while all the stuff that doesn&#8217;t make sense on an ebook reader (such as navigation elements and the usual &#8220;back to top&#8221; links) should be removed. After trying Calibre rather [...]]]></description>
			<content:encoded><![CDATA[<p>I was looking for a way to convert HTML books into an ePub file. The general layout of the file should be preserved (including images), while all the stuff that doesn&#8217;t make sense on an ebook reader (such as navigation elements and the usual &#8220;back to top&#8221; links) should be removed.</p>
<p>After trying <a href="http://calibre-ebook.com/" target="_blank">Calibre</a> rather extensively, I came across an app named <a href="http://code.google.com/p/sigil/" target="_blank">Sigil</a>, which does exactly what I want: You just throw in your HTML files (it automatically imports images referenced by them) and add some metadata.</p>
<p>Before proceeding, you should use your favorite scripting language (or modify the attached quick-and-dirty <a href="http://blog.michael.kuron-germany.de/wp-content/uploads/2010/12/clean-html.php_.txt">PHP script</a>) to remove everything but the main part of the chapter from the HTML files. (Make sure to remove any tables or divs surrounding the entire content because that might break page-by-page navigation on your ebook reader).</p>
<p>Sigil works very smooth if your HTML files are in alphabetical order. If they&#8217;re not, don&#8217;t despair: take the index.html file that (hopefully) came with them and us your favorite scripting language (or modify the attached quick-and-dirty <a href="http://blog.michael.kuron-germany.de/wp-content/uploads/2010/12/clean-html.php_.txt">PHP script</a>) to grab all the links from it (be sure to remove anchors and duplicates) and generate an XML structure like <code>&lt;spine toc="ncx"&gt;<br />
&lt;itemref idref="file1.html" /&gt;<br />
&lt;itemref idref="file2.html" /&gt;<br />
&lt;/spine&gt;</code>. Manually replace the <code>spine</code> section in the content.opf file inside the generated ePub with the lines you just created. Then re-open the ePub in Sigil and check whether it found any HTML files you forgot to include (they will show up at the top of the file list) &#8211; if there are any, move them to the place where you want them.</p>
<p>Once you have everything the way you want it, check the auto-generated table of contents using the TOC Editor option. Chances are that you have everything in there duplicated if the links in your index.html file are recognized as chapter headlines. In that case, just uncheck those (if you don&#8217;t feel like unchecking 500 items, I&#8217;ve <a href="http://blog.michael.kuron-germany.de/wp-content/uploads/2010/12/uncheck.applescript.txt">attached an AppleScript</a> to do that, just select the bottom-most line you want unchecked and adjust the number of lines inside the script).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2010/12/html-to-epub-using-sigil/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iOS 4.1: Undocumented VPN API, used by Cisco AnyConnect</title>
		<link>http://blog.michael.kuron-germany.de/2010/09/ios-4-1-undocumented-vpn-api-used-by-cisco-anyconnect/</link>
		<comments>http://blog.michael.kuron-germany.de/2010/09/ios-4-1-undocumented-vpn-api-used-by-cisco-anyconnect/#comments</comments>
		<pubDate>Sat, 25 Sep 2010 13:30:55 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=72</guid>
		<description><![CDATA[A few days ago, Cisco AnyConnect was admitted to the App Store. This was mentioned by a few blogs, but they didn&#8217;t seem to notice the relevance of it. AnyConnect is an enterprise SSL VPN technology by Cisco, so this may not seem relevant to all that many people at first sight. However, in order [...]]]></description>
			<content:encoded><![CDATA[<p>A few days ago, <a href="http://itunes.apple.com/app/cisco-anyconnect/id392790924">Cisco AnyConnect</a> was admitted to the App Store. This was mentioned by a few blogs, but they didn&#8217;t seem to notice the relevance of it. AnyConnect is an enterprise SSL VPN technology by Cisco, so this may not seem relevant to all that many people at first sight.<br />
However, in order to implement a VPN client to provide VPN connectivity for other apps, you need to hook into the operating system&#8217;s network stack. On the iOS App Store, everybody knows that Apple is rather strict on what a developer can do &#8212; hooking into the OS kernel and providing network functionality to other apps isn&#8217;t something they provide APIs for (and therefore don&#8217;t allow).</p>
<p>Wondering how Cisco got around these App Store limitations, I took a closer look at the AnyConnect app. Upon first starting it, it asks whether you want to let it &#8220;extend&#8230; the Virtual Private Network (VPN) capabilities of your device&#8221;.<br />
<div id="attachment_73" class="wp-caption alignnone" style="width: 210px"><a href="http://blog.michael.kuron-germany.de/wp-content/uploads/2010/09/IMG_0127.png"><img src="http://blog.michael.kuron-germany.de/wp-content/uploads/2010/09/IMG_0127-200x300.png" alt="" title="Cisco AnyConnect app" width="200" height="300" class="size-medium wp-image-73" /></a><p class="wp-caption-text">Cisco AnyConnect Secure Mobility Client extends the Virtual Private Network (VPN) capabilities of your device. Do you want to enable this software? Don't Allow / OK</p></div><br />
After entering a VPN server name etc., I switched over to the Settings app and noticed that the newly created AnyConnect VPN showed up as a system-wide VPN (though if you try to edit it from there, it&#8217;ll just say that you should use the AnyConnect app instead).<br />
<div id="attachment_79" class="wp-caption alignnone" style="width: 210px"><a href="http://blog.michael.kuron-germany.de/wp-content/uploads/2010/09/IMG_0128.png"><img src="http://blog.michael.kuron-germany.de/wp-content/uploads/2010/09/IMG_0128-200x300.png" alt="" title="VPN settings" width="200" height="300" class="size-medium wp-image-79" /></a><p class="wp-caption-text">To configure the settings for ....., use the app provided by Cisco.</p></div></p>
<p>Odd, how would an app be able to do any of this if it&#8217;s not allowed to get involved with iOS deeper than the App Store guidelines would allow? </p>
<p>Moving on and digging deeper into the .ipa bundle:</p>
<p>The Payload contains <em>AnyConnectDataAgent.<b>vpnplugin</b></em>, in addition to the <em>AnyConnect.app</em>:<br />
<div id="attachment_76" class="wp-caption alignnone" style="width: 254px"><a href="http://blog.michael.kuron-germany.de/wp-content/uploads/2010/09/Screen-shot-2010-09-25-at-15.13.06.png"><img src="http://blog.michael.kuron-germany.de/wp-content/uploads/2010/09/Screen-shot-2010-09-25-at-15.13.06-244x300.png" alt="" title="AnyConnect 2.4.3032.ipa" width="244" height="300" class="size-medium wp-image-76" /></a><p class="wp-caption-text">AnyConnectDataAgent.vpnplugin</p></div></p>
<p><em>AnyConnect.app</em>&#8216;s <em>Entitlements.plist</em> contains an entitlement named <b>com.apple.networking.vpn.configuration</b>:<br />
<div id="attachment_77" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.michael.kuron-germany.de/wp-content/uploads/2010/09/Screen-shot-2010-09-25-at-14.54.17.png"><img src="http://blog.michael.kuron-germany.de/wp-content/uploads/2010/09/Screen-shot-2010-09-25-at-14.54.17-300x178.png" alt="" title="AnyConnect.app&#039;s Entitlements.plist" width="300" height="178" class="size-medium wp-image-77" /></a><p class="wp-caption-text">com.apple.networking.vpn.configuration</p></div></p>
<p>Neither vpnplugin bundles nor the com.apple.networking.vpn.configuration entitlement are documented anywhere (at least not in a way that can be found through Google). Since this appears to be a special iOS API created by Apple specifically for Cisco, the question is whether it&#8217;s also open to other developers. The only other app I&#8217;ve found that uses it is <a href="http://itunes.apple.com/app/junos-pulse/id381348546">Juniper Junos Pulse</a>, which was posted a few weeks before the AnyConnect app. Since both Junos Pulse and AnyConnect have in common that they require iOS 4.1, I think it&#8217;s safe to assume that 4.1 introduced the API they use.<br />
Personally, I&#8217;d be interested to see an OpenVPN client for the iPhone. I&#8217;m not sure whether that will ever happen though if this VPN API only exits semi-officially, especially since OpenVPN is not backed by a big company like Cisco or Juniper.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2010/09/ios-4-1-undocumented-vpn-api-used-by-cisco-anyconnect/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>3rd party Exchange ActiveSync servers</title>
		<link>http://blog.michael.kuron-germany.de/2010/04/3rd-party-exchange-activesync-servers/</link>
		<comments>http://blog.michael.kuron-germany.de/2010/04/3rd-party-exchange-activesync-servers/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 10:02:35 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[eas]]></category>
		<category><![CDATA[exchange activesync]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=61</guid>
		<description><![CDATA[I&#8217;ve recently been looking for a comprehensive list of mail/groupware servers/services that offer Exchange ActiveSync integration, e.g. for the iPhone or Windows Mobile. Since I couldn&#8217;t find one, I&#8217;m putting together a list myself. (I&#8217;m not including Microsoft Exchange Server and all those Hosted Exchange solutions, since they&#8217;re pretty obvioius choices.) Services: Google Mail using [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently been looking for a comprehensive list of mail/groupware servers/services that offer Exchange ActiveSync integration, e.g. for the iPhone or Windows Mobile. Since I couldn&#8217;t find one, I&#8217;m putting together a list myself. (I&#8217;m not including Microsoft Exchange Server and all those Hosted Exchange solutions, since they&#8217;re pretty obvioius choices.)</p>
<p><strong>Services:</strong><br />
<a href="http://mail.google.com">Google Mail</a> using <a href="http://www.google.com/mobile/sync/">Google Sync</a>: Gmail (free) or own domain (free for <a href="http://www.google.com/apps/intl/en/group/index.html">up to 50 users</a>)<br />
coming in June: <a href="http://arstechnica.com/microsoft/news/2010/04/activesync-ssl-coming-to-hotmail.ars">Hotmail</a><br />
<a href="https://www.nuevasync.com/">NuevaSync Premium</a>: works with any IMAP mail server ($25/year)</p>
<p><strong>Server software:</strong><br />
<a href="http://www.kerio.com/connect">Kerio Connect</a>&#8216;s <a href="http://www.kerio.com/connect/wireless/activesync">ActiveSync Support</a> ($540 for 5 users)<br />
<a href="http://www.open-xchange.com/">Open-Xchange</a> using <a href="http://www.open-xchange.com/en/mobility-solutions-en">OXtender for Business Mobility</a>: ($21.75 / 14.50€ per user)<br />
<a href="https://www.scalix.com/">Scalix</a> using <a href="http://www.scalix.com/enterprise/products/activesync.php">Scalix ActiveSync</a>: ($299 for 10 users)<br />
<a href="http://www.zimbra.com">Zimbra Collaboration Suite</a> using <a href="http://www.zimbra.com/products/mobile_smartphone.html">Zimbra Mobile for Smartphones</a>: ($25/$35 per user per year + $500/$1000 per year)</p>
<p><a href="http://z-push.sourceforge.net/soswp/index.php?pages_id=1&#038;t=home">Z-Push</a> (free, appears to with any IMAP server)</p>
<p>If you know any others, please go ahead and add them to the comments, and I&#8217;ll add them to this list.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2010/04/3rd-party-exchange-activesync-servers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beejive Transcript Importer for Adium</title>
		<link>http://blog.michael.kuron-germany.de/2010/02/beejive-transcripts-to-adium/</link>
		<comments>http://blog.michael.kuron-germany.de/2010/02/beejive-transcripts-to-adium/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 14:50:54 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[adium]]></category>
		<category><![CDATA[beejive]]></category>
		<category><![CDATA[chat]]></category>
		<category><![CDATA[im]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=53</guid>
		<description><![CDATA[A few months ago, I wrote a quick and dirty script that goes through iTunes&#8217; iPhone backup, searches for Beejive&#8217;s data and converts it to Adium-compatible chat logs. It even imports files and pictures. It does not support timezones and daylight savings time, but other than that, it does a good job. I was initially [...]]]></description>
			<content:encoded><![CDATA[<p>A few months ago, I wrote a quick and dirty script that goes through iTunes&#8217; iPhone backup, searches for Beejive&#8217;s data and converts it to Adium-compatible chat logs. It even imports files and pictures. It does not support timezones and daylight savings time, but other than that, it does a good job. I was initially planning for writing a converter to iChat log format, but iChat&#8217;s transcripts basically consists of serialized data stored in plists and is undocumented, so it would be very difficult to implement iChat&#8217;s transcript format.</p>
<p>You may download it <a href="http://blog.michael.kuron-germany.de/wp-content/uploads/2010/02/beejive_importer.php.command">here</a>. If you find a bug, please do let me know in the comments, but don&#8217;t expect I&#8217;ll fix it anytime soon <img src='http://blog.michael.kuron-germany.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  .</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2010/02/beejive-transcripts-to-adium/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Slim down Final Cut Studio&#8217;s Media Content using HFS Compression</title>
		<link>http://blog.michael.kuron-germany.de/2009/12/hfs-compression-for-final-cut-studio/</link>
		<comments>http://blog.michael.kuron-germany.de/2009/12/hfs-compression-for-final-cut-studio/#comments</comments>
		<pubDate>Sat, 26 Dec 2009 16:39:25 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[Final Cut Studio]]></category>
		<category><![CDATA[iLife]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Technical Stuff]]></category>
		<category><![CDATA[compression]]></category>
		<category><![CDATA[fcs]]></category>
		<category><![CDATA[hfs+]]></category>
		<category><![CDATA[snow leopard]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=48</guid>
		<description><![CDATA[A full installation of Final Cut Studio 3 with all media content (for Motion, DVD Studio Pro, and Soundtrack Pro Loops) takes up around 40-50 GB of hard drive space. How about regaining 5-10 GB of precious by enabling HFS compression for these folders? Since HFS compression is completely transparent, there are no adverse effects [...]]]></description>
			<content:encoded><![CDATA[<p>A full installation of Final Cut Studio 3 with all media content (for Motion, DVD Studio Pro, and Soundtrack Pro Loops) takes up around 40-50 GB of hard drive space.<br />
How about regaining 5-10 GB of precious by enabling <a href="http://arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars/3">HFS compression</a> for these folders? Since HFS compression is completely transparent, there are no adverse effects to expect (other than browsing the content libraries being almost unnoticeably slower).</p>
<p>To start, you&#8217;ll need a command-line tool called <a href="http://web.me.com/brkirch/brkirchs_Software/afsctool/afsctool.html">afsctool</a> which can compress (and, amongst other features, decompress) folders using HFS compression. The command you&#8217;ll need to run is e.g. <strong><em>sudo afsctool -c -l -k -v -i -9 /Library/Application\ Support/Final\ Cut\ Studio</em><span style="font-weight: normal;">. This compresses all files the given folder using the highest possible compression, verifies its results, prints out the names of files it is unable to compress, and outputs statistics once it&#8217;s done.</span></strong></p>
<p><strong><span style="font-weight: normal;">Some of the folders I compressed:<br />
/Library/Application Support/Final Cut Studio/ (contains Motion and DVD Studio Pro templates): 22.5% compression savings<br />
/Library/Application Support/LiveType/ (contains Motion&#8217;s LiveType fonts): 11.4% compression savings<br />
/Library/Application Support/GarageBand/ (contains GarageBand&#8217;s  instruments and learning-to-play stuff): 14.3% compression savings<br />
/Library/Application Support/iDVD/ (contains iDVD&#8217;s themes): 19.5% compression savings<br />
/Library/Audio/Apple Loops/ (contains GarageBand&#8217;s and Soundtrack Pro&#8217;s loops): 4.1%<br />
/Library/Audio/Impulse Responses/ (contains  Soundtrack Pro&#8217;s impulse response data): 41.3% compression savings</span></strong></p>
<p><strong><span style="font-weight: normal;">Looking at the compression savings: everything that contains high-quality video can be compressed by around 20%, while audio which is already heavily compressed only yields around 5%. The most amazing result though are the 40% by which the Impulse Responsed were compressed &#8211; apparently, these are uncompressed AIFF audio files and thus ideal for compression.</span></strong></p>
<p><strong><span style="font-weight: normal;">Obviously, your mileage may vary and I&#8217;m not responsible if you compress too much and break your system (I&#8217;m sure there is a reason why Apple didn&#8217;t compress all system files). However, compressing the iLife and Final Cut Studio media content appears safe, I haven&#8217;t noticed any unwanted side-effects and it seems well worth trying if you&#8217;d like to regain a few gigabytes.</span></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2009/12/hfs-compression-for-final-cut-studio/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Laptop Theft Tracking Software for Mac OS X</title>
		<link>http://blog.michael.kuron-germany.de/2009/08/laptop-thaft-tracker/</link>
		<comments>http://blog.michael.kuron-germany.de/2009/08/laptop-thaft-tracker/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 10:44:23 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[ltt]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=40</guid>
		<description><![CDATA[Over the past 2.5 years or so, I&#8217;ve been developing a piece of software that allows tracking a stolen Mac laptop (works for Desktops too, though they are obviously less likely to get stolen). Once installed on your Mac, it starts contacting my server in regular intervals to check whether it has been armed through [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past 2.5 years or so, I&#8217;ve been developing a piece of software that allows tracking a stolen Mac laptop (works for Desktops too, though they are obviously less likely to get stolen).<br />
Once installed on your Mac, it starts contacting my server in regular intervals to check whether it has been armed through a Web GUI. If it is armed, it starts sending screenshots and iSight captures, as well as network information like internal and external IP and available wireless networks, which you can then provide to the police in order to aid recovery of your Mac. So in that regard, it is very similar to software like e.g. <a href="http://www.orbicule.com/undercover/mac/">Orbicule&#8217;s Undercover</a>.</p>
<p>After 3 major releases of LTT and beta testing on close to 200 computers, I can now say that version 3.0.4 is very stable and runs well on both Tiger and Leopard, has no known bugs and is ready for widespread use. My current server setup can (theoretically) handle around 10000 simultaneously active clients. If you&#8217;re interested in testing it or if you would like to give your Mac some additional theft protection, please contact me so that I can set you up with an account to use the service.</p>
<p><strong>Frequently Asked Questions</strong></p>
<p>How secure is LTT?<br />
All communication is done over an SSL-encrypted connection, so it is protected from being spied on and not prone to things like ARP spoofing or DNS poisoning.</p>
<p>How do you prevent unauthorized access to my LTT account, which could potentially be used for spying?<br />
As long as you keep your password secret, there is not a whole lot you need to worry about. However, if somebody were to break into my server, I obviously can&#8217;t guarantee for it <img src='http://blog.michael.kuron-germany.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  .</p>
<p>Why am I not receiving screenshots?<br />
If the screen is asleep, screenshots are apparently not possible &#8211; this is not a bug in my software, it&#8217;s probably due to the way Apple implemented WindowServer.</p>
<p>Why am I not receiving iSight captures?<br />
Either  the camera is in use by a different program or the laptop is being operated with the clamshell closed.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2009/08/laptop-thaft-tracker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>USB to SATA/IDE adapter</title>
		<link>http://blog.michael.kuron-germany.de/2009/04/usb-to-sata-ide-adapter/</link>
		<comments>http://blog.michael.kuron-germany.de/2009/04/usb-to-sata-ide-adapter/#comments</comments>
		<pubDate>Sun, 05 Apr 2009 16:00:53 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[Hardware + Gadgets]]></category>
		<category><![CDATA[hard drive]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[sata]]></category>
		<category><![CDATA[usb]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=14</guid>
		<description><![CDATA[If you often find yourself needing to temporarily connect bare hard drives (2.5&#8243;, 3.5&#8243; or 5.25&#8243;) to your computer, a USB to SATA/IDE adapter is a nice investment. A while ago, I bought the Sharkoon DriveLink. The nice thing about it is that it can run 2.5&#8243; hard drives without the power brick. However, it [...]]]></description>
			<content:encoded><![CDATA[<p>If you often find yourself needing to temporarily connect bare hard drives (2.5&#8243;, 3.5&#8243; or 5.25&#8243;) to your computer, a USB to SATA/IDE adapter is a nice investment.</p>
<p>A while ago, I bought the <a href="http://www.sharkoon.com/html/produkte/externe_gehaeuse/drive_link/index_en.html"><strong>Sharkoon DriveLink</strong></a>. The nice thing about it is that it can run 2.5&#8243; hard drives without the power brick. However, it would randomly disappear from the computer, interrupting any file transfers that may have been in progress. I returned it and got a replacement unit that showed the exact same behavior, so I returned it for a refund.</p>
<p>Instead, I bought the <a href="http://www.scythe-usa.com/product/acc/013/scupc1000.html"><strong>Scythe Kama Connect 2</strong></a>. So far, it&#8217;s been working like a charm.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2009/04/usb-to-sata-ide-adapter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building your own OpenDirectory server on Linux</title>
		<link>http://blog.michael.kuron-germany.de/2009/04/building-your-own-opendirectory-server-on-linux/</link>
		<comments>http://blog.michael.kuron-germany.de/2009/04/building-your-own-opendirectory-server-on-linux/#comments</comments>
		<pubDate>Sat, 04 Apr 2009 17:45:22 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[directory access]]></category>
		<category><![CDATA[kerberos]]></category>
		<category><![CDATA[ldap]]></category>
		<category><![CDATA[opendirectory]]></category>
		<category><![CDATA[openldap]]></category>
		<category><![CDATA[sasl]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[workgroup manager]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=16</guid>
		<description><![CDATA[OpenDirectory is a feature included with Mac OS X Server. Wouldn&#8217;t it be nice if you could use it without having to spend hundreds of dollars on a server license? Wouldn&#8217;t it be great if you could add it into your existing Linux-based OpenLDAP server? It&#8217;s actually quite easy because OpenDirectory is a standard OpenLDAP [...]]]></description>
			<content:encoded><![CDATA[<p>OpenDirectory is a feature included with Mac OS X Server. Wouldn&#8217;t it be nice if you could use it without having to spend hundreds of dollars on a server license? Wouldn&#8217;t it be great if you could add it into your existing Linux-based OpenLDAP server? It&#8217;s actually quite easy because OpenDirectory is a standard OpenLDAP server with a special Apple schema.</p>
<p><strong>0. Prerequisites</strong><br />
- OpenLDAP server with Samba integration (I&#8217;m runnig it on a Ubuntu 8.04 server, using the standard OpenLDAP and Samba packages). I won&#8217;t go into the details of how to set this up, there are lots of tutorials around the web on this.<br />
- some kind of LDAP admin tool, I used phpLDAPAdmin<br />
- Mac OS X 10.5 Leopard clients</p>
<p><strong>1. Adding the Apple schema to your OpenDirectory server</strong><br />
It is located in <em>/etc/openldap/schema/apple.schema</em> on any Mac. Copy this file to your OpenLDAP server and add it to your <em>slapd.conf</em>.<br />
You may run into the problem that <em>apple.schema</em> references some <em>samba.schema</em> entries that were deprecated with Samba 3. Specifically, these are <em>acctFlags</em>, <em>pwdLastSet</em>, <em>logonTime</em>, <em>logoffTime</em>, <em>kickoffTime</em>, <em>homeDrive</em>, <em>scriptPath</em>, <em>profilePath</em>, <em>userWorkstations</em>, <em>smbHome</em>, <em>rid</em> and <em>primaryGroupID</em>, so you&#8217;ll need to edit<em>apple.schema</em> and replace these with their Samba 3 counterparts.<br />
Now, restart the OpenLDAP daemon so it recognizes the changes.</p>
<p><strong>2. Adding some Mac-specific attributes to your LDAP server</strong><br />
Add an <em>ou=macosx</em> branch to your LDAP tree, under which you&#8217;ll need to create <em>ou=accesscontrols, ou=augments, ou=automountMap, ou=autoserversetup, ou=certificateauthorities, ou=computer_groups, ou=computer_lists, ou=computers, ou=filemakerservers, ou=locations, ou=machines, ou=maps, ou=mount, ou=neighborhoods, ou=places, ou=preset_computer_groups, ou=preset_computer_lists, ou=preset_computers, ou=preset_groups, ou=preset_users, ou=printers, </em>and<em> ou=resources</em>.<br />
To all your LDAP groups, add the <em>apple-group</em> objectClass. To all your LDAP users, add the <em>apple-user </em>objectClass.</p>
<p><strong>3. Connecting your Mac to the LDAP directory</strong><br />
On your Mac, go into Directory Access and add your LDAP server. Choose OpenDirectory as the server type and adjust the Samba mappings to match your changes from step 1. Here is a plist you can import into Directory Access that already has these mappings corrected: <a rel="attachment wp-att-18" href="http://blog.michael.kuron-germany.de/2009/04/building-your-own-opendirectory-server-on-linux/ldapv3_unix_samba3_od/">LDAPv3_Unix_Samba3_OD.plist</a>.<br />
If you want your other clients to automatically use this mapping, create a <em>cn=config</em> branch in your LDAP tree and use the <em>Write to Server</em> button in Directory Access.</p>
<p><strong>4. Use Workgroup Manager to set network home folders, managed preferences, &#8230;</strong><br />
Now, you can use Workgroup Manager to manage network home folders and managed preferences, just like you would on a Mac server.  You&#8217;ll need to authenticate using an LDAP user who has full write privileges to the directory (as set in <em>slapd.conf</em>). The standard <em>cn=admin,dc=example,dc=com</em> user will NOT work.</p>
<p><strong>5. Conclusion</strong><br />
Almost everything works, except for:<br />
- adding new users and group through Workgroup Manager<br />
- solution: unknown<br />
- assigning directory admin privileges to users through Workgroup Manager<br />
- solution: using an OpenLDAP server set up to use <em>cn=config</em> instead of <em>slapd.conf</em>. This will also require going into Directory Access again and adding the <em>OLCBDBConfig, OLCFrontEndConfig, OCGlobalConfig, OLCSchemaConfig</em> and <em>OLCOverlayDynamicID</em> record types back in (they are included in the OpenDirectory mapping, but I deleted them from mine because they only cause error messages on an OpenLDAP server with <em>slapd.conf</em> configuration).</p>
<p>Here are all the web sites that helped me in the process of figuring this out:<br />
<a href="http://docs.info.apple.com/article.html?path=ServerAdmin/10.4/en/c6od15.html ">http://docs.info.apple.com/article.html?path=ServerAdmin/10.4/en/c6od15.html</a> (this one is especially important because it explains what to do if your LDAP server is not set up for SASL authentication)<br />
<a href="http://www.emmes-world.de/mac-afp-homes.html">http://www.emmes-world.de/mac-afp-homes.html</a> (this one describes a similar setup and was my most important resource)<br />
<a href="http://rajeev.name/blog/2006/09/09/integrating-mac-os-x-into-unix-ldap-environment-with-nfs-home-directories">http://rajeev.name/blog/2006/09/09/integrating-mac-os-x-into-unix-ldap-environment-with-nfs-home-directories</a>/<br />
<a href="http://www.netmojo.ca/blog/tag/ldap/">http://www.netmojo.ca/blog/tag/ldap/</a><br />
<a href="http://www.macdevcenter.com/pub/a/mac/2003/08/26/active_directory.html?page=2">http://www.macdevcenter.com/pub/a/mac/2003/08/26/active_directory.html?page=2</a></p>
<p><strong>7. Further Information<br />
<span style="font-weight: normal;">Since you&#8217;re not using Kerberos for authentication, you may want to look at securing your LDAP connections with SSL. Here are some links that talk about it:<a href="http://www.novell.com/coolsolutions/feature/19965.html"></p>
<p>http://www.novell.com/coolsolutions/feature/19965.html</p>
<p></a><a href="http://www.afp548.com/article.php?story=20071203011158936">http://www.afp548.com/article.php?story=20071203011158936</a></span></strong></p>
<p>Someone else also wrote a blog post about <a href="http://deepport.net/archives/setting-up-a-linux-server-for-os-x-clients/">Setting up a Linux server for OS X clients</a>, in which they also describe how to incorporate Kerberos into the whole equation. That&#8217;s certainly something worth considering.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2009/04/building-your-own-opendirectory-server-on-linux/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Running Mac OS X (non-Server) in VMWare Fusion</title>
		<link>http://blog.michael.kuron-germany.de/2009/03/running-mac-os-x-non-server-in-vmware-fusion/</link>
		<comments>http://blog.michael.kuron-germany.de/2009/03/running-mac-os-x-non-server-in-vmware-fusion/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 17:07:40 +0000</pubDate>
		<dc:creator>Michael Kuron</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[10.4]]></category>
		<category><![CDATA[10.5]]></category>
		<category><![CDATA[10.6]]></category>
		<category><![CDATA[leopard]]></category>
		<category><![CDATA[mac os x]]></category>
		<category><![CDATA[snow leopard]]></category>
		<category><![CDATA[tiger]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[vmware fusion]]></category>

		<guid isPermaLink="false">http://blog.michael.kuron-germany.de/?p=11</guid>
		<description><![CDATA[VMWare Fusion supports running Mac OS X Leopard Server. But did you know that with a little hacking, you can easily run Leopard non-Server or even Tiger in VMWare Fusion 2.0? Here is how to: Patching VMWare First of all, you&#8217;ll need to patch the Mac OS X VMWare Tools ISO, replacing all occurrences of [...]]]></description>
			<content:encoded><![CDATA[<p>VMWare Fusion supports running Mac OS X Leopard Server. But did you know that with a little hacking, you can easily run Leopard non-Server or even Tiger in VMWare Fusion 2.0? Here is how to:</p>
<p><strong>Patching VMWare</strong><br />
First of all, you&#8217;ll need to patch the Mac OS X VMWare Tools ISO, replacing all occurrences of <em>ServerVersion.plist</em> with <em>SystemVersion.plist</em> inside it. This is the only thing Fusion looks at to determine whether you&#8217;re trying to run OS X Server or Client (<em>/System/Library/CoreServices/</em><em>ServerVersion.plist</em> only exists on OS X Server, while /System/Library/CoreServices/<em>SystemVersion.plist</em> exists on both). Since Fusion uses some signature checking, you&#8217;ll need to re-sign all VMWare Tools ISOs with your own certificate, otherwise Fusion will refuse to run.<br />
The German computer magazine c&#8217;t  (issue 24/2008, page 266) figured all of this out and even wrote a small tool (<a href="ftp://ftp.heise.de/pub/ct/listings/0824-266.zip">MultiMac Helper</a>) to automate the process.</p>
<p><span style="color: red;"><strong>Note</strong><br />
Before proceeding, make sure you have an appropriate license for Mac OS X. I.e., don&#8217;t install two copies if you only own one &#8212; in general, this means you need the Family Pack or an additional copy. Also, make sure that you&#8217;re allowed to virtualize your copy of OS X &#8212; in Germany that is perfectly fine as limitations imposed by the EULA are effectively not legally binding (which is the reason why the German computer magazine c&#8217;t was able to publish MultiMac Helper), but you will need to check what applies in your own country.</span></p>
<p><strong>Installing Leopard</strong><br />
Installing Leopard is very straight-forward &#8211; just pop in your Leopard retail DVD and create a new VM in Fusion (selecting <em>Mac OS X 10.5 Server 64-bit</em>). Now proceed as if you were installing Leopard Server in Fusion. After completing the installation, you can even install VMWare Tools and they&#8217;ll run just fine.</p>
<p><strong>Installing Tiger</strong><br />
Installing Tiger is a bit more difficult. Since there are no retail DVDs of Tiger for Intel (it was exclusively shipped with new Macs, and those machine-specific discs refuse to install on anything but the Mac model they came with), you cannot install it by booting it in a VM. So what you&#8217;ll need to do is: install Tiger onto an external HD and make an image of it. Then attach a second virtual hard drive to your Leopard VM and from inside the VM, clone the image to the second virtual hard drive. Now remove that virtual hard drive from your Leopard VM and attach it to your Tiger VM. It will boot up and run just fine. However, VMWare Tools will not work in Tiger and your host CPU will probably run at 100%.</p>
<p><strong>UPDATE: Installing Snow Leopard</strong><br />
Works the same as Leopard, just select <em>Mac OS X 10.6 Server 64-bit</em>.</p>
<p><strong>UPDATE: VMWare Fusion 3.0</strong><br />
Existing VMs continue running flawlessly.<br />
If you create a new VM, you need to remove <code>firmware = "efi"</code> from the VMX, or it will complain about the OS not being the server version at some point during boot. If you see the black BIOS-style screen right after powering up the VM, you&#8217;re fine. If you see a grey screen with the VMWare logo on it, the VM is set to EFI mode.</p>
<p><strong>UPDATE: VMWare Fusion 4.0</strong><br />
<a title="Running Mac OS X 10.4, 10.5, 10.6 and 10.7 in VMWare Fusion 4.0" href="http://blog.michael.kuron-germany.de/2011/09/running-mac-os-x-10-4-10-5-10-6-and-10-7-in-vmware-fusion-4-0/">Running Mac OS X 10.4, 10.5, 10.6 and 10.7 in VMWare Fusion 4.0</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michael.kuron-germany.de/2009/03/running-mac-os-x-non-server-in-vmware-fusion/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

