download_driver_pack.py
- Sven.Beierlein
- Beiträge: 36
- Registriert: 01 Okt 2008, 16:20
download_driver_pack.py
wenn mein OPSI-Server keinen Internetzugang hat, wo muss ich dann die heruntergeladenen 7z-Driver-Packs der Seite www.driverpacks.net ablegen?
Gibt es auch eine etwas genauere Erklärung der Skripte:
extract_driver_pack.py
create_driver_pack.py
create_driver_links.py
download_driver_pack.py
show_drivers.py
und wie genau mit winxppro.py zusammenspielen?
- j.schneider
- uib-Team
- Beiträge: 2045
- Registriert: 29 Mai 2008, 15:14
Re: download_driver_pack.py
Vielen Dank für die Nutzung von opsi. Im Forum ist unser Support begrenzt.
Für den professionellen Einsatz und individuelle Beratung empfehlen wir einen Support-Vertrag und eine Schulung.
Gerne informieren wir Sie zu unserem Angebot.
uib GmbH
Telefon: +49 6131 27561 0
E-Mail: sales@uib.de
- Sven.Beierlein
- Beiträge: 36
- Registriert: 01 Okt 2008, 16:20
Re: download_driver_pack.py
Wird das extract_driver_pack.py automatisch von winxppro.py aufgerufen?

- j.schneider
- uib-Team
- Beiträge: 2045
- Registriert: 29 Mai 2008, 15:14
Re: download_driver_pack.py
extract_driver_pack.py muss manuell aufgerufen werden.
Danach sollte auch create_driver_links.py gestartet werden.
Gruß
Jan Schneider
Vielen Dank für die Nutzung von opsi. Im Forum ist unser Support begrenzt.
Für den professionellen Einsatz und individuelle Beratung empfehlen wir einen Support-Vertrag und eine Schulung.
Gerne informieren wir Sie zu unserem Angebot.
uib GmbH
Telefon: +49 6131 27561 0
E-Mail: sales@uib.de
- Sven.Beierlein
- Beiträge: 36
- Registriert: 01 Okt 2008, 16:20
Re: download_driver_pack.py
muss da das extract_driver_pack.py mit eingebaut bzw. der Aufruf an einer bestimmten Stelle aufgerufen werden?
Oder wie gehe ich vor wenn ich die Treiber aus /tmp/dpdl in das winxppro.py einbinden möchte?
Code: Alles auswählen
# Integrate drivers
if os.path.exists(srcDriversDir):
ui.getMessageBox().addText("Treiber-Verzeichnis gefunden, versuche Treiber einbzubinden.\n")
oemPnpDriversPath = ''
massStorageDrivers = []
oemBootFiles = []
driverNumber = 0
integratedFiles = []
for dirname in productProperties.get('additional_drivers','').split(','):
if not dirname:
continue
dirname = dirname.strip()
logger.info("Adding additional driver dir '%s'" % dirname)
ui.getMessageBox().addText(" * Binde Treiberverzeichnis '%s' ein.\n" % dirname)
srcDriverPath = os.path.join(srcDriversDir, 'drivers', 'additional', dirname)
if not os.path.exists(srcDriverPath):
logger.error("Driver directory '%s' not found" % srcDriverPath)
ui.getMessageBox().addText(" [Fehler] Treiber-Verzeichnis '%s' nicht gefunden.\n" % dirname)
continue
logger.notice("Found additional driver dir '%s'" % dirname)
ui.getMessageBox().addText(" [OK] Treiber gefunden, wird eingebunden.\n")
dstDriverPath = os.path.join(target, 'drv')
if not os.path.exists( dstDriverPath ):
os.mkdir( dstDriverPath )
driverNumber += 1
dstDriverPath = os.path.join(dstDriverPath, str(driverNumber))
if not os.path.exists( dstDriverPath ):
os.mkdir( dstDriverPath )
copy( srcDriverPath + '/*', dstDriverPath )
if oemPnpDriversPath:
oemPnpDriversPath += ';'
oemPnpDriversPath += '\\'.join(['drv', str(driverNumber)])
for info in hardware.get("PCI_DEVICE", []):
name = info.get('name', '???')
name = name.replace('/', '_')
vendorId = info.get('vendorId', '').upper()
deviceId = info.get('deviceId', '').upper()
if not vendorId or not deviceId:
continue
logger.info("Searching driver for device '%s', id '%s:%s'" % (name, vendorId, deviceId))
ui.getMessageBox().addText(" * Suche Treiber fuer '%s'.\n" % name)
srcDriverPath = os.path.join(srcDriversDir, 'pciids', vendorId)
if not os.path.exists(srcDriverPath):
logger.error("Vendor directory '%s' not found" % srcDriverPath)
ui.getMessageBox().addText(" [Fehler] Hersteller-Verzeichnis '%s' nicht gefunden.\n" % vendorId)
continue
srcDriverPath = os.path.join(srcDriverPath, deviceId)
if not os.path.exists(srcDriverPath):
logger.error("Device directory '%s' not found" % srcDriverPath)
ui.getMessageBox().addText(" [Fehler] Geraete-Verzeichnis '%s' nicht gefunden.\n" % deviceId)
continue
if os.path.exists( os.path.join(srcDriverPath, 'WINDOWS_BUILDIN') ):
logger.notice("Using build-in windows driver")
ui.getMessageBox().addText(" [OK] Verwende mitgelieferten Windows-Treiber.\n")
continue
logger.notice("Found driver for device '%s', in dir '%s'" % (name, srcDriverPath))
files = ','.join(os.listdir(srcDriverPath))
if files in integratedFiles:
logger.notice("Driver for device '%s' already integrated" % name)
ui.getMessageBox().addText(" [OK] Treiber ist bereits eingebunden.\n")
continue
logger.notice("Integrating driver for device '%s' (driver directory content: %s)" % (name, files))
ui.getMessageBox().addText(" [OK] Treiber gefunden, wird eingebunden.\n")
integratedFiles.append(files)
dstDriverPath = os.path.join(target, 'drv')
if not os.path.exists( dstDriverPath ):
os.mkdir( dstDriverPath )
driverNumber += 1
dstDriverPath = os.path.join(dstDriverPath, str(driverNumber))
if not os.path.exists( dstDriverPath ):
os.mkdir( dstDriverPath )
copy( srcDriverPath + '/*', dstDriverPath )
if oemPnpDriversPath:
oemPnpDriversPath += ';'
oemPnpDriversPath += '\\'.join(['drv', str(driverNumber)])
### Textmode driver ###
txtSetupOem = None
logger.info("Searching for txtsetup.oem in '%s'" % dstDriverPath)
for fn in os.listdir(dstDriverPath):
if (fn.lower() == 'txtsetup.oem'):
txtSetupOem = os.path.join(dstDriverPath, fn)
break
if not txtSetupOem:
logger.info("txtsetup.oem not found")
continue
logger.notice("'%s' found, integrating textmode driver" % txtSetupOem)
ui.getMessageBox().addText(" * Integriere textmode Treiber.\n")
# Parse txtsetup.oem
logger.info("Parsing txtsetup.oem")
sections = {}
sectionRegex = re.compile('\[\s*([^\]]+)\s*\]')
deviceRegex = re.compile('VEN_([\da-fA-F]+)(&DEV_([\da-fA-F]+))?')
f = open(txtSetupOem)
section = None
for line in f.readlines():
line = line.strip()
if not line or line.startswith('#') or line.startswith(';'):
continue
logger.debug("txtsetup.oem: %s" % line)
match = re.search(sectionRegex, line)
if match:
section = match.group(1)
sections[section] = []
elif section:
sections[section].append(line)
f.close()
# Search for default id
defaultHwComponentId = ''
logger.info("Searching for default hardware component id")
for (section, lines) in sections.items():
if (section.lower() != 'defaults'):
continue
for line in lines:
(key, value) = line.split('=', 1)
if (key.strip().lower() == 'scsi'):
defaultHwComponentId = value.strip()
if not defaultHwComponentId:
logger.error("Default hardware component id not found in txtsetup.oem, failed to integrate textmode driver.")
ui.getMessageBox().addText(" [Fehler] Default hardware component id in txtsetup.oem nicht gefunden.\n")
continue
logger.notice("Found default hardware component id '%s'" % defaultHwComponentId)
# Search for hardware id
logger.info("Searching for hardware id and tagfile")
tagfiles = {}
for (section, lines) in sections.items():
if not section.lower().startswith('hardwareids.'):
continue
logger.info("Found hardwareIds section %s" % section)
for line in lines:
if not re.search('[iI][dD]\s*=', line):
continue
(device, tf) = line.split('=', 1)[1].strip().split(',', 1)
device = device.strip()
if device.startswith('"') and device.endswith('"'):
device = device[1:-1]
tf = tf.strip()
if tf.startswith('"') and tf.endswith('"'):
tf = tf[1:-1]
match = re.search(deviceRegex, device)
if not match:
logger.error("Parsing error: =>%s<=" % device)
continue
if (match.group(1).upper() == vendorId.upper()) and (not match.group(2) or (match.group(3).upper() == deviceId.upper())):
hwComponentId = section.split('.', 2)[2].lower()
tagfiles[hwComponentId] = tf
if not tagfiles:
logger.error("Hardware component id not found in txtsetup.oem, failed to integrate textmode driver.")
continue
logger.debug("Found tagfiles: %s" % tagfiles)
hwComponentId = tagfiles.keys()[0]
if (len(tagfiles.keys()) > 0) and tagfiles.has_key(defaultHwComponentId.lower()):
hwComponentId = defaultHwComponentId.lower()
tagfile = tagfiles[hwComponentId]
logger.notice("Using component id '%s' and tagfile '%s'" % (hwComponentId, tagfile))
# Search for disks
logger.info("Searching for disks")
driverDisks = {}
for (section, lines) in sections.items():
if (section.lower() != 'disks'):
continue
for line in lines:
if (line.find('=') == -1):
continue
(driverDisk, value) = line.split('=', 1)
driverDisk = driverDisk.strip()
(dn, tf, dd) = value.split(',', 2)
tf = tf.strip()
if tf.startswith('\\'): tf = tf[1:]
dd = dd.strip()
if dd.startswith('\\'): dd = dd[1:]
driverDisks[driverDisk] = { "displayName": dn, "tagfile": tf, "driverDir": dd }
if not driverDisks:
logger.error("No disks found in txtsetup.oem, failed to integrate textmode driver.")
ui.getMessageBox().addText(" [Fehler] Keine disks in txtsetup.oem gefunden.\n")
continue
# Search for needed files
logger.info("Searching for needed files")
driver = []
inf = []
catalog = []
filesRegex = re.compile('Files\.scsi\.%s' % hwComponentId, re.IGNORECASE)
for (section, lines) in sections.items():
match = re.search(filesRegex, section)
if not match:
continue
for line in lines:
(key, value) = line.split('=', 1)
key = key.strip()
driverDisk = value.split(',')[0].strip()
filename = value.split(',')[1].strip()
if (key.lower() == 'driver'):
driver.append( os.path.join(driverDisks[driverDisk]['driverDir'], filename) )
elif (key.lower() == 'inf'):
inf.append( os.path.join(driverDisks[driverDisk]['driverDir'], filename) )
elif (key.lower() == 'catalog'):
catalog.append( os.path.join(driverDisks[driverDisk]['driverDir'], filename) )
break
logger.notice("Needed files: %s, %s, %s" % (', '.join(driver), ', '.join(inf), ', '.join(catalog) ))
if not (driver and inf and catalog):
logger.error("Failed to find needed info")
ui.getMessageBox().addText(" [Fehler] Es wurden nicht alle benoetigten Informationen gefunden.\n")
continue
# Search for hardware description
logger.info("Searching for hardware description")
description = ''
for (section, lines) in sections.items():
if (section.lower() == 'scsi'):
for line in lines:
(key, value) = line.split('=', 1)
if (key.strip().lower() == hwComponentId.lower()):
description = value.split(',')[0].strip()
if description.startswith('"') and description.endswith('"'):
description = description[1:-1]
if not description:
logger.error("Hardware description not found in txtsetup.oem, failed to integrate textmode driver.")
ui.getMessageBox().addText(" [Fehler] Hardware-Beschreibung nicht in txtsetup.oem gefunden.\n")
continue
logger.notice("Hardware description is '%s'" % description)
# Copy files
oemBootFiles.append( os.path.basename(txtSetupOem) )
for textmodePath in ( os.path.join(target, '$', 'textmode'), \
os.path.join(target, '$win_nt$.~bt', '$oem$') ):
if not os.path.exists(textmodePath):
os.mkdir(textmodePath)
copy(txtSetupOem, textmodePath)
for one in inf, driver, catalog:
for fn in one:
copy(os.path.join(dstDriverPath, fn), os.path.join(target, '$', 'textmode', os.path.basename(fn)))
copy(os.path.join(dstDriverPath, fn), os.path.join(target, '$win_nt$.~bt', '$oem$',fn))
oemBootFiles.append(fn)
massStorageDrivers.append(description)
if massStorageDrivers:
winntsif = open(target + '/$win_nt$.~bt/winnt.sif', 'a')
print >> winntsif, '\r\n[MassStorageDrivers]\r'
for msd in massStorageDrivers:
print >> winntsif, '"%s" = OEM\r' % msd
print >> winntsif, '\r\n[OEMBootFiles]\r'
for obf in oemBootFiles:
print >> winntsif, '%s\r' % obf
winntsif.close()
pi = open(PATCHA_IN, 'a')
print >> pi, "oempnpdriverspath=%s" % oemPnpDriversPath
pi.close()
- j.schneider
- uib-Team
- Beiträge: 2045
- Registriert: 29 Mai 2008, 15:14
Re: download_driver_pack.py
Die vorhandenen Treiber werden automatisch eingebunden.
Vielen Dank für die Nutzung von opsi. Im Forum ist unser Support begrenzt.
Für den professionellen Einsatz und individuelle Beratung empfehlen wir einen Support-Vertrag und eine Schulung.
Gerne informieren wir Sie zu unserem Angebot.
uib GmbH
Telefon: +49 6131 27561 0
E-Mail: sales@uib.de