Merge ~lamoura/ubuntu/+source/ubuntu-advantage-tools:upload-29.2-mantic into ubuntu/+source/ubuntu-advantage-tools:ubuntu/devel

Proposed by Lucas Albuquerque Medeiros de Moura
Status: Merged
Merged at revision: 1a4649696bcb308d722454964caaeb8599fcde45
Proposed branch: ~lamoura/ubuntu/+source/ubuntu-advantage-tools:upload-29.2-mantic
Merge into: ubuntu/+source/ubuntu-advantage-tools:ubuntu/devel
Diff against target: 390 lines (+211/-18)
13 files modified
debian/changelog (+9/-0)
debian/ubuntu-advantage-tools.postinst (+3/-3)
features/proxy_config.feature (+15/-2)
preferences.d/ubuntu-pro-esm-apps (+7/-4)
preferences.d/ubuntu-pro-esm-infra (+7/-5)
sru/release-29/test-esm-pinning.sh (+6/-0)
sru/release-29/test-key-rename-failure.sh (+118/-0)
uaclient/cli.py (+14/-0)
uaclient/exceptions.py (+7/-0)
uaclient/http/__init__.py (+13/-2)
uaclient/http/tests/test_http.py (+8/-1)
uaclient/messages.py (+3/-0)
uaclient/version.py (+1/-1)
Reviewer Review Type Date Requested Status
Sergio Durigan Junior (community) Approve
Ubuntu Sponsors Pending
Canonical Server Reporter Pending
Review via email: mp+449741@code.launchpad.net

Description of the change

New release addressing the bugs identified on the SRU review of 29.1

To post a comment you must log in.
Revision history for this message
Lucas Albuquerque Medeiros de Moura (lamoura) wrote :
Download full text (13.5 KiB)

Xenial:
 - Source ubuntu-advantage-tools/29.2~16.04~rc1: Published
    + amd64: https://autopkgtest.ubuntu.com/request.cgi?release=xenial&package=ubuntu-advantage-tools&arch=amd64&trigger=ubuntu-advantage-tools%2F29.2~16.04~rc1&ppa=ua-client%2Fstaging♻️
    + arm64: https://autopkgtest.ubuntu.com/request.cgi?release=xenial&package=ubuntu-advantage-tools&arch=arm64&trigger=ubuntu-advantage-tools%2F29.2~16.04~rc1&ppa=ua-client%2Fstaging♻️
    + armhf: https://autopkgtest.ubuntu.com/request.cgi?release=xenial&package=ubuntu-advantage-tools&arch=armhf&trigger=ubuntu-advantage-tools%2F29.2~16.04~rc1&ppa=ua-client%2Fstaging♻️
    + ppcel64: https://autopkgtest.ubuntu.com/request.cgi?release=xenial&package=ubuntu-advantage-tools&arch=ppcel64&trigger=ubuntu-advantage-tools%2F29.2~16.04~rc1&ppa=ua-client%2Fstaging♻️
    + riscv64: https://autopkgtest.ubuntu.com/request.cgi?release=xenial&package=ubuntu-advantage-tools&arch=riscv64&trigger=ubuntu-advantage-tools%2F29.2~16.04~rc1&ppa=ua-client%2Fstaging♻️
    + s390x: https://autopkgtest.ubuntu.com/request.cgi?release=xenial&package=ubuntu-advantage-tools&arch=s390x&trigger=ubuntu-advantage-tools%2F29.2~16.04~rc1&ppa=ua-client%2Fstaging♻️
    + amd64: https://autopkgtest.ubuntu.com/request.cgi?release=xenial&package=ubuntu-advantage-tools&arch=amd64&trigger=ubuntu-advantage-tools%2F29.2~16.04~rc1&ppa=ua-client%2Fstaging💍
    + arm64: https://autopkgtest.ubuntu.com/request.cgi?release=xenial&package=ubuntu-advantage-tools&arch=arm64&trigger=ubuntu-advantage-tools%2F29.2~16.04~rc1&ppa=ua-client%2Fstaging💍
    + armhf: https://autopkgtest.ubuntu.com/request.cgi?release=xenial&package=ubuntu-advantage-tools&arch=armhf&trigger=ubuntu-advantage-tools%2F29.2~16.04~rc1&ppa=ua-client%2Fstaging💍
    + ppcel64: https://autopkgtest.ubuntu.com/request.cgi?release=xenial&package=ubuntu-advantage-tools&arch=ppcel64&trigger=ubuntu-advantage-tools%2F29.2~16.04~rc1&ppa=ua-client%2Fstaging💍
    + riscv64: https://autopkgtest.ubuntu.com/request.cgi?release=xenial&package=ubuntu-advantage-tools&arch=riscv64&trigger=ubuntu-advantage-tools%2F29.2~16.04~rc1&ppa=ua-client%2Fstaging💍
    + s390x: https://autopkgtest.ubuntu.com/request.cgi?release=xenial&package=ubuntu-advantage-tools&arch=s390x&trigger=ubuntu-advantage-tools%2F29.2~16.04~rc1&ppa=ua-client%2Fstaging💍

Bionic:
  - Source ubuntu-advantage-tools/29.2~18.04~rc1: Published
    + amd64: https://autopkgtest.ubuntu.com/request.cgi?release=bionic&package=ubuntu-advantage-tools&arch=amd64&trigger=ubuntu-advantage-tools%2F29.2~18.04~rc1&ppa=ua-client%2Fstaging♻️
    + arm64: https://autopkgtest.ubuntu.com/request.cgi?release=bionic&package=ubuntu-advantage-tools&arch=arm64&trigger=ubuntu-advantage-tools%2F29.2~18.04~rc1&ppa=ua-client%2Fstaging♻️
    + armhf: https://autopkgtest.ubuntu.com/request.cgi?release=bionic&package=ubuntu-advantage-tools&arch=armhf&trigger=ubuntu-advantage-tools%2F29.2~18.04~rc1&ppa=ua-client%2Fstaging♻️
    + ppcel64: https://autopkgtest.ubuntu.com/request.cgi?release=bionic&package=ubuntu-advantage-tools&arch=ppcel64&trigger=ubuntu-advantage-tools%2F29.2~18.04~rc1&ppa=ua-client%2Fstaging♻️
    + riscv64: https://autopkgtest.ubuntu.com/r...

Revision history for this message
Sergio Durigan Junior (sergiodj) wrote :

Thanks, Lucas.

There's a small nit on sru/release-29/test-key-rename-failure.sh that needs fixing, but other than that the changes LGTM. I can sponsor the package as soon as you fix the issue.

review: Needs Fixing
Revision history for this message
Sergio Durigan Junior (sergiodj) wrote :

So I talked to Lucas in private, and while pedantically speaking the comparison operator '==' shouldn't be used when comparing strings with '[', bash still supports it (although it is not the standard) and this won't affect the release per se.

Therefore, in order to avoid spending even more time changing the code, I will go ahead and upload the package as is. Lucas also told me that they plan to tackle this specific issue in the next releases.

Uploaded:

$ dput ubuntu-advantage-tools_29.2_source.changes
Trying to upload package to ubuntu
Checking signature on .changes
gpg: /home/sergio/work/ubuntu-advantage-tools/ubuntu-advantage-tools_29.2_source.changes: Valid signature from 106DA1C8C3CBBF14
Checking signature on .dsc
gpg: /home/sergio/work/ubuntu-advantage-tools/ubuntu-advantage-tools_29.2.dsc: Valid signature from 106DA1C8C3CBBF14
Uploading to ubuntu (via ftp to upload.ubuntu.com):
  Uploading ubuntu-advantage-tools_29.2.dsc: done.
  Uploading ubuntu-advantage-tools_29.2.tar.xz: done.
  Uploading ubuntu-advantage-tools_29.2_source.buildinfo: done.
  Uploading ubuntu-advantage-tools_29.2_source.changes: done.
Successfully uploaded packages.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/debian/changelog b/debian/changelog
2index 6d7a651..1378858 100644
3--- a/debian/changelog
4+++ b/debian/changelog
5@@ -1,3 +1,12 @@
6+ubuntu-advantage-tools (29.2) mantic; urgency=medium
7+
8+ * d/ubuntu-advantage-tools.postinst:
9+ - replace deb-systemd-invoke back to systemctl
10+ * proxy: alert user if ca-certificates is not installed when using
11+ a TLS-in-TLS proxy
12+
13+ -- Lucas Moura <lucas.moura@canonical.com> Thu, 17 Aug 2023 19:45:48 -0300
14+
15 ubuntu-advantage-tools (29.1) mantic; urgency=medium
16
17 * anbox: allow enabling service on container using the --access-only flag
18diff --git a/debian/ubuntu-advantage-tools.postinst b/debian/ubuntu-advantage-tools.postinst
19index b332333..b11748f 100644
20--- a/debian/ubuntu-advantage-tools.postinst
21+++ b/debian/ubuntu-advantage-tools.postinst
22@@ -256,11 +256,11 @@ remove_old_systemd_units() {
23 # The failed state is ephemeral and only needs to be cleared if
24 # it is there so that the system doesn't say it is degraded.
25 # If the old timer was not running, then this is a noop.
26- deb-systemd-invoke --system daemon-reload > /dev/null || true
27- deb-systemd-invoke reset-failed ua-license-check.timer > /dev/null 2>&1 || true
28+ systemctl --system daemon-reload > /dev/null || true
29+ systemctl reset-failed ua-license-check.timer > /dev/null 2>&1 || true
30 # In rare race-condition scenarios, the service can also get into
31 # the same failed state.
32- deb-systemd-invoke reset-failed ua-license-check.service > /dev/null 2>&1 || true
33+ systemctl reset-failed ua-license-check.service > /dev/null 2>&1 || true
34 fi
35 deb-systemd-helper purge ua-license-check.path > /dev/null || true
36 deb-systemd-helper unmask ua-license-check.path > /dev/null || true
37diff --git a/features/proxy_config.feature b/features/proxy_config.feature
38index 0b6359d..755f5dc 100644
39--- a/features/proxy_config.feature
40+++ b/features/proxy_config.feature
41@@ -1257,7 +1257,19 @@ Feature: Proxy configuration
42 Proxy authentication failed
43 """
44
45- When I run `pro config set https_proxy=https://someuser:somepassword@$behave_var{machine-name proxy}.lxd:3129` with sudo
46+ When I run `apt remove ca-certificates -y` with sudo
47+ And I run `rm -f /etc/ssl/certs/ca-certificates.crt` with sudo
48+ And I verify that running `pro config set https_proxy=https://someuser:somepassword@$behave_var{machine-name proxy}.lxd:3129` `with sudo` exits `1`
49+ Then stderr matches regexp:
50+ """
51+ Failed to access URL: https://.*
52+ Cannot verify certificate of server
53+ Please install "ca-certificates" and try again.
54+ """
55+
56+ When I run `apt install ca-certificates -y` with sudo
57+ And I run `update-ca-certificates` with sudo
58+ And I run `pro config set https_proxy=https://someuser:somepassword@$behave_var{machine-name proxy}.lxd:3129` with sudo
59 And I run `pro config set ua_apt_https_proxy=https://someuser:somepassword@$behave_var{machine-name proxy}.lxd:3129` with sudo
60
61 When I run `truncate -s 0 /var/log/squid/access.log` `with sudo` on the `proxy` machine
62@@ -1285,7 +1297,8 @@ Feature: Proxy configuration
63 """
64
65 # Pre-install canonical-livepatch to tell it to trust the cert
66- When I run `snap install canonical-livepatch` with sudo
67+ When I run `apt install snapd -y` with sudo
68+ And I run `snap install canonical-livepatch` with sudo
69 And I run shell command `canonical-livepatch config ca-certs=@stdin < /usr/local/share/ca-certificates/ca.crt` with sudo
70
71 When I run `truncate -s 0 /var/log/squid/access.log` `with sudo` on the `proxy` machine
72diff --git a/preferences.d/ubuntu-pro-esm-apps b/preferences.d/ubuntu-pro-esm-apps
73index aa60598..5ded6f8 100644
74--- a/preferences.d/ubuntu-pro-esm-apps
75+++ b/preferences.d/ubuntu-pro-esm-apps
76@@ -1,7 +1,10 @@
77-# This file was created by ubuntu-advantage-tools
78-
79-# Pin esm-apps packages to a slightly higher value than the archive,
80-# so those are preferred when the service is enabled
81+# This file is used by Ubuntu Pro and supplied by the ubuntu-advantage-tools
82+# package. It has no effect if Ubuntu Pro services are not in use since no
83+# other apt repositories are expected to match o=UbuntuESMApps.
84+#
85+# Pin esm-apps packages to a slightly higher value than the default,
86+# so those are preferred over a non-ESM package from the archive when the
87+# service is enabled.
88
89 Package: *
90 Pin: release o=UbuntuESMApps
91diff --git a/preferences.d/ubuntu-pro-esm-infra b/preferences.d/ubuntu-pro-esm-infra
92index af9bf5a..e956e0a 100644
93--- a/preferences.d/ubuntu-pro-esm-infra
94+++ b/preferences.d/ubuntu-pro-esm-infra
95@@ -1,8 +1,10 @@
96-# This file was created by ubuntu-advantage-tools
97-
98-# Pin esm-infra packages to a slightly higher value than the archive,
99-# so those are preferred when the service is enabled
100-
101+# This file is used by Ubuntu Pro and supplied by the ubuntu-advantage-tools
102+# package. It has no effect if Ubuntu Pro services are not in use since no
103+# other apt repositories are expected to match o=UbuntuESM.
104+#
105+# Pin esm-infra packages to a slightly higher value than the default,
106+# so those are preferred over a non-ESM package from the archive when the
107+# service is enabled.
108 Package: *
109 Pin: release o=UbuntuESM
110 Pin-Priority: 510
111diff --git a/sru/release-29/test-esm-pinning.sh b/sru/release-29/test-esm-pinning.sh
112index b9db8c6..b64d8e3 100755
113--- a/sru/release-29/test-esm-pinning.sh
114+++ b/sru/release-29/test-esm-pinning.sh
115@@ -104,6 +104,12 @@ check_esm_pin "infra" 510
116 check_esm_pin "apps" 510
117 echo -e "###########################################\n"
118
119+# Check pin for archive packages
120+echo -e "\n* Check pins for package in archive"
121+echo "###########################################"
122+lxc exec $name -- apt-cache policy toilet python3-ipdb
123+echo -e "###########################################\n"
124+
125 # Disable esm-apps and esm-infra
126 # ----------------------------------------------------------------
127 disable_esm_services
128diff --git a/sru/release-29/test-key-rename-failure.sh b/sru/release-29/test-key-rename-failure.sh
129new file mode 100644
130index 0000000..6ad58e8
131--- /dev/null
132+++ b/sru/release-29/test-key-rename-failure.sh
133@@ -0,0 +1,118 @@
134+#!/bin/bash
135+set -e
136+
137+series=$1
138+token=$2
139+install_from=$3 # either path to a .deb, or 'staging', or 'proposed'
140+
141+name=$series-dev
142+
143+function cleanup {
144+ lxc delete $name --force
145+}
146+
147+function on_err {
148+ echo -e "Test Failed"
149+ cleanup
150+ exit 1
151+}
152+trap on_err ERR
153+
154+lxc launch ubuntu-daily:$series $name
155+sleep 5
156+
157+# Install latest ubuntu-advantage-tools
158+lxc exec $name -- apt-get update > /dev/null
159+lxc exec $name -- apt-get install -y ubuntu-advantage-tools > /dev/null
160+echo -e "\n* Latest u-a-t is installed"
161+echo "###########################################"
162+lxc exec $name -- apt-cache policy ubuntu-advantage-tools
163+echo -e "###########################################\n"
164+
165+# Attach so we can have some gpg keys in place
166+lxc exec $name -- pro attach $token
167+echo -e "\n* Pro is attached"
168+echo "###########################################"
169+lxc exec $name -- pro status --wait
170+echo -e "###########################################\n"
171+
172+# Upgrade u-a-t to new version
173+# ----------------------------------------------------------------
174+if [ $install_from == 'staging' ]; then
175+ lxc exec $name -- sudo add-apt-repository ppa:ua-client/staging -y > /dev/null
176+ lxc exec $name -- apt-get update > /dev/null
177+ lxc exec $name -- apt-get install ubuntu-advantage-tools -y > /dev/null
178+elif [ $install_from == 'proposed' ]; then
179+ lxc exec $name -- sh -c "echo \"deb http://archive.ubuntu.com/ubuntu $series-proposed main\" | tee /etc/apt/sources.list.d/proposed.list"
180+ lxc exec $name -- apt-get update > /dev/null
181+ lxc exec $name -- apt-get install ubuntu-advantage-tools -y > /dev/null
182+else
183+ lxc file push $install_from $name/new-ua.deb
184+ lxc exec $name -- dpkg -i /new-ua.deb > /dev/null
185+fi
186+# ----------------------------------------------------------------
187+
188+echo -e "\n* Renaiming keys back to their original name"
189+echo "###########################################"
190+lxc exec $name -- mv /etc/apt/trusted.gpg.d/ubuntu-pro-esm-infra.gpg /etc/apt/trusted.gpg.d/ubuntu-advantage-esm-infra-trusty.gpg
191+lxc exec $name -- mv /etc/apt/trusted.gpg.d/ubuntu-pro-esm-apps.gpg /etc/apt/trusted.gpg.d/ubuntu-advantage-esm-apps.gpg
192+echo -e "###########################################\n"
193+
194+echo -e "\n* List gpg keys"
195+echo "###########################################"
196+lxc exec $name -- ls /etc/apt/trusted.gpg.d/
197+echo -e "###########################################\n"
198+
199+# Modify the postinst script to fail after renaming just one key
200+lxc exec $name -- sed -i "s/^\s\+SERVICES=.*/error/g" /var/lib/dpkg/info/ubuntu-advantage-tools.postinst
201+echo -e "\n* Running postinst script again"
202+echo "###########################################"
203+lxc exec $name -- dpkg-reconfigure ubuntu-advantage-tools || true
204+echo -e "###########################################\n"
205+
206+# Check that only one key got renamed
207+echo -e "\n* List gpg keys"
208+echo "###########################################"
209+lxc exec $name -- ls /etc/apt/trusted.gpg.d/
210+echo -e "###########################################\n"
211+
212+# Make sure the services are still enabled
213+echo -e "\n* Check that services are still enabled"
214+echo "###########################################"
215+lxc exec $name -- pro status --wait
216+echo -e "###########################################\n"
217+
218+# Check that apt update is working as expected
219+echo -e "\n* Check that APT update is working as expected"
220+echo "###########################################"
221+lxc exec $name -- apt update
222+echo -e "###########################################\n"
223+
224+# Disable service which key was not renamed
225+echo -e "\n* Disable esm-apps service which gpg key was not renamed"
226+echo "###########################################"
227+lxc exec $name -- pro disable esm-apps
228+lxc exec $name -- pro status
229+echo -e "###########################################\n"
230+
231+# Check that the GPG key is still there
232+echo -e "\n* List gpg keys"
233+echo "###########################################"
234+lxc exec $name -- ls /etc/apt/trusted.gpg.d/
235+echo -e "###########################################\n"
236+
237+# Enable esm-apps
238+echo -e "\n* Enable esm-apps and check new gpg key is created"
239+echo "###########################################"
240+lxc exec $name -- pro enable esm-apps
241+lxc exec $name -- pro status
242+lxc exec $name -- ls /etc/apt/trusted.gpg.d/
243+echo -e "###########################################\n"
244+
245+# Check that the new GPG key is there
246+echo -e "\n* check ubuntu-pro-esm-apps.gpg key now exists"
247+echo "###########################################"
248+lxc exec $name -- ls /etc/apt/trusted.gpg.d/
249+echo -e "###########################################\n"
250+
251+cleanup
252diff --git a/uaclient/cli.py b/uaclient/cli.py
253index 120158b..9807a59 100644
254--- a/uaclient/cli.py
255+++ b/uaclient/cli.py
256@@ -2000,6 +2000,20 @@ def main_error_handler(func):
257 _warn_about_new_version()
258
259 sys.exit(1)
260+ except exceptions.PycurlCACertificatesError as exc:
261+ tmpl = messages.SSL_VERIFICATION_ERROR_CA_CERTIFICATES
262+ if apt.is_installed("ca-certificates"):
263+ tmpl = messages.SSL_VERIFICATION_ERROR_OPENSSL_CONFIG
264+ msg = tmpl.format(url=exc.url)
265+ event.error(error_msg=msg.msg, error_code=msg.name)
266+ event.info(info_msg=msg.msg, file_type=sys.stderr)
267+
268+ lock.clear_lock_file_if_present()
269+ event.process_events()
270+
271+ _warn_about_new_version()
272+
273+ sys.exit(1)
274 except exceptions.UserFacingError as exc:
275 with util.disable_log_to_console():
276 LOG.error(exc.msg)
277diff --git a/uaclient/exceptions.py b/uaclient/exceptions.py
278index 447b4eb..156abb2 100644
279--- a/uaclient/exceptions.py
280+++ b/uaclient/exceptions.py
281@@ -522,6 +522,13 @@ class PycurlError(UserFacingError):
282 super().__init__(msg=msg.msg, msg_code=msg.name)
283
284
285+class PycurlCACertificatesError(UserFacingError):
286+ def __init__(self, url: str) -> None:
287+ msg = messages.PYCURL_CA_CERTIFICATES_ERROR
288+ self.url = url
289+ super().__init__(msg=msg.msg, msg_code=msg.name)
290+
291+
292 class ProxyAuthenticationFailed(UserFacingError):
293 def __init__(self) -> None:
294 msg = messages.PROXY_AUTH_FAIL
295diff --git a/uaclient/http/__init__.py b/uaclient/http/__init__.py
296index 36b616e..6540f85 100644
297--- a/uaclient/http/__init__.py
298+++ b/uaclient/http/__init__.py
299@@ -72,6 +72,8 @@ def validate_proxy(
300 raise
301 except exceptions.ProxyAuthenticationFailed:
302 raise
303+ except exceptions.PycurlCACertificatesError:
304+ raise
305 except Exception as e:
306 with util.disable_log_to_console():
307 msg = getattr(e, "reason", str(e))
308@@ -208,7 +210,9 @@ def should_use_pycurl(https_proxy, target_url):
309 return ret
310
311
312-def _handle_pycurl_error(error, authentication_error_code):
313+def _handle_pycurl_error(
314+ error, url, authentication_error_code, ca_certificates_error_code
315+):
316 code = None
317 msg = None
318 if len(error.args) > 0:
319@@ -221,6 +225,8 @@ def _handle_pycurl_error(error, authentication_error_code):
320 and "HTTP code 407 from proxy" in msg
321 ):
322 raise exceptions.ProxyAuthenticationFailed()
323+ elif code == ca_certificates_error_code:
324+ raise exceptions.PycurlCACertificatesError(url)
325 else:
326 raise exceptions.PycurlError(error)
327
328@@ -302,7 +308,12 @@ def _readurl_pycurl_https_in_https(
329 try:
330 c.perform()
331 except pycurl.error as e:
332- _handle_pycurl_error(e, authentication_error_code=pycurl.E_RECV_ERROR)
333+ _handle_pycurl_error(
334+ e,
335+ url=req.get_full_url(),
336+ authentication_error_code=pycurl.E_RECV_ERROR,
337+ ca_certificates_error_code=pycurl.E_SSL_CACERT_BADFILE,
338+ )
339
340 code = int(c.getinfo(pycurl.RESPONSE_CODE))
341 body = body_output.getvalue().decode("utf-8")
342diff --git a/uaclient/http/tests/test_http.py b/uaclient/http/tests/test_http.py
343index 9b00c30..1161e76 100644
344--- a/uaclient/http/tests/test_http.py
345+++ b/uaclient/http/tests/test_http.py
346@@ -453,9 +453,16 @@ class TestHandlePycurlError:
347 ("PYCURL_ERROR", "HTTP code 407 from proxy: proxy"),
348 exceptions.ProxyAuthenticationFailed,
349 ),
350+ (("PYCURL_ERROR", "test"), exceptions.PycurlError),
351+ (
352+ ("CA_CERTIFICATES_ERROR", "test"),
353+ exceptions.PycurlCACertificatesError,
354+ ),
355 ),
356 )
357 def test_handle_pycurl_error(self, error_args, expected_exception):
358 with pytest.raises(expected_exception):
359 m_error = mock.MagicMock(args=error_args)
360- http._handle_pycurl_error(m_error, "PYCURL_ERROR")
361+ http._handle_pycurl_error(
362+ m_error, "url", "PYCURL_ERROR", "CA_CERTIFICATES_ERROR"
363+ )
364diff --git a/uaclient/messages.py b/uaclient/messages.py
365index 4fd06d8..a5cee3c 100644
366--- a/uaclient/messages.py
367+++ b/uaclient/messages.py
368@@ -1411,6 +1411,9 @@ PYCURL_REQUIRED = NamedMessage(
369 ),
370 )
371 PYCURL_ERROR = FormattedNamedMessage("pycurl-error", "PycURL Error: {e}")
372+PYCURL_CA_CERTIFICATES_ERROR = NamedMessage(
373+ "pycurl-ca-certificates-error", "Problem reading SSL CA certificates"
374+)
375
376 PROXY_AUTH_FAIL = NamedMessage(
377 "proxy-auth-fail", "Proxy authentication failed"
378diff --git a/uaclient/version.py b/uaclient/version.py
379index b8e1f94..5191f37 100644
380--- a/uaclient/version.py
381+++ b/uaclient/version.py
382@@ -15,7 +15,7 @@ from uaclient.defaults import CANDIDATE_CACHE_PATH, UAC_RUN_PATH
383 from uaclient.exceptions import ProcessExecutionError
384 from uaclient.system import subp
385
386-__VERSION__ = "29.1"
387+__VERSION__ = "29.2"
388 PACKAGED_VERSION = "@@PACKAGED_VERSION@@"
389
390 CANDIDATE_REGEX = r"Candidate: (?P<candidate>.*?)\n"

Subscribers

People subscribed via source and target branches

to status/vote changes: