~brandontschaefer/libertine/close-broken-pipe

« back to all changes in this revision

Viewing changes to python/libertine/LxcContainer.py

  • Committer: Tarmac
  • Author(s): Larry Price
  • Date: 2016-08-10 20:16:40 UTC
  • mfrom: (265.8.10 localized-xdg-dirs)
  • Revision ID: tarmac-20160810201640-x5337siuutbpo5t5
Create bind-mount directories based on information from xdg-user-dir, and only mount on container startup. Fixes: https://bugs.launchpad.net/bugs/1610123.

Approved by Christopher Townsend, Libertine CI Bot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright 2015 Canonical Ltd.
 
1
# Copyright 2015-2016 Canonical Ltd.
2
2
#
3
3
# This program is free software: you can redistribute it and/or modify it
4
4
# under the terms of the GNU General Public License version 3, as published
93
93
        else:
94
94
            return True
95
95
 
96
 
    def start_container(self):
 
96
    def _dynamic_bind_mounts(self):
 
97
        for user_dir in utils.get_common_xdg_user_directories():
 
98
            xdg_user_dir_entry = (
 
99
                "%s %s/%s none bind,create=dir,optional"
 
100
                % (user_dir[0], home_path.strip('/'), user_dir[1])
 
101
            )
 
102
            self.container.append_config_item("lxc.mount.entry", xdg_user_dir_entry)
 
103
 
 
104
    def start_container(self, launchable = False):
97
105
        if not self.container.defined:
98
106
            raise RuntimeError("Container %s is not valid" % self.container_id)
99
107
 
100
108
        if not self.container.running:
101
109
            self._set_lxc_log()
 
110
            self._dynamic_bind_mounts()
102
111
            if not self.container.start():
103
112
                self._dump_lxc_log()
104
113
                raise RuntimeError("Container failed to start")
110
119
            self.stop_container()
111
120
            raise RuntimeError("Not able to connect to the network.")
112
121
 
113
 
        if self.run_in_container("mountpoint -q /tmp/.X11-unix") == 0:
114
 
            self.run_in_container("umount /tmp/.X11-unix")
115
 
        if self.run_in_container("mountpoint -q /usr/lib/locale") == 0:
116
 
            self.run_in_container("umount -l /usr/lib/locale")
 
122
        if not launchable:
 
123
            if self.run_in_container("mountpoint -q /tmp/.X11-unix") == 0:
 
124
                self.run_in_container("umount /tmp/.X11-unix")
 
125
            if self.run_in_container("mountpoint -q /usr/lib/locale") == 0:
 
126
                self.run_in_container("umount -l /usr/lib/locale")
117
127
 
118
128
    def stop_container(self):
119
129
        self.container.stop()
222
232
        # Bind mount the user's home directory
223
233
        self.container.append_config_item("lxc.mount.entry", home_entry)
224
234
 
225
 
        xdg_user_dirs = utils.get_common_xdg_directories()
226
 
 
227
 
        for user_dir in xdg_user_dirs:
228
 
            xdg_user_dir_entry = (
229
 
                "%s/%s %s/%s none bind,create=dir,optional"
230
 
                % (home_path, user_dir, home_path.strip('/'), user_dir)
231
 
            )
232
 
            self.container.append_config_item("lxc.mount.entry", xdg_user_dir_entry)
233
 
 
234
235
        # Bind mount the user's dconf back end
235
236
        user_dconf_path = os.path.join(home_path, '.config', 'dconf')
236
237
        user_dconf_entry = (