Kevin Kempf's Blog

March 9, 2015

R12.2 Apache won’t start up

Filed under: Linux, Oracle Linux, R12.2, Weblogic — kkempf @ 9:45 am

magnifying-glass-clipart-biy5E46iL

Mondays

I had to bounce my R12.2 non-production front end this weekend to switch kernels around.  I restarted services, but admit I didn’t pay much attention to them as it wasn’t PROD.  We run multiple instances of R12.2 on different port pools but on one host (well 2, one for the databases, one for the application servers). We do this not because I like it, but because we don’t have infinite budgets.  Regardless, I get a complaint that our audit environment isn’t working.  Sure enough, the login is unavailable, and Weblogic says the web tier process EBS_web_AUDIT is down.

Identify the problem: To the command line!

I try to simply start it in Weblogic but it errors out, and there’s far too many log links to click for this admin to stay in a GUI.   I run adapcctl.sh start and get:

You are running adapcctl.sh version 120.0.12020000.6

Starting OPMN managed Oracle HTTP Server (OHS) instance …

adapcctl.sh: exiting with status 204

Follow the bouncing ball

adapcctl.sh tells me to check my log file: $INST_TOP/logs/appl/admin/log/adapcctl.txt, and here’s what it tells me:

ias-instance id=EBS_web_AUDIT_OHS1
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
--------------------------------------------------------------------------------
ias-component/process-type/process-set:
  EBS_web_AUDIT/OHS/OHS/

Error
--> Process (index=1,uid=1810789619,pid=11169)
  failed to start a managed process after the maximum retry limit
  Log:
  /u02/appaudit/fs1/FMW_Home/webtier/instances/EBS_web_AUDIT_OHS1/diagnostics/logs/OHS/EBS_web_AUDIT/console~OHS~1.log


03/09/15-09:52:40 :: adapcctl.sh: exiting with status 204
[2015-03-09T09:38:34.0590-04:00] [OHS] [INCIDENT_ERROR:32] [OHS-9999] [worker.c] [host_id: (myhostname).com] [host_addr: (myipaddr)] [pid: 10527] 
[tid: 140534409107264] [user: oraaudit] [VirtualHost: main] (98)Address already in use: make_sock: could not bind to address [::]:10059
[2015-03-09T09:38:34.0590-04:00] [OHS] [INCIDENT_ERROR:32] [OHS-9999] [worker.c] [host_id: (myhostname).com] [host_addr: (myipaddr)] [pid: 10527] 
[tid: 140534409107264] [user: oraaudit] [VirtualHost: main] (98)Address already in use: make_sock: could not bind to address 0.0.0.0:10059
[2015-03-09T09:38:34.0590-04:00] [OHS] [INCIDENT_ERROR:20] [OHS-9999] [worker.c] [host_id: (myhostname).com] [host_addr: (myipaddr)] [pid: 10527] 
[tid: 140534409107264] [user: oraaudit] [VirtualHost: main] no listening sockets available, shutting down
[2015-03-09T09:38:34.0591-04:00] [OHS] [ERROR:32] [OHS-9999] [core.c] [host_id: (myhostname).com] [host_addr: (myipaddr)] [pid: 10527] 
[tid: 140534409107264] [user: oraaudit] [VirtualHost: main] Unable to open logs

Closing in

So it appears that my user (oraaudit) can’t get a port it wants (10059), and after a little hunting on Google I find the right syntax. I wanted to use netstat, but I couldn’t figure out the PID and lsof made it really easy:

# lsof -i:10059
COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    13815 oratrain  305u  IPv6  82113      0t0  TCP (myhostname).com:10059->(myhostname).com:rds2 (ESTABLISHED)

Take down the suspect

It’s some random java process from another instance (Train). See ya.

# kill -9 13815
# lsof -i:10059

Restart Apache

adapcctl.sh start

You are running adapcctl.sh version 120.0.12020000.6

Starting OPMN managed Oracle HTTP Server (OHS) instance ...

adapcctl.sh: exiting with status 0

Nothing to see here

This is something most apps DBAs have seen at some time or in some form. The path to follow changes, but in the end the fix is usually similar to this. Knowing with certainty that it’s OK to kill the blocking PID is always a delicate task. There’s absolutely no way you could have fixed this from within the Weblogic admin console that I can think of, short of going into the other environment and shutting it down completely.

Advertisements

October 23, 2014

Running a shell script via concurrent request

Filed under: 11i, Linux, Mobile Supply Chain, R12.2 — kkempf @ 8:55 am

shell

The Problem

Mobile Supply Chain (MSCA) in 11i and R12 is a rather unreliable product as I discussed here.  It tends to cease working for no reason; I’ve blogged about this before so I won’t dwell on how ridiculous that is.  While I have Linux/OS cron jobs to bounce the service entirely once per day, and rotate the ports twice per day, it’s still not enough.  Invariably, the dispatcher will stop fielding connections at 2am on Sunday (2 hours after the bounce), when I get a phone call and I have to go VPN in and unscrew it.  It is in my own self-interests, then, that I set out to create a concurrent request which would cleanly kill/restart MSCA from inside the Ebusiness Suite, and the reason behind this post.  Incidentally, one added benefit of using a concurrent process is that I can leverage Oracle responsibilities and security, ensuring not just anybody can bounce the MSCA telnet server.

Nothing New Here

I suppose I’ve always known there was a host option when you defined a concurrent program, I just never knew if it worked.  I’m in a weird sort of down-time before our R12.2 go-live and find myself without much to work on for a few days, so I’m “playing” in R12.2.  There’s nothing revolutionary about this post, it’s just my goal to walk from beginning to end through the process of running a host script as a concurrent process, and provide some in depth/meaningful context as to why you’d like to do that.  In fact I’d like to acknowledge the Oracle Ebizsuite blog here which helped me understand how to go about setting this up, as well as Doc ID 1594853.1.

From the Apps to the OS

I’ll walk the setup starting within the apps.  This bit hasn’t changed any from 11i to R12.

Concurrent Program Executable

As sysadmin, define the Executable via Concurrent->Program->Executable

CP Executable

Incidentally, you need to define an application in the 3rd line; we used our custom schema.

Concurrent Program Definition

Now define the concurrent program via Concurrent->Program->Define

Incidentally, you need to define an application in the 3rd line; we used our custom schema.  The Executable in the 5th field is the one you defined in the prior step.  Note I have no parameters, but if you wanted to you could add them here.  We’ll go over how the shell sees these in a minute.

CP Define

Assign a Request Group

Go to Security->Responsibility->Request and figure out what group can run this concurrent request.  Or create a group, I suppose.

Sec Respons Request

Write Your Script

Things to know about the script

  • appsuser is the OS user who started MSCA out of $ADMIN_SCRIPTS_HOME via mwactrlwrpr.sh or the like
  • kkempf@myemail.com references: I want to know when someone runs this request, or when the dispatcher port isn’t free for some reason to restart the dispatcher (in essence, meaning the script failed)
  • System vs. User parameters: I didn’t see any way to make it cleaner than was done over here, so I pulled it in so you can see the parms
    • $0: The shell script being run
    • $1: apps/{your apps password in plain text!!!}  HINT: Don’t put this in the concurrent request, or the person who just ran this CR can see the apps password
    • $2: unsure; possibly OS PID?
    • $3: Apps userid who ran the job
    • $4: Concurrent Request ID
    • $5: First User parameter (in my case, there are none)
    • $6-$n: Additional User parameters
  • 11i vs. R12 parms: I had two versions because they moved where the port number of the individual telnet servers were between 11i and 12 so awk changed slightly to get the right spot
    •     #DTL=`ps -fu appsuser|grep telnet|grep -v "grep"|awk '{print $15}'`   # 11i
          DTL=`ps -fu appsuser|grep telnet|grep -v "grep"|awk '{print $17}'`   #  R12.2
  • Seems like it need the .prog extension to be called e.g. scriptname.prog
  • If you try to use this in 11i you will need to define $ADMIN_SCRIPTS_HOME variable via .bash_profile or something as it’s a new one in R12.  Or you can just hardcode the path to the mwactlwrpr.sh script
  • I put the script in $CUSTOM_TOP/bin
  • Script walk through
    • It first echoes back your parameters
    • Next it issues the command mwactlwrpr.sh stop to attempt to gracefully shut down the MSCA telnet server.  This will fail to stop the dispatcher.
    • It emails me that the concurrent request was run, so I can be aware of how often this is needed, and who is doing it
    • Sleep 30 seconds so the mwactlwrpr.sh command can try to do it’s job.  Then figure out the PID for MWADIS and kill it
    • Next figure out the remaining telnet processes and kill them.  This doesn’t normally execute
    • Sleep 30 seconds and then issue mwactlwrpr.sh start.  Tee the output of this command to a temp file and scan for the words “is not free to start the dispatcher”
      • tee /tmp/mwa_alert.txt
    • If you see that it’s not free to start the dispatcher, email me again, this means there’s a bigger problem which needs my attention

bounce_mwa.prog

#!/bin/bash
# mwa_bounce.sh   06/24/13 kmk

echo "Following are System Parameters"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
p0=$0
p1=$1
p2=$2
p3=$3
p4=$4
echo "1st System Parameter    :"$p0
#echo "2nd System Parameter    :"$p1
echo "3rd System Parameter    :"$p2
echo "4th System Parameter    :"$p3
echo "5th System Parameter    :"$p4
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo "Following are User Parameters  "
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
#u1=$5
#echo "1st User Parameter    :"$u1
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"


echo "Stopping MWA Server via "$p0
echo
nohup $ADMIN_SCRIPTS_HOME/mwactlwrpr.sh stop $p1
echo $ADMIN_SCRIPTS_HOME/mwactlwrpr.sh stop APPS/password

mail -s "Concurrent Request "$p4" Submitted to Bounce MWA by "$p3 kkempf@myemail.com < /dev/null

sleep 30

# Kill MWADIS

for pids in `ps -fu appsuser|grep MWADIS|grep -v "grep"|awk '{print $2}'`
do
    echo "forcing kill on MWADIS PID ${pids}"
    kill -9 ${pids}
done

# Kill telnet
for pids in `ps -fu appsuser|grep telnet|grep -v "grep"|awk '{print $2}'`
do
    #DTL=`ps -fu appsuser|grep telnet|grep -v "grep"|awk '{print $15}'`   # 11i
    DTL=`ps -fu appsuser|grep telnet|grep -v "grep"|awk '{print $17}'`   #  R12.2
    echo "forcing kill on PID ${pids} for ${DTL}"
    kill -9 ${pids}
done

sleep 30

echo "Starting MWA Server via "$p0
echo $ADMIN_SCRIPTS_HOME/mwactlwrpr.sh start APPS/password
echo
rm -rf /tmp/mwa_alert.txt
touch /tmp/mwa_alert.txt
nohup $ADMIN_SCRIPTS_HOME/mwactlwrpr.sh start $p1 |tee /tmp/mwa_alert.txt
  
# if the dispatcher isn't free, email me

MWAERROR=`cat /tmp/mwa_alert.txt | grep "is not free to start the dispatcher"`

if [ ! -z "$MWAERROR" ]
then
  echo $MWAERROR | mail -s "MWA Error" kkempf@myemail.com
fi

Why Didn’t I Just Use Oracle’s Vanilla Scripts?

In short, because they don’t work.  They start MSCA fine, but in 12.2 (at least as of the AD delta 5) they don’t actually stop the processes correctly.  It stops the individual ports, but not the dispatcher.  The dispatcher is like some bad villain in an action movie that just refuses to die:

$ ps -ef|grep oratest
...                                                                                                                                                                                                                                    
oratest  29516     1  0 Oct21 ?        00:01:26 /u02/apptest/fs2/EBSapps/comn/util/jdk32/bin/java -Dxdo.xliff.source=EBS -DCLIENT_PROCESSID=29516 -Doracle.apps.mwa=/u02/apptest/fs2/EBSapps/appl/mwa/12.0.0 -Doracle.apps.jrad.mmd=/u02/apptest/fs2/FMW_Home/Oracle_EBS-app1/applications/oacore/html/jrad -Doracle.apps.inst=/u02/apptest/fs2/inst/apps/TEST_host -mx512m -ms128m oracle.apps.mwa.presentation.telnet.Listener 10260
oratest  29540     1  0 Oct21 ?        00:01:24 /u02/apptest/fs2/EBSapps/comn/util/jdk32/bin/java -Dxdo.xliff.source=EBS -DCLIENT_PROCESSID=29540 -Doracle.apps.mwa=/u02/apptest/fs2/EBSapps/appl/mwa/12.0.0 -Doracle.apps.jrad.mmd=/u02/apptest/fs2/FMW_Home/Oracle_EBS-app1/applications/oacore/html/jrad -Doracle.apps.inst=/u02/apptest/fs2/inst/apps/TEST_host -mx512m -ms128m oracle.apps.mwa.presentation.telnet.Listener 10262
oratest  29567     1  0 Oct21 ?        00:01:25 /u02/apptest/fs2/EBSapps/comn/util/jdk32/bin/java -Dxdo.xliff.source=EBS -DCLIENT_PROCESSID=29567 -Doracle.apps.mwa=/u02/apptest/fs2/EBSapps/appl/mwa/12.0.0 -Doracle.apps.jrad.mmd=/u02/apptest/fs2/FMW_Home/Oracle_EBS-app1/applications/oacore/html/jrad -Doracle.apps.inst=/u02/apptest/fs2/inst/apps/TEST_host -mx512m -ms128m oracle.apps.mwa.presentation.telnet.Listener 10264
oratest  29584     1  0 Oct21 ?        00:00:00 /bin/sh -f /u02/apptest/fs2/inst/apps/TEST_host/admin/scripts/mwactl.sh start_dispatcher
oratest  29589 29584  0 Oct21 ?        00:00:01 /u02/apptest/fs2/EBSapps/appl/mwa/12.0.0/bin/MWADIS
$ mwactlwrpr.sh stop apps/apps

Stopping MWA Servers and the dispatcher ....
Stopping MWA Server on Port number: 10260
Stopping MWA Server on Port number: 10262
Stopping MWA Server on Port number: 10264
Stopping MWA Dispatcher on Port number: 10830
$ ps -ef|grep oratest
...                                                                                                                                                                                
oratest  29584     1  0 Oct21 ?        00:00:00 /bin/sh -f /u02/apptest/fs2/inst/apps/TEST_host/admin/scripts/mwactl.sh start_dispatcher
oratest  29589 29584  0 Oct21 ?        00:00:01 /u02/apptest/fs2/EBSapps/appl/mwa/12.0.0/bin/MWADIS

$  mwactl.sh stop_dispatcher apps/apps
MWA Telnet Server Release: 1.0.8.4 [December 12th 2002]
Telnet dispatcher shut down successfully.
$ ps -ef|grep oratest
...                                                                                                                                                                                        
oratest  29584     1  0 Oct21 ?        00:00:00 /bin/sh -f /u02/apptest/fs2/inst/apps/TEST_host/admin/scripts/mwactl.sh start_dispatcher
oratest  29589 29584  0 Oct21 ?        00:00:01 /u02/apptest/fs2/EBSapps/appl/mwa/12.0.0/bin/MWADIS

Final Steps

Go to $CUSTOM_TOP/bin or wherever you have your shell script

Sym link fndcpesr to the name of the shell script minus the .prog extension:

ln

Confession: I have no idea how you’re supposed to do this in R12 and what I could find on My Oracle Support only covered through R12.1 (where there is only one filesystem).  I don’t know how you’re supposed to handle the dual filesystems, and you can clearly see my sym link is hard coded to fs2.  There has to be a more elegant way to do this, just not sure what it is at the moment.

If I do an ls -ltr on my directory, here’s what it looks like:

ls ltr

Concurrent Request

Here’s the log (there is no output) from my concurrent request.

CR Log

Soapbox

I found this to be a fun diversion, but I like writing shell scripts as much as SQL, and I like figuring out ways to do things which are more “correct”.  All that said, shame on the Oracle MSCA team for delivering such a half-baked product.  The R12.2 version of MSCA is plagued by a host of problems, most of which I have active SR’s open for:

  • Constant issues with tabbing not working in the MSCA GUI
  • Really, your stop script doesn’t stop your process?  Even when I specify stop_dispatcher?
  • How is it that adstrtal.sh doesn’t start MSCA, but it used to in 11i, and R12 has been out for some time?  I could say the same for adstpall.sh…
  • Major, quirky Java compatibility issues with the MSCA GUI
  • For the love of Pete, please don’t tell me that the tabbing issues are known to be resolved in JRE 1.7.23.  While your MSCA might work with 7.23, that’s not a real-world option as everyone else at Oracle is telling me to be on the latest version of Java and this PC also has to connect to Oracle forms.

October 16, 2014

R12.2 Apps Password Changing

Filed under: Linux, R12.2 — kkempf @ 10:02 am

cloning

Staring down the barrel of an R12.2 upgrade

So we’re getting really, really close to pulling the trigger on this release.  I’m tying up loose ends from an admin perspective, and one of them was confirming I could clone under 12.2.

R12.2 Cloning

In general, I’d say cloning is easier than 11i.  That said, I currently have an SR open because after completing the clone in accordance with 1383621.1 I can’t run a patch cycle because of an issue with appltop_id.  I’m really hoping I missed something simple and it will be resolved soon.  Other than that, my clone worked great, I could log in and things were running right.  Although the cloning document isn’t what I would call a “roadmap” to a clone, it’s enough that if you used to know how to clone you can figure it out.  My favorite part is for the poor people running R12.2 on Windows (hopefully, nobody) where in order to prepare the source system, you have to shut down production to clone.

Password Changing

There’s a lot of moving parts in the E-Business suite, and Oracle did us a favor by providing the FNDCPASS utility again in R12.2 to facilitate apps password changes.  Well really any schema changes.  I grabbed Doc 1674462.1 and I have to say it’s well written and accurate!  In the old days of 11i, you had to run autoconfig to propogate the apps password change to a human-readable text file under the Apache install (among other reasons, I’m sure).  No, really, it’s out there source an 11i environment and type this:

cat ($IAS_HOME)/Apache/modplsql/cfg/wdbsvr.app|grep -m1 password|sed -re ‘s/(^.+= )//’

Well now that bit is buried under Weblogic, so it takes longer in that you have to log in to the admin server and use the web-based GUI to make the JDBC connection change.

My Gift to you

Although I feel the document is accurate, I don’t want to have to go dig it out every time I do a clone (or rely on Metalink being up/accessible) and need to change my non-production system password to something different than production.  Besides, a working shell script means I don’t have to worry about standardizing my process.  In my cloning notes I simply say “change apps password with passwordchanger12.sh”.

So here’s my shell scripted version; I could have automated it more but I feel this script allows for you to walk through the steps without making it a complete “black box” in case it changes in the future.  I think the only caveat is that the directory you run it in needs to be writable.  You can chmod +x the script and just run it without arguments to get the “help” information.

########################
# apps password change #
########################

if [ $# -ne 6 ]
then
  echo "Usage:  passwordchanger12.sh"            
  echo "        -appspass    password             Current apps Password"
  echo "        -syspass     password             Current system Password"
  echo "        -newpass     password             New apps, apps schema's, non-apps and non-apps schema's Password"
  echo
  echo "example:  passwordchange.sh -appspass apps -syspass manager -newpass tayl0r"
  echo
  echo "General order of password changes IAW DOC ID 1674462.1:"
  echo "0) export fnd_users"
  echo "1) Stop everything with adsptall.sh and ensure it's down"
  echo "2) Run this script"
  echo "3) Start only the admin server with adadminsrvctl.sh"
  echo "4) Change the apps password in WLS Datasource" 
  echo "   a. Log in to WLS Administration Console"
  echo "   b. Click Lock & Edit in Change Center"
  echo "   c. In the Domain Structure tree, expand Services, then select Data Sources"
  echo "   d. On the Summary of JDBC Data Sources page, select EBSDataSource"
  echo "   e. On the Settings for EBSDataSource page, select the Connection Pool tab"
  echo "   f. Enter the new password in the Password field"
  echo "   g. Enter the new password in the Confirm Password field"
  echo "   h. Click Save"
  echo "   i. Click Activate Changes in Change Center"
  echo "5) Start everything with adstrtal.sh"
  echo "6) Check in the apps and WLS"
  echo "   a. Log in to WLS Administration Console"
  echo "   b. In the Domain Structure tree, expand Services, then select Data Sources"
  echo "   c. On the Summary of JDBC Data Sources page, select EBSDataSource"
  echo "   d. On the Settings for EBSDataSource page, select Monitoring > Testing"
  echo "   e. Select oacore_server1"
  echo "   f. Click Test DataSource"
  echo "   g. Look for the message Test of EBSDataSource on server oacore_server1 was successful."
  echo 
  exit 1
fi

for parm in `echo $*`
do
  if [ $1 = '-appspass' ]
  then
    shift
    APPSPASS=$1
  elif [ $1 = '-syspass' ]
  then
    shift
    SYSPASS=$1
  elif [ $1 = '-newpass' ]
  then
    shift
    NEWPASS=$1
  fi 

  if [ $2 ]
  then
    shift
  fi
done

echo "changing non apps passwords..."
$FND_TOP/bin/FNDCPASS apps/${APPSPASS} 0 Y SYSTEM/${SYSPASS} ALLORACLE ${NEWPASS}

echo "changing apps password..."
$FND_TOP/bin/FNDCPASS apps/${APPSPASS} 0 Y SYSTEM/${SYSPASS} SYSTEM APPLSYS ${NEWPASS}
  echo "Remaining Steps:"
  echo "3) Start only the admin server with adadminsrvctl.sh"
  echo "4) Change the apps password in WLS Datasource" 
  echo "   a. Log in to WLS Administration Console"
  echo "   b. Click Lock & Edit in Change Center"
  echo "   c. In the Domain Structure tree, expand Services, then select Data Sources"
  echo "   d. On the Summary of JDBC Data Sources page, select EBSDataSource"
  echo "   e. On the Settings for EBSDataSource page, select the Connection Pool tab"
  echo "   f. Enter the new password in the Password field"
  echo "   g. Enter the new password in the Confirm Password field"
  echo "   h. Click Save"
  echo "   i. Click Activate Changes in Change Center"
  echo "5) Start everything with adstrtal.sh"
  echo "6) Check in the apps and WLS"
  echo "   a. Log in to WLS Administration Console"
  echo "   b. In the Domain Structure tree, expand Services, then select Data Sources"
  echo "   c. On the Summary of JDBC Data Sources page, select EBSDataSource"
  echo "   d. On the Settings for EBSDataSource page, select Monitoring > Testing"
  echo "   e. Select oacore_server1"
  echo "   f. Click Test DataSource"
  echo "   g. Look for the message Test of EBSDataSource on server oacore_server1 was successful."

exit

December 5, 2013

Cleaning up after Autoconfig

Filed under: 11i, Linux — kkempf @ 12:01 pm

shell

This post could also be called “writing a tiny shell script to notify me of a difference in a config file”.  Short and sweet 2nd post today, I love shell scripting!

Whenever I run autoconfig, it reverts back a value for my Mobile Supply Chain dispatcher port to a value stored in the database somewhere which is wrong.  If I dig into the log, it’s complaining that the port I want it to change to is in use.  Duh, it’s running.  Except it complains when it’s not running also.  The dispatcher is downright critical to getting into Mobile Supply Chain, and Oracle Support is being their usual helpful self.  Except now as of Dec 1, new for 11i: extra ignore!

Let’s assume you have a “good” version of a config file sitting next to one autoconfig wants to keep changing.  This script will email you the differences if they exist.  It assumes you have sendmail setup on your linux host.

cat checkmwacfg.sh

MWACHECK=`diff --brief $MWA_TOP/secure/mwa.cfg $MWA_TOP/secure/mwa.cfg.good|grep -woF differ`
if [ $MWACHECK ]
then
  diff $MWA_TOP/secure/mwa.cfg $MWA_TOP/secure/mwa.cfg.good | mail -s "$MWA_TOP/secure/mwa.cfg file is different" kempf@myemailaddress.com
fi

Crontab it up and you’re done:

# email me bad MWA config file in $MWA_TOP/secure once a day
0 16 * * * /(path to script)/checkmwacfg.sh

June 18, 2013

Going live on MSCA

Filed under: 11i, Linux, Mobile Supply Chain, Utilities — kkempf @ 3:20 pm

index

Oracle Mobile Supply Chain Application is live!

So we’re live on MSCA now. All things considered it went fine; from a technical perspective the issue which surprised me the most was the instability of the mwa server on the apps tier. I set up a dispatcher with 3 ports (plenty far apart) and at 5am I got a call from Ireland saying that there was only one device in the whole plant which could still connect.

AUTHENTICATION FAILED

The users weren’t getting their password wrong every time, though the message is the same.  Everyone got this “AUTHENTICATION FAILED” message. I’d seen this before; basically it meant that the port was hosed.

The behavior was such that even trying to do a stop_force against a “dead port” returned the message AUTHENTICATION FAILED.  Here’s a snip of my command line sequence to fix it in the middle of the night; basically I tried to gracefully shut down ports 10200, 10300 and 10400. 10300 and 10400 wouldn’t play nicely, so I had to find their PID and kill -9 on them, then restart all 3 ports:

$ cd $MWA_TOP/bin 
$ ps -ef|grep 10200 
oraprod  17027     1  0 Jun16 ?        Sl     0:48 /opt/jdk/bin/java -DPID=17021 -Doracle.apps.mwa=/u02/appprod/prodappl/mwa/11.5.0 -mx512m -ms128m oracle.apps.mwa.presentation.telnet.Listener 10200 
oraprod  21554 19963  0 05:00 pts/3    S+     0:00 grep 10200 
$ ps -ef|grep 10300 
oraprod  17059     1 30 Jun16 ?        Sl   742:11 /opt/jdk/bin/java -DPID=17053 -Doracle.apps.mwa=/u02/appprod/prodappl/mwa/11.5.0 -mx512m -ms128m oracle.apps.mwa.presentation.telnet.Listener 10300 
oraprod  21580 19963  0 05:00 pts/3    S+     0:00 grep 10300 
$ ./mwactl.sh -login apps/password stop_force 10200 
MWA Telnet Server Release: 1.0.8.4 [December 12th 2002] 
Telnet server shut down successfully. 
$ ./mwactl.sh -login apps/password stop_force 10300 
MWA Telnet Server Release: 1.0.8.4 [December 12th 2002] 
Error: ServerManagerListener returned 'AUTHENTICATION_FAILED' 
mwactl: Error shutting down Telnet server 
$ ./mwactl.sh -login apps/password stop_force 10400 
MWA Telnet Server Release: 1.0.8.4 [December 12th 2002] 
Error: ServerManagerListener returned 'AUTHENTICATION_FAILED' 
mwactl: Error shutting down Telnet server 
$ ps -ef|grep 10300 
oraprod  17059     1 30 Jun16 ?        Sl   742:57 /opt/jdk/bin/java -DPID=17053 -Doracle.apps.mwa=/u02/appprod/prodappl/mwa/11.5.0 -mx512m -ms128m oracle.apps.mwa.presentation.telnet.Listener 10300 
oraprod  22006 19963  0 05:01 pts/3    S+     0:00 grep 10300 
$ kill -9 17059 
$ ps -ef|grep 10400 
oraprod   7845     1  0 Jun17 ?        Sl     0:59 /opt/jdk/bin/java -DPID=7843 -Doracle.apps.mwa=/u02/appprod/prodappl/mwa/11.5.0 -mx512m -ms128m oracle.apps.mwa.presentation.telnet.Listener 10400 
oraprod  22063 19963  0 05:01 pts/3    S+     0:00 grep 10400 
$ kill -9 7845 
$ ps -ef|grep 10200 
oraprod  22169 19963  0 05:01 pts/3    S+     0:00 grep 10200 
$  ./mwactl.sh start 10200
Created server socket : listening on port 10200 
Server startup is successful.
MWA Telnet Server Release: 1.0.8.4 [December 12th 2002] 
$  ./mwactl.sh start 10300
Created server socket : listening on port 10300 
Server startup is successful.
$  ./mwactl.sh start 10400 
MWA Telnet Server Release: 1.0.8.4 [December 12th 2002] 
$ Created server socket : listening on port 10400 
Server startup is successful.

mwactl.sh to the rescue

There’s no mwactl.sh status.  If there were, I could log in to the port, get the AUTHENTICATION FAILED error, kill -9 that PID and restart the telnet server on that same port.  So I have to do a “soft shutdown”.  Basically, I wrote a shell script to run every X hours via cron (I’ll start with 12).  It will bring up 3 new ports, and the old 3 ports will gracefully die (meaning, they’ll die after all users have disconnected).

Script to cycle ports with mwactl.sh gracefully

One note: the PASSWD line needs to be customized to your 8.0.6 Apache home.  The wdbsvr.app file contains a plain-text readable copy of your apps password.  At least in 11i.  You can also just hard code the value, but I’ll leverage Oracle’s security hole to my advantage and not propogate random hard coded passwords I have to change everywhere when I need to change the apps password.

#!/bin/bash
# mwa_port_roatate.sh   06/18/13 kmk

# Port Pool 1 : 10200, 10205, 10210, 10215, 10220, 10225

# Port Pool 2 : 10250, 10255, 10260, 10265, 10270, 10275

# mwa.TelnetServer=localhost.com:10200,10205,10210,10215,10220,10225,10250,10255,10260,10265,10270,10275

# Dispatcher: 10800

. /scratch/home/oraprod/env/PROD_APPS
  PASSWD=`cat /u02/appprod/prodias/iAS/Apache/modplsql/cfg/wdbsvr.app|grep -m1 password|sed -re 's/(^.+= )//'`
  USERNAME=`whoami`

if [ -f /tmp/mwa_port_pool1 ]
then
  # Port pool 1 is active, touch port pool 2 file and remove port pool 1 file
  rm -rf /tmp/mwa_port_pool1
  touch /tmp/mwa_port_pool2
 
  echo "====================STARTING=2=====================================" >> /tmp/mwa_port.log
  date >> /tmp/mwa_port.log
  echo "Starting Port Pool 2" >> /tmp/mwa_port.log
  
  # start port pool 2
  echo "10250" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh start 10250 >> /tmp/mwa_port.log 2>&1 &
  echo "10255" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh start 10255 >> /tmp/mwa_port.log 2>&1 &
  echo "10260" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh start 10260 >> /tmp/mwa_port.log 2>&1 &
  echo "10265" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh start 10265 >> /tmp/mwa_port.log 2>&1 &
  echo "10270" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh start 10270 >> /tmp/mwa_port.log 2>&1 &
  echo "10275" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh start 10275 >> /tmp/mwa_port.log 2>&1 &

  sleep 10

  echo "====================STOPPING=1=====================================" >> /tmp/mwa_port.log
  date >> /tmp/mwa_port.log
  echo "Stopping Port Pool 1" >> /tmp/mwa_port.log
  
  # stop port pool 1
  echo "10200" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh -login apps/${PASSWD} stop 10200 >> /tmp/mwa_port.log 2>&1 &
  echo "10205" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh -login apps/${PASSWD} stop 10205 >> /tmp/mwa_port.log 2>&1 &
  echo "10210" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh -login apps/${PASSWD} stop 10210 >> /tmp/mwa_port.log 2>&1 &
  echo "10215" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh -login apps/${PASSWD} stop 10215 >> /tmp/mwa_port.log 2>&1 &
  echo "10220" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh -login apps/${PASSWD} stop 10220 >> /tmp/mwa_port.log 2>&1 &
  echo "10225" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh -login apps/${PASSWD} stop 10225 >> /tmp/mwa_port.log 2>&1 &
 
  sleep 300

  for pids in `ps -fu ${USERNAME}|egrep '(10200)|(10205)|(10210)|(10215)|(10220)|(10225)'|grep -v grep|awk '{print ($2)}'`
  do
      echo "forcing kill on PID ${pids} (LIVE)" >> /tmp/mwa_port.log 2>&1 &
      kill -9 ${pids}
  done

else
# mwa.TelnetServer=localhost.com:10200,10205,10210,10215,10220,10225,10250,10255,10260,10265,10270,10275
  rm -rf /tmp/mwa_port_pool2
  rm -rf /tmp/mwa_port_pool1
  touch /tmp/mwa_port_pool1

  echo "====================STARTING=1=====================================" >> /tmp/mwa_port.log
  date >> /tmp/mwa_port.log
  echo "Starting Port Pool 1" >> /tmp/mwa_port.log
  
  # start port pool 1
  echo "10200" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh start 10200 >> /tmp/mwa_port.log 2>&1 &
  echo "10205" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh start 10205 >> /tmp/mwa_port.log 2>&1 &
  echo "10210" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh start 10210 >> /tmp/mwa_port.log 2>&1 &
  echo "10215" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh start 10215 >> /tmp/mwa_port.log 2>&1 &
  echo "10220" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh start 10220 >> /tmp/mwa_port.log 2>&1 &
  echo "10225" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh start 10225 >> /tmp/mwa_port.log 2>&1 &

  sleep 10

  echo "====================STOPPING=2=====================================" >> /tmp/mwa_port.log
  date >> /tmp/mwa_port.log
  echo "Stopping Port Pool 2" >> /tmp/mwa_port.log
  
  # stop port pool 2
  echo "10250" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh -login apps/${PASSWD} stop 10250 >> /tmp/mwa_port.log 2>&1 &
  echo "10255" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh -login apps/${PASSWD} stop 10255 >> /tmp/mwa_port.log 2>&1 &
  echo "10260" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh -login apps/${PASSWD} stop 10260 >> /tmp/mwa_port.log 2>&1 &
  echo "10265" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh -login apps/${PASSWD} stop 10265 >> /tmp/mwa_port.log 2>&1 &
  echo "10270" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh -login apps/${PASSWD} stop 10270 >> /tmp/mwa_port.log 2>&1 &
  echo "10275" >> /tmp/mwa_port.log
  nohup $MWA_TOP/bin/mwactl.sh -login apps/${PASSWD} stop 10275 >> /tmp/mwa_port.log 2>&1 &

  sleep 300

  for pids in `ps -fu ${USERNAME}|egrep '(10250)|(10255)|(10260)|(10265)|(10270)|(10275)'|grep -v grep|awk '{print ($2)}'`
  do
      echo "forcing kill on PID ${pids} (LIVE)" >> /tmp/mwa_port.log 2>&1 &
      kill -9 ${pids}
  done

fi

# cool command to return PIDS for all telnet servers
#
# ps -ef|egrep '(10200)|(10300)|(10400)|(10500)|(10600)|(10700)'|grep -v grep|awk '{print ($2)}'

May 17, 2013

yum making RDBMS installs easier

Filed under: 11g, Linux — kkempf @ 12:36 pm

OL

For those of you tasked with a fresh install of an Oracle 11.2 RDBMS on linux, I stumbled across a real time saver.

Oracle has put together a package called oracle-rdbms-server-11gR2-preinstall.  As far as I can tell, the package itself does absolutely nothing after installation.  But the key is that it has, as prerequisites, all of the packages required for an RDBMS 11.2 install per the installation guide for Linux.  This means I don’t have to go manually yum update all the packages, they just get installed with this one package! In addition, it tweaks two annoying configuration files: sysctl.conf and limits.conf for required settings!

One simple command:

yum install oracle-rdbms-server-11gR2-preinstall

limits.conf:

# oracle-rdbms-server-11gR2-preinstall setting for nofile soft limit is 1024
oracle   soft   nofile    1024
# oracle-rdbms-server-11gR2-preinstall setting for nofile hard limit is 65536
oracle   hard   nofile    65536
# oracle-rdbms-server-11gR2-preinstall setting for nproc soft limit is 2047
oracle   soft   nproc    2047
# oracle-rdbms-server-11gR2-preinstall setting for nproc hard limit is 16384
oracle   hard   nproc    16384
# oracle-rdbms-server-11gR2-preinstall setting for stack soft limit is 10240KB
oracle   soft   stack    10240
# oracle-rdbms-server-11gR2-preinstall setting for stack hard limit is 32768KB
oracle   hard   stack    32768
@dba            soft    memlock         67108864
@dba            hard    memlock         67108864

sysctl.conf

# oracle-rdbms-server-11gR2-preinstall setting for fs.file-max is 6815744
fs.file-max = 6815744

# oracle-rdbms-server-11gR2-preinstall setting for kernel.sem is '250 32000 100 128'
kernel.sem = 250 32000 100 128

# oracle-rdbms-server-11gR2-preinstall setting for kernel.shmmni is 4096
kernel.shmmni = 4096

# oracle-rdbms-server-11gR2-preinstall setting for kernel.shmall is 1073741824 on x86_64
# oracle-rdbms-server-11gR2-preinstall setting for kernel.shmall is 2097152 on i386
kernel.shmall = 1073741824

# oracle-rdbms-server-11gR2-preinstall setting for kernel.shmmax is 4398046511104 on x86_64
# oracle-rdbms-server-11gR2-preinstall setting for kernel.shmmax is 4294967295 on i386
kernel.shmmax = 4398046511104

# oracle-rdbms-server-11gR2-preinstall setting for net.core.rmem_default is 262144
net.core.rmem_default = 262144

# oracle-rdbms-server-11gR2-preinstall setting for net.core.rmem_max is 4194304
net.core.rmem_max = 4194304

# oracle-rdbms-server-11gR2-preinstall setting for net.core.wmem_default is 262144
net.core.wmem_default = 262144

# oracle-rdbms-server-11gR2-preinstall setting for net.core.wmem_max is 1048576
net.core.wmem_max = 1048576

# oracle-rdbms-server-11gR2-preinstall setting for fs.aio-max-nr is 1048576
fs.aio-max-nr = 1048576

# oracle-rdbms-server-11gR2-preinstall setting for net.ipv4.ip_local_port_range is 9000 65500
net.ipv4.ip_local_port_range = 9000 65500

Here’s what it looks like on the command line:

s12

s13

I can’t take anything away from this.  I installed this package and the 11.2 RDBMS installer didn’t complain about anything being missing. It occurs to me that even if you’re using Red Hat Linux, you could add the Oracle Repo (they’re free now from what I understand) and still leverage this tool!

January 24, 2013

Ksplice … another reason to love Oracle Linux

Filed under: Linux — kkempf @ 5:00 pm

Oracle Linux Support Flavors

So we went to renew our Oracle Linux licensing this year, and I realized I needed to add a host.  In the course of these negotiations, I thought I’d see what the cost would be to move to Oracle Premier Limited Support (2 sockets per host) or Oracle Premier Unlimited Support (any number of sockets per host).   It turned out, the incremental cost was insignificant, and I was really interested in leveraging Ksplice.  So now we own it.   I should note, that about a year ago ksplice was only available for the Unbreakable Enterprise Kernel (UEK) but that has changed and is now available for the RedHat compatible kernel.  This was a huge factor in my decision to go forward with it.

For the past year, we ran our production 11i servers on Oracle Linux basic support.  It’s not often that I say this, but my expectations were exceeded by Oracle.  Not only did the systems run without incident, but Oracle support capably handled all my SR’s and in many ways surpassed the level of support which I get from another, similar linux provider who I also pay for.

What is Ksplice?

Ksplice is a way to patch, in memory, a running kernel.   You can check out the propoganda here.  Some months, it seems like the kernels are coming out faster than I can keep up with.  It never fails that one comes out as soon as I finish rebooting all the servers through a maintenance cycle.  So this has its appeal.

How to start using Ksplice in 5 easy steps

1. Go purchase some level of premier support for your Oracle Linux

2. Go to your linux.oracle.com portal and change your subscribed channels for servers which you want to run Ksplice on (add Oracle Ksplice in addition to your existing channel(s))

step one

3. yum install uptrack

yum install

4. uptrack-upgrade

uptrack-upgrade

Here’s the different kernels:

diff kernels

And the uptrack-show command:

uptrack-show

If I had to dislike one thing?

The support experience.  The document here is completely outdated and wrong.  There is no button on linux.oracle.com to enable systems anymore, despite their documentation.  So I emailed my sales person, who handed me off to a technician, who referred me back to the incorrect document.  Then I opened an SR, and the technician there told me to email ksplice-support_ww@oracle.com.  Kind of a weird answer for Oracle Support, but whatever.  They at least knew what they were doing:

Hello Kevin,
We’ve streamlined the process. All you need to do is subscribe to the corresponding Ksplice channel (Ksplice for Oracle Linux 5 or 6, 32 or 64-bit), and install the uptrack package.
If you have any further questions please don’t hesitate to ask us at ksplice-support_ww@oracle.com.

May 5, 2011

A mini-deviation from the norm

Filed under: Linux, Windows 7 — kkempf @ 10:47 am

Mini-me

A geeky detour

If you regularly read any of  my ramblings, you’ve probably gleaned that you’re unlikely to catch me running around advocating Microsoft products.  At the office, I run Ubuntu Linux on my Dell Latitude E5510.  It’s awesome.  At home, I run Windows 7 on our primary Desktop and Notebook.  Until recently, I ran Ubuntu on the Dell Mini 10v netbook he own.  One can weigh and argue the merits of a netbook (or a tablet, for that matter), but until you own one, you won’t “get it”.  I’m not going to advocate them any more than that in this post.  But here’s what I want/expect out of a netbook, which I can’t get from a notebook:

  • Very fast wakeup from sleep
  • Very fast boot
  • Immediate access to lightweight, web applications
  • Most applications are browser-centric
  • Get on, get the information I need, get out
  • Don’t nag me every 10 minutes about some stupid update
  • Don’t spin the hard drive incessantly while all I want to do is log in and check my gmail

Unacceptably Slow and Useless

The Mini 10v came with Windows 7 starter.  The only advantage I could figure out was that it had a familiar desktop, and I could install all my familiar programs.  It did a terrible job at everything else a netbook should do.  In fact, there was no compelling advantage to using a netbook with Windows 7 starter versus using a notebook.

Ubuntu Frustrations

Recently, I began to have various problems with the Ubuntu Netbook Remix 10.04 (LTS).  First, Utube videos were all pink (some bug, hack, fix with deleting a cache as I recall).  Then the wireless failed in various ways.  Sometimes it would connect and then drop the connection.   It would never successfully re-establish a connection after I closed the lid and put it in sleep mode, that required a reboot.  Some of this is the fault of the wireless card, I admit.  The Broadcom card Dell puts in there must cost about 12 cents for Dell.  It uses a closed-source driver, meaning that Linux will have a hard time making it work (or at least, that the steps will be somewhat manual).  I know all of this, and yet even with going through the Ubuntu hassles of searching for 3rd party drivers and installing them fresh, it didn’t work most of the time.  So I decided I’d try their 11.04 Ubuntu beta.  Wow this version is a big step back with their new Unity interface.  Apparently, I’m not the only one who feels this way; it’s easy to find about 50/50 on critics versus advocates of this new GUI (which is basically a crippled version of Ubuntu Netbook Remix’ interface from 10.04 as far as I can tell).  I even tried installing 10.10 to see if I could find a happy medium.  Nope, too complicated for a mini.  I just want a simple OS with good presentation/formatting on a mini.

Something Joli

Finally, a use for the cloud?

So I happened upon a distro which showed some real promise.  It’s 100% Ubuntu behind the scenes, and had a twist: it touted itself as a Cloud desktop.   Basically, here’s the premise:  have a desktop which has all your preferences and applications stored in the cloud.  You log in, either from the Joli OS desktop, or from any browser of a PC not running Joli OS, and you get the same desktop.  If you look at my desktop, you’ll notice that most of the applications aren’t what you would call applications in the traditional sense:  they’re basically website shortcuts.    The exception to that would be something like pidgin (instant messaging) or chromium (open source chrome):

Basically, there’s 2 parts to Joli:

  • The desktop
    • Anyone, including a Windows user, can create an account for and use
    • Displayed in any browser and your applications and preferences are stored in the cloud
    • When used from the web, “installed” applications, such as Chromium and Pidgin, are “greyed out” and unusuable
  • The operating System
    • Ubuntu behind the scenes
    • Lightweight, fast with a simple, attractive GUI
    • Works on most hardware

Why I’m running Joli OS now

Really, what did it take to win, and become my new OS and desktop?  A few tests, which it passed with flying colors.  First, the USB-key creation of the install was a snap.   Second, when I ran the OS from the USB key, it came up fast, immediately saw my home wireless network (WPA-2 secured) and was able to connect without fussing with a bunch of drivers.

Here’s a features comparison grid

Feature Joli Cloud OS Ubuntu Windows 7 Starter
Wireless Works “Out of the Box”  √
Boot Time
Wake Up from Sleep and get on the web
Simple, Functional Desktop
Lightweight
Runs Traditional Windows Apps  √

The short of it is this: If you’re like me, consider for a moment, why you have a mini. If it’s not to run MS Word, Outlook, or Internet Explorer and replace your Desktop/Notebook, but rather to augment it as a quick look up from the living room, or a way to read a recipe in the kitchen, you might at least consider looking at this operating system. If you’re unhappy with Windows 7 starter, especially due to performance, there’s no reason not to create a USB install and take a test drive of this operating system from the USB key (“live key”). It will not affect your Windows 7 install at all, and in fact if you like Joli but still can’t pull the trigger, you can install it as a dual boot configuration side by side with Windows.

January 18, 2011

Using screen to make your life easier on Linux

Filed under: Linux — kkempf @ 3:32 pm

An oldie, but a goodie

There’s nothing new about the steps outlined in this posting, but it’s so valuable, I thought I’d mention it.  It goes along with the classic mantra of work smarter, not harder.  In order to use it, you have to basically remember 3 things:

  • screen          to enable screen
  • screen -ls    to display available screens
  • screen -r      to reconnect to an existing screen

A typical maintenance scenario

I’m sitting at home, VPN’d into the office, trying to cram as many patches and maintenance pieces into a 4 hour windows as possible, once a month.  For the sake of a clear example, lets say I’m running adpatch via ssh, applying some 300mb fix to HR.  Suddenly the VPN connection hiccups (Windows 7!  never!) and no matter how many times I hit enter, the SSH session does nothing.  So where am I at?  Where’s my patch at?  Sort of an unknown.

Bring on screen

There’s a really simple solution to this if you’re running Linux.  Type screen before you start any work:

Disconnected?

For demonstration purposes, a hard close

What screens are available on the host?

Assuming you’ve reconnected your ssh session, type screen -ls (fairly intuitive) and it will display your PID and a unique connection descriptor.  Use screen -r PID descriptor to reconnect to the existing session.

And finally, pick back up where you left off

December 21, 2010

Firing Windows 7 (Again)

Filed under: Linux, Ubuntu, Windows 7 — kkempf @ 10:21 am

It wasn’t my idea

I bought a Dell mini 11 running Windows 7 starter edition about a year ago for home and recently the complaints began rolling in about how slow it was. I witnessed this first hand on vacation, when I tried to use this thing to simply browse the web. For various reasons, it was always frustrating. One time it would insist on restarting to install a security update, or take 10 minutes to shut down because it was “finishing” the update. Another time, it would take minutes to recover from the lid being closed. I believe that on a cold boot after a security patch, from power on to Internet Explorer 8 it would take about 3 days 5 minutes.  This kind of defeats the whole purpose of a lightweight, fast web platform.

Enter Ubuntu Netbook Remix

Ubuntu Unity Desktop

As I sometimes mention, I use Ubuntu as my work platform, so I’m very familiar with it.  Ultra stable, fast bootup, no drama.  It was with some reluctance that I went to install Ubuntu Netbook Edition on the Netbook, as I feared that the inability to install a Windows executable (yes, you can use Wine, but realistically, it’s not a 100% solution) would be a deal breaker.  I’m not the one using this netbook 90% of the time, so it felt like a gamble.  I pulled the install and landed it on a USB stick, kissed Windoze goodbye and ran the installer.  Cake.

Windows 7: You’re Fired

Not My Idea!

After 3 months, I can safely say that Ubuntu is going over great.  It boots in about 30 seconds, and wakes up from sleep unfailingly.  It does exactly what I think a netbook is supposed to do: provide a fast, convenient platform for wireless internet connectivity to do simple tasks like check webmail, IM, and browse the web.  If a netbook can’t do this fast and simple, why not just go get a notebook or a full PC right?  Having fantastic applications available like Chrome, Open Office, Adobe Flash/Reader and Pidgin (IM) makes this experience so much better.  It easily tethers to my Blackberry via Bluetooth, so this makes internet while traveling (or on the road, for that matter, in the passenger seat!) easy.

That Other Notebook in the House

As proof of adoption of Ubuntu, now all I ever hear about is how annoying the Windoze 7 (Home Premium) notebook is.  It’s always wanting to update something (Windows, Acrobat, Java, McAfee, Office) and it runs like molasses.  This is a fresh, 64-bit install on a dual core Dell with 4gb of RAM.  The truth is that Windows 7 is a fine operating system, but really only enjoyable on premium hardware.

Older Posts »

Blog at WordPress.com.