mount
is called by waagent
. Here is waagent
running in an Ubuntu Core VM on Azure with all interfaces connected except for mount-control
:
Connections:
$ snap connections waagent
Interface Plug Slot Notes
firewall-control waagent:firewall-control :firewall-control manual
mount-control waagent:mntctl - -
mount-observe waagent:mount-observe :mount-observe manual
network waagent:network :network -
network-bind waagent:network-bind :network-bind -
network-observe waagent:network-observe :network-observe manual
removable-media waagent:removable-media :removable-media manual
system-files waagent:sys-bus-vmbus-devices :system-files manual
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: 2025-06-30T02:05:27.731986Z ERROR Daemon Daemon Event: name=WALinuxAgent, op=UnhandledError, message=[Errno 13] Permission denied: 'mount'
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: Traceback (most recent call last):
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: File "/snap/waagent/x1/lib/python3.12/site-packages/azurelinuxagent/daemon/main.py", line 83, in run
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: self.daemon(child_args)
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: File "/snap/waagent/x1/lib/python3.12/site-packages/azurelinuxagent/daemon/main.py", line 144, in daemon
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: self.provision_handler.run()
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: File "/snap/waagent/x1/lib/python3.12/site-packages/azurelinuxagent/pa/provision/default.py", line 79, in run
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: ovf_env = self.protocol_util.copy_ovf_env()
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: File "/snap/waagent/x1/lib/python3.12/site-packages/azurelinuxagent/common/protocol/util.py", line 81, in copy_ovf_env
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: self.osutil.mount_dvd()
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: File "/snap/waagent/x1/lib/python3.12/site-packages/azurelinuxagent/common/osutil/default.py", line 452, in mount_dvd
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: return_code, err = self.mount(dvd_device,
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: ^^^^^^^^^^^^^^^^^^^^^^
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: File "/snap/waagent/x1/lib/python3.12/site-packages/azurelinuxagent/common/osutil/default.py", line 537, in mount
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: output = shellutil.run_command(cmd, log_error=chk_err)
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: File "/snap/waagent/x1/lib/python3.12/site-packages/azurelinuxagent/common/utils/shellutil.py", line 288, in run_command
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: return __run_command(command_action=command_action, command=command, log_error=log_error, encode_output=encode_output)
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: File "/snap/waagent/x1/lib/python3.12/site-packages/azurelinuxagent/common/utils/shellutil.py", line 190, in __run_command
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: return_code, stdout, stderr = command_action()
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: ^^^^^^^^^^^^^^^^
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: File "/snap/waagent/x1/lib/python3.12/site-packages/azurelinuxagent/common/utils/shellutil.py", line 255, in command_action
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: process = _popen(command, stdin=popen_stdin, stdout=stdout, stderr=stderr, shell=False)
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: File "/snap/waagent/x1/lib/python3.12/site-packages/azurelinuxagent/common/utils/shellutil.py", line 398, in _popen
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: process = subprocess.Popen(*args, **kwargs)
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: File "/usr/lib/python3.12/subprocess.py", line 1026, in __init__
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: self._execute_child(args, executable, preexec_fn, close_fds,
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: File "/usr/lib/python3.12/subprocess.py", line 1955, in _execute_child
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: raise child_exception_type(errno_num, err_msg, err_filename)
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: PermissionError: [Errno 13] Permission denied: 'mount'
Jun 30 02:06:08 jrtknauer-waagent waagent.waagent[973]: , duration=0
Furthermore, the Azure Portal still reports:
virtual machine agent status is not ready
Agent status Not Ready
Agent version Unknown
This error will loop and persist every 15 seconds until connecting the mount-control
interface:
$ sudo snap connect waagent:mntctl
From the Azure Portal:
Agent status Ready
Agent version 2.13.1.1
There are a multitude of other issues we still need to address, but this appears to be the minimal set of interfaces required to enable communication between the agent and the Azure control plane.