** Description changed: [ Impact ] * There is a bug in cmd2 v0.8.5 where an exception is thrown when GTK3 libraries are not installed. This causes Python applications using cmd2 to crash unexpectedly * This patch backports a fix from upstream that handles that expection gracefully, allowing applications to function properly. * The workaround to this was to install GTK3, which is not ideal as the Python applications are command line tools, not graphical [ Test Plan ] - * Deploy focal + 1) Deploy focal + 2) Enable wallaby, xena or yoga proposed - * Install an application that has cmd2 as a dependency - e.g. python3-openstackclient + sudo add-apt-repository cloud-archive:yoga-proposed - * Run command that uses cmd2: `openstack server list` - - * In the failing case, we would expect to see an uncaught ValueError exception + 3) sudo apt update + 4) sudo apt install python3-openstackclient + 5) confirm packages installed - * In the successful case, the command runs as anticipated + dpkg -l | egrep "(cmd2|pyperclip|cliff)" + + python3-cliff 3.10.0... + python3-cmd2 0.8.5-2.1... + python3-pyperclip 1.7.0-1 + + 6) Simulate that a display is present + + export DISPLAY=:1 + + 7) source a credentials file + + source novarc + + 8) Try to list servers + + openstack server list + + Traceback (most recent call last): + File "/usr/bin/openstack", line 6, in <module> + from openstackclient.shell import main + File "/usr/lib/python3/dist-packages/openstackclient/shell.py", line 23, in <module> + from osc_lib import shell + File "/usr/lib/python3/dist-packages/osc_lib/shell.py", line 24, in <module> + from cliff import app + File "/usr/lib/python3/dist-packages/cliff/app.py", line 23, in <module> + import cmd2 + File "/usr/lib/python3/dist-packages/cmd2.py", line 585, in <module> + _ = pyperclip.paste() + File "/usr/lib/python3/dist-packages/pyperclip/__init__.py", line 667, in lazy_load_stub_paste + copy, paste = determine_clipboard() + File "/usr/lib/python3/dist-packages/pyperclip/__init__.py", line 558, in determine_clipboard + return init_gi_clipboard() + File "/usr/lib/python3/dist-packages/pyperclip/__init__.py", line 167, in init_gi_clipboard + gi.require_version('Gtk', '3.0') + File "/usr/lib/python3/dist-packages/gi/__init__.py", line 129, in require_version + raise ValueError('Namespace %s not available' % namespace) + ValueError: Namespace Gtk not available + + 9) Enable focal proposed pocket + + + cat <<EOF >/etc/apt/sources.list.d/ubuntu-$(lsb_release -cs)-proposed.list + # Enable Ubuntu proposed archive + deb http://archive.ubuntu.com/ubuntu/ $(lsb_release -cs)-proposed restricted main multiverse universe + EOF + + sudo apt update + + 10) update python3-cmd2 + + sudo apt install python3-cmd2 + + 11) retest, should not produce any error + + openstack server list + [ Where problems could occur ] - * This changes the error handling for a library that is used by many - Python applications. Some of these applications could rely on the - existing behavior (a ValueError exception being thrown) to detect - certain configurations and change their behavior accordingly. - - * This would result in those applications failing under certain use - cases. For example, the configuration in question is a headless - Linux system without GTK libraries installed. + * The code change being backported is already present in jammy+, + therefore no issues or regressions are expected. However, given that + cmd2 is a library used by many different applications, and some may be + coded to handle the ValueError exception on version 0.8.5, or other code + modifications that exist in later versions but not in 0.8.5, this change + could potentially break the interaction with other applications that + were expecting a ValueErrro to be thrown. However, such scenario is + considered to be unlikely. [ Original bug description ] Openstack release: Wallaby OS: Ubuntu 20.04 server edition After installation of python3-openstackclient from apt, while setting up user, roles and project, I executed following command: openstack domain create --description "An Example Domain" example Error: Traceback (most recent call last): File "/usr/bin/openstack", line 6, in <module> from openstackclient.shell import main File "/usr/lib/python3/dist-packages/openstackclient/shell.py", line 23, in <module> from osc_lib import shell File "/usr/lib/python3/dist-packages/osc_lib/shell.py", line 24, in <module> from cliff import app File "/usr/lib/python3/dist-packages/cliff/app.py", line 22, in <module> import cmd2 File "/usr/lib/python3/dist-packages/cmd2.py", line 585, in <module> _ = pyperclip.paste() File "/usr/lib/python3/dist-packages/pyperclip/__init__.py", line 667, in lazy_load_stub_paste copy, paste = determine_clipboard() File "/usr/lib/python3/dist-packages/pyperclip/__init__.py", line 558, in determine_clipboard return init_gi_clipboard() File "/usr/lib/python3/dist-packages/pyperclip/__init__.py", line 167, in init_gi_clipboard gi.require_version('Gtk', '3.0') File "/usr/lib/python3/dist-packages/gi/__init__.py", line 129, in require_version raise ValueError('Namespace %s not available' % namespace) Had to install GTK3 to make openstack commands work but it is taking huge time to get a response to the commands. The wait time after firing any openstack cli command is around 30 seconds. Anybody faced the issue? What is the fix for it if it exists?
-- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1945661 Title: openstack commands fail with GTK3 error To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/cmd2/+bug/1945661/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs