lxc container startup error and RFC patch

Michal Prívozník mprivozn at redhat.com
Tue Aug 3 05:36:27 UTC 2021


On 8/2/21 10:20 PM, Jim Fehlig wrote:
> On 7/29/21 3:28 PM, Cole Robinson wrote:
>> Hi all,
>>
>> I'm seeing LXC container startup failures. This is with libvirt git,
>> fedora 34 host with systemd-248.6-1.fc34.x86_64 (I didn't confirm with
>> other versions). Reproducer:
> 
> From my experience its more related to cgroups. Works with V2-only,
> doesn't work with V1 or hybrid.

Ah, that's the missing piece! I tried to reproduce on my fedora VMs but
all of them are fully switched to v2. Thanks Jim, I'll give it another try.

> 
>> sudo virt-install --connect lxc:/// --name test-container --memory 128
>> --boot init=/bin/sh
>>
>> Starting install...
>> ERROR    error from service:
>> GDBus.Error:org.freedesktop.machine1.NoMachineForPID: PID 2145047 does
>> not belong to any known machine
>>
>> libvirt 7.0.0 works but 7.1.0+ does not. The root error seems to predate
>> that, showing up in syslog, but commit 9c1693eff made it fatal:
>>
>> commit 9c1693eff427661616ce1bd2795688f87288a412
>> Author: Pavel Hrdina <phrdina at redhat.com>
>> Date:   Fri Feb 5 16:17:35 2021 +0100
>>
>>      vircgroup: use DBus call to systemd for some APIs
>>
>> The error comes from virSystemdGetMachineByPID. The PID that shows up in
>> the above error message does not match the leader PID as reported by
>> machinectl. This change fixes the error but I don't know if it's correct
>> or if it has other implications:
> 
> I'm not familiar enough with the driver to review your change with
> confidence.

I'll do the review.

> 
>> diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c
>> index 066e013ed4..54ecb1316b 100644
>> --- a/src/lxc/lxc_controller.c
>> +++ b/src/lxc/lxc_controller.c
>> @@ -866,12 +866,12 @@ static int
>> virLXCControllerSetupCgroupLimits(virLXCController *ctrl)
>>       nodeset = virDomainNumatuneGetNodeset(ctrl->def->numa,
>> auto_nodeset, -1);
>>         if (!(ctrl->cgroup = virLXCCgroupCreate(ctrl->def,
>> -                                            ctrl->initpid,
>> +                                            getpid(),
>>                                               ctrl->nnicindexes,
>>                                               ctrl->nicindexes)))
>>           goto cleanup;
>>   -    if (virCgroupAddMachineProcess(ctrl->cgroup, getpid()) < 0)
>> +    if (virCgroupAddMachineProcess(ctrl->cgroup, ctrl->initpid) < 0)
>>           goto cleanup;
>>         /* Add all qemu-nbd tasks to the cgroup */
>>
>>
>> Maybe something else isn't working elsewhere. Clearly we try to add both
>> pids to the systemd machine, but virSystemdGetMachineByPID is not
>> working to match the non-leader pid, which is the one that the LXC
>> driver knows about.
>>
>> Thoughts?
>> Can anyone else reproduce?
> 
> https://gitlab.com/libvirt/libvirt/-/issues/182

Thanks for filing the issue.

Michal




More information about the libvir-list mailing list