Softpanorama

May the source be with you, but remember the KISS principle ;-)
Contents Bulletin Scripting in shell and Perl Network troubleshooting History Humor

SUSE 10 SP2 on Dell 1950/2950 Installation Checklist

Dr. Nikolai Bezroukov

(version 2.5,  Created May 18, 2007; Last modified Apr 22, 2009)

Server: ______________________________

  1. Create Dell service partition
  2. Boot the Suse 10 DVD
  3. Partition the Harddrives  
  4. Select set of packages to be installed from Suse DVD
  5. Additional YAST Installation steps
  6. Perform Network configuration

  7. Misc configure steps before reboot

  8. Configuration steps after the system reboot

  9. Install additional packages
  10. Verify and enable standard daemons
  11. Configure accounts and groups
  12. Register server with Novell and install patches
  13. Create application specific users and home directories
  14. Perform initial hardening to satisfy audit req (should be automatic or semiautomatic)
  15. Installation of additional utilities and packages
  16. Change monitor resolution if the server will be shipped to different location
  17. Create baseline
  18. Additional items that were missed

Before You Begin

Before you install a SUSE Linux Enterprise Server 10 verify the following:

  1. You have Dell Installation and Server management disk

  2. You have a registration number from Novell

  3. DRAC card is configured and you can access it from your PC. 

  4. You are using Suse 10 installation the DVD with  SP2 not the original GA release.

  5. Server IP addresses corresponds to those in DNS.

  6. Network masks and gateway information that you have are correct.

Note: Make sure you are using Suse 10 installation the DVD with  SP2 not the original GA release.  Mistakes happen...

Step 1. Create Dell Service partition and configure RAID

  1. Install Dell Installation CD in DVD drive and reboot the server with Ctrl-Alt-Del.
  2. Configure the drives into RAID id you plan to use RAID (if you have just 4 drives and want two separate logical drives you can use Raid 1 or 10 depending on the capabilities of the controller and the level of your love for RAID 10 ;-)

    Note: If you changed RAID configuration using controller BIOS you need go to the creation of a service partition as it looks like Dell startup disk write signatures on the disks and reboot the system. You can delete it later if you do not want it (it is actually very small).

    Usually PE1950/2950 servers are  usually ordered with  4 drives if there is no NAS and 2 drives if  NAS is used. We will discuss "no-NAS" configuration here.

    The typical solution is simple mirroring as drives are cheap: that greatly simplifies maintenance and slightly increases speed of I/O. With the current size of harddrives RAID 1 is the simplest and probably most reliable RAID configuration. 

    Typically we create 2 virtual drives (again, I would like to stress that you do not need to worry about size of the drives those day; if you do just order bigger drives).
     

  3. Create Dell service partition.   

Step 2: Boot Suse SP2 Installation DVD or Other Repository

  1. Replace Dell installation CD with the Suse 10 SP 2 DVD and wait until the server boots (do not leave the console).
  2. Immediately after the server boots select Installation from the console menu (otherwise it will boot from the hard drive on expiration of "pass-through" timer -- that means that you can leave DVD in the drive even if you boot order has DVD-ROM before hard drive: very handy for remote installations).
  3. Select language, time zone, approve the license
  4. You will get to the main screen that contains several  sections:
    1. Partitioning
    2. Software installation
    3. ...
  5. Notes

Step 3. Partition the Harddrives 

Notes: 

  1. Create primary boot partition (200-300M). Type should be ext3.
  2. Create primary swap partition. Recommended size of the swap is the size of the RAM if RAM is 4G or less and half of the size of the RAM after that (actually depends on applications you will be running, but in general too much swapping is bad).  See Linux swap
  3. It is desirable to install LVM for all other partitions as this makes installation more flexible.
  4. /usr (4-6G) and /opt (4G ) can be merged with root partitio
  5. Some examples of partitioning

Example 1: mirrored pair of 36 drives (no LVM)

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda5              4128320    338524   3580032   9% /
/dev/sda2               298471     16210    266850   6% /boot
/dev/sda10             5207780    737020   4206212  15% /home
/dev/sda8              4128320    735412   3183144  19% /opt
/dev/sda9              4128320    240456   3678100   7% /tmp
/dev/sda6              4128320   1851872   2066684  48% /usr
/dev/sda7              8256696    342928   7494288   5% /var
Example 2:  mirrored pair of 73G drives (with LVM)
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/vg01-root
                       4128448    304384   3614352   8% /
/dev/sda2               297485     16507    265618   6% /boot
/dev/mapper/vg01-home
                       1032088     77000    902660   8% /home
/dev/mapper/vg01-opt   2064208    633432   1325920  33% /opt
/dev/mapper/vg01-tmp   4128448    136468   3782268   4% /tmp
/dev/mapper/vg01-usr   4128448   1404892   2513844  36% /usr
/dev/mapper/vg01-var  10321208    917848   8879072  10% /var
/dev/mapper/vg02-backup
                      17546044   6162448  10492308  38% /backup
	

Partitioning of hard drives using LVM

We will assume the first part of drive is visible as sda.

First you need to switch to the advanced mode in YAST2 Partitioner. You will see that one partition is already created.

If there are extra partitions on the boot drive you need to delete them.

  1. Create primary partition for /boot by entering +200M. Set the type of partition to Ext3 and check "format"

    sda2     /boot                200MB            4-29            (format ext3)

  2. Create another primary partition for  swap by using swap partition code from the menu For example for 64G of RAM enter +32G, but for 8G RAM or less you probably can afford 8G swap. 

    sda3     swap                32GB               30-4207
     

  3. Create extended partition for the rest of the drive

    sda4            Extended         (rest of disk)
     

  4. Create LVM partition out of extended (select Linux LVM partition type and default size)

    sda5     LVM                103GB
     

  5. Switch LVM view by clicking on LVM button and create volume group  vg01 (or vg00 if you wish) by clicking on Add group button at the top right part of the screen
     
  6. Enroll extended partition into this volume by clicking "Add volume" while extended partition is highlighted
     
  7. Within LVM create additional partitions. Use name of partitions for labels ( root for / partition). For example:

    vg00                                   103GB

    vg00    lv01            /                4GB

    vg00    lv02            /usr             8GB

    vg00    lv03            /var            12GB

    vg00    lv04            /opt             4GB

    vg00    lv05            /tmp             8GB

    vg00    lv06            /home            8GB

  8. Recheck that all partitions you created are Ext3 based.
     
  9. If you have the second pair of drives you can create logical volume vg02 for the second pair of drives  and repeat the same procedure for creating the necessary partitions on the second volume group

Notes:

Step 4.  Select set of packages to be installed from Suse DVD

Notes:

  1. In  “Base Technology” 
  2. Select "Common Code Package" and deselect:
  3. In “Graphical Environment”
  4. In Primary Functions
  5. Deselect Printserver
  6. If you plan compiling packages selec C/C++ Compiler and Tools
  7. If you plan to use Apache select Web and LAMP server
  8. If you plan to use Web administration select Web-based enterprise management
  9. Select Xen
     
  10. Notes

     

Step 5:  Additional YAST Installation steps

  1. ____ Select root password
     
  2. ____ Specify hostname and domain

Step 6: Perform network configuration

In network configuration screen

  1. Click on network configuration and change settings to the server specific (Important: Do not forget to disable IPv6, if you do not plan to use it)
  2. ___  Disable Firewall (unless you decided to use it for a particular server)
  3. ___  Disable IPv6
  4. ___  Configure network interfaces (IP, netmask, domain search, default gateway)
     
  5. ___  Enable VNC Remote administration and specify password___ 
  6. ___ Configure a Proxy server in order to access the internet, you must first configure YaST with the correct Proxy information.

Step 7: Misc configure steps before reboot
 

  1. Skip testing Internet connection
  2. Accept default CA management settings
  3. Specify local authentication method (/etc/passwd based)
  4. ___Configure the first non-root user (just yourself, at this time do not worry about replication of other accounts).

Step 8: Reboot the system and perform configuration steps after the system reboot

Open Yast2 and make the following configuration changes:

  1.  ___  In Security and Users tab select Local Security and modify default local security policies
     
  2. In User management select expert option
  3. Prepare for sudo: In group management chose system group and add yourself to wheel group.
     
  4. ___ Configure  NTP
  5. ___ Verify if telnet is installed. 
  6. ____ Verify if pure-ftpd is installed.

    Note: if you have a lot of Red Hat servers you can install  vsftpd  FTP daemon instead for consistency...

     

  7. ___   Modify /etc/hosts           
  8. ___  Modify /etc/services adding those that you need (for example SecurID)
     
  9. ___ Verify that you can access internet using FireFox.  Set proxy.
     

  10. ___ Verify NIC speed
     
  11. Notes

Step 8:   Install additional packages (generic post-install staff)

  1. ___ Install additional utilities from Suse 10 DVD
  2. ___ Update/update  Shells
  3. ___ Modify crontab adding standard corporate scripts, if necessary 
     
  4. Notes

Step 10: Verify and enable standard daemons

  1. Configure SSH for applications, if necessary (SSH is enabled out of the box in Suse)
    1. Disable SSH 1 protocol  in /etc/ssh/ssh_config
    2. You may wish to restrict IP range for SSHD daemon
     
  2. ___ Verify is xinetd is running and if necessary enable it (you can do it from Yast/Network services or console). From console:

    service --status-all

    Checking for service xinetd: unused

    chkconfig xinetd on

  3. Enable telnet and pure-ftpd, if nessesary
  4. Notes

Step 11:  Configure accounts and groups

Note: The best way is to use Red Hat style of primary group assignments: each user has GID identical to UID and all enrollment into groups is done in /etc/group

  1. ___ Install standard accounts via script
    • Note: Use bash as the default shell for all human users
  2. ___ Group staff should contain software application owners who use the servers and periodically are  grated root for maintainance).
     
  3. ___ Group operators should contain operators
     
  4. ___  Enroll yourself into the group wheel.
     
  5. ___  Edit /etc/sudoers to make group wheel root equivalent.
     
  6. Notes

Step 12: Register server with Novell and install patches

Note: Novell registration is often pain in the neck.  Be patient

  1. ___ Check if ZMD package is missing and install it, if necessary
     
  2. ___ Verify that /etc/sysconfig/proxy has correct settings for HTTP_PROXY, HTTPS_PROXY and FTP_PROXY variables. The proxy should be without authentication or you will suffer...
     
  3. Duplicate settings for HTTP_PROXY and HTTPS_PROXY  in /etc/profile:

    export http_proxy=http://special_proxy_server_ip_address:8081/
    export https_proxy=http://special_proxy_server_ip_address:8081/

  4. Source /etc/profile
  5. Created ~root/.curlrc file for CURL with the same settings (optional step, just in case)
     
  6. ___ Register the server using registration code for the server provided by Novell.  
    Note:
    At this point you should have a registration number from Novell

    suse_register -a regcode-sles=registration code -a email=ourEmailAddress

    It takes several minutes

    You can do it also do it in GUI via YAST.  See page NOVELL Registering and Updating SUSE Linux Enterprise 10 on how to do it with YAST. You generally do not need to do anything on Novell site other then create account with the email address used.

  7. ___ Install all the patches:
     
  8. ___ Check if online updates are recognized correctly via SPident:
     
  9. Notes
     

Step 13: Create application specific users and home directories

  1. ___  Create application specific users and directories
     
  2. ___  Enable NSF Create NFS mounts, if necessary
     
  3. Notes

Step 14: Perform initial hardening to satisfy audit req (should be automatic or semiautomatic):

  1. ___ Delete redundant accounts:
  2. ___ Delete redundant groups
     
  3. ___  Modify /etc/issue & motd according to company standards
     
  4. ____ Configure syslog-ng to report to remote host if such infrastructure (central log server) exists in your company (it should !)
     
  5. Enroll primary and secondary administrators into the wheel group and  activate this group in sudo: \
    %wheel ALL=(ALL) NOPASSWD: ALL

    Note: this is preferred method of controlling root access as linux does not have RBAC.
     

  6. Install writable files checking script into cron 
     
  7. Verify correctness of home directories permissions
     
  8. Populate all home directories and /root directory with .profile  and .kshrc files  (for bash users this is .bash_profile and .bashrc) and verify they are properly owned and have permissions  701
     
  9. ___  Important Check and if necessary disable test, guest and any other unused accounts if any were created during the installation.
     
  10. Notes

Step 15: Installation of additional utilities and packages

  1. ____ Install Tivoli endpoint (check ssh connectivity from TMR server before the installation)
     
  2. ___  Install SecurID client
     
  3. ___  Install Sarcheck
     
  4. ___ Install Data Protector client
     
  5. ___ Install sysstat-6.0.2 and all dependencies.
     
  6. ___ Install ksh-93r-12.9
     
  7. ___ If you plan to install Oracle 11g install the following packages
    • binutils-2.16.91.0.5

    • compat-libstdc++-5.0.7

    • gcc-4.1.0

    • glibc-2.4-31.2

    • glibc-devel-2.4-31.2

    • libaio-0.3.104

    • libaio-devel-0.3.104

    • libelf-0.8.5

    • libgcc-4.1.0

    • libstdc++-4.1.0

    • libstdc++-devel-4.1.0

    • make-3.80

    Next you need to configure kernel parameters. Configuring  kernel parameters should not be done blindly  based on recommendations of Oracle installation guide. For larger servers the recommendations are too small and can degrade performance.  You should change only parameters that are below minimum value recommended by Oracle in the quote below.  First get current values by running something like:

    /sbin/sysctl -a | egrep "kernel.shmall|kernel.shmmax|kernel.shmmn|kernel.sem"

    Here is a relevant quote from Oracle installation guide:

    Configuring Kernel Parameters

    Verify that the kernel parameters shown in the following table are set to values greater than or equal to the minimum value shown. If the current value for any parameter is higher than the value listed in this table, then do not change the value of that parameter. The procedure following the table describes how to verify and set the values.

    Note:

    The kernel parameter and shell limit values shown in the following section are minimum values only. For production database systems, Oracle recommends that you tune these values to optimize the performance of the system. Refer to the operating system documentation for more information about tuning kernel parameters.

    Parameter

    Minimum Value

    File

    semmsl

    semmns

    semopm

    semmni

    250

    32000

    100

    128

    /proc/sys/kernel/sem

    shmall

    2097152

    /proc/sys/kernel/shmall

    shmmax

    Minimum of the following values:

    ·       Half the size of the memory

    ·       4GB - 1 byte

    Note: The minimum value required for shmmax is 0.5 GB. However, Oracle recommends that you set the value of shmmax to 2.0 GB for optimum performance of the system.

    /proc/sys/kernel/shmmax

    shmmni

    4096

    /proc/sys/kernel/shmmni

    file-max

    512 * PROCESSES

    /proc/sys/fs/file-max

    ip_local_port_range

    Minimum:1024

    Maximum: 65000

    /proc/sys/net/ipv4/ip_local_port_range

    rmem_default

    4194304

    /proc/sys/net/core/rmem_default

    rmem_max

    4194304

    /proc/sys/net/core/rmem_max

    wmem_default

    262144

    /proc/sys/net/core/wmem_default

    wmem_max

    262144

    /proc/sys/net/core/wmem_max

    tcp_wmem

    262144

    /proc/sys/net/ipv4/tcp_wmem

    tcp_rmem

    4194304

    /proc/sys/net/ipv4/tcp_rmem

    To display the current value specified for these kernel parameters, and to change them if necessary, use the following steps:

    ·       Enter the commands shown in the following table to display the current values of the kernel parameters, make a note of these values and identify any values that you must change:

    Parameter

    Command

    semmsl, semmns, semopm, and semmni

    # /sbin/sysctl -a | grep sem

    This command displays the value of the semaphore parameters in the order listed.

    shmall, shmmax, and shmmni

    # /sbin/sysctl -a | grep shm

    This command displays the details of the shared memory segment sizes.

    file-max

    # /sbin/sysctl -a | grep file-max

    This command displays the maximum number of file handles.

    ip_local_port_range

    # /sbin/sysctl -a | grep ip_local_port_range

    This command displays a range of port numbers.

    rmem_default

    # /sbin/sysctl -a | grep rmem_default

    rmem_max

    # /sbin/sysctl -a | grep rmem_max

    wmem_default

    # /sbin/sysctl -a | grep wmem_default

    wmem_max

    # /sbin/sysctl -a | grep wmem_max

    tcp_wmem

    # /sbin/sysctl -a | grep tcp_wmem

    tcp_rmem

    # /sbin/sysctl -a | grep tcp_rmem

    ·       If the value of any kernel parameter is different from the minimum value, then complete the following procedure:

    Using any text editor, create or edit the /etc/sysctl.conf file, and add or edit lines similar to the following:

    Note:

    Include lines only for the kernel parameter values that you want to change. For the semaphore parameters (kernel.sem), you must specify all four values. However, if any of the current values are larger than the minimum value, then specify the larger value.

    fs.file-max = 512 * PROCESSES

    kernel.shmall = 2097152

    kernel.shmmax = 2147483648

    kernel.shmmni = 4096

    kernel.sem = 250 32000 100 128

    net.ipv4.ip_local_port_range = 1024 65000

    net.core.rmem_default = 4194304

    net.core.rmem_max = 4194304

    net.core.wmem_default = 262144

    net.core.wmem_max = 262144

    net.ipv4.tcp_wmem = 262144 262144 262144

    net.ipv4.tcp_rmem = 4194304 4194304 4194304

    Note:

    The minimum value required for shmmax is 0.5 GB. However, Oracle recommends that you set the value of shmmax to 2.0 GB for optimum performance of the system.

    By specifying the values in the /etc/sysctl.conf file, they persist when you restart the system. However, on SUSE Linux Enterprise Server systems, enter the following command to ensure that the system reads the /etc/sysctl.conf file when it restarts:

    # /sbin/chkconfig boot.sysctl on

    Enter the following command to change the current values of the kernel parameters:

    # /sbin/sysctl -p

    Review the output from this command to verify that the values are correct. If the values are incorrect, edit the /etc/sysctl.conf file, then enter this command again.

    Enter the command /sbin/sysctl -a to confirm that the values are set correctly.

    On SUSE systems only, enter the following command to cause the system to read the /etc/sysctl.conf file when it restarts:

    # /sbin/chkconfig boot.sysctl on

    On SUSE systems only, you must enter the GID of the oinstall group as the value for the parameter /proc/sys/vm/hugetlb_shm_group. Doing this grants members of oinstall a group permission to create shared memory segments.

    For example, where the oinstall group GID is 501:

    # echo 501 > /proc/sys/vm/hugetlb_shm_group

    After running this command, use vi to add the following text to /etc/sysctl.conf, and enable the boot.sysctl script to run on system restart:

    vm.hugetlb_shm_group=501

    Note:

    Only one group can be defined as the vm.hugetlb_shm_group.

    After updating the values of kernel parameters in the /etc/sysctl.conf file, either restart the computer, or run the command sysctl -p to make the changes in the /etc/sysctl.conf file available in the active kernel memory.

     

    Setting Shell Limits for the oracle User

    To improve the performance of the software, you must increase the following shell limits for the oracle user:

    Shell Limit

    Item in limits.conf

    Hard Limit

    Maximum number of open file descriptors

    nofile

    65536

    Maximum number of processes available to a single user

    nproc

    16384

    To increase the shell limits:

    Add the following lines to the /etc/security/limits.conf file:

    oracle              soft    nproc   2047

    oracle              hard    nproc   16384

    oracle              soft    nofile  1024

    oracle              hard    nofile  65536

    Add or edit the following line in the /etc/pam.d/login file, if it does not already exist:

    session    required     pam_limits.so

    Depending on the oracle user's default shell, make the following changes to the default shell start-up file:

    ·       For the Bourne, Bash, or Korn shell, add the following lines to the /etc/profile file (or the file on SUSE Linux Enterprise Server systems /etc/profile.local):

    if [ $USER = "oracle" ]; then

            if [ $SHELL = "/bin/ksh" ]; then

                  ulimit -p 16384

                  ulimit -n 65536

            else

                  ulimit -u 16384 -n 65536

            fi

    fi

    ·       For the C shell (csh or tcsh), add the following lines to the /etc/csh.login file (or the file on SUSE Linux Enterprise Server systems /etc/csh.login.local):

    if ( $USER == "oracle" ) then

            limit maxproc 16384

            limit descriptors 65536

    endif

    Refer to the "Identifying Required Software Directories" section to continue.

     

  8. Notes

Step 16: Change monitor resolution if the server will be shipped to different location

  1. If you plan to ship the server to other location change resolution to 800x600 and color depth to 16. Most older KVM switches do not support high resolution. 

Step 17:  Create baseline

  1. ___ Create the baseline of key config files for the server and burn it to CD.
     
    1. Adopt one of the scripts used in troubleshooting and run it after the installation just before giving the server to application people.
       
    2. Copy all the critical config file to /root/baseline/date directory the way JASS does this on Solaris.  Tar the directory, move it to your desktop and burn to CD.
       
  2. ___ Verify the /boot/grub/menu.lst is configured correctly.
     
  3. Notes

Step 18.  Additional installation steps that were missed

  1. Notes
     


Etc

FAIR USE NOTICE This site contains copyrighted material the use of which has not always been specifically authorized by the copyright owner. We are making such material available in our efforts to advance understanding of environmental, political, human rights, economic, democracy, scientific, and social justice issues, etc. We believe this constitutes a 'fair use' of any such copyrighted material as provided for in section 107 of the US Copyright Law. In accordance with Title 17 U.S.C. Section 107, the material on this site is distributed without profit exclusivly for research and educational purposes.   If you wish to use copyrighted material from this site for purposes of your own that go beyond 'fair use', you must obtain permission from the copyright owner. 

ABUSE: IPs or network segments from which we detect a stream of probes might be blocked for no less then 90 days. Multiple types of probes increase this period.  

Society

Groupthink : Two Party System as Polyarchy : Corruption of Regulators : Bureaucracies : Understanding Micromanagers and Control Freaks : Toxic Managers :   Harvard Mafia : Diplomatic Communication : Surviving a Bad Performance Review : Insufficient Retirement Funds as Immanent Problem of Neoliberal Regime : PseudoScience : Who Rules America : Neoliberalism  : The Iron Law of Oligarchy : Libertarian Philosophy

Quotes

War and Peace : Skeptical Finance : John Kenneth Galbraith :Talleyrand : Oscar Wilde : Otto Von Bismarck : Keynes : George Carlin : Skeptics : Propaganda  : SE quotes : Language Design and Programming Quotes : Random IT-related quotesSomerset Maugham : Marcus Aurelius : Kurt Vonnegut : Eric Hoffer : Winston Churchill : Napoleon Bonaparte : Ambrose BierceBernard Shaw : Mark Twain Quotes

Bulletin:

Vol 25, No.12 (December, 2013) Rational Fools vs. Efficient Crooks The efficient markets hypothesis : Political Skeptic Bulletin, 2013 : Unemployment Bulletin, 2010 :  Vol 23, No.10 (October, 2011) An observation about corporate security departments : Slightly Skeptical Euromaydan Chronicles, June 2014 : Greenspan legacy bulletin, 2008 : Vol 25, No.10 (October, 2013) Cryptolocker Trojan (Win32/Crilock.A) : Vol 25, No.08 (August, 2013) Cloud providers as intelligence collection hubs : Financial Humor Bulletin, 2010 : Inequality Bulletin, 2009 : Financial Humor Bulletin, 2008 : Copyleft Problems Bulletin, 2004 : Financial Humor Bulletin, 2011 : Energy Bulletin, 2010 : Malware Protection Bulletin, 2010 : Vol 26, No.1 (January, 2013) Object-Oriented Cult : Political Skeptic Bulletin, 2011 : Vol 23, No.11 (November, 2011) Softpanorama classification of sysadmin horror stories : Vol 25, No.05 (May, 2013) Corporate bullshit as a communication method  : Vol 25, No.06 (June, 2013) A Note on the Relationship of Brooks Law and Conway Law

History:

Fifty glorious years (1950-2000): the triumph of the US computer engineering : Donald Knuth : TAoCP and its Influence of Computer Science : Richard Stallman : Linus Torvalds  : Larry Wall  : John K. Ousterhout : CTSS : Multix OS Unix History : Unix shell history : VI editor : History of pipes concept : Solaris : MS DOSProgramming Languages History : PL/1 : Simula 67 : C : History of GCC developmentScripting Languages : Perl history   : OS History : Mail : DNS : SSH : CPU Instruction Sets : SPARC systems 1987-2006 : Norton Commander : Norton Utilities : Norton Ghost : Frontpage history : Malware Defense History : GNU Screen : OSS early history

Classic books:

The Peter Principle : Parkinson Law : 1984 : The Mythical Man-MonthHow to Solve It by George Polya : The Art of Computer Programming : The Elements of Programming Style : The Unix Hater’s Handbook : The Jargon file : The True Believer : Programming Pearls : The Good Soldier Svejk : The Power Elite

Most popular humor pages:

Manifest of the Softpanorama IT Slacker Society : Ten Commandments of the IT Slackers Society : Computer Humor Collection : BSD Logo Story : The Cuckoo's Egg : IT Slang : C++ Humor : ARE YOU A BBS ADDICT? : The Perl Purity Test : Object oriented programmers of all nations : Financial Humor : Financial Humor Bulletin, 2008 : Financial Humor Bulletin, 2010 : The Most Comprehensive Collection of Editor-related Humor : Programming Language Humor : Goldman Sachs related humor : Greenspan humor : C Humor : Scripting Humor : Real Programmers Humor : Web Humor : GPL-related Humor : OFM Humor : Politically Incorrect Humor : IDS Humor : "Linux Sucks" Humor : Russian Musical Humor : Best Russian Programmer Humor : Microsoft plans to buy Catholic Church : Richard Stallman Related Humor : Admin Humor : Perl-related Humor : Linus Torvalds Related humor : PseudoScience Related Humor : Networking Humor : Shell Humor : Financial Humor Bulletin, 2011 : Financial Humor Bulletin, 2012 : Financial Humor Bulletin, 2013 : Java Humor : Software Engineering Humor : Sun Solaris Related Humor : Education Humor : IBM Humor : Assembler-related Humor : VIM Humor : Computer Viruses Humor : Bright tomorrow is rescheduled to a day after tomorrow : Classic Computer Humor

The Last but not Least


Copyright © 1996-2016 by Dr. Nikolai Bezroukov. www.softpanorama.org was created as a service to the UN Sustainable Development Networking Programme (SDNP) in the author free time. This document is an industrial compilation designed and created exclusively for educational use and is distributed under the Softpanorama Content License.

The site uses AdSense so you need to be aware of Google privacy policy. You you do not want to be tracked by Google please disable Javascript for this site. This site is perfectly usable without Javascript.

Original materials copyright belong to respective owners. Quotes are made for educational purposes only in compliance with the fair use doctrine.

FAIR USE NOTICE This site contains copyrighted material the use of which has not always been specifically authorized by the copyright owner. We are making such material available to advance understanding of computer science, IT technology, economic, scientific, and social issues. We believe this constitutes a 'fair use' of any such copyrighted material as provided by section 107 of the US Copyright Law according to which such material can be distributed without profit exclusively for research and educational purposes.

This is a Spartan WHYFF (We Help You For Free) site written by people for whom English is not a native language. Grammar and spelling errors should be expected. The site contain some broken links as it develops like a living tree...

You can use PayPal to make a contribution, supporting development of this site and speed up access. In case softpanorama.org is down you can use the at softpanorama.info

Disclaimer:

The statements, views and opinions presented on this web page are those of the author (or referenced source) and are not endorsed by, nor do they necessarily reflect, the opinions of the author present and former employers, SDNP or any other organization the author may be associated with. We do not warrant the correctness of the information provided or its fitness for any purpose.

Last modified: April 23, 2009