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.
I was trying to update an old LTS system and
pkgwanted me to updatepkg. This is fine, except when I actually did it, it also tried to pull insystem/library:I was super confused, as the version for
system/libraryhas not been bumped, so how could have happened? Inspecting a bit closer, it seems that version ofpython-39has a dependency on a timestampedsystem/library:This is pretty unusual, and I don't think it's right.
pkgwill not allow the whole system to be updated without updatingpkgfirst, which requires a reboot into a new BE -- but that BE will contain an updatedsystem/librarywithout a matching update tosystem/kerneland 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.13or whatever.To get out of the hole I have used
pkg freeze python-39so that I can dopkg update -vfirst, and reboot into that boot environment, prior to trying to updatepkg.