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
eeabd3b371
commit
5637793fae
@ -1301,9 +1301,14 @@ class QubesVm(object):
|
|||||||
|
|
||||||
return conf
|
return conf
|
||||||
|
|
||||||
def run(self, command, verbose = True, autostart = False, notify_function = None, passio = False, passio_popen = False, localcmd = None, wait = False, gui = True):
|
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'"""
|
"""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 self.is_running():
|
||||||
if not autostart:
|
if not autostart:
|
||||||
raise QubesException("VM not running")
|
raise QubesException("VM not running")
|
||||||
@ -1330,12 +1335,28 @@ class QubesVm(object):
|
|||||||
if passio:
|
if passio:
|
||||||
os.execv(qrexec_client_path, args)
|
os.execv(qrexec_client_path, args)
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
|
call_kwargs = {}
|
||||||
|
if ignore_stderr:
|
||||||
|
null = open("/dev/null", "w")
|
||||||
|
call_kwargs['stderr'] = null
|
||||||
|
|
||||||
if passio_popen:
|
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
|
return p
|
||||||
if not wait:
|
if not wait:
|
||||||
args += ["-e"]
|
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):
|
def attach_network(self, verbose = False, wait = True, netvm = None):
|
||||||
if dry_run:
|
if dry_run:
|
||||||
|
@ -75,7 +75,7 @@ echo "Checking for dom0 updates" >&2
|
|||||||
# Start VM if not running already
|
# Start VM if not running already
|
||||||
qvm-run -a $UPDATEVM true || exit 1
|
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"
|
qvm-run --pass-io $UPDATEVM "/usr/lib/qubes/qubes_download_dom0_updates.sh --doit --nogui $ALL_OPTS"
|
||||||
RETCODE=$?
|
RETCODE=$?
|
||||||
|
@ -64,14 +64,14 @@ def main():
|
|||||||
|
|
||||||
# Ignore retcode, try even if nm-online failed - user can setup network manually
|
# Ignore retcode, try even if nm-online failed - user can setup network manually
|
||||||
# on-online has timeout 30sec by default
|
# 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
|
# 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!'
|
print >> sys.stderr, 'Time sync failed, aborting!'
|
||||||
sys.exit(1)
|
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 = p.stdout.read(100)
|
||||||
date_out = date_out.strip()
|
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):
|
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