Automatic hardware detection & driver installs in FOG
-
@Lee-Rowlett said:
#!/bin/sh
ceol=
tput el
;
machine=dmidecode -s system-product-name
;
machine=“${machine%”${machine##[![:space:]]}“}” #Removes Trailing Space
if [ $osid == “5” ]; then
osn=“Win7”
elif [ $osid == “6” ]; then
osn=“Win8”
elif [ $osid == “7” ]; then
osn=“Win8.1”
fi
dots “Downloading Drivers”;
mkdir /ntfs/Windows/DRV &>/dev/null;
echo -n “In Progress”;
cabextract -d /ntfs/Windows/DRV “/fog/Drivers/$osn/${machine}”/.CAB &>/dev/null;
echo -e “\b\b\b\b\b\b\b\b\b\b\b${ceol}Done”;
regfile=“/ntfs/Windows/System32/config/SOFTWARE”
key=“\Microsoft\Windows\CurrentVersion\DevicePath”
devpath=“%SystemRoot%\inf;%SystemRoot%\DRV”
reged -e “$regfile” &>/dev/null <<EOFREG
ed $key
$devpath
q
y
EOFREGcode above will do what you want - change the paths to match your environment or wherever you want to store the cabs but using code example above. you’d put a copy of the cab into /fog/Drivers/Win7/OptiPlex 7010 for example then it will extract the cab and drivers will be installed during sysprep… shouldn’t need any postscripts
@Lee-Rowlett - Where is it this script is supposed to be placed on the server and its name?
-
@ArchFan
Under: /images/postdownloadscripts/
Name: driverinstall.shJust make sure you call the script from fog.postdownload
${postdownloadpath}/driverinstall.sh
-
@cml said:
@ArchFan
Under: /images/postdownloadscripts/
Name: driverinstall.shJust make sure you call the script from fog.postdownload
${postdownloadpath}/driverinstall.sh
Shouldn’t entering
echo ${postdownloadpath}/driverinstall.sh
on the server output /images/postdownloadscripts/driverinstall.sh, or no? I was having some issues at first and ended up putting the absolute path to rule that out as an issue -
@ArchFan I don’t think so. Not on the server. The client/host during imaging or in the init process itself, yes, the server no.
-
@Tom-Elliott said:
@ArchFan I don’t think so. Not on the server. The client/host during imaging or in the init process itself, yes, the server no.
Gotcha - I’ve had some other issues getting it to work as intended, so it probably wasn’t an issue after all. Thanks Tom
-
@giejo63 I’m running into the same issues. I have a sysprepped Win 7 image that has the C:\drivers location set to look for drivers. I have the drivers on the FOG server in /images/drivers and the scripts are executable. The postdownload file is set to run the script, and I have SetupComplete.cmd on the image set as described in Andrew’s wiki page.
Anyone have some ideas?
-
Feeling pretty discouraged at the moment
My postdownloadscript works perfectly unless I use variables, at which point it no longer works. You can see a few of the things I’ve attempted and commented out. Even using ${postdownloadpath} doesn’t seem to work - I can only call my postdownload script if I specify the absolute path. My cabs are in /images/drivers/Win7/. So for the Optiplex 9020M, the location is /images/drivers/Win7/Optiplex 9020M/*.CAB - I’ve also tried Optiplex9020M - still doesn’t work. I’m on Rev 3606, Debian 7
The only things in /images/postdownloadscripts are fog.postdownload and driverinstall.sh. Permissions on both are 777
Contents of fog.postdownload:
#!/bin/sh ## This file serves as a starting point to call your custom postimaging scripts. ## <SCRIPTNAME> should be changed to the script you're planning to use. ## Syntax of post download scripts are #. ${postdownpath}<SCRIPTNAME> #. ${postdownloadpath}driverinstall.sh . /images/postdownloadscripts/driverinstall.sh
Contents of driverinstall.sh:
#!/bin/sh #This script was adapted from Lee Rowlett's fog.drivers postdownload script (https://forums.fogproject.org/topic/4278/utilizing-postscripts-rename-joindomain-drivers-$ #This script assumes your image has been modified to look in C:\Windows\Drivers in addition to the default location for Windows drivers (http://technet.microsoft.com/$ #Make sure this script is called from your fog.postdownload file by adding ${postdownloadpath}/driverinstall.sh to the /images/postdownloadscripts/fog.postdownload fi$ mkdir /ntfs &>/dev/null; #Create new directory called ntfs and supress any system or error messages mount.ntfs-3g /dev/sda2 /ntfs; #Mount the NTFS Windows OS partition to the new ntfs directory machine=`dmidecode -s system-product-name`; #Get the model name of the computer being imaged #machine=$(dmidecode -s system-product-name) #machine=$(echo $machine | tr -d ' ') #Remove the trailing spaces from the model info #Get the OS version info and set it equal to the osn variable for later use #if [ $osid == "5" ]; then osn="Win7" #elif [ $osid == "6" ]; then #osn="Win8" #elif [ $osid == "7" ]; then #osn="Win8.1" #fi #osn="Win7" mkdir /ntfs/Windows/Drivers &>/dev/null; #Create the C:\Windows\Drivers directory and supress any system or error messages echo -e "Extracting Drivers..."; #Tell the user that FOG is extracting the drivers within C:\Windows\Drivers #cabextract -d /ntfs/Windows/Drivers "/images/drivers/$osn/Optiplex9020M/9020M-Win7-A04-JG7GH.CAB" &>/dev/null; cabextract -d /ntfs/Windows/Drivers "/images/drivers/$osn/$machine"/*.CAB &>/dev/null echo -e "DONE!"; #Tell the user that FOG has finished copying the drivers and finish the imaging process
-
@MRCUR Still no luck for me
image is correctly deployed but fog.postdownload doesn’t seem to run…
i don’t know why … -
Debugging i found 2 problems:
-
${postdownloadpath} variable is not recognized
-
when i put the full path /images/postdownloadscripts/driverinstall.sh, i have an error which says that /bin/bash^M: bad interpreter. -> i dont have any ^M at the end of the line.
Any ideas for the variable and bad interpreter ??
Thanks in advance -
-
Did you by chance transfer the file from a windows machine? If so you may need to convert line endings.
dos2unix /images/postdownloadscripts/driverinstall.sh
-
@cml i will try that. Maybe it comes from a windows machine.
Do you konw why i can’t use the ${postdownloadpath} variable ? (my fog server is a ubuntu 14.04) -
@giejo63 where are you check the variable? Is it on the server or the system downloading the image?
-
@Tom-Elliott it is the postdownloadscript location variable in fog.postdownload
-
I mean where are you checking the variable being set?
Are you checking directly on the fog server with
echo $postdownloadscript
or are you checking on the system receiving the image? -
@Tom-Elliott as it is in the fog.postdownload script, i think it is the system receiving the image