[Bug 1996489] Re: The unminimize command fails to reinstall packages with missing files in the `share` and `locale` directories

Łukasz Zemczak 1996489 at bugs.launchpad.net
Mon Jan 15 15:19:56 UTC 2024


Hello Naomi, or anyone else affected,

Accepted livecd-rootfs into jammy-proposed. The package will build now
and be available at https://launchpad.net/ubuntu/+source/livecd-
rootfs/2.765.33 in a few hours, and then in the -proposed repository.

Please help us by testing this new package.  See
https://wiki.ubuntu.com/Testing/EnableProposed for documentation on how
to enable and use -proposed.  Your feedback will aid us getting this
update out to other Ubuntu users.

If this package fixes the bug for you, please add a comment to this bug,
mentioning the version of the package you tested, what testing has been
performed on the package and change the tag from verification-needed-
jammy to verification-done-jammy. If it does not fix the bug for you,
please add a comment stating that, and change the tag to verification-
failed-jammy. In either case, without details of your testing we will
not be able to proceed.

Further information regarding the verification process can be found at
https://wiki.ubuntu.com/QATeam/PerformingSRUVerification .  Thank you in
advance for helping!

N.B. The updated package will be released to -updates after the bug(s)
fixed by this package have been verified and the package has been in
-proposed for a minimum of 7 days.

** Tags removed: verification-done-jammy
** Tags added: verification-needed-jammy

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to livecd-rootfs in Ubuntu.
https://bugs.launchpad.net/bugs/1996489

Title:
  The unminimize command fails to reinstall packages with missing files
  in the `share` and `locale` directories

Status in cloud-images:
  Fix Released
Status in livecd-rootfs package in Ubuntu:
  Fix Released
Status in livecd-rootfs source package in Jammy:
  Fix Committed
Status in livecd-rootfs source package in Lunar:
  Fix Released

Bug description:
  [Impact]
  ========

  The `unminimize` command in livecd-rootfs doesn't work out of the box.
  When `unminimize` is run, it results into the following errors:

      #9 47.54 Reinstalling packages with system documentation in /usr/share/doc/ ..
      #9 48.76 dpkg-query: error: --search needs at least one file name pattern argument
      #9 48.76
      #9 48.76 Use --help for help about querying packages.
      #9 48.80 Reading package lists...
      #9 49.49 Building dependency tree...
      #9 49.62 Reading state information...
      #9 49.76 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
      #9 49.76 Restoring system translations...
      #9 50.97 dpkg-query: error: --search needs at least one file name pattern argument
      #9 50.97
      #9 50.97 Use --help for help about querying packages.
      #9 51.01 Reading package lists...
      #9 51.71 Building dependency tree...
      #9 51.85 Reading state information...
      #9 52.00 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
      #9 53.18 Documentation has been restored successfully.
      #9 DONE 54.3s

  Specifically, the error is:

      dpkg-query: error: --search needs at least one file name pattern
  argument

  The problem is that prior to dpkg/1.21.0, there was a bug where dpkg
  -V/--verify couldn't list all the correct packages correctly but with
  that being fix and in archive since Jammy, this works perfectly but
  the syntax to report the missing files have changed. It just prints
  'missing' now. With that new format, we can now fix the regex to
  simply list the packages.

  [Test Plan]
  ===========

  $ lxc launch ubuntu-minimal-daily:jammy jtemp --vm
  $ lxc shell jtemp
  # apt update
  # unminimize

  This will result in the above error.

  # echo $?
  1

  Also notes that the above command failed to run successfully.

  OTOH, with the fixed package, unminimize will run just fine and "echo
  $?" would say 0.

  [Where Problems Could Occur]
  ============================

  unminimize is already broken so not a lot of things can go wrong at
  this point. However, if a user has already made amendments to their
  unminimize script and adapted it to work differently for them, this
  update could break their existing set up and functionality. But I
  don't envision that happening a lot, really.

  
  [OG Bug Report]
  ===============

  I am building a custom Docker image based on:

      https://github.com/microsoft/vscode-dev-
  containers/tree/main/containers/ubuntu

  I added a line that runs `yes | unminmize':

      https://github.com/nomirose/devcontainer/commit/1ba51c651c06b9ce71c73e7bf016939d989cfa2c#diff-4c1f94864a9642897e2fa6c1d532830b6d1a2ba9d6b6f2f149178dde32cf0e77R10-R11

  Here's from build log :

  https://github.com/nomirose/devcontainer/actions/runs/3451129967/jobs/5760151170#step:6:1565

  And here are the errors from the `uminmize` command:

      #9 47.54 Reinstalling packages with system documentation in /usr/share/doc/ ..
      #9 48.76 dpkg-query: error: --search needs at least one file name pattern argument
      #9 48.76
      #9 48.76 Use --help for help about querying packages.
      #9 48.80 Reading package lists...
      #9 49.49 Building dependency tree...
      #9 49.62 Reading state information...
      #9 49.76 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
      #9 49.76 Restoring system translations...
      #9 50.97 dpkg-query: error: --search needs at least one file name pattern argument
      #9 50.97
      #9 50.97 Use --help for help about querying packages.
      #9 51.01 Reading package lists...
      #9 51.71 Building dependency tree...
      #9 51.85 Reading state information...
      #9 52.00 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
      #9 53.18 Documentation has been restored successfully.
      #9 DONE 54.3s

  Specifically, the error is:

      dpkg-query: error: --search needs at least one file name pattern
  argument

  I copped `/usr/local/sbin/unminimize` to my local directory to see if
  I could debug what was doing on.

  When looking for packages with missing files in the `/usr/bin/man`
  directory, the script does this:

      dpkg -S /usr/share/man/ |sed 's|, |\n|g;s|: [^:]*$||' |
  DEBIAN_FRONTEND=noninteractive xargs apt-get install --reinstall -y

  However, for the `/usr/share/docs/` the script does this:

      dpkg --verify --verify-format rpm | awk '/..5......   \/usr\/share\/doc/ {print $2}' | sed 's|/[^/]*$||' | sort |uniq \
          | xargs dpkg -S | sed 's|, |\n|g;s|: [^:]*$||' | uniq | DEBIAN_FRONTEND=noninteractive xargs apt-get install --reinstall -y

  The script runs the same command for the `/usr/share/locale/`
  directory.

  In both cases, no packages ever make it to the `xargs dpkg -S`
  command, so the script throws an error. However, because the error
  occurs in a pipe, it is lost, and the script continues despite the
  `set -e` at the start (which is a bug in itself).

  However, with a little experimentation, I found that the original
  command for `/usr/local/bin` works perfectly for the
  `/usr/share/docs/` and `/usr/share/locale/` directories.

  Why not run the same command for all three directories? You could even
  wrap it in a function.

  However, you could improve performance by combining all three into a
  single command.

  The `unminimize` script notes:

      # Reinstallation takes place in two steps because a single dpkg --verified
      # command generates very long parameter list for "xargs dpkg -S" and may go
      # over ARG_MAX. Since many packages have man pages the second download
      # handles a much smaller amount of packages.

  I understand the concern about hitting `ARG_MAX`, but I think a better
  solution to that problem would be to use `xargs -n` to set a limit on
  the maximum number of arguments. This change would allow xargs to run
  `dpkg -S` as many times as need (to avoid hitting ARG_MAX).

  Doing it this way would also speed up the script.

  There are many packages with missing files in multiple minmized
  directories, meaning that as it stands, even if the bug was fixed,
  some packages would be re-installed twice, maybe even three times.

  (I have seen this for myself because I essentially wrote a shorter
  version of the script for my own use.)

To manage notifications about this bug go to:
https://bugs.launchpad.net/cloud-images/+bug/1996489/+subscriptions




More information about the foundations-bugs mailing list