make -C test
.PHONY: install
-install: pct lxc-pve.conf lxc-pve-prestart-hook lxc-pve-autodev-hook lxc-pve-poststop-hook \
- lxcnetaddbr pct.1 pct.conf.5 pct.bash-completion pct.zsh-completion pve-userns.seccomp
+install: pct lxc-pve.conf pct.1 pct.conf.5 pct.bash-completion pct.zsh-completion \
+ pve-userns.seccomp pve-container@.service pve-container-debug@.service \
+ lxc-pve-prestart-hook lxc-pve-autodev-hook lxc-pve-poststop-hook lxcnetaddbr
PVE_GENERATING_DOCS=1 perl -I. -T -e "use PVE::CLI::pct; PVE::CLI::pct->verify_api();"
install -d ${SBINDIR}
install -m 0755 pct ${SBINDIR}
install -m 0755 pve-container-stop-wrapper ${LXC_SCRIPT_DIR}
install -d -m0755 ${SERVICEDIR}
install -m0644 pve-container@.service ${SERVICEDIR}/
+ install -m0644 pve-container-debug@.service ${SERVICEDIR}/
install -m0644 'system-pve\x2dcontainer.slice' ${SERVICEDIR}/
install -d ${LXC_HOOK_DIR}
install -m 0755 lxc-pve-prestart-hook ${LXC_HOOK_DIR}
node => get_standard_option('pve-node'),
vmid => get_standard_option('pve-vmid', { completion => \&PVE::LXC::complete_ctid_stopped }),
skiplock => get_standard_option('skiplock'),
+ debug => {
+ optional => 1,
+ type => 'boolean',
+ description => "If set, enables very verbose debug log-level on start.",
+ default => 0,
+ },
},
},
returns => {
});
}
- PVE::LXC::vm_start($vmid, $conf, $skiplock);
+ PVE::LXC::vm_start($vmid, $conf, $skiplock, $param->{debug});
};
my $lockcmd = sub {
}
sub vm_start {
- my ($vmid, $conf, $skiplock) = @_;
+ my ($vmid, $conf, $skiplock, $debug) = @_;
# apply pending changes while starting
if (scalar(keys %{$conf->{pending}})) {
unlink "/run/pve/ct-$vmid.stderr"; # systemd does not truncate log files
- my $base_unit = $conf->{debug} ? 'pve-container-debug' : 'pve-container';
+ my $is_debug = $debug || (!defined($debug) && $conf->{debug});
+ my $base_unit = $is_debug ? 'pve-container-debug' : 'pve-container';
- my $cmd = ['systemctl', 'start', "pve-container\@$vmid"];
+ my $cmd = ['systemctl', 'start', "$base_unit\@$vmid"];
PVE::GuestHelpers::exec_hookscript($conf, $vmid, 'pre-start', 1);
eval {
PVE::Tools::run_command($cmd);
monitor_start($monitor_socket, $vmid) if defined($monitor_socket);
+
+ # if debug is requested, print the log it also when the start succeeded
+ print_ct_stderr_log($vmid) if $is_debug;
};
if (my $err = $@) {
unlink $skiplock_flag_fn;
description => 'Tags of the Container. This is only meta information.',
optional => 1,
},
+ debug => {
+ optional => 1,
+ type => 'boolean',
+ description => "Try to be more verbose. For now this only enables debug log-level on start.",
+ default => 0,
+ },
};
my $valid_lxc_conf_keys = {
--- /dev/null
+# based on lxc@.service, but without an install section because
+# starting and stopping should be initiated by PVE code, not
+# systemd.
+[Unit]
+Description=PVE LXC Container: %i
+DefaultDependencies=No
+After=lxc.service
+Wants=lxc.service
+Documentation=man:lxc-start man:lxc man:pct
+
+[Service]
+Type=simple
+Delegate=yes
+KillMode=mixed
+TimeoutStopSec=120s
+ExecStart=/usr/bin/lxc-start -F -n %i -o /dev/stderr -l DEBUG
+ExecStop=/usr/share/lxc/pve-container-stop-wrapper %i
+# Environment=BOOTUP=serial
+# Environment=CONSOLETYPE=serial
+# Prevent container init from putting all its output into the journal
+StandardOutput=null
+StandardError=file:/run/pve/ct-%i.stderr