diff --git a/debian/qubes-core-agent.install b/debian/qubes-core-agent.install index 32ba1881d..fa3aa41d7 100644 --- a/debian/qubes-core-agent.install +++ b/debian/qubes-core-agent.install @@ -39,6 +39,7 @@ etc/qubes-rpc/qubes.VMExecGUI etc/qubes-rpc/qubes.VMRootExec etc/qubes-rpc/qubes.WaitForSession etc/qubes-rpc/qubes.WaitForRunningSystem +etc/qubes-rpc/qubes.WaitForNetworkUplink etc/qubes-rpc/qubes.GetDate etc/qubes-suspend-module-blacklist etc/qubes/autostart/* diff --git a/qubes-rpc/Makefile b/qubes-rpc/Makefile index ca80d3514..d5a9755ec 100644 --- a/qubes-rpc/Makefile +++ b/qubes-rpc/Makefile @@ -79,6 +79,7 @@ install: qubes.SuspendPostAll \ qubes.WaitForSession \ qubes.WaitForRunningSystem \ + qubes.WaitForNetworkUplink \ qubes.DetachPciDevice \ qubes.Backup qubes.Restore \ qubes.RegisterBackupLocation \ diff --git a/qubes-rpc/qubes.WaitForNetworkUplink b/qubes-rpc/qubes.WaitForNetworkUplink new file mode 100755 index 000000000..359ee3240 --- /dev/null +++ b/qubes-rpc/qubes.WaitForNetworkUplink @@ -0,0 +1,21 @@ +#!/bin/bash +# Wait with a timeout for the uplink service to be started. Used on deferred netvm. +set -eu + +# shellcheck disable=SC1091 +. /usr/lib/qubes/init/functions +iface="$(get_qubes_managed_iface)" +if test -z "$iface"; then + exit +fi + +i=0 +while test $i -le 10; do + if systemctl is-active --quiet "qubes-network-uplink@$iface.service"; then + ip link show "$iface" | grep "state UP" || exit 4 + exit 0 + fi + sleep 0.3 + i=$((i+1)) +done +exit 3 diff --git a/rpm_spec/core-agent.spec.in b/rpm_spec/core-agent.spec.in index db92b350c..d30aa185b 100644 --- a/rpm_spec/core-agent.spec.in +++ b/rpm_spec/core-agent.spec.in @@ -903,6 +903,7 @@ rm -f %{name}-%{version} %config(noreplace) /etc/qubes-rpc/qubes.SuspendPostAll %config(noreplace) /etc/qubes-rpc/qubes.WaitForSession %config(noreplace) /etc/qubes-rpc/qubes.WaitForRunningSystem +%config(noreplace) /etc/qubes-rpc/qubes.WaitForNetworkUplink %config(noreplace) /etc/qubes-rpc/qubes.DetachPciDevice %config(noreplace) /etc/qubes-rpc/qubes.Backup %config(noreplace) /etc/qubes-rpc/qubes.Restore