Windows 7 : universal image with Postdownload script : issues
-
Hello,
After some research and an very interessting discuss with George, i’m back to understand why the drivers injections works with my Optiplex 7010 and not with my HP 8000 EliteBook.
The facts :
I use another fog.postdownload (https://forums.fogproject.org/topic/8889/fog-post-install-script-for-win-driver-injection/7) to find the good partition for the mount /ntfs :#!/bin/bash . /usr/share/fog/lib/funcs.sh [[ -z $postdownpath ]] && postdownpath="/images/postdownloadscripts/" 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 /ntf >/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: $*" fi echo "Done" debugPause #. ${postdownpath}fog.log . ${postdownpath}fog.drivers # . ${postdownpath}fog.ad umount /ntfs ;; *) echo "Non-Windows Deployment" debugPause return ;; esac
On the HP 8000 EliteBook, i ran a debug task with an Windows 7 x64 image.
I hit “CTRL+C” just after the “Preparing Drivers” process :- cd /ntfs : i see boot files (BOOTSEC.BAK, Boot, System Volume Information, bootmgr), not the Windows partition files
- lsblk : the wrong partition is mounted (/dev/sda1 instead of /dev/sda2)
- i type “reboot”. i go back into Windows 7. I can’t seen anyfiles into C:\Windows\DRV. None driver installed (i think of Win7 tried install drivers with generic drivers).
Same operation with Optiplex 7010 :
I hit “CTRL+C” just after the “Preparing Drivers” process :- cd /ntfs : i see boot files, not the Windows partition files
- lsblk : the wrong partition is mounted (/dev/sda1 instead of /dev/sda2)
- i type “reboot”. Go back into Windows 7. I CAN seen drivers files into C:\Windows\DRV.
One question : why, with the same script, it’s work for the Optiplex7010 and not for the HP 8000 ?
I don’t undersand why i saw the wrong partition with “lsblk” in command prompt of Optiplex 7010 but, it finally works … -
@Jonathan-Cool This is difficult to say, but the lsblk command only shows you the block devices (disks and their partitions) available on the computer. Its not a good prediction of where the windows partition is.
I think I would start debugging this on the HP computer. Since you are testing the bash script I would run a your deployment in debug mode. When you get to the point where it should be copying the drivers exit out of the deployment script. Then execute the script you posted command by command.
The script will mount each partition one by one. It checks to ensure its a ntfs type partition if it is, then it mounts it and checks to see if there is a Windows directory on that partition. If there is the script assumes that it found the right partition.
From our discussion yesterday the script seems to be picking partition 1 which is the boot partition. Is it possible that HP has done something “special” with that boot partition and placed a windows directory on it? IF so that may trick your postdownload script into saying that partition 1 is the windows partition.
-
@Jonathan-Cool said in Windows 7 : universal image with Postdownload script : issues:
I think for debugging this what I would do is update your fog.postdownload script insert the echo and debugPause (scripted breakpoint). Then save the postdownload script. Schedule a debug deployment and when the script gets to that point use ctrl-C to break out of the fog deployment script.
Then key in
. /usr/share/fog/lib/funcs.sh
into the command line to setup your environment variables and then execute the script line by line (copy and paste commands into the linux console) trying to understand why the script is picking sda1 over the right answer of sda2.#!/bin/bash . /usr/share/fog/lib/funcs.sh [[ -z $postdownpath ]] && postdownpath="/images/postdownloadscripts/" case $osid in 5|6|7|9) clear [[ ! -d /ntfs ]] && mkdir -p /ntfs echo "Scripted breakpoint" debugPause getHardDisk if [[ -z $hd ]]; then handleError "Could not find hdd to use" fi getPartitions $hd
-
@george1421 I’m pretty sure from when we use to have HP’s that the first partition was a system recovery partition which when browsing contained snapshot of OS files so would confirm your theory!.. Slightly off topic but line 27 in fog.postdownload got a typo, ntf should be ntfs
-
@Lee-Rowlett said in Windows 7 : universal image with Postdownload script : issues:
that the first partition was a system recovery partition
Then maybe its safe to assume that there IS a /Windows directory on that recover partition?? If so that would explain why the detection code is failing (Ugh!)
-
@george1421 I think the typo didn’t allow the NTFS directory to me unmounted leaving the last mounted partition in place when it tried to do any action.
-
Well, I think why that script won’t work 100% is because the script has a tiny bug in it.
if [[ ! -d /ntfs/windows && ! -d /ntfs/Windows && ! -d /ntfs/WINDOWS ]]; then echo "Not found" umount /ntf >/dev/null 2>&1 continue fi
Should be
if [[ ! -d /ntfs/windows && ! -d /ntfs/Windows && ! -d /ntfs/WINDOWS ]]; then echo "Not found" umount /ntfs >/dev/null 2>&1 continue fi
The problem being that when the script loops through the mounting of parts, but can’t find the Windows folder, it fails to unmount the ntfs folder, which will not allow the system to then mount anything else to it, and thusly it fails.
Not sure why it would work for your optiplex, but fix that and try again, imo.
edit: Did not see Tom’s post, I essentially posted the same thing.
-
@george1421 I think we need to identify if the HP recovery partition contains a /Windows directory. If so, then the script’s logic test is wrong. We may have to find another check to identify the true drive from a recovery partition.
Right now the script may be fundamentally flawed,
-
Hello,
Thank you all for your answer : quick reply :-
there is any recovery partition because, when i create a master image, i always delete all partitions. The first partition is the boot partiyon of Windows 7 (called “Partition System Reserved”).
-
i will try after edit the typo. Thank you, i missed it.
I will come back with the resultats.
-
-
Hi,
I’m back with the results … and they are the same …
Maybe with the output of SSH, that can help you …[http://txt.do/drvaa](link url)
Also, i have an other idea : just for the HP8000, i could hard-coded the good partition directly into the fog.postdownload script ?
Like that : “if $model = HP Compaq 8000 Elite USDT PC” (i don’t know if this var really exist, it’s just an example)
do
umount /ntfs
mount /dev/sda2 /ntfsor somethink like that …
-
@Jonathan-Cool
I wrong, it’s seem to work …
I just do few tests to confirm this (test with Opti7010 and HP8000) and i will go back … -
@Jonathan-Cool I’m going crazy … after reboot the computer and retry a debug task, it’s didn’t work at this point …
-
It’s working now !
I did a mistake …
This is what I did to find my mistake- create a debug Task
- at the prompt, add root password
- with SSH, run the fog command
- CTRL+C after “Preparing Drivers”
- run “. /usr/share/fog/lib/funcs.sh”
- cd /images/postdownloadscripts
- sh -x fog.postdownload
- copy / paste the output in a txt file to debug
- analyze the code
- find a mistake with rsync
I copied the ini folder into “/images/Drivers/Win7/HP Compaq 8000 Elite USDT PC/” BUT the good path is “/images/Drivers/Win7/HP Compaq 8000 Elite USDT PC/x64”.
I tried after move the files in the good folder … and it’s works !
Now, i have a little other strange problem with domain on the HP 8000.
i can’t join the domain and fog.log said :02/05/2017 13:39 Middleware::Authentication ERROR: Could not get security token 02/05/2017 13:39 Middleware::Authentication ERROR: Could not find file 'C:\Program Files (x86)\FOG\token.dat'
If I go into the folder, i can’t see the token.dat file.
With the same image and with the Optiplex7010, domain jonction works perfectly … strange !
-
@Jonathan-Cool The token.dat message is a “normal” thing and likely not the problem you’re seeing with domain not joining.
-
@Jonathan-Cool said in Windows 7 : universal image with Postdownload script : issues:
I tried after move the files in the good folder … and it’s works !
So it WAS the french guys fault…
Good job finding the issue!!
For your domain join, did the network adapter drivers load correctly? I have seen the no network thing cause a problem. This was on an intel nuc where the network drivers where not signed properly and you must accept the unsigned certificate for windows to load the drivers. I’m not saying this is your case now, only one place to check.
-
You right, it’s was me …
But, the script contained a little typo, remember
And now, i understood why the domain fail … simply because i CTRL+C for debug … and after, i rebooted the computer … but, the hostname changer process didin’t run ! And i has a bad hostname …
I just want to thanks all of you for your help.
With this post, i understood many thinks and i improve myself day after day
I’m very happy to learned news features with FOG and new knowledge
It’s solved !PS : this script works with Windows 10 ?
-
@Jonathan-Cool Ideally yes. But won’t know until it’s tested.
-
Hi,
It’s me again …
I just need a precision about drivers : in this case, for Win7x64 and a HP820G3 (seem to be the same problem for Win10x64) : after the deploy and the unique reboot to join the domain, i can see in “Manage Device”, two “other” devices.IF I right-click on theses devices, update Drivers … and choose the C:\Windows\DRV location, Windows “finish” the installation.
Why Windows can’t do this installation just after the deploy ?
Is it a signature problem with theses devices ? (Wifi and Display Audio Driver).
This problem break my dream of a Golden Full-automated Windows Image -
@Jonathan-Cool It is possible that these two devices are hidden behind another device. I am just giving a random example.
Its possible that the wifi and audio chips on the motherboard are connect via a usb3 controller on the motherboard. You will not be able to see or load the drivers for the wifi or audio until the driver for the usb3 controller is loaded. The driver load process is only one pass (my guess). In that once it installs all known drivers it doesn’t look a second time for new devices that show up because the device in front was loaded.
It is hard to explain but I see it perfectly in my mind…
So what can you do?
This is just a guess, you can try in the setupcompleted.cmd file run DISM to force the drivers to load for all missing ones.
something like:
dism /online /add-driver /driver: "c:\windows\drv"
But I have to warn this is only a guess. I have not had to do this my self. We only buy Dells and they work every time, no funny business.
-
Hi,
Thank you @george1421
After some tests, it seem to work but not at 100 per cent.
What i did :
On the Win7x64 Vbox image :- add a script SetupComplete.cmd with this line :
dism /Online /add-driver /driver:C:\Windows\DRV /Recurse
I reUP the image on FOG server and tried on the 820G3 : it’s seem to work ! … but … the domain jonction seem to be broken.
I said “What is going on now ???”
I tried the same image on the same computer (820G3) and … same result.
I tried the image on the Opti7010 and … same resultat : the domain jonction feature didn’t work anymore.
I said “I am going crazy ?”
I Googled this fact … and i find some answers (on this link : https://wiki.fogproject.org/wiki/index.php?title=FOG_Client#FOG_Client_with_Sysprep)Disable FOGService: Windows Control Pannel -> View by Small Icons -> Administrative Tools -> Services -> Right click FOGService -> Properties -> Startup Type -> Disabled Re-enable FOGService post-imaging: Create the below file. C:\Windows\Setup\scripts\SetupComplete.cmd Place these lines within the file, and then save. sc config FOGService start= auto shutdown -t 0 -r
Well, if i add theses lines on my SetupComplete.cmd, it’s will work this time (Drivers AND domain jonction) ? Or i am in the wrong way ?
- add a script SetupComplete.cmd with this line :