Merge branch 'master' of git.qubes-os.org:/var/lib/qubes/git/marmarek/core
Conflicts: dom0/pm-utils/01qubes-sync-vms-clock
This commit is contained in:
commit
14e6015665
@ -1,31 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# 15m
|
|
||||||
UPDATES_SLEEP=900
|
|
||||||
UPDATES_VM=`qvm-get-updatevm`
|
|
||||||
|
|
||||||
QREXEC_CLIENT=/usr/lib/qubes/qrexec_client
|
|
||||||
|
|
||||||
if [ -z "$UPDATES_VM" ]; then
|
|
||||||
echo "UpdateVM not set, exiting!" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Waiting for UpdateVM to be started"
|
|
||||||
# Intentionally used xl domid here to check if domain is running (in case of
|
|
||||||
# eg. stale qrexec socket)
|
|
||||||
while ! [ -S /var/run/qubes/qrexec.`xl domid "$UPDATES_VM" 2>/dev/null` ]; do
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
|
|
||||||
(
|
|
||||||
# Allow only one instance
|
|
||||||
flock --nonblock -s 200 || exit 1
|
|
||||||
while true; do
|
|
||||||
qvm-sync-dom0-clock
|
|
||||||
|
|
||||||
sleep $UPDATES_SLEEP
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
) 200> /var/run/qubes/clock-watch-lock
|
|
1
dom0/aux-tools/qubes-sync-clock.cron
Executable file
1
dom0/aux-tools/qubes-sync-clock.cron
Executable file
@ -0,0 +1 @@
|
|||||||
|
*/6 * * * * root /usr/bin/qvm-sync-clock > /dev/null 2>&1 || true
|
@ -50,8 +50,6 @@ start()
|
|||||||
MEMINFO_DELAY_USEC=100000
|
MEMINFO_DELAY_USEC=100000
|
||||||
/usr/lib/qubes/meminfo-writer $MEM_CHANGE_THRESHOLD_KB $MEMINFO_DELAY_USEC &
|
/usr/lib/qubes/meminfo-writer $MEM_CHANGE_THRESHOLD_KB $MEMINFO_DELAY_USEC &
|
||||||
|
|
||||||
/usr/lib/qubes/keep-dom0-clock-synced > /var/log/qubes/dom0-clock-sync.log 2>&1 &
|
|
||||||
|
|
||||||
touch /var/lock/subsys/qubes_core
|
touch /var/lock/subsys/qubes_core
|
||||||
success
|
success
|
||||||
echo
|
echo
|
||||||
|
@ -16,7 +16,7 @@ get_running_netvms() {
|
|||||||
suspend_net()
|
suspend_net()
|
||||||
{
|
{
|
||||||
for VM in `get_running_netvms`; do
|
for VM in `get_running_netvms`; do
|
||||||
qvm-run -u root --pass_io $VM 'service NetworkManager stop; for if in `ls /sys/class/net|grep -v "lo\|vif"`; do ip l s $if down; done; modprobe -r uhci_hcd ehci_hcd'
|
qvm-run -u root --pass-io $VM 'service NetworkManager stop; for if in `ls /sys/class/net|grep -v "lo\|vif"`; do ip l s $if down; done; modprobe -r uhci_hcd ehci_hcd'
|
||||||
done
|
done
|
||||||
# Ignore exit status from netvm...
|
# Ignore exit status from netvm...
|
||||||
return 0
|
return 0
|
||||||
@ -25,7 +25,7 @@ suspend_net()
|
|||||||
resume_net()
|
resume_net()
|
||||||
{
|
{
|
||||||
for VM in `get_running_netvms`; do
|
for VM in `get_running_netvms`; do
|
||||||
qvm-run -u root --pass_io $VM "modprobe ehci_hcd; modprobe uhci_hcd; [ -x /bin/systemctl ] && systemctl start NetworkManager.service || service qubes_core_netvm start"
|
qvm-run -u root --pass-io $VM "modprobe ehci_hcd; modprobe uhci_hcd; [ -x /bin/systemctl ] && systemctl start NetworkManager.service || service qubes_core_netvm start"
|
||||||
done
|
done
|
||||||
# Ignore exit status from netvm...
|
# Ignore exit status from netvm...
|
||||||
return 0
|
return 0
|
||||||
|
@ -4,11 +4,13 @@
|
|||||||
|
|
||||||
sync_qubes_vms_wallclock()
|
sync_qubes_vms_wallclock()
|
||||||
{
|
{
|
||||||
/usr/bin/qvm-sync-dom0-clock
|
# Sync all VMs based on dom0 clock
|
||||||
DATE=$(date)
|
DATE=$(date)
|
||||||
echo
|
echo
|
||||||
echo "Syncing VMs clock to: $DATE"
|
echo "Syncing VMs clock to: $DATE"
|
||||||
qvm-run --all --exclude=`qvm-get-clockvm` -u root "date -s \"$DATE\""
|
qvm-run --all --exclude=`qvm-get-clockvm` -u root "date -s \"$DATE\""
|
||||||
|
# Then try to sync from the network
|
||||||
|
/usr/bin/qvm-sync-clock &
|
||||||
}
|
}
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
|
@ -2546,9 +2546,9 @@ class QubesVmCollection(dict):
|
|||||||
|
|
||||||
self.clockvm_qid = clockvm.qid
|
self.clockvm_qid = clockvm.qid
|
||||||
|
|
||||||
# Enable ntpd in ClockVM
|
# Disable ntpd in ClockVM - to not conflict with ntpdate (both are using 123/udp port)
|
||||||
if self.clockvm_qid is not None:
|
if self.clockvm_qid is not None:
|
||||||
self[self.clockvm_qid].services['ntpd'] = True
|
self[self.clockvm_qid].services['ntpd'] = False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def pop(self, qid):
|
def pop(self, qid):
|
||||||
|
@ -229,7 +229,7 @@ def block_detach(vm, frontend = "xvdi", vm_xid = None):
|
|||||||
xl_cmd = [ '/usr/sbin/xl', 'block-detach', str(vm_xid), str(frontend)]
|
xl_cmd = [ '/usr/sbin/xl', 'block-detach', str(vm_xid), str(frontend)]
|
||||||
subprocess.check_call(xl_cmd)
|
subprocess.check_call(xl_cmd)
|
||||||
|
|
||||||
def run_in_vm(vm, command, verbose = True, autostart = False, notify_function = None, passio = False, localcmd = None):
|
def run_in_vm(vm, command, verbose = True, autostart = False, notify_function = None, passio = False, passio_popen = False, localcmd = None, wait = False):
|
||||||
assert vm is not None
|
assert vm is not None
|
||||||
|
|
||||||
if not vm.is_running():
|
if not vm.is_running():
|
||||||
@ -258,7 +258,11 @@ def run_in_vm(vm, command, verbose = True, autostart = False, notify_function =
|
|||||||
if passio:
|
if passio:
|
||||||
os.execv(qrexec_client_path, args)
|
os.execv(qrexec_client_path, args)
|
||||||
exit(1)
|
exit(1)
|
||||||
args += ["-e"]
|
if passio_popen:
|
||||||
|
p = subprocess.Popen (args, stdout=subprocess.PIPE)
|
||||||
|
return p
|
||||||
|
if not wait:
|
||||||
|
args += ["-e"]
|
||||||
return subprocess.call(args)
|
return subprocess.call(args)
|
||||||
|
|
||||||
# vim:sw=4:et:
|
# vim:sw=4:et:
|
||||||
|
@ -66,7 +66,7 @@ fi
|
|||||||
|
|
||||||
# We should ensure the clocks in Dom0 and UpdateVM are in sync
|
# We should ensure the clocks in Dom0 and UpdateVM are in sync
|
||||||
# becuase otherwise yum might complain about future timestamps
|
# becuase otherwise yum might complain about future timestamps
|
||||||
qvm-sync-dom0-clock
|
qvm-sync-clock
|
||||||
|
|
||||||
echo "Checking for dom0 updates" >&2
|
echo "Checking for dom0 updates" >&2
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ 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'
|
||||||
|
|
||||||
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=$?
|
||||||
if [ "$CHECK_ONLY" == "1" ]; then
|
if [ "$CHECK_ONLY" == "1" ]; then
|
||||||
exit $RETCODE
|
exit $RETCODE
|
||||||
|
@ -99,7 +99,7 @@ def main():
|
|||||||
# resize loop device
|
# resize loop device
|
||||||
retcode = subprocess.check_call(["losetup", "--set-capacity", loop_dev])
|
retcode = subprocess.check_call(["losetup", "--set-capacity", loop_dev])
|
||||||
|
|
||||||
retcode = subprocess.check_call([qvm_run_path, "-uroot", "--pass_io", vmname,
|
retcode = subprocess.check_call([qvm_run_path, "-uroot", "--pass-io", vmname,
|
||||||
"while [ \"`blockdev --getsize64 /dev/xvdb`\" -lt {0} ]; do sleep 0.2; done; resize2fs /dev/xvdb".format(size_bytes) ])
|
"while [ \"`blockdev --getsize64 /dev/xvdb`\" -lt {0} ]; do sleep 0.2; done; resize2fs /dev/xvdb".format(size_bytes) ])
|
||||||
else:
|
else:
|
||||||
retcode = subprocess.check_call(["resize2fs", "-f", vm.private_img])
|
retcode = subprocess.check_call(["resize2fs", "-f", vm.private_img])
|
||||||
|
@ -120,11 +120,11 @@ def main():
|
|||||||
parser.add_option ("--unpause", action="store_true", dest="unpause", default=False,
|
parser.add_option ("--unpause", action="store_true", dest="unpause", default=False,
|
||||||
help="Do 'xl unpause' for the VM(s) (can be combined this with --all and --wait)")
|
help="Do 'xl unpause' for the VM(s) (can be combined this with --all and --wait)")
|
||||||
|
|
||||||
parser.add_option ("-p", "--pass_io", action="store_true", dest="passio", default=False,
|
parser.add_option ("-p", "--pass-io", action="store_true", dest="passio", default=False,
|
||||||
help="Pass stdin/stdout/stderr from remote program")
|
help="Pass stdin/stdout/stderr from remote program")
|
||||||
|
|
||||||
parser.add_option ("--localcmd", action="store", dest="localcmd", default=None,
|
parser.add_option ("--localcmd", action="store", dest="localcmd", default=None,
|
||||||
help="With --pass_io, pass stdin/stdout/stderr to the given program")
|
help="With --pass-io, pass stdin/stdout/stderr to the given program")
|
||||||
|
|
||||||
parser.add_option ("--force", action="store_true", dest="force", default=False,
|
parser.add_option ("--force", action="store_true", dest="force", default=False,
|
||||||
help="Force operation, even if may damage other VMs (eg shutdown of NetVM)")
|
help="Force operation, even if may damage other VMs (eg shutdown of NetVM)")
|
||||||
|
95
dom0/qvm-tools/qvm-sync-clock
Executable file
95
dom0/qvm-tools/qvm-sync-clock
Executable file
@ -0,0 +1,95 @@
|
|||||||
|
#!/usr/bin/python2.6
|
||||||
|
#
|
||||||
|
# The Qubes OS Project, http://www.qubes-os.org
|
||||||
|
#
|
||||||
|
# Copyright (C) 2010 Marek Marczykowski <marmarek@invisiblethingslab.com>
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU General Public License
|
||||||
|
# as published by the Free Software Foundation; either version 2
|
||||||
|
# of the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
from qubes.qubes import QubesVmCollection
|
||||||
|
from qubes.qubesutils import run_in_vm
|
||||||
|
import os.path
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
qvm_collection = None
|
||||||
|
|
||||||
|
def get_netvm_of_vm(vm):
|
||||||
|
netvm = vm
|
||||||
|
while netvm.netvm_vm is not None:
|
||||||
|
netvm = netvm.netvm_vm
|
||||||
|
if netvm is None or netvm.name == 'dom0':
|
||||||
|
print >> sys.stderr, 'There seems to be no network connected to ClockVM, aborting.'
|
||||||
|
sys.exit(1)
|
||||||
|
return netvm
|
||||||
|
|
||||||
|
def main():
|
||||||
|
verbose = False
|
||||||
|
if len(sys.argv) > 1 and sys.argv[1] in [ '--verbose', '-v' ]:
|
||||||
|
verbose = True
|
||||||
|
|
||||||
|
qvm_collection = QubesVmCollection()
|
||||||
|
qvm_collection.lock_db_for_reading()
|
||||||
|
qvm_collection.load()
|
||||||
|
qvm_collection.unlock_db()
|
||||||
|
|
||||||
|
clock_vm = qvm_collection.get_clockvm_vm()
|
||||||
|
|
||||||
|
if clock_vm is None:
|
||||||
|
print >> sys.stderr, 'There is no selected ClockVM, aborting.'
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
if not clock_vm.is_running():
|
||||||
|
print >> sys.stderr, 'ClockVM not started, exiting!'
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
net_vm = get_netvm_of_vm(clock_vm)
|
||||||
|
if verbose:
|
||||||
|
print >> sys.stderr, '--> Waiting for network for ClockVM.'
|
||||||
|
|
||||||
|
# Ignore retcode, try even if nm-online failed - user can setup network manually
|
||||||
|
# on-online has timeout 30sec by default
|
||||||
|
run_in_vm(net_vm, 'user:nm-online -x', verbose=verbose, wait=True)
|
||||||
|
|
||||||
|
# Sync clock
|
||||||
|
if run_in_vm(clock_vm, 'root:/etc/init.d/ntpdate restart', verbose=verbose, wait=True) != 0:
|
||||||
|
print >> sys.stderr, 'Time sync failed, aborting!'
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
p = run_in_vm(clock_vm, 'user:date -u', verbose=verbose, passio_popen=True)
|
||||||
|
date_out = p.stdout.read(100)
|
||||||
|
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):
|
||||||
|
print >> sys.stderr, 'Invalid date output, aborting!'
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# Sync dom0 time
|
||||||
|
if verbose:
|
||||||
|
print >> sys.stderr, '--> Syncing dom0 clock.'
|
||||||
|
|
||||||
|
subprocess.check_call(['sudo', 'date', '-u', '-s', date_out])
|
||||||
|
|
||||||
|
# Sync other VMs clock
|
||||||
|
for vm in qvm_collection.values():
|
||||||
|
if vm.is_running() and vm.qid != 0 and vm.qid != clock_vm.qid:
|
||||||
|
if verbose:
|
||||||
|
print >> sys.stderr, '--> Syncing \'%s\' clock.' % vm.name
|
||||||
|
run_in_vm(vm, 'root:date -u -s "%s"' % date_out, verbose=verbose)
|
||||||
|
|
||||||
|
main()
|
||||||
|
|
@ -1,34 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
CLOCK_VM=`qvm-get-clockvm`
|
|
||||||
|
|
||||||
QREXEC_CLIENT=/usr/lib/qubes/qrexec_client
|
|
||||||
|
|
||||||
if [ -z "$CLOCK_VM" ]; then
|
|
||||||
echo "ClockVM not set, exiting!" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! xl domid "$CLOCK_VM" > /dev/null 2>&1; then
|
|
||||||
echo "ClockVM not started, exiting!" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# dd is supposed to not allow memory exhaustion
|
|
||||||
# grep does basic sanity checking
|
|
||||||
# there seems to be no way to pass output of date +%s.%N to date,
|
|
||||||
# so we use human-readable format
|
|
||||||
|
|
||||||
CURRENT_TIME="$($QREXEC_CLIENT -d $CLOCK_VM 'user:date -u' |
|
|
||||||
dd count=1 2>/dev/null |
|
|
||||||
grep '^[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]$'|
|
|
||||||
head -1)"
|
|
||||||
|
|
||||||
if [ -n "$CURRENT_TIME" ] ; then
|
|
||||||
echo Syncing Dom0 clock: setting time "$CURRENT_TIME"...
|
|
||||||
sudo date -u -s "$CURRENT_TIME" ;
|
|
||||||
echo Done. >&2
|
|
||||||
else
|
|
||||||
echo "Error while parsing the time obtained from the ClockVM ($CLOCK_VM).." >&2
|
|
||||||
fi
|
|
||||||
|
|
@ -42,6 +42,7 @@ Conflicts: qubes-gui-dom0 < 1.1.13
|
|||||||
Requires: xen >= 4.1.0-2
|
Requires: xen >= 4.1.0-2
|
||||||
Requires: createrepo
|
Requires: createrepo
|
||||||
Requires: gnome-packagekit
|
Requires: gnome-packagekit
|
||||||
|
Requires: cronie
|
||||||
%define _builddir %(pwd)/dom0
|
%define _builddir %(pwd)/dom0
|
||||||
|
|
||||||
%description
|
%description
|
||||||
@ -105,7 +106,6 @@ cp ../qrexec/qrexec_client $RPM_BUILD_ROOT/usr/lib/qubes/
|
|||||||
cp ../qrexec/qrexec_policy $RPM_BUILD_ROOT/usr/lib/qubes/
|
cp ../qrexec/qrexec_policy $RPM_BUILD_ROOT/usr/lib/qubes/
|
||||||
cp aux-tools/qfile-dom0-unpacker $RPM_BUILD_ROOT/usr/lib/qubes/
|
cp aux-tools/qfile-dom0-unpacker $RPM_BUILD_ROOT/usr/lib/qubes/
|
||||||
cp aux-tools/qubes-receive-updates $RPM_BUILD_ROOT/usr/lib/qubes/
|
cp aux-tools/qubes-receive-updates $RPM_BUILD_ROOT/usr/lib/qubes/
|
||||||
cp aux-tools/keep-dom0-clock-synced $RPM_BUILD_ROOT/usr/lib/qubes/
|
|
||||||
cp ../misc/block_add_change $RPM_BUILD_ROOT/usr/lib/qubes/
|
cp ../misc/block_add_change $RPM_BUILD_ROOT/usr/lib/qubes/
|
||||||
cp ../misc/block_remove $RPM_BUILD_ROOT/usr/lib/qubes/
|
cp ../misc/block_remove $RPM_BUILD_ROOT/usr/lib/qubes/
|
||||||
cp ../misc/block_cleanup $RPM_BUILD_ROOT/usr/lib/qubes/
|
cp ../misc/block_cleanup $RPM_BUILD_ROOT/usr/lib/qubes/
|
||||||
@ -121,6 +121,7 @@ cp aux-tools/qubes.ReceiveUpdates.policy $RPM_BUILD_ROOT/etc/qubes_rpc/policy/qu
|
|||||||
cp aux-tools/qubes.ReceiveUpdates $RPM_BUILD_ROOT/etc/qubes_rpc/
|
cp aux-tools/qubes.ReceiveUpdates $RPM_BUILD_ROOT/etc/qubes_rpc/
|
||||||
install -D aux-tools/qubes-dom0.modules $RPM_BUILD_ROOT/etc/sysconfig/modules/qubes-dom0.modules
|
install -D aux-tools/qubes-dom0.modules $RPM_BUILD_ROOT/etc/sysconfig/modules/qubes-dom0.modules
|
||||||
install -D aux-tools/qubes-dom0-updates.cron $RPM_BUILD_ROOT/etc/cron.daily/qubes-dom0-updates.cron
|
install -D aux-tools/qubes-dom0-updates.cron $RPM_BUILD_ROOT/etc/cron.daily/qubes-dom0-updates.cron
|
||||||
|
install -D aux-tools/qubes-sync-clock.cron $RPM_BUILD_ROOT/etc/cron.d/qubes-sync-clock.cron
|
||||||
|
|
||||||
cp restore/qvm-create-default-dvm $RPM_BUILD_ROOT/usr/bin
|
cp restore/qvm-create-default-dvm $RPM_BUILD_ROOT/usr/bin
|
||||||
cp restore/xenstore-watch $RPM_BUILD_ROOT/usr/bin/xenstore-watch-qubes
|
cp restore/xenstore-watch $RPM_BUILD_ROOT/usr/bin/xenstore-watch-qubes
|
||||||
@ -328,7 +329,6 @@ fi
|
|||||||
/usr/lib/qubes/block_remove
|
/usr/lib/qubes/block_remove
|
||||||
/usr/lib/qubes/block_cleanup
|
/usr/lib/qubes/block_cleanup
|
||||||
%attr(4750,root,qubes) /usr/lib/qubes/qfile-dom0-unpacker
|
%attr(4750,root,qubes) /usr/lib/qubes/qfile-dom0-unpacker
|
||||||
/usr/lib/qubes/keep-dom0-clock-synced
|
|
||||||
%attr(770,root,qubes) %dir /var/lib/qubes
|
%attr(770,root,qubes) %dir /var/lib/qubes
|
||||||
%attr(770,root,qubes) %dir /var/lib/qubes/vm-templates
|
%attr(770,root,qubes) %dir /var/lib/qubes/vm-templates
|
||||||
%attr(770,root,qubes) %dir /var/lib/qubes/appvms
|
%attr(770,root,qubes) %dir /var/lib/qubes/appvms
|
||||||
@ -381,6 +381,7 @@ fi
|
|||||||
/etc/security/limits.d/99-qubes.conf
|
/etc/security/limits.d/99-qubes.conf
|
||||||
/etc/udev/rules.d/99-qubes_block.rules
|
/etc/udev/rules.d/99-qubes_block.rules
|
||||||
/etc/cron.daily/qubes-dom0-updates.cron
|
/etc/cron.daily/qubes-dom0-updates.cron
|
||||||
|
/etc/cron.d/qubes-sync-clock.cron
|
||||||
/etc/dracut.conf.d/*
|
/etc/dracut.conf.d/*
|
||||||
%dir /usr/share/dracut/modules.d/90qubes-pciback
|
%dir /usr/share/dracut/modules.d/90qubes-pciback
|
||||||
/usr/share/dracut/modules.d/90qubes-pciback/*
|
/usr/share/dracut/modules.d/90qubes-pciback/*
|
||||||
|
Loading…
Reference in New Issue
Block a user