summaryrefslogtreecommitdiff
diff options
authorAlbert Zhang <albert.zhang@canonical.com>2014-05-07 19:22:26 +0800
committerAlbert Zhang <albert.zhang@canonical.com>2014-05-07 19:22:26 +0800
commita31b46e7aea1b6e81d3bb424eac728d48424d9a1 (patch)
tree2986338f5466353686a257afd4835877b146bc6f
parent269b2707a7ae5cf8b41afbfac372b4e843e2673d (diff)
fix provider script path for somerville
-rwxr-xr-xbin/query_bto_version.py122
-rw-r--r--jobs/somerville/somerville.txt.in6
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