activate-noawait pve-api-updates
+activate-noawait /etc/init.d
PREFIX=${DESTDIR}/usr
BINDIR=${PREFIX}/bin
+LIBDIR=${PREFIX}/lib
SBINDIR=${PREFIX}/sbin
MANDIR=${PREFIX}/share/man
DOCDIR=${PREFIX}/share/doc/${PACKAGE}
LXC_TMPL_DIR=${LXC_SCRIPT_DIR}/templates
LXC_HOOK_DIR=${LXC_SCRIPT_DIR}/hooks
LXC_COMMON_CONFIG_DIR=${LXC_SCRIPT_DIR}/config/common.conf.d
+SERVICEDIR=$(LIBDIR)/systemd/system
PODDIR=${DOCDIR}/pod
MAN1DIR=${MANDIR}/man1/
MAN5DIR=${MANDIR}/man5/
install -m 0755 pve-update-lxc-config ${SBINDIR}
install -d ${LXC_SCRIPT_DIR}
install -m 0755 lxcnetaddbr ${LXC_SCRIPT_DIR}
+ install -m 0755 lxc-pve-reboot-trigger ${LXC_SCRIPT_DIR}
+ install -d -m0755 ${SERVICEDIR}/lxc@.service.d
+ install -m0644 pve-reboot.conf ${SERVICEDIR}/lxc@.service.d/
install -d ${LXC_HOOK_DIR}
install -m 0755 lxc-pve-prestart-hook ${LXC_HOOK_DIR}
install -m 0755 lxc-pve-autodev-hook ${LXC_HOOK_DIR}
# that we must not block because we're part of the service cgroup
# systemd waits for to die before issuing the new lxc-start command.
PVE::LXC::update_lxc_config($vmid, $conf);
- PVE::Tools::run_command(['systemctl', '--no-block', 'restart', "lxc\@$vmid"]);
+ # Tell the post-stop hook we want to be restarted.
+ open(my $fh, '>', "/var/lib/lxc/$vmid/reboot")
+ or die "failed to create reboot trigger file: $!\n";
+ close($fh);
# cause lxc to stop instead of rebooting
- POSIX::_exit(1);
+ exit(1);
}
return undef;
my $rootdir = $param->{rootfs};
+ # Delete any leftover reboot-trigger file
+ unlink("/var/lib/lxc/$vmid/reboot");
+
my $devlist_file = "/var/lib/lxc/$vmid/devices";
unlink $devlist_file;
my $devices = [];
--- /dev/null
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+my $vmid = $ARGV[0] or exit(1);
+exit(0) if $vmid !~ /^\d+$/; # check for a PVE ID
+exit(0) if !-e "/etc/pve/lxc/${vmid}.conf";
+exit(0) if !unlink("/var/lib/lxc/$vmid/reboot");
+exec {'systemctl'} 'systemctl', '--no-block', 'restart', "lxc\@${vmid}.service";
--- /dev/null
+[Service]
+ExecStopPost=/usr/share/lxc/lxc-pve-reboot-trigger %i