def install_drivers(cfg, pkg_install_func): if not isinstance(cfg, dict): raise TypeError("'drivers' config expected dict, found '%s': %s" % (type_utils.obj_name(cfg), cfg)) cfgpath = "nvidia/license-accepted" # Call translate_bool to ensure that we treat string values like "yes" as # acceptance and _don't_ treat string values like "nah" as acceptance # because they're True-ish nv_acc = util.translate_bool(util.get_cfg_by_path(cfg, cfgpath)) if not nv_acc: LOG.debug("Not installing NVIDIA drivers. %s=%s", cfgpath, nv_acc) return if not subp.which("ubuntu-drivers"): LOG.debug("'ubuntu-drivers' command not available. " "Installing ubuntu-drivers-common") pkg_install_func(["ubuntu-drivers-common"]) driver_arg = "nvidia" version_cfg = util.get_cfg_by_path(cfg, "nvidia/version") if version_cfg: driver_arg += ":{}".format(version_cfg) LOG.debug( "Installing and activating NVIDIA drivers (%s=%s, version=%s)", cfgpath, nv_acc, version_cfg if version_cfg else "latest", ) # Register and set debconf selection linux/nvidia/latelink = true tdir = temp_utils.mkdtemp(needs_exe=True) debconf_file = os.path.join(tdir, "nvidia.template") debconf_script = os.path.join(tdir, "nvidia-debconf.sh") try: util.write_file(debconf_file, NVIDIA_DEBCONF_CONTENT) util.write_file( debconf_script, util.encode_text(NVIDIA_DRIVER_LATELINK_DEBCONF_SCRIPT), mode=0o755, ) subp.subp([debconf_script, debconf_file]) except Exception as e: util.logexc(LOG, "Failed to register NVIDIA debconf template: %s", str(e)) raise finally: if os.path.isdir(tdir): util.del_dir(tdir) try: subp.subp(["ubuntu-drivers", "install", "--gpgpu", driver_arg]) except subp.ProcessExecutionError as exc: if OLD_UBUNTU_DRIVERS_STDERR_NEEDLE in exc.stderr: LOG.warning("the available version of ubuntu-drivers is" " too old to perform requested driver installation") elif "No drivers found for installation." in exc.stdout: LOG.warning("ubuntu-drivers found no drivers for installation") raise
def __init__(self): self.tmpdir = temp_utils.mkdtemp() self.certificate = None self.generate_certificate()
def __init__(self): self.tmpdir = temp_utils.mkdtemp() self.certificate = None self.generate_certificate()
class TestMultipleSshAuthorizedKeysFile(test_helpers.CiTestCase): tmp_d = mkdtemp() def create_fake_users( self, names, mock_permissions, m_get_group, m_get_owner, m_get_permissions, m_getpwnam, users, ): homes = [] root = self.tmp_d + "/root" fpw = FakePwEnt(pw_name="root", pw_dir=root) users["root"] = fpw for name in names: home = self.tmp_d + "/home/" + name fpw = FakePwEnt(pw_name=name, pw_dir=home) users[name] = fpw homes.append(home) m_get_permissions.side_effect = partial( mock_get_permissions, mock_permissions ) m_get_owner.side_effect = partial(mock_get_owner, mock_permissions) m_get_group.side_effect = partial(mock_get_group, mock_permissions) m_getpwnam.side_effect = partial(mock_getpwnam, users) return homes def create_user_authorized_file(self, home, filename, content_key, keys): user_ssh_folder = "%s/.ssh" % home # /tmp/home/<user>/.ssh/authorized_keys = content_key authorized_keys = self.tmp_path(filename, dir=user_ssh_folder) util.write_file(authorized_keys, VALID_CONTENT[content_key]) keys[authorized_keys] = content_key return authorized_keys def create_global_authorized_file(self, filename, content_key, keys): authorized_keys = self.tmp_path(filename, dir=self.tmp_d) util.write_file(authorized_keys, VALID_CONTENT[content_key]) keys[authorized_keys] = content_key return authorized_keys def create_sshd_config(self, authorized_keys_files): sshd_config = self.tmp_path("sshd_config", dir=self.tmp_d) util.write_file( sshd_config, "AuthorizedKeysFile " + authorized_keys_files ) return sshd_config def execute_and_check( self, user, sshd_config, solution, keys, delete_keys=True ): (auth_key_fn, auth_key_entries) = ssh_util.extract_authorized_keys( user, sshd_config ) content = ssh_util.update_authorized_keys(auth_key_entries, []) self.assertEqual("%s/.ssh/authorized_keys" % fpw.pw_dir, auth_key_fn) self.assertTrue(VALID_CONTENT['rsa'] in content) self.assertFalse(VALID_CONTENT['dsa'] in content)