fog.drivers script always needs drivers
-
Server
- FOG Version: 1.4.3
- OS: Ubuntu 16.04
Client
- Service Version: 0.11.12
- OS: Windows 10
Description
I’m trying to set up a new Windows 10 image and inject drivers with the fog.drivers script I got from this forum. Any PC without drivers seems to fail to image if there isn’t a drivers folder on the fogserver. Is there a way to bypass the drivers copy and just image the machine, if the folder is missing on fog? The files I use are below.
fog.postdownload
#!/bin/bash case $osid in [5-7]|9) clearScreen getHardDisk getPartitions $hd if [[ ! -d /ntfs ]]; then mkdir -p /ntfs >/dev/null 2>&1 [[ ! $? -eq 0 ]] && echo " * Failed to Mount Device" fi for part in $parts; do umount /ntfs >/dev/null 2>&1 ntfs-3g -o remove_hiberfile,rw $part /ntfs >/dev/null 2>&1 [[ ! $? -eq 0 ]] && continue done . ${postdownpath}fog.drivers umount /fog /ntfs /images >/dev/null 2>&1 ;; esac
fog.drivers
#!/bin/bash ceol=`tput el`; manu=`dmidecode -s system-manufacturer`; case $manu in [Ll][Ee][Nn][Oo][Vv][Oo]) machine=$(dmidecode -s system-version) ;; *[Dd][Ee][Ll][Ll]*) machine=$(dmidecode -s system-product-name) ;; *) machine=$(dmidecode -s system-product-name) # Technically, we can remove the dell one as it's the "default" ;; esac [[ -z $machine ]] && return #assuming you want it to break if it is not lenovo or dell? machine="${machine%"${machine##*[![:space:]]}"}" #Removes Trailing Spaces ############################################# # Quick hack to find out if the installed OS image is a x86 or x64 system64="/ntfs/Windows/SysWOW64/regedit.exe" # sloppy detect if 64bit or not [[ ! -f $system64 ]] && arch="x86" || arch="x64" ############################################# #this section has been updated to bring the osn names in line # with how the Dell CABs are defined case $osid in 5) osn="win7" ;; 6) osn="win8" ;; 7) osn="win8.1" ;; 9) osn="win10" ;; esac ############################################# dots "Preparing Drivers" # below creates local folder on imaged pc # this can be anywhere you want just remember # to make sure it matches throughout! (case IS important here) clientdriverpath="/ntfs/Windows/DRV" remotedriverpath="/images/drivers/$machine/$osn/$arch" [[ ! -d $clientdriverpath ]] && mkdir -p "$clientdriverpath" >/dev/null 2>&1 echo -n "In Progress" #there's 3 ways you could handle this, #driver cab file, extracted driver files or both #so on the server put extracted driver files to match below folder tree #i.e. Model Latitude E5410, Windows 7 x86 image would be: #/fog/Drivers/Latitude E5410/win7/x86 rsync -aqz "$remotedriverpath" "$clientdriverpath" >/dev/null 2>&1 [[ ! $? -eq 0 ]] && handleError "Failed to download driver information for [$machine/$osn/$arch]" 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 echo -e "\b\b\b\b\b\b\b\b\b\b\b${ceol}Done"; # this just removes "In Progress and replaces it with done :-)"
-
@chief In your fog.drivers update the bottom section with a if conditional to test to see if the directory exists.
############################################# dots "Preparing Drivers" # below creates local folder on imaged pc # this can be anywhere you want just remember # to make sure it matches throughout! (case IS important here) clientdriverpath="/ntfs/Windows/DRV" remotedriverpath="/images/drivers/$machine/$osn/$arch" if [ -d $remotedriverpath ]; then [[ ! -d $clientdriverpath ]] && mkdir -p "$clientdriverpath" >/dev/null 2>&1 echo -n "In Progress" #there's 3 ways you could handle this, #driver cab file, extracted driver files or both #so on the server put extracted driver files to match below folder tree #i.e. Model Latitude E5410, Windows 7 x86 image would be: #/fog/Drivers/Latitude E5410/win7/x86 rsync -aqz "$remotedriverpath" "$clientdriverpath" >/dev/null 2>&1 [[ ! $? -eq 0 ]] && handleError "Failed to download driver information for [$machine/$osn/$arch]" 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 echo -e "\b\b\b\b\b\b\b\b\b\b\b${ceol}Done"; # this just removes "In Progress and replaces it with done :-)" fi
While it looks like a type-o the text between the EOFREG need to be on the first character of the line. In the code above I added
if [ -d remotedriverpath ]; then
in to test if the source directory exists.On a side note understand the registry patch at the end will not work with Win10. You need to add a section to your unattend.xml file to tell OOBE where to look for the drivers.
-
@george1421 Thanks. That seems to have solved it.
-
@george1421 Actually. I have tested on another machine and it’s not copying the drivers across now if they are on the server. Is there any other way around it?
-
@chief Ok I made a sad rookie mistake.
The test for the directory was posted as
if [ -d remotedriverpath ]; then
I missed the variable identifier, that line should read.
if [ -d $remotedriverpath ]; then
Note the missing ( $ ) character.
-
I’ve tested and it still doesn’t copy the drivers when they are there?