From: Claudio-Daniel Freire Date: Thu, 30 Jun 2011 09:34:39 +0000 (+0200) Subject: Support for automatic install of RpmFusion repository on PL slivers X-Git-Tag: nepi_v2_1~11 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=dea826087e7ee6209f2ddba377207b627f2637b9;p=nepi.git Support for automatic install of RpmFusion repository on PL slivers --- diff --git a/src/nepi/testbeds/planetlab/application.py b/src/nepi/testbeds/planetlab/application.py index 227cadb6..c0bf266b 100644 --- a/src/nepi/testbeds/planetlab/application.py +++ b/src/nepi/testbeds/planetlab/application.py @@ -46,6 +46,7 @@ class Dependency(object): self.depends = None self.buildDepends = None self.sources = None + self.rpmFusion = False self.env = {} self.stdin = None diff --git a/src/nepi/testbeds/planetlab/metadata_v01.py b/src/nepi/testbeds/planetlab/metadata_v01.py index 8ca0e993..e8ea963e 100644 --- a/src/nepi/testbeds/planetlab/metadata_v01.py +++ b/src/nepi/testbeds/planetlab/metadata_v01.py @@ -147,6 +147,9 @@ def connect_dep(testbed_instance, node_guid, app_guid): for envkey, envval in app.env.iteritems(): envval = app._replace_paths(envval) node.env[envkey].append(envval) + + if app.rpmFusion: + node.rpmFusion = True def connect_node_netpipe(testbed_instance, node_guid, netpipe_guid): node = testbed_instance._elements[node_guid] @@ -794,6 +797,14 @@ attributes = dict({ "flags": Attribute.DesignOnly, "validation_function": validation.is_string }), + "rpm-fusion": dict({ + "name": "rpmFusion", + "help": "True if required packages can be found in the RpmFusion repository", + "type": Attribute.BOOL, + "flags": Attribute.DesignOnly, + "value": False, + "validation_function": validation.is_bool + }), "sources": dict({ "name": "sources", "help": "Space-separated list of regular files to be deployed in the working path prior to building. " @@ -1007,7 +1018,7 @@ factories_info = dict({ "configure_function": configure_application, "box_attributes": ["command", "sudo", "stdin", "depends", "build-depends", "build", "install", - "sources" ], + "sources", "rpm-fusion" ], "connector_types": ["node"], "traces": ["stdout", "stderr", "buildlog"] }), @@ -1017,7 +1028,7 @@ factories_info = dict({ "create_function": create_dependency, "preconfigure_function": configure_dependency, "box_attributes": ["depends", "build-depends", "build", "install", - "sources" ], + "sources", "rpm-fusion" ], "connector_types": ["node"], "traces": ["buildlog"] }), diff --git a/src/nepi/testbeds/planetlab/node.py b/src/nepi/testbeds/planetlab/node.py index 544c19d7..2afdd477 100644 --- a/src/nepi/testbeds/planetlab/node.py +++ b/src/nepi/testbeds/planetlab/node.py @@ -40,6 +40,8 @@ class Node(object): DEPENDS_PIDFILE = '/tmp/nepi-depends.pid' DEPENDS_LOGFILE = '/tmp/nepi-depends.log' + RPM_FUSION_URL = 'http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm' + RPM_FUSION_URL_F12 = 'http://download1.rpmfusion.org/free/fedora/releases/12/Everything/x86_64/os/rpmfusion-free-release-12-1.noarch.rpm' def __init__(self, api=None): if not api: @@ -65,6 +67,7 @@ class Node(object): self.required_packages = set() self.required_vsys = set() self.pythonpath = [] + self.rpmFusion = False self.env = collections.defaultdict(list) # Testbed-derived attributes @@ -313,11 +316,29 @@ class Node(object): pidfile = self.DEPENDS_PIDFILE logfile = self.DEPENDS_LOGFILE + # If we need rpmfusion, we must install the repo definition and the gpg keys + if self.rpmFusion: + if self.operatingSystem == 'f12': + # Fedora 12 requires a different rpmfusion package + RPM_FUSION_URL = self.RPM_FUSION_URL_F12 + else: + # This one works for f13+ + RPM_FUSION_URL = self.RPM_FUSION_URL + + rpmFusion = ( + '( rpm -q $(rpm -q -p %(RPM_FUSION_URL)s) || rpm -i %(RPM_FUSION_URL)s ) &&' + ) % { + 'RPM_FUSION_URL' : RPM_FUSION_URL + } + else: + rpmFusion = '' + # Start process in a "daemonized" way, using nohup and heavy # stdin/out redirection to avoid connection issues (out,err),proc = rspawn.remote_spawn( - "( yum -y install %(packages)s && echo SUCCESS || echo FAILURE )" % { + "( %(rpmfusion)s yum -y install %(packages)s && echo SUCCESS || echo FAILURE )" % { 'packages' : ' '.join(self.required_packages), + 'rpmfusion' : rpmFusion, }, pidfile = pidfile, stdout = logfile,