Добавлены настройки для dbus сервиса а также --dbus параметр для установки

master-3.5 3.5.7.1
parent 445212ce70
commit 8b36dc0e29

@ -0,0 +1,73 @@
#!/usr/bin/env python2
# Copyright 2017 Mir Calculate. http://www.calculate-linux.org
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from gi.repository import GLib
import dbus
import dbus.service
import dbus.mainloop.glib
from calculate.lib.utils.ip import check_port
from calculate.lib.utils.files import writeFile
import os
import time
DBUS_INTERFACE="org.calculate.CoreInterface"
DBUS_NAME="org.calculate.Core"
DBUS_OBJECT="/Core"
class CoreObject(dbus.service.Object):
@dbus.service.method(DBUS_INTERFACE,
in_signature='i', out_signature='b')
def Start(self, port):
try:
if not self.check_core(port):
os.system("source /etc/profile;/sbin/start-stop-daemon --background --start "
"--pidfile /var/run/cl_core.pid "
"--exec /usr/sbin/cl-core -- "
"--pid-file /var/run/cl_core.pid --close-on-inactive --start")
for x in xrange(0, 24):
if self.check_core(port):
return True
time.sleep(0.5)
else:
return False
return True
finally:
self.mainloop.quit()
@dbus.service.method(DBUS_INTERFACE,
in_signature='i', out_signature='b')
def Ping(self, port):
try:
return self.check_core(port)
finally:
self.mainloop.quit()
def check_core(self, port):
return check_port("127.0.0.1", port)
if __name__ == '__main__':
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
system_bus = dbus.SystemBus()
name = dbus.service.BusName(DBUS_NAME, system_bus)
obj = CoreObject(system_bus, DBUS_OBJECT)
obj.mainloop = GLib.MainLoop()
obj.mainloop.run()

@ -0,0 +1,21 @@
<!DOCTYPE busconfig PUBLIC
"-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<!-- Only root can own the service -->
<policy user="root">
<allow own="org.calculate.Core"/>
<!-- Allow all methods on interfaces -->
<allow send_destination="org.calculate.Core"/>
</policy>
<policy context="default">
<allow send_destination="org.calculate.Core"
send_interface="org.freedesktop.DBus.Introspectable"/>
<!-- Allow all methods on interfaces -->
<allow send_destination="org.calculate.Core" />
</policy>
</busconfig>

@ -0,0 +1,4 @@
[D-BUS Service]
Name=org.calculate.Core
Exec=/usr/bin/python2 /usr/libexec/calculate/cl-dbus-core.py
User=root

@ -23,11 +23,29 @@ from glob import glob
import distutils
from distutils.core import setup
from distutils.command import install_data as module_install_data
from distutils.command import install as module_install
from distutils.util import change_root, convert_path
class install_data(module_install_data.install_data):
def run (self):
self.mkpath(self.install_dir)
class install(module_install.install):
user_options = module_install.install.user_options + [
("dbus", None, "install dbus service")
]
def initialize_options(self):
module_install.install.initialize_options(self)
self.dbus = False
self.data_files = self.distribution.data_files
self.outfiles = []
self.uses = []
def finalize_options(self):
module_install.install.finalize_options(self)
if self.dbus:
self.uses.append("dbus")
self.sub_commands = [x for x in self.sub_commands if x[0] != 'install_data']
def install_data_run(self):
self.mkpath(self.install_data)
for f in self.data_files:
if isinstance(f, str):
# it's a simple file, so copy it
@ -35,14 +53,18 @@ class install_data(module_install_data.install_data):
if self.warn_dir:
self.warn("setup script did not provide a directory for "
"'%s' -- installing right in '%s'" %
(f, self.install_dir))
(out, _) = self.copy_file(f, self.install_dir)
(f, self.install_data))
(out, _) = self.copy_file(f, self.install_data)
self.outfiles.append(out)
else:
# it's a tuple with path to install to and a list of files
if len(f) > 2:
if f[2] not in self.uses:
continue
dir = convert_path(f[0])
if not os.path.isabs(dir):
dir = os.path.join(self.install_dir, dir)
dir = os.path.join(self.install_data, dir)
elif self.root:
dir = change_root(self.root, dir)
self.mkpath(dir)
@ -66,7 +88,12 @@ class install_data(module_install_data.install_data):
os.chmod(out,chmod)
self.outfiles.append(out)
__version__ = "3.2.2"
def run (self):
module_install.install.run(self)
self.install_data_run()
__version__ = "3.5.7"
__app__ = "calculate-core"
@ -92,9 +119,12 @@ setup(
('/usr/libexec/calculate', [('data/cl-core-wrapper', 0755)]),
('/usr/libexec/calculate', [('data/cl-pkg-cache', 0755)]),
('/usr/libexec/calculate', [('data/cl-check-admin', 0755)]),
('/usr/libexec/calculate', [('data/cl-variable', 0755)])
('/usr/libexec/calculate', [('data/cl-variable', 0755)]),
('/usr/libexec/calculate', [('data/cl-dbus-core.py', 0755)], "dbus"),
('/usr/share/dbus-1/system.d', [('data/org.calculate.Core.conf', 0644)], "dbus"),
('/usr/share/dbus-1/system-services', [('data/org.calculate.Core.service', 0644)], "dbus"),
),
package_dir = {'calculate.core': "pym/core"},
packages = packages,
cmdclass={'install_data': install_data}
cmdclass={'install': install }
)

Loading…
Cancel
Save