[SRU] ucf fails to work for local diversions on Jammy

Bug #2061825 reported by Ponnuvel Palaniyappan
12
This bug affects 1 person
Affects Status Importance Assigned to Milestone
ucf (Ubuntu)
Fix Released
Undecided
Unassigned
Jammy
Incomplete
High
Ponnuvel Palaniyappan

Bug Description

[ Impact ]

When a dpkg-diversion is used to setup a package diversion and ucf for managing
the configuration files for chrony package, the postinst script of ucf fails
when installing chrony.

This issue isn't specific to chrony but can happen for any package whose
config files are managed by ucf.

This affects users on Jammy who use ucf. Newer versions of ucf have this bug
fixed already.

[ Test Plan ]

1. Create a Jammy container or VM
2. Setup a diversion for chrony.conf: dpkg-divert --package chrony --add --rename --divert /etc/chrony/chrony.conf.custom /etc/chrony/chrony.conf
3. Install chrony: apt install chrony -y
4. Notice the postinst script fail with syntax errors such as:
```
Preparing to unpack .../chrony_4.2-2ubuntu2_amd64.deb ...
Unpacking chrony (4.2-2ubuntu2) ...
Setting up chrony (4.2-2ubuntu2) ...
/usr/bin/ucf: 444: [: missing ]
grep: ]: No such file or directory
/usr/bin/ucf: 444: [: missing ]
grep: ]: No such file or directory
```
5. Install the package with the fix from the PPA: https://launchpad.net/~pponnuvel/+archive/ubuntu/ucf-jammy (to be replaced with the package from the -proposed pocket)
6. Repeat the same from steps 1 to 4 and notice no failures at step4.

[ Where problems could occur ]

Can further introduce similar bugs if the patch contains similar syntax
errors. Consequently local diversion may not take effect for packages
using ucf to manage configuration files.

[ Other Info ]

Upstream bug: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=979354

It's been fixed in version ucf/3.0043+nmu1. Lunar/Mantic/Noble all have the
ucf version with this patch.

Affects Jammy only and thus backported to only Jammy.

Tags: sts
Changed in ucf (Ubuntu):
status: New → Fix Released
Changed in ucf (Ubuntu Jammy):
status: New → In Progress
assignee: nobody → Ponnuvel Palaniyappan (pponnuvel)
importance: Undecided → High
summary: - ucf fails to work for local diversions on Jammy
+ [SRU] ucf fails to work for local diversions on Jammy
tags: added: sts
description: updated
Revision history for this message
Ponnuvel Palaniyappan (pponnuvel) wrote :

Attaching the debdiff.

Revision history for this message
Dariusz Gadomski (dgadomski) wrote :

Hey Pon, the debdiff contains changes to a bunch of files inside .pc which should not be included.

Can you try generating the debdiff again wtihout these changes?

Once of the ways would be to drop in a patch to d/patches and add it with quilt or apply it with the "patch" command and then run "dpkg-source --commit" to generate the patch for you.

Revision history for this message
Ponnuvel Palaniyappan (pponnuvel) wrote :

Thanks, Dariusz!

I've attached a new debdiff.

Revision history for this message
Heitor Alves de Siqueira (halves) wrote :

Hi Pon,

thanks for the revised debdiff! This seems to be a non-quilt package, so your approach of directly patching the ucf/ucfr scripts is correct. The only thing missing is running the update-maintainer script, as the ubuntu1 version requires having an ubuntu.com address on the maintainers field. This is something a sponsor can run easily, so don't worry about fixing it for now (but feel free to do it for future debdiffs!).

Before uploading this, I'd like to check about Focal; is that release affected at all? If it is, any reason why we shouldn't patch it?

Revision history for this message
Ponnuvel Palaniyappan (pponnuvel) wrote :

Thanks, Heitor. I'll remember to run `update-maintainer` going forward!

Re. Focal: The syntax error and relevant code was introduced in 3.0040 whereas Focal is using older ucf. Thus Focal is unaffected. Likewise Lunar/Mantic/Noble have the fixed version already. So this is a Jammy-only backport.

Revision history for this message
Heitor Alves de Siqueira (halves) wrote (last edit ):

Thanks for the confirmation on Focal, @pponnuvel!

I've tested your debdiff, and it seems to work correctly. Patch is also a straightforward cherry-pick from Debian.

Sponsored for Jammy, with the update-maintainer changes.

Revision history for this message
Robie Basak (racb) wrote :

I wondered if ucf is expected to handle dpkg-divert -ed files in the first place, since that seemed odd to me. It does seem like that's a feature the code was intended to support, although it's unclear to me if it ever worked, and it's not really documented anywhere I can find except that is implied by the manpage. So it seems like it's debatable as to whether this is a bugfix or a request to add a feature.

Looking at your description of "Impact", please could you expand on what you're trying to achieve? Why are you using dpkg-divert to divert configuration files installed by ucf? Did this method work in a previous release? Why aren't you writing chrony.conf and then using UCF_FORCE_CONFFOLD=1 instead, or just overwriting chrony.conf after installation, given that ucf is intended to gracefully handle local configuration file changes?

I ask because this seems like a risky change to make. ucf is widely used, we don't have the means to test a broad set of uses, it ships with no automated tests, and this particular "fix" was uploaded in a Debian NMU that has yet to be acknowledged by the maintainer.

I'd like to understand the use case and why it is essential to fix this in order to weigh up the risk please.

If we do decide to go ahead, then there are a few things that need fixing, please.

The Test Plan must include the common case - that ucf continues to work as expected when there is no diversion. Since there are no automated tests whatsoever, please include exercise of the common cases that ucf handles (installation, upgrade when packaging changes the configuration file, with and without local user modification, package removal/purge, etc).

Please fix the changelog description to explain what the actual user story is that is being fixed, so that users can easily see if the fix is relevant to them or not. For example: "Fix handling of configuration files diverted with dpkg-divert (LP: #...)". Feel free to mention other things like the syntax error if you wish, but just saying that you're fixing a syntax error doesn't really convey anything useful to most readers.

Changed in ucf (Ubuntu Jammy):
status: In Progress → Incomplete
Revision history for this message
Robie Basak (racb) wrote (last edit ):

> * run update-maintainer script

FWIW, it's not necessary to mention this directly. It is correct to do it, but convention is to skip mentioning it in the changelog because otherwise we'd have to unnecessarily mention it on nearly every Ubuntu upload.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.