Postdownload Script Cannot Find PostDrivers Script In Debug Mode?



  • Hi all,

    I have an issue with one of my scripts called fog.postclient which will create the directory “/ntfs/Windows/Setup/Scripts/” and then copy across the FogService.msi into it, as well as various other things (like moving the Sophos installer across, etc.). This has worked perfectly fine in the past with no issues whatsoever, and nothing has been changed in the script. Fog.Postdownload calls two scripts: fog.postclient, and fog.postdrivers. The drivers script works great.

    However, I’ve found recently that nothing in the fog.postclient works. Going by past experience and the recommendations here, I set a spare laptop to image as a debug task. When in debug mode, I call fog.postdownloads and it complains that it can’t see the postdrivers script. I get the error:

    ./fog.postdownload: line 7: .: fog.postdrivers: file not found
    

    Yet when running the fog.postclient script, it seems to work as it echoes ‘Non-Windows Deployment’ (which is a part of the script), but nothing else works - it doesn’t create the directory, or copy across the .msi file.

    The aforementioned scripts are below. I would appreciate any assistance/guidance on this issue.

    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>
    
    . ${postdownpath}fog.postdrivers
    . ${postdownpath}fog.postclient
    

    fog.postclient:

    #!/bin/bash
    
    . /usr/share/fog/lib/funcs.sh
    
    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: $*"
    			# Give the reader a chance to see what the error was 
                sleep 12;
                # Terminate the post install script 
                exit 1;
            fi
    
            # This next section determines the IP of the host system, cuts the last two octects and sets the FOGIP variable to
            # the correct IP address of the FOG server depending on the location (as the subnets are designed by location - i.e.
            # 10.1 is for the UK, 10.2 is for the US, etc.)   
    
            myip=$(ip route get 8.8.8.8 | awk 'NR==1 {print $NF}' | cut -d "." -f1-2)
    
            case "${myip}" in
    	        10.1)
    		        sitecode="UK";
    		        timezone="GMT Standard Time";
    		        FOGIP="10.1.0.102";
    			sitelocal="en-GB";
    			uilang="en-US";
    		        ;;
    	        10.2)
    		        sitecode="US";
    		        timezone="Eastern Standard Time";
    		        FOGIP="10.2.1.103";
    			sitelocal="en-US";
    			uilang="en-US";
    		        ;;
    	        *)
    		        # Default code for the unknowns - we set the FOGIP to the development server in the UK. 
    		        sitecode="CompanyName";
    		        timezone="Greenwich Mean Time";
    		        FOGIP="10.1.0.102";
    			sitelocal="en-GB";
    			uilang="en-GB";
    		        ;;
            esac
    	
    	# Check if the direcotry /ntfs/Windows/Setup/Scripts exists, and if not then create it.
    	if [ ! -d "ntfs/Windows/Setup/Scripts" ]
    	then	
    		mkdir /ntfs/Windows/Setup/Scripts
    	fi 
    
    	# Copy the FOGService.msi across to the target computer.
    	[[ -f ${postdownpath}FOGService.msi ]] && cp ${postdownpath}FOGService.msi "/ntfs/Windows/Setup/Scripts/FOGService.msi"
           
    	# Check if the file SophosInstaller.exe exists in the source folder and then copy it to the destination on
    	# the C: drive. 
    	if [ -f "/images/drivers/Common/SophosInstall.exe" ]; then
    		cp /images/drivers/Common/SophosInstall.exe /ntfs/Windows/Setup/SophosInstall.exe
    	fi
     
    	# Check if the file SetupComplete.cmd exists in the source folder and then copy it to the destination on 
            # the C: drive. 
    
            if [ -f "/images/drivers/Common/SetupComplete.cmd" ]; then
    	        cp /images/drivers/Common/SetupComplete.cmd /ntfs/Windows/Setup/Scripts/SetupComplete.cmd
    			# append the msiexec command to the end of the setupComplete.cmd file 
    			echo "msiexec.exe /i %windir%\Setup\Scripts\FOGService.msi  /quiet USETRAY=\"0\" WEBADDRESS=\"${FOGIP}\" " >> /ntfs/Windows/Setup/Scripts/SetupComplete.cmd
    			# Re-enable the FOGService
    			echo "sc config FOGService start= auto
    			del /Q /F c:\windows\system32\sysrep\unattend.xml
    			del /Q /F c:\windows\panther\unattend.xml
    			shutdown -t 0 -r" >> /ntfs/Windows/Setup/Scripts/SetupComplete.cmd
    			# just in case we edited the setupcomplete.cmd file in unix lets filter it to make it DOS compatible
    			unix2dos /ntfs/Windows/Setup/Scripts/SetupComplete.cmd
            fi
    		
    		# now lets use the timezone variable and update the unattend.xml file. You may need to edit the variable to 
    		# point to where your unattend.xml file exists. Remember case IS important. 
    		unattendfile="/ntfs/Windows/Panther/unattend.xml";
    		sed -i -e "s#<TimeZone>\([^<][^<]*\)</TimeZone>#<TimeZone>$timezone</TimeZone>#gi" $unattendfile
    		
    		# now lets deal with the internationalization stuff in the unattend.xml file 
    		sed -i -e "s#<InputLocale>\([^<][^<]*\)</InputLocale>#<InputLocale>$sitelocal</InputLocale>#gi" $unattendfile
    		sed -i -e "s#<SystemLocale>\([^<][^<]*\)</SystemLocale>#<SystemLocale>$sitelocal</SystemLocale>#gi" $unattendfile
    		sed -i -e "s#<UILanguage>\([^<][^<]*\)</UILanguage>#<UILanguage>$uilang</UILanguage>#gi" $unattendfile
    		sed -i -e "s#<UserLocale>\([^<][^<]*\)</UserLocale>#<UserLocale>$sitelocal</UserLocale>#gi" $unattendfile
            ;;
        *)
            echo "Non-Windows Deployment"
            debugPause
            return
            ;;
    esac
    

    Edit: Also, before I get asked, the FOG version is the following:
    Running Version 1.5.0-RC-8
    SVN Revision: 6080



  • Thanks all - will hopefully get back to you next week with some of my findings (busy days…)


  • Moderator

    IN addition to what Wayne posted I might change up the fog.postdownload and add in a few more comments and a debugPause command.

    #!/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>
    
    echo ""
    echo "postdownpath=${postdownpath}"
    echo "Directory listing for postdownpath:"
    ls -laht $postdownpath
    echo "Calling postdrivers";
    debugPause
    . ${postdownpath}fog.postdrivers
    echo "Calling postclient";
    debugPause
    . ${postdownpath}fog.postclient
    debugPause
    

    What the echo statements and the debugPause will do for you. When you run an image deploy and check the debug checkbox when you schedule the deploy. FOS will boot to the command line. Key in fog and FOS will single step through the deployment, pausing at each debugPause command. When you get to the echo statement echo "Calling postclient"; Hit ctrl-c and exit out to the command prompt. This will let you debug you postclient inside the FOS environment. You can manually call postclient and debug the script this way. When you are done with the debugging of the script you can key in fog and single step through the deployment again from the beginning without rebooting.

    When you have your script perfected remote all of the extra comments and the debugPause commands. The debugPause will not hurt to stay in since the script will only pause when its in debug mode and not normal mode.


  • Moderator

    Can we also get an output of running this command on your FOG server?
    ls -la /images/postdownloadscripts


  • Moderator

    @robtitian16 Inside of fog.postdownload, add some debugging:

    #!/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>
    
    echo ""
    echo "postdownpath=${postdownpath}"
    echo "Directory listing for postdownpath:"
    ls -laht $postdownpath
    
    . ${postdownpath}fog.postdrivers
    . ${postdownpath}fog.postclient
    

Log in to reply
 

428
Online

39.3k
Users

11.0k
Topics

104.4k
Posts

Looks like your connection to FOG Project was lost, please wait while we try to reconnect.