dom0/qvm-core: ignore stderr from VM commands when not needed for sure (#626)
pam_systemd.so has a bug, which cause spurious '...killed' output on stderr.
This commit is contained in:
parent
0f6f445ece
commit
4b92f6390a
@ -1286,9 +1286,14 @@ class QubesVm(object):
|
||||
|
||||
return conf
|
||||
|
||||
def run(self, command, verbose = True, autostart = False, notify_function = None, passio = False, passio_popen = False, localcmd = None, wait = False, gui = True):
|
||||
"""command should be in form 'user:cmdline'"""
|
||||
def run(self, command, verbose = True, autostart = False, notify_function = None, passio = False, passio_popen = False, passio_stderr=False, ignore_stderr=False, localcmd = None, wait = False, gui = True):
|
||||
"""command should be in form 'user:cmdline'
|
||||
When passio_popen=True, popen object with stdout connected to pipe.
|
||||
When additionally passio_stderr=True, stderr also is connected to pipe.
|
||||
When ignore_stderr=True, stderr is connected to /dev/null.
|
||||
"""
|
||||
|
||||
null = None
|
||||
if not self.is_running():
|
||||
if not autostart:
|
||||
raise QubesException("VM not running")
|
||||
@ -1315,12 +1320,28 @@ class QubesVm(object):
|
||||
if passio:
|
||||
os.execv(qrexec_client_path, args)
|
||||
exit(1)
|
||||
|
||||
call_kwargs = {}
|
||||
if ignore_stderr:
|
||||
null = open("/dev/null", "w")
|
||||
call_kwargs['stderr'] = null
|
||||
|
||||
if passio_popen:
|
||||
p = subprocess.Popen (args, stdout=subprocess.PIPE)
|
||||
popen_kwargs={'stdout': subprocess.PIPE}
|
||||
if passio_stderr:
|
||||
popen_kwargs['stderr'] = subprocess.PIPE
|
||||
else:
|
||||
popen_kwargs['stderr'] = call_kwargs.get('stderr', None)
|
||||
p = subprocess.Popen (args, **popen_kwargs)
|
||||
if null:
|
||||
null.close()
|
||||
return p
|
||||
if not wait:
|
||||
args += ["-e"]
|
||||
return subprocess.call(args)
|
||||
retcode = subprocess.call(args, **call_kwargs)
|
||||
if null:
|
||||
null.close()
|
||||
return retcode
|
||||
|
||||
def attach_network(self, verbose = False, wait = True, netvm = None):
|
||||
if dry_run:
|
||||
|
@ -75,7 +75,7 @@ echo "Checking for dom0 updates" >&2
|
||||
# Start VM if not running already
|
||||
qvm-run -a $UPDATEVM true || exit 1
|
||||
|
||||
/usr/lib/qubes/qrexec_client -d "$UPDATEVM" -l 'tar c /var/lib/rpm /etc/yum.repos.d /etc/yum.conf 2>/dev/null' 'user:tar x -C /var/lib/qubes/dom0-updates'
|
||||
/usr/lib/qubes/qrexec_client -d "$UPDATEVM" -l 'tar c /var/lib/rpm /etc/yum.repos.d /etc/yum.conf 2>/dev/null' 'user:tar x -C /var/lib/qubes/dom0-updates' 2> /dev/null
|
||||
|
||||
qvm-run --pass-io $UPDATEVM "/usr/lib/qubes/qubes_download_dom0_updates.sh --doit --nogui $ALL_OPTS"
|
||||
RETCODE=$?
|
||||
|
@ -64,14 +64,14 @@ def main():
|
||||
|
||||
# Ignore retcode, try even if nm-online failed - user can setup network manually
|
||||
# on-online has timeout 30sec by default
|
||||
net_vm.run('user:nm-online -x', verbose=verbose, wait=True)
|
||||
net_vm.run('user:nm-online -x', verbose=verbose, wait=True, ignore_stderr=True)
|
||||
|
||||
# Sync clock
|
||||
if clock_vm.run('root:QUBESRPC qubes.SyncNtpClock dom0', verbose=verbose, wait=True) != 0:
|
||||
if clock_vm.run('root:QUBESRPC qubes.SyncNtpClock dom0', verbose=verbose, wait=True, ignore_stderr=True) != 0:
|
||||
print >> sys.stderr, 'Time sync failed, aborting!'
|
||||
sys.exit(1)
|
||||
|
||||
p = clock_vm.run('user:date -u', verbose=verbose, passio_popen=True)
|
||||
p = clock_vm.run('user:date -u', verbose=verbose, passio_popen=True, ignore_stderr=True)
|
||||
date_out = p.stdout.read(100)
|
||||
date_out = date_out.strip()
|
||||
if not re.match(r'^[A-Za-z]* [A-Za-z]* [ 0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9] [A-Z]* [0-9][0-9][0-9][0-9]$', date_out):
|
||||
|
Loading…
Reference in New Issue
Block a user