[libvirt] [PATCH RFC V2] guests: Add support for openSUSE
Fabiano Fidêncio
fidencio at redhat.com
Mon Dec 2 20:32:07 UTC 2019
On Mon, Dec 2, 2019 at 8:33 PM Andrea Bolognani <abologna at redhat.com> wrote:
>
> On Mon, 2019-12-02 at 16:41 +0100, Fabiano Fidêncio wrote:
> > Jim,
> >
> > Firstly, sorry it took so long for me to give it a try in your patch.
> >
> > Now, comments inline ...
> >
> > On Tue, Nov 26, 2019 at 1:52 AM Jim Fehlig <jfehlig at suse.com> wrote:
> > > This change adds support for the latest openSUSE Leap and
> > > openSUSE Tumbleweed guests.
> > >
> > > Signed-off-by: Jim Fehlig <jfehlig at suse.com>
> > > ---
> > >
> > > This version of the patch overcomes the 'lci build' issues noted in V1
> > > and works well for openSUSE Leap 15.1 and Tumbleweed. I'm still of the
> > > opinion of only supporting the latest Leap since there is only a six
> > > month support overlap between versions. Version x-1 is only supported
> > > six months after x is released.
> >
> > I will leave this up to you and Andrea. I'd say, whatever floats your boat. :-)
>
> That won't work if, as you said earlier, you can't seamlessly move
> from eg. 15.1 to 15.2: either you can move from one minor version to
> the next with a simple upgrade, as is the case for CentOS and Debian,
> or you need to consider the two as separate entities, as is the case
> for Fedora, otherwise libvirt-opensuse-15 will mean vastly different
> things depending on whether you installed in the 15.1 timeframe or
> in the 15.2 timeframe...
>
> It's annoying, but I'm afraid we're going to have to include the
> minor version number in the name even though we're only likely to
> ever support one 42.x and one 15.x at any given time.
>
> One more note about naming: I just remembered why I decided for
> libvirt-ubuntu-18 instead of the more obvious libvirt-ubuntu-18.04
> back then: the guest name is also used as the hostname, and I wanted
> to avoid having extra dots in the latter. Perhaps that's overzealous
> of me, but assuming we want to stick with that principle then we
> should call this libvirt-opensuse-151, and later rename the
> aforementioned to libvirt-ubuntu-1804 to be consistent.
>
> > > 'lci update ... libvirt' fails in task "Configure hostname":
> > >
> > > fatal: [libvirt-opensuse-tumbleweed]: FAILED! => {"changed": false, "msg": "hostname module cannot be used on platform Linux (Opensuse-tumbleweed)"}
> >
> > It seems to be an Ansible bug: https://github.com/ansible/ansible/issues/42726
>
> Is it possible that this failed simply because the hostname command
> is not available? You mention this below.
No. When testing this patch I was already installing "hostname" in the box.
>
> > > Not sure why that is the case. But more importantly, even though it
> > > doesn't fail, the "Update installed packages" task doesn't install any
> > > of the packages required to build libvirt.
>
> That step merely updates the packages that are already installed.
>
> > > I suppose that agrees with
> > > guests/REAMDME, but how then are the packages required to build $project
> > > installed? How/when is the list of packages required to build $project
> > > conveyed to $package_manager?
>
> That happens later[1].
>
> > > 'lcitool build libvirt-opensuse-tumbleweed libvirt' fails in the
> > > "Gathering Facts" task:
> > >
> > > fatal: [libvirt-opensuse-tumbleweed]: UNREACHABLE! => {"changed": false, "msg": "Invalid/incorrect password: ", "unreachable": true}
> >
> > I didn't get this far, I'd firstly try to get the first part fixed as
> > this whole thing is sequential ...
>
> We can add Leap 15.1 first, and worry about tumbleweed later. It's
> probably a good idea to add them in separate commits anyway.
>
> > > Passing --debug to the command didn't help with determining what needed
> > > the password. ssh? I can't find where the "Gathering Facts" task is
> > > defined.
>
> That's not a custom task, but rather something that Ansible does
> automatically when it connects to a host.
>
> > > The $root_password_file passed to /usr/bin/ansible-playbook
> > > contains the correct password for the root user. /me needs to figure
> > > out how to better debug this stuff :-).
>
> I'm pretty sure 'lcitool build' failed simply because 'lcitool
> update' failed before it, and more specifically didn't manage to get
> far enough to set up a regular user to use for builds.
>
> I agree debugging this kind of issue is not exactly trivial...
> Unfortunately there's no easy solution to the problem either :(
>
> > > +++ b/guests/configs/autoinst.xml
> > > @@ -0,0 +1,75 @@
> > > +<?xml version="1.0"?>
> > > +<!DOCTYPE profile>
> > > +<profile
> > > + xmlns="http://www.suse.com/1.0/yast2ns"
> > > + xmlns:config="http://www.suse.com/1.0/configns">
> > > + <general>
> > > + <mode>
> > > + <confirm config:type="boolean">false</confirm>
> >
> > Here, please, also add:
> > <second_stage config:type="boolean">false</second_stage>
> >
> > It'll avoid an unnecessary reboot in the VM.
>
> I didn't test this, but it sounds reasonable. I'll give it an actual
> go tomorrow :)
>
> [...]
> > > + <software>
> > > + <install_recommended config:type="boolean">false</install_recommended>
> > > + <products config:type="list">
> > > + <product>openSUSE</product>
> > > + </products>
> > > + <patterns config:type="list">
> > > + <pattern>base</pattern>
> > > + <pattern>minimal_base</pattern>
> > > + <pattern>yast2_basis</pattern>
> > > + </patterns>
> > > + <packages config:type="list">
> >
> > Here, please, also add:
> > <package>hostname</package>
> >
> > Seems that lcitools rely on having hostname installed in the machine
> > and "hostname" is used before actually installing the packages. Or,
> > IOW, trying to install the package afterwards wouldn't work. (I gave
> > it a try).
>
> This also sounds good.
>
> > > +++ b/guests/host_vars/libvirt-opensuse-15/docker.yml
> > > @@ -0,0 +1,2 @@
> > > +---
> > > +docker_base: opensuse/leap:15
>
> This should point to
>
> opensuse/leap:15.1
>
> instead.
>
> > > +++ b/guests/host_vars/libvirt-opensuse-15/main.yml
> > > @@ -0,0 +1,22 @@
> > > +---
> > > +projects:
> > > + - libosinfo
> > > + - libvirt
> > > + - libvirt-cim
> > > + - libvirt-dbus
> > > + - libvirt-glib
> > > + - libvirt-perl
> > > + - libvirt-python
> > > + - libvirt-sandbox
> > > + - libvirt-tck
> > > + - osinfo-db
> > > + - osinfo-db-tools
> > > + - virt-manager
> > > + - virt-viewer
>
> Since right now we're only aiming at building libvirt, we should only
> list that project: it's a good starting point, and we can add more as
> we make sure we can actually 'lcitool build' them successfully.
>
> > > +package_format: 'rpm'
> > > +package_manager: 'zypper'
> > > +os_name: 'OpenSUSE'
> > > +os_version: '15'
>
> os_version should be '151' if we follow the naming scheme outlined
> earlier.
>
> [...]
> > > +++ b/guests/lcitool
> > > - name: Clean up packages after update
> > > shell: '{{ package_manager }} clean packages -y && {{ package_manager }} autoremove -y'
> > > args:
> > > warn: no
> > > when:
> > > - package_format == 'rpm'
> > > + - not os_name == "OpenSUSE"
>
> This should be
>
> os_name != 'OpenSUSE'
>
> [...]
> > > +++ b/guests/vars/mappings.yml
> > > perl-Archive-Tar:
> > > deb: perl
> > > pkg: perl5
> > > rpm: perl-Archive-Tar
> > > + OpenSUSE: perl-Archive-Tar-Wrapper
>
> This doesn't look right:
>
> [test at libvirt-fedora-31 ~]$ rpm -ql perl-Archive-Tar
> /usr/bin/ptar
> /usr/bin/ptardiff
> /usr/bin/ptargrep
> /usr/share/doc/perl-Archive-Tar
> /usr/share/doc/perl-Archive-Tar/CHANGES
> /usr/share/doc/perl-Archive-Tar/README
> /usr/share/man/man1/ptar.1.gz
> /usr/share/man/man1/ptardiff.1.gz
> /usr/share/man/man1/ptargrep.1.gz
> /usr/share/man/man3/Archive::Tar.3pm.gz
> /usr/share/man/man3/Archive::Tar::File.3pm.gz
> /usr/share/perl5/vendor_perl/Archive
> /usr/share/perl5/vendor_perl/Archive/Tar
> /usr/share/perl5/vendor_perl/Archive/Tar.pm
> /usr/share/perl5/vendor_perl/Archive/Tar/Constant.pm
> /usr/share/perl5/vendor_perl/Archive/Tar/File.pm
> [test at libvirt-fedora-31 ~]$
>
> [test at libvirt-opensuse-15 ~]$ rpm -ql perl-Archive-Tar-Wrapper
> /usr/lib/perl5/vendor_perl/5.26.1/Archive
> /usr/lib/perl5/vendor_perl/5.26.1/Archive/Tar
> /usr/lib/perl5/vendor_perl/5.26.1/Archive/Tar/Wrapper.pm
> /usr/lib/perl5/vendor_perl/5.26.1/x86_64-linux-thread-multi
> /usr/share/doc/packages/perl-Archive-Tar-Wrapper
> /usr/share/doc/packages/perl-Archive-Tar-Wrapper/Changes
> /usr/share/doc/packages/perl-Archive-Tar-Wrapper/README
> /usr/share/man/man3/Archive::Tar::Wrapper.3pm.gz
> [test at libvirt-opensuse-15 ~]$
>
> > > python2-setuptools:
> > > CentOS7: python2-setuptools
> > > + OpenSUSE: python2-setuptools
>
> We might be able to get away without installing Python 2 packages;
> they certainly shouldn't be necessary to build libvirt.
>
> > > python3-pip:
> > > CentOS7: python3-pip
> > > Debian9: python3-pip
> > > + OpenSUSE: python3-pip
> > > Ubuntu16: python3-pip
> > > Ubuntu18: python3-pip
>
> Installing pip isn't necessary either, since openSUSE Leap 15.1
> contains Meson.
>
> > > wireshark:
> > > deb: wireshark-dev
> > > Fedora: wireshark-devel
> > > + OpenSUSE: wireshark-devel
> > > cross-policy-deb: skip
>
> This now makes more sense as
>
> wireshark:
> deb: wireshark-dev
> rpm: wireshark-devel
> CentOS:
> cross-policy-deb: skip
>
> > > xen:
> > > Fedora: xen-devel
> > > + OpenSUSE: xen-devel
> > > x86_64-deb: libxen-dev
> > > armv7l-deb: libxen-dev
> > > aarch64-deb: libxen-dev
>
> Same as above.
>
> > Apart from the comments inline, I had to add the following patch in
> > order to get Leap working:
> >
> > ```
> > diff --git a/guests/playbooks/build/jobs/defaults.yml
> > b/guests/playbooks/build/jobs/defaults.yml
> > index 48cf643..eb4dfd5 100644
> > --- a/guests/playbooks/build/jobs/defaults.yml
> > +++ b/guests/playbooks/build/jobs/defaults.yml
> > @@ -10,6 +10,7 @@ all_machines:
> > - libvirt-freebsd-11
> > - libvirt-freebsd-12
> > - libvirt-freebsd-current
> > + - libvirt-opensuse-15
> > - libvirt-ubuntu-16
> > - libvirt-ubuntu-18
> > rpm_machines:
> > diff --git a/guests/playbooks/build/projects/libvirt.yml
> > b/guests/playbooks/build/projects/libvirt.yml
> > index 4b3dfdf..3e3dbba 100644
> > --- a/guests/playbooks/build/projects/libvirt.yml
> > +++ b/guests/playbooks/build/projects/libvirt.yml
> > @@ -19,6 +19,7 @@
> > - libvirt-fedora-30
> > - libvirt-fedora-31
> > - libvirt-fedora-rawhide
> > + - libvirt-opensuse-15
> > - libvirt-ubuntu-16
> > - libvirt-ubuntu-18
> > - include: '{{ playbook_base }}/jobs/autotools-check-job.yml'
>
> These changes are only necessary to make 'lcitool build' work, and
> should go in a separate commit.
>
> > diff --git a/guests/playbooks/update/tasks/paths.yml
> > b/guests/playbooks/update/tasks/paths.yml
> > index 770680e..c258ad2 100644
> > --- a/guests/playbooks/update/tasks/paths.yml
> > +++ b/guests/playbooks/update/tasks/paths.yml
> > @@ -17,7 +17,7 @@
> > - su
> >
> > - name: 'Look for files'
> > - shell: 'find /etc /usr/local/etc -name {{ item }} 2>/dev/null'
> > + shell: 'find /usr/local/etc -name {{ item }} 2>/dev/null || find
> > /etc -name {{ item }} 2>/dev/null'
> > register: find
> > with_items:
> > - sudoers
> > diff --git a/guests/playbooks/update/tasks/users.yml
> > b/guests/playbooks/update/tasks/users.yml
> > index 0470686..bf149da 100644
> > --- a/guests/playbooks/update/tasks/users.yml
> > +++ b/guests/playbooks/update/tasks/users.yml
> > @@ -18,12 +18,18 @@
> > line: 'PermitRootLogin without-password'
> > state: present
> >
> > +- name: '{{ flavor }}: Ensure group exists'
> > + group:
> > + name: '{{ flavor }}'
> > + state: present
> > +
> > - name: '{{ flavor }}: Create user account'
> > user:
> > name: '{{ flavor }}'
> > comment: '{{ flavor }}'
> > password: '*'
> > shell: '{{ bash }}'
> > + group: '{{ flavor }}'
> >
> > - name: '{{ flavor }}: Set password'
> > user:
> > ```
> >
> > I know Andrea suggested to change the way we deal with finding sudoers
> > but, IMHO, it shouldn't be a blocker for your patches. However, I'm
> > *not* the maintainer of the project. :-)
>
> I've posted these separately in
>
> https://www.redhat.com/archives/libvir-list/2019-December/msg00065.html
>
> and Fabiano already reviewed them! So consider them merged :)
>
> > So, with those changes, Leap works and we can build libvirt.
> >
> > What I'd suggest:
> > - Submit a patch just adding Leap (and then you'll have to have an
> > agreement with Andrea about whether we'll support 15 or 15.x);
> > - After that, let's try to figure out the issue with Tumbleweed and,
> > only then, try to have it merged;
> >
> > Does that make sense? Andrea, Jim, are we on the same page here?
>
> Yeah, we should get Leap 15.1 working first, and only then worry
> about Tumbleweed.
>
>
> Speaking of which: I've run into a fairly major problem with
> the Leap 15.1 support enabled by this patch: while unattended
> installation works as expected on my laptop (Fedora 31), when I try
> the same steps on the CentOS CI production environment (CentOS 7.5)
> it doesn't seem to find or recognize the autoinst.xml file: instead,
> I get a "please make sure your installation medium is available"
> message and the chance to input the information manually, which is
> obviously not what we want :) I'll try to figure out what's going
> wrong tomorrow.
>
>
> [1] guests/playbooks/update/tasks/packages.yml
> --
> Andrea Bolognani / Red Hat / Virtualization
>
More information about the libvir-list
mailing list