linux_wiki:os_install_post_install

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

linux_wiki:os_install_post_install [2016/05/18 23:32]
billdozor
linux_wiki:os_install_post_install [2019/05/25 23:50]
Line 1: Line 1:
-====== OS Install: Post Install ====== 
- 
-**General Information** 
- 
-After installing an OS via [[linux_wiki:os_install_kickstart|kickstart]] or a [[linux_wiki:os_install_vm_template|VM Template]], there is typically additional standard configuration performed depending upon the environment. 
- 
-**Checklist** 
-  * Distro(s): Enterprise Linux 6/7 
- 
----- 
- 
-====== Firstboot ====== 
- 
-Post install configuration is normally only needed to be completed the first time a system is booted in order to set it up for the type of environment it is in. 
- 
----- 
- 
-===== Firstboot: The script ===== 
- 
-This script is meant to run once and then disable itself. It calls other post install script(s) to do the actual work. 
- 
-<code bash> 
-#!/bin/bash 
-# Name: firstboot.sh 
-# Description: Auto runs a post install script 1 time 
- 
-#### Customize These Variables #### 
-nfs_server="10.1.2.3" 
-nfs_server_share="${nfs_server}:/scripts" 
-nfs_client_mountpoint="/mnt" 
-post_install_script="${nfs_client_mountpoint}/scripts/postinstall.sh" 
- 
-# Write a successful run file 
-firstboot_ran_file="/root/.firstboot-ran" 
- 
-# Reboot delay in minutes 
-reboot_delay="1" 
-#### End of Customize Variables #### 
- 
-#============================== 
-# Functions; Main Starts After 
-#============================== 
-function check_os_type 
-{ 
-## Gather Distro and Major Version 
-  if [ -f /etc/system-release-cpe ];then 
-    distro=$(awk -F: '{printf "%s", $3}' /etc/system-release-cpe) 
-    major_version=$(awk -F: '{printf "%d", $5}' /etc/system-release-cpe) 
-  elif [ -f /etc/redhat-release ];then 
-    distro=$(awk '{printf "%s", $1}' /etc/redhat-release) 
-    major_version=$(awk -F. '{print $1}' /etc/redhat-release | awk '{printf "%d", $3}') 
-  fi 
-} 
- 
-#==================== 
-# Main Program 
-#==================== 
- 
-echo -e "================================================" 
-echo -e "####========== Firstboot Script ============####" 
-echo -e "================================================" 
- 
-# Check to see if script has been run before 
-if [[ -f ${firstboot_ran_file} ]]; then 
-  echo -e "\nfirstboot>> Error; First boot ran file detected at: ${firstboot_ran_file}!" 
-  echo -e "firstboot>> Will NOT execute this script. If you really want to execute, remove that file." 
-  exit 1 
-fi 
- 
-# Discover OS Type 
-check_os_type 
- 
-# Start rpcbind service 
-if [[ ${major_version} == "7" ]]; then 
-  systemctl start rpcbind 
-else 
-  service rpcbind start 
-fi 
- 
-# Try to reach the NFS server 3 times 
-for index in 1 2 3; do 
-  ping -c 1 ${nfs_server} &> /dev/null 
-   
-  if [[ $? -eq 0 ]]; then 
-    # Successful ping, exit loop 
-    break 
-  else 
-    # Unsuccessful; wait 10 seconds and try again 
-    echo -e "firstboot>> Could not reach ${nfs_server}. Sleeping for 10 seconds and will try again." 
-    sleep 10 
-  fi 
-done 
- 
-# Mount script location 
-echo -e "\nfirstboot>> Mounting script location..." 
-mount -t nfs ${nfs_server_share} ${nfs_client_mountpoint} 
- 
-# Execute post install script 
-echo -e "\nfirstboot>> Executing post install script..." 
-${post_install_script} 
- 
-if [[ $? -eq 0 ]]; then 
-  echo -e "\nfirstboot>> Post install script successful." 
-else 
-  echo -e "\nfirstboot>> Error; Post install script exited with error(s)! Quiting..." 
-  exit 1 
-fi 
- 
-#============================================== 
-# Call other post install scripts/actions here 
-#============================================== 
- 
-# Unmount nfs share 
-echo -e "\nfirstboot>> Unmounting nfs share.." 
-umount ${nfs_client_mountpoint} 
- 
-#### Safeguards to prevent firstboot.sh from running more than once #### 
-# Create firstboot-ran file 
-echo -e "\nfirstboot>> Creating firstboot ran file..." 
-echo -e "firstboot>> firstboot.sh was run on $(date)." > ${firstboot_ran_file} 
-chown -v root:root ${firstboot_ran_file} 
-chmod -v 400 ${firstboot_ran_file} 
- 
-# Make script not executable 
-echo -e "\nfirstboot>> Removing execute permissions on this script..." 
-chown -v root:root ${0} 
-chmod -v 400 ${0} 
- 
-# Disable auto execution 
-if [[ ${major_version} == "7" ]]; then 
-  systemctl disable firstboot.service 
-else 
-  sed -i '/firstboot.sh/d' /etc/rc.d/rc.local 
-fi 
-#### End of Safeguards #### 
- 
-# Email root notification of completion 
-echo -e "\nfirstboot>> E-mailing root notification that the script completed..." 
-echo -e "The firstboot script process has completed for: '$(hostname)' on $(date).\n\nThe following actions have successfully run:\n1) Post install script (System updates, General system configuration)\n2) Other scripts\n\nThe system ($(hostname)) will reboot in ${reboot_delay} minute(s)." | /bin/mail -s "Firstboot Complete: $(hostname)" root 
- 
-# Allow some time for the email to be sent 
-sleep 5 
- 
-# Reboot system 
-shutdown -r +${reboot_delay} "firstboot>> Post install script(s) complete. System will be rebooted."</code> 
- 
----- 
- 
-===== Firstboot: CentOS 7 Service ===== 
- 
-Firstboot will get executed on CentOS 7 via a custom systemd service unit. 
- 
-The following service unit will end up in /etc/systemd/system/firstboot.service 
-<code bash> 
-[Unit] 
-Description=Auto-execute post install scripts 
-After=network.target 
- 
-[Service] 
-ExecStart=/root/scripts/firstboot.sh 
- 
-[Install] 
-WantedBy=multi-user.target 
-</code> 
- 
----- 
- 
-===== Firstboot: CentOS 6 Service ===== 
- 
-CentOS 6 will make use of rc.local to execute the script. 
- 
-/etc/rc.d/rc.local (append) 
-<code bash> 
-/root/scripts/firstboot.sh 
-</code> 
- 
----- 
- 
-====== Auto Setup ====== 
- 
-Now that we have a firstboot script and method of executing (CentOS 7 service or CentOS 6 rc.local), the combination of the two can be added to VM templates or kickstarts for unattended execution. 
- 
----- 
- 
-===== Auto Setup: VM Templates ===== 
- 
- 
----- 
- 
-===== Auto Setup: Kickstarts ===== 
- 
----- 
  
  • linux_wiki/os_install_post_install.txt
  • Last modified: 2019/05/25 23:50
  • (external edit)