Re: [PATCH v2 09/15] bootlinux: fix os detection for 9p build dependency installation

Daniel Gomez <[email protected]> Fri, 7 Nov 2025 21:00:40 +0100
Newsgroups dev.linux.lists.kdevops
Organization kernel.org
Message-ID <[email protected]>
On 07/11/2025 20.22, Chuck Lever wrote:
> On 10/29/25 8:40 AM, Daniel Gomez wrote:
>> From: Daniel Gomez <[email protected]>
>>
>> Dependency installation for 9P builds was checking ansible_os_family,
>> which references the target guest's OS instead of the control host where
>> packages are actually installed. This caused incorrect packages to be
>> installed when building Fedora guests on Debian hosts.
>>
>> Replace ansible_os_family checks with Kconfig distro variables
>> (distro_debian_based, distro_fedora, etc.) which correctly detect
>> the control host's distribution. Add fallback defaults to ensure the
>> variables are always defined for standalone role usage.
>>
>> Generated-by: Claude AI
>> Suggested-by: Chuck Lever <[email protected]>
> 
> Hrm. I might not have understood the whole picture.
> 
> Yes, distro_yada_based does pick the controller's OS version.
> But so does ansible_os_family when the task is running on
> localhost.

Just a reminder that we control where tasks are deployed with --limit and/or
hosts: field in bootlinux.yml. For this case, IIRC, the playbook was run for
baseline:dev but tasks were "delegated_to" localhost.

> 
> I just hit a problem with the "build linux on a separate
> target node" configuration, where the target is running
> Debian 11 and the controller is running Fedora 41. The
> bootlinux install-deps/main.yml checks were coming to
> the wrong conclusion.

Can you share the output? And the --limit argument used in this case?
FYI, I normally enable CONFIG_KDEVOPS_MAKE_VERBOSE=y) which prints:

make bringup
+ make linux-clone
==> [guestfs/kdevops_nodes.yaml]
+ ansible-playbook playbooks/gen_nodes.yml --extra-vars=@./extra_vars.yaml
...
==> [linux-clone-9p]
+ ansible-playbook --limit localhost playbooks/bootlinux.yml
'--extra-vars=target_linux_git=/mirror/linux.git ...
...

> 
> So if build.yml was running on the controller, then
> ansible_os_family should have been "Debian" for you.
> Question is, where was it running? For 9p, I'll bet it
> was running on the targets; it might need to run on

I think that is correct. It gets a bit more tricky when we have baseline:dev but
we also use during the role execution the "delegate_to" localhost.

> both localhost and the targets in this case.

I thought about that option too but then, some/most of the tasks should be
executed on the guests. That path will require to exclude the controller node
from them.