During SST testing of upgrades in snv_80 we found that SUNWukspfw has
consistency issues after upgrades from s10u4 on sun4u hardware (but
looking at the i386 package, they have the same issue):
# pkgchk -n SUNWukspfw
ERROR: /kernel/misc/sparcv9/usbs49_fw
file size <7840> expected <0> actual
file cksum <6566> expected <42900> actual
The file size is actually not 0 but 7680 bytes (a bug in pkgchk):
-rwxr-xr-x 1 root sys 7680 Dec 11 22:05
/kernel/misc/sparcv9/usbs49_fw
The file "/kernel/misc/sparcv9/usbs49_fw" is marked as type "f",
"preserve" in SUNWukspfw/pkgmap:
1 f preserve kernel/misc/sparcv9/usbs49_fw 0755 root sys 7840 6566
1197410724
Since this is an upgrade and the file is marked as "preserve", it's
effectively an object delivered with s10u4, which is confirmed by
checking SUNWukspfw/pkgmap from s10u4:
1 e preserve kernel/misc/sparcv9/usbs49_fw 0755 root sys 7680 42900
1184352436
The file size and checksum match the file on our file system.
Tracking back the story of the change from type "e" to "f" in the
following CRs:
6367872 usbs49_fw module should not be replaced when upgrading system
6461653 elfsign errors found in SUNWukspfw
I understood that what happened was:
1) the firmware file (usbs49_fw) was first maked as "e" (user editable),
because its intent is to be replaced by the real firmware by the
end-user later,
2) this was causing elfsign issues, since editable files aren't signed
by default (CR 6461653),
3) the attempted fix was to change file type to "f" in snv_80 and flag
it as "preserve" so if the end-user replaces the placeholder binary
with the real firmware, it won't be lost on system upgrade (CR
6367872). Changing it to type "f" will automatically make it be
elfsigned.
This led to the upgrade issue we discovered and would also happen if
there was user provided firmware file.
I had also seen this when I did live upgrade testing from snv_70b to snv_82 on x86, pkgchk -n reports the following errors:
# pkgchk -n SUNWukspfw
ERROR: /kernel/misc/amd64/usbs49_fw
file size <8168> expected <8144> actual
file cksum <15114> expected <4546> actual
ERROR: /kernel/misc/usbs49_fw
file size <6888> expected <6848> actual
file cksum <62702> expected <50465> actual
#
The pkgmap had the following entries:
# more pkgmap
: 1 164
1 i copyright 93 8258 1201080055
1 i depend 1922 31916 1201074910
1 i i.preserve 1006 18462 1201080055
1 d none kernel 0755 root sys
1 d none kernel/misc 0755 root sys
1 d none kernel/misc/amd64 0755 root sys
1 f preserve kernel/misc/amd64/usbs49_fw 0755 root sys 8168 15114 1201409027
1 f preserve kernel/misc/usbs49_fw 0755 root sys 6888 62702 1201409027
1 i pkginfo 492 39159 1201409028
#
It should be:
1 e renameold kernel/misc/amd64/usbs49_fw 0755 root sys 8168 15114 1201409027
1 e renameold kernel/misc/usbs49_fw 0755 root sys 6888 62702 1201409027