Hey All!
Cannot figure out this issue, and hope all of you can help.
Background Information
I’m a newbie admin taking over for someone that implemented the FOG system for our infrastructure. Currently we are running off of version 1.5.5, and I am very wary of updating the server, as I don’t know much about how and what was setup on this server for deployment. There are some things in documentation that make me suspect an update would resolve my issue, but I want to confirm before I do something drastic enough to break things.
What I’m Trying to Accomplish
He left enough documentation for me to understand how FOG basically works, but I’d like to make a few changes to the system for driver injection. I browsed through the forums to see if this was possible and how to do it, and I came across George’s article (this man has done great work). Here’s the article: https://forums.fogproject.org/topic/11126/using-fog-postinstall-scripts-for-windows-driver-injection-2017-ed
So here’s where the problem comes in. I set up the server just as George suggested by following that tutorial, but every time I run it, I get a syntax error. Here is a picture of the error message I receive:
I apologize for the poor quality. It’s the best I could do.
There’s a couple of things that I notice here. (1) This particular script is calling for a file that just doesn’t exist on the server, and (2) the syntax error happens around the case $osid in section. I don’t know where it pulls this information from on the server to verify settings for $osid. Here are my files:
fog.custominstall
#!/bin/bash
. /usr/share/fog/lib/funcs.sh
[[ -z $postdownpath ]] && postdownpath="/images/postdownloadscripts/"
case $osid in
5|6|7|9)
clear
[[ ! -d /ntfs ]] && mkdir -p /ntfs
getHardDisk
if [[ -z $hd ]]; then
handleError "Could not find hdd to use"
fi
getPartitions $hd
for part in $parts; do
umount /ntfs >/dev/null 2>&1
fsTypeSetting "$part"
case $fstype in
ntfs)
dots "Testing partition $part"
ntfs-3g -o force,rw $part /ntfs
ntfsstatus="$?"
if [[ ! $ntfsstatus -eq 0 ]]; then
echo "Skipped"
continue
fi
if [[ ! -d /ntfs/windows && ! -d /ntfs/Windows && ! -d /ntfs/WINDOWS ]]; then
echo "Not found"
umount /ntfs >/dev/null 2>&1
continue
fi
echo "Success"
break
;;
*)
echo " * Partition $part not NTFS filesystem"
;;
esac
done
if [[ ! $ntfsstatus -eq 0 ]]; then
echo "Failed"
debugPause
handleError "Failed to mount $part ($0)\n Args: $*"
fi
echo "Done"
debugPause
. ${postdownpath}fog.copydrivers
# . ${postdownpath}fog.updateunattend
umount /ntfs
;;
*)
echo "Non-Windows Deployment"
debugPause
return
;;
esac
fog.copydrivers
#!/bin/bash
ceol=`tput el`;
manu=`dmidecode -s system-manufacturer`;
dots "Identifying hardware"
case $manu in
[Ll][Ee][Nn][Oo][Vv][Oo])
machine=$(dmidecode -s system-version)
;;
*[Dd][Ee][Ll][Ll]*)
machine=$(dmidecode -s system-product-name)
;;
*I[Nn][Tt][Ee][Ll]*)
# For the Intel NUC and intel mobo pick up the system type from the
# baseboard product name
machine=$(dmidecode -s baseboard-product-name)
;;
*)
# Technically, we can remove the Dell entry above as it is the same as this [default]
machine=$(dmidecode -s system-product-name)
;;
esac
# if the machine isn't identified then no need to continue with this script, just return to caller
if [[ -z $machine ]]; then
echo "Unable to identify the hardware for manufacturer ${manu}";
debugPause;
return;
fi
echo "${machine} Identified";
# Removes Spaces in machine name, works better with path definitions
machine="${machine%"${machine##*[![:space:]]}"}";
# Jeffrey Boulais posted that the above code did not work for his install. He
# supplied this code as an alternative. If you run in to a problem using my code
# comment out my code and see if his code works better for your installation. The
# only right way is the one that works. Thank you Jeff for your input.
# machine="$(echo -e “${machine}” | tr -d ‘[:space:]’)"
dots "Verifying we've found the OS disk"
if [[ ! -d /ntfs/windows && ! -d /ntfs/Windows && ! -d /ntfs/WINDOWS ]]; then
echo "! OS root Not found !";
debugPause
return;
fi
echo "Found";
dots "Verifying target Arch"
system64="/ntfs/Windows/SysWOW64/regedit.exe"
[[ ! -f $system64 ]] && arch="x86" || arch="x64"
echo "${arch} found";
debugPause
# set osn path names based on the osid set in the FOG WebGui
case $osid in
5) osn="win7" ;;
6) osn="win8" ;;
7) osn="win8.1" ;;
9) osn="win10" ;;
esac
dots "Preparing Drivers"
clientdriverpath="/ntfs/Drivers"
remotedriverpath="/images/drivers/$machine/$osn/$arch"
debugPause
if [[ ! -d "${remotedriverpath}" ]]; then
echo "failed";
echo " ! Driver package not found for ${machine}/$osn/$arch ! ";
debugPause;
return;
fi
echo "Ready";
debugPause
[[ ! -d $clientdriverpath ]] && mkdir -p "$clientdriverpath" >/dev/null 2>&1
echo -n "In Progress"
rsync -aqz "$remotedriverpath" "$clientdriverpath" >/dev/null 2>&1
[[ ! $? -eq 0 ]] && handleError "Failed to download driver information for [$machine/$osn/$arch]"
debugPause
# the following code is only valid for Windows 7 operating systems since Windows 8 and beyond
# relies on the unattend.xml section to locate OEM drivers. If you are no longer deploying Win7
# you may exclude this section.
regfile="/ntfs/Windows/System32/config/SOFTWARE"
key="\Microsoft\Windows\CurrentVersion\DevicePath"
devpath="%SystemRoot%\DRV;%SystemRoot%\inf;";
reged -e "$regfile" &>/dev/null <<EOFREG
ed $key
$devpath
q
y
EOFREG
If anyone can offer suggestions, or help, I would be most appreciative. I think that’s all the information that I have, but if you need clarification on anything, please ask. Thanks in advance for any help offered!