[OpenIndiana-discuss] [OmniOS-discuss] pkg(5) in alternate roots

Jim Klimov jim at cos.ru
Thu Jul 2 09:33:31 UTC 2015


От: Dan McDonald <danmcd at omniti.com>
Дата: Wednesday, July 1, 2015 19:43
> 
> > On Jul 1, 2015, at 9:20 AM, Jim Klimov <jim at cos.ru> wrote:
> > 
> > The corresponding part of the script (and exact command-lines 
> involved) are here:
> > 
> > 
> > ...
> > 
> >         { echo "===== 
> Updating PKG software itself"
> >           
> ### This clause should fail if no 'pkg' updates were available, 
> or if a
> >           
> ### chrooted upgrade attempt with the new 'pkg' failed - both 
> ways fall
> >           
> ### through to altroot upgrade attempt
> >           if 
> /usr/bin/pkg -R "$BENEW_MNT" update --no-refresh --accept --deny-
> new-be --no-backup-be pkg; then \
> >             echo "===== Updating the image with new PKG software via chroot"
> >             chroot "$BENEW_MNT" /usr/bin/pkg -R / image-update --no-refresh --accept --deny-new-be --no-backup-be
> >           
> else false; fi; } || \
> >         { echo "===== 
> Updating the image with old PKG software via altroot"
> >           
> /usr/bin/pkg -R "$BENEW_MNT" image-update --no-refresh --accept -
> -deny-new-be --no-backup-be; } || \
> >         { echo "===== 
> Updating the image with old PKG software via altroot and allowed 
> refresh">           /usr/bin/pkg -R "$BENEW_MNT" image-update --accept --deny-new-be --no-backup-be; }
> 
> Can you run these, one at a time, by hand, so we all can see the 
> exact output per command that's run?  It'll help at least 
> me get a better bead on what's wrong.
> 
> Thanks,
> Dan


Most of the output was in the screenshot just above that, and I guess I found a workaround 
that should suffice (will test more today), but for the sake of completeness, here goes:


The old BE was OmniOS bloody updated a month ago (20150602Z070407), new one with an updated pkg program was made yesterday, starting as the old one's clone (export BENEW=omnios-20150701Z065339-test) and the relevant tree was mounted into "/a" with my splitroot scripts from github:



###############################


:; ./beadm-mount.sh
omnios-20150701Z065339-test does not exist or appear to be a valid BE.
Please check that the name of the BE provided is correct.
=== Will clone omnios-20150602Z070407 into omnios-20150701Z065339-test, ok? Using these settings:
BENEW=omnios-20150701Z065339-test
BENEW_DS=rpool/ROOT/omnios-20150701Z065339-test
BENEW_MNT=/a
BENEW_MPT=/a
BEOLD=omnios-20150602Z070407
BEOLD_DS=rpool/ROOT/omnios-20150602Z070407
BEOLD_MNT=/
BEOLD_MPT=/
EXCLUDE_ATTRS='org.opensolaris.libbe:uuid|canmount|mountpoint'
RPOOL=rpool
RPOOLALT=
RPOOL_ROOT=rpool/ROOT
RPOOL_SHARED=rpool/SHARED
    (Press ENTER or CTRL+C)


Created successfully
=== Created omnios-20150701Z065339-test based on omnios-20150602Z070407
=== Trying to replicate ZFS attributes from original to new BE...
===== ''
org.opensolaris.libbe:policy=static
org.openindiana.caiman:install=ready
===== '/opt'
compression=gzip-9
===== '/opt/local'
compression=gzip-9
===== '/usr'
compression=gzip-9
===== '/usr/local'
compression=gzip-9
===== '/var'
compression=gzip-9
===== '/var/db'
===== '/var/db/pkgin'
===== '/var/pkg'
compression=gzip-9
===== '/var/pkg/publisher'
=== Replicated custom ZFS attributes
Mounted successfully on: '/a'
=== Mounted omnios-20150701Z065339-test at /a
rpool/ROOT/omnios-20150701Z065339-test   153387008      721348   124154515     1%    /a
rpool/ROOT/omnios-20150701Z065339-test/usr   153387008      758981   124154515     1%    /a/usr
rpool/ROOT/omnios-20150701Z065339-test/usr/local   153387008          28   124154515     1%    /a/usr/local
rpool/ROOT/omnios-20150701Z065339-test/opt   153387008     1207927   124154515     1%    /a/opt
rpool/ROOT/omnios-20150701Z065339-test/opt/local   153387008      811058   124154515     1%    /a/opt/local
rpool/ROOT/omnios-20150701Z065339-test/var   153387008       18600   124154515     1%    /a/var
rpool/ROOT/omnios-20150701Z065339-test/var/db   153387008          33   124154515     1%    /a/var/db
rpool/ROOT/omnios-20150701Z065339-test/var/db/pkgin   153387008      665190   124154515     1%    /a/var/db/pkgin
rpool/ROOT/omnios-20150701Z065339-test/var/pkg   153387008       38370   124154515     1%    /a/var/pkg
rpool/ROOT/omnios-20150701Z065339-test/var/pkg/publisher   153387008        9364   124154515     1%    /a/var/pkg/publisher
=== BE clone completed!


=== To upgrade from upstream do:
pkg -R "/a" image-update --deny-new-be --no-backup-be && touch "/a/reconfigure" && bootadm update-archive -R "/a" && beadm umount "omnios-20150701Z065339-test"


TS="`date -u "+%Y%m%dZ%H%M%S"`"
zfs snapshot -r "rpool/SHARED at postupgrade-$TS"
zfs snapshot -r "rpool/ROOT/omnios-20150701Z065339-test at postupgrade-$TS"


beadm activate "omnios-20150701Z065339-test"
===


INFO: Unmounting any previous traces (if any - may fail), just in case
=== Unmounting BE omnios-20150701Z065339-test under '/a'...
===== beadm-unmounting omnios-20150701Z065339-test (/a)...
Unmounted successfully
Mounted successfully on: '/a'
BE                          Active Mountpoint Space Policy Created
omnios-20150701Z065339-test -      /a         15.0K static 2015-07-01 17:09
===== lofs-mount '/tmp' at '/a/tmp'
===== lofs-mount '/proc' at '/a/proc'
===== lofs-mount '/dev' at '/a/dev'
===== lofs-mount '/devices' at '/a/devices'
===== lofs-mount '/var/adm' at '/a/var/adm'
===== lofs-mount '/var/cores' at '/a/var/cores'
===== lofs-mount '/var/crash' at '/a/var/crash'
===== lofs-mount '/var/log' at '/a/var/log'
===== lofs-mount '/var/mail' at '/a/var/mail'
===== lofs-mount '/var/spool/clientmqueue' at '/a/var/spool/clientmqueue'
===== lofs-mount '/var/spool/mqueue' at '/a/var/spool/mqueue'
===== lofs-mount '/var/tmp' at '/a/var/tmp'


BE                          Active Mountpoint Space Policy Created
omnios-20150701Z065339-test -      /a         15.0K static 2015-07-01 17:09
rpool/ROOT/omnios-20150701Z065339-test   153387008      721348   124154491     1%    /a
rpool/ROOT/omnios-20150701Z065339-test/usr   153387008      758981   124154491     1%    /a/usr
rpool/ROOT/omnios-20150701Z065339-test/usr/local   153387008          28   124154491     1%    /a/usr/local
rpool/ROOT/omnios-20150701Z065339-test/opt   153387008     1207927   124154491     1%    /a/opt
rpool/ROOT/omnios-20150701Z065339-test/opt/local   153387008      811058   124154491     1%    /a/opt/local
rpool/ROOT/omnios-20150701Z065339-test/var   153387008       18600   124154491     1%    /a/var
rpool/ROOT/omnios-20150701Z065339-test/var/db   153387008          33   124154491     1%    /a/var/db
rpool/ROOT/omnios-20150701Z065339-test/var/db/pkgin   153387008      665190   124154491     1%    /a/var/db/pkgin
rpool/ROOT/omnios-20150701Z065339-test/var/pkg   153387008       38370   124154491     1%    /a/var/pkg
rpool/ROOT/omnios-20150701Z065339-test/var/pkg/publisher   153387008        9364   124154491     1%    /a/var/pkg/publisher
/tmp                    14744832          16    14744816     1%    /a/tmp
/proc                          0           0           0     0%    /a/proc
/dev                           0           0           0     0%    /a/dev
/devices                       0           0           0     0%    /a/devices
/var/adm               124172025        3071   124168954     1%    /a/var/adm
/var/cores               5241366          19     5241347     1%    /a/var/cores
/var/crash               5242880          19     5242861     1%    /a/var/crash
/var/log               124173841         337   124173504     1%    /a/var/log
/var/mail              124173921         114   124173807     1%    /a/var/mail
/var/spool/clientmqueue     2096461          26     2096435     1%    /a/var/spool/clientmqueue
/var/spool/mqueue        2096392          30     2096362     1%    /a/var/spool/mqueue
/var/tmp               124515436      360944   124154491     1%    /a/var/tmp


=== SUCCESS, (un)mounting operations completed for BE 'omnios-20150701Z065339-test' at '/a'


###############################




So, the tree above is mounted. Updating pkg under /a altroot itself (note the script does this via "pkg -R /a update pkg", but in the example below I do it via chroot to verify it generally works for this):



###############################

:;  chroot /a /usr/bin/pkg -R /  update pkg
WARNING: The boot environment being modified is not the active one.  Changes
made will not be reflected on the next boot.


            Packages to update:   1
       Create boot environment:  No
Create backup boot environment: Yes


DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
Completed                                1/1         16/16      0.3/0.3  183k/s


PHASE                                          ITEMS
Removing old actions                             1/1
Updating modified actions                      18/18
Updating package state database                 Done
Updating package cache                           1/1
Updating image state                            Done
Creating fast lookup database                   Done
Reading search index                            Done
Updating search index                            1/1
###############################


Now, trying to update packages inside that altroot in different ways...


What the script tries in the chroot:

###############################

:; chroot /a /usr/bin/pkg -R / image-update --no-refresh --accept --deny-new-be --no-backup-be
Creating Plan (Package planning:  425/427): /
pkg update: The proposed operation cannot be performed on a live image.
###############################


Trying to cheat with a non-verbatim "/" altroot string in the chroot:

###############################

:; chroot /a /usr/bin/pkg -R /// image-update --no-refresh --accept --deny-new-be --no-backup-be
pkg update: The proposed operation cannot be performed on a live image.
###############################


Trying the two other ways the script attempts (original BE's old pkg over a new BE's packages)

###############################

:; /usr/bin/pkg -R /a image-update --no-refresh --accept --deny-new-be --no-backup-be

Checking that pkg(5) is up to date -



WARNING: pkg(5) appears to be out of date, and should be updated before
running update.  Please update pkg(5) by executing 'pkg install
pkg:/package/pkg' as a privileged user and then retry the update.
###############################


###############################

:; /usr/bin/pkg -R /a image-update --accept --deny-new-be --no-backup-be
WARNING: pkg(5) appears to be out of date, and should be updated before
running update.  Please update pkg(5) by executing 'pkg install
pkg:/package/pkg' as a privileged user and then retry the update.
###############################




Finally, reading through the sources at /usr/bin/pkg and /usr/lib/python2.*/vendor-packages/pkg/ I tracked the error message to decision points to is_liveroot() to obscure envvars and/or configuration settings that cause some boolean regarding required new BE's to be true or false regardless of package-reboot settings.


Here is a piece which made me think it is intended for debug and so might not be a piece of committed API (would love to be wrong on this point): https://java.net/projects/ips/sources/pkg-gate/content/src/tests/api/t_bootenv.py#62


So, using PKG_LIVE_ROOT envvar, but no -R for altroot - no banana:

###############################

:; PKG_LIVE_ROOT=/ chroot /a /usr/bin/pkg image-update --no-refresh --accept --deny-new-be --no-backup-be
pkg update: The proposed operation cannot be performed on a live image.
###############################



Using both PKG_LIVE_ROOT envvar and -R for altroot - this is what ultimately succeeded, though only with a non-verbatim-"/" root directory string in this envvar:

###############################
:; PKG_LIVE_ROOT=/ chroot /a /usr/bin/pkg -R / image-update --no-refresh --accept --deny-new-be --no-backup-be
pkg update: The proposed operation cannot be performed on a live image.


:; PKG_LIVE_ROOT=/// chroot /a /usr/bin/pkg -R ///  image-update --no-refresh --accept --deny-new-be --no-backup-be

 Packages to remove:   1
Packages to install:   2
 Packages to update: 424
 Services to change:   1


DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
SUNWcs                                 1/427      476/7699    6.4/418.8  1.1M/s^C





:; PKG_LIVE_ROOT=/// chroot /a /usr/bin/pkg -R / image-update --no-refresh --accept --deny-new-be --no-backup-be
 Packages to remove:   1
Packages to install:   2
 Packages to update: 424
 Services to change:   1


DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
SUNWcs                                 1/427       96/7699    1.2/418.8  516k/s^C
###############################




More information about the openindiana-discuss mailing list