Ubuntu 8.04 installation script

Installation, configuration and troubleshooting of the Cisco VPN Client on Linux systems

Ubuntu 8.04 installation script

Postby cesar_spain » Wed Jun 17, 2009 10:01 pm

Dear all:

I had written a script for installing Cisco VPN client in Ubuntu 8.04. Since it is easy to understand, it can be easily adjusted to other distros and versions.

I am posting it here, hope it helps,

Code: Select all
#!/bin/bash
#####################################
# INSTALL_VPN.SH
#####################################
#  Script for installing the Cisco
# VPN Client in Ubuntu 8.04 - 64 bits
#
#   It can be easily adapted for
# other distros and architectures
#####################################
# Author : Cesar Delgado Gonzalez
# Version: 1.0
# Date   : 10-March-2007
#####################################

##################################
# ENVIRONMENT
#################################

# 0.- General Variables
#----------------------
ERROR=1
OK=0
TRIES=1 # Attempts per Mirror

# 1.- Where to download
#----------------------
WORK_DIR=$HOME

# Syntax: Program - Mirror 1 - Mirror 2 ... Mirror N

# 64 bits Arch
PROGRAM=(vpnclient-linux-x86_64-4.8.01.0640-k9.tar.gz                 
         http://projects.tuxx-home.at/ciscovpn/clients/linux/4.8.01/  \
         http://www.longren.org/files/                                \
         )

# 32 bits Arch (not required, x86_64 source code works properly in i386 machines)
#PROGRAM=(vpnclient-linux-4.8.00.0490-k9.tar.gz                 \
#         http://projects.tuxx-home.at/ciscovpn/clients/linux/4.8.00/  \
#         http://www.longren.org/files/                                \
#         )


PATCH=(vpnclient-linux-2.6.24-final.diff             
       http://projects.tuxx-home.at/ciscovpn/patches/ \
       )

PATCH_2=(cisco_skbuff_offset.patch                     
         http://tuxx-home.at/projects/cisco-vpnclient/ \
        )

# 3.- Current Kernel Version
#---------------------------
KERNEL=`uname -r`
TYPE_KERNEL=`uname -r | awk 'BEGIN {FS="-";}{print $3}'`


################################################################################
# MODULE MISCELLANEOUS ====> GENERAL FUNCTIONS
################################################################################

#-----------------------------------------------------------------------
# AYUDA
#-----------------------------------------------------------------------
#  Muestra la ayuda por pantalla
#-----------------------------------------------------------------------

ayuda()
{
   echo "installVPN.sh --> Install Cisco VPN Client in Ubuntu 8.04"
   echo "  Best way to use it is through KVPNC, since it integrates it"
}


#-----------------------------------------------------------------------
# TRATA_ERRORES
#-----------------------------------------------------------------------
#   Trata todos los posibles errores del script.
#
#    Se considerar salida err ea a toda salida del script sin la creaci
#  de una estructura de datos (por ejm.: opcion -h provoca salida errea).
#
#     Variables de entrada:
#         $1 = Tipo de Error
#         $2 = Ruta a la que el usuario no tiene acceso (inexistencia o permisos)
#         $3 = Directorio de Trabajo
#-----------------------------------------------------------------------
trataErrores()
{

  ERROR="1"

  case $1 in
     -ayuda) # Solicitud de ayuda
            ayuda
        exit $ERROR;;

     -tryMirror)
        echo "===========> Trying PACKAGE: $3 "
        echo "               from MIRROR : $2 "
        echo;;

     -downloadSucceed)
        echo
        echo "*********************************************************************************"
        echo " Download succeed FOR  $3 "
        echo "                  FROM $2 "       
        echo "*********************************************************************************"
        echo ""  ;;

     -downloadFailed)
        echo
        echo "*********************************************************************************"
        echo "ERROR: PACKAGE $3 not found in"
        echo "       MIRROR  $2"
        echo "*********************************************************************************"
        echo "" ;;

     -noMirrors) # There is no mirrors for this package
         echo
         echo "*********************************************************************************"
         echo "ERROR ==> Package $2 has no mirror list"
         echo "*********************************************************************************"
         exit $ERROR;;


     -packageNotFound) # Package not found on any mirror
         echo
         echo "*********************************************************************************"
         echo "ERROR ==> Package $2 not found on any mirror of the list"
         echo "*********************************************************************************"
         exit $ERROR;;

     -requiredPack) # Failed installing required packages
         echo "ERROR ==> Can't install required packages: Linux source + Build Essentials"
         exit $ERROR;;
     
     -decompress)
           echo " ERROR ==> File / Directory Not Available => Unpack Failed, cleaning and exiting"
           cleanEnvironment
           exit $ERROR ;;

  esac
}

################################################################################
# MODULE DOWNLOAD ====> FUNCTIONS FOR DOWNLOADING THE PACKAGES
################################################################################

#-----------------------------------------------------------------------
#  DOWNLOAD PACKAGE
#-----------------------------------------------------------------------
#   Try to download one package
#  from several mirrors. If all of them
#  fails, return 1
#
#   $1 = Number of tries per mirror
#   $2 = Package to download
#   $3 ...  $N = List of mirrors
#-----------------------------------------------------------------------
downloadPackage () {


   # 1.- Check that exist at least one Mirror on the input List
   #-----------------------------------------------------------
   if [ $# = 2 ]; then
      trataErrores -noMirrors $2


   # 2.- Search for a the package on the mirrors list
   #-----------------------------------------------------------
   else

       POSITION=1
       for MIRROR in $@; do

          # 2.1.- Capture tries per mirror
          if [ $POSITION = 1 ]; then
               TRIES=$MIRROR

          # 2.2.- Capture package name
          elif [ $POSITION = 2 ]; then
               PACKAGE=$MIRROR

          # 2.3.- Try to get the package from current mirror
          else

                # Try the download
                trataErrores -tryMirror $MIRROR $PACKAGE
                `wget --tries=$TRIES $MIRROR$PACKAGE`

                # Check if succeed
              if [ $? = $OK ]; then
                   trataErrores -downloadSucceed $MIRROR$PACKAGE $PACKAGE
                   break;
                     
              fi

               # Report the fail
               trataErrores -downloadFailed $MIRROR$PACKAGE $PACKAGE

          fi

          # 2.4.- Incrementing position
          POSITION=`expr $POSITION + 1`

       done
   fi

   # 4.- Package not found of the list of mirrors
   #-----------------------------------------------------------
   if [ $POSITION = $# ] && [ $? != $OK ]; then
    trataErrores -packageNotFound $PACKAGE
   fi
}

#-----------------------------------------------------------------------
#  GET PACKAGES
#-----------------------------------------------------------------------
#   Downloading the packages
# from the current mirror
#-----------------------------------------------------------------------
getPackages() {

        echo  "================================================================================"
        echo  "                    DOWNLOADING CISCO VPN CLIENT "         
        echo  "================================================================================"
        echo
        downloadPackage $TRIES ${PROGRAM[*]}
         
        echo  "================================================================================"
        echo  "      DOWNLOADING UBUNTU PATCHES FOR KERNEL  = ${KERNEL} "
        echo  "================================================================================"
        echo
        downloadPackage $TRIES ${PATCH[*]}
        downloadPackage $TRIES ${PATCH_2[*]}
}

#-----------------------------------------------------------------------
#  INSTALL REQUIRED PACKAGES
#-----------------------------------------------------------------------
#   Procedure that install required
#-----------------------------------------------------------------------
installDependencies() {

     echo  "=============================================================================================="
     echo  " INSTALLING REQUIRED UBUNTU PACKAGES: linux kernel + build essentials + unpacking packages    "
     echo  "=============================================================================================="
     echo  " --> Command: "
     echo  " sudo apt-get install  linux-${TYPE_KERNEL} linux-headers-${KERNEL} build-essential gcc gzip bzip zip unzip rar unrar " 
     sudo apt-get install  linux-${TYPE_KERNEL} linux-headers-${KERNEL} build-essential gcc gzip bzip2 zip unzip rar unrar
     
     # Error Treatment
     if [ ! "$?" -eq "$OK" ] ; then
        trataErrores -requiredPack
     fi
}


################################################################################
# MODULE INSTALL ====> FUNCTIONS FOR COMPILING AND INSTALLING PROGRAM
################################################################################

#-----------------------------------------------------------------------
#  UNPACK PACKAGES
#-----------------------------------------------------------------------
#   Uncompress packages. Check file extension and uncompress
#  properly
#-----------------------------------------------------------------------
unpackPackages() {


   #----------------------
   # ENVIRONMENT
   #----------------------
   local OUT=$OK

   #----------------------
   # ACTIONS
   #----------------------

   # 0.- Tracing
   #---------------------
   echo  "================================================================================"
   echo  "             UNPACK PACKAGE: $1  "
   echo  "================================================================================"
   echo

   # 1.- Deflating File
   #------------------------------------------------------------
   echo "................................. FILE DECOMPRESSION .............................. "
   echo "File Extension: \${1##*.}=${1##*.}"
   local EXTENSION=${1##*.}
   echo "File Name: \${1%.*}=${1%.*}"
   FILENAME=${1%.*}

   case "$EXTENSION" in
     gz)  echo " ===> Decompress gz: gunzip -d $1"
          gunzip -d "$1" ; OUT="$?" ;;
     bz)  echo " ===> Decompress bz: bzip2 -d $1"
          bzip2 -d "$1"   ; OUT="$?" ;;
     zip) echo " ===> Decompress .zip: unzip $1"
          unzip "$1"     ; OUT="$?" ;;
     rar) echo " ===> Decompress .rar: unrar $1"
          unrar "$1"     ; OUT="$?" ;;
     *) FILENAME="$1" ;;
   esac

   # 2.- Unpacking File
   #------------------------------------------------------------
   if [ "$OUT" -eq "$OK" ]; then
        TAR=${FILENAME##*.}

        if [ -n $TAR ] ; then # ================> There is an extension to check

            if [ "$TAR" == "tar" ] ; then  # ====> Extension = .tar
                 echo ".............................. UNPACK TAR FILE .............................. "
                 
                 # 2.1.- Tar Base Detection
                 echo " ---> TAR base path detection: tar -tf ""$FILENAME"" | awk 'BEGIN {FS=""/""} {print $1}' | uniq"
                 TAR_BASE=`tar -tf "$FILENAME" | awk 'BEGIN {FS="/"} {print $1}' | uniq`
                 echo " TAR Base = $TAR_BASE"

                 # 2.2.- Unpacking Tar File
                 echo " --> Unpack .tar: tar-xvf $FILENAME"
                 tar xvf "$FILENAME"

                 # 2.3.- Returning Output path to File
                 local RUTA=`dirname $FILENAME`
                 FILENAME="${RUTA}/${TAR_BASE}"
                 OUT="$?"
            fi
        fi
   else
         trataErrores -decompress
   fi


   # 3.- Error Treatment
   #------------------------------------------------------------
   echo "................................... RESULTING FILE  ................................... "
   echo " Filename = $FILENAME "
   if [ -e $FILENAME ] && [ "$?" -eq "$OK" ] ; then
        echo " File / Directory Available     => Unpack OK"
   else
        trataErrores -decompress
   fi

}

#-----------------------------------------------------------------------
#  APPLY PATCHES
#-----------------------------------------------------------------------
#   Apply all Ubuntu specific patches
#-----------------------------------------------------------------------
applyPatches() {
     

   #----------------------
   # ACTIONS
   #----------------------
   
     echo  "================================================================================"
     echo  " APPLY PATCHES AND ADJUSTMENTS  "
     echo  "================================================================================"
     echo "cd ""${PROGRAM[0]}"""
     cd "${PROGRAM[0]}"


     # 1.- Adjusting MakeFile
     #---------------------
     echo " ......................... ADJUSTING MAKEFILE .............................. "
     echo " ========> > Replace CFLAGS to EXTRA_CFLAGS"
     echo "sudo sed -i 's/CFLAGS/EXTRA_CFLAGS/g'  ""${PROGRAM[0]}/Makefile"""
     sudo sed -i 's/CFLAGS/EXTRA_CFLAGS/g'              "${PROGRAM[0]}/Makefile"
     echo "sudo sed -i 's/EXTRA_EXTRA_CFLAGS/EXTRA_CFLAGS/g'  ""${PROGRAM[0]}/Makefile"""
     sudo sed -i 's/EXTRA_EXTRA_CFLAGS/EXTRA_CFLAGS/g'  "${PROGRAM[0]}/Makefile"
     
     echo
     echo "  Resulting MakeFile"
     cat ${PROGRAM[0]}/Makefile

     # 2.- Applying Patches
     #---------------------
     echo " ......................... APPLYING PATCHES .............................. "

     echo "......... sudo patch < ""${PATCH[0]}"""
     sudo patch < "${PATCH[0]}"

     echo "......... sudo patch < ""${PATCH_2[0]}"""
     sudo patch < "${PATCH_2[0]}"
}

#-----------------------------------------------------------------------
#  COMPILE PROGRAM
#-----------------------------------------------------------------------
#   Compile and install program
#-----------------------------------------------------------------------
compileProgram() {
     echo  "================================================================================"
     echo  " COMPILE AND INSTALL PROGRAM  "
     echo  "================================================================================"
     echo "cd ""${PROGRAM[0]}"""
     cd "${PROGRAM[0]}"
   
     echo " =======> Installing VPN Client"
     echo "......... sudo ""${PROGRAM[0]}/vpn_install"""
     sudo "${PROGRAM[0]}/vpn_install"

     if [ "$?" -eq "$OK" ] ; then
         echo " =======> Starting Cisco VPN Client"
         echo "......... sudo /etc/init.d/vpnclient_init start"
         sudo /etc/init.d/vpnclient_init start
     else
         trataErrores -installProgram
     fi
}

#-----------------------------------------------------------------------
#  CLEAN ENVIRONMENT
#-----------------------------------------------------------------------
#   Remove everything used
#-----------------------------------------------------------------------
cleanEnvironment() {

    echo  "================================================================================"
    echo  " CLEAN ENVIRONMENT  "
    echo  "================================================================================"

    echo "......... rm -R ${PROGRAM[0]}*"
    rm -fR ${PROGRAM[0]}*

    echo "......... rm ${PATCH[0]}*"
    rm -f ${PATCH[0]}*

    echo "......... rm ${PATCH_2[0]}*"
    rm -f ${PATCH_2[0]}*
}


#-----------------------------------------------------------------------
#  INSTALL PROGRAM
#-----------------------------------------------------------------------
#   "Public" procedure of module
#-----------------------------------------------------------------------
installProgram() {

     # 1.- Unpack files
     #-------------------
     unpackPackages "${WORK_DIR}/${PROGRAM[0]}"
     PROGRAM[0]="$FILENAME"
     unpackPackages "${WORK_DIR}/${PATCH[0]}"
     PATCH[0]="$FILENAME"
     unpackPackages "${WORK_DIR}/${PATCH_2[0]}"
     PATCH_2[0]="$FILENAME"

     # 2- Apply Ubuntu Specific modifications
     #-------------------
     applyPatches

     # 3.- Compile Program
     #-------------------
     compileProgram

     # 4.- Clean Environment
     #-------------------
     cleanEnvironment
}

################################################################################
# MAIN
################################################################################
cd $WORK_DIR
installDependencies
getPackages
installProgram
exit "$OK"
#------------------------------------------------------------------------------
#                             END INSTALL VPN
#------------------------------------------------------------------------------ 
cesar_spain
Private
Private
 
Posts: 2
Joined: Wed Jun 17, 2009 9:36 pm

Re: Ubuntu 8.04 installation script

Postby tuxx-home.at » Fri Jun 19, 2009 11:24 am

Nice stuff, thanks!
User avatar
tuxx-home.at
Supreme Commander
Supreme Commander
 
Posts: 2199
Joined: Mon Jan 01, 2007 12:51 pm
Location: Vassach - Austria - Europe


Return to Cisco VPN Client on Linux systems

Who is online

Users browsing this forum: No registered users and 2 guests

cron