Bug 1226192 - cups allows library versions to be different, causing symbol lookup error: /usr/lib64/libcupsmime.so.1: undefined symbol: _cups_debug_printf
Summary: cups allows library versions to be different, causing symbol lookup error: /u...
Status: RESOLVED FIXED
Alias: None
Product: PUBLIC SUSE Linux Enterprise Server 15 SP5
Classification: openSUSE
Component: Basesystem (show other bugs)
Version: unspecified
Hardware: Other Other
: P5 - None : Normal
Target Milestone: ---
Assignee: Johannes Meixner
QA Contact:
URL: https://openqa.suse.de/tests/14568261...
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2024-06-11 13:53 UTC by Timo Jyrinki
Modified: 2024-07-16 07:20 UTC (History)
1 user (show)

See Also:
Found By: openQA
Services Priority:
Business Priority:
Blocker: Yes
Marketing QA Status: ---
IT Deployment: ---


Attachments
showing the version differences visually (306.53 KB, image/png)
2024-06-11 13:53 UTC, Timo Jyrinki
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Timo Jyrinki 2024-06-11 13:53:42 UTC
Created attachment 875426 [details]
showing the version differences visually

This is only seen on 15-SP5 QU4 candidate testing, but has persisted multiple snapshots so seems not going away automatically with refreshed media. It was not an issue on released 15-SP5 QU3, and it is not an issue on 15-SP5 GA + maintenance updates.

The symptom / reproduce steps are (but see below):

1. zypper in cups
2. cupsd -t

Expected result: '"/etc/cups/cups-files.conf"  is OK'

Actual result: 'cupsd: symbol lookup error: /usr/lib64/libcupsmime.so.1: undefined symbol: _cups_debug_printf'

I've found that for some reason, using the QU media and installing cups results in having the following packages of version 2.2.7-150000.3.54.1: cups cups-client cups-config cups-filters libcups2 but the following packages 2.2.7-150000.3.40.1: libcupscgi1 libcupsimage2 libcupsmime1 libcupsppdc1 

I was not able to reproduce it manually by installing the current 142.7 image, but I'm able to give access to an automated testing machine where the build is installed and the problem can be / has been reproduced.

It can be manually fixed with zypper in libcupscgi1 libcupsimage2 libcupsmime1 libcupsppdc1, but if there's a hard dependency between the versions, the dependency should be a forced one.

There also could be some archive / media creation problem since it is not going away with a new build (QU snapshot 1 and snapshot 2 had almost two weeks in between).

in openQA:
Always latest result in this scenario: https://openqa.suse.de/tests/14568261
Last good: Build 137.77 (QU3) https://openqa.suse.de/tests/14069530
Comment 1 Timo Jyrinki 2024-06-11 14:04:17 UTC
Adding that for my manual testing I tried installing manually, while where the problem can be reproduced used this autoyast file https://github.com/os-autoinst/os-autoinst-distri-opensuse/blob/master/data/security/autoyast/create_hdd_gnome_x86_64.xml (or one of the others, the problem is also shown on aarch64 and x86_64 uefi).
Comment 2 Johannes Meixner 2024-07-02 10:40:53 UTC
My analysis:

CUPS in SLE15 only
"Requires: libcups2 = %{version}-%{release}"
via
"Requires: cups-client = %{version}-%{release}"
does not require the other CUPS libraries packages
libcupscgi1 libcupsimage2 libcupsmime1 libcupsppdc1
------------------------------------------------------------
# osc cat SUSE:SLE-15:Update cups cups.spec \
 | grep '^%package.*libcups'
%package -n libcups2
%package -n libcupscgi1
%package -n libcupsimage2
%package -n libcupsmime1
%package -n libcupsppdc1

# osc cat SUSE:SLE-15:Update cups cups.spec
...
Name:           cups
...
Requires:       cups-client = %{version}-%{release}
...
%package client
...
Requires:       libcups2 = %{version}-%{release}
------------------------------------------------------------

In contrast CUPS in Factory does
require the exact matching version-release
of all libcups* sub-packages:
------------------------------------------------------------
# osc cat openSUSE:Factory cups cups.spec \
 | grep '^%package.*libcups'
%package -n libcups2
%package -n libcupsimage2

# osc cat openSUSE:Factory cups cups.spec
...
Name:           cups
...
Requires:       cups-client = %{version}-%{release}
...
%package client
...
Requires:       libcups2 = %{version}-%{release}
Requires:       libcupsimage2 = %{version}-%{release}
------------------------------------------------------------

My "forensic archaeology" results how things changed:

In older times (e.g. in SLE12)
there was only one CUPS libraries package "cups-libs"
and CUPS requires its exact matching version-release
via "Requires: cups-client = %{version}-%{release}"
------------------------------------------------------------
# osc cat SUSE:SLE-12:Update cups cups.spec
...
Name:           cups
...
Requires:       cups-client = %{version}-%{release}
...
%package client
...
Requires:       cups-libs = %{version}-%{release}
------------------------------------------------------------

The relevant cups.spec contents in SLE15 CUPS
originate from the CUPS in Factory change
with revision number 142
------------------------------------------------------------
# osc rdiff -c 142 openSUSE:Factory cups
...
+Fri Oct 13 11:11:10 UTC 2017 - jengelh@inai.de
+
+- Implement shared library packaging guideline [boo#862112]
...
 Name:           cups
...
 Requires:       cups-client = %{version}-%{release}
-Requires:       cups-libs = %{version}-%{release}
...
+%package -n libcups2
...
+%package -n libcupscgi1
...
+%package -n libcupsimage2
...
+%package -n libcupsmime1
...
+%package -n libcupsppdc1
...
-%package libs
...
 %package client
...
-Requires:       cups-libs = %{version}-%{release}
+Requires:       libcups2 = %{version}-%{release}
------------------------------------------------------------
which ony requires the exact matching version-release
of libcups2 but it does no longer require the other
now separated / splitted CUPS libraries packages
libcupscgi1 libcupsimage2 libcupsmime1 libcupsppdc1

This missing requirements were added in CUPS in Factory
via a change with revision number 145
------------------------------------------------------------
# osc rdiff -c 145 openSUSE:Factory cups
...
 %package client
...
 Requires:       libcups2 = %{version}-%{release}
+Requires:       libcupscgi1 = %{version}-%{release}
+Requires:       libcupsimage2 = %{version}-%{release}
+Requires:       libcupsmime1 = %{version}-%{release}
+Requires:       libcupsppdc1 = %{version}-%{release}
------------------------------------------------------------

In CUPS in Factory the change
with revision number 142 happened on 2017-11-02 and
the change with revision number 145 happened on 2018-04-25
------------------------------------------------------------
# osc log openSUSE:Factory cups
...
r145 | dimstar_suse | 2018-04-25 07:57:26 | ...
...
r142 | dimstar_suse | 2017-11-02 09:23:22 | ...
------------------------------------------------------------

CUPS for SLE15 was branched / forked from CUPS in Factory
between 2017-07-31 and 2017-11-25 or 2018-03-30
------------------------------------------------------------
# osc log SUSE:SLE-15:GA cups

r5 | fcrozat | 2018-03-30 06:39:00 | ...
CUPS version upgrade to the 2.2.7 bug fix release ...

r4 | sbehlert | 2017-11-25 21:49:14 | ...
Automatic request from openSUSE.org:openSUSE:Factory
by UpdateCrawler

r3 | fcrozat | 2017-11-03 08:49:41 | ...
Automatic request from openSUSE.org:openSUSE:Factory
by UpdateCrawler

r2 | fcrozat | 2017-09-28 11:51:17 | ...
Automatic request from openSUSE.org:openSUSE:Factory
by UpdateCrawler

r1 | oertel | 2017-07-31 23:49:51 | ...
osc copypac from project:SUSE:Factory:Head
package:cups revision:93
------------------------------------------------------------

So in the CUPS in Factory change with revision number 145
the part that requires the exact matching version-release
of the other separated / splitted CUPS libraries packages
is missing in CUPS for SLE15.