Source: libtirpc
Version: 1.3.4+ds-1
Severity: serious
Tags: patch pending sid trixie
Justification: library ABI skew on upgrade
User: debian-...@lists.debian.org
Usertags: time-t

NOTICE: these changes must not be uploaded to unstable yet!

Dear maintainer,

As part of the 64-bit time_t transition required to support 32-bit
architectures in 2038 and beyond
(https://wiki.debian.org/ReleaseGoals/64bit-time), we have identified
libtirpc as a source package shipping runtime libraries whose ABI
either is affected by the change in size of time_t, or could not be
analyzed via abi-compliance-checker (and therefore to be on the safe
side we assume is affected).

To ensure that inconsistent combinations of libraries with their
reverse-dependencies are never installed together, it is necessary to
have a library transition, which is most easily done by renaming the
runtime library package.

Since turning on 64-bit time_t is being handled centrally through a change
to the default dpkg-buildflags (https://bugs.debian.org/1037136), it is
important that libraries affected by this ABI change all be uploaded close
together in time.  Therefore I have prepared a 0-day NMU for libtirpc
which will initially be uploaded to experimental if possible, then to
unstable after packages have cleared binary NEW.

Please find the patch for this NMU attached.

If you have any concerns about this patch, please reach out ASAP.  Although
this package will be uploaded to experimental immediately, there will be a
period of several days before we begin uploads to unstable; so if information
becomes available that your package should not be included in the transition,
there is time for us to amend the planned uploads.



-- System Information:
Debian Release: trixie/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'testing'), (500, 'stable'), (1, 
'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 6.5.0-14-generic (SMP w/12 CPU threads; PREEMPT)
Kernel taint flags: TAINT_PROPRIETARY_MODULE, TAINT_OOT_MODULE
Locale: LANG=C, LC_CTYPE=C.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
diff -Nru libtirpc-1.3.4+ds/debian/changelog libtirpc-1.3.4+ds/debian/changelog
--- libtirpc-1.3.4+ds/debian/changelog  2023-11-12 23:45:44.000000000 +0000
+++ libtirpc-1.3.4+ds/debian/changelog  2024-02-02 08:35:04.000000000 +0000
@@ -1,3 +1,18 @@
+libtirpc (1.3.4+ds-1.1~exp1) experimental; urgency=medium
+
+  * Non-maintainer upload.
+  * Rename libraries for 64-bit time_t transition.
+  * Move library to /usr/; Closes: #1055959
+  * debian/libtirpc3t64.preinst: implement 'Protective diversions' (M8 
+    from https://subdivi.de/~helmut/dep17.html) to avoid files accidentally
+    being deleted on upgrade when moving between packages and also moving
+    between /lib and /usr/lib.  Because this package is present in the
+    bootstrap set in some configurations, these diversions must be kept
+    around until forky rather than being immediately removed in the
+    postinst.
+
+ -- Steve Langasek <vor...@debian.org>  Fri, 02 Feb 2024 08:35:04 +0000
+
 libtirpc (1.3.4+ds-1) unstable; urgency=medium
 
   [ Debian Janitor ]
diff -Nru libtirpc-1.3.4+ds/debian/clean libtirpc-1.3.4+ds/debian/clean
--- libtirpc-1.3.4+ds/debian/clean      2023-11-12 23:45:44.000000000 +0000
+++ libtirpc-1.3.4+ds/debian/clean      2024-02-02 08:35:04.000000000 +0000
@@ -1 +1,2 @@
 src/config.h
+debian/libtirpc3t64.preinst
diff -Nru libtirpc-1.3.4+ds/debian/control libtirpc-1.3.4+ds/debian/control
--- libtirpc-1.3.4+ds/debian/control    2023-11-12 23:45:44.000000000 +0000
+++ libtirpc-1.3.4+ds/debian/control    2024-02-02 08:35:04.000000000 +0000
@@ -13,7 +13,7 @@
 Section: libdevel
 Architecture: any
 Multi-Arch: same
-Depends: libtirpc3 (= ${binary:Version}), ${misc:Depends}
+Depends: libtirpc3t64 (= ${binary:Version}), ${misc:Depends}
 Description: transport-independent RPC library - development files
  This package contains a port of Sun's transport-independent RPC library to
  Linux. The library is intended as a replacement for the RPC code in the GNU C
@@ -21,12 +21,14 @@
  .
  This package contains the files needed for development against libtirpc.
 
-Package: libtirpc3
+Package: libtirpc3t64
+Provides: ${t64:Provides}
+Replaces: libtirpc3
 Architecture: any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${shlibs:Depends}, ${misc:Depends}, libtirpc-common (>= 
${source:Version})
-Breaks: nfs-common (<< 1:1.2.8-7), nfs-kernel-server (<< 1:1.2.8-7)
+Breaks: libtirpc3 (<< ${source:Version}), nfs-common (<< 1:1.2.8-7), 
nfs-kernel-server (<< 1:1.2.8-7)
 Description: transport-independent RPC library
  This package contains a port of Sun's transport-independent RPC library to
  Linux. The library is intended as a replacement for the RPC code in the GNU C
@@ -36,8 +38,8 @@
 Architecture: all
 Multi-Arch: foreign
 Depends: ${misc:Depends}
-Breaks: libtirpc1, libtirpc3 (<< 1.1.4-0.1~)
-Replaces: libtirpc1, libtirpc3 (<< 1.1.4-0.1~)
+Breaks: libtirpc1, libtirpc3t64 (<< 1.1.4-0.1~)
+Replaces: libtirpc1, libtirpc3t64 (<< 1.1.4-0.1~)
 Description: transport-independent RPC library - common files
  This package contains a port of Sun's transport-independent RPC library to
  Linux. The library is intended as a replacement for the RPC code in the GNU C
diff -Nru libtirpc-1.3.4+ds/debian/libtirpc3.install 
libtirpc-1.3.4+ds/debian/libtirpc3.install
--- libtirpc-1.3.4+ds/debian/libtirpc3.install  2023-11-12 23:45:44.000000000 
+0000
+++ libtirpc-1.3.4+ds/debian/libtirpc3.install  1970-01-01 00:00:00.000000000 
+0000
@@ -1 +0,0 @@
-lib/*/lib*.so.*
diff -Nru libtirpc-1.3.4+ds/debian/libtirpc3.symbols 
libtirpc-1.3.4+ds/debian/libtirpc3.symbols
--- libtirpc-1.3.4+ds/debian/libtirpc3.symbols  2023-11-12 23:45:44.000000000 
+0000
+++ libtirpc-1.3.4+ds/debian/libtirpc3.symbols  1970-01-01 00:00:00.000000000 
+0000
@@ -1,7 +0,0 @@
-libtirpc.so.3 libtirpc3 #MINVER#
-* Build-Depends-Package: libtirpc-dev
- (symver)TIRPC_0.3.0 1.0.2
- (symver)TIRPC_0.3.1 1.0.2
- (symver)TIRPC_0.3.2 1.0.2
- (symver)TIRPC_0.3.3 1.0.2
- (symver)TIRPC_PRIVATE 1.0.2
diff -Nru libtirpc-1.3.4+ds/debian/libtirpc3t64.install 
libtirpc-1.3.4+ds/debian/libtirpc3t64.install
--- libtirpc-1.3.4+ds/debian/libtirpc3t64.install       1970-01-01 
00:00:00.000000000 +0000
+++ libtirpc-1.3.4+ds/debian/libtirpc3t64.install       2024-02-02 
08:35:04.000000000 +0000
@@ -0,0 +1 @@
+usr/lib/*/lib*.so.*
diff -Nru libtirpc-1.3.4+ds/debian/libtirpc3t64.lintian-overrides 
libtirpc-1.3.4+ds/debian/libtirpc3t64.lintian-overrides
--- libtirpc-1.3.4+ds/debian/libtirpc3t64.lintian-overrides     1970-01-01 
00:00:00.000000000 +0000
+++ libtirpc-1.3.4+ds/debian/libtirpc3t64.lintian-overrides     2024-02-02 
08:35:04.000000000 +0000
@@ -0,0 +1 @@
+libtirpc3t64: package-name-doesnt-match-sonames libtirpc3
diff -Nru libtirpc-1.3.4+ds/debian/libtirpc3t64.preinst.in 
libtirpc-1.3.4+ds/debian/libtirpc3t64.preinst.in
--- libtirpc-1.3.4+ds/debian/libtirpc3t64.preinst.in    1970-01-01 
00:00:00.000000000 +0000
+++ libtirpc-1.3.4+ds/debian/libtirpc3t64.preinst.in    2024-02-02 
08:35:04.000000000 +0000
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+set -e
+
+# per Helmut, these can't be safely removed again (in package postinst)
+# until forky
+case $1 in
+       install)
+               for file in libtirpc.so.3 libtirpc.so.3.0.0; do
+                       dpkg-divert --package libtirpc3t64 --no-rename \
+                               --divert \
+                               /lib/#DEB_HOST_MULTIARCH#/$file.usr-is-merged \
+                               /lib/#DEB_HOST_MULTIARCH#/$file
+                done
+                ;;
+esac
+
+#DEBHELPER#
diff -Nru libtirpc-1.3.4+ds/debian/libtirpc3t64.symbols 
libtirpc-1.3.4+ds/debian/libtirpc3t64.symbols
--- libtirpc-1.3.4+ds/debian/libtirpc3t64.symbols       1970-01-01 
00:00:00.000000000 +0000
+++ libtirpc-1.3.4+ds/debian/libtirpc3t64.symbols       2024-02-02 
08:35:04.000000000 +0000
@@ -0,0 +1,7 @@
+libtirpc.so.3 libtirpc3t64 #MINVER#
+* Build-Depends-Package: libtirpc-dev
+ (symver)TIRPC_0.3.0 1.0.2
+ (symver)TIRPC_0.3.1 1.0.2
+ (symver)TIRPC_0.3.2 1.0.2
+ (symver)TIRPC_0.3.3 1.0.2
+ (symver)TIRPC_PRIVATE 1.0.2
diff -Nru libtirpc-1.3.4+ds/debian/rules libtirpc-1.3.4+ds/debian/rules
--- libtirpc-1.3.4+ds/debian/rules      2023-11-12 23:45:44.000000000 +0000
+++ libtirpc-1.3.4+ds/debian/rules      2024-02-02 08:35:04.000000000 +0000
@@ -23,17 +23,13 @@
 
 DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
 override_dh_install:
-       # Move libtirpc.so.* to /lib
-       mkdir -p debian/tmp/lib/$(DEB_HOST_MULTIARCH)
-       mv debian/tmp/usr/lib/*/libtirpc.so.* 
debian/tmp/lib/$(DEB_HOST_MULTIARCH)
-
-       # Fix up the -dev symlink
-       LINKTARGET=`readlink 
debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libtirpc.so`; \
-       ln -sf /lib/$(DEB_HOST_MULTIARCH)/$$LINKTARGET 
debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libtirpc.so
-
        dh_install -Nlibtirpc3-udeb
        dh_install -plibtirpc3-udeb --sourcedir=debian/tmp-udeb
 
 override_dh_auto_clean:
        rm -rf build-deb build-udeb
        rm -rf debian/tmp-udeb
+
+override_dh_installdeb:
+       sed -e"s/#DEB_HOST_MULTIARCH#/$(DEB_HOST_MULTIARCH)/" \
+               debian/libtirpc3t64.preinst.in > debian/libtirpc3t64.preinst

Reply via email to