Sunday, May 26, 2013

It's been a while since the last post... I am still struggling with getting the arduino attached properly.  It seems to be something to do with the handling of the SetAddress command.  If I hack the kernel code so that it does not expect a status back from the arduino in response to the command then the serial port attaches and works correctly.  The problem is that the LUFA code looks absolutely fine and any changes I make break the attach on windows.  I am still digging away at this so see if I can get something working.  I don't think adding a quirk that says "don't expect status on SetAddress is really a good solution".

Last week was spent was spent fighting with crusty old software as I moved it from Solaris 2.5.1 machines onto a shiny new T4-1 running solaris 10.  The first problem I faced wasn't a crusty one, just a bug with Solaris 10, I configured up samba to write out a kerberos keytab for me with the view to using the keytab to authenticate users against an Active Directory domain using kerberos.  I had done this on a test machine and it worked fine but on the T4 I was getting an error saying that my kerberos password was wrong when I tried to do a "net ads join".  The stupid thing was I could get a kerberos ticket fine using kinit.  After a bit of thrashing about I tried a samba package that I had built myself instead of the system one and found that the join worked fine with exactly the same samba configuration file.  A trawl of the Oracle support site turned up patch 119757, version 25 fixes a bug "samba net ads join on T4 fails", sure enough, applying that patch fixed the join problem.

Then it was onto the crusty old software, all so old the people who sold it have disappeared off the face of the earth or just won't acknowledge the software ever existed.  The old hardware was E420R/E280R vintage equipment, well past retirement.  The old machines had some flexlm licence servers running on them.  I set up a couple of zones with the right hostid's on them and copied all the files over.  Then the fun began.  First, the licence managers complained about "Error:  No license for this platform." After a lot of searching around I found this is because the licence server is checking the HW_PROVIDER using systeminfo(), Oracle changed this from Sun_Microsystems to Oracle Corporation a while back, the licence server is expectng the old value and barfs when it doesn't see it.  I ended up using dtrace to check the execname for the binary callig systeminfo and returning "Sun_Microsystems" when the licence server tried doing the call.  That eliminated the platform error.  Unfortunately, that wasn't the end of it.  The licence server then started bitching that it could not create a lock file and that a vendor daemon was already running but this was a lie.  After a bunch more searching I found that the vendor daemon was performing a getdents on /, if the inode for . and .. were not the same number then it would barf.  Since I was running these programs in a zone the inode numbers did not match.  Again, dtrace to the rescue, to intercept the getdents call and if the licence binary had made the call, modify the return so that the inodes for . and .. were the same.  Once this was done the licence servers started up and ran fine.  Most of the crusty old software that relied on the licences worked ok, just one application consistently core dumped when running on Solaris 10.  Due to needing to keep a hardware emulator running which required a sbus card + associated driver we had to keep an old SparcStation 5 running 2.5.1 (this was diskless booted from the new machine) so the misbehaving application was able to be run, albeit slowly, from there.

All this would have been so much harder without dtrace and an internet to trawl for ideas...