I tried to upgrade my laptop from 2008.05 to 2009.06. Following the
instructions at
http://opensolaris.org/os/project/indiana/resources/relnotes/200906/x86/#upgrade
I ran the listed commands, up to pkg install SUNWinstall-libs. This
resulted in a rather catastrophic failure:
$ pfexec pkg install SUNWinstall-libs
DOWNLOAD PKGS FILES XFER (MB)
Completed 20/20 3556/3556 58.44/58.44
PHASE ACTIONS
Install Phase 1332/6412 Action install failed for
'lib/libc.so.1' (pkg:/SUNWcsl):
OSError: [Errno 16] Device busy
The Boot Environment opensolaris failed to be updated. A snapshot was taken
before the failed attempt and is mounted here /tmp/tmpCLFCN_. Use 'beadm
unmount opensolaris_static:-:2009-06-02-19:51:57' and then 'beadm activate
opensolaris_static:-:2009-06-02-19:51:57' if you wish to boot to this BE.
pkg: An unexpected error happened during installation: [Errno 16] Device busy
Traceback (most recent call last):
File "/usr/bin/pkg", line 2598, in ?
__ret = main_func()
File "/usr/bin/pkg", line 2541, in main_func
return install(mydir, pargs)
File "/usr/bin/pkg", line 767, in install
api_inst.execute_plan()
File "/usr/lib/python2.4/vendor-packages/pkg/client/api.py", line 525, in
execute_plan
self.img.imageplan.execute()
File "/usr/lib/python2.4/vendor-packages/pkg/client/imageplan.py", line 719,
in execute
p.execute_install(src, dest)
File "/usr/lib/python2.4/vendor-packages/pkg/client/pkgplan.py", line 260, in
execute_install
dest.install(self, src)
File "/usr/lib/python2.4/vendor-packages/pkg/actions/file.py", line 197, in
install
portable.rename(temp, final_path)
File "/usr/lib/python2.4/vendor-packages/pkg/portable/os_unix.py", line 197,
in rename
os.rename(src, dst)
OSError: [Errno 16] Device busy
pkg: This is an internal error. Please let the developers know about this
problem by filing a bug at http://defect.opensolaris.org and including the
above traceback and this message. The version of pkg(5) is '26c3e2407c53'.
$ ping -s pkg.opensolaris.org
$ ping -s pkg.opensolaris.org
$ truss -v all ping -s pkg.opensolaris.org
Bad system call(coredump)
$ date
Bad system call(coredump)
$ echo *core*
core
[ ... ]
At this point it was not possible to exec any programs (everything dumps
core with SIGSYS), although the existing shell, X server, and ssh
sessions continued running. I assume that a corrupt or incompatible
/lib/libc.so.1 was installed. The BE was unbootable, so I had to create
a new BE from the snapshot (thank goodness for that).
So, Is this a previously unknown problem (should I file a bug?) Is it
possible to upgrade my system or should I chuck it and re-install from
CD?
And for posterity, someone might find it useful to know the steps to
recover from a pkg crash like this that leaves the active BE unbootable.
And maybe something could automate these steps or provide these hints in
the beadm man page - I had to do a lot of stumbling in the dark to
figure out the following:
In grub, select the newly created snapshot BE
(opensolaris_static:-:2009-06-02-19:51:57 in my case).
Ignore the barrage of error messages and enter the root password for
maintenance mode.
# zfs mount rpool
# mount -F tmpfs tmpfs /var/tmp
# mount -F tmpfs tmpfs /var/log
# beadm create RECOVER (name of your choice here)
# reboot
Select the new "RECOVER" item in the grub menu. At least on my system,
the grub menu was invisible, but by pressing down-arrow the right number
of times (it will be the last item in the menu) and enter, it can be
used.
Once the system boots, log in and run:
$ pfexec beadm activate RECOVER
(This seems to fix the invisible grub menu problem.)
-=] Ford [=-