I like your approach because I am installing Win2K to a limited set of
hardware with fairly small OS partitions.
(The other partitions get erased regularly) We have to install in around
3Gig so the option of copying tons of drivers that are not required is a bit
off putting.
Ed.

-----Original Message-----
From: Andreas Stowasser [mailto:[EMAIL PROTECTED]
Sent: Monday, February 28, 2005 9:07 PM
To: [email protected]
Subject: [Unattended] FIXME: A Way to copy only needed OS-Drivers to
local Harddisk


               *** WARNING ***

This mail has originated outside your organization,
either from an external partner or the Global Internet.

     Keep this in mind if you answer this message.


Hello,

when i was looking for a system to setup the computers at the school of my
son in a cheap and easy way, i found your project. I was very lucky, because
it solves my problems, even if i do only know a little of Linux and nothing
of Perl (sorry, but i�m  supporting a lot of Windows Systems)


But after a while i realized that i have to find a way to tell the system ,
which drivers to use.

I know the $oem$\$1 mechanism, but i don�t like it, because it would copy
tons of files, which i don�t need in the case of having a lot of different
drivers.


I looked in your config.pl and only found a FIXME note.
I think, i have fixed it.

The idea is to have machine-classes,which al need the same set of drivers
and copy these drivers into c/drv
Below you can see what i have changed. May be it could be done better, but
it works.

Next problem is how to tell the system, that i don�t have an NTP-Server,
without getting the Question.

Hope it helps,

Andy

#
----------------------------------------------------------------------------
----------------------
#
#       Directorystrukture in the OS-Directory
#

\\NTINSTALL\INSTALL\OS\W2K4PRO
+---drv
|   \---cpdpen                          (Drivers needed by Compaq Desktop
Pro EN)
|   |   \---drv
|   |       +---80861132                ( Video )
|   |       +---80862445                ( Sound )
|   |       \---80862449                ( Nic - Intel )
|   |           \---Windows
|   |               \---Drivers
|   |                   \---IA32
|   \---other                           (drivers for some others, here only
the nic )
|       \---drv
|               \---80862449            ( Nic - Intel )

|               \---Windows
|                   \---Drivers
|                       \---IA32
|
\---i386
    \---  ........   ( Standard OS-Media, SP 4 integrated )

#
----------------------------------------------------------------------------
----------------------
#
#       Definitions in unattend.txt
#

"0002A5185E2D","ComputerName","W-EKS006"
"0002A5185E2D","OS_media","w2k4pro"
"0002A5185E2D","DriverPath","z:\os\w2k4pro\drv\cpdpen"

#
----------------------------------------------------------------------------
----------------------
#
#       Results in the unattend.txt
#
        OemPnPDriversPath = "drv\80861132;drv\80862445;drv\80862449"



#
----------------------------------------------------------------------------
----------------------
#
#       Changes in config.pl
#
#
#       Subroutines added ( similar found in the Internet for backing up
some files) and a little bit modified
#
#

sub GetFiles {
    my ($Dir) = @_;
    my (@Files);

    opendir(DIR, $Dir);
    @Files = readdir(DIR);
    closedir(DIR);

    return @Files;
}


sub copydrv {
    my ($SDir) = shift(@_);
    my ($DDir) = shift(@_);
    my (@SFiles, @DFiles, @Dirs, $File);

    # Get the file lists
    @SFiles = GetFiles( dos_to_host ("$SDir"));

    # For each file, possibly copy.
    # For each directory, save list of directories for later.
    foreach (sort(@SFiles))
    {
        # Ignore ".", "..", and hidden files
        next if (/^\./);

        $File = $_;
        # If it is a directory, save it for later.
        # Else, possibly copy now.
        if (-d  dos_to_host ("$SDir\\$File"))
                {
                push(@Dirs, $File);
                }
                else
        {
                copy(dos_to_host ("$SDir\\$File"), dos_to_host
("$DDir\\$File"));
        }
    }

    # Process the directories
    foreach (sort(@Dirs))
    {
        $File = "$_";
        my $FFile = "$SDir\\$File";
        if (! -d  dos_to_host ("$DDir\\$File"))
        {
            mkdir(dos_to_host ("$DDir\\$File"), 0755);
        }
                print "Now Copy of $FFile \n";
        copydrv("$FFile" ,"$DDir\\$File");
    }
}


# Find all relevant drivers for this machine
$u->push_value ('Unattended', 'OemPnPDriversPath',
    sub {
        my $os_media = $u->{'_meta'}->{'OS_media'};
        defined $os_media
            or return undef;
        my $media_obj = Unattend::WinMedia->new ($os_media);
        defined $media_obj
            or return undef;
        my $os_name = $media_obj->name ();
        my $os_drivers;
        foreach my $lookup ($u->{'_meta'}->{'macaddr'},
                            $u->{'UserData'}->{'ComputerName'},
                            "$os_name",
                            'Default') {
            $os_drivers = CONFIG->lookup_value($lookup, 'DriverPath');
            defined $os_drivers
                and last;
        }
                defined $os_drivers
            or return undef;
        $os_drivers =~ /^All$/i
            and $os_drivers = $os_media . '\\i386\\$oem$\\$1\\';
        $os_drivers =~ /^[a-z]:/i
            or $os_drivers = $os_media . '\\i386\\$oem$\\$1\\' .
$os_drivers;
        opendir OSDRIVERS, dos_to_host ($os_drivers)
            or return undef;
        closedir OSDRIVERS;
        my @pnp_driver_dirs = $media_obj->oem_pnp_dirs (1, $os_drivers);
        scalar @pnp_driver_dirs > 0
            or return undef;
        print "...found here some driver directories.\n";
#
#
#       Changes made here, looking if the os_drivers contain a drive-letter

#
#
       if ($os_drivers =~ /^[a-z]:/i) {
                print "\n *******************************************\n";
                print "Copy $os_drivers to C:\\drv";
                print "\n *******************************************\n";
                # Create C:\drv and subdirectories.
                mkdir dos_to_host ("c:\\drv")
                or die "FAILED: $^E";
                copydrv($os_drivers . "\\drv" , "C:\\drv");
                print "\n *******************************************\n";
                print "Copy of $os_drivers done";
                print "\n *******************************************\n";
                }
        my $drivers = join ';', @pnp_driver_dirs;
        return $drivers;
    });


-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_ide95&alloc_id396&opclick__________________________
_____________________
unattended-info mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/unattended-info

********************************************************************
This email and any attachments are confidential to the intended
recipient and may also be privileged. If you are not the intended
recipient please delete it from your system and notify the sender.
You should not copy it or use it for any purpose nor disclose or
distribute its contents to any other person.
********************************************************************


-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_ide95&alloc_id396&op=click
_______________________________________________
unattended-info mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/unattended-info

Reply via email to