diff options
| author | Albert Zhang <albert.zhang@canonical.com> | 2014-05-07 19:22:26 +0800 |
|---|---|---|
| committer | Albert Zhang <albert.zhang@canonical.com> | 2014-05-07 19:22:26 +0800 |
| commit | a31b46e7aea1b6e81d3bb424eac728d48424d9a1 (patch) | |
| tree | 2986338f5466353686a257afd4835877b146bc6f | |
| parent | 269b2707a7ae5cf8b41afbfac372b4e843e2673d (diff) | |
fix provider script path for somerville
| -rwxr-xr-x | bin/query_bto_version.py | 122 | ||||
| -rw-r--r-- | jobs/somerville/somerville.txt.in | 6 |
2 files changed, 125 insertions, 3 deletions
diff --git a/bin/query_bto_version.py b/bin/query_bto_version.py new file mode 100755 index 0000000..44c86ef --- /dev/null +++ b/bin/query_bto_version.py @@ -0,0 +1,122 @@ +#!/usr/bin/python +import sys +import dbus + +import xml.etree.ElementTree as etree + + +def get_dell_interface(bus): + """ + Return interface used to query BTO version + """ + # All this checks aren't really needed if dell-recovery package + # is new enough. Anyway, it's done to provide better feedback + # in case of a problem during the script execution + obj = bus.get_object('com.dell.RecoveryMedia', '/RecoveryMedia') + xmldoc = obj.Introspect(dbus_interface='org.freedesktop.DBus.Introspectable') + + node = etree.fromstring(xmldoc) + interface = [interface for interface in node.findall('interface') + if interface.attrib['name'] == 'com.dell.RecoveryMedia'][0] + + methods = interface.findall('method') + for method_name in ['query_bto_version', 'request_exit']: + method = [method for method in methods + if method.attrib['name'] == method_name] + if not method: + print >> sys.stderr, ("'%s' method not found in '%s'" + % (method_name, interface.attrib['name'])) + sys.exit(-1) + + return dbus.Interface(obj, 'com.dell.RecoveryMedia') + + +def get_recovery_partition(bus = None): + """ + Look for the recovery partition + """ + # Get System Bus in case it wasn't passed + if bus is None: + bus = dbus.SystemBus() + + # Recovery partition + rp = None + + # The code below has been taken from the dell-recovery project branch + # available in launchpad + try: + #first try to use udisks, if this fails, fall back to devkit-disks. + udisk_obj = bus.get_object('org.freedesktop.UDisks', '/org/freedesktop/UDisks') + ud = dbus.Interface(udisk_obj, 'org.freedesktop.UDisks') + devices = ud.EnumerateDevices() + for device in devices: + dev_obj = bus.get_object('org.freedesktop.UDisks', device) + dev = dbus.Interface(dev_obj, 'org.freedesktop.DBus.Properties') + + label = dev.Get('org.freedesktop.UDisks.Device','IdLabel') + fs = dev.Get('org.freedesktop.Udisks.Device','IdType') + + if ((('install' in label or 'OS' in label) and 'vfat' in fs) + or ('RECOVERY' in label and 'ntfs' in fs)): + rp=dev.Get('org.freedesktop.Udisks.Device','DeviceFile') + return rp + except dbus.DBusException as e: + print >> sys.stderr, "%s, UDisks Failed" % str(e) + + try: + #next try to use devkit-disks. if this fails, then we can fall back to hal + dk_obj = bus.get_object('org.freedesktop.DeviceKit.Disks', '/org/freedesktop/DeviceKit/Disks') + dk = dbus.Interface(dk_obj, 'org.freedesktop.DeviceKit.Disks') + devices = dk.EnumerateDevices() + for device in devices: + dev_obj = bus.get_object('org.freedesktop.DeviceKit.Disks', device) + dev = dbus.Interface(dev_obj, 'org.freedesktop.DBus.Properties') + + label = dev.Get('org.freedesktop.DeviceKit.Disks.Device','id-label') + fs = dev.Get('org.freedesktop.DeviceKit.Disks.Device','id-type') + + if ((('install' in label or 'OS' in label) and 'vfat' in fs) + or ('RECOVERY' in label and 'ntfs' in fs)): + rp=dev.Get('org.freedesktop.DeviceKit.Disks.Device','device-file') + return rp + except dbus.DBusException as e: + print >> sys.stderr, "%s, DeviceKit-Disks Failed" % str(e) + + try: + hal_obj = bus.get_object('org.freedesktop.Hal', '/org/freedesktop/Hal/Manager') + hal = dbus.Interface(hal_obj, 'org.freedesktop.Hal.Manager') + devices = hal.FindDeviceByCapability('volume') + + for device in devices: + dev_obj = bus.get_object('org.freedesktop.Hal', device) + dev = dbus.Interface(dev_obj, 'org.freedesktop.Hal.Device') + + label = dev.GetProperty('volume.label') + fs = dev.GetProperty('volume.fstype') + if ((('install' in label or 'OS' in label) and 'vfat' in fs) + or ('RECOVERY' in label and 'ntfs' in fs)): + rp=dev.GetProperty('block.device') + return rp + except dbus.DBusException as e: + print >> sys.stderr, "%s, HAL Failed" % str(e) + + print >> sys.stderr, "Recovery partition not found" + sys.exit(-1) + + +def main(): + "Query BTO version" + bus = dbus.SystemBus() + recovery_partition = get_recovery_partition(bus) + interface = get_dell_interface(bus) + + version, date = interface.query_bto_version(recovery_partition) + print ( "Version: %s\nDate: %s" % (version, date) ) + + interface.request_exit() + + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/jobs/somerville/somerville.txt.in b/jobs/somerville/somerville.txt.in index a1a751a..e4372e4 100644 --- a/jobs/somerville/somerville.txt.in +++ b/jobs/somerville/somerville.txt.in @@ -50,7 +50,7 @@ _description: plugin: shell name: somerville/manifest_version -command: python /usr/share/checkbox-oem-somerville/scripts/query_bto_version.py +command: query_bto_version.py user: root _description: PURPOSE: @@ -472,7 +472,7 @@ _description: Check Dell repository plugin: manual name: somerville/Unity-mode-default3d -command: bash ${CPLAINBOX_PROVIDER_DATA}/../scripts/unity_2d3d_check +command: unity_2d3d_check _description: PURPOSE: 1. Check if default desktop session is set to 3D @@ -486,7 +486,7 @@ _description: plugin: manual name: somerville/Unity-mode-2d -command: bash ${CPLAINBOX_PROVIDER_DATA}/../scripts/unity_2d3d_check +command: unity_2d3d_check _description: PURPOSE: 1. Check if 2D desktop session is correctly set |
