get comar bus address from context & remove self from patch
This commit is contained in:
+26
-277
@@ -1,276 +1,8 @@
|
|||||||
Index: comar-dbus.patch
|
|
||||||
===================================================================
|
|
||||||
--- comar-dbus.patch (revision 16918)
|
|
||||||
+++ comar-dbus.patch (working copy)
|
|
||||||
@@ -1,263 +0,0 @@
|
|
||||||
-Index: comariface.py
|
|
||||||
-===================================================================
|
|
||||||
---- comariface.py (revision 16886)
|
|
||||||
-+++ comariface.py (working copy)
|
|
||||||
-@@ -25,117 +25,137 @@
|
|
||||||
- pass
|
|
||||||
-
|
|
||||||
- try:
|
|
||||||
-- import comar
|
|
||||||
-+ import dbus
|
|
||||||
- except ImportError:
|
|
||||||
-- raise Error(_("comar package is not fully installed"))
|
|
||||||
-+ raise Error(_("dbus-python package is not fully installed"))
|
|
||||||
-
|
|
||||||
--def get_comar():
|
|
||||||
-- """Connect to the comar daemon and return the handle"""
|
|
||||||
-+def is_char_valid(char):
|
|
||||||
-+ """Test if char is valid object path character."""
|
|
||||||
-+ char = ord(char)
|
|
||||||
-+ return (char in xrange(65, 91) or
|
|
||||||
-+ char in xrange(97, 123) or
|
|
||||||
-+ char in xrange(48, 58) or
|
|
||||||
-+ char == '_')
|
|
||||||
-+
|
|
||||||
-+def make_object_path(package):
|
|
||||||
-+ """Generates DBus object name from package name."""
|
|
||||||
-+ object = package
|
|
||||||
-+ for char in package:
|
|
||||||
-+ if not is_char_valid(char):
|
|
||||||
-+ object = object.replace(char, '_')
|
|
||||||
-+ return object
|
|
||||||
-+
|
|
||||||
-+def get_iface(package="", model=""):
|
|
||||||
-+ """Connect to the DBus daemon and return the system interface."""
|
|
||||||
-
|
|
||||||
-- sockname = "/var/run/comar.socket"
|
|
||||||
-+ sockname = "unix:path=/var/run/dbus/system_bus_socket"
|
|
||||||
- # YALI starts comar chrooted in the install target, but uses PiSi outside of
|
|
||||||
- # the chroot environment, so PiSi needs to use a different socket path to be
|
|
||||||
-- # able to connect true comar (usually /mnt/target/var/run/comar.socket).
|
|
||||||
-- if ctx.comar_sockname:
|
|
||||||
-- sockname = ctx.comar_sockname
|
|
||||||
-+ # able to connect true dbus (and comar).
|
|
||||||
-+ # (usually unix:path=/var/run/dbus/system_bus_socket)
|
|
||||||
-+ if ctx.dbus_sockname:
|
|
||||||
-+ sockname = ctx.dbus_sockname
|
|
||||||
-
|
|
||||||
-+ if package:
|
|
||||||
-+ obj_path = "/package/%s" % package
|
|
||||||
-+ else:
|
|
||||||
-+ obj_path = "/"
|
|
||||||
-+ if model:
|
|
||||||
-+ obj_interface = "tr.org.pardus.comar.%s" % model
|
|
||||||
-+ else:
|
|
||||||
-+ obj_interface = "tr.org.pardus.comar"
|
|
||||||
-+
|
|
||||||
- # This function is sometimes called when comar has recently started
|
|
||||||
- # or restarting after an update. So we give comar a chance to become
|
|
||||||
- # active in a reasonable time.
|
|
||||||
- timeout = 7
|
|
||||||
- while timeout > 0:
|
|
||||||
- try:
|
|
||||||
-- com = comar.Link(sockname)
|
|
||||||
-- return com
|
|
||||||
-- except comar.CannotConnect:
|
|
||||||
-+ bus = dbus.bus.BusConnection(address_or_type=sockname)
|
|
||||||
-+ obj = bus.get_object("tr.org.pardus.comar", obj_path)
|
|
||||||
-+ iface = dbus.Interface(obj, dbus_interface=obj_interface)
|
|
||||||
-+ return iface
|
|
||||||
-+ except dbus.DBusException:
|
|
||||||
- pass
|
|
||||||
- time.sleep(0.2)
|
|
||||||
- timeout -= 0.2
|
|
||||||
-- raise Error(_("cannot connect to comar"))
|
|
||||||
-+ raise Error(_("cannot connect to dbus"))
|
|
||||||
-
|
|
||||||
--def wait_for_result(com, package_name=None):
|
|
||||||
-- multiple = False
|
|
||||||
-- while True:
|
|
||||||
-- try:
|
|
||||||
-- reply = com.read_cmd()
|
|
||||||
-- except select.error:
|
|
||||||
-- if ctx.keyboard_interrupt_pending():
|
|
||||||
-- return
|
|
||||||
-- raise
|
|
||||||
-- except comar.LinkClosed:
|
|
||||||
-- # Comar postInstall does a "service comar restart" which cuts
|
|
||||||
-- # our precious communication link, so we waitsss
|
|
||||||
-- if package_name == "comar":
|
|
||||||
-- try:
|
|
||||||
-- get_comar()
|
|
||||||
-- except Error:
|
|
||||||
-- raise Error, _("Could not restart comar")
|
|
||||||
-- return
|
|
||||||
-- else:
|
|
||||||
-- if ctx.keyboard_interrupt_pending():
|
|
||||||
-- return
|
|
||||||
-- raise Error, _("connection with comar unexpectedly closed")
|
|
||||||
--
|
|
||||||
-- cmd = reply[0]
|
|
||||||
-- if cmd == com.RESULT and not multiple:
|
|
||||||
-- return
|
|
||||||
-- elif cmd == com.NONE and not multiple:
|
|
||||||
-- # no post/pre function, that is ok
|
|
||||||
-- return
|
|
||||||
-- elif cmd == com.RESULT_START:
|
|
||||||
-- multiple = True
|
|
||||||
-- elif cmd == com.RESULT_END:
|
|
||||||
-- return
|
|
||||||
-- elif cmd == com.FAIL:
|
|
||||||
-- raise Error, _("Configuration error: %s") % reply[2]
|
|
||||||
-- elif cmd == com.ERROR:
|
|
||||||
-- raise Error, _("Script error: %s") % reply[2]
|
|
||||||
-- elif cmd == com.DENIED:
|
|
||||||
-- raise Error, _("comar denied our access")
|
|
||||||
--
|
|
||||||
- def post_install(package_name, provided_scripts, scriptpath, metapath, filepath, fromVersion, fromRelease, toVersion, toRelease):
|
|
||||||
- """Do package's post install operations"""
|
|
||||||
-
|
|
||||||
- ctx.ui.info(_("Configuring %s package") % package_name)
|
|
||||||
- self_post = False
|
|
||||||
-- com = get_comar()
|
|
||||||
-+ sys_iface = get_iface()
|
|
||||||
-+ object_name = make_object_path(package_name)
|
|
||||||
-
|
|
||||||
- for script in provided_scripts:
|
|
||||||
- ctx.ui.debug(_("Registering %s comar script") % script.om)
|
|
||||||
- if script.om == "System.Package":
|
|
||||||
- self_post = True
|
|
||||||
-- com.register(script.om, package_name, os.path.join(scriptpath, script.script))
|
|
||||||
-- wait_for_result(com)
|
|
||||||
-+ try:
|
|
||||||
-+ sys_iface.register(object_name, script.om, os.path.join(scriptpath, script.script))
|
|
||||||
-+ except dbus.DBusException, exception:
|
|
||||||
-+ raise Error, _("Script error: %s") % exception
|
|
||||||
-
|
|
||||||
- ctx.ui.debug(_("Calling post install handlers"))
|
|
||||||
-- com.call("System.PackageHandler.setupPackage", [ "metapath", metapath, "filepath", filepath ])
|
|
||||||
-- wait_for_result(com)
|
|
||||||
-+ for handler in sys_iface.listModelApplications("System.PackageHandler"):
|
|
||||||
-+ iface = get_iface(handler, "System.PackageHandler")
|
|
||||||
-+ try:
|
|
||||||
-+ iface.setupPackage(metapath, filepath, timeout=300)
|
|
||||||
-+ except dbus.DBusException, exception:
|
|
||||||
-+ # Do nothing if setupPackage method is not defined in package script
|
|
||||||
-+ if not (exception._dbus_error_name.startswith("tr.org.pardus.comar") and
|
|
||||||
-+ exception._dbus_error_name.split('tr.org.pardus.comar.')[1] == 'python.missing'):
|
|
||||||
-+ raise Error, _("Script error: %s") % exception
|
|
||||||
-
|
|
||||||
- if self_post:
|
|
||||||
-- args = {
|
|
||||||
-- "fromVersion": fromVersion,
|
|
||||||
-- "fromRelease": fromRelease,
|
|
||||||
-- "toVersion": toVersion,
|
|
||||||
-- "toRelease": toRelease,
|
|
||||||
-- }
|
|
||||||
-+ if not fromVersion:
|
|
||||||
-+ fromVersion = ""
|
|
||||||
-+ if not fromRelease:
|
|
||||||
-+ fromRelease = ""
|
|
||||||
-+
|
|
||||||
- ctx.ui.debug(_("Running package's post install script"))
|
|
||||||
-- com.call_package("System.Package.postInstall", package_name, args)
|
|
||||||
-- wait_for_result(com, package_name)
|
|
||||||
-+ try:
|
|
||||||
-+ iface = get_iface(object_name, "System.Package")
|
|
||||||
-+ iface.postInstall(fromVersion, fromRelease, toVersion, toRelease, timeout=300)
|
|
||||||
-+ except dbus.DBusException, exception:
|
|
||||||
-+ # Do nothing if postInstall method is not defined in package script
|
|
||||||
-+ if not (exception._dbus_error_name.startswith("tr.org.pardus.comar") and
|
|
||||||
-+ exception._dbus_error_name.split('tr.org.pardus.comar.')[1] == 'python.missing'):
|
|
||||||
-+ raise Error, _("Script error: %s") % exception
|
|
||||||
-
|
|
||||||
- def pre_remove(package_name, metapath, filepath):
|
|
||||||
- """Do package's pre removal operations"""
|
|
||||||
-
|
|
||||||
- ctx.ui.info(_("Configuring %s package for removal") % package_name)
|
|
||||||
-- com = get_comar()
|
|
||||||
-+ sys_iface = get_iface()
|
|
||||||
-+ object_name = make_object_path(package_name)
|
|
||||||
-
|
|
||||||
-- ctx.ui.debug(_("Running package's pre remove script"))
|
|
||||||
-- com.call_package("System.Package.preRemove", package_name)
|
|
||||||
-- wait_for_result(com)
|
|
||||||
-+ if "System.Package" in sys_iface.listApplicationModels(object_name):
|
|
||||||
-+ ctx.ui.debug(_("Running package's pre remove script"))
|
|
||||||
-+ iface = get_iface(object_name, "System.Package")
|
|
||||||
-+ try:
|
|
||||||
-+ iface.preRemove(timeout=300)
|
|
||||||
-+ except dbus.DBusException, exception:
|
|
||||||
-+ # Do nothing if preRemove method is not defined in package script
|
|
||||||
-+ if not (exception._dbus_error_name.startswith("tr.org.pardus.comar") and
|
|
||||||
-+ exception._dbus_error_name.split('tr.org.pardus.comar.')[1] == 'python.missing'):
|
|
||||||
-+ raise Error, _("Script error: %s") % exception
|
|
||||||
-
|
|
||||||
- ctx.ui.debug(_("Calling pre remove handlers"))
|
|
||||||
-- com.call("System.PackageHandler.cleanupPackage", [ "metapath", metapath, "filepath", filepath ])
|
|
||||||
-- wait_for_result(com)
|
|
||||||
-+ for handler in sys_iface.listModelApplications("System.PackageHandler"):
|
|
||||||
-+ iface = get_iface(handler, "System.PackageHandler")
|
|
||||||
-+ try:
|
|
||||||
-+ iface.cleanupPackage(metapath, filepath, timeout=300)
|
|
||||||
-+ except dbus.DBusException, exception:
|
|
||||||
-+ # Do nothing if cleanupPackage method is not defined in package script
|
|
||||||
-+ if not (exception._dbus_error_name.startswith("tr.org.pardus.comar") and
|
|
||||||
-+ exception._dbus_error_name.split('tr.org.pardus.comar.')[1] == 'python.missing'):
|
|
||||||
-+ raise Error, _("Script error: %s") % exception
|
|
||||||
-
|
|
||||||
- ctx.ui.debug(_("Unregistering comar scripts"))
|
|
||||||
-- com.remove(package_name)
|
|
||||||
-- wait_for_result(com)
|
|
||||||
-+ try:
|
|
||||||
-+ sys_iface.remove(object_name)
|
|
||||||
-+ except dbus.DBusException, exception:
|
|
||||||
-+ raise Error, _("Script error: %s") % exception
|
|
||||||
-Index: api.py
|
|
||||||
-===================================================================
|
|
||||||
---- api.py (revision 16886)
|
|
||||||
-+++ api.py (working copy)
|
|
||||||
-@@ -71,13 +71,13 @@
|
|
||||||
- """
|
|
||||||
- ctx.comar = enable
|
|
||||||
-
|
|
||||||
--def set_comar_sockname(sockname):
|
|
||||||
-+def set_dbus_sockname(sockname):
|
|
||||||
- """
|
|
||||||
-- Set comar socket file
|
|
||||||
-+ Set dbus socket file
|
|
||||||
- Used by YALI
|
|
||||||
-- @param sockname: Path to comar socket file
|
|
||||||
-+ @param sockname: Path to dbus socket file
|
|
||||||
- """
|
|
||||||
-- ctx.comar_sockname = sockname
|
|
||||||
-+ ctx.dbus_sockname = sockname
|
|
||||||
-
|
|
||||||
- def set_options(options):
|
|
||||||
- """
|
|
||||||
-Index: atomicoperations.py
|
|
||||||
-===================================================================
|
|
||||||
---- atomicoperations.py (revision 16886)
|
|
||||||
-+++ atomicoperations.py (working copy)
|
|
||||||
-@@ -152,7 +152,7 @@
|
|
||||||
- # check comar
|
|
||||||
- if self.metadata.package.providesComar and ctx.comar:
|
|
||||||
- import pisi.comariface as comariface
|
|
||||||
-- comariface.get_comar()
|
|
||||||
-+ comariface.get_iface()
|
|
||||||
-
|
|
||||||
- def check_relations(self):
|
|
||||||
- # check dependencies
|
|
||||||
-Index: context.py
|
|
||||||
-===================================================================
|
|
||||||
---- context.py (revision 16886)
|
|
||||||
-+++ context.py (working copy)
|
|
||||||
-@@ -38,7 +38,7 @@
|
|
||||||
- stderr = None
|
|
||||||
-
|
|
||||||
- comar = True
|
|
||||||
--comar_sockname = None
|
|
||||||
-+dbus_sockname = None
|
|
||||||
-
|
|
||||||
- # Bug #2879
|
|
||||||
- # FIXME: Maybe we can create a simple rollback mechanism. There are other
|
|
||||||
Index: pisi/comariface.py
|
Index: pisi/comariface.py
|
||||||
===================================================================
|
===================================================================
|
||||||
--- pisi/comariface.py (revision 16918)
|
--- pisi/comariface.py (revision 17117)
|
||||||
+++ pisi/comariface.py (working copy)
|
+++ pisi/comariface.py (working copy)
|
||||||
@@ -25,117 +25,137 @@
|
@@ -25,117 +25,146 @@
|
||||||
pass
|
pass
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -332,7 +64,7 @@ Index: pisi/comariface.py
|
|||||||
- return com
|
- return com
|
||||||
- except comar.CannotConnect:
|
- except comar.CannotConnect:
|
||||||
+ bus = dbus.bus.BusConnection(address_or_type=sockname)
|
+ bus = dbus.bus.BusConnection(address_or_type=sockname)
|
||||||
+ obj = bus.get_object("tr.org.pardus.comar", obj_path)
|
+ obj = bus.get_object(ctx.comar_destination, obj_path)
|
||||||
+ iface = dbus.Interface(obj, dbus_interface=obj_interface)
|
+ iface = dbus.Interface(obj, dbus_interface=obj_interface)
|
||||||
+ return iface
|
+ return iface
|
||||||
+ except dbus.DBusException:
|
+ except dbus.DBusException:
|
||||||
@@ -388,6 +120,7 @@ Index: pisi/comariface.py
|
|||||||
ctx.ui.info(_("Configuring %s package") % package_name)
|
ctx.ui.info(_("Configuring %s package") % package_name)
|
||||||
self_post = False
|
self_post = False
|
||||||
- com = get_comar()
|
- com = get_comar()
|
||||||
|
+ sys_service = False
|
||||||
+ sys_iface = get_iface()
|
+ sys_iface = get_iface()
|
||||||
+ object_name = make_object_path(package_name)
|
+ object_name = make_object_path(package_name)
|
||||||
|
|
||||||
@@ -397,10 +130,18 @@ Index: pisi/comariface.py
|
|||||||
self_post = True
|
self_post = True
|
||||||
- com.register(script.om, package_name, os.path.join(scriptpath, script.script))
|
- com.register(script.om, package_name, os.path.join(scriptpath, script.script))
|
||||||
- wait_for_result(com)
|
- wait_for_result(com)
|
||||||
|
+ elif script.om == "System.Service":
|
||||||
|
+ sys_service = False
|
||||||
+ try:
|
+ try:
|
||||||
+ sys_iface.register(object_name, script.om, os.path.join(scriptpath, script.script))
|
+ sys_iface.register(object_name, script.om, os.path.join(scriptpath, script.script))
|
||||||
+ except dbus.DBusException, exception:
|
+ except dbus.DBusException, exception:
|
||||||
+ raise Error, _("Script error: %s") % exception
|
+ raise Error, _("Script error: %s") % exception
|
||||||
|
+ if sys_service:
|
||||||
|
+ try:
|
||||||
|
+ iface = get_iface(object_name, "System.Service")
|
||||||
|
+ iface.registerState()
|
||||||
|
+ except dbus.DBusException, exception:
|
||||||
|
+ raise Error, _("Script error: %s") % exception
|
||||||
|
|
||||||
ctx.ui.debug(_("Calling post install handlers"))
|
ctx.ui.debug(_("Calling post install handlers"))
|
||||||
- com.call("System.PackageHandler.setupPackage", [ "metapath", metapath, "filepath", filepath ])
|
- com.call("System.PackageHandler.setupPackage", [ "metapath", metapath, "filepath", filepath ])
|
||||||
@@ -483,16 +224,23 @@ Index: pisi/comariface.py
|
|||||||
+ raise Error, _("Script error: %s") % exception
|
+ raise Error, _("Script error: %s") % exception
|
||||||
Index: pisi/api.py
|
Index: pisi/api.py
|
||||||
===================================================================
|
===================================================================
|
||||||
--- pisi/api.py (revision 16918)
|
--- pisi/api.py (revision 17117)
|
||||||
+++ pisi/api.py (working copy)
|
+++ pisi/api.py (working copy)
|
||||||
@@ -71,13 +71,13 @@
|
@@ -71,13 +71,20 @@
|
||||||
"""
|
"""
|
||||||
ctx.comar = enable
|
ctx.comar = enable
|
||||||
|
|
||||||
-def set_comar_sockname(sockname):
|
-def set_comar_sockname(sockname):
|
||||||
+def set_dbus_sockname(sockname):
|
+def set_comar_destination(destination):
|
||||||
"""
|
"""
|
||||||
- Set comar socket file
|
- Set comar socket file
|
||||||
|
+ Set comar bus destination
|
||||||
|
+ @param destination: Path to bus destination of COMAR
|
||||||
|
+ """
|
||||||
|
+ ctx.comar_destination = destination
|
||||||
|
+
|
||||||
|
+def set_dbus_sockname(sockname):
|
||||||
|
+ """
|
||||||
+ Set dbus socket file
|
+ Set dbus socket file
|
||||||
Used by YALI
|
Used by YALI
|
||||||
- @param sockname: Path to comar socket file
|
- @param sockname: Path to comar socket file
|
||||||
@@ -505,7 +253,7 @@ Index: pisi/api.py
|
|||||||
"""
|
"""
|
||||||
Index: pisi/atomicoperations.py
|
Index: pisi/atomicoperations.py
|
||||||
===================================================================
|
===================================================================
|
||||||
--- pisi/atomicoperations.py (revision 16918)
|
--- pisi/atomicoperations.py (revision 17117)
|
||||||
+++ pisi/atomicoperations.py (working copy)
|
+++ pisi/atomicoperations.py (working copy)
|
||||||
@@ -152,7 +152,7 @@
|
@@ -152,7 +152,7 @@
|
||||||
# check comar
|
# check comar
|
||||||
@@ -518,13 +266,14 @@ Index: pisi/atomicoperations.py
|
|||||||
# check dependencies
|
# check dependencies
|
||||||
Index: pisi/context.py
|
Index: pisi/context.py
|
||||||
===================================================================
|
===================================================================
|
||||||
--- pisi/context.py (revision 16918)
|
--- pisi/context.py (revision 17117)
|
||||||
+++ pisi/context.py (working copy)
|
+++ pisi/context.py (working copy)
|
||||||
@@ -38,7 +38,7 @@
|
@@ -38,7 +38,8 @@
|
||||||
stderr = None
|
stderr = None
|
||||||
|
|
||||||
comar = True
|
comar = True
|
||||||
-comar_sockname = None
|
-comar_sockname = None
|
||||||
|
+comar_destination = "tr.org.pardus.comar"
|
||||||
+dbus_sockname = None
|
+dbus_sockname = None
|
||||||
|
|
||||||
# Bug #2879
|
# Bug #2879
|
||||||
|
|||||||
Reference in New Issue
Block a user