Archive for the ‘Tips’ Category

SAP on Red Hat Linux - RHEL-7.x

Thursday, August 11th, 2016

All runs well, but one of the expected change is - Stop living in the past.

Upgrading to the latest version of Operating System with out hindering the running applications and databases.
Here in my case, this is from RHEL-6.x to RHEL-7.x - The plan and actions are chalking out. That could be another travel blog from Santiago to Maipo.

Now, that I have to build the SAP Fiori landscape I have proposed having it on RHEL-7.
Word of caution from OS Team: Hey Vipin, this is the first system in our datacenter to go with RHEL-7.

There is always a first time. The latest SAP application server - NetWeaver-7.50 is also the first one on our landscape.

=======================================

Disclaimer:
- This document is for a “NEW” installation of RHEL-7.x for SAP with Oracle-12c.
- The information here is not applicable for upgrading any lower version of RHEL to RHEL-7.x.

=======================================

Install RHEL-7.x

=======================================

1. Check the below Software group from Software Selection:

A. Infrastructure Server

- Large Systems Performance
- Network File System Client
- Performance Tools
- Compatibiliy Libraries

2. Additional Packages:

- uuidd
- compat-libcap1
- zip and unzip
- tcsh
- libaio-devel.x86_64
- glibc-devel.x86_64
- ksh
- gcc.x86_64
- gcc-c++.x86_64
- libstdc++-devel.x86_64
- compat-libstdc++-33.x86_64

3. Apply latest patches provided by Red Hat for all RHEL 7 packages installed on the system - yum it up!

4. Filesystem : XFS

5. Apart from the standard filesystems please create below: (SID is the SAP ID for this build, varies with different SAP install)

/oracle 2GB
/oracle/client 2GB
/oracle/stage/121_64 10GB
/oracle/SID 10GB
/oracle/SID/12102 15GB
/oracle/SID/origlogA 2GB
/oracle/SID/origlogB 2GB
/oracle/SID/mirrlogA 2GB
/oracle/SID/mirrlogB 2GB
/oracle/SID/oraarch 15GB
/oracle/SID/sapreorg 10GB
/oracle/SID/sapdata1 50GB
/oracle/SID/sapdata2 50GB
/oracle/SID/sapdata3 50GB
/oracle/SID/sapdata4 50GB
/usr/sap 10GB
/usr/sap/SID 40GB
/usr/sap/trans 20GB
/sapmnt 5GB
/sapmnt/SID 12GB
/saptmp 10GB

========================================

POST-INSTALL

========================================

1. Create a file /etc/sysctl.d/sap.conf

#SAP Settings
kernel.sem=1250 256000 100 1024
vm.max_map_count=2000000
net.ipv4.ip_local_port_range = 9000 65535

2. Create the file /etc/security/limits.d/99-sap.conf

#SAP Settings
@sapsys hard nofile 65536
@sapsys soft nofile 65536
@sapsys hard nproc 16384
@sapsys soft nproc 2047
@sapsys soft stack 10240
@dba hard nofile 65536
@dba soft nofile 65536
@dba hard nproc 16384
@dba soft nproc 2047
@dba soft stack 10240
@dba soft memlock unlimited
@dba hard memlock unlimited

3. SELinux to “Permissive”

4. Stop and disable Firewall until further firewall policy/rule in place.

MaxDB : SAP Re-Installation

Monday, August 9th, 2010

Clean up the following File Systems or DIRs
> /etc/opt/sdb
> /usr/spool/sql
> /sapdb/*

SAP Troubled Kernel Patch

Sunday, January 31st, 2010

Next time when the system starts sneezing or coughing with the following symptoms:
The dialog work process may crash sporadically when you reprint from the graphic display of a spool request from transaction SP01. The same problem may also occur for the raw display of a spool request. When you forward or download a spool request, a dump ASSIGN_TYPE_ILLEGAL_CAST occurs in the function RSPO_SPOOLDATA_WRITE.

Check for the following Kernel Patch level for the respective release:

SAP KERNEL 7.00 32-BIT SP239
SAP KERNEL 7.10 32-BIT SP184
SAP KERNEL 7.00 64-BIT SP239
SAP KERNEL 7.00 64-BIT UNICODE SP239
SAP KERNEL 7.10 64-BIT UNICODE SP184
SAP KERNEL 7.10 64-BIT SP184
SAP KERNEL 7.01 64-BIT SP077
SAP KERNEL 7.01 64-BIT UNICODE SP077
SAP KERNEL 7.11 64-BIT SP071
SAP KERNEL 7.11 64-BIT UNICODE SP071

Please do not apply the following kernel patches which have been created between 23.12.2009 and 14.01.2010:
6.40 315
7.00 237, 238
7.01 75, 76
7.10 183
7.11 69, 70

    The following fixed kernels are available:

6.40 Check OSS
7.00 239
7.01 77
7.10 183
7.11 71

Also check the following notes:
Note 1422843 - Wrong deletion date in spool request
Note 1425811 - Dialog work process crashes for spool display

SAP Standard Job Changes

Friday, December 12th, 2008

Certain jobs that were delivered as standard jobs in the past are no longer recommended by SAP.

1. The following job definitions are deleted:
SAP_REORG_UPDATERECORDS
(program RSM13002)
SAP_WP_CACHE_RELOAD_FULL
(program RWP_RUNTIME_CACHE_RELOAD)

2. The following job definitions are changed:
SAP_REORG_JOBS
(old: program RSBTCDEL, new: program RSBTCDEL2)
(Note: From a technical point of view, this is not a change, but rather the old job definition is deleted and a new job definition is created.)

3. The following job definition is new:
SAP_REORG_ORPHANED_JOBLOGS (program RSTS0024)

SAP on Linux

Monday, September 17th, 2007

I was at my Chennai office to conduct training and I called it as “SAP on Linux
I started by Thursday for two days training, to meet some of my counterparts and friends out there.

The class was packed with around 20 new joiners, who have just started to venture into SAP Basis. I started my session by keeping in mind: On the long run; if they have to make a choice between Windows and Linux/UNIX on SAP, there wouldn’t be a second thought to have the fun with Linux.

I picked up RedHat Linux for the demo session; since I had deployed FIVE SAP systems at my Bangalore office and they are running well on RedHat AS-4 and CentOS-5 [The number FIVE really matters for me]

I would like to paste the contents of some of the important slides:

    0.ENV_VARIABLE settings :

On Bash shell before you run ./sapinst as root


• JAVA_HOME=/opt/java1.4;
export JAVA_HOME
• SAPINST_JRE_HOME=/opt/java1.4/jre;
export SAPINST_JRE_HOME
• PATH=$PATH:/opt/java1.4/bin;
export PATH
• PATH=$PATH:/opt/java1.4/jre/bin;
export PATH

    1. Aditional Package Information for RHEL-4

: rpm -ivh

• glibc-2.3.4-2.9.x86_64.rpm
• kernel-smp-2.6.9-42.EL.x86_64.rpm [The kernel patch is important]
• glibc-common-2.3.4-2.9.x86_64.rpm
• mkinitrd-4.2.1.6-1.x86_64.rpm
• IBMJava2-AMD64-142-SDK-1.4.2-7.0.x86_64.rpm [For Java]
• saplocales-2.3.4-3.x86_64.rpm
• libaio-0.3.103-3.x86_64.rpm‎ [To avoid Oracle: error while loading Libraries libio.so.1 ]

    3. Important SAP Notes

• Red Hat Enterprise Linux 5: Installation and Upgrade (Note 1048303)
• Red Hat Enterprise Linux 3 and 4: Installation and upgrade (Note 722273)

I packed up on Sunday night after the fun with the same ‘ol feelings; Chennai, it’s still not a classic rock


Tail:
Closely an year back at the same workplace: My first CRM installation on “ ONE ” server out of 30 other running SAP servers.
I proposed to do it on Linux, but it didn’t happened since the senior was comfortable with Windows-2003. I said to myself “My call is not too far but FAR and the count started from FIVE

    Current Music:- The temple of the king by Rainbow -

Xen: I am a para-virtualized one!

Thursday, September 6th, 2007

The party over and my virtual machine is ready for topping with SAP.

One point: I have done a kernel upgrade from 2.6.18-8 to 2.6.18-8.1.8 at the guest OS level; in fact the dom0 machine too.

Heck with, I wanna know what would happen if I use the normal kernel on my PV/guest_OS and I change the default kernel-2.6.18-8.1.8.el5xen to kernel-2.6.18-8.1.8.el5 :)

[fubar@blxvirtual ~]# xm reboot cenos5v

screwed! [Didn’t came up]

Later I have resolved the issue. All I have done

mount my image

[foobar@blxvirtual sagar]# lomount -diskimage /var/lib/xen/images/cenos5v.img -partition 1 /vipin

[foobar@blxvirtual sagar]# cd /vipin/grub/grub.conf

change default 1 to 0 :)

Happy Xenning around !!!

500 Internal Server Error Web Dynpro Container/SAP J2EE Engine/6.40 [Why it shows 640 instead 700]

Friday, July 20th, 2007

I was facing an issue with a newly installed SAP-NWSR2:

Lot of search happened over the net and SDN, but real men keep their words.

Installed components are:

PI-EP-BI-Add-Ins[V.7] SP-09, IBM-JAVA-1.4.2|64 bit on a single RH-AS-4 Linux box with Oracle-10g.

I was able to log onto /exchangeProfile and /irj for portal

RWB throws error after loggin:

Following error occurred while executing the application:

Error during communication with System Landscape Directory: HTTP response code: 403 (Forbidden)

Display Stack Trace

    Stack trace for the above error message is:

com.sap.aii.rwb.exceptions.BuildLandscapeException: Error during communication with System Landscape Directory: HTTP response code: 403 (Forbidden)
at com.sap.aii.rwb.agent.server.SLDAgentBean.convertException(SLDAgentBean.java:1472)
at com.sap.aii.rwb.agent.server.SLDAgentBean.buildSLD(SLDAgentBean.java:773)
at com.sap.aii.rwb.agent.server.SLDAgentBean.provideSld(SLDAgentBean.java:269)
at com.sap.aii.rwb.agent.server.SLDAgentBean.getXIDomain(SLDAgentBean.java:711)
at com.sap.aii.rwb.agent.api.SLDAgentObjectImpl0.getXIDomain(SLDAgentObjectImpl0.java:876)
at com.sap.aii.rwb.agent.api.SLDAgent_Stub.getXIDomain(SLDAgent_Stub.java:1665)
at com.sap.aii.rwb.agent.client.EJBAgent.getXIDomain(EJBAgent.java:255)
at com.sap.aii.rwb.util.web.model.AppMainModel.getSelectedDomain(AppMainModel.java:137)
at com.sap.aii.rwb.util.web.model.DomainRep.build(DomainRep.java:100)
at com.sap.aii.rwb.web.componentmonitoring.model.ObjectIdentificationTree.getComponentTree(ObjectIdentificationTree.java:102)
at jsp_component_monitoring1184877415279._jspService(jsp_component_monitoring1184877415279.java:209)
at com.sap.engine.services.servlets_jsp.server.jsp.JspBase.service(JspBase.java:112)
at com.sap.engine.services.servlets_jsp.server.servlet.JSPServlet.service(JSPServlet.java:544)
at com.sap.engine.services.servlets_jsp.server.servlet.JSPServlet.service(JSPServlet.java:186)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.sap.engine.services.servlets_jsp.server.runtime.RequestDispatcherImpl.doWork(RequestDispatcherImpl.java:321)
at com.sap.engine.services.servlets_jsp.server.runtime.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:377)
at com.sapportals.htmlb.page.PageProcessorServlet.handleRequest(PageProcessorServlet.java:68)
at com.sapportals.htmlb.page.PageProcessorServlet.doPost(PageProcessorServlet.java:22)
at com.sap.aii.rwb.web.componentmonitoring.viewcontroller.CmPageProcessor.doPost(CmPageProcessor.java:35)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.sap.engine.services.servlets_jsp.server.runtime.RequestDispatcherImpl.doWork(RequestDispatcherImpl.java:321)
at com.sap.engine.services.servlets_jsp.server.runtime.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:377)
at jsp_FC_Secure1184877411979._jspService(jsp_FC_Secure1184877411979.java:24)
at com.sap.engine.services.servlets_jsp.server.jsp.JspBase.service(JspBase.java:112)
at com.sap.engine.services.servlets_jsp.server.servlet.JSPServlet.service(JSPServlet.java:544)
at com.sap.engine.services.servlets_jsp.server.servlet.JSPServlet.service(JSPServlet.java:186)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:390)
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:264)
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:347)
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:325)
at com.sap.engine.services.httpserver.server.RequestAnalizer.invokeWebContainer(RequestAnalizer.java:887)
at com.sap.engine.services.httpserver.server.RequestAnalizer.handle(RequestAnalizer.java:241)
at com.sap.engine.services.httpserver.server.Client.handle(Client.java:92)
at com.sap.engine.services.httpserver.server.Processor.request(Processor.java:148)
at com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener.process(ApplicationSessionMessageListener.java:33)
at com.sap.engine.core.cluster.impl6.session.MessageRunner.run(MessageRunner.java:41)
at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
at java.security.AccessController.doPrivileged(AccessController.java:207)
at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:100)
at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:170)

Wait…

Query being processed

    The following error code 500 I am getting when I try:


URL:// port/nwa and /sld

500 Internal Server Error Web Dynpro Container/SAP J2EE Engine/6.40 [Why it shows 640 instead 700]
Failed to process request. Please contact your system administrator.

Root Cause
The initial exception that caused the request to fail, was:

java.lang.StringIndexOutOfBoundsException
at at java.lang.String.substring(String.java:1019)
at at com.sap.tc.webdynpro.clientimpl.html.client.HtmlClient.fillStaticTemplateContext(HtmlClient.java:516)
at at com.sap.tc.webdynpro.clientimpl.html.client.HtmlClient.sendResponse(HtmlClient.java:1213)
at at com.sap.tc.webdynpro.clientimpl.html.client.HtmlClient.retrieveData(HtmlClient.java:252)
at at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.doRetrieveData(WindowPhaseModel.java:595)

Detailed Error Information
Detailed Exception Chain

java.lang.StringIndexOutOfBoundsException
at java.lang.String.substring(String.java:1019)
at com.sap.tc.webdynpro.clientimpl.html.client.HtmlClient.fillStaticTemplateContext(HtmlClient.java:516)
at com.sap.tc.webdynpro.clientimpl.html.client.HtmlClient.sendResponse(HtmlClient.java:1213)
at com.sap.tc.webdynpro.clientimpl.html.client.HtmlClient.retrieveData(HtmlClient.java:252)
at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.doRetrieveData(WindowPhaseModel.java:595)
at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.processRequest(WindowPhaseModel.java:156)
at com.sap.tc.webdynpro.clientserver.window.WebDynproWindow.processRequest(WebDynproWindow.java:335)
at com.sap.tc.webdynpro.clientserver.cal.AbstractClient.executeTasks(AbstractClient.java:143)
at com.sap.tc.webdynpro.clientserver.session.ApplicationSession.doProcessing(ApplicationSession.java:299)
at com.sap.tc.webdynpro.clientserver.session.ClientSession.doApplicationProcessingStandalone(ClientSession.java:711)
at com.sap.tc.webdynpro.clientserver.session.ClientSession.doApplicationProcessing(ClientSession.java:665)
at com.sap.tc.webdynpro.clientserver.session.ClientSession.doProcessing(ClientSession.java:232)
at com.sap.tc.webdynpro.clientserver.session.RequestManager.doProcessing(RequestManager.java:152)
at com.sap.tc.webdynpro.serverimpl.defaultimpl.DispatcherServlet.doContent(DispatcherServlet.java:62)
at com.sap.tc.webdynpro.serverimpl.defaultimpl.DispatcherServlet.doGet(DispatcherServlet.java:46)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:390)
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:264)
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:347)
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:325)
at com.sap.engine.services.httpserver.server.RequestAnalizer.invokeWebContainer(RequestAnalizer.java:887)
at com.sap.engine.services.httpserver.server.RequestAnalizer.handle(RequestAnalizer.java:241)
at com.sap.engine.services.httpserver.server.Client.handle(Client.java:92)
at com.sap.engine.services.httpserver.server.Processor.request(Processor.java:148)
at com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener.process(ApplicationSessionMessageListener.java:33)
at com.sap.engine.core.cluster.impl6.session.MessageRunner.run(MessageRunner.java:41)
at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
at java.security.AccessController.doPrivileged(AccessController.java:207)
at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:100)
at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:170)

***The other thing I found was:****


dev_jrfc.trc under /usr/sap/LNW/DVEBMGS00/j2ee/cluster/server0

LOCATION CPIC (TCP/IP) on local host with Unicode
ERROR partner '127.0.0.1:sapgw00' not reached
TIME Fri Jul 20 17:06:34 2007
RELEASE 700
COMPONENT NI (network interface)
VERSION 38
RC -10
MODULE nixxi.cpp
LINE 2764
DETAIL NiPConnect2
SYSTEM CALL connect
ERRNO 111
ERRNO TEXT Connection refused
COUNTER 2
Return code: RFC_FAILURE(1)
error group: 102
key: RFC_ERROR_COMMUNICATION
Error> occured >Fri Jul 20 17:06:35,859< RfcException:
message: Connect to SAP gateway failed
Connect_PM TYPE=A ASHOST=blxnws00 SYSNR=00 GWHOST=blxnws00 GWSERV=sapgw00 PCS=1
LOCATION CPIC (TCP/IP) on local host with Unicode
ERROR partner 'blxnws00:sapgw00' not reached
TIME Fri Jul 20 17:06:35 2007
RELEASE 700
COMPONENT NI (network interface)
VERSION 38
RC -10
MODULE nixxi.cpp
LINE 2764
DETAIL NiPConnect2
SYSTEM CALL connect
ERRNO 111
ERRNO TEXT Connection refused
COUNTER 2
Return code: RFC_FAILURE(1)
error group: 102
key: RFC_ERROR_COMMUNICATION


In trace file under work DIR:


Error occurred while preloading classes of security providers from jre/lib/ext folder: java.util.zip.ZipException: No such file or directory jar:file:/opt/IBMJava2-amd64-142/jre/lib/ext/ibmjceprovider.jar

I thought; does IBM-Java sucks!!! Nay….

Why the hell… we have gotta the Support Pack; Mr.Luke go ahead with it SP-11 for ALL execept
BW(ABAP) should be 12 [I suggest].

HappY nights and wee hours again… I have gotta some more midnight oil :)

Kernel Update List

Sunday, July 8th, 2007

There were times I need to get the update of latest stable version of the Linux kernel, pre-patch, snapshots of 2.6.x.x 2.4.x and with a single click; you are watching :)

Kernel update list:

I am still a linux boy and SAP on top of it now!

Keyboard Hack: (®, µ, æ, £, ©, ñ, ±)

Thursday, January 4th, 2007

I have been looking for something like this. No downloads or setting changes necessary. Quick reference sheet on how to type lesser used, but often needed symbols and characters.

read more

New Year’s Resolutions for Unix SysAdmins

Wednesday, January 3rd, 2007

Obviously Linux Sys-Admins too!

I feel it’s a good deal shown up by Sandra.

Sandra Henry-Stocker has been administering Unix systems for nearly 18 years. She describes herself as “USL” (Unix as a second language) but remembers enough English to write books and buy groceries. She currently works for TeleCommunication Systems, a wireless communications company, in Annapolis, Maryland, where no one else necessarily shares any of her opinions. She lives with her second family on a small farm on Maryland’s Eastern Shore. Send comments and suggestions to sandra@toadmail.com.

New Years celebrations have been going on for as long as 4,000 years. Some historians date them back to the ancient Babylonians welcoming the return of Spring. And New Years resolutions have probably been made throughout these years. While their success rate does not seem to have improved over the millennia, the practice has still not lost its appeal and the beginning of each new year is a time when many people will be thinking about what they want to improve both in their personal lives and in their jobs. So, what are some likely resolutions for Unix sysadmins? Here are a dozen worth considering.

Learn a new skill: Maybe you’ve put off learning Perl, Python, Ruby, MySQL, PHP or Java. If so, then now while the new year is yet young, set yourself a goal of learning a new language in the next twelve months. If you don’t like working completely on your own, consider community college or online courses as a cost effective alternative. Take a look at O’Reilly’s Learning Lab. Self-training can work if you get yourself a good book and stick to it, working through all of the exercises, but you will probably have an easier time learning a new skill if you start off with a firm goal of completing some kind of project related to your work or personal interests.

Be more diligent about security patches
: Establish a schedule for routine application of security patches on the systems you manage and make an effort to stay informed of newly discovered security issues. Sign up for newsletters and alerts from your system vendors and set up a regular weekly time for reviewing them and highlighting any actions that you might need to take to keep your systems secure and up-to-date.

Change your root passwords!: If you’ve been using the same passwords on your servers for all of 2005 (or longer), change them now and commit to setting new passwords every 3-6 months. And make sure the passwords that you select are neither easy to guess nor impossible to remember. At some of the places I’ve worked over the years, root passwords were stored in a safe where they could be accessed by the sysadmins or management as needed. At other places, root passwords were stored in an encrypted file so that, if a sysadmin forgot the password to one of many servers, he could retrieve it while the passwords remained unavailable to non-authorized users.

Work Smarter: Organize your work so that you spend less time moving between assignments. Find ways to combine tasks. Reduce the number of times that you have to deal with any single issue.

Document Everything: Don’t leave important processes dependent on the skill set or memory banks of one individual — even if that one individual is you! Compile all of the critical aspects of managing your network or your servers into a reliable repository of system knowledge. You never know when you or someone else will want to move on to a new assignment. Leaving good documentation means someone else can follow in your footsteps and you can move forward with a clean conscience.

Find a better job or make your current job better: Be honest with yourself about what you like and don’t like about what you’re currently doing. Make a list of those things that you’d like to improve and then ask yourself how you might go about making those improvements.

Learn Linux: If you’re working on some other Unix platform and have little or no experience with Linux, dedicate some time to working on a Linux system. One of the PCs that I have at home is running Linux. I bought it on eBay for about $50 — a very small investment — and installed Fedora Core. I can’t imagine a better use for a Pentium III.

Learn the basics of IPv6
: I’ve heard we won’t need to switch until 2025, but it’s not too early to start anticipating what the future of the Internet is going to look like.

Get yourself certified: There are lots of certifications available for Unix and networking professionals. Wondering if you can prove your worth when you apply for a new position? Maybe it’s time to pass some exams and add some letters to your resume.

Lessen your dependencies on closed software: Use OpenOffice instead of Microsoft Office. Take advantage of the wide range of available open software to help manage your systems.

Get a Safari account and keep up-to-date on the latest Unix topics. With more than 3,000 books online, Safari can help you learn new skills without investing a fortune in books. Better yet, get your boss to buy you an account.

Have a Life: Don’t be so much of a geek that you don’t take time out for the other things that you enjoy. Go camping or dancing or sing with a Barbershop Quartet. Join audible.com and listen to books on CD during your commute.