Automatic hardware detection & driver installs in FOG
-
Okay, the script is now posted, along with documentation in: [url]http://www.fogproject.org/wiki/index.php/Auto_driver_Install[/url]
Please keep in mind that I only updated from FOG .33 to 1.2 3 days ago, and that this script is a complete re-write from what I used to use. I’ve tested it locally on a couple of different systems, and it seems to be running cleanly, but test this script in your environment before going crazy with it, and please post comments on any issues you have.
A similar script in .33 is how Frontier School Division keeps thousands of mostly Dell computers in 40 separate locations imaged with minimal management effort (6 network administrators). We have two Image files and a driver repository that we maintain centrally. Each of the remote FOG servers sync from the central driver store with rsync.
Any time we encounter a computer that has a missing driver post imaging, we simply add that driver to the central store, and re-image the computer. When we order machines in mass from Dell, we supply them with a list of computer names, and they send back a csv with the computer name to MAC address list, and they add an asset sticker to the systems. If it’s a new model to us, I have Dell send one machine to my office where I image, and add any drivers required to the central store. I then import the CSV into FOG, assign the image, and create the imaging task.
At the school, we arrange for the systems to be unboxed, plugged in and turned on. The systems boot, image, join the domain and are ready to use. FOG is an amazing project that saves us a ton of time and effort.
-
Andrew - this looks like great work. I have a question - when you say
[CODE]
You’ll see something like PCI\VEN_XXXX&Dev_YYYY&SUBSYS_ZZZZ… or USB\VID_XXXX&PID_YYYY or ACPI\XXXXXXXXXYou take the driver for that device, and place it in a folder of /images/drivers/XXXX/YYYY.
[/CODE]
What files do I place in the folder? The files in the “driver file details” window? If so, is there a better way to get that file list?
Thanks -
Library Mark
-
It depends on the driver. Usually, you just need the folder from the driver that has the .inf for the device. (Copy the entire folder contents, not just the .inf file) You can test that driver by going to a machine that doesn’t have the driver installed, and doing an “update driver” in task manager, and pointing to the folder. If it installs, you should be good.
For some devices, the driver is an .exe that you can launch with a silent install command. In that case, the driver folder should have the exe, any associated files, and a drvinstall.bat file as per [url]http://www.fogproject.org/wiki/index.php/Auto_driver_Install#Adding_Silent_Install_drivers[/url]
-
Hey Andrew, I really like this work but I like to do it more simple.
As we are only using DELL machines at our school I can get cab files containing all drivers per model. I extract these files under /images/drivers/<modelname> and copy the appropriate directory to the client. So I’ve changed your driverinstall.sh a bit to copy these extracted drivers and the folder common to c:\Drivers. I’ ve also changed the registry key in the client image to resemble this:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\DevicePath: REG_EXPAND_SZ:%SystemRoot%\Inf;c:\DriversSo windows checks c:\drivers for drivers before going to the internet when installing hardware after the client has been imaged.
This should make it all a bit easier and you don’t need the machinedrivers.sh BUT and here is the question: my script does not seem to run.
I’m running fog on ubuntu and placed my scripts in /images/postdownloadscripts on the server. And I’ve made them executable. I don’t know how these scripts are called by FOG, I guess it checks for fog.postdownload in /images/postdownloadscripts and executes that file? In my case it only contains:
#!/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>
${postdownpath}/driverinstall.sh
So I’d like to do some debugging, can I append the output to a file changing this script like this:
${postdownpath}/driverinstall.sh >> /images/drivers/postdownloadscripts.log because I tried this but with no result.Are there perhaps problems with these scripts privileges?
Maybe you can give me some tips on how to better troubleshoot?anyway I like what you’ve done and I will keep searching myself for a solution
Txs!
-
init contains cabextract so you don’t even need to extract the cabs if you want to go down the model route
-
#!/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
-
Great, thanks for the quick reply I will try this!
-
Hello
Thanks for this great work
Where can we get the 2 scripts ? (machinedrivers.sh and driverinstall.sh) the link in: http://www.fogproject.org/wiki/index.php/Auto_driver_Install is brokenCan you repost it ?
Thanks in advance ! -
@giejo63
Link redirect in WIKI http://tinyurl.com/qe58fo2driverinstall.sh -> http://tinyurl.com/qxuxsnj
machinedrivers.sh -> http://tinyurl.com/oqtymea -
@Tom-Elliott said:
@giejo63
Link redirect in WIKI http://tinyurl.com/qe58fo2driverinstall.sh -> http://tinyurl.com/qxuxsnj
machinedrivers.sh -> http://tinyurl.com/oqtymeaSorry but the links doesnt work ?
i can’t access to them -
It works for me. My guess, somebody is filtering the link at your site.
-
@Tom-Elliott said:
It works for me. My guess, somebody is filtering the link at your site.
no i’m not filtered…
I’ve tried from work, from home, from my phone
or maybe the site is unavailable for France … -
That could be a possibility.
Are you able to access:
https://rightclick.fsdnet.ca/display/ -
@Tom-Elliott said:
That could be a possibility.
Are you able to access:
https://rightclick.fsdnet.ca/display/no…
neither from work or from smartphone.
Thanks for your help ! -
@giejo63 give me a few minutes and I’ll host the files for you.
-
@Tom-Elliott said:
@giejo63 give me a few minutes and I’ll host the files for you.
Thanks in advance !!
-
http://tinyurl.com/q4pta4s machinedrivers
http://tinyurl.com/oy5pdm4 driverinstall
-
@Tom-Elliott said:
http://tinyurl.com/q4pta4s machinedrivers
http://tinyurl.com/oy5pdm4 driverinstall
It works
Thanks a lot ! -
Hi,
My postdownloadscript driverinstall.sh is executable (chmod a+x) i’ve modified fog.postdownload but after image deployment (successfully) it doesn’t seem to run fog.postdownlad and driverinstall.sh .
So nothing is put inside c:\Drivers (i ve put some drivers)Any ideas ?
-
@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?