oVirt 4.2 и пакет интеграции ovirt-guest-agent для Debian GNU/Linux

Обновление нашей инфраструктуры oVirt до последней версии 4.2.0 в целом прошло гладко по ранее описанному сценарию. После обновления сервера управления oVirt Hosted Engine, обновления всех хостов виртуализации и повышения уровня кластера до новой версии, настала очередь обновления пакета интеграции oVirt Guest Agent в гостевых ОС виртуальных машин. Об этом нам ненавязчиво сообщила уже обновлённая и "приятная на ощупь" консоль Administration Portal, показав неприятный восклицательный знак возле каждой необновлённой ВМ.

В ходе первой же попытки обновления виртуальной машины с ОС Debian 8.10 (Jessie) было обнаружено, что в гостевой системе уже установлена самая актуальная версия пакета ovirt-guest-agent, имеющаяся на данный момент в официальных репозиториях для Debian Jessie - 1.0.10.2.dfsg-2+deb8u1. При этом, после первой же перезагрузки ВМ, которую после повышения уровня кластера до новой версии oVirt требовал oVirt Engine, служба ovirt-guest-agent.service, ранее установленная в гостевой ОС Debian не смогла запуститься вовсе, вывалив в лог /var/log/ovirt-guest-agent/ovirt-guest-agent.log такую каку:

MainThread::INFO::2018-01-02 16:40:35,102::ovirt-guest-agent::59::root::Starting oVirt guest agent
MainThread::ERROR::2018-01-02 16:40:35,106::ovirt-guest-agent::141::root::Unhandled exception in oVirt guest agent!
Traceback (most recent call last):
  File "/usr/share/ovirt-guest-agent/ovirt-guest-agent.py", line 135, in 
    agent.run(daemon, pidfile)
  File "/usr/share/ovirt-guest-agent/ovirt-guest-agent.py", line 65, in run
    self.agent = LinuxVdsAgent(config)
  File "/usr/share/ovirt-guest-agent/GuestAgentLinux2.py", line 472, in __init__
    AgentLogicBase.__init__(self, config)
  File "/usr/share/ovirt-guest-agent/OVirtAgentLogic.py", line 188, in __init__
    self.vio = VirtIoChannel(config.get("virtio", "device"))
  File "/usr/share/ovirt-guest-agent/VirtIoChannel.py", line 153, in __init__
    self._stream = VirtIoStream(vport_name)
  File "/usr/share/ovirt-guest-agent/VirtIoChannel.py", line 134, in __init__
    self._vport = os.open(vport_name, os.O_RDWR)
OSError: [Errno 2] No such file or directory: '/dev/virtio-ports/com.redhat.rhevm.vdsm'

Опять таки, до обновления, на версии oVirt 4.1.8, эта же служба в этих же виртуальных машинах работала без подобных проблем.

Точно таким же образом ситуация сложилась и на виртуальных машинах с Debian 9.3 (Stretch). На этих ВМ была установлена более новая версия пакета ovirt-guest-agent (1.0.12.2.dfsg-2), доступная в официальных репозиториях Debian Stretch. Но поведение службы ovirt-guest-agent.service на перезагруженных ВМ оказалось точно таким же, что и в случае с Debian 8.

Самая свежая версия пакета ovirt-guest-agent, доступная в репозиториях Debian, это версия 1.0.13.dfsg-2, относящаяся к следующей разрабатываемой версии Debian 10 (Buster). И эксперименты показали, что эта версия без проблем устанавливается и на Debian 8.10 (Jessie) и на Debian 9.3 (Stretch), заменяя собой в гостевых системах старые версии ovirt-guest-agent. Приведу пример такой установки (с учётом установки необходимых пакетов, в случае, если ovirt-guest-agent устанавливается на чистую систему):

# mkdir ~/packages
# cd ~/packages
# wget http://ftp.us.debian.org/debian/pool/main/o/ovirt-guest-agent/ovirt-guest-agent_1.0.13.dfsg-2_all.deb
# apt-get install gir1.2-glib-2.0 libdbus-glib-1-2 libgirepository-1.0-1 libpango1.0-0 libuser1 python-dbus python-dbus-dev python-ethtool python-gi qemu-guest-agent usermode
# dpkg -i ~/packages/ovirt-guest-agent_1.0.13.dfsg-2_all.deb

Однако не смотря на успешную установку, служба ovirt-guest-agent.service всё равно не запустится:

# systemctl restart ovirt-guest-agent.service
# systemctl status ovirt-guest-agent.service

* ovirt-guest-agent.service - oVirt Guest Agent
   Loaded: loaded (/lib/systemd/system/ovirt-guest-agent.service; enabled)
   Active: failed (Result: exit-code) since Wed 2018-01-03 22:52:14 MSK; 1s ago
  Process: 23206 ExecStart=/usr/bin/python /usr/share/ovirt-guest-agent/ovirt-guest-agent.py (code=exited, status=1/FAILURE)
  Process: 23203 ExecStartPre=/bin/chown ovirtagent:ovirtagent /run/ovirt-guest-agent.pid (code=exited, status=0/SUCCESS)
  Process: 23200 ExecStartPre=/bin/touch /run/ovirt-guest-agent.pid (code=exited, status=0/SUCCESS)
  Process: 23197 ExecStartPre=/sbin/modprobe virtio_console (code=exited, status=0/SUCCESS)
 Main PID: 23206 (code=exited, status=1/FAILURE)

При этом в логе /var/log/ovirt-guest-agent/ovirt-guest-agent.log снова появится ошибка, но на этот раз она уже будет другой:

MainThread::INFO::2018-01-03 22:52:14,771::ovirt-guest-agent::59::root::Starting oVirt guest agent
MainThread::ERROR::2018-01-03 22:52:14,773::ovirt-guest-agent::141::root::Unhandled exception in oVirt guest agent!
Traceback (most recent call last):
  File "/usr/share/ovirt-guest-agent/ovirt-guest-agent.py", line 135, in 
    agent.run(daemon, pidfile)
  File "/usr/share/ovirt-guest-agent/ovirt-guest-agent.py", line 65, in run
    self.agent = LinuxVdsAgent(config)
  File "/usr/share/ovirt-guest-agent/GuestAgentLinux2.py", line 472, in __init__
    AgentLogicBase.__init__(self, config)
  File "/usr/share/ovirt-guest-agent/OVirtAgentLogic.py", line 188, in __init__
    self.vio = VirtIoChannel(config.get("virtio", "device_prefix"))
  File "/usr/share/ovirt-guest-agent/VirtIoChannel.py", line 162, in __init__
    self._stream = VirtIoStream(vport_name)
  File "/usr/share/ovirt-guest-agent/VirtIoChannel.py", line 143, in __init__
    self._vport = os.open(vport_name, os.O_RDWR)
OSError: [Errno 13] Permission denied: '/dev/virtio-ports/ovirt-guest-agent.0'

Подобную проблему удалось найти здесь - Red Hat Bugzilla – Bug 1472293, и обсудить со специалистом из Red Hat в [ovirt-users], где было сказано, что на данный момент в баг-трекере Debian созданы 2 баг-репорта, описывающих сложившуюся ситуацию: #886660 и #886661

Простым обходным решением по проблеме первого запуска службы ovirt-guest-agent.service сразу после установки пакета ovirt-guest-agent версии 1.0.13.dfsg-2 является "передёргивание" udev:

# udevadm trigger --subsystem-match="virtio-ports"
# systemctl restart ovirt-guest-agent.service

Однако вместо выполнения udevadm после установки пакета ovirt-guest-agent можно просто перезагрузить гостевую систему, после чего служба ovirt-guest-agent.service должна успешно запуститься.

В сухом остатке имеем то, что для успешной работы компонент интеграции oVirt 4.2 на системах Debian 8.10 (Jessie) и на Debian 9.3 (Stretch) нужно устанавливать пакет ovirt-guest-agent версии 1.0.13.dfsg-2 из репозиториев Debian 10 (Buster), после чего выполнять udevadm или просто перезагружать гостевую ОС виртуальной машины.

Добавить комментарий