Skip to content

incorrectly versioned OS bits leads to potentially fatal update #3209

@jclulow

Description

@jclulow

I was trying to update an old LTS system and pkg wanted me to update pkg. This is fine, except when I actually did it, it also tried to pull in system/library:

$ pfexec pkg install -v pkg
            Packages to update:         3
     Estimated space available:  18.71 GB
Estimated space to be consumed: 193.74 MB
       Create boot environment:       Yes
     Activate boot environment:       Yes
Create backup boot environment:        No
          Rebuild boot archive:        No

Changed packages:
omnios
  package/pkg
    0.5.11-151038.0:20210530T145223Z -> 0.5.11-151038.0:20230421T140529Z
  runtime/python-39
    3.9.9-151038.0 -> 3.9.15-151038.0
  system/library
    0.5.11-151038.0:20210705T094101Z -> 0.5.11-151038.0:20220220T121934Z

DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
Completed                                3/3     3157/3157    33.9/33.9  1.3M/s

PHASE                                          ITEMS
Removing old actions                             9/9
Installing new actions                         12/12
Updating modified actions                  4039/4039
Updating package state database                 Done
Updating package cache                           3/3
Updating image state                            Done
Creating fast lookup database                   Done
Reading search index                            Done
Updating search index                            3/3
Updating package cache                           2/2

A clone of 00dcb0bd exists and has been updated and activated.
On the next boot the Boot Environment 00dcb0bd-1 will be
mounted on '/'.  Reboot when ready to switch to this updated BE.

*** Reboot required ***
New BE: 00dcb0bd-1

I was super confused, as the version for system/library has not been bumped, so how could have happened? Inspecting a bit closer, it seems that version of python-39 has a dependency on a timestamped system/library:

$ pfexec pkg contents -r -t depend python-39@3.9.15-151038.0
TYPE    FMRI
require compress/bzip2
require database/sqlite-3
require developer/object-file
require library/expat
require library/libffi
require library/libxml2
require library/ncurses
require library/readline
require library/security/openssl
require library/zlib
require system/library/gcc-runtime
require system/library@0.5.11-151038.0:20220220T121934Z

This is pretty unusual, and I don't think it's right. pkg will not allow the whole system to be updated without updating pkg first, which requires a reboot into a new BE -- but that BE will contain an updated system/library without a matching update to system/kernel and other things with which it shares an incorporation requirement. The OS bits incorporation does not specify the package timestamps for OS bits, just the version.

When new OS bits (anything in the osnet-incorporation) come out, they should really get a version roll so that they can be handled correctly by other bits like this; e.g., 151038.0.13 or whatever.

To get out of the hole I have used pkg freeze python-39 so that I can do pkg update -v first, and reboot into that boot environment, prior to trying to update pkg.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions