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 :-)"
    
    


  • I’ve tested and it still doesn’t copy the drivers when they are there?


  • Moderator

    @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.



  • @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?



  • @george1421 Thanks. That seems to have solved it.


  • Moderator

    @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.


 

376
Online

41.5k
Users

12.0k
Topics

113.5k
Posts