Re: [PATCH v2 09/15] bootlinux: fix os detection for 9p build dependency installation
Chuck Lever <[email protected]> Fri, 7 Nov 2025 15:53:23 -0500
| Newsgroups | dev.linux.lists.kdevops |
|---|---|
| Message-ID | <[email protected]> |
On 11/7/25 3:47 PM, Daniel Gomez wrote: > > > On 07/11/2025 21.17, Chuck Lever wrote: >> On 11/7/25 3:00 PM, Daniel Gomez wrote: >>> 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. >> >> That's new since I did the "build kernel on a separate target node" >> changes and the related clean-ups in the bootlinux playbook. Not a >> finger-point, just saying we could have collided somewhere. >> >> >>>> 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 ... >>> ... >> >> Here's from my scroll-back buffer earlier this afternoon: >> >> TASK [install-rust-deps : Install Rust build dependencies] >> ************************************************************************************* >> included: >> /home/cel/src/kdevops/buildbot-configs/playbooks/roles/install-rust-deps/tasks/install-deps/main.yml >> for kernel-builder >> >> TASK [install-rust-deps : Install Rust build dependencies] >> ************************************************************************************* >> changed: [kernel-builder] >> FAILED - RETRYING: [kernel-builder]: Install packages we care about (3 >> retries left). >> FAILED - RETRYING: [kernel-builder]: Install packages we care about (2 >> retries left). >> FAILED - RETRYING: [kernel-builder]: Install packages we care about (1 >> retries left). >> >> TASK [bootlinux : Install packages we care about] >> ********************************************************************************************** >> task path: >> /home/cel/src/kdevops/buildbot-configs/playbooks/roles/bootlinux/tasks/install-deps/redhat/main.yml:8 >> fatal: [kernel-builder]: FAILED! => { >> "ansible_facts": { >> "pkg_mgr": "apt" >> }, >> "attempts": 3, >> "changed": false >> } >> >> MSG: >> >> ('Could not detect which major revision of dnf is in use, which is >> required to determine module backend.', 'You should manually specify >> use_backend to tell the module whether to use the dnf4 or dnf5 backend})') >> >> >> As you can see, bootlinux is trying to install the redhat deps on >> the target, but in fact the target is running Debian 11. This is >> because the install-deps play is now looking at distro_yada_based >> even though it is running on the target. > > I think we need to detect both cases based on the target selection > (BOOTLINUX_TARGETS). Can you give this a try/check/review? > > For 9p targets (controller node, ie BOOTLINUX_9P), we keep the > distro_yada_based. For builder targets (BOOTLINUX_BUILDER) we use the > ansible_os_family: > > diff --git a/playbooks/roles/bootlinux/tasks/install-deps/main.yml b/playbooks/roles/bootlinux/tasks/install-deps/main.yml > index 058f3926..88d2baad 100644 > --- a/playbooks/roles/bootlinux/tasks/install-deps/main.yml > +++ b/playbooks/roles/bootlinux/tasks/install-deps/main.yml > @@ -1,15 +1,36 @@ > --- > -- name: Debian-specific setup > +- name: Debian-specific setup (9p/controller node) > ansible.builtin.import_tasks: debian/main.yml > when: > - distro_debian_based|bool > + - bootlinux_9p|bool > > -- name: SuSE-specific setup > +- name: Debian-specific setup (builder node) > + ansible.builtin.import_tasks: debian/main.yml > + when: > + - bootlinux_builder|bool > + - ansible_os_family == "Debian" > + > +- name: SuSE-specific setup (9p/controller node) > ansible.builtin.import_tasks: suse/main.yml > when: > - distro_suse_based|bool > + - bootlinux_9p|bool > > -- name: Red Hat-specific setup > +- name: SuSE-specific setup (builder node) > + ansible.builtin.import_tasks: suse/main.yml > + when: > + - bootlinux_builder|bool > + - ansible_os_family == "Suse" > + > +- name: Red Hat-specific setup (controller node) > ansible.builtin.import_tasks: redhat/main.yml > when: > - distro_redhat_based|bool > + - bootlinux_9p|bool > + > +- name: Red Hat-specific setup (builder node) > + ansible.builtin.import_tasks: redhat/main.yml > + when: > + - bootlinux_builder|bool > + - ansible_os_family == "RedHat" > > IIUC, this should return the correct ansible_os_family value when builder target > is selected because the task is executed on the guest with --limit baseline:dev. Hi Daniel - None of these tasks will execute if bootlinux_targets == true, AFAICT. Why can't this work based on which host the install-deps tasks are running on? That was the original design I had in mind, and seems most Ansible-like. -- Chuck Lever