Browse Source

qvm-features-request: ensure qrexec agent is started

Prevents:

Traceback (most recent call last):
  File "/usr/bin/qvm-features-request", line 81, in <module>
    sys.exit(main())
  File "/usr/bin/qvm-features-request", line 78, in main
    stdin=devnull, stdout=devnull)
  File "/usr/lib/python3.7/subprocess.py", line 347, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['qrexec-client-vm', 'dom0', 'qubes.FeaturesRequest']' returned non-zero exit status 127.

and

Traceback (most recent call last):
  File "/usr/bin/qvm-features-request", line 81, in <module>
    sys.exit(main())
  File "/usr/bin/qvm-features-request", line 70, in main
    qdb = qubesdb.QubesDB()
qubesdb.Error: (2, 'No such file or directory')

Fixes QubesOS/qubes-issues#4469
Frédéric Pierret (fepitre) 3 years ago
parent
commit
5805941daf
1 changed files with 8 additions and 1 deletions
  1. 8 1
      misc/qvm-features-request

+ 8 - 1
misc/qvm-features-request

@@ -29,6 +29,12 @@ import sys
 
 import qubesdb
 
+
+def is_active(service):
+    status = subprocess.call(["systemctl", "is-active", "--quiet", service])
+    return status == 0
+
+
 class FeatureRequestAction(argparse.Action):
     '''Action for argument parser that stores a property.'''
     # pylint: disable=redefined-builtin,too-few-public-methods
@@ -66,7 +72,8 @@ parser.add_argument('features',
 
 def main(args=None):
     args = parser.parse_args(args)
-
+    if not is_active("qubes-qrexec-agent"):
+        return
     qdb = qubesdb.QubesDB()
     for feature, value in args.features.items():
         qdb.write('/features-request/' + feature, value)