#!/bin/sh

#ident "$script: dlmmkinitrd Build 5.93.0.9 07/08/01 16:00:00 $"

#----------------------------------------------------------------------------#
# PRODUCT :  HDLM Driver 05-60                                               #
#----------------------------------------------------------------------------#
# NAME :     dlmmkinitrd                                                     #
# FUNCTION : script for creating initrd image for boot from SAN              #
# INSTANCE :                                                                 #
# MEMO :                                                                     #
# DATE :     01-Mar-2005                                                     #
# AUTHOR :   Hina Shah                                                       #
# All Rights Reserved. Copyright (C) 2005, 2007, Hitachi, Ltd.                     #
##############################################################################
# Main Execution
##############################################################################

CURR_LANG="$LANG"
LC_ALL=C
LC_CTYPE=C
LANG=C
export LC_ALL
export LC_CTYPE
export LANG

####Commands####
AWK="/bin/awk"
BASENAME="/bin/basename"
BASH="/bin/bash"
CAT="/bin/cat"
CD="cd"
CHMOD="/bin/chmod"
CP="/bin/cp"
CPIO="/bin/cpio"
CUT="/bin/cut"
DD="/bin/dd"
DIRNAME="/usr/bin/dirname"
DLMCFGMGR="/sbin/dlmcfgmgr"
DLNKMGR="/opt/DynamicLinkManager/bin/dlnkmgr"
DU="/usr/bin/du"
ECHO="/bin/echo"
EXPR="/usr/bin/expr"
FIND="/usr/bin/find"
GAWK="/bin/gawk"
GREP="/bin/grep"
GZIP="/bin/gzip"
HOTPLUG="/sbin/hotplug"
ID="/usr/bin/id"
INSMOD="/sbin/insmod"
KERVER=`/bin/uname -r`
KERNEL_2_4=0
KERNEL_2_6=0
KERNEL_2_18=0
LDD="/usr/bin/ldd"
LOGGER="/usr/bin/logger"
LS="/bin/ls"
LN="/bin/ln"
LSMOD="/sbin/lsmod"
MKDIR="/bin/mkdir"
MKE2FS="/sbin/mke2fs"
MKNOD="/bin/mknod"
MODPROBE="/sbin/modprobe"
MOUNT="/bin/mount"
MV="/bin/mv"
NASH="/sbin/nash"
PATH="/bin:/sbin:/usr/bin:/usr/sbin:$PATH"
POPD="popd"
PUSHD="pushd"
PWD="/bin/pwd"
RM="/bin/rm"
SED="/bin/sed"
SH="/bin/sh"
SLEEP="/bin/sleep"
SORT="/bin/sort"
STRIP="/usr/bin/strip"
TAIL="/usr/bin/tail"
TOUCH="/bin/touch"
UDEV="/sbin/udev"
UDEVINFO="/usr/bin/udevinfo" 
UDEVSTART="/sbin/udevstart"
UNAME="/bin/uname"
UNMOUNT="/bin/umount"
WC="/usr/bin/wc"

#####Important directories####
TMPDIR="/etc/opt/DynamicLinkManager/tmp"
MAPPER_DIR="/dev/mapper"
MODULES_DIR="/lib/modules/$KERVER"
PTS_DIR="/dev/pts"
SYSTEM_ROOT="/opt/DynamicLinkManager/Root"
SHM_DIR="/dev/shm"
UDEV_DIR="/etc/udev/"

#####Referred files#####
BACKUP="$TMPDIR/backup.$$"
CFGMGR_LOG="/var/opt/DynamicLinkManager/log/dlmcfgmgr1.log"
CONSOLE_DEVICE="/dev/console"
DEST_LOG1="$SYSTEM_ROOT/etc/opt/DynamicLinkManager/hdlmboot1.log"
DEST_LOG2="$SYSTEM_ROOT/etc/opt/DynamicLinkManager/hdlmboot2.log"
DEST_LOG3="$SYSTEM_ROOT/etc/opt/DynamicLinkManager/hdlmboot3.log"
DEST_LOG="$SYSTEM_ROOT/etc/opt/DynamicLinkManager/hdlmboot.log"
DEVICE_FILE="/proc/devices"
DEV_DIR="/dev"
DLMBOOTSUPPORT="/opt/DynamicLinkManager/bin/dlmbootsupport"
DLMPROP="/etc/opt/DynamicLinkManager/dlmmkinitrd.conf"
EFIRTC_DEVICE="/dev/efirtc"
FILENAME="dlmmkinitrd"
HDLM_COMMON_KNL_CHK="/etc/sysconfig/hdlm-scripts/dlmcommonknlcheck"
HDLMLIB="$TMPDIR/initrdlib.$$"
HDLMLOG="/etc/dlmtemplog"
HDLMMNT="$TMPDIR/initrdmntpt.$$"
IMAGE="$TMPDIR/initrd.$$"
LOCKFILE="$TMPDIR/.dlmmkinitrd.lock"
MODULESFILE="/etc/modules.conf"
MTAB="/etc/mtab"
NULL_DEVICE="/dev/null"
PTMX_DEVICE="/dev/ptmx"
RAM_DEVICE="/dev/ram"
RAM1=ram1
RTC_DEVICE="/dev/rtc"
STTY_DEVICE="/dev/systty"
TTY_DEVICE="/dev/tty"
TTY_SDEVICE="/dev/ttyS"
UDEV_CONF_FILE="/etc/udev/udev.conf"
VERSION_INFO_FILE="/etc/opt/DynamicLinkManager/hdlm_kernel_version"
ZERO_DEVICE="/dev/zero"

#####Other Variables#####
ALERT_INSMOD_FLAG=0
BACKUP_CP_SUCCESS=0
FS_DRIVER=""
FS_MODULE=""
HBA_DRIVER=""
HBA_MODULE=""
HDLM_DRIVER=""
HDLM_INITRD=""
KERNEL_ARRAY=( [0]="2.4.21-20.EL" [1]="2.4.21-20.ELsmp" [2]="2.4.21-20.ELhugemem" [3]="2.4.21-27.EL" [4]="2.4.21-27.ELsmp" [5]="2.4.21-27.ELhugemem" [6]="2.4.21-32.0.1.EL" [7]="2.4.21-32.0.1.ELsmp" [8]="2.4.21-32.0.1.ELhugemem" [9]="2.4.21-37.EL" [10]="2.4.21-37.ELsmp" [11]="2.4.21-37.ELhugemem" [12]="2.6.9-11.EL" [13]="2.6.9-11.ELsmp" [14]="2.6.9-11.ELhugemem" [15]="2.6.9-34.EL" [16]="2.6.9-34.ELsmp" [17]="2.6.9-34.ELhugemem" [18]="2.6.9-34.ELlargesmp" [19]="2.6.9-22.EL" [20]="2.6.9-22.ELsmp" [21]="2.6.9-22.ELhugemem" [22]="2.4.21-47.EL" [23]="2.4.21-47.ELsmp" [24]="2.4.21-47.ELhugemem" [25]="2.6.9-42.EL" [26]="2.6.9-42.ELsmp" [27]="2.6.9-42.ELhugemem" [28]="2.6.9-42.ELlargesmp" [29]="2.6.9-42.0.3.EL" [30]="2.6.9-42.0.3.ELsmp" [31]="2.6.9-42.0.3.ELhugemem" [32]="2.6.9-42.0.3.ELlargesmp" [33]="2.6.9-55.EL" [34]="2.6.9-55.ELsmp" [35]="2.6.9-55.ELhugemem" [36]="2.6.9-55.ELlargesmp" [37]="2.6.18-8.el5" [38]="2.6.18-8.el5PAE")
RAMDISKFILES=""
ROOT_DRIVER=""
ROOT_MODULE=""
ROOT_PART=""
SCSI_DRIVER=""
SCSI_MODULE="scsi_mod sd_mod"
SKIP_CLEANUP=0
SLEEP_INTERVAL="10s"
STATUS=0
SUPPORTED_FS="ext3 ext2"
SUPPORTED_HBA=""
SYSLOG_TAG="dlmmkinitrd"
USB_DRIVER=""
USB_LIBMODULE="uhci-hcd ohci-hcd ehci-hcd"
USB_MODULE="uhci_hcd ohci_hcd ehci_hcd"
UDEV_FLAG=0
VALUE=""

#############################################################################
# Messaging section

VERSION=`$UNAME -r | $GAWK -F "." '{print $2 }'`
VERSION_1=`$UNAME -r | $GAWK -F "." '{print $3}' | $GAWK -F "-" '{print $1}'`
if [ $VERSION -eq 4 ] ; then
	KERNEL_2_4=1
elif [ $VERSION_1 -eq 9 ] ; then
	KERNEL_2_6=1
else
        KERNEL_2_18=1
fi

#Variable declaration for LVM support
if [ $KERNEL_2_6 -eq 1 ] || [ $KERNEL_2_18 -eq 1 ]
then
LVM_ARCHIVE="/etc/lvm/archive"
LVM_DRIVER_BEG=""
LVM_MODULE_BEG=""
LVM_DRIVER_END=""
LVM_MODULE_END=""
LVM_STATIC=/sbin/lvm.static
LVM_CONF_HDLM="/etc/lvm/lvm.conf_HDLM.$$"
LVM_CONF_SCSI="/etc/lvm/lvm.conf_SCSI.$$"
LVM_CONF=/etc/lvm/lvm.conf
LVM_BACKUP=/etc/lvm/backup
READLINK=/usr/bin/readlink
TR=/usr/bin/tr
PVSCAN=/sbin/pvscan
DMSETUP=/sbin/dmsetup
LVM_CONTROL=/dev/mapper/control
SCSI_LVM_FILTER='filter=["a|sd*|"]'
SCSI_LVM_TYPES='types=["fd",16]'
SCSI_LVM_MD_COMPONENT_DETECTION='md_component_detection=1'
SD_INSERTED=0
LVM_CONF_TEMP="/etc/lvm/lvm.conf_TEMP.$$"
VGSCAN=vgscan
VGCHANGE=vgchange
VGEXPORT=vgexport
VGIMPORT=vgimport
PVSCAN_INIT=pvscan
fi

#Variables for messges:
if [ "$CURR_LANG" == "ja_JP.eucjp" -o "$CURR_LANG" == "ja_JP.eucJP" ]; then
dlmmkinitrd_I01="KAPL12305-I ֡ȥǥݡȥƥƥμ¹Ԥ桼ˤäǤޤ"
dlmmkinitrd_I02="KAPL12302-E ֡ȥǥݡȥƥƥʣƱ˼¹ԤǤޤ"
dlmmkinitrd_I03="KAPL12301-E ֡ȥǥݡȥƥƥdlmmkinitrdȤ̾ΤΤߤǼ¹ԤǤޤ"
dlmmkinitrd_I04="KAPL12329-I ֡ȥǥݡȥƥƥ򳫻Ϥޤ"
dlmmkinitrd_I05="KAPL12330-I ֡ȥǥݡȥƥƥλޤ"
dlmmkinitrd_I06="KAPL12303-E եޤϥǥ쥯ȥ꤬¸ߤޤ󡣥ե̾ ="
dlmmkinitrd_I08="KAPL12306-I RAMǥ᡼եιꥹȤǤ"
dlmmkinitrd_I09="KAPL12307-I RAMǥե륷ƥǤ"
dlmmkinitrd_I10="KAPL12308-I RAMǥե륷ƥޥǤޥȥݥ ="
dlmmkinitrd_I11="KAPL12309-I RAMǥ˥ե򥳥ԡǤ"
dlmmkinitrd_I12="KAPL12310-I linuxrcեǤ"
dlmmkinitrd_I13="KAPL12311-I RAMǥfstabեǤ"
dlmmkinitrd_I14="KAPL12312-I RAMǥ˥ǥ쥯ȥǤ"
dlmmkinitrd_I15="KAPL12314-I RAMǥ᡼ե򰵽Ǥ"
dlmmkinitrd_I16="KAPL12316-I 롼ȥѡƥȤƥޥȤ줿SCSIǥХ"
dlmmkinitrd_I34="Ǥ"
dlmmkinitrd_I18="KAPL12318-W : /opt/DynamicLinkManager/bin/dlmmkinitrd [-v] [-f] [-fstab fstab-name] initrd-image kernel-version"
dlmmkinitrd_I19="KAPL12319-E ֡ȥǥݡȥƥƥ˼Ԥޤ"
dlmmkinitrd_I20="KAPL12320-E եޤϥǥ쥯ȥ꤬Ǥ¸ߤƤޤե̾ = "
dlmmkinitrd_I21="KAPL12321-E ե̵ʥ롼ȥѡƥϿƤޤե̾ = "
dlmmkinitrd_I22="KAPL12315-I RAMǥ"
dlmmkinitrd_I23="νRAMǥ᡼ե"
dlmmkinitrd_I37="ˤޤ"
dlmmkinitrd_I24="KAPL12313-I RAMǥե륷ƥ򥢥ޥǤ"

dlmmkinitrd_I28="KAPL12325-I ޥɤ򳫻Ϥޤޥ̾ = "
dlmmkinitrd_I29="KAPL12326-E ޥɤμ¹Ԥ˼Ԥޤޥ̾ = "

dlmmkinitrd_I07="KAPL12327-E եϿƤǤե̾ = "
dlmmkinitrd_I30="KAPL12331-E ꤵ줿СΥͥΥǥ쥯ȥ꤬Ĥޤ󡣥ǥ쥯ȥ̾ = " 
dlmmkinitrd_I32="KAPL12332-E ե˥롼ȥѡƥ򸫤Ĥ뤳ȤǤޤ󡣥ե̾ = "
dlmmkinitrd_I38="KAPL12333-E եHDLM֡ȥǥȤƥݡȤǤHBAĤޤ󡣥ե̾ = " 
dlmmkinitrd_I39="KAPL12334-E ե˥롼ȥѡƥʣϿƤޤե̾ = " 
dlmmkinitrd_I40="KAPL12335-E եHDLM֡ȥǥȤƥݡȤǤե륷ƥबĤޤ󡣥ե̾ = " 
dlmmkinitrd_I41="KAPL12336-E ֡ȥǥݡȥƥƥ¹Ԥ븢¤ޤ "
dlmmkinitrd_I46="KAPL12343-I ֡ѥեǤ"
dlmmkinitrd_I47="KAPL12344-I RAMǥ᡼ե"
dlmmkinitrd_I48="ޤ"
dlmmkinitrd_I49="KAPL12345-E 󥹥ȡ뤵ƤHDLMбƤ륫ͥΥСȡưƤ륫ͥΥС󤬰פޤ"
dlmmkinitrd_I50="KAPL12346-E HDLMΥե뤬Ǥե̾ = "

elif [ "$CURR_LANG" == "ja_JP.UTF-8" -a $KERNEL_2_6 -eq 1 -a -f /etc/redhat-release ] \
	|| [ "$CURR_LANG" == "ja_JP.UTF-8" -a $KERNEL_2_18 -eq 1 -a -f /etc/redhat-release ]; then
dlmmkinitrd_I01="KAPL12305-I ブートディスクサポートユティリティの実行がユーザによって中断されました。"
dlmmkinitrd_I02="KAPL12302-E ブートディスクサポートユティリティは複数同時に実行できません。"
dlmmkinitrd_I03="KAPL12301-E ブートディスクサポートユティリティはdlmmkinitrdという名称のみで実行できます。"
dlmmkinitrd_I04="KAPL12329-I ブートディスクサポートユティリティを開始しました。"
dlmmkinitrd_I05="KAPL12330-I ブートディスクサポートユティリティが終了しました。"
dlmmkinitrd_I06="KAPL12303-E ファイルまたはディレクトリが存在しません。ファイル名 ="
dlmmkinitrd_I08="KAPL12306-I 初期RAMディスクイメージファイルの構成リストを作成中です。"
dlmmkinitrd_I09="KAPL12307-I 初期RAMディスクファイルシステムを作成中です。"
dlmmkinitrd_I10="KAPL12308-I 初期RAMディスクファイルシステムをマウント中です。マウントポイント ="
dlmmkinitrd_I11="KAPL12309-I 初期RAMディスクにファイルをコピー中です。"
dlmmkinitrd_I12="KAPL12310-I linuxrcファイルを作成中です。"
dlmmkinitrd_I13="KAPL12311-I 初期RAMディスクにfstabファイルを作成中です。"
dlmmkinitrd_I14="KAPL12312-I 初期RAMディスクにディレクトリを作成中です。"
dlmmkinitrd_I15="KAPL12314-I 初期RAMディスクイメージファイルを圧縮中です。"
dlmmkinitrd_I16="KAPL12316-I ルートパーティションとしてマウントされたSCSIデバイスは"
dlmmkinitrd_I34="です。"
dlmmkinitrd_I18="KAPL12318-W 使用例: /opt/DynamicLinkManager/bin/dlmmkinitrd [-v] [-f] [-fstab fstab-name] initrd-image kernel-version"
dlmmkinitrd_I19="KAPL12319-E ブートディスクサポートユティリティが処理に失敗しました。"
dlmmkinitrd_I20="KAPL12320-E ファイルまたはディレクトリがすでに存在しています。ファイル名 = "
dlmmkinitrd_I21="KAPL12321-E ファイルに無効なルートパーティションが登録されています。ファイル名 = "
dlmmkinitrd_I22="KAPL12315-I RAMディスクサイズが"
dlmmkinitrd_I23="の初期RAMディスクイメージファイル（"
dlmmkinitrd_I37="）を作成しました。"
dlmmkinitrd_I24="KAPL12313-I 初期RAMディスクファイルシステムをアンマウント中です。"

dlmmkinitrd_I28="KAPL12325-I コマンドを開始しました。コマンド名 = "
dlmmkinitrd_I29="KAPL12326-E コマンドの実行に失敗しました。コマンド名 = "

dlmmkinitrd_I07="KAPL12327-E ファイルの登録内容が不正です。ファイル名 = "
dlmmkinitrd_I30="KAPL12331-E 指定されたバージョンのカーネルのディレクトリが見つかりません。ディレクトリ名 = " 
dlmmkinitrd_I32="KAPL12332-E ファイルにルートパーティションを見つけることができません。ファイル名 = "
dlmmkinitrd_I38="KAPL12333-E ファイルにHDLMがブートディスクとしてサポートできるHBAが見つかりません。ファイル名 = " 
dlmmkinitrd_I39="KAPL12334-E ファイルにルートパーティションが複数登録されています。ファイル名 = " 
dlmmkinitrd_I40="KAPL12335-E ファイルにHDLMがブートディスクとしてサポートできるファイルシステムが見つかりません。ファイル名 = " 
dlmmkinitrd_I41="KAPL12336-E ブートディスクサポートユティリティを実行する権限がありません。 "
dlmmkinitrd_I46="KAPL12343-I ブート用ファイルを作成中です。"
dlmmkinitrd_I47="KAPL12344-I 初期RAMディスクイメージファイル"
dlmmkinitrd_I48="を作成しました。"
dlmmkinitrd_I49="KAPL12345-E インストールされているHDLMが対応しているカーネルのバージョンと，現在動作しているカーネルのバージョンが一致しません。
"
dlmmkinitrd_I50="KAPL12346-E HDLMのファイルが不正です。ファイル名 = "
else
dlmmkinitrd_I01="KAPL12305-I The utility for supporting the boot disk was stopped by the user."
dlmmkinitrd_I02="KAPL12302-E Multiple instances of the utility for supporting the boot disk cannot be executed concurrently."
dlmmkinitrd_I03="KAPL12301-E This script can only be executed with the name dlmmkinitrd."
dlmmkinitrd_I04="KAPL12329-I The utility for supporting the boot disk started."
dlmmkinitrd_I05="KAPL12330-I The utility for supporting the boot disk completed."
dlmmkinitrd_I06="KAPL12303-E A file or directory does not exist. File name = "
dlmmkinitrd_I08="KAPL12306-I The list of files required in the initial ramdisk image is being created."
dlmmkinitrd_I09="KAPL12307-I The initial ramdisk file system is being created."
dlmmkinitrd_I10="KAPL12308-I The initial ramdisk file system is being mounted. Mount point = "
dlmmkinitrd_I11="KAPL12309-I Required files are being copied to the initial ramdisk."
dlmmkinitrd_I12="KAPL12310-I The linuxrc executable is being created."
dlmmkinitrd_I13="KAPL12311-I The fstab file for the initial ramdisk is being created."
dlmmkinitrd_I14="KAPL12312-I The directories for the initial ramdisk are being created."
dlmmkinitrd_I15="KAPL12314-I The compressed initial ramdisk image is being created."
dlmmkinitrd_I16="KAPL12316-I The SCSI root partition is "
dlmmkinitrd_I18="KAPL12318-W Usage: /opt/DynamicLinkManager/bin/dlmmkinitrd [-v] [-f] [-fstab fstab-name] initrd-image kernel-version"
dlmmkinitrd_I19="KAPL12319-E The utility for supporting the boot disk has failed."
dlmmkinitrd_I20="KAPL12320-E A file or directory already exists. File name = "
dlmmkinitrd_I21="KAPL12321-E An invalid root partition is specified in the file. File name = "
dlmmkinitrd_I22="KAPL12315-I A compressed initial ramdisk image"
dlmmkinitrd_I23="was created with the ramdisk size ="
dlmmkinitrd_I24="KAPL12313-I Initial ramdisk is being unmounted."

dlmmkinitrd_I28="KAPL12325-I The command started. Command name = "
dlmmkinitrd_I29="KAPL12326-E The command could not execute. Command name = "

dlmmkinitrd_I07="KAPL12327-E An invalid entry is registered in the file. File name = "
dlmmkinitrd_I30="KAPL12331-E A directory with the specified kernel version does not exist. Directory name = "
dlmmkinitrd_I32="KAPL12332-E The root partition could not be found in the file. File name = "
dlmmkinitrd_I38="KAPL12333-E An HBA that HDLM can support as a boot disk was not found in the file. File name = "
dlmmkinitrd_I39="KAPL12334-E Multiple root partition entries exist in the file. File name = "
dlmmkinitrd_I40="KAPL12335-E A file system that HDLM can support as a boot disk was not found in the file. File name = "
dlmmkinitrd_I41="KAPL12336-E The user does not have permission to execute the utility for supporting the boot disk."
dlmmkinitrd_I46="KAPL12343-I The bootup executable is being created."
dlmmkinitrd_I47="KAPL12344-I A compressed initial ramdisk image"
dlmmkinitrd_I48="was created."
dlmmkinitrd_I49="KAPL12345-E The version of the kernel supported by the installed HDLM does not match the currently running kernel version."
dlmmkinitrd_I50="KAPL12346-E The HDLM file is invalid. File name = "

fi

# Messages displayed while linuxrc is executing [only English messages supported].
dlmmkinitrd_I25="KAPL12322-I Execution of linuxrc started."
dlmmkinitrd_I26="KAPL12323-I The insertion of the module was started. Module name = "
dlmmkinitrd_I27="KAPL12324-E The module could not be inserted. Module name = "
dlmmkinitrd_I31="KAPL12328-I Execution of linuxrc completed."
dlmmkinitrd_I42="KAPL12325-I The command started. Command name = "
dlmmkinitrd_I43="KAPL12326-E The command could not execute. Command name = "
dlmmkinitrd_I44="KAPL12341-I Execution of bootup script started."
dlmmkinitrd_I45="KAPL12342-I Execution of bootup script completed."
# Messages end here

MESSAGES_ONLY_SYSLOG=""

#########################################################
# usage for displaying the valid options

usage()
{
        SKIP_CLEANUP=1
        STATUS=1
        logmsg $dlmmkinitrd_I18
        exit
}

#########################################################
# Method to log messages to /var/log/messages and console

logmsg(){
        $LOGGER -t $SYSLOG_TAG "$*"
        $ECHO $MESSAGES_ONLY_SYSLOG | $GREP -s "$1"> /dev/null 2>&1
        if [ $? -ne 0 ]; then
                $ECHO "$*"
        fi
}

logmsg_linuxrc(){
        $ECHO "$ECHO \"$*\" >> $HDLMLOG" >> $BOOTFILE
        $ECHO "$ECHO $*" >> $BOOTFILE
}

##############################################################################
# Methods for cleanup and error handling

clear () {
        ####Skipping cleanup incase of wrong filename, non root user and multiple instance#### 
        if [ $SKIP_CLEANUP -ne 0 ]
        then
                exit $STATUS
        fi

        $RM -f "$IMAGE" > /dev/null 2>&1

        $UNMOUNT "$HDLMMNT" > /dev/null 2>&1
        $RM -rf "$HDLMMNT" > /dev/null 2>&1

        $RM -rf "$HDLMLIB" > /dev/null 2>&1

        $RM -f "$BACKUP" > /dev/null 2>&1
        $RM -f "$LOCKFILE" > /dev/null 2>&1
	#Deleting lvm related files
	$RM -f "$LVM_CONF_SCSI" "$LVM_CONF_HDLM" "$LVM_CONF_TEMP" > /dev/null 2>&1

        if [ -d "$TMPDIR" ]
        then
                LS_TMPDIR=`$LS $TMPDIR`
                PWD_TMPDIR=$PWD
                ######## Before deleting check whether tmp is empty and the user is not in tmp ###### 
                if [ -z "$LS_TMPDIR" -a "$PWD_TMPDIR" != "$TMPDIR" ]
                then 
                        $RM -rf "$TMPDIR" > /dev/null 2>&1
                fi
        fi

        if [ $STATUS -ne 0 ]
        then
                logmsg $dlmmkinitrd_I19
        else
                logmsg $dlmmkinitrd_I05
        fi
        exit $STATUS
}

###################################################################
# Method for Control C handling 

cchandler()
{
        logmsg $dlmmkinitrd_I01
        ####### Check if a backup copy of the already existing file is taken #######
        if [ $BACKUP_CP_SUCCESS -eq 1 ]
        then
                $RM -f "$target" > /dev/null 2>&1
                $CP -f "$BACKUP" "$target" > /dev/null 2>&1
        fi
        if [ $BACKUP_CP_SUCCESS -eq 2 ]
        then
                $RM -f "$target" > /dev/null 2>&1
        fi 
        STATUS=1
        exit
}

##############################################################################
# Method to verify kernel and set alert driver insertion flag if applicable

alert_insertion_flag()
{
        COUNTER=0
	KER_ARRAY_SIZE=39
        while [ $COUNTER -lt $KER_ARRAY_SIZE ]
        do
                if [ "" != "`$ECHO $kernel | $GREP -x "${KERNEL_ARRAY[$COUNTER]}"`" ]
                then
                        ALERT_INSMOD_FLAG=1
                        break
                fi
                COUNTER=`$EXPR $COUNTER + 1`
        done
}

##############################################################################
# Method to creates all the required directories.

create_hdlmdirectories () {
        $MKDIR -p $HDLMMNT/etc/opt \
                 $HDLMMNT/etc/opt/DynamicLinkManager \
                 $HDLMMNT/opt \
                 $HDLMMNT/opt/DynamicLinkManager \
                 $HDLMMNT/opt/DynamicLinkManager/lib \
                 $HDLMMNT$SYSTEM_ROOT \
                 $HDLMMNT/var \
                 $HDLMMNT/var/opt \
                 $HDLMMNT/var/opt/DynamicLinkManager \
                 $HDLMMNT/var/opt/DynamicLinkManager/log \
                 $HDLMMNT/opt/DynamicLinkManager/bin > /dev/null 2>&1
        if [ $? -ne 0 ]
        then
                logmsg $dlmmkinitrd_I29 "$MKDIR"
                STATUS=1
                exit
        fi
}



##############################################################################
# Method to create fstab required at boot time

create_fstab () {
	if [ $KERNEL_2_4 -eq 1 ]
	then
		$ECHO "/dev/ram         /               ext2    defaults        0   0" > $HDLMMNT/etc/fstab
	elif [ $KERNEL_2_6 -eq 1 ] || [ $KERNEL_2_18 -eq 1 ]
	then
		$ECHO "/dev/ram         /               ramfs    defaults        0   0" > $HDLMMNT/etc/fstab
		$ECHO "sys              /sys            sysfs    defaults        0   0" >> $HDLMMNT/etc/fstab
	fi
        $ECHO "proc                     /proc           proc    defaults        0   0" >> $HDLMMNT/etc/fstab
        $CHMOD 644 $HDLMMNT/etc/fstab >/dev/null 2>&1
}


##############################################################################
# Method to create the support script file for nash shell.

create_nash_support_file () {

$ECHO "#!$NASH" > $HDLMMNT/opt/DynamicLinkManager/bin/dlmbootsupport
if [ $KERNEL_2_18 -eq 1 ] 
then
        $ECHO switchroot >> $HDLMMNT/opt/DynamicLinkManager/bin/dlmbootsupport
else
        $ECHO switchroot $SYSTEM_ROOT >> $HDLMMNT/opt/DynamicLinkManager/bin/dlmbootsupport
fi
$CHMOD 600 $HDLMMNT/opt/DynamicLinkManager/bin/dlmbootsupport
}

##############################################################################
# Method to create the linuxrc script.

create_linuxrcfile () {

$ECHO "#!$SH" > $BOOTFILE
$ECHO "$ECHO \"\" > $HDLMLOG" >> $BOOTFILE

if [ $KERNEL_2_6 -eq 1 ] || [ $KERNEL_2_18 -eq 1 ]
then 
        logmsg_linuxrc $dlmmkinitrd_I44 # start message
else
        logmsg_linuxrc $dlmmkinitrd_I25 # start message
fi

if [ $KERNEL_2_6 -eq 1 ]
then
	# Mount /proc
	logmsg_linuxrc $dlmmkinitrd_I42 "$MOUNT -t proc /proc /proc"
	$ECHO "$MOUNT -t proc /proc /proc">>$BOOTFILE
	$ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MOUNT -t proc /proc /proc"
      	        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE

	# Mount /sys
	logmsg_linuxrc $dlmmkinitrd_I42 "$MOUNT -t sysfs none /sys"
	$ECHO "$MOUNT -t sysfs none /sys">>$BOOTFILE
	$ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MOUNT -t sysfs none /sys"
	       	$ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE

        # Mount tmpfs on /dev
        logmsg_linuxrc $dlmmkinitrd_I42 "$MOUNT -o mode=0755 -t tmpfs none /dev"
	$ECHO "$MOUNT -o mode=0755 -t tmpfs none /dev" >>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MOUNT tmpfs on /dev/"
      	        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE
        
        # MKNOD /dev/console
        $ECHO "$MKNOD $CONSOLE_DEVICE c 5 1" >>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MKNOD $CONSOLE_DEVICE c 5 1"
      	        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE
        
        # MKNOD /dev/null
	$ECHO "$MKNOD $NULL_DEVICE c 1 3" >>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MKNOD $NULL_DEVICE c 1 3"
      	        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE
        
        # MKNOD /dev/zero
	$ECHO "$MKNOD $ZERO_DEVICE c 1 5" >>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MKNOD $ZERO_DEVICE c 1 5"
      	        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE
        
        # MKDIR /dev/pts
	$ECHO "$MKDIR $PTS_DIR" >>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MKDIR $PTS_DIR"
      	        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE
        
        # MKDIR /dev/shm
	$ECHO "$MKDIR $SHM_DIR" >>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MKDIR $SHM_DIR"
      	        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE
        
        # UDEVSTART
        logmsg_linuxrc $dlmmkinitrd_I42 "$UDEVSTART"
	$ECHO "$UDEVSTART" >>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$UDEVSTART"
      	        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE

        $ECHO "$ECHO -n "$HOTPLUG" > /proc/sys/kernel/hotplug" >>$BOOTFILE
fi

if [ $KERNEL_2_18 -eq 0 ] 
then 
for i in $SCSI_MODULE
{
        logmsg_linuxrc $dlmmkinitrd_I26 $i
        $ECHO "$MODPROBE $i" >>$BOOTFILE
        $ECHO "$LSMOD| $AWK '{print \$1}' |$GREP -w $i >/dev/null 2>&1" >>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                logmsg_linuxrc $dlmmkinitrd_I27 $i
                $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
        $ECHO "fi" >>$BOOTFILE
}
for i in $HBA_MODULE
{
        $ECHO "$LSMOD| $AWK '{print \$1}' |$GREP -w $i > /dev/null 2>&1" >>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                logmsg_linuxrc $dlmmkinitrd_I26 $i
                $ECHO "$MODPROBE $i" >>$BOOTFILE
        $ECHO "fi" >>$BOOTFILE
        $ECHO "$LSMOD|$AWK '{print \$1}'|$GREP -w $i > /dev/null 2>&1" >>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                logmsg_linuxrc $dlmmkinitrd_I27 $i
                $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
        $ECHO "fi" >>$BOOTFILE
}
fi

if [ $KERNEL_2_18 -eq 1 ] 
then 
        # Mount /proc
	logmsg_linuxrc $dlmmkinitrd_I42 "$MOUNT -t proc /proc /proc"
	$ECHO "$MOUNT -t proc /proc /proc">>$BOOTFILE
	$ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MOUNT -t proc /proc /proc"
      	        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE

        # Mount /sys
        logmsg_linuxrc $dlmmkinitrd_I42 "$MOUNT -t sysfs /sys /sys"
	$ECHO "$MOUNT -t sysfs /sys /sys">>$BOOTFILE
	$ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MOUNT -t sysfs /sys /sys"
	       	$ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE

         # Mount tmpfs on /dev
        logmsg_linuxrc $dlmmkinitrd_I42 "$MOUNT -o mode=0755 -t tmpfs /dev /dev"
	$ECHO "$MOUNT -o mode=0755 -t tmpfs /dev /dev" >>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MOUNT -o mode=0755 -t tmpfs on /dev /dev"
      	        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE

        # MKDIR /dev/pts
	$ECHO "$MKDIR $PTS_DIR" >>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MKDIR $PTS_DIR"
      	        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE

        # Mount devpts on /dev
        logmsg_linuxrc $dlmmkinitrd_I42 "$MOUNT -t devpts -o gid=5,mode=620 /dev/pts /dev/pts"
	$ECHO "$MOUNT -t devpts -o gid=5,mode=620 /dev/pts /dev/pts">>$BOOTFILE
	$ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MOUNT -t devpts -o gid=5,mode=620 /dev/pts /dev/pts"
	       	$ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE

         # MKDIR /dev/shm
	$ECHO "$MKDIR $SHM_DIR" >>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MKDIR $SHM_DIR"
      	        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE

         # MKDIR /dev/mapper
	$ECHO "$MKDIR $MAPPER_DIR" >>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MKDIR $MAPPER_DIR"
      	        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE

         # MKNOD /dev/null
	$ECHO "$MKNOD $NULL_DEVICE c 1 3" >>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MKNOD $NULL_DEVICE c 1 3"
      	        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE
        
        # MKNOD /dev/zero
	$ECHO "$MKNOD $ZERO_DEVICE c 1 5" >>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MKNOD $ZERO_DEVICE c 1 5"
      	        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE

         # MKNOD /dev/systty
	$ECHO "$MKNOD $STTY_DEVICE c 4 0" >>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MKNOD $STTY_DEVICE c 4 0"
      	        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE
        
        # MKNOD /dev/tty
	$ECHO "$MKNOD $TTY_DEVICE c 5 0" >>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MKNOD $TTY_DEVICE c 5 0"
      	        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE

        # MKNOD /dev/console
        $ECHO "$MKNOD $CONSOLE_DEVICE c 5 1" >>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MKNOD $CONSOLE_DEVICE c 5 1"
      	        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE

        # MKNOD /dev/ptmx
        $ECHO "$MKNOD $PTMX_DEVICE c 5 2" >>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MKNOD $PTMX_DEVICE c 5 2"
      	        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE

        # MKNOD /dev/rtc
        $ECHO "$MKNOD $RTC_DEVICE c 10 135" >>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MKNOD $RTC_DEVICE c 10 135"
      	        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE
        
        # MKNOD /dev/tty0 - /dev/tty12
        $ECHO "COUNTER=0" >> $BOOTFILE
        $ECHO "while [ \$COUNTER -lt 13 ]; do" >>$BOOTFILE
                $ECHO "$MKNOD $TTY_DEVICE\$COUNTER c 4 \$COUNTER" >>$BOOTFILE
                $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		        logmsg_linuxrc $dlmmkinitrd_I43 "$MKNOD $TTY_DEVICE c 4 \$COUNTER"
      	                $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	        $ECHO "fi" >>$BOOTFILE
                $ECHO "COUNTER=\`$EXPR \$COUNTER + 1\`" >> $BOOTFILE
         $ECHO "done" >>$BOOTFILE

         # MKNOD /dev/ttyS0 - /dev/ttyS3
        $ECHO "COUNTER=0" >> $BOOTFILE
        $ECHO "COUNTER_2=64" >> $BOOTFILE
        $ECHO "while [ \$COUNTER -lt 4 ]; do" >>$BOOTFILE
        $ECHO "while [ \$COUNTER_2 -lt 68 ]; do" >>$BOOTFILE
                        $ECHO "$MKNOD $TTY_SDEVICE\$COUNTER c 4 \$COUNTER_2" >>$BOOTFILE
                        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		                logmsg_linuxrc $dlmmkinitrd_I43 "$MKNOD $TTY_SDEVICE c 4 \$COUNTER_2"
      	                        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	                $ECHO "fi" >>$BOOTFILE
                        $ECHO "COUNTER=\`$EXPR \$COUNTER + 1\`" >>$BOOTFILE
                        $ECHO "COUNTER_2=\`$EXPR \$COUNTER_2 + 1\`" >>$BOOTFILE
                 $ECHO "done" >>$BOOTFILE
         $ECHO "done" >>$BOOTFILE

         # For AS5_IA64 only
         if [ "$($UNAME -m)" == "ia64" ]
         then
                $ECHO "$MKNOD $EFIRTC_DEVICE c 10 136" >>$BOOTFILE
                $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		        logmsg_linuxrc $dlmmkinitrd_I43 "$MKNOD $EFIRTC_DEVICE c 10 136"
      	                $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	        $ECHO "fi" >>$BOOTFILE
         fi

         # Setting HOTPLUG ON
         logmsg_linuxrc $dlmmkinitrd_I42 "hotplug"
         $ECHO "$ECHO hotplug | /sbin/nash --quiet" >> $BOOTFILE
         $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "hotplug"
	       	$ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	 $ECHO "fi" >>$BOOTFILE

         # Executing mkbldevs 
         logmsg_linuxrc $dlmmkinitrd_I42 "mkblkdevs"
         $ECHO "$ECHO mkblkdevs | /sbin/nash --quiet" >> $BOOTFILE
         $ECHO "if [ \$? -ne 1 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "mkblkdevs"
	       	$ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	 $ECHO "fi" >>$BOOTFILE

        # Inserting USB Modules
        for i in $USB_MODULE
        {
                logmsg_linuxrc $dlmmkinitrd_I26 $i
                $ECHO "$MODPROBE $i" >>$BOOTFILE
                $ECHO "$LSMOD| $AWK '{print \$1}' |$GREP -w $i >/dev/null 2>&1" >>$BOOTFILE
                $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                        logmsg_linuxrc $dlmmkinitrd_I27 $i
                        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
                $ECHO "fi" >>$BOOTFILE
        }

        # Mounting usbfs on /proc/bus/usb
         logmsg_linuxrc $dlmmkinitrd_I42 "$MOUNT -t usbfs /proc/bus/usb /proc/bus/usb"
	 $ECHO "$MOUNT -t usbfs /proc/bus/usb /proc/bus/usb">>$BOOTFILE
	 $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MOUNT -t usbfs /proc/bus/usb /proc/bus/usb"
	       	$ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	 $ECHO "fi" >>$BOOTFILE

        # Inserting Filesystem modules
        for i in $FS_MODULE
        {
                $ECHO "$LSMOD|$AWK '{print \$1}'|$GREP -w $i >/dev/null 2>&1" >>$BOOTFILE
                $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                        logmsg_linuxrc $dlmmkinitrd_I26 $i
                        $ECHO "$MODPROBE $i" >>$BOOTFILE
                $ECHO "fi" >>$BOOTFILE
                $ECHO "$LSMOD|$AWK '{print \$1}'|$GREP -w $i >/dev/null 2>&1" >>$BOOTFILE
                $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                        logmsg_linuxrc $dlmmkinitrd_I27 $i
                        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
                $ECHO "fi" >>$BOOTFILE
        }

        # Inserting scsi-modules
        for i in $ROOT_MODULE
        {
                logmsg_linuxrc $dlmmkinitrd_I26 $i
                $ECHO "$MODPROBE $i" >>$BOOTFILE
                $ECHO "$LSMOD| $AWK '{print \$1}' |$GREP -w $i >/dev/null 2>&1" >>$BOOTFILE
                $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                        logmsg_linuxrc $dlmmkinitrd_I27 $i
                        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
                $ECHO "fi" >>$BOOTFILE
        }

        # Inserting HBA modules
        for i in $HBA_MODULE
        {
                $ECHO "$LSMOD| $AWK '{print \$1}' |$GREP -w $i > /dev/null 2>&1" >>$BOOTFILE
                $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                        logmsg_linuxrc $dlmmkinitrd_I26 $i
                        $ECHO "$MODPROBE $i" >>$BOOTFILE
                $ECHO "fi" >>$BOOTFILE
                $ECHO "$LSMOD|$AWK '{print \$1}'|$GREP -w $i > /dev/null 2>&1" >>$BOOTFILE
                $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                        logmsg_linuxrc $dlmmkinitrd_I27 $i
                        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
                $ECHO "fi" >>$BOOTFILE
        }
fi

if [ $KERNEL_2_4 -eq 1 ]
then
	# Mount /proc
	logmsg_linuxrc $dlmmkinitrd_I42 "$MOUNT -t proc /proc /proc"
	$ECHO "$MOUNT -t proc /proc /proc">>$BOOTFILE
	$ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MOUNT -t proc /proc /proc"
		$ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE
fi

# Insert alert driver
logmsg_linuxrc $dlmmkinitrd_I26 sddlmadrv
if [ $ALERT_INSMOD_FLAG -eq 1 ]
then
        $ECHO "$MODPROBE sddlmadrv >>$HDLMLOG 2>>$HDLMLOG" >> $BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MODPROBE sddlmadrv"
      	$ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE
        $ECHO "ALERT_MAJOR=\`$CAT $DEVICE_FILE | $GREP sddlmadrv | $AWK '{print \$1}'\`">>$BOOTFILE
        $ECHO "$MKDIR -p /dev/dlm ">>$BOOTFILE
        $ECHO "$RM -f /dev/dlm/sddlmadrv0 ">>$BOOTFILE

        # MKNOD /dev/dlm/sddlmadrv0
        $ECHO "$MKNOD /dev/dlm/sddlmadrv0 c \$ALERT_MAJOR 0">>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$MKNOD /dev/dlm/sddlmadrv0 c \$ALERT_MAJOR 0"
      	$ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE
        $ECHO "$CHMOD 640 /dev/dlm/sddlmadrv0" >> $BOOTFILE
else
        $ECHO "$MODPROBE sddlmadrv >>$HDLMLOG 2>>$HDLMLOG" >> $BOOTFILE
fi
$ECHO "$LSMOD|$AWK '{print \$1}'|$GREP -w sddlmadrv >/dev/null 2>&1" >>$BOOTFILE
$ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
        logmsg_linuxrc $dlmmkinitrd_I27 sddlmadrv
        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
$ECHO "fi" >>$BOOTFILE

# Insert filter driver
logmsg_linuxrc  $dlmmkinitrd_I26 sddlmfdrv
$ECHO "$MODPROBE sddlmfdrv >>$HDLMLOG 2>>$HDLMLOG" >> $BOOTFILE
$ECHO "$LSMOD|$AWK '{print \$1}'|$GREP -w sddlmfdrv >/dev/null 2>&1" >>$BOOTFILE
$ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
        logmsg_linuxrc $dlmmkinitrd_I27 sddlmfdrv
        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
$ECHO "fi" >>$BOOTFILE

# Insert LVM drivers
if [ $lvm_flag -eq 1 ]
then
	if [ $DMSETUP_EXIST -eq 1 ]
        then
		for i in $LVM_MODULE_BEG
		{
        		# For checking lsmod pattern
        		$ECHO "U1=\`$ECHO $i | $CUT -d \"-\" -f1\`"  >>$BOOTFILE
        		$ECHO "U2=\`$ECHO $i | $CUT -d \"-\" -f2\`" >>$BOOTFILE
        		$ECHO "U3=\"\$U1\"_\"\$U2\""  >>$BOOTFILE
			
			$ECHO "$LSMOD|$AWK '{print \$1}'|$GREP -w \"\$U3\" >/dev/null 2>&1" >>$BOOTFILE
        		$ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                		logmsg_linuxrc $dlmmkinitrd_I26 $i
                		$ECHO "$MODPROBE $i" >>$BOOTFILE
        		$ECHO "fi" >>$BOOTFILE
			
			$ECHO "$LSMOD|$AWK '{print \$1}'|$GREP -w \"\$U3\" >/dev/null 2>&1" >>$BOOTFILE
        		$ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                		logmsg_linuxrc $dlmmkinitrd_I27 $i
                		$ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
        		$ECHO "fi" >>$BOOTFILE
		}
	fi
fi

if [ $KERNEL_2_18 -eq 0 ]
then
        for i in $FS_MODULE
        {
                $ECHO "$LSMOD|$AWK '{print \$1}'|$GREP -w $i >/dev/null 2>&1" >>$BOOTFILE
                $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                        logmsg_linuxrc $dlmmkinitrd_I26 $i
                        $ECHO "$MODPROBE $i" >>$BOOTFILE
                $ECHO "fi" >>$BOOTFILE
                $ECHO "$LSMOD|$AWK '{print \$1}'|$GREP -w $i >/dev/null 2>&1" >>$BOOTFILE
                $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                        logmsg_linuxrc $dlmmkinitrd_I27 $i
                        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
                $ECHO "fi" >>$BOOTFILE
        }
 fi

# Insert LVM drivers
if [ $lvm_flag -eq 1 ]
then
	for i in $LVM_MODULE_END
	{
        	# For checking lsmod pattern
		$ECHO "U1=\`$ECHO $i | $CUT -d \"-\" -f1\`"  >>$BOOTFILE
		$ECHO "U2=\`$ECHO $i | $CUT -d \"-\" -f2\`" >>$BOOTFILE 
		$ECHO "U3=\"\$U1\"_\"\$U2\""  >>$BOOTFILE
	
		$ECHO "$LSMOD|$AWK '{print \$1}'|$GREP -w \"\$U3\" >/dev/null 2>&1" >>$BOOTFILE
        	$ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                	logmsg_linuxrc $dlmmkinitrd_I26 $i
                	$ECHO "$MODPROBE $i" >>$BOOTFILE
        	$ECHO "fi" >>$BOOTFILE
	
		$ECHO "$LSMOD|$AWK '{print \$1}'|$GREP -w \"\$U3\" >/dev/null 2>&1" >>$BOOTFILE
        	$ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                	logmsg_linuxrc $dlmmkinitrd_I27 $i
                	$ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
        	$ECHO "fi" >>$BOOTFILE
	}
fi

# Driver Initailization
if [ $KERNEL_2_18 -eq 1 ]
then
        logmsg_linuxrc $dlmmkinitrd_I42 "stabilized"
        $ECHO "$ECHO stabilized --hash --interval 250 /proc/scsi/scsi | /sbin/nash --quiet" >> $BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "stabilized"
	       	$ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE
fi

if [ $KERNEL_2_6 -eq 1 ]
then
        # UDEVSTART
        logmsg_linuxrc $dlmmkinitrd_I42 "$UDEVSTART"
	$ECHO "$UDEVSTART"  >>$BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$UDEVSTART"
      	        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE
fi

if [ $KERNEL_2_6 -eq 1 ] || [ $KERNEL_2_18 -eq 1 ]
then      
	#Activating LVM for scsi
	if [ $lvm_flag -eq 1 ]
	then 
		$ECHO "#Making device-mapper control node" >> $BOOTFILE
		$ECHO "$ECHO mkdmnod | /sbin/nash --quiet" >> $BOOTFILE
		# Executing mkblkdevs in case of LVM 
		if [ $KERNEL_2_18 -eq 1 ]
		then
			logmsg_linuxrc $dlmmkinitrd_I42 "mkblkdevs"
			$ECHO "$ECHO mkblkdevs | /sbin/nash --quiet" >> $BOOTFILE
			$ECHO "if [ \$? -ne 1 ]; then " >>$BOOTFILE
				logmsg_linuxrc $dlmmkinitrd_I43 "mkblkdevs"
	       			$ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
			$ECHO "fi" >>$BOOTFILE
		fi
		$ECHO "$CP -f $LVM_CONF_SCSI $LVM_CONF" >> $BOOTFILE
		$ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
			logmsg_linuxrc $dlmmkinitrd_I43 "$CP $LVM_CONF_SCSI $LVM_CONF" 
		$ECHO "fi" >>$BOOTFILE

                logmsg_linuxrc $dlmmkinitrd_I42 "$VGSCAN"
		$ECHO $LVM_STATIC $VGSCAN >> $BOOTFILE
                $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                	logmsg_linuxrc $dlmmkinitrd_I43 "$VGSCAN"
                	$ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
        	$ECHO "fi" >>$BOOTFILE
		
                logmsg_linuxrc $dlmmkinitrd_I42 "$VGCHANGE"
		$ECHO $LVM_STATIC $VGCHANGE -ay --ignorelockingfailure $VOL_NAME >> $BOOTFILE
		$ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                	logmsg_linuxrc $dlmmkinitrd_I43 "$VGCHANGE"
                	$ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
       		$ECHO "fi" >>$BOOTFILE
	fi
fi
# Executing mkblkdevs without LVM
if [ $lvm_flag -eq 0 ] && [ $KERNEL_2_18 -eq 1 ]
then
	logmsg_linuxrc $dlmmkinitrd_I42 "mkblkdevs"
	$ECHO "$ECHO mkblkdevs | /sbin/nash --quiet" >> $BOOTFILE
	$ECHO "if [ \$? -ne 1 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "mkblkdevs"
		$ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE
fi

# get the root device with partition
get_root_part

#Setting flag for checking LVM disk check in initrd execution
if [ $lvm_flag -eq 1 ]
then
	lvm_flag_initrd=1
else
	lvm_flag_initrd=0	
fi
#Setting flag for calculating the MINOR no. of the root device in case of AS5
if [ $KERNEL_2_18 -eq 1 ]
then
	kernel_2_18_MINOR=1
else
	kernel_2_18_MINOR=0	
fi
if [ $lvm_flag -eq 0 ]
then
	ROOT_DEVICE=`$EXPR "$ROOT_PART" : "\(/dev....\)?*"`
	HDLM_PART=`$EXPR "$ROOT_PART" : "/dev/...\(.*\)"`
	$ECHO "ROOT_DEVICE=$ROOT_DEVICE" >>/$BOOTFILE
	$ECHO "HDLM_PART=$HDLM_PART" >>/$BOOTFILE
fi

if [ $KERNEL_2_6 -eq 1 ]
then
	# UnMount /sys
	logmsg_linuxrc $dlmmkinitrd_I42 "$UNMOUNT /sys"
	$ECHO "$UNMOUNT /sys">>$BOOTFILE
	$ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I43 "$UNMOUNT /sys"
		$ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
	$ECHO "fi" >>$BOOTFILE
fi

logmsg_linuxrc $dlmmkinitrd_I42 "$MOUNT $ROOT_PART"
$CAT << RCFILE1 >> $BOOTFILE

#setting LVM flag in initrd
lvm_flag_initrd=$lvm_flag_initrd
kernel_2_18_MINOR=$kernel_2_18_MINOR

# Copy configuration files from real root and configure HDLM devices
$MOUNT $ROOT_PART $SYSTEM_ROOT >>$HDLMLOG 2>>$HDLMLOG
if [ \$? -ne 0 ]; then
        $ECHO $dlmmkinitrd_I43 "$MOUNT $ROOT_PART" >> $HDLMLOG 
        $ECHO $dlmmkinitrd_I43 "$MOUNT $ROOT_PART" 
        $SLEEP $SLEEP_INTERVAL
fi
$CP -f $SYSTEM_ROOT/etc/opt/DynamicLinkManager/.dlm* /etc/opt/DynamicLinkManager/ >>$HDLMLOG 2>>$HDLMLOG
$CP -f $SYSTEM_ROOT/etc/opt/DynamicLinkManager/dlm* /etc/opt/DynamicLinkManager/ >>$HDLMLOG 2>>$HDLMLOG
if [ $lvm_flag -eq 1 ]
then
        if [ $KERNEL_2_6 -eq 1 ] || [ $KERNEL_2_18 -eq 1 ]
        then
                $CP -f $SYSTEM_ROOT$LVM_ARCHIVE/* $LVM_ARCHIVE/ >>$HDLMLOG 2>>$HDLMLOG
                $CP -f $SYSTEM_ROOT$LVM_BACKUP/* $LVM_BACKUP/ >>$HDLMLOG 2>>$HDLMLOG
        fi
fi
if [ ! -d $SYSTEM_ROOT/dev/dlm ]
then
        $MKDIR $SYSTEM_ROOT/dev/dlm >>$HDLMLOG 2>>$HDLMLOG
        if [ \$? -ne 0 ]
        then
                $ECHO $dlmmkinitrd_I43 "$MKDIR" >>$HDLMLOG
                $ECHO $dlmmkinitrd_I43 "$MKDIR"
        fi
fi

# Configuring the devices 
$ECHO $dlmmkinitrd_I42 "/sbin/dlmcfgmgr -r" >> $HDLMLOG 
$ECHO $dlmmkinitrd_I42 "/sbin/dlmcfgmgr -r" 
$DLMCFGMGR -r -s
if [ \$? -ne 0 ]; then
        $ECHO $dlmmkinitrd_I43 "/sbin/dlmcfgmgr -r" >> $HDLMLOG 
        $ECHO $dlmmkinitrd_I43 "/sbin/dlmcfgmgr -r" 
        $SLEEP $SLEEP_INTERVAL
fi

#get hdlm root from -v and calculate real root dev
$ECHO $dlmmkinitrd_I42 "/sbin/dlmcfgmgr -v" >> $HDLMLOG 
$ECHO $dlmmkinitrd_I42 "/sbin/dlmcfgmgr -v" 
$DLMCFGMGR -v >/dev/null 2>&1
if [ \$? -ne 0 ]
then
        $ECHO $dlmmkinitrd_I43 "/sbin/dlmcfgmgr -v" >> $HDLMLOG 
        $ECHO $dlmmkinitrd_I43 "/sbin/dlmcfgmgr -v" 
fi

#run configmanager -v to get the corresponding HDLM root device
if [ $lvm_flag_initrd  -eq 0 ]
then
	CFG=\`$DLMCFGMGR -v|$GREP -w "\$ROOT_DEVICE"\`
	if [ \$? -eq 0 ]
	then
        	FULL_PART=\`$EXPR "\$CFG" : "\(/dev/.......\).*"\`

        	#if the scsi device is not on the first line of dlmcfgmgr -v then
        	#return the scsi device based on the output of dlmcfgmgr -v 
        	if [ -z "\$FULL_PART"  ]
        	then
                	FULL_PART=\`$DLMCFGMGR -v| $AWK -v scanpatt=\$ROOT_DEVICE 'BEGIN{a=0}\\
                	/.dev.sd.?/{if (\$1 == scanpatt){print a;exit}}\\
                	/.dev.sddlm...*/{a=\$1}'\`
        	fi
	fi
fi

$CAT $CFGMGR_LOG >>$HDLMLOG 2>>$HDLMLOG
RCFILE1

if [ $KERNEL_2_4 -eq 1 ]
then
	$ECHO "$MV /dev/dlm/sddlmadrv0 $SYSTEM_ROOT/dev/dlm/ >>$HDLMLOG 2>>$HDLMLOG" >> $BOOTFILE
	$ECHO "$MV /dev/dlm/sddlmfdrv0 $SYSTEM_ROOT/dev/dlm/ >>$HDLMLOG 2>>$HDLMLOG" >> $BOOTFILE
	$ECHO "$MV /dev/sd* $SYSTEM_ROOT/dev/ >>$HDLMLOG 2>>$HDLMLOG" >> $BOOTFILE
fi

$CAT << RCFILE2 >> $BOOTFILE
$CP -f /etc/opt/DynamicLinkManager/.dlm* $SYSTEM_ROOT/etc/opt/DynamicLinkManager/ >>$HDLMLOG 2>>$HDLMLOG
$CP -f /etc/opt/DynamicLinkManager/dlm* $SYSTEM_ROOT/etc/opt/DynamicLinkManager/ >>$HDLMLOG 2>>$HDLMLOG

#calculation of major and minor no for root device
if [ $lvm_flag_initrd  -eq 0 ]
then
	FULL_ROOT=\`$EXPR "\$FULL_PART" : "\/dev\/\(sddlm..\)"\`
	HDLM_ROOT="\$FULL_ROOT\$HDLM_PART"

	#calculate the major and minor from proc partions
	MAJOR=\`$CAT /proc/partitions | $GREP \$HDLM_ROOT | $AWK '{print \$1}'\`
	MINOR=\`$CAT /proc/partitions | $GREP \$HDLM_ROOT | $AWK '{print \$2}'\`
	VALUE=\`$EXPR \$MAJOR \* 256 + \$MINOR\`
	$ECHO "\$VALUE" > /proc/sys/kernel/real-root-dev
else
	#calculate the major and minor from dev-mapper device file	
	MAJOR=\`$LS -l $ROOT_PART | $SED -e "s/.* \\([0-9]\+\\), *[0-9]\+.*/\\1/"\`
        if [ $kernel_2_18_MINOR -eq 1 ]
        then
              MINOR=\`$LS -l $ROOT_PART | $CUT -d " " -f6\`
        else
              MINOR=\`$LS -l $ROOT_PART | $CUT -d " " -f7\`
        fi
	VALUE=\`$EXPR \$MAJOR \* 256 + \$MINOR\`
        $ECHO "\$VALUE" > /proc/sys/kernel/real-root-dev	
fi

if [ $KERNEL_2_6 -eq 1 ] || [ $KERNEL_2_18 -eq 1 ]
then 
        if [ $lvm_flag_initrd -eq 0 ]
	then
		$ECHO $dlmmkinitrd_I45 >> $HDLMLOG 
       		$ECHO $dlmmkinitrd_I45 
	fi
else
        $ECHO $dlmmkinitrd_I31 >> $HDLMLOG 
        $ECHO $dlmmkinitrd_I31 
fi

# Multiple logs rotation 
if [ $lvm_flag_initrd -eq 0 ] 	
then
	if [ -f $DEST_LOG2 ]
	then
       		$MV -f $DEST_LOG2 $DEST_LOG3 >>$HDLMLOG 2>>$HDLMLOG
	fi
	if [ -f $DEST_LOG1 ]
	then
        	$MV -f $DEST_LOG1 $DEST_LOG2 >>$HDLMLOG 2>>$HDLMLOG
	fi
	if [ -f $DEST_LOG ]
	then
        	$MV -f $DEST_LOG $DEST_LOG1 >>$HDLMLOG 2>>$HDLMLOG
	fi
	$MV -f $HDLMLOG $DEST_LOG
	$CHMOD 600 $DEST_LOG
fi
$UNMOUNT $SYSTEM_ROOT >>$HDLMLOG 2>>$HDLMLOG
RCFILE2

if [ $KERNEL_2_4 -eq 1 ]
then
	# Making the root /dev/root
	$ECHO "$ECHO mkrootdev /dev/root | /sbin/nash --quiet" >> $BOOTFILE
	# Placing value of /dev/ram0 in real-root-dev
	$ECHO "$ECHO 0x0100 > /proc/sys/kernel/real-root-dev" >> $BOOTFILE
	# Mount /dev/root on $SYSTEM_ROOT
	$ECHO "$MOUNT -o $fsoption --ro -t $fsdriver /dev/root $SYSTEM_ROOT" >> $BOOTFILE
	# Changing the root using pivot root
	$ECHO "$ECHO pivot_root $SYSTEM_ROOT $SYSTEM_ROOT/initrd | /sbin/nash --quiet" >> $BOOTFILE
	# Unmounting the proc of initrd
	$ECHO "$UNMOUNT /initrd/proc" >> $BOOTFILE
fi

if [ $KERNEL_2_6 -eq 1 ] || [ $KERNEL_2_18 -eq 1 ]
then
	if [ $lvm_flag -eq 1 ]
        then 
		$ECHO "# LVM migration from SCSI to HDLM Start " >> $BOOTFILE
		logmsg_linuxrc $dlmmkinitrd_I42 "$VGCHANGE"
		$ECHO $LVM_STATIC $VGCHANGE -an --ignorelockingfailure $VOL_NAME >> $BOOTFILE
		$ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                        logmsg_linuxrc $dlmmkinitrd_I43 "$VGCHANGE"
                        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
                $ECHO "fi" >>$BOOTFILE
	
		logmsg_linuxrc $dlmmkinitrd_I42 "$VGEXPORT"
                $ECHO $LVM_STATIC $VGEXPORT $VOL_NAME >> $BOOTFILE
		$ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                        logmsg_linuxrc $dlmmkinitrd_I43 "$VGEXPORT"
                        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
                $ECHO "fi" >>$BOOTFILE

		$ECHO "$CP -f $LVM_CONF_HDLM $LVM_CONF" >> $BOOTFILE
		$ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                        logmsg_linuxrc $dlmmkinitrd_I43 "$CP -f $LVM_CONF_HDLM $LVM_CONF"
                        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
                $ECHO "fi" >>$BOOTFILE
	
		logmsg_linuxrc $dlmmkinitrd_I42 "$VGSCAN"
                $ECHO $LVM_STATIC $VGSCAN  >> $BOOTFILE
		$ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                        logmsg_linuxrc $dlmmkinitrd_I43 "$VGSCAN"
                        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
                $ECHO "fi" >>$BOOTFILE

		logmsg_linuxrc $dlmmkinitrd_I42 "$VGIMPORT"
                $ECHO $LVM_STATIC $VGIMPORT $VOL_NAME >> $BOOTFILE
		$ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                        logmsg_linuxrc $dlmmkinitrd_I43 "$VGIMPORT"
                        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
                $ECHO "fi" >>$BOOTFILE

                logmsg_linuxrc $dlmmkinitrd_I42 "$VGCHANGE"
		$ECHO $LVM_STATIC $VGCHANGE -ay --ignorelockingfailure $VOL_NAME >> $BOOTFILE
		$ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                        logmsg_linuxrc $dlmmkinitrd_I43 "$VGCHANGE"
                        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
                $ECHO "fi" >>$BOOTFILE
 
                logmsg_linuxrc $dlmmkinitrd_I42 "$PVSCAN_INIT"
		$ECHO $LVM_STATIC $PVSCAN_INIT 	 >> $BOOTFILE
		$ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                        logmsg_linuxrc $dlmmkinitrd_I43 "$PVSCAN_INIT"
                        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
                $ECHO "fi" >>$BOOTFILE
		$ECHO "# LVM migration from SCSI to HDLM End " >> $BOOTFILE
	
$CAT << RCFILE3 >> $BOOTFILE	
	# Copy configuration files from real root and configure HDLM devices
	$MOUNT $ROOT_PART $SYSTEM_ROOT >>$HDLMLOG 2>>$HDLMLOG
	if [ \$? -ne 0 ]; then
        	$ECHO $dlmmkinitrd_I43 "$MOUNT $ROOT_PART" >> $HDLMLOG
        	$ECHO $dlmmkinitrd_I43 "$MOUNT $ROOT_PART"
        	$SLEEP $SLEEP_INTERVAL
	fi		
	$ECHO $dlmmkinitrd_I45 >> $HDLMLOG
        $ECHO $dlmmkinitrd_I45

	if [ -f $DEST_LOG2 ]
        then
                $MV -f $DEST_LOG2 $DEST_LOG3 >>$HDLMLOG 2>>$HDLMLOG
        fi
        if [ -f $DEST_LOG1 ]
        then
                $MV -f $DEST_LOG1 $DEST_LOG2 >>$HDLMLOG 2>>$HDLMLOG
        fi
        if [ -f $DEST_LOG ]
        then
                $MV -f $DEST_LOG $DEST_LOG1 >>$HDLMLOG 2>>$HDLMLOG
        fi
        $MV -f $HDLMLOG $DEST_LOG
        $CHMOD 600 $DEST_LOG
        $CP -f $LVM_ARCHIVE/* $SYSTEM_ROOT$LVM_ARCHIVE/ >>$HDLMLOG 2>>$HDLMLOG
        $CP -f $LVM_BACKUP/* $SYSTEM_ROOT$LVM_BACKUP/ >>$HDLMLOG 2>>$HDLMLOG
       
	$UNMOUNT $SYSTEM_ROOT >>$HDLMLOG 2>>$HDLMLOG
RCFILE3
	fi	
fi

if [ $KERNEL_2_6 -eq 1 ]
then	
        # mkrootdev /dev/root
        $ECHO "$ECHO mkrootdev /dev/root | /sbin/nash --quiet" >> $BOOTFILE

        # Mount /dev/root on $SYSTEM_ROOT
	$ECHO "$MOUNT -o $fsoption --ro -t $fsdriver /dev/root $SYSTEM_ROOT" >> $BOOTFILE

        # Mount /dev on $SYSTEM_ROOT/dev
        $ECHO "$MOUNT -t tmpfs --bind /dev $SYSTEM_ROOT/dev" >> $BOOTFILE

        # Switchroot
        $ECHO "exec $NASH $DLMBOOTSUPPORT" >> $BOOTFILE
fi

if [ $KERNEL_2_18 -eq 1 ] 
then
	# Enabling Swap
        swap=`$GREP -w "swap" $fstab | $AWK '{ if ($1 !~ /^[ \t]*#/ && $2 == "swap") { print $1;exit }}'`
        $ECHO "$ECHO resume "$swap" | /sbin/nash --quiet" >> $BOOTFILE

        # mkrootdev command
        logmsg_linuxrc $dlmmkinitrd_I42 "mkrootdev"
	if [ $lvm_flag -eq 1 ]
	then
        	$ECHO "$ECHO mkrootdev -t $fsdriver -o $fsoption_2_18 $ROOT_PART | /sbin/nash --quiet" >> $BOOTFILE
       	else 
        	$ECHO "$ECHO mkrootdev -t $fsdriver -o $fsoption_2_18 /dev/\$HDLM_ROOT | /sbin/nash --quiet" >> $BOOTFILE
	fi
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                        logmsg_linuxrc $dlmmkinitrd_I43 "mkrootdev"
                        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
        $ECHO "fi" >>$BOOTFILE

        # mounting root filesystem
        logmsg_linuxrc $dlmmkinitrd_I42 "mount /sysroot"
        $ECHO "$MOUNT /sysroot" >> $BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                        logmsg_linuxrc $dlmmkinitrd_I43 "mount /sysroot"
                        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
        $ECHO "fi" >>$BOOTFILE

        # Setting up FS
        logmsg_linuxrc $dlmmkinitrd_I42 "setuproot"
        $ECHO "$ECHO setuproot | /sbin/nash --quiet" >> $BOOTFILE
        $ECHO "if [ \$? -ne 0 ]; then " >>$BOOTFILE
                        logmsg_linuxrc $dlmmkinitrd_I43 "setuproot"
                        $ECHO "$SLEEP $SLEEP_INTERVAL" >>$BOOTFILE
        $ECHO "fi" >>$BOOTFILE

        # Switchroot
        $ECHO "exec $NASH $DLMBOOTSUPPORT" >> $BOOTFILE
fi
$CHMOD 555 $BOOTFILE
}
#### create_linuxrcfile() ends #### 


############################################################################## 
# Method for verifying if all initrd files are present.
verify_initrdfilelist () {
        for i in $RAMDISKFILES
        {
                if [ ! -f $i ]; then
                        logmsg $dlmmkinitrd_I06 $i
                        STATUS=1
                        exit
                fi
        }
}

############################################################################
# Method for creating the initrd file list 
create_initrdfilelist () {
        # Listing the files to be collected
        RAMDISKFILES="$RAMDISKFILES $DLMCFGMGR $MODULESFILE $DEVICE_FILE $BASH $MOUNT $UNMOUNT $SH $RM"
	if [ $KERNEL_2_4 -eq 1 ]
	then
	        RAMDISKFILES="$RAMDISKFILES $MODULES_DIR/kernel/drivers/DynamicLinkManager/sddlmfdrv.o"
		RAMDISKFILES="$RAMDISKFILES $MODULES_DIR/kernel/drivers/DynamicLinkManager/sddlmadrv.o"
		# Copying nash executable in initrd image
		RAMDISKFILES="$RAMDISKFILES $NASH"
	elif [ $KERNEL_2_6 -eq 1 ]
	then
		RAMDISKFILES="$RAMDISKFILES $MODULES_DIR/kernel/drivers/DynamicLinkManager/sddlmfdrv.ko"
		RAMDISKFILES="$RAMDISKFILES $MODULES_DIR/kernel/drivers/DynamicLinkManager/sddlmadrv.ko"
		RAMDISKFILES="$RAMDISKFILES $UDEV  $UDEVSTART $NASH"
        elif [ $KERNEL_2_18 -eq 1 ]
	then
		RAMDISKFILES="$RAMDISKFILES $MODULES_DIR/kernel/drivers/DynamicLinkManager/sddlmfdrv.ko"
		RAMDISKFILES="$RAMDISKFILES $MODULES_DIR/kernel/drivers/DynamicLinkManager/sddlmadrv.ko"
		RAMDISKFILES="$RAMDISKFILES $NASH"
	fi
		
	#collecting LVM related files in RAMDISK image
	if [ $lvm_flag -eq 1 ]
	then 
		RAMDISKFILES="$RAMDISKFILES $MODULES_DIR/kernel/drivers/md/dm-mod.ko"
		RAMDISKFILES="$RAMDISKFILES $MODULES_DIR/kernel/drivers/md/dm-mirror.ko"
		RAMDISKFILES="$RAMDISKFILES $MODULES_DIR/kernel/drivers/md/dm-zero.ko"
		RAMDISKFILES="$RAMDISKFILES $MODULES_DIR/kernel/drivers/md/dm-snapshot.ko"
		RAMDISKFILES="$RAMDISKFILES $LVM_STATIC $TR $READLINK $SED $LVM_CONF $LVM_CONF_HDLM $LVM_CONF_SCSI $CUT"
	fi 

        if [ $KERNEL_2_18 -eq 1 ]
        then
                RAMDISKFILES="$RAMDISKFILES $USB_DRIVER"
		RAMDISKFILES="$RAMDISKFILES $ROOT_DRIVER"
        fi
        RAMDISKFILES="$RAMDISKFILES $SCSI_DRIVER"
        RAMDISKFILES="$RAMDISKFILES $HBA_DRIVER $FS_DRIVER"
        RAMDISKFILES="$RAMDISKFILES $MODPROBE $INSMOD"
        RAMDISKFILES="$RAMDISKFILES $MODULES_DIR/modules.dep"
        RAMDISKFILES="$RAMDISKFILES $MV $DD $ECHO $CAT $MKNOD $MKDIR $CP $CHMOD $AWK $GAWK $GREP $EXPR"
        RAMDISKFILES="$RAMDISKFILES $SLEEP $LSMOD $LS"
	RAMDISKFILES="$RAMDISKFILES $VERSION_INFO_FILE"

        verify_initrdfilelist   

        if [ $verbose ]
        then
		if [ $KERNEL_2_18 -eq 1 ]
		then
	                logmsg " USB driver:"
		        for i in $USB_DRIVER
			{
				logmsg "   $i"
	                }
		fi
		if [ $KERNEL_2_18 -eq 0 ]
		then
	                logmsg " SCSI driver:"
		        for i in $SCSI_DRIVER
			{
				logmsg "   $i"
	                }
		fi
                logmsg  " Host Adapter drivers:"
                for i in $ROOT_DRIVER $HBA_DRIVER
                {
                        logmsg "   $i"
                }
                logmsg  " HDLM driver:"
                for i in $HDLM_DRIVER
                {
                        logmsg "   $i"
                }
                logmsg  " FS driver:"
                for i in $FS_DRIVER
                {
                        logmsg "   $i"
                }
		if [ $lvm_flag -eq 1 ]
		then
			logmsg  " LVM driver:"
			if [ $DMSETUP_EXIST -eq 1 ]
        		then	
				for i in $LVM_DRIVER_BEG
                		{
                        		logmsg "   $i"
                		}
			fi
			
			for i in $LVM_DRIVER_END
                	{
                        	logmsg "   $i"
                	}
		fi
                logmsg  " Other files:"
                for i in $RAMDISKFILES
                {
                        $ECHO $USB_DRIVER $ROOT_DRIVER $SCSI_DRIVER $HBA_DRIVER $HDLM_DRIVER $FS_DRIVER $LVM_DRIVER_BEG $LVM_DRIVER_END |$GREP $i >/dev/null 2>&1
                        if [ $? -ne 0 ]
                        then
                                logmsg "   $i"
                        fi
                }       
        fi

}

#################################################################
# To get all the dependencies from modules.dep file

get_all_dep() {
  if [ $KERNEL_2_18 -eq 0 ]
  then
      deps=$($AWK 'BEGIN { searched=ARGV[2]; ARGV[2]=""; rc=1 } \
                function modname(filename) { match(filename, /\/([^\/]+)\.k?o:?$/, ret); return ret[1] } \
                function show() { if (orig == searched) { print dep; orig=""; rc=0; exit } } \
                /^\/lib/ { show(); \
                           orig=modname($1); dep=""; \
                           if ($2) { for (i = 2; i <= NF; i++) { dep=sprintf("%s %s", dep, modname($i)); } } } \
                /^      / { dep=sprintf("%s %s", dep, modname($1));  } \
                END      { show(); exit(rc) }' /lib/modules/$kernel/modules.dep $1)
        # Recurrsively calculates the dependencies.
  else
	deps=$($MODPROBE --set-version $($UNAME -r) --show-depends $1 2>/dev/null | $AWK -F " " '{print $2}'\
			| $AWK -F "/" '{print $NF}' | $AWK -F "." '{print $1}' | $GREP -v $1)
  fi
	for i in $deps
        {
                get_all_dep $i $2
        }
         i=$1
                if [ $KERNEL_2_4 -eq 1 ]
                then 
                    fullpath=`$AWK '{print $1}' /lib/modules/$kernel/modules.dep|$GREP -w $i.o|$GREP ":"|$CUT -d ":" -f 1`
                elif [ $KERNEL_2_6 -eq 1 ] || [ $KERNEL_2_18 -eq 1 ]
                then
                    fullpath=`$AWK '{print $1}' /lib/modules/$kernel/modules.dep|$GREP -w $i.ko|$GREP ":"|$CUT -d ":" -f 1`		
                fi		
                if [ "$fullpath" != "" ]
                then
			$ECHO $USB_DRIVER $SCSI_DRIVER $ROOT_DRIVER $HBA_DRIVER $HDLM_DRIVER $FS_DRIVER $LVM_DRIVER_BEG $LVM_DRIVER_END |$GREP -w $fullpath >/dev/null 2>&1
                        if [ $? -ne 0 ]
                        then
                                if [ "$2" == "USB_DRIVER" ]
                                then
                                        USB_DRIVER="$USB_DRIVER $fullpath"
                                fi
                                if [ "$2" == "HBA_DRIVER" ]
                                then
                                        HBA_DRIVER="$HBA_DRIVER $fullpath"
                                        HBA_MODULE="$HBA_MODULE $i"
                                fi
                                if [ "$2" == "FS_DRIVER" ]
                                then
                                        FS_DRIVER="$FS_DRIVER $fullpath"
                                        FS_MODULE="$FS_MODULE $i"
                                fi
				if [ "$2" == "ROOT_DRIVER" ]
                                then					
                                        ROOT_DRIVER="$ROOT_DRIVER $fullpath"
                                        ROOT_MODULE="$ROOT_MODULE $i"
				fi
                        	if [ $lvm_flag -eq 1 ] 
		      		then	
					if [ "$2" == "LVM_DRIVER_BEG" ]
					then
                                        	LVM_DRIVER_BEG="$LVM_DRIVER_BEG $fullpath"
                                        	LVM_MODULE_BEG="$LVM_MODULE_BEG $i"
                                	fi
					if [ "$2" == "LVM_DRIVER_END" ]
                                        then
                                                LVM_DRIVER_END="$LVM_DRIVER_END $fullpath"
                                                LVM_MODULE_END="$LVM_MODULE_END $i"
                                        fi

				fi
			fi

                else
                        if [ "$3" != "NO_ERROR" ] 
                        then
                                logmsg $dlmmkinitrd_I06 $i
                                STATUS=1
                                exit
                        fi
                fi
	if [ $KERNEL_2_18 -eq 1 ]
        then
		if [ $1 = "scsi_mod" ] && [ $SD_INSERTED -ne 1 ]
		then
			SD_INSERTED=1
			get_all_dep "sd_mod" "ROOT_DRIVER"			
		fi
	fi
}

##########################################################
# Fuction to Check if SCSI Disk name is changed using Udev

check_udev_disk()
{
	FILE=$1
	UDEV_FLAG=0
	$DLMCFGMGR -v -udev > /dev/null 2>&1
	if [ $? -ne 0 ]
	then
		logmsg $dlmmkinitrd_I29 "$DLMCFGMGR -v -udev"
		STATUS=1
		exit
	fi
	$DLNKMGR view -drv > /dev/null 2>&1
        if [ $? -ne 0 ]
        then
                logmsg $dlmmkinitrd_I29 "$DLNKMGR view -drv"
                STATUS=1
                exit
        fi
	a=`$GREP -w "/" "$FILE" | $AWK '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $1;exit }}'`
        if [ "$a" == "" ]
        then
                logmsg $dlmmkinitrd_I32 "$FILE"
                STATUS=1
                exit
        else
		if [ $FILE == $fstab ]
		then		
			temp=$($READLINK "$a" | $GREP "/dev/mapper")
		else
			temp=`$ECHO "$a" | $GREP "/dev/mapper"`
			if [  ! -z $temp ]
			then
				temp1=`$UDEVINFO -q path -n $a 2>&1`
				RET=$?
				temp2=`$ECHO $temp1 |$AWK -F "/" '{print $NF}'`				
				if [ "$temp2" == "device not found in database" -o \
					$RET -ne 0 ]
				then
					temp=$temp2
				else
					temp=""
				fi
			fi
		fi
		if [ -z "$temp" ]
		then
			if [ -f $UDEVINFO ]
			then
				devsda1=`$UDEVINFO -q path -n $a 2>&1`
				RET=$?
				devsda=`$ECHO $devsda1 |$AWK -F "/" '{print $NF}'`
				if [ "$devsda" == "device not found in database" -o \
					$RET -ne 0 ]
				then
					LVM_FLAG=0
					root=`$ECHO $a |$GREP -Ex "/dev/sddlm[a-p][a-p]([1][0-5]|[1-9])"`
					if [ "$root" != "" ]
					then
						udev_dev=`$EXPR "$root" : "\/dev\/\(sddlm..\)?*"`
					else
						root=`$ECHO "$a" |$GREP -Ex "/dev/sd[a-z]{1,2}([1][0-5]|[1-9])"`
						if [ "$root" != "" ]
						then
							udev_dev=`$EXPR "$root" : "\/dev\/\(...\)?*"`
						else
							udev_dev="$devsda"
						fi
					fi
					if [ -z "$udev_dev" ]
					then		
						logmsg $dlmmkinitrd_I21 "$FILE"
						STATUS=1
						exit
					fi
					cfg_dev=`$DLNKMGR view -drv | $GREP -w "$udev_dev"`
					if [ -z "$cfg_dev" ]
					then		
						logmsg $dlmmkinitrd_I21 "$FILE"
						STATUS=1
						exit
					fi
				elif [ "/dev/$devsda" != $a ] 
				then
					udev_dev=`$EXPR "$devsda" : "\(...\)?*"`
					if [ -z "$udev_dev" ]
					then		
						logmsg $dlmmkinitrd_I21 "$FILE"
						STATUS=1
						exit
					fi
					cfg_dev=`$DLMCFGMGR -v -udev | $GREP -w "/dev/$udev_dev"`
					if [ -z "$cfg_dev" ]
					then		
						logmsg $dlmmkinitrd_I21 "$FILE"
						STATUS=1
						exit
					else
						UDEV_FLAG=1
					fi
				else
					root=`$ECHO "$devsda" |$GREP -Ex "sddlm[a-p][a-p]([1][0-5]|[1-9])"`
					if [ "$root" != "" ]
					then
						udev_dev=`$EXPR "$root" : "\(sddlm..\)?*"`
					else
						root=`$ECHO "$devsda" |$GREP -Ex "sd[a-z]{1,2}([1][0-5]|[1-9])"`
						if [ "$root" != "" ]
						then
							udev_dev=`$EXPR "$root" : "\(...\)?*"`
						else
							logmsg $dlmmkinitrd_I21 "$FILE"
							STATUS=1
							exit
						fi
					fi
					if [ -z "$udev_dev" ]
					then		
						logmsg $dlmmkinitrd_I21 "$FILE"
						STATUS=1
						exit
					fi
					cfg_dev=`$DLNKMGR view -drv | $GREP -w "$udev_dev"`
					if [ -z "$cfg_dev" ]
					then		
						logmsg $dlmmkinitrd_I21 "$FILE"
						STATUS=1
						exit
					fi
				fi
			else
				logmsg $dlmmkinitrd_I06 "$UDEVINFO"
		                STATUS=1
				exit
			fi
		fi
	fi
}

##############################################################
# Method for getting the HBA driver 

get_hba_driver(){
        
        hostadapter="`$GREP "alias[[:space:]]\+scsi_hostadapter" $MODULESFILE | $GREP -v '^[ 	]*#' | LC_ALL=C $SORT -u | $AWK '{ print $3 }'`"
        hbafound=0
        for i in $hostadapter
        do
                for j in $SUPPORTED_HBA
                do
                        if [ "$i" == "$j" ]
                        then
                                hbafound=1
                                break
                        fi
                done
                if [ $hbafound -eq 1 ]
                then
                        break
                fi
        done
        if [ $hbafound -eq 1 ]
        then
                for i in $hostadapter
                do
                        get_all_dep $i "HBA_DRIVER"
                        if [ "$i" == "qla2200" ]
                        then
                                get_all_dep qla2200_conf "HBA_DRIVER" "NO_ERROR"
                        fi
                        if [ "$i" == "qla2300" ]
                        then
                                get_all_dep qla2300_conf "HBA_DRIVER" "NO_ERROR"
                        fi
               done
         else
                 logmsg $dlmmkinitrd_I38 "$MODULESFILE"
                STATUS=1
                exit
        fi
}

##############################################################
# Method for getting the USB drivers

get_usb_driver() {
        for i in $USB_LIBMODULE
        do    
                get_all_dep $i "USB_DRIVER" "NO_ERROR"
        done
}

##############################################################
# Method for getting all dependencies of the root device 

get_link() {
    $ECHO nash-readlink "$1" | $NASH --force --quiet
}

get_device() {
    $ECHO nash-find "$@" | $NASH --force --quiet \
        | $AWK '{ print $1; exit; }'
}


get_storage_driver() {
    while [ ! -L device ]; do
        [ "$PWD" = "/sys" ] && return
        cd ..
    done
    cd $(get_link ./device)
    while [ ! -f modalias ]; do
        [ "$PWD" = "/sys/devices" ] && return
        cd ..
    done
    PCI_DEV=`$CAT modalias`
    deps=$($MODPROBE --set-version $($UNAME -r) --show-depends $PCI_DEV 2>/dev/null | \
		$AWK -F " " '{print $2}' |$AWK -F "/" '{print $NF}' | $AWK -F "." '{print $1}')
    for driver in $deps ; do
        get_all_dep $driver "ROOT_DRIVER"
    done
} 

##############################################################
# Method for getting all dependencies of the LVM device 

get_lvm_dev() {
    vol_grp=`$LVM_STATIC lvs --ignorelockingfailure --noheadings -o vg_name $1 2>/dev/null`
    if [ -n "$vol_grp" ]; then
        vol_grp=`$ECHO $vol_grp`
        case " $vg_list " in
        *" $vol_grp "*)
            ;;
        *)
            vg_list="$vg_list $vol_grp"
            for device in `$LVM_STATIC vgdisplay --ignorelockingfailure -v $vol_grp 2>/dev/null | $SED -n 's/PV Name//p'`; do
	        root=`$ECHO $device | $GREP -Ex "/dev/sddlm[a-p][a-p]([1][0-5]|[1-9])"`
		if [ "$root" != "" ]
	        then
		        device2=`$EXPR "$root" : "\/dev\/\(sddlm..\).*"`
			partition=`$EXPR "$root" : "\/dev\/sddlm..\(.*\)"`
			sddev=`$DLNKMGR view -drv |$GREP $device2 |$AWK '{print $3}'|$GREP -v "-"`
	                if [ "$sddev" != "" ]
		        then
			        devsda=`$ECHO $sddev|$GREP -w "sda"`
				if [ "$devsda" != "" ]
			        then
				        ROOT_DEV="/dev/sda"$partition
		                else
			                ROOT_DEV=`$ECHO $sddev|$AWK '{print $1}'`$partition
				fi
		        else
				logmsg $dlmmkinitrd_I21 "$fstab"
				STATUS=1
				exit
				fi
		else
			root=`$ECHO $device |$GREP -Ex "/dev/sd[a-z]{1,2}([1][0-5]|[1-9])"`
			if [ "$root" != "" ]  
			then
				ROOT_DEV=$device
			else
				logmsg $dlmmkinitrd_I21 "$fstab"
				STATUS=1
				exit	
			fi
		fi               
            done
            ;;
        esac
    else
        ROOT_DEV=$1
    fi
}

####################################################################
#Method to list fs driver from /etc/fstab
get_fs_driver() {
        fsdriver="`$CAT "$fstab" | $AWK '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $3; }}'`"
	fsoption="`$CAT "$fstab" | $AWK '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $4; }}'`"
        if [ $KERNEL_2_18 -eq 1 ]
        then
                fsoption_2_18="`$ECHO "$fsoption" | $SED -e 's/^r[ow],//' -e 's/,r[ow],$//' -e 's/,r[ow],/,/' -e 's/^r[ow]$/defaults/' -e 's/$/,ro/'`"
        fi
        fscount="`$CAT "$fstab" | $AWK '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $3; }}' | $WC -l`"
        if [ $fscount -gt 1 ]
        then
                logmsg $dlmmkinitrd_I39 "$fstab"
                STATUS=1
                exit
        fi
        fstab_device="`$CAT "$fstab" | $AWK '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $1; }}'`"
        fstab_root=`$ECHO "$fstab_device" | $GREP -Ex "/dev/sd(dlm[a-p][a-p][1][0-5]|dlm[a-p][a-p][1-9]|[a-z]{1,2}[1][0-5]|[a-z]{1,2}[1-9])"`
        
	if [ $lvm_flag -eq 1 ]
        then
		fstab_lvm2=`$READLINK "$fstab_device" | $GREP /dev/mapper`
        fi
	
	if [ -z "$fstab_root" ]
        then
                if [ $KERNEL_2_6 -eq 1 ] || [ $KERNEL_2_18 -eq 1 ]
		then
			check_udev_disk $fstab			
			if [ $UDEV_FLAG -ne 1 ]
			then
				if [ $lvm_flag -eq 1 ]
				then
					if [ -z "$fstab_lvm2" ]
					then                 
						logmsg $dlmmkinitrd_I21 "$fstab"
						STATUS=1
						exit
					fi
				else
					logmsg $dlmmkinitrd_I21 "$fstab"
		                	STATUS=1
			        	exit
				fi
			fi
		else
			logmsg $dlmmkinitrd_I21 "$fstab"
		        STATUS=1
			exit
		fi
	else
		if [ $KERNEL_2_6 -eq 1 ] || [ $KERNEL_2_18 -eq 1 ]
		then
			check_udev_disk $fstab			
		fi
	fi
        
        fsdriverfound=0
        for i in $fsdriver
        do
                for j in $SUPPORTED_FS
                do
                        if [ "$i" == "$j" ]
                        then
                                if [ "$i" == "ext2" ]
                                then
                                        get_all_dep ext3  "FS_DRIVER" 
                                else
                                        get_all_dep $i     "FS_DRIVER" 
                                fi
                                fsdriverfound=1
                                break
                        fi
                done            
                if [ $fsdriverfound -eq 1 ]
                then
                        break
                fi
        done
        if [ $fsdriverfound -ne 1 ]
        then
                logmsg $dlmmkinitrd_I40 "$fstab"
                STATUS=1
                exit
        fi
}

##################################################################
# Method for creating a list of shared files.
create_sharedfilelist () {
        SHAREDLIBS=`$LDD $RAMDISKFILES 2>/dev/null | $AWK '{ print $(NF-1)}' | $GREP ":" -v | $GREP "lib" | $SORT -u`
}

#################################################################
# Method for stripping the shared files

strip_sharedfiles () {
        $MKDIR "$HDLMLIB" > /dev/null 2>&1
        if [ $? -ne 0 ]
        then
                logmsg $dlmmkinitrd_I29 "$MKDIR"
                STATUS=1
                exit
        fi
        for LIB in $SHAREDLIBS; do
                $MKDIR -p `$DIRNAME $HDLMLIB$LIB` > /dev/null 2>&1
                $CP $LIB $HDLMLIB$LIB > /dev/null 2>&1
                $STRIP $HDLMLIB$LIB > /dev/null 2>&1
        done
}

##############################################################################
# Method to calculate initrd size

calculate_imagesize () {
        INODES="`$FIND $DEV_DIR $HDLMLIB $RAMDISKFILES | $WC -w`"
        INODES=$(($INODES + 64))
        IMAGESIZE="`$DU -ck $DEV_DIR $HDLMLIB $RAMDISKFILES | $TAIL -1 | $AWK '{print $1}'`"
        IMAGESIZE=$(($IMAGESIZE + $INODES / 8 + 512))
        if [ $INODES -gt $IMAGESIZE ]; then
                if [ $INODES -gt 8192 ]; then
                        B=$(($IMAGESIZE * 8192 / $INODES))
                        INODE_OPT="-g $(($B + 8 - $B % 8)) -N $INODES"
                else
                        INODE_OPT="-N $INODES"
                fi
        else
                INODE_OPT="-i $(($IMAGESIZE * 1024 / $INODES))"
        fi

}

#################################################################################
# Method that calculates the root partition

get_root_part()
{
        if [ $verbose ]
        then
                logmsg $dlmmkinitrd_I28 "$DLNKMGR view -drv"
        fi
	mapper=0
	chk_lvm=0
        $DLNKMGR view -drv > /dev/null 2>&1
        if [ $? -ne 0 ]
        then
                logmsg $dlmmkinitrd_I29 "$DLNKMGR view -drv"
                STATUS=1
                exit
        fi
        a=`$GREP -w "/" "$MTAB" | $AWK '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $1;exit }}'`
        if [ "$a" == "" ]
        then
                logmsg $dlmmkinitrd_I32 "$MTAB"
                STATUS=1
                exit
        else		
		if [ $KERNEL_2_6 -eq 1 ] || [ $KERNEL_2_18 -eq 1 ]
		then
			check_udev_disk $MTAB
			if [ $UDEV_FLAG -ne 1 ] 
			then
				chk_lvm=`$ECHO $a | $GREP /dev/mapper`
          	      		if [ $lvm_flag -eq 1 ] && [ -z "$chk_lvm" ]
	                	then
		                	logmsg $dlmmkinitrd_I21 "$fstab"
			        	STATUS=1
					exit
			       	fi			
	                	if [ ! -z "$chk_lvm" ] && [ $lvm_flag -ne 1 ]
		        	then
			        	logmsg $dlmmkinitrd_I21 "$fstab"
					STATUS=1
                        		exit
	                	fi	
			fi
		fi
		if [ $UDEV_FLAG -eq 1 ]
		then
			if [ $lvm_flag -eq 1 ] 
                	then
                        	logmsg $dlmmkinitrd_I21 "$fstab"
                        	STATUS=1
                        	exit
                	fi
			devsda=`$UDEVINFO -q path -n $a |$AWK -F "/" '{print $NF}'`
			if [ "$devsda" == "device not found in database" ]
		        then
				ROOT_PART="$a"
			else
				ROOT_PART="/dev/$devsda"		
			fi
		elif [ $lvm_flag -eq 1 ]
		then				
			root=`$ECHO $a | $GREP -w /dev/mapper`
			if [ "$root" != "" ]
			then
				ROOT_PART=$a
				mapper=1
			else
				logmsg $dlmmkinitrd_I21 "$MTAB"
				STATUS=1
				exit	
			fi
		else
			root=`$ECHO $a|$GREP -Ex "/dev/sddlm[a-p][a-p]([1][0-5]|[1-9])"`
	                if [ "$root" != "" ]
		        then
			        device=`$EXPR "$root" : "\/dev\/\(sddlm..\).*"`
				partition=`$EXPR "$root" : "\/dev\/sddlm..\(.*\)"`
	                        sddev=`$DLNKMGR view -drv |$GREP $device|$AWK '{print $3}'|$GREP -v "-"`
		                if [ "$sddev" != "" ]
			        then
				        devsda=`$ECHO $sddev|$GREP -w "sda"`
					if [ "$devsda" != "" ]
	                                then
		                                ROOT_PART="/dev/sda"$partition
			                else
				                ROOT_PART=`$ECHO $sddev|$AWK '{print $1}'`$partition
					fi
	                        else
					logmsg $dlmmkinitrd_I21 "$MTAB"
					STATUS=1
					exit
				fi
			else
				root=`$ECHO $a|$GREP -Ex "/dev/sd[a-z]{1,2}([1][0-5]|[1-9])"`
				if [ "$root" != "" ]  
				then
					ROOT_PART=$a
				else
					logmsg $dlmmkinitrd_I21 "$MTAB"
					STATUS=1
					exit	
				fi
			fi
		fi
        fi
        if [ $verbose ]
        then
		if [ $mapper -eq 0 ]
		then        
			logmsg $dlmmkinitrd_I16 "$ROOT_PART"  $dlmmkinitrd_I34
        	fi
	fi
}

###########################################################################
# Method for getting the drivers required for actual root device
get_root_driver() {	
	fstab_root="`$CAT "$fstab" | $AWK '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $1; }}'`"
	root_count="`$CAT "$fstab" | $AWK '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $1; }}' | $WC -l`"
	if [ $root_count -gt 1 ]
        then
                logmsg $dlmmkinitrd_I39 "$fstab"
                STATUS=1
                exit
        fi
	if [ $lvm_flag -eq 1 ]
        then
		fstab_lvm3=`$READLINK "$fstab_root" | $GREP /dev/mapper`
        fi
        if [ "$fstab_root" == "" ]
        then
                logmsg $dlmmkinitrd_I32 "$fstab"
                STATUS=1
                exit
        else
		check_udev_disk $fstab
		if [ $UDEV_FLAG -ne 1 ] 
		then
			if [ $lvm_flag -eq 1 ]
			then
				if [ -z "$fstab_lvm3" ]
				then                 
					logmsg $dlmmkinitrd_I21 "$fstab"
					STATUS=1
					exit
				else
					get_lvm_dev "$fstab_root"
				fi
			else
				root=`$ECHO $fstab_root | $GREP -Ex "/dev/sddlm[a-p][a-p]([1][0-5]|[1-9])"`
		                if [ "$root" != "" ]
			        then
				        device=`$EXPR "$root" : "\/dev\/\(sddlm..\).*"`
					partition=`$EXPR "$root" : "\/dev\/sddlm..\(.*\)"`
					sddev=`$DLNKMGR view -drv |$GREP $device|$AWK '{print $3}'|$GREP -v "-"`
			                if [ "$sddev" != "" ]
				        then
					        devsda=`$ECHO $sddev|$GREP -w "sda"`
						if [ "$devsda" != "" ]
					        then
						        ROOT_DEV="/dev/sda"$partition
				                else
					                ROOT_DEV=`$ECHO $sddev|$AWK '{print $1}'`$partition
						fi
				        else
						logmsg $dlmmkinitrd_I21 "$fstab"
						STATUS=1
						exit
					fi
				else
					root=`$ECHO $fstab_root|$GREP -Ex "/dev/sd[a-z]{1,2}([1][0-5]|[1-9])"`
					if [ "$root" != "" ]  
					then
						ROOT_DEV=$fstab_root
					else
						logmsg $dlmmkinitrd_I21 "$fstab"
						STATUS=1
						exit	
					fi
				fi
			fi
		else
			if [ $lvm_flag -eq 1 ] 
                	then
                        	logmsg $dlmmkinitrd_I21 "$fstab"
                        	STATUS=1
                        	exit
                	fi
			devsda=`$UDEVINFO -q path -n $fstab_root |$AWK -F "/" '{print $NF}'`
			if [ "$devsda" == "device not found in database" ]
		        then
				ROOT_DEV="$fstab_root"
			else
				ROOT_DEV="/dev/$devsda"		
			fi		
		fi
	fi
	sysfs=$(get_device -type d /sys/block -name ${ROOT_DEV##/dev/})
        $PUSHD $sysfs >/dev/null 2>&1
        get_storage_driver
        $POPD >/dev/null 2>&1
}

##############################################################################
# Method to copy the files

copy_files () {
	if [ $KERNEL_2_4 -eq 1 ]
	then
	        ($CD $DEV_DIR; $FIND  sd* console kmem mem null ram0 ramdisk tty[0-6] loop0 hda* systty* | $CPIO -pdm --quiet $HDLMMNT/dev)
		if [ $? -ne 0 ]
		then
			logmsg $dlmmkinitrd_I29 "$CPIO"
			STATUS=1
			exit
		fi
	fi
        $FIND $RAMDISKFILES | $CPIO -pdm --quiet $HDLMMNT > /dev/null 2>&1
        if [ $? -ne 0 ]
        then
                logmsg $dlmmkinitrd_I29 "$CPIO"
                STATUS=1
                exit
        fi
        ($CD "$HDLMLIB"; $FIND * | $CPIO -pdm --quiet $HDLMMNT)
        if [ $? -ne 0 ]
        then
                logmsg $dlmmkinitrd_I29 "$CPIO"
                STATUS=1
                exit
        fi
	if [ $KERNEL_2_6 -eq 1 ]
	then
		$CP   $UDEV_CONF_FILE $HDLMMNT$UDEV_DIR
	fi
}
################################################################
#Method to check LVM2 disk as root filesystem

check_lvm_disk()
{
	if [ ! -f $LVM_CONF ]
	then 
		logmsg $dlmmkinitrd_I06 $LVM_CONF			
		STATUS=1
        	exit
	fi
	VOL_NAME=`$ECHO $1 | $CUT -d "/" -f 4 | $CUT -d "-"  -f1`
	#filter entry check
	filter_chk=`$CAT $LVM_CONF | $TR -s  "\t"  " " | $TR -s " " |  $TR -d " "|$GREP -w -n "^filter" | $CUT -d ":" -f1`
	
	if [ -z "$filter_chk" ]
        then
               logmsg $dlmmkinitrd_I07 $LVM_CONF
               STATUS=1
               exit
        fi

	for o in $filter_chk
	do
		filter_chk_no=$o
	break
	done

	f1=`$SED -n "$filter_chk_no p" $LVM_CONF | $GREP -w -e 'filter *= *\[ *\"a|sddlm\.\*|\" *, *\"r|sd\.\*|\" *] *$'`
	if [ -z "$f1" ]
	then
		f8=`$SED -n "$filter_chk_no p" $LVM_CONF | $GREP -w -e 'filter *= *\[ *\"a|sddlm\*|\" *, *\"r|/dev/sd|\" *] *$'`
		if [ -z "$f8" ]
		then
			logmsg $dlmmkinitrd_I07 $LVM_CONF
        		STATUS=1
        		exit
		fi
	fi
	
	#types entry check
	types_chk=`$CAT $LVM_CONF | $TR -s  "\t"  "  " | $TR -s " " |  $TR -d " "|   $GREP -w -n "^types" | $CUT -d ":" -f1`

	if [ -z "$types_chk" ]
        then
               logmsg $dlmmkinitrd_I07 $LVM_CONF
               STATUS=1
               exit
        fi

	for j in $types_chk
	do
        	types_chk_no=$j
        	break
	done
	
	f2=`$SED -n "$types_chk_no p" $LVM_CONF | $GREP -w -e "types *= *\[ *\"sddlmfdrv\" *, *16 *\] *$"`
	if [ -z "$f2" ]
        then
               logmsg $dlmmkinitrd_I07 $LVM_CONF
               STATUS=1
               exit
        fi

	#md_component_detection entry check
	md_component_detection_chk=`$CAT $LVM_CONF | $TR -s  "\t"  "  " | $TR -s " " |  $TR -d " "|  $GREP -w -n "^md_component_detection" | $CUT -d ":" -f1`

	if [ -z "$md_component_detection_chk" ]
        then
               logmsg $dlmmkinitrd_I07 $LVM_CONF
               STATUS=1
               exit
        fi

	for k in $md_component_detection_chk
	do
        	md_component_detection_chk_no=$k
        	break
	done
	
	f3=`$SED -n "$md_component_detection_chk_no p" $LVM_CONF | $GREP -w -e "md_component_detection *= *0 *$"`
	if [ -z "$f3" ]
	then
	       logmsg $dlmmkinitrd_I07 $LVM_CONF
               STATUS=1
               exit
	fi
	
	$DLNKMGR view -drv > /dev/null 2>&1
        if [ $? -ne 0 ]
        then
                logmsg $dlmmkinitrd_I29 "$DLNKMGR view -drv"
                STATUS=1
                exit
        fi
		
	VOL_DEV_WHOLE=0
	VOL_DEV=`$PVSCAN | $GREP -w $VOL_NAME | $TR -s " "| $CUT -d " " -f 3`	
	#checking LVM disk  
	for ko in $VOL_DEV
	do
		VOL_DEV=`$ECHO $ko | $GREP -Ex "/dev/sddlm[a-p][a-p]([1][0-5]|[1-9])"`
		if [ ! -z $VOL_DEV ]
		then 
			VOL_DEV_WHOLE=`$EXPR "$VOL_DEV" : "\/dev\/\(sddlm..\).*"`

		else 
			VOL_DEV=`$ECHO $ko | $GREP -Ex "/dev/sddlm[a-p][a-p]"`
			if [ ! -z $VOL_DEV ]
			then
				VOL_DEV_WHOLE=`$EXPR "$VOL_DEV" : "\/dev\/\(sddlm..\).*"`
			else

				VOL_DEV=`$ECHO $VOL_DEV | $GREP -Ex "/dev/sd(dlm[a-p][a-p][1][0-5]|dlm[a-p][a-p][1-9]|[a-z]{1,2}[1][0-5]|[a-z]{1,2}[1-9])"`
				if [ ! -z $VOL_DEV ]
				then
					VOL_DEV_WHOLE=`$EXPR  "$VOL_DEV" : "\/dev\/\(sd.\).*"`	
				fi
			fi
		fi
	
		VOL_DEV_CHECK=`$DLNKMGR view -drv |$GREP -w $VOL_DEV_WHOLE`
		if [ ! -z "$VOL_DEV_CHECK" ]
		then
			lvm_flag=1	
		else	
			logmsg $dlmmkinitrd_I21 "$fstab"
			STATUS=1
	                exit
		fi
	done
}

#########################################################
#Method to create two lvm_conf files . one compatible with HDLM and other compatible to SCSI

create_lvm_conf_files()
{
#Check for filter entry in lvm.conf file
$CP -f $LVM_CONF  $LVM_CONF_HDLM
if [ $? -ne 0 ]
then
	logmsg $dlmmkinitrd_I43 "$CP -f $LVM_CONF  $LVM_CONF_HDLM"
	STATUS=1
	exit
fi

$CP -f $LVM_CONF  $LVM_CONF_SCSI
if [ $? -ne 0 ]
then
        logmsg $dlmmkinitrd_I43 "$CP -f $LVM_CONF $LVM_CONF_SCSI"
        STATUS=1
        exit
fi

filter=`$CAT $LVM_CONF | $TR -s  "\t"  " " | $TR -s " " |  $TR -d " "|$GREP -w -n "^filter" | $CUT -d ":" -f1`
for i in $filter
do
	filter_no=$i
	break
done

p1=`$SED -n "$filter_no p" $LVM_CONF | $GREP -w -e 'filter *= *\[ *\"a|sd *\*|\" *\]'`
if [ -z "$p1" ]
then
	$SED "$filter_no i $SCSI_LVM_FILTER" $LVM_CONF > $LVM_CONF_SCSI
fi

#Check for types entry in lvm.conf file
types=`$CAT $LVM_CONF_SCSI | $TR -s  "\t"  "  " | $TR -s " " |  $TR -d " "|   $GREP -w -n "^types" | $CUT -d ":" -f1`
for j in $types
do
	types_no=$j
	break
done

p2=`$SED -n "$types_no p" $LVM_CONF_SCSI | $GREP -w -e "types *= *\[ *\"fd\" *, *16 *\]"`
if [ -z "$p2" ]
then
	$SED  "$types_no i $SCSI_LVM_TYPES" $LVM_CONF_SCSI > $LVM_CONF_TEMP
	$CP -f $LVM_CONF_TEMP $LVM_CONF_SCSI
fi

#Check for md_component_detection entry in lvm.conf file
md_component_detection=`$CAT $LVM_CONF_SCSI | $TR -s  "\t"  "  " | $TR -s " " |  $TR -d " "|  $GREP -w -n "^md_component_detection" | $CUT -d ":" -f1`

for k in $md_component_detection
do
	md_component_detection_no=$k
	break
done

p3=`$SED -n "$md_component_detection_no p" $LVM_CONF_SCSI | $GREP -w -e "md_component_detection *= *1"`
if [ -z "$p3" ]
then
	$SED  "$md_component_detection_no i $SCSI_LVM_MD_COMPONENT_DETECTION" $LVM_CONF_SCSI > $LVM_CONF_TEMP
	$CP -f $LVM_CONF_TEMP $LVM_CONF_SCSI
fi
}

###########################################################################
# Main starts here

trap "cchandler" 2
trap " clear " EXIT

if [ $KERNEL_2_4 -eq 1 ]
then 
     BOOTFILE="$HDLMMNT/linuxrc"
     MODULESFILE="/etc/modules.conf"
     SCSI_DRIVER="$MODULES_DIR/kernel/drivers/scsi/scsi_mod.o $MODULES_DIR/kernel/drivers/scsi/sd_mod.o" 
elif [ $KERNEL_2_6 -eq 1 ]
then
     BOOTFILE="$HDLMMNT/init"
     MODULESFILE="/etc/modprobe.conf"
     SCSI_DRIVER="$MODULES_DIR/kernel/drivers/scsi/scsi_mod.ko $MODULES_DIR/kernel/drivers/scsi/sd_mod.ko"
elif [ $KERNEL_2_18 -eq 1 ]
then
    BOOTFILE="$HDLMMNT/init"
    MODULESFILE="/etc/modprobe.conf"
fi
# check for name of script
i=`$BASENAME $0`
if [ "$i" != "$FILENAME" ]
then
        SKIP_CLEANUP=1
        STATUS=1
        logmsg $dlmmkinitrd_I03
        exit
fi

###########################################################################
#Kernel Version Agreement Check
#For matching kernel version-START#
if [ -f $HDLM_COMMON_KNL_CHK ]; then
	. $HDLM_COMMON_KNL_CHK
	if [ "$HDLM_COMMON_RESULT" != "MATCH" ]; then
		if [ "$HDLM_COMMON_RESULT" == "UNMATCH" ]; then
			logmsg $dlmmkinitrd_I49
		else
			logmsg $dlmmkinitrd_I50 "$HDLM_COMMON_KNL_VER_FILE"
		fi
		SKIP_CLEANUP=1
		STATUS=1
		exit
	fi
else
	logmsg $dlmmkinitrd_I50 "$HDLM_COMMON_KNL_CHK"
	SKIP_CLEANUP=1
	STATUS=1
	exit
fi
#For matching kernel version-END#
##########################################################################


# check for root user
if [ `$ID -u` -ne  0 ]
then
        SKIP_CLEANUP=1
        STATUS=1
        logmsg $dlmmkinitrd_I41
        exit
fi

######## Options check ###########

# flags to avoid duplicate entries  
fstab_flag=0
verbose_flag=0
force_flag=0

while [ $# -ne 0 ]
do
        case $1 in 
                -fstab*)
                                if [ $fstab_flag -eq 1 ]
                                then
                                        usage
                                else
                                        tmptab=`$ECHO $1|$SED 's/-fstab//'`
                                        if  [ "$tmptab" == "" ]
                                        then
                                                fstab="$2"
                                                if [ "$fstab" == "" ]
                                                then
                                                        usage
                                                fi
                                                shift
                                        else
                                                usage
                                        fi
                                        fstab_flag=1
                                fi
                                ;;

                -f)
                                if [ $force_flag -eq 1 ]
                                then
                                        usage
                                else
                                        force=1
                                        force_flag=1
                                fi
                                ;;
                -v)
                                if [ $verbose_flag -eq 1 ]
                                then
                                        usage
                                else
                                        verbose=1
                                        verbose_flag=1
                                fi
                                ;;
                *)      
                                if [ -z "$target" ]
                                then
                                target="$1"
                                elif [ -z "$kernel" ]
                                then
                                        kernel="$1"
                                else
                                        usage
                                fi
                                ;;
        esac

        shift
done

# Check if kernel or image name is not specified
if [ -z "$kernel" -o -z "$target" ] 
then
        usage
fi

# check whether single instance of script is running
if [ -f "$LOCKFILE" ]
then
        SKIP_CLEANUP=1
        STATUS=1
        logmsg $dlmmkinitrd_I02
        exit
fi

logmsg $dlmmkinitrd_I04

# Creating Temporary directory
if [ ! -d "$TMPDIR" ]
then 
        $MKDIR "$TMPDIR" > /dev/null 2>&1
        if [ $? -ne 0 ]
        then
                logmsg $dlmmkinitrd_I29 "$MKDIR $TMPDIR"
                STATUS=1
                exit
        fi
fi

# create lockfile for multiple instance check
$TOUCH "$LOCKFILE" > /dev/null 2>&1
if [ $? -ne 0 ]
then
        logmsg $dlmmkinitrd_I29 "$TOUCH"
        STATUS=1
        exit
fi

# fstab assigment in case -fstab is not used
if [ -z "$fstab" ]
then
        fstab=/etc/fstab
fi

if [ ! -f "$fstab" ]
then
        logmsg $dlmmkinitrd_I06 "$fstab"
        STATUS=1
        exit
fi


# Check if $kernel parameter is correct
if [ ! -d /lib/modules/$kernel ]
then
        logmsg $dlmmkinitrd_I30 "/lib/modules/$kernel/"
        STATUS=1
        exit
fi 

#####Check whether a file or directory by the image name is already present#####
######Also check for the force option in this case######
if [ -f "$target" ]
then
        if [ -z $force ]
        then
                logmsg $dlmmkinitrd_I20 "$target"
                STATUS=1
                exit
        fi
else
        if [ -d "$target" ]
        then
                logmsg $dlmmkinitrd_I20 "$target"
                STATUS=1
                exit
        fi
fi

#####Taking a backup incase of existence of a file by the same as the image name#####
if [ -f "$target" ]
then
        $CP -f "$target" "$BACKUP" > /dev/null 2>&1
        if [ $? -eq 0 ]
        then
                BACKUP_CP_SUCCESS=1
        fi
else
        BACKUP_CP_SUCCESS=2
fi

# Check for existence of the required files/executables
# Append this list if others commands are added to the dlmmkinitrd script

FILELIST="$MODULESFILE $MODULES_DIR/modules.dep $MTAB $DLMPROP"
for i in $FILELIST
do
        if [ ! -f $i ]
        then
                logmsg $dlmmkinitrd_I06 $i
                STATUS=1
                exit
        fi
done

######################################################################
# Reading the HBA driver to be inserted from the configuration file

conf_flag=0
for i in  `$SED 's/\(.*\)#.*/\1/g' $DLMPROP`
do
        if [ "" !=  "`$GREP -w $i  $MODULES_DIR/modules.dep`" ]
        then
                if [ $KERNEL_2_4 -eq 1 ]
                then 
                tmpmod=`$EXPR "$i" : "\(.*\).o"`
                elif [ $KERNEL_2_6 -eq 1 ] || [ $KERNEL_2_18 -eq 1 ]
                then 
                    tmpmod=`$EXPR "$i" : "\(.*\).ko"`
                fi
                if [ "" !=  "$tmpmod" ]
                then
                        if [ $KERNEL_2_4 -eq 1 ]
                        then 
                        SUPPORTED_HBA="$SUPPORTED_HBA `$EXPR "$i" : "\(.*\).o"`"
                        elif [ $KERNEL_2_6 -eq 1 ] || [ $KERNEL_2_18 -eq 1 ]
                        then 
                            SUPPORTED_HBA="$SUPPORTED_HBA `$EXPR "$i" : "\(.*\).ko"`"
                        fi
                        conf_flag=1
                fi
        fi
done

if [ $conf_flag -eq 0 ]
then
        logmsg $dlmmkinitrd_I07 $DLMPROP
        STATUS=1
        exit
fi

if [ "" == "$SUPPORTED_HBA" ]
then
        logmsg $dlmmkinitrd_I07 $DLMPROP
        STATUS=1
        exit
fi

#Checking whether root device is LVM2 disk

lvm_flag=0
if [ $KERNEL_2_6 -eq 1 ] || [ $KERNEL_2_18 -eq 1 ]
then
lvm_ko=$($AWK '/^[ \t]*[^#]/ { if ($2 == "/") { print $1; }}' $fstab)
temp=`$READLINK "$lvm_ko" | $GREP /dev/mapper`
	if [ ! -z $temp ]
	then 
		check_lvm_disk $temp		
	fi
fi

if [ $lvm_flag -eq 1 ]
then
	create_lvm_conf_files
fi

#####################################################################
# Creating ramdisk required file list.
if [ $verbose ]
then
        logmsg $dlmmkinitrd_I08
fi

HDLM_INITRD="$target"
MODULES_DIR=/lib/modules/$kernel
if [ $KERNEL_2_4 -eq 1 ]
then 
    SCSI_DRIVER="$MODULES_DIR/kernel/drivers/scsi/scsi_mod.o $MODULES_DIR/kernel/drivers/scsi/sd_mod.o"
    SDDLMADRV="$MODULES_DIR/kernel/drivers/DynamicLinkManager/sddlmadrv.o"
    SDDLMFDRV="$MODULES_DIR/kernel/drivers/DynamicLinkManager/sddlmfdrv.o"
elif [ $KERNEL_2_6 -eq 1 ]
then 
    SCSI_DRIVER="$MODULES_DIR/kernel/drivers/scsi/scsi_mod.ko $MODULES_DIR/kernel/drivers/scsi/sd_mod.ko"
    SDDLMADRV="$MODULES_DIR/kernel/drivers/DynamicLinkManager/sddlmadrv.ko"
    SDDLMFDRV="$MODULES_DIR/kernel/drivers/DynamicLinkManager/sddlmfdrv.ko"
elif [ $KERNEL_2_18 -eq 1 ]
then
    SDDLMADRV="$MODULES_DIR/kernel/drivers/DynamicLinkManager/sddlmadrv.ko"
    SDDLMFDRV="$MODULES_DIR/kernel/drivers/DynamicLinkManager/sddlmfdrv.ko"		
fi
HDLM_DRIVER="$SDDLMADRV $SDDLMFDRV"

##################
# Function calls

if [ $KERNEL_2_18 -eq 1 ]
then
        get_usb_driver
	get_root_driver
fi
alert_insertion_flag
get_hba_driver

if [ $lvm_flag -eq 1 ]
then
        DMSETUP_EXIST=0
	if [ -x $DMSETUP -a -e $LVM_CONTROL ]; then
                dmout=`$DMSETUP ls 2>/dev/null`
       	        if [ "$dmout" != "No devices found" -a "$dmout" != "" ]; then
               	 	DMSETUP_EXIST=1        
			get_all_dep dm-mod "LVM_DRIVER_BEG"
             	fi
     	fi
fi

get_fs_driver

#Getting dependancy of LVM drivers
if [ $lvm_flag -eq 1 ]
then
	if [ $DMSETUP_EXIST -eq 0 ]
	then
		get_all_dep dm-mod "LVM_DRIVER_END"
	fi
	get_all_dep dm-mirror "LVM_DRIVER_END"
	get_all_dep dm-zero "LVM_DRIVER_END"
	get_all_dep dm-snapshot "LVM_DRIVER_END"
fi

create_initrdfilelist   
create_sharedfilelist
strip_sharedfiles
if [ $KERNEL_2_4 -eq 1 ]
then
	calculate_imagesize

	# Creating ramdisk file system
	if [ $verbose ]
	then
		logmsg $dlmmkinitrd_I09
	fi
	$DD if=/dev/zero of=$IMAGE count=$IMAGESIZE bs=1024> /dev/null 2>&1
	if [ $? -ne 0 ]
	then
		logmsg $dlmmkinitrd_I29 "$DD if=/dev/zero of=$IMAGE count=$IMAGESIZE bs=1024"
		STATUS=1
		exit
	fi
	$MKE2FS -q -F -m0 $INODE_OPT $IMAGE $IMAGESIZE >/dev/null 2>&1
	if [ $? -ne 0 ]
	then
		 logmsg $dlmmkinitrd_I29 "$MKE2FS -q -F -m0 $INODE_OPT $IMAGE $IMAGESIZE"
		 STATUS=1
		 exit
	fi

	# Mounting ramdisk file system
	if [ $verbose ]
	then
		logmsg $dlmmkinitrd_I10 "$HDLMMNT"
	fi
fi

$MKDIR "$HDLMMNT" > /dev/null 2>&1
if [ $? -ne 0 ]
then
         logmsg $dlmmkinitrd_I29 "$MKDIR $HDLMMNT"
         STATUS=1
         exit
fi

if [ $KERNEL_2_4 -eq 1 ]
then
	$MOUNT -oloop $IMAGE $HDLMMNT > /dev/null 2>&1
	if [ $? -ne 0 ]
	then
		 logmsg $dlmmkinitrd_I29 "$MOUNT -oloop $IMAGE $HDLMMNT"
		 STATUS=1
		 exit
	fi
fi

$MKDIR "$HDLMMNT"/etc "$HDLMMNT"/proc "$HDLMMNT"/lib "$HDLMMNT"/dev
if [ $lvm_flag -eq 1 ] 
then
	$MKDIR -p "$HDLMMNT$LVM_BACKUP"
fi

$RM -rf "$HDLMMNT"/lost+found

if [ $KERNEL_2_6 -eq 1 ]
then
	$MKDIR "$HDLMMNT"/sys "$HDLMMNT"/etc/udev "$HDLMMNT"/udev "$HDLMMNT"/sysroot
	$MKNOD "$HDLMMNT$CONSOLE_DEVICE" c 5 1
	$MKNOD "$HDLMMNT$NULL_DEVICE" c 1 3
	$MKNOD "$HDLMMNT$RAM_DEVICE" b 1 1
	$MKNOD "$HDLMMNT$STTY_DEVICE" c 4 0
	for i in 1 2 3 4; do
		$MKNOD "$HDLMMNT$TTY_DEVICE"$i c 4 $i
	done
fi
if [ $KERNEL_2_18 -eq 1 ]
then
        $MKDIR "$HDLMMNT"/sys "$HDLMMNT"/sysroot
        $MKDIR "$HDLMMNT$MAPPER_DIR"

        $MKNOD "$HDLMMNT$RAM_DEVICE"0 b 1 0
        $MKNOD "$HDLMMNT$RAM_DEVICE"1 b 1 1
        $LN -sf $RAM1 "$HDLMMNT$RAM_DEVICE"

        $MKNOD "$HDLMMNT$NULL_DEVICE" c 1 3
        $MKNOD "$HDLMMNT$ZERO_DEVICE" c 1 5
        $MKNOD "$HDLMMNT$STTY_DEVICE" c 4 0

        for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 ; do
                $MKNOD "$HDLMMNT$TTY_DEVICE"$i c 4 $i
        done      

        for i in 0 1 2 3 ; do
                $MKNOD "$HDLMMNT$TTY_SDEVICE"$i c 4 $(($i + 64))
        done
        $MKNOD "$HDLMMNT$TTY_DEVICE" c 5 0
        $MKNOD "$HDLMMNT$CONSOLE_DEVICE" c 5 1
        $MKNOD "$HDLMMNT$PTMX_DEVICE" c 5 2
        $MKNOD "$HDLMMNT$RTC_DEVICE" c 10 135
        if [ "$($UNAME -m)" == "ia64" ]
        then
                $MKNOD "$HDLMMNT$EFIRTC_DEVICE" c 10 136
        fi
fi

if [ $verbose ]
then
        logmsg $dlmmkinitrd_I11
fi
copy_files

if [ $verbose ]
then
        if [ $KERNEL_2_6 -eq 1 ] || [ $KERNEL_2_18 -eq 1 ]
        then
                logmsg $dlmmkinitrd_I46
        else
                logmsg $dlmmkinitrd_I12
        fi
fi
create_linuxrcfile

if [ $verbose ]
then
        logmsg $dlmmkinitrd_I13
fi
create_fstab

if [ $verbose ]
then
        logmsg $dlmmkinitrd_I14
fi
create_hdlmdirectories

if [ $KERNEL_2_6 -eq 1 ] || [ $KERNEL_2_18 -eq 1 ]
then
	create_nash_support_file
fi

if [ $KERNEL_2_4 -eq 1 ]
then
	if [ $verbose ]
	then
		logmsg $dlmmkinitrd_I24
	fi
	$UNMOUNT $IMAGE > /dev/null 2>&1
	if [ $? -ne 0 ]
	then
		logmsg $dlmmkinitrd_I29 "$UNMOUNT $IMAGE"
		STATUS=1
		exit
	fi
elif [ $KERNEL_2_6 -eq 1 ] || [ $KERNEL_2_18 -eq 1 ]
then
	($CD $HDLMMNT; $FIND . | $CPIO --quiet -c -o) > $IMAGE
fi

# Compressed image file creation
if [ $verbose ]
then
        logmsg $dlmmkinitrd_I15
fi
$GZIP -9 < $IMAGE > "$HDLM_INITRD"
if [ $? -ne 0 ]
then
        logmsg $dlmmkinitrd_I29 "$GZIP"
        STATUS=1
        exit
fi

if [ $KERNEL_2_6 -eq 1 ] || [ $KERNEL_2_18 -eq 1 ]
then
        logmsg "$dlmmkinitrd_I47 $HDLM_INITRD $dlmmkinitrd_I48"
elif [ $KERNEL_2_4 -eq 1 ]
then 
        if [ $dlmmkinitrd_I37  ]
        then
                logmsg "$dlmmkinitrd_I22 $IMAGESIZE KB $dlmmkinitrd_I23 $HDLM_INITRD $dlmmkinitrd_I37"
        else
                logmsg "$dlmmkinitrd_I22 $HDLM_INITRD $dlmmkinitrd_I23 $IMAGESIZE KB."
	fi
fi
