def test_package_management(self):
        try:
            # since we won't actually install/remove packages, we'll
            # verify that our db has been updated correctly
            os.environ['XDG_DATA_HOME'] = TestLibertineService._tempdir.name
            config = ContainersConfig()

            self._send(lambda: self._libertined.create('jarjar', 'JarJar Binks', 'xenial', 'mock'))
            self.assertEqual([], ast.literal_eval(self._send(lambda: self._libertined.list_app_ids('jarjar'))))

            self._send(lambda: self._libertined.install('jarjar', 'the-force'))
            config.refresh_database()
            self.assertEqual('installed', config.get_package_install_status('jarjar', 'the-force'))

            self._send(lambda: self._libertined.install('jarjar', 'gungan-smash'))
            config.refresh_database()
            self.assertEqual('installed', config.get_package_install_status('jarjar', 'gungan-smash'))

            self._send(lambda: self._libertined.remove('jarjar', 'the-force'))
            config.refresh_database()
            self.assertIsNone(config.get_package_install_status('jarjar', 'the-force'))
        except AssertionError as e:
            raise
        except Exception as e:
            self.fail('Exception thrown in test: %s' % str(e))
Ejemplo n.º 2
0
    def _remove_running_app(self):
        """Remove a running app entry from ContainersConfig.json."""
        if self._config.container_id:
            containers_config = ContainersConfig()
            running_app = containers_config.find_running_app_by_name_and_pid(self._config.container_id,
                                                                             self._config.exec_line[0],
                                                                             self._app.pid)

            if running_app:
                containers_config.delete_running_app(self._config.container_id, running_app)
Ejemplo n.º 3
0
    def _remove_running_app(self):
        """Remove a running app entry from ContainersConfig.json."""
        if self._config.container_id:
            containers_config = ContainersConfig()
            running_app = containers_config.find_running_app_by_name_and_pid(
                self._config.container_id, self._config.exec_line[0],
                self._app.pid)

            if running_app:
                containers_config.delete_running_app(self._config.container_id,
                                                     running_app)
Ejemplo n.º 4
0
    def __init__(self, container_id, containers_config=None, service=None):
        """
        Initializes the container object.

        :param container_id: The machine-readable container name.
        """
        super().__init__()

        self.containers_config = containers_config or ContainersConfig()
        service = service or ContainerControlClient.ContainerControlClient()

        container_type = self.containers_config.get_container_type(
            container_id)

        if container_type == "lxc":
            from libertine.LxcContainer import LibertineLXC
            self.container = LibertineLXC(container_id, self.containers_config,
                                          service)
        elif container_type == "lxd":
            from libertine.LxdContainer import LibertineLXD
            self.container = LibertineLXD(container_id, self.containers_config,
                                          service)
        elif container_type == "chroot":
            from libertine.ChrootContainer import LibertineChroot
            self.container = LibertineChroot(container_id,
                                             self.containers_config, service)
        elif container_type == "mock":
            self.container = LibertineMock(container_id,
                                           self.containers_config, service)
        else:
            raise RuntimeError(
                utils._("Unsupported container type '{container_type}'").
                format(container_type))
Ejemplo n.º 5
0
    def _build_proot_command(self):
        proot_cmd = shutil.which('proot')
        if not proot_cmd:
            raise RuntimeError(utils._('executable proot not found'))

        proot_cmd += " -R " + self.root_path

        # Bind-mount the host's locale(s)
        proot_cmd += " -b /usr/lib/locale"

        # Bind-mount extrausers on the phone
        if os.path.exists("/var/lib/extrausers"):
            proot_cmd += " -b /var/lib/extrausers"

        home_path = os.environ['HOME']

        # Bind-mount common XDG direcotries
        bind_mounts = (" -b %s:%s" % (utils.get_libertine_container_home_dir(
            self.container_id), home_path))

        mounts = self._sanitize_bind_mounts(utils.get_common_xdg_user_directories() + \
                                            ContainersConfig().get_container_bind_mounts(self.container_id))
        for user_dir in utils.generate_binding_directories(mounts, home_path):
            if os.path.isabs(user_dir[1]):
                path = user_dir[1]
            else:
                path = os.path.join(home_path, user_dir[1])

            bind_mounts += " -b \"%s:%s\"" % (user_dir[0], path)

        proot_cmd += bind_mounts

        user_dconf_path = os.path.join(home_path, '.config', 'dconf')
        if os.path.exists(user_dconf_path):
            proot_cmd += " -b %s" % user_dconf_path

        return proot_cmd
Ejemplo n.º 6
0
    def test_package_management(self):
        try:
            # since we won't actually install/remove packages, we'll
            # verify that our db has been updated correctly
            os.environ['XDG_DATA_HOME'] = TestLibertineService._tempdir.name
            config = ContainersConfig()

            self._send(lambda: self._libertined.create(
                'jarjar', 'JarJar Binks', 'xenial', 'mock'))
            self.assertEqual(
                [],
                ast.literal_eval(
                    self._send(
                        lambda: self._libertined.list_app_ids('jarjar'))))

            self._send(lambda: self._libertined.install('jarjar', 'the-force'))
            config.refresh_database()
            self.assertEqual(
                'installed',
                config.get_package_install_status('jarjar', 'the-force'))

            self._send(
                lambda: self._libertined.install('jarjar', 'gungan-smash'))
            config.refresh_database()
            self.assertEqual(
                'installed',
                config.get_package_install_status('jarjar', 'gungan-smash'))

            self._send(lambda: self._libertined.remove('jarjar', 'the-force'))
            config.refresh_database()
            self.assertIsNone(
                config.get_package_install_status('jarjar', 'the-force'))
        except AssertionError as e:
            raise
        except Exception as e:
            self.fail('Exception thrown in test: %s' % str(e))
Ejemplo n.º 7
0
 def _add_running_app(self):
     """Add a running app entry to ContainersConfig.json."""
     if self._config.container_id:
         ContainersConfig().add_running_app(self._config.container_id,
                                            self._config.exec_line[0],
                                            self._app.pid)