This blog post is authored by Ravi A from Dell Change Management team.

A Dell system uses system software (BIOS and other firmware such as RAID controller firmware, PCIe-SSD firmware, Network Card Interface (NIC) firmware etc.) and required Linux operating system. General practice is to first install required Linux operating system and later perform the system software inventory and/or updates. Here we are providing a one stop solution for installing required Linux operating system followed by inventory and update of system software. In this way, we end up with using a Dell system with required Linux OS installed and also with latest system software (BIOS and firmware) in use.

Note: Dell provides software products such as "Dell Deployment Tool Kit", "Dell System Build Update Utility", and so on that use "Dell Update Packages (DUPs)" for updating system software on Dell systems. We don't use them here.

Here we are considering installation of RHEL v6.x on a Dell system using an example Kickstart file that is shown below to achieve above mentioned one stop solution. This example Kickstart file uses "Dell Linux Online Repository" and other RHEL v6.x specific installation configuration details.

"Dell Linux Online Repository" and "Dell Update Packages"
--------------------------------------------------------------------
Dell provides "Dell Update Packages (DUPs)" for BIOS and system software updates to use with Dell systems. We can also make system software updates using "Dell Linux Online Repository".

Dell Linux Online Repository URL:  http://linux.dell.com/repo/hardware/latest/
Dell Update Packages User Guides/Manuals URL:  http://support.dell.com/support/edocs/software/smdup/

User Guides/Manuals provide more information about "Dell Linux Online Repository" and other DUP details. "Dell Linux Online Repository" contains Dell OMSA, drivers, BIOS and firmware updates. It is possible to create local mirror site equivalent to "Dell Linux Online Repository".

Example Kickstart File
--------------------------

    Comments are included in the example Kickstart file to provide more information to the readers. This example Kickstart file uses "Dell Linux Online Repository" to complete required BIOS and other firmware inventory and updates. The system automatically reboots if we use the following Kickstart file to install RHEL v6.x that includes post install BIOS and other firmware inventory/updates also. Readers may need to edit/comment/uncomment contents of this example Kickstart file to suit their requirements. The following is sequence of actions that occur during the RHEL v6.x installation using the following Kickstart file. All these actions do not require user intervention.

     1) Anakonda starts and complete installation as per configuration details explained in the Kickstart file
    2) Set Up/Bootstrapping "Dell Linux Online Repository"
    3) Install required firmware tools/packages from "Dell Linux Online Repository"
    4) System automatically downloads applicable firmware from "Dell Linux Online Repository"
    5) Do an "Inventory" check on the system (creating inventory XML file, that is /var/log/pre_update_inventory.xml) to know the available/installed BIOS and other firmware versions
    6) Update both BIOS and other firmware on the system to their latest available versions on "Dell Linux Online Repository"
    7) Update /etc/rc.local file to complete the following (post reboot):
       7.1) Inventory again (second time) to confirm completed updates. Second time inventory will be /var/log/post_update_inventory.xml
       7.2) Uninstall (clean) installaed firmware tools/packages, delete downloaded firmware, and so on
       7.3) Undo updates done to /etc/rc.local file
    8) Reboot host to boot to OS
    9) Complete pending firmware updates, if any.
    10) Boot to OS and autoexecute /etc/rc.local
    11) Wait for login

### BEGIN: EXAMPLE KICKSTART FILE   ###
# 1) This example kickstart file written by Change Management Team, Dell Bangalore.
# 2) All the comments are numbered to help readers to understand "EXAMPLE KICKSTART FILE"
# 3) Assumptions:  Internet access is available to access "Dell Linux Online Repository"

# 4) Location to pick up the required "RHEL v6.x Installation" media contents over network is http://192.168.0.8/RHEL_v6/ 
#    or using NFS location is
url --url http://192.168.0.8/RHEL_v6/
#nfs --server=192.168.0.8 --dir=/home/ravi_a/RHEL_v6/ --opts=""

# 5) Language and Keyboard selection: English USA
lang en_US.UTF-8
keyboard us

# 6) Set Run level to X
graphical

firstboot --disable

# 7) Enable first NIC to receive its IP from DHCP server
# 8) DHCP server should provide all required details/information to access Internet for accessing "Dell Linux Online Repository"
network --onboot yes --device em1 --bootproto dhcp --noipv6

# 9) Enctrypted root password
rootpw --iscrypted $1$eP310tks$XUW2GVnj/IlTtG1H84RIe1

# 10) Enable SSH with Firewall
firewall --service=ssh

# 11) Authetication (Login using shadow password(s))
auth  --useshadow  --passalgo=sha512

# 12) Enforcing SELinux
selinux --enforcing

# 13) Set time zone to Asia/Kolkata
timezone --utc Asia/Kolkata

# 14) Update MBR and install bootloader after clearing/cleaning existing contents on the disk
bootloader --location=mbr
zerombr
clearpart --all --initlabel

# 15) Create two primary partitions: SWAP partition and ROOT partition
part swap --fstype="swap" --size=4096
part / --asprimary --fstype="ext4" --grow --size=1

# 16) Logging any useful information to debug issues/problems related to RHEL v6.x installation using this kickstart file by Anaconda
logging --level=info

# 17) Don't have "RHEL Installation Key", have to skip
key --skip

# 18) Reboot (Post Installation)
reboot yes

# 19) Nothing to complete during preinstall stage
%pre --interpreter=/usr/bin/python
%end

# 20) Complete both inventory and/or update both BIOS and system software (FM) using shell commands
%post --interpreter=/bin/bash

# 21) Just to make sure that network is up for acessing "Dell Online Repository" over network
/sbin/service NetworkManager restart;
/sbin/service network restart;

# 22) Setting Up/Bootstrapping "Dell Linux Online Repository"
#     We can also use a URL to local mirror of "Dell Linux Online Repository", if available
wget -q -O - http://linux.dell.com/repo/hardware/latest/bootstrap.cgi | bash;

# 23) Check return value of above wget command to confirm everything is ok to proceed further
ret_val=$(echo $?);

if [ "$ret_val" = "0" ]; then
   # 24) Install required firmware tools
   yum -y install dell_ft_install;

   # 25) Check return value of above yum command to confirm everything is ok to proceed further
   ret_val=$(echo $?);
   if [ "$ret_val" = "0" ]; then
      # 26) Downloading applicable firmware
      #     Bootstrap firmware is a process where the latest BIOS or Firmware
      #     update RPMs for the system are downloaded from the repository, along
      #     with the utilities necessary to inventory and apply updates on the system
      yum -y install $(bootstrap_firmware);

      # 27) Check return value of above yum command to confirm everything is ok to proceed further
      ret_val=$(echo $?);
      if [ "$ret_val" = "0" ]; then
         # 28) Completing "Inventory" of the system to know available/installed BIOS and other firmware versions.
         #     File /var/log/pre_update_inventory.xml contains current BIOS and other firmware details before going for the updates as shown below.
         inventory_firmware > /var/log/pre_update_inventory.xml;

         # 29) Check return value of above inventory_firmware command to confirm everything is ok to proceed further
         ret_val=$(echo $?);
         if [ "$ret_val" = "0" ]; then
            echo "*** NOTE: System Inventory Went Through Successfully ...";
         else
            echo "*** ERROR: System Inventory Failed ...";
         fi

         # 30) Update BIOS and other firmware on the system to their
         #     latest available versions on "Dell Linux Online Repository"
         update_firmware --yes;

         # 31) Check return value of above update_firmware command to confirm everything is ok or not
         ret_val=$(echo $?);
         if [ "$ret_val" = "0" ]; then
            echo "*** NOTE: BIOS & Firmware Updates Went Through Successfully ...";
         else
            echo "*** ERROR: BIOS and/or Firmware Updates Failed. Please check /var/log/firmware-updates.log to know more details.";
         fi

         # 32) The above two yum commands installed many RPMs. Here we update /etc/rc.local to take care of inventory post updates inventory and cleaning RPMs.
         # 33) Updates to /etc/rc.local and /var/log/post_update_inventory.xml is post updates inventory
         # 34) We append all required commands to /etc/rc.local to complete post updates inventory and cleaning RPMs in a "single line", that is last line in /etc/rc.local. Later /etc/rc.local will be updated not to include this "single line".
         echo "inventory_firmware > /var/log/post_update_inventory.xml; yum -y remove dell_ie_*; yum -y remove \$(bootstrap_firmware); yum -y erase \$(rpm -qa | grep srvadmin); rpm -e \$(rpm -qa | grep dell); yum clean all; rm -rf /var/cache/yum/*; rm -f /etc/yum.repos.d/dell-omsa-repository.repo; cp -v /etc/rc.local /tmp/rc.local; grep -v \"inventory_firmware > /var/log/pre_update_inventory.xml;\" /tmp/rc.local > /etc/rc.local;" >> /etc/rc.local;
      else
         echo "*** ERROR: Applicable Firmware Download Failed ..";
      fi
   else
      echo "*** ERROR: Required Firmware Tools Installation Failed ..";
   fi
else
   echo "*** ERROR: Setting Up/Bootstrapping \"Dell Linux Online Repository\" Failed ...";
fi

echo; echo "NOTE: It is suggested to reboot the system. System will be auto-rebooted ...!!";

%end

# 35) List of packages/package groups to be installed
%packages --ignoremissing
@additional-devel
@base
@client-mgmt-tools
@core
@debugging
@basic-desktop
@desktop-debugging
@desktop-platform
@desktop-platform-devel
@development
@directory-client
@eclipse
@emacs
@fonts
@general-desktop
@graphical-admin-tools
@graphics
@input-methods
@internet-browser
@java-platform
@legacy-x
@network-file-system-client
@performance
@perl-runtime
@print-client
@remote-desktop-clients
@server-platform
@server-platform-devel
@server-policy
@tex
@technical-writing
@virtualization
@virtualization-client
@virtualization-platform
@x11
-libXinerama-devel
-openmotif-devel
-libXmu-devel
xorg-x11-proto-devel
-startup-notification-devel
-libgnomeui-devel
-libbonobo-devel
-junit
libXau-devel
-libgcrypt-devel
-popt-devel
libdrm-devel
-libXrandr-devel
-libxslt-devel
-libglade2-devel
gnutls-devel
-pax
-python-dmidecode
-oddjob
-wodim
-sgpio
-genisoimage
mtools
systemtap-client
-abrt-gui
desktop-file-utils
-ant
rpmdevtools
-jpackage-utils
rpmlint
-certmonger
pam_krb5
-krb5-workstation
-netpbm-progs
openmotif
libXmu
libXp
-perl-DBD-SQLite
-libvirt-java
ipmitool
OpenIPMI-libs
OpenIPMI
%end

###  END: EXAMPLE KICKSTART FILE   ###

Summary (Post log-in)
    1) We can check /var/log/pre_update_inventory.xml and /var/log/post_update_inventory.xml files that provide pre and post "BIOS and firmware updates" inventory details. Above explained example Kickstart file contents and the log file of its execution are stored in the /tmp directory to assist with debugging installation and system software updates' details. So please check these log files in /tmp/ directory for debugging.
    2) The file /var/log/firmware-updates.log provides more details about system software updates' that were applied to the system using the explained example Kickstart file.
    3) The example Kickstart file is really useful to deal with many physical servers that require RHEL v6.x OS installation followed by latest system software (BIOS and other firmware) inventory and/or updates.
    4) Currently we can also achieve the explained one stop solution with other RPM based Linux distributions also.

DISCLAIMER
    This document/article is provided for informational purposes only. The author and Dell give no warranties, either expressed or implied, in this document. All the information in this document/article, including URLs and other Internet Web site references, is subject to change without notice. The complete risk of the use or the results from the use of this document remains with the user. The names of actual companies and products mentioned herein may be thetrademarks of their respective owners.