Merge lp:~larryprice/libertine/fix-debconf into lp:libertine

Proposed by Larry Price
Status: Merged
Approved by: Christopher Townsend
Approved revision: 304
Merged at revision: 307
Proposed branch: lp:~larryprice/libertine/fix-debconf
Merge into: lp:libertine
Diff against target: 196 lines (+32/-22)
6 files modified
libertine/ContainerManager.cpp (+2/-2)
python/libertine/ChrootContainer.py (+2/-2)
python/libertine/Libertine.py (+8/-8)
tools/completions/libertine-container-manager (+2/-2)
tools/libertine-container-manager (+8/-8)
tools/libertine-container-manager.1 (+10/-0)
To merge this branch: bzr merge lp:~larryprice/libertine/fix-debconf
Reviewer Review Type Date Requested Status
Libertine CI Bot continuous-integration Approve
Christopher Townsend Approve
Review via email: mp+307350@code.launchpad.net

Commit message

Make debconf interactions work correctly from GUI.

Description of the change

Make debconf interactions work correctly from GUI.

It turns out that the "readline" frontend prevents lxc from receiving any debconf interactions from the GUI. You may be saying to yourself, "but it seemed to work before! what happen!?" Well, it seems that we didn't quite have the "readline" frontend completely installed as we also needed the "libterm-readline-gnu-perl" package in order to actually use readline. We were falling back appropriately to the basic "teletype" prompt. By default, `apt` will use a dialog-based frontend which fails hard from the GUI. Thus, I've updated the CLI to use the "teletype" frontend in place of "readline", and thus updated all the variable/argument names which were "readline"-based to "no_dialog" and "no-dialog".

To post a comment you must log in.
Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:304
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/147/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/375
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/296
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/296
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/296
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/296
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/296
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/296
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/288/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/377
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/359
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/359
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/359
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/358
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/358/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/358
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/358/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/358
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/358/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/358
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/358/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/358
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/358/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/358
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/358/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/147/rebuild

review: Approve (continuous-integration)
Revision history for this message
Christopher Townsend (townsend) wrote :

Works well. Thanks!

review: Approve
Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

FAILED: Autolanding.
More details in the following jenkins job:
https://jenkins.canonical.com/libertine/job/lp-libertine-autoland/58/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/377
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/298
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/298
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/298
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/298
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/298
    FAILURE: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/298/console
    None: https://jenkins.canonical.com/libertine/job/lp-generic-land-mp/84/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/379
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/361
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/361
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/361
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/360
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/360/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/360
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/360/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/360
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/360/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/360
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/360/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/360
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/360/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/360
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/360/artifact/output/*zip*/output.zip

review: Needs Fixing (continuous-integration)
Revision history for this message
Christopher Townsend (townsend) wrote :

Hmm, strange CI error. Let's try this again...

Revision history for this message
Libertine CI Bot (libertine-ci-bot) :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'libertine/ContainerManager.cpp'
2--- libertine/ContainerManager.cpp 2016-07-12 15:52:21 +0000
3+++ libertine/ContainerManager.cpp 2016-09-30 19:02:17 +0000
4@@ -159,7 +159,7 @@
5 emit operationFinished(container_id, package_name);
6 });
7
8- process_.start(libertine_container_manager_tool, QStringList{"install-package", "-i", container_id, "-p", package_name, "-r"});
9+ process_.start(libertine_container_manager_tool, QStringList{"install-package", "-i", container_id, "-p", package_name, "--no-dialog"});
10 }
11
12
13@@ -183,7 +183,7 @@
14 emit operationFinished(container_id, package_name);
15 });
16
17- process_.start(libertine_container_manager_tool, QStringList{"remove-package", "-i", container_id, "-p", package_name, "-r"});
18+ process_.start(libertine_container_manager_tool, QStringList{"remove-package", "-i", container_id, "-p", package_name, "--no-dialog"});
19 }
20
21
22
23=== modified file 'python/libertine/ChrootContainer.py'
24--- python/libertine/ChrootContainer.py 2016-09-20 13:58:52 +0000
25+++ python/libertine/ChrootContainer.py 2016-09-30 19:02:17 +0000
26@@ -148,8 +148,8 @@
27 self._run_ldconfig(verbosity)
28 return retcode
29
30- def install_package(self, package_name, verbosity=1, readline=False, update_cache=True):
31- returncode = super().install_package(package_name, verbosity, readline, update_cache)
32+ def install_package(self, package_name, verbosity=1, no_dialog=False, update_cache=True):
33+ returncode = super().install_package(package_name, verbosity, no_dialog, update_cache)
34
35 if returncode:
36 self._run_ldconfig(verbosity)
37
38=== modified file 'python/libertine/Libertine.py'
39--- python/libertine/Libertine.py 2016-09-28 15:12:45 +0000
40+++ python/libertine/Libertine.py 2016-09-30 19:02:17 +0000
41@@ -150,7 +150,7 @@
42 self.update_apt_cache(verbosity)
43 return self.run_in_container(apt_command_prefix(verbosity) + '--force-yes dist-upgrade')
44
45- def install_package(self, package_name, verbosity=1, readline=False, update_cache=True):
46+ def install_package(self, package_name, verbosity=1, no_dialog=False, update_cache=True):
47 """
48 Installs a named package in the container.
49
50@@ -175,8 +175,8 @@
51
52 return ret
53 else:
54- if readline:
55- os.environ['DEBIAN_FRONTEND'] = 'readline'
56+ if no_dialog:
57+ os.environ['DEBIAN_FRONTEND'] = 'teletype'
58 return self.run_in_container(apt_command_prefix(verbosity) + " install '" + package_name + "'") == 0
59
60 def configure_multiarch(self, should_enable, verbosity=1):
61@@ -341,17 +341,17 @@
62 except RuntimeError as e:
63 return handle_runtime_error(e)
64
65- def install_package(self, package_name, verbosity=1, readline=False, update_cache=True):
66+ def install_package(self, package_name, verbosity=1, no_dialog=False, update_cache=True):
67 """
68 Installs a package in the container.
69 """
70 try:
71 with ContainerRunning(self.container):
72- return self.container.install_package(package_name, verbosity, readline, update_cache)
73+ return self.container.install_package(package_name, verbosity, no_dialog, update_cache)
74 except RuntimeError as e:
75 return handle_runtime_error(e)
76
77- def remove_package(self, package_name, verbosity=1, readline=False):
78+ def remove_package(self, package_name, verbosity=1, no_dialog=False):
79 """
80 Removes a package from the container.
81
82@@ -360,8 +360,8 @@
83 """
84 try:
85 with ContainerRunning(self.container):
86- if readline:
87- os.environ['DEBIAN_FRONTEND'] = 'readline'
88+ if no_dialog:
89+ os.environ['DEBIAN_FRONTEND'] = 'teletype'
90
91 if self.container.run_in_container(apt_command_prefix(verbosity) + " purge '" + package_name + "'") != 0:
92 return False
93
94=== modified file 'tools/completions/libertine-container-manager'
95--- tools/completions/libertine-container-manager 2016-07-22 15:05:22 +0000
96+++ tools/completions/libertine-container-manager 2016-09-30 19:02:17 +0000
97@@ -24,10 +24,10 @@
98 if [[ ${cur} == -* ]]; then
99 case "${cmd}" in
100 "install-package" )
101- opts="--help --id --package --readline"
102+ opts="--help --id --package --no-dialog"
103 ;;
104 "remove-package" )
105- opts="--help --id --package --readline"
106+ opts="--help --id --package --no-dialog"
107 ;;
108 "create" )
109 opts="--help --id --type --distro --name --force --multiarch --password"
110
111=== modified file 'tools/libertine-container-manager'
112--- tools/libertine-container-manager 2016-09-06 12:36:47 +0000
113+++ tools/libertine-container-manager 2016-09-30 19:02:17 +0000
114@@ -136,7 +136,7 @@
115 container = LibertineContainer(container_id)
116
117 self.containers_config.update_package_install_status(container_id, package, "installing")
118- if not container.install_package(args.package, args.verbosity, args.readline):
119+ if not container.install_package(args.package, args.verbosity, args.no_dialog):
120 self.containers_config.delete_package(container_id, package)
121 sys.exit(1)
122
123@@ -144,12 +144,12 @@
124
125 libertine.utils.refresh_libertine_scope()
126
127- def remove_package_by_name(self, container_id, package_name, verbosity=1, readline=False):
128+ def remove_package_by_name(self, container_id, package_name, verbosity=1, no_dialog=False):
129 fallback_status = self.containers_config.get_package_install_status(container_id, package_name)
130 self.containers_config.update_package_install_status(container_id, package_name, "removing")
131
132 container = LibertineContainer(container_id)
133- if not container.remove_package(package_name, verbosity, readline) and fallback_status == 'installed':
134+ if not container.remove_package(package_name, verbosity, no_dialog) and fallback_status == 'installed':
135 self.containers_config.update_package_install_status(container_id, package_name, fallback_status)
136 return False
137
138@@ -165,7 +165,7 @@
139 print("Package \'%s\' is not installed." % args.package)
140 sys.exit(1)
141
142- if not self.remove_package_by_name(container_id, args.package, args.verbosity, args.readline):
143+ if not self.remove_package_by_name(container_id, args.package, args.verbosity, args.no_dialog):
144 sys.exit(1)
145
146 libertine.utils.refresh_libertine_scope()
147@@ -371,8 +371,8 @@
148 '-i', '--id',
149 help=("Container identifier. Default container is used if omitted."))
150 parser_install.add_argument(
151- '-r', '--readline', action='store_true',
152- help=("Readline mode. Use text-based frontend during debconf interactions."))
153+ '-n', '--no-dialog', action='store_true',
154+ help=("No dialog mode. Use text-based frontend during debconf interactions."))
155 parser_install.set_defaults(func=container_manager.install_package)
156
157 # Handle the remove-package command and its options
158@@ -387,8 +387,8 @@
159 '-i', '--id',
160 help=("Container identifier. Default container is used if omitted."))
161 parser_remove.add_argument(
162- '-r', '--readline', action='store_true',
163- help=("Readline mode. Use text-based frontend during debconf interactions."))
164+ '-n', '--no-dialog', action='store_true',
165+ help=("No dialog mode. Use text-based frontend during debconf interactions."))
166 parser_remove.set_defaults(func=container_manager.remove_package)
167
168 # Handle the search-cache command and its options
169
170=== modified file 'tools/libertine-container-manager.1'
171--- tools/libertine-container-manager.1 2016-09-06 12:36:47 +0000
172+++ tools/libertine-container-manager.1 2016-09-30 19:02:17 +0000
173@@ -146,6 +146,11 @@
174 .RS 14
175 Name of package to install. Required.
176 .RE
177+.IP
178+.BR \-n ", " \-\-no-dialog ""
179+.RS 14
180+No dialog mode. Use text-based frontend during debconf interactions.
181+.RE
182 .TP
183
184 .B libertine-container-manager remove-package [options]
185@@ -165,6 +170,11 @@
186 .RS 14
187 Name of package to remove. Required.
188 .RE
189+.IP
190+.BR \-n ", " \-\-no-dialog ""
191+.RS 14
192+No dialog mode. Use text-based frontend during debconf interactions.
193+.RE
194 .TP
195
196 .B libertine-container-manager search-cache [options]

Subscribers

People subscribed via source and target branches