rosdep: #3616 patch from felix_k to support fedora
This commit is contained in:
parent
40ec1f8426
commit
cc38b01ef7
|
@ -282,6 +282,63 @@ class AptInstaller(InstallerAPI):
|
||||||
return [version_lock_map[r] for r in ret_list]
|
return [version_lock_map[r] for r in ret_list]
|
||||||
|
|
||||||
|
|
||||||
|
class YumInstaller(InstallerAPI):
|
||||||
|
"""
|
||||||
|
An implementation of the InstallerAPI for use on yum/fedora style
|
||||||
|
systems.
|
||||||
|
"""
|
||||||
|
def __init__(self, arg_dict):
|
||||||
|
packages = arg_dict.get("packages", "")
|
||||||
|
if type(packages) == type("string"):
|
||||||
|
packages = packages.split()
|
||||||
|
|
||||||
|
self.packages = packages
|
||||||
|
|
||||||
|
|
||||||
|
def get_packages_to_install(self):
|
||||||
|
return list(set(self.packages) - set(self.dpkg_detect(self.packages)))
|
||||||
|
|
||||||
|
|
||||||
|
def check_presence(self):
|
||||||
|
return len(self.get_packages_to_install()) == 0
|
||||||
|
|
||||||
|
|
||||||
|
def generate_package_install_command(self, default_yes = False, execute = True, display = True):
|
||||||
|
script = '!#/bin/bash\n#no script'
|
||||||
|
packages_to_install = self.get_packages_to_install()
|
||||||
|
if not packages_to_install:
|
||||||
|
script = "#!/bin/bash\n#No Packages to install"
|
||||||
|
elif default_yes:
|
||||||
|
script = "#!/bin/bash\n#Packages %s\nsudo yum install -y "%packages_to_install + ' '.join(packages_to_install)
|
||||||
|
else:
|
||||||
|
script = "#!/bin/bash\n#Packages %s\nsudo yum install "%packages_to_install + ' '.join(packages_to_install)
|
||||||
|
|
||||||
|
if execute:
|
||||||
|
return rosdep.core.create_tempfile_from_string_and_execute(script)
|
||||||
|
elif display:
|
||||||
|
print "To install packages: %s would have executed script\n{{{\n%s\n}}}"%(packages_to_install, script)
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def dpkg_detect(self, pkgs):
|
||||||
|
"""
|
||||||
|
Given a list of packages, return the list of installed packages.
|
||||||
|
"""
|
||||||
|
ret_list = []
|
||||||
|
#cmd = ['rpm', '-q', '--qf ""'] # suppress output for installed packages
|
||||||
|
cmd = ['rpm', '-q', '--qf', '%{NAME}\n'] # output: "pkg_name" for installed, error text for not installed packages
|
||||||
|
cmd.extend(pkgs)
|
||||||
|
|
||||||
|
pop = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
|
(std_out, std_err) = pop.communicate()
|
||||||
|
out_lines = std_out.split('\n')
|
||||||
|
for line in out_lines:
|
||||||
|
# if there is no space, it's not an error text -> it's installed
|
||||||
|
if line and ' ' not in line:
|
||||||
|
ret_list.append(line)
|
||||||
|
return ret_list
|
||||||
|
|
||||||
|
|
||||||
class PipInstaller(InstallerAPI):
|
class PipInstaller(InstallerAPI):
|
||||||
"""
|
"""
|
||||||
An implementation of the InstallerAPI for use on debian style
|
An implementation of the InstallerAPI for use on debian style
|
||||||
|
|
|
@ -34,40 +34,36 @@ import subprocess
|
||||||
|
|
||||||
import rosdep.base_rosdep
|
import rosdep.base_rosdep
|
||||||
|
|
||||||
class YumInstall:
|
|
||||||
"""This class provides the functions for installing using yum
|
|
||||||
it's methods partially implement the Rosdep OS api to complement
|
|
||||||
the roslib.OSDetect API. """
|
|
||||||
def rpm_detect(self, p):
|
|
||||||
return subprocess.call(['rpm', '-q', p], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
||||||
|
|
||||||
def strip_detected_packages(self, packages):
|
|
||||||
return [p for p in packages if self.rpm_detect(p)]
|
|
||||||
|
|
||||||
def generate_package_install_command(self, packages, default_yes):
|
|
||||||
if not packages:
|
|
||||||
return "#No Packages to install"
|
|
||||||
|
|
||||||
if default_yes:
|
|
||||||
return "#Packages\nsudo yum -y install " + ' '.join(packages)
|
|
||||||
else:
|
|
||||||
return "#Packages\nsudo yum install " + ' '.join(packages)
|
|
||||||
|
|
||||||
|
|
||||||
###### Fedora SPECIALIZATION #########################
|
###### Fedora SPECIALIZATION #########################
|
||||||
class Fedora(roslib.os_detect.Fedora, YumInstall, rosdep.base_rosdep.RosdepBaseOS):
|
class Fedora(roslib.os_detect.Fedora, rosdep.base_rosdep.RosdepBaseOS):
|
||||||
"""This class provides the Rosdep OS API for by combining the Fedora
|
""" This is an implementation of a standard interface for
|
||||||
OSDetect API and the YumInstall API
|
interacting with rosdep. This defines all Fedora sepecific
|
||||||
"""
|
methods, including detecting the OS/Version number. As well as
|
||||||
|
how to check for and install packages."""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.installers = {}
|
||||||
|
self.installers['yum'] = rosdep.installers.YumInstaller
|
||||||
|
self.installers['pip'] = rosdep.installers.PipInstaller
|
||||||
|
self.installers['source'] = rosdep.installers.SourceInstaller
|
||||||
|
self.installers['default'] = rosdep.installers.YumInstaller
|
||||||
pass
|
pass
|
||||||
|
|
||||||
###### END Fedora SPECIALIZATION ########################
|
###### END Fedora SPECIALIZATION ########################
|
||||||
|
|
||||||
###### Rhel SPECIALIZATION #########################
|
###### Rhel SPECIALIZATION #########################
|
||||||
class Rhel(roslib.os_detect.Rhel, YumInstall, rosdep.base_rosdep.RosdepBaseOS):
|
class Rhel(roslib.os_detect.Rhel, rosdep.base_rosdep.RosdepBaseOS):
|
||||||
"""This class provides the Red Hat Enterprise Linux Rosdep OS API
|
""" This is an implementation of a standard interface for
|
||||||
for by combining the RHEL OSDetect API and the YumInstall API
|
interacting with rosdep. This defines all Fedora sepecific
|
||||||
"""
|
methods, including detecting the OS/Version number. As well as
|
||||||
|
how to check for and install packages."""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.installers = {}
|
||||||
|
self.installers['yum'] = rosdep.installers.YumInstaller
|
||||||
|
self.installers['pip'] = rosdep.installers.PipInstaller
|
||||||
|
self.installers['source'] = rosdep.installers.SourceInstaller
|
||||||
|
self.installers['default'] = rosdep.installers.YumInstaller
|
||||||
pass
|
pass
|
||||||
###### END Rhel SPECIALIZATION ########################
|
###### END Rhel SPECIALIZATION ########################
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue