Search This Blog

27 October 2010

In case anyone missed it... departures from Oracle...

I think this quote says it all:
Doug Lea resigns from the JCP
“I believe that the JCP is no longer a credible specification and standards body, and there is no remaining useful role for an independent advocate for the academic and research community on the EC.”
There are quite a few more as well.

08 October 2010

Update! Technology: Forecast -- increased chance of cloud...computing

I was recently interviewed by Justin Lacche, Managing Editor of  Update! regarding cloud computing.  Go have a gander :)

13 August 2010

Oracle kills OpenSolaris

I just have to wonder.  When Oracle is dead feasting on the dead Sun like a zombie; will there be anything left?  Do we even care anymore or do we move onto Life-After-Oracle by choosing a new OS platform, a new programming language, a new filesystem etc etc etc?

20 July 2010

zfs-fuse


I have recently been looking at using some low-power hardware that has Debian installed (and does not support OpenSolaris).  Combined with Oracle's demantling of Sun, I decided to test zfs-fuse.  These instructions are in no way supposed to indicate the correct or easiest way -- simply the way I managed to get it installed and tested.

  1. download the Debian Lenny installer
  2. create a new VirtualBox machine
    1. make sure to create some extra drives... so in addition to SCSI0/sda being set aside for a 20gig hard drive, I created SCSI1-SCSI5 (sdb-sdf) as 2gig drives labeled "ztest1" through "ztest5"
    2. keep track of those addition sdX names, you will need them later
  3. reboot when prompted; make sure to remove the installer CD
  4. su - root
  5. apt-get install sudo bzip2
  6. visudo
    1. uncomment the sudo group line at the bottom
  7. nano /etc/group
    1. add yourself to the sudo group
  8. apt-get install build-essential
  9. apt-get install libaio-dev libattr1-dev libacl1-dev libz-dev libfuse-dev libfuse2 scons libssl-dev
  10. exit
    1. to get back to your user
  11. mkdir work
  12. cd work
  13. wget http://zfs-fuse.net/releases/0.6.9/zfs-fuse-0.6.9.tar.bz2
  14. bunzip2 zfs-fuse-0.6.9.tar.bz2
  15. tar xvf zfs-fuse-0.6.9.tar
  16. rm zfs-fuse-0.6.9.tar
  17. cd zfs-fuse-0.6.9/src
  18. scons
  19. sudo scons install
  20. nano ~/.profile
    1. PATH="$PATH:/sbin:/usr/local/sbin"
  21. log out and back in
  22. modprobe fuse
  23. sudo nano /etc/fstab
    1. add this line:

      none /sys/fs/fuse/connections fusectl none 0 0
  24.  sudo mount -a -t fusectl
  25.  sudo zfs-fuse &
  26.  sudo zpool create rpool raidz2 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
  27. sudo zfs create rpool/data
On reboot, I had some issues (I need to write a proper boot script), but I did this to get it running again:
  1. su - root
  2. modprobe fuse
  3. mount -a -t fusectl
  4. zfs-fuse &
  5. zpool status
  6. zfs list
  7. zfs mount rpool/data
References:
http://zfs-fuse.net/
http://drwetter.org/blog/zfs_under_linux.en.html

    14 July 2010

    Slashdot: OpenSolaris Governing Board Closing Shop?

    Posted by CmdrTaco on Wednesday July 14, @11:27AM
    from the so-it-comes-to-this dept.
    echolinux writes "Frustrated by Oracle's refusal to interact with the OpenSolaris community or speak with the OpenSolaris Governing Board, the OGB has issued an ultimatum to Oracle: designate a liaison to the OGB by August 16th or the board will 'take action at the August 23 meeting to trigger the clause in the OGB charter that will return control of the community to Oracle.'"

    18 April 2010

    Galatea - A Maven/Android Archetype

    After my experience writing an archetype for Red Dwarf; I decided to do the same thing for Android.  This archetype is based on the maven-android-plugin. I'd like to thank Hugo for helping me get the configuration correct.   So let's get started.

    As before...
    F:\work>mvn archetype:generate -DarchetypeCatalog=http://kallisti.eoti.org:8081/content/repositories/snapshots/archetype-catalog.xml
    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building Maven Stub Project (No POM) 1
    [INFO] ------------------------------------------------------------------------
    [INFO]
    [INFO] --- maven-archetype-plugin:2.0-alpha-5-SNAPSHOT:generate (default-cli) @ standalone-pom ---
    [INFO] Generating project in Interactive mode
    [INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
    Choose archetype:
    1: http://kallisti.eoti.org:8081/content/repositories/snapshots/archetype-catalog.xml -> ardor3d-archetype (null)
    2: http://kallisti.eoti.org:8081/content/repositories/snapshots/archetype-catalog.xml -> kryten-archetype (null)
    3: http://kallisti.eoti.org:8081/content/repositories/snapshots/archetype-catalog.xml -> galatea-archetype (null)
    4: http://kallisti.eoti.org:8081/content/repositories/snapshots/archetype-catalog.xml -> kryten-archetype (null)
    Choose a number: : 3
    [INFO] snapshot org.eoti.galatea:galatea-archetype:1.0-SNAPSHOT: checking for updates from eoti-public
    [WARNING] *** CHECKSUM FAILED - Checksum failed on download: local = 'c4696ce0aeee29d53523e63f02230636518f8ad2'; remote = 'deb2361707aa66b51d4055be6452e818b9283be2' - RETRYING
    [WARNING] *** CHECKSUM FAILED - Checksum failed on download: local = 'c4696ce0aeee29d53523e63f02230636518f8ad2'; remote = 'deb2361707aa66b51d4055be6452e818b9283be2' - IGNORING
    Define value for property 'groupId': : org.eoti.android.test
    Define value for property 'artifactId': : TestAndroid
    Define value for property 'version':  1.0-SNAPSHOT: :
    Define value for property 'package':  org.eoti.android.test: :
    Confirm properties configuration:
    groupId: org.eoti.android.test
    artifactId: TestAndroid
    version: 1.0-SNAPSHOT
    (hit enter)
    package: org.eoti.android.test
    (hit enter)
     Y: : (hit enter)
    [WARNING] Don't override file F:\work\TestAndroid\src\main\android\res\values\strings.xml
    [WARNING] Don't override file F:\work\TestAndroid\src\main\android\res\layout\main.xml
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 1:02.860s
    [INFO] Finished at: Sun Apr 18 19:58:56 PDT 2010
    [INFO] Final Memory: 6M/11M
    [INFO] ------------------------------------------------------------------------

    F:\work> cd TestAndroid
    The resulting files:

    F:\work\TestAndroid>tree /F
    Folder PATH listing for volume WINDOWS
    Volume serial number is 9827-5E66
    F:.
    │   pom.xml

    └───src
        │   AndroidManifest.xml
        │
        └───main
            ├───android
            │   └───res
            │       ├───drawable
            │       │       icon.png
            │       │
            │       ├───layout
            │       │       main.xml
            │       │
            │       └───values
            │               strings.xml
            │
            └───java
                └───org
                    └───eoti
                        └───android
                            └───test
                                    MyActivity.java

    Make sure you have your emulator running (emulator -avd Device1, in my case):
    F:\work\TestAndroid>mvn install
    This will build, package and deploy it to your emulator.
     
    F:\work\TestAndroid>mvn clean
    In addition to cleaning your build tree, that will undeploy your app from the emulator.

    12 April 2010

    Et tu Java?

    We all know that Sun employees are dropping like flies (either by quitting or being laid off with their entire teams)...  It seems that shortly after finding out that Kohsuke quit, we find out that James Gosling has quit as well.

    Does anyone NOT fear the future of Java under Oracle's "leadership"?

    Project Darkstar, Red Dwarf, Kryten

    As you are probably aware, Project Darkstar is no more.  Owen and others have moved it over into a new project called Red Dwarf.  One of the things I noticed was that they have a maven plugin to ease quick development cycles.  I decided to spend some time this weekend getting associated with the plugin and the new project.

    I started off by redoing the original tutorial exercises from the Darkstar ServerAppTutorial and ClientTutorial.  One of the goals while doing this was to come up with a basic skeleton to get a RedDwarf project up and running quickly.  After getting each tutorial exercise running as a submodule in maven, I tweaked the pom's until I had a fairly clean approach.

    Originally I had planned on documenting those minimal steps here.  Instead, I chose to write my first maven archetype.  I'm sure there are errors and such, but as you will see below, this should give you an entry point very quickly.  (Getting the archetype catalog working in Nexus was another story because it took me a few hours to realize that you will get a 500 Server Error if you try to point to a repository group [like 'public'] instead of a specific repository [thus the long URL below]).

    Ok, let's get started.  First thing we need to do is use the archetype to create a basic structure:



    F:\work>mvn archetype:generate -DarchetypeCatalog=http://kallisti.eoti.org:8081/content/repositories/snapshots/archetype-catalog.xml
    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building Maven Stub Project (No POM) 1
    [INFO] ------------------------------------------------------------------------
    [INFO]
    [INFO] --- maven-archetype-plugin:2.0-alpha-5-SNAPSHOT:generate (default-cli) @ standalone-pom ---
    [INFO] Setting property: classpath.resource.loader.class => 'org.codehaus.plexus.velocity.ContextClassLoaderResourceLoader'.
    [INFO] Setting property: velocimacro.messages.on => 'false'.
    [INFO] Setting property: resource.loader => 'classpath'.
    [INFO] Setting property: resource.manager.logwhenfound => 'false'.
    [INFO] Generating project in Interactive mode
    [INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
    Choose archetype:
    1: http://kallisti.eoti.org:8081/content/repositories/snapshots/archetype-catalog.xml -> ardor3d-archetype (null)
    2: http://kallisti.eoti.org:8081/content/repositories/snapshots/archetype-catalog.xml -> kryten-archetype (null)
    Choose a number: : 2
    [INFO] snapshot com.example.myapp:kryten-archetype:1.0-SNAPSHOT: checking for updates from eoti-public
    [WARNING] *** CHECKSUM FAILED - Checksum failed on download: local = '218a428a68f50b483a388f7fee54d2bb1ceec981'; remote = 'f1bcef05eca9d0e230f5dc8ff1fa0b8af1e8ab53' - RETRYING
    [WARNING] *** CHECKSUM FAILED - Checksum failed on download: local = '218a428a68f50b483a388f7fee54d2bb1ceec981'; remote = 'f1bcef05eca9d0e230f5dc8ff1fa0b8af1e8ab53' - IGNORING
    Define value for property 'groupId': : org.eoti.kryten.test
    Define value for property 'artifactId': : TestApp
    Define value for property 'version':  1.0-SNAPSHOT: :
    Define value for property 'package':  org.eoti.kryten.test: :
    Confirm properties configuration:
    groupId: org.eoti.kryten.test
    artifactId: TestApp
    version: 1.0-SNAPSHOT (hit enter)
    package: org.eoti.kryten.test
    (hit enter)
     Y: : (hit enter)
    [INFO] Parent element not overwrited in F:\work\TestApp\api\pom.xml
    [INFO] Parent element not overwrited in F:\work\TestApp\client\pom.xml
    [INFO] Parent element not overwrited in F:\work\TestApp\server\pom.xml
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 25.844s
    [INFO] Finished at: Sun Apr 11 23:26:34 PDT 2010
    [INFO] Final Memory: 6M/11M
    [INFO] ------------------------------------------------------------------------
    F:\work>cd TestApp
    I have bold-faced the actual typing involved...  This will create a basic structure:
    F:\WORK\TESTAPP
    │   pom.xml

    ├───api
    │   │   pom.xml
    │   │
    │   └───src
    │       └───main
    │           └───java
    │               └───org
    │                   └───eoti
    │                       └───kryten
    │                           └───test
    │                               └───api
    │                                       MyApp.java

    ├───client
    │   │   pom.xml
    │   │
    │   └───src
    │       └───main
    │           └───java
    │               └───org
    │                   └───eoti
    │                       └───kryten
    │                           └───test
    │                               └───client
    │                                       MyClient.java

    └───server
        │   pom.xml
        │
        └───src
            └───main
                ├───java
                │   └───org
                │       └───eoti
                │           └───kryten
                │               └───test
                │                   └───server
                │                           MyServer.java
                │                           MyServerUser.java
                │
                └───resources
                    └───META-INF
                            app.properties

    As you can see, this makes a multimodule project.  The top-level pom specifies versions of libraries, repositories, etc.  The API module provides a common library to be used by both the client and server [in this case, it just converts Strings to/from ByteBuffers.  The server module is a minimalist server app and the client module is a minimalist client app (console i/o rather than swing from the tutorials).

    To get started, we first need to build it
    F:\work\TestApp>mvn clean install
    Next, we will startup a red dwarf server, deploy the app and dependencies to it, and then boot it.
    F:\work\TestApp>cd server
    F:\work\TestApp\server>mvn validate -Psgs-run
    This utilizes a maven profile (named 'sgs-run') to do all the heavy lifting via the red dwarf maven plugin.

    In another terminal, go to the client subdirectory and start the client:
    F:\work\TestApp\client>mvn validate -Pclient-run
    The client-run profile just executes the client module (executable jar) with the dependencies in the classpath.  When it starts up, it will log into the server then wait for you to type.  Every time you hit enter, it will send the text you had typed to the server.  The server will simply respond with a message telling you that it received the message.  When you are done, type 'quit' or 'exit' to stop the client.

    Once you are done and you want to stop the server, make sure to use the profile to stop it or you will have to kill it in the task manager (ie: do NOT use ctrl-c).
    F:\work\TestApp\server>mvn validate -Psgs-stop
    It will take about 1-2 minutes to shut down cleanly (in the 'sgs-run' window).

    Now that you have a basic structure that you can easily run and test, start editing the code =)

    NOTE: The URL has been changed:
    mvn archetype:generate -DarchetypeCatalog=http://repository-malachid.forge.cloudbees.com/public-snapshot/archetype-catalog.xml


    08 April 2010

    Kohsuke leaves Sun

    Kohsuke is leaving Sun to start his own business.  Good luck Kohsuke.  I'm glad you are doing your own thing rather than being cannon fodder for Oracle.

    04 April 2010

    Hudson reset on upgrade

    I realized today that Hudson was about 15 versions out of date.  I did the upgrade (pfexec pkg install hudson).  On restart, Hudson now had a blank configuration.  Don't worry - your data isn't gone. My manifest file had been modified and reimported; so now the various paths were incorrect for my system.  Fixing and reimporting (pfexec svccfg import hudson.xml) was enough to get it working again.

    24 March 2010

    Package Renaming

    I was looking at the "What's new for OpenSolaris 2010.03" and noticed the comment about "Renamed Packages"...  Things like 'SUNWgtar' were renamed to 'archiver/gnu-tar'.  So if you are having trouble finding your package; make sure to check out the list for the new name.

    19 February 2010

    cfgadm

    So I woke up the other day and the server was making a LOT of noise.  My first thought was that it was a fan going out [still think it is actually], so I tried 'fmadm faulty'.  I was hoping to see something telling me which of the 8 fans were dying.  Instead, I see that I was in the midst of a zpool failure.
    Checking 'zpool status' I was able to verify that one of the disks had died.  I'm running raid-z2, so it isn't like it was a hectic problem to solve... but I learned long ago it is better to fix it now than to wait until a couple more die.

    Normally, you would have to go buy a replacement disk.  Luckily for me, this Asus box never did recognize the last 3 drive bays.  Counting across (there are 10 hot-swap SATAII drives -- want to make sure to pop the right one) I took a guess which one was failing and which ones were not currently in use.  Luckily I was right.

    Now, the "new" drive already had data on it because it used to be part of the root mirror before I upgraded them to larger drives.  That being said, I was a little confused when the new drive wasn't being recognized.

    I found this page which helped dramatically.  'cfgadm' showed that drive '6/0' was not configured.  I ran 'cfgadm -c configure sata6/0'.  It now showed up, but it said it was 'unavail' and 'corrupted data'.  'zpool online' didn't work because of those errors.  Finally, I managed to get it to start working with 'zpool replace -f data c6t0d0'.  It took quite awhile for it to finally finish. 'fmadm faulty' still showed the fault but I was able to fix that with the zpool clear that it recommended.

    I'm thinking I should hook up one of my woot-off lights to flash whenever fmadm faulty shows a failure...

    09 February 2010

    GXT: BorderLayout inside TabPanel

    I had originally posted a bug in the GXT premium forum about BorderLayout not working inside a TabPanel.  To prove the point, I took the demo code directly from the site and put it verbatim inside a tab.

    Since the post never showed up in the forum, I can't answer it myself so others know how to fix the problem... so it'll go here.

    The BorderLayout code does the following:
    Size size = target.getStyleSize();
    int h = size.height;
    b.y = h - totalHeight + m.top;

    Normally this would be fine.  However, when embedded within the TabPanel, I had used the following line from the Tab demo:

    setAutoHeight(true);
    This is actually what was causing the problem.  With this set to true, the surrounding div didn't have an explicit height set and so was setting the y coordinate of the South region to 0-188+10.  Removing that one line caused everything to layout as expected.

    05 February 2010

    Oracle Kills Off Project Darkstar

    Well, as we all expected, Oracle is not taking any time in ruining the Java platform.  The latest on the chopping block? Project Darkstar.  There goes at least 3 projects I had planned.

    04 January 2010

    Zones getting out of sync

    The other day, I started an update and walked away. I noticed today it was done, so I zfs snapshotted the zones and xvm sessions then rebooted.

    Upon bootup, everything seemed OK until I tried to access the web pages on one of the zones. Checking svcs -xv, I saw that the local filesystem was down! That's not good!

    While troubleshooting, it occurred to me that the global is reporting snv_130 and zlogin to a zone is reporting snv_101a. Oops. Just a little outdated.

    I looked around for how to get them into sync, and ran across this article.

    The solution is actually quite simple.  It takes *forever* so I really wish I would have checked the time for you before I started.  The basic jist of it is:

    # pfexec zoneadm -z MYZONE halt
    # pfexec zoneadm -z MYZONE detach
    # pfexec zoneadm -z MYZONE attach -u

    At first, I forgot the '-u' and it came back and told me it was out of sync and reminded me to try again with -u.


    root@serveris:~# zoneadm -z eoti.org attach -u

    Log File: /var/tmp/eoti.org.attach_log.voaWef
    Attaching...

           Global zone version: entire@0.5.11,5.11-0.130:20091219T044839Z
       Non-Global zone version: entire@0.5.11,5.11-0.101:20081204T010954Z
               Publisher Check: Zone preferred publisher does not contain
                                entire@0.5.11,5.11-0.130:20091219T044839Z.
               Publisher Reset: Copying preferred publisher from global zone.
      Updating non-global zone: (Stage 1).  Output follows
    Creating Plan                
    ERROR: Could not update attaching zone

    Oops, now what?  At first I started looking online at things like Bug 13190... Then I realized I was missing the obvious...
    Log File: /var/tmp/eoti.org.attach_log.voaWef
    hmm, ok, so what does it say?

    root@serveris:~# cat /var/tmp/eoti.org.attach_log.voaWef

    [Monday, January  4, 2010  8:08:03 PM PST] Log File: /var/tmp/eoti.org.attach_log.voaWef
    [Monday, January  4, 2010  8:08:07 PM PST] Attaching...
    [Monday, January  4, 2010  8:08:07 PM PST] existing
    [Monday, January  4, 2010  8:08:07 PM PST]
    [Monday, January  4, 2010  8:08:07 PM PST]   Sanity Check: Passed.  Looks like an OpenSolaris system.

    Unable to retrieve package data for publisher 'os-dev' from one
    of the following origin(s):

    http://pkg.opensolaris.org/dev/

    The catalog retrieved from one of the origin(s) listed above only
    contains package data for: opensolaris.org.

    To resolve this issue, correct the origin information provided for
    publisher 'os-dev' using the pkg set-publisher subcommand, or re-add
    the publisher using the correct name and remove the 'os-dev'
    publisher.

    To re-add this publisher with the correct name, execute the following
    commands as a privileged user:

    pkg set-publisher -P -g http://pkg.opensolaris.org/dev/ opensolaris.org
    pkg unset-publisher os-dev


    Unable to retrieve package data for publisher 'os-dev' from one
    of the following origin(s):

    http://pkg.opensolaris.org/dev/

    The catalog retrieved from one of the origin(s) listed above only
    contains package data for: opensolaris.org.

    To resolve this issue, correct the origin information provided for
    publisher 'os-dev' using the pkg set-publisher subcommand, or re-add
    the publisher using the correct name and remove the 'os-dev'
    publisher.

    To re-add this publisher with the correct name, execute the following
    commands as a privileged user:

    pkg set-publisher -P -g http://pkg.opensolaris.org/dev/ opensolaris.org
    pkg unset-publisher os-dev


    pkg: The following pattern(s) did not match any packages in the current catalog.
    Try relaxing the pattern, refreshing and/or examining the catalogs:
        entire@0.5.11,5.11-0.130:20091219T044839Z

    This may seem odd to most of you... but I had the default opensolaris package repository AND the dev repository setup at one point; so it was getting confused.  I followed the instructions (the pkg set-publisher and pkg unset-publisher) then retried the attach...

    root@serveris:~# zoneadm -z eoti.org attach -u

    Log File: /var/tmp/eoti.org.attach_log.4kaGTg
    Attaching...

           Global zone version: entire@0.5.11,5.11-0.130:20091219T044839Z
       Non-Global zone version: entire@0.5.11,5.11-0.101:20081204T010954Z
               Publisher Check: Zone preferred publisher does not contain
                                entire@0.5.11,5.11-0.130:20091219T044839Z.
               Publisher Reset: Copying preferred publisher from global zone.
      Updating non-global zone: (Stage 1).  Output follows
    DOWNLOAD                                  PKGS       FILES    XFER (MB)
    Completed                              121/121 19959/19959  125.0/125.0

    PHASE                                        ACTIONS
    Removal Phase                              5811/5811
    Install Phase                            15876/15876
    Update Phase                             12076/12076
    PHASE                                          ITEMS
    Indexing Packages                            122/122
      Updating non-global zone: (Stage 2).  Output follows
    No updates necessary for this image.  
      Updating non-global zone: Zone updated to entire@0.5.11,5.11-0.130:20091219T044839Z
    Attach complete.
    Yay!