canonical / workshops

Workshops
GNU General Public License v3.0
51 stars 11 forks source link

When LXD is not installed #291

Open jpnurmi opened 1 year ago

jpnurmi commented 1 year ago

When LXD is not installed, the app should present an error screen with a nice human-readable error description together with installation instructions.

jpnurmi commented 1 year ago

The app used to dump an exception on the screen.

image

Ever since LxdService.init() was moved to main(), the UI no longer loads at all.

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: SocketException: Connection failed (OS Error: No such file or directory, errno = 2), address = /var/lib/lxd/unix.socket, port = 0
#0      _NativeSocket.startConnect (dart:io-patch/socket_patch.dart:682:35)
#1      _RawSocket.startConnect (dart:io-patch/socket_patch.dart:1827:26)
#2      RawSocket.startConnect (dart:io-patch/socket_patch.dart:27:23)
#3      Socket._startConnect (dart:io-patch/socket_patch.dart:2048:22)
#4      Socket.startConnect (dart:io/socket.dart:759:21)
#5      LxdClient._createClient.<anonymous closure>
package:lxd/src/client.dart:78
#6      _ConnectionTarget.connect (dart:_http/http_impl.dart:2443:28)
#7      _HttpClient._getConnection.connect (dart:_http/http_impl.dart:2867:12)
#8      _HttpClient._getConnection (dart:_http/http_impl.dart:2872:12)
#9      _HttpClient._openUrl (dart:_http/http_impl.dart:2727:12)
jpnurmi commented 1 year ago

For reference, snapcraft's error for uninitialized LXD:

$ snapcraft --verbosity verbose
Starting Snapcraft 7.2.9                                                                                                                                                                    
Logging execution to '/home/jpnurmi/.cache/snapcraft/log/snapcraft-20230103-112403.270629.log'                                                                                              
Running on amd64 for amd64                                                                                                                                                                  Traceback (most recent call last):
  File "/snap/snapcraft/8619/bin/snapcraft", line 8, in <module>
    sys.exit(run())
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/snapcraft/cli.py", line 228, in run
    _run_dispatcher(dispatcher)
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/snapcraft/cli.py", line 204, in _run_dispatcher
    dispatcher.run()
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/craft_cli/dispatcher.py", line 448, in run
    return self._loaded_command.run(self._parsed_command_args)
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/snapcraft/commands/lifecycle.py", line 259, in run
    super().run(parsed_args)
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/snapcraft/commands/lifecycle.py", line 132, in run
    parts_lifecycle.run(self.name, parsed_args)
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/snapcraft/parts/lifecycle.py", line 208, in run
    _run_command(
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/snapcraft/parts/lifecycle.py", line 249, in _run_command
    _run_in_provider(project, command_name, parsed_args)
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/snapcraft/parts/lifecycle.py", line 474, in _run_in_provider
    providers.ensure_provider_is_available(provider)
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/snapcraft/providers.py", line 83, in ensure_provider_is_available
    LXDProvider.ensure_provider_is_available()
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/craft_providers/lxd/lxd_provider.py", line 76, in ensure_provider_is_available
    ensure_lxd_is_ready()
  File "/snap/snapcraft/8619/lib/python3.8/site-packages/craft_providers/lxd/installer.py", line 141, in ensure_lxd_is_ready
    raise errors.LXDError(
craft_providers.lxd.errors.LXDError: LXD has not been properly initialized.
Execute 'lxd init --auto' to initialize LXD.
Visit https://linuxcontainers.org/lxd/getting-started-cli/ for instructions on installing and configuring LXD for your operating system.