Home | History | Annotate | Download | only in scripts
      1      0     stevel #!/bin/ksh
      2      0     stevel #
      3      0     stevel # CDDL HEADER START
      4      0     stevel #
      5      0     stevel # The contents of this file are subject to the terms of the
      6   1106        mrj # Common Development and Distribution License (the "License").
      7   1106        mrj # You may not use this file except in compliance with the License.
      8      0     stevel #
      9      0     stevel # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10      0     stevel # or http://www.opensolaris.org/os/licensing.
     11      0     stevel # See the License for the specific language governing permissions
     12      0     stevel # and limitations under the License.
     13      0     stevel #
     14      0     stevel # When distributing Covered Code, include this CDDL HEADER in each
     15      0     stevel # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16      0     stevel # If applicable, add the following below this CDDL HEADER, with the
     17      0     stevel # fields enclosed by brackets "[]" replaced with your own identifying
     18      0     stevel # information: Portions Copyright [yyyy] [name of copyright owner]
     19      0     stevel #
     20      0     stevel # CDDL HEADER END
     21      0     stevel #
     22    132   robinson 
     23      0     stevel #
     24   8485      Peter # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
     25      0     stevel # Use is subject to license terms.
     26      0     stevel #
     27      0     stevel # Upgrade a machine from a cpio archive area in about 5 minutes.
     28      0     stevel # By Roger Faulkner and Jeff Bonwick, April 1993.
     29      0     stevel # (bfu == Bonwick/Faulkner Upgrade, a.k.a. Blindingly Fast Upgrade)
     30      0     stevel #
     31      0     stevel # Usage: bfu    [-f] <archive_dir> [root-dir]	# for normal machines
     32      0     stevel #        bfu -c [-f] <archive_dir> <exec-dir>	# for diskless clients
     33      0     stevel #
     34      0     stevel # The -f flag is to override the built-in safety check which requires
     35      0     stevel # that the starting-point OS be a least a certain revision.
     36      0     stevel #
     37      0     stevel # You have to be super-user.  It's safest to run this from the
     38      0     stevel # system console, although I've run it under OW and even via
     39      0     stevel # remote login with no problems.
     40      0     stevel #
     41      0     stevel # You will have to reboot the system when the upgrade is complete.
     42      0     stevel #
     43      0     stevel # You should add any administrative files you care about to this list.
     44      0     stevel # Warning: there had better be no leading '/' on any of these filenames.
     45      0     stevel 
     46      0     stevel #
     47      0     stevel # The CDPATH variable causes ksh's `cd' builtin to emit messages to stdout
     48      0     stevel # under certain circumstances, which can really screw things up; unset it.
     49      0     stevel #
     50      0     stevel unset CDPATH
     51      0     stevel 
     52      0     stevel export LC_ALL="C"
     53      0     stevel 
     54      0     stevel if [ -z "$GATEPATH" ]; then
     55      0     stevel 	GATEPATH=/ws/onnv-gate
     56   7309       Mark 	test -d $GATEPATH || GATEPATH=/net/onnv.eng/export/onnv-gate
     57      0     stevel fi
     58      0     stevel export GATE=${GATEPATH}
     59   7309       Mark export ARCHIVE=${ARCHIVEPATH:-${GATEPATH}}
     60      0     stevel 
     61      0     stevel #
     62      0     stevel # NOTE:	Entries in *_files must expand to either the exact files required,
     63      0     stevel #	or to directories that will be scoured for files.  Any directories
     64      0     stevel #	(and subdirectories) resulting from a wildcard expansion will be
     65      0     stevel #	fully recursed by BFU's searching for files.  (E.g. /etc/inet/* will
     66      0     stevel #	include all files in any of its directories, as well as any files in
     67      0     stevel #	/etc/inet/ itself.
     68      0     stevel #
     69   1872      comay #	These lists should really be generated automatically from the
     70   1872      comay #	pkgmap(4) metadata.
     71   1872      comay #
     72   1872      comay 
     73   1872      comay #
     74      0     stevel # First list: files to be saved in global and non-global zones.
     75      0     stevel #
     76      0     stevel all_zones_files="
     77      0     stevel 	etc/.login
     78      0     stevel 	etc/acct/holidays
     79      0     stevel 	etc/auto_*
     80      0     stevel 	etc/cron.d/at.deny
     81      0     stevel 	etc/cron.d/cron.deny
     82      0     stevel 	etc/crypto/pkcs11.conf
     83      0     stevel 	etc/default/*
     84   4876        mlf 	etc/dev/reserved_devnames
     85      0     stevel 	etc/dfs/dfstab
     86      0     stevel 	etc/dumpdates
     87      0     stevel 	etc/ftpd/*
     88      0     stevel 	etc/ftpusers
     89      0     stevel 	etc/group
     90      0     stevel 	etc/gss/gsscred.conf
     91      0     stevel 	etc/gss/mech
     92      0     stevel 	etc/gss/qop
     93      0     stevel 	etc/inet/*
     94      0     stevel 	etc/init.d/*
     95      0     stevel 	etc/inittab
     96   3448   dh155122 	etc/ipf/ipf.conf
     97   3448   dh155122 	etc/iu.ap
     98      0     stevel 	etc/krb5/kadm5.acl
     99      0     stevel 	etc/krb5/kdc.conf
    100      0     stevel 	etc/krb5/kpropd.acl
    101      0     stevel 	etc/krb5/krb5.conf
    102      0     stevel 	etc/krb5/warn.conf
    103   4887       chin 	etc/ksh.kshrc
    104      0     stevel 	etc/logadm.conf
    105      0     stevel 	etc/logindevperm
    106      0     stevel 	etc/lp/Systems
    107      0     stevel 	etc/mail/*.cf
    108      0     stevel 	etc/mail/*.hf
    109      0     stevel 	etc/mail/*.rc
    110      0     stevel 	etc/mail/aliases
    111      0     stevel 	etc/mail/helpfile
    112      0     stevel 	etc/mail/local-host-names
    113      0     stevel 	etc/mail/trusted-users
    114   1872      comay 	etc/named.conf
    115      0     stevel 	etc/net/*/services
    116      0     stevel 	etc/netconfig
    117      0     stevel 	etc/nfs/nfslog.conf
    118      0     stevel 	etc/nfssec.conf
    119      0     stevel 	etc/nscd.conf
    120      0     stevel 	etc/nsswitch.*
    121      0     stevel 	etc/pam.conf
    122      0     stevel 	etc/passwd
    123      0     stevel 	etc/policy.conf
    124      0     stevel 	etc/printers.conf
    125      0     stevel 	etc/profile
    126      0     stevel 	etc/project
    127      0     stevel 	etc/publickey
    128      0     stevel 	etc/remote
    129      0     stevel 	etc/resolv.conf
    130      0     stevel 	etc/rmmount.conf
    131      0     stevel 	etc/rpc
    132      0     stevel 	etc/rpld.conf
    133      0     stevel 	etc/saf/_sactab
    134      0     stevel 	etc/saf/_sysconfig
    135      0     stevel 	etc/saf/zsmon/_pmtab
    136   2364         dp 	etc/security/audit_class
    137   2364         dp 	etc/security/audit_control
    138   2364         dp 	etc/security/audit_event
    139   2364         dp 	etc/security/audit_startup
    140   2364         dp 	etc/security/audit_user
    141   2364         dp 	etc/security/audit_warn
    142   2364         dp 	etc/security/auth_attr
    143      0     stevel 	etc/security/crypt.conf
    144   2364         dp 	etc/security/exec_attr
    145      0     stevel 	etc/security/policy.conf
    146   2364         dp 	etc/security/prof_attr
    147      0     stevel 	etc/sfw/openssl/openssl.cnf
    148      0     stevel 	etc/shadow
    149      0     stevel 	etc/skel/.profile
    150      0     stevel 	etc/skel/local.*
    151      0     stevel 	etc/ssh/ssh_config
    152      0     stevel 	etc/ssh/sshd_config
    153      0     stevel 	etc/syslog.conf
    154      0     stevel 	etc/ttydefs
    155      0     stevel 	etc/ttysrch
    156      0     stevel 	etc/user_attr
    157      0     stevel 	etc/uucp/[A-Z]*
    158      0     stevel 	etc/vfstab
    159   5331        amw 	var/smb/*
    160      0     stevel 	var/spool/cron/crontabs/*
    161      0     stevel 	var/yp/Makefile
    162      0     stevel 	var/yp/aliases
    163      0     stevel 	var/yp/nicknames
    164      0     stevel "
    165      0     stevel 
    166      0     stevel #
    167      0     stevel # Second list: files to be saved in the global zone only.
    168      0     stevel #
    169      0     stevel global_zone_only_files="
    170      0     stevel 	boot/grub/menu.lst
    171      0     stevel 	boot/solaris/bootenv.rc
    172      0     stevel 	boot/solaris/devicedb/master
    173      0     stevel 	boot/solaris/filelist.ramdisk
    174   1872      comay 	etc/aggregation.conf
    175      0     stevel 	etc/bootrc
    176      0     stevel 	etc/crypto/kcf.conf
    177      0     stevel 	etc/devlink.tab
    178   8358      Chris 	etc/dladm/*
    179      0     stevel 	etc/driver_aliases
    180      0     stevel 	etc/driver_classes
    181      0     stevel 	etc/lvm/devpath
    182      0     stevel 	etc/lvm/lock
    183      0     stevel 	etc/lvm/md.cf
    184      0     stevel 	etc/lvm/md.ctlrmap
    185      0     stevel 	etc/lvm/md.tab
    186      0     stevel 	etc/lvm/mddb.cf
    187      0     stevel 	etc/lvm/runtime.cf
    188      0     stevel 	etc/mach
    189      0     stevel 	etc/minor_perm
    190      0     stevel 	etc/name_to_major
    191      0     stevel 	etc/name_to_sysnum
    192   1872      comay 	etc/nca/nca.if
    193   1872      comay 	etc/nca/ncakmod.conf
    194   1872      comay 	etc/nca/ncalogd.conf
    195   1872      comay 	etc/nca/ncaport.conf
    196      0     stevel 	etc/openwin/server/etc/OWconfig
    197      0     stevel 	etc/path_to_inst
    198      0     stevel 	etc/power.conf
    199      0     stevel 	etc/ppp/chap-secrets
    200      0     stevel 	etc/ppp/options
    201      0     stevel 	etc/ppp/pap-secrets
    202      0     stevel 	etc/security/device_policy
    203      0     stevel 	etc/security/extra_privs
    204   8358      Chris 	etc/security/tsol/devalloc_defaults
    205   8358      Chris 	etc/security/tsol/label_encodings
    206   8358      Chris 	etc/security/tsol/relabel
    207   4746       rica 	etc/security/tsol/tnrhdb
    208   4746       rica 	etc/security/tsol/tnrhtp
    209   4746       rica 	etc/security/tsol/tnzonecfg
    210      0     stevel 	etc/system
    211      0     stevel 	etc/zones/index
    212   7567        Xin 	kernel/drv/aac.conf
    213      0     stevel 	kernel/drv/elxl.conf
    214   8358      Chris 	kernel/drv/emlxs.conf
    215   8358      Chris 	kernel/drv/fp.conf
    216   8358      Chris 	kernel/drv/iscsi.conf
    217      0     stevel 	kernel/drv/md.conf
    218   8358      Chris 	kernel/drv/mpt.conf
    219   9907      Javen 	kernel/drv/mpt_sas.conf
    220      0     stevel 	kernel/drv/options.conf
    221  10696      David 	kernel/drv/pmcs.conf
    222   8358      Chris 	kernel/drv/qlc.conf
    223      0     stevel 	kernel/drv/ra.conf
    224      0     stevel 	kernel/drv/scsa2usb.conf
    225      0     stevel 	kernel/drv/scsi_vhci.conf
    226      0     stevel 	kernel/drv/sd.conf
    227   8358      Chris 	kernel/drv/ssd.conf
    228      0     stevel 	platform/*/kernel/drv/*ppm.conf
    229      0     stevel 	platform/i86pc/kernel/drv/aha.conf
    230      0     stevel 	platform/i86pc/kernel/drv/asy.conf
    231      0     stevel 	platform/sun4u/boot.conf
    232      0     stevel "
    233      0     stevel 
    234      0     stevel #
    235      0     stevel # Third list: files extracted from generic.root but which belong in the global
    236   3948         dp # zone only: they are superfluous (and some even harmful) in nonglobal zones.
    237      0     stevel #
    238      0     stevel # (note: as /etc/init.d scripts are converted to smf(5) "Greenline" services,
    239      0     stevel # they (and their /etc/rc?.d hardlinks) should be removed from this list when
    240      0     stevel # they are added to smf_obsolete_rc_files, below)
    241      0     stevel #
    242   3948         dp superfluous_nonglobal_zone_files="
    243      0     stevel 	dev/dsk
    244      0     stevel 	dev/fd
    245      0     stevel 	dev/pts
    246      0     stevel 	dev/rdsk
    247      0     stevel 	dev/rmt
    248      0     stevel 	dev/stderr
    249      0     stevel 	dev/stdin
    250      0     stevel 	dev/stdout
    251      0     stevel 	dev/swap
    252      0     stevel 	dev/term
    253   7688      Aaron 	dev/vt
    254      0     stevel 	devices
    255      0     stevel 	etc/dacf.conf
    256      0     stevel 	etc/dat
    257      0     stevel 	etc/default/metassist.xml
    258      0     stevel 	etc/default/power
    259      0     stevel 	etc/flash/postdeployment/svm.cleanup
    260      0     stevel 	etc/flash/predeployment/svm.save
    261      0     stevel 	etc/inet/ipqosconf.1.sample
    262      0     stevel 	etc/inet/ipqosconf.2.sample
    263      0     stevel 	etc/inet/ipqosconf.3.sample
    264      0     stevel 	etc/inet/sock2path
    265      0     stevel 	etc/init.d/devlinks
    266      0     stevel 	etc/init.d/dodatadm.udaplt
    267      0     stevel 	etc/init.d/drvconfig
    268      0     stevel 	etc/init.d/llc2
    269      0     stevel 	etc/init.d/ncakmod
    270      0     stevel 	etc/init.d/ncalogd
    271      0     stevel 	etc/init.d/pcmcia
    272      0     stevel 	etc/init.d/pppd
    273      0     stevel 	etc/init.d/wrsmcfg
    274      0     stevel 	etc/llc2
    275      0     stevel 	etc/lvm
    276      0     stevel 	etc/nca
    277      0     stevel 	etc/openwin
    278      0     stevel 	etc/ppp
    279      0     stevel 	etc/rc0.d/K34ncalogd
    280      0     stevel 	etc/rc0.d/K50pppd
    281      0     stevel 	etc/rc0.d/K52llc2
    282      0     stevel 	etc/rc1.d/K34ncalogd
    283      0     stevel 	etc/rc1.d/K50pppd
    284      0     stevel 	etc/rc1.d/K52llc2
    285      0     stevel 	etc/rc2.d/S40llc2
    286      0     stevel 	etc/rc2.d/S42ncakmod
    287      0     stevel 	etc/rc2.d/S47pppd
    288      0     stevel 	etc/rc2.d/S81dodatadm.udaplt
    289      0     stevel 	etc/rc2.d/S94ncalogd
    290      0     stevel 	etc/rcS.d/K34ncalogd
    291      0     stevel 	etc/rcS.d/K44wrsmcfg
    292      0     stevel 	etc/rcS.d/K50pppd
    293      0     stevel 	etc/rcS.d/K52llc2
    294      0     stevel 	etc/rcS.d/S29wrsmcfg
    295      0     stevel 	etc/rcm
    296      0     stevel 	etc/sock2path
    297      0     stevel 	etc/usb
    298      0     stevel 	etc/wrsm
    299      0     stevel 	etc/zones
    300      0     stevel 	kernel
    301   1872      comay 	lib/libmeta.so
    302   1872      comay 	lib/libmeta.so.1
    303   9484    garrett 	lib/svc/method/devices-audio
    304   8199      Allan 	lib/svc/method/fc-fabric
    305   9201       Jack 	lib/svc/method/iscsi-initiator
    306  10480  Alexandre 	lib/svc/method/ldoms-agents
    307   8199      Allan 	lib/svc/method/npivconfig
    308   1872      comay 	lib/svc/method/sf880dr
    309   1872      comay 	lib/svc/method/svc-cvcd
    310   1872      comay 	lib/svc/method/svc-dcs
    311   2309    rsmaeda 	lib/svc/method/svc-drd
    312   1872      comay 	lib/svc/method/svc-dscp
    313   1872      comay 	lib/svc/method/svc-dumpadm
    314  10264      Zhong 	lib/svc/method/svc-fcoei
    315   9895      Kevin 	lib/svc/method/svc-fcoet
    316    172     esolom 	lib/svc/method/svc-intrd
    317   2912      artem 	lib/svc/method/svc-hal
    318   4746       rica 	lib/svc/method/svc-labeld
    319   1872      comay 	lib/svc/method/svc-mdmonitor
    320   1872      comay 	lib/svc/method/svc-metainit
    321   2239      comay 	lib/svc/method/svc-metasync
    322   2239      comay 	lib/svc/method/svc-oplhpd
    323   1069    garypen 	lib/svc/method/svc-poold
    324   1069    garypen 	lib/svc/method/svc-pools
    325   1872      comay 	lib/svc/method/svc-power
    326   3247   gjelinek 	lib/svc/method/svc-resource-mgmt
    327   2912      artem 	lib/svc/method/svc-rmvolmgr
    328    953    rm88369 	lib/svc/method/svc-scheduler
    329   1872      comay 	lib/svc/method/svc-sckmd
    330   8199      Allan 	lib/svc/method/svc-stmf
    331   1872      comay 	lib/svc/method/svc-syseventd
    332   4746       rica 	lib/svc/method/svc-tnctl
    333   4746       rica 	lib/svc/method/svc-tnd
    334   1991      heppo 	lib/svc/method/svc-vntsd
    335   1872      comay 	lib/svc/method/svc-zones
    336   7688      Aaron 	lib/svc/method/vtdaemon
    337   1872      comay 	platform/*/kernel
    338   1872      comay 	platform/SUNW,Sun-Fire-15000/lib/cvcd
    339   1872      comay 	platform/SUNW,Ultra-Enterprise-10000/lib/cvcd
    340   1872      comay 	platform/i86pc/biosint
    341   1872      comay 	platform/i86pc/multiboot
    342   1872      comay 	platform/sun4u/cprboot
    343   1872      comay 	platform/sun4u/lib/libwrsmconf.so
    344   1872      comay 	platform/sun4u/lib/libwrsmconf.so.1
    345   1872      comay 	platform/sun4u/lib/sparcv9/libwrsmconf.so
    346   1872      comay 	platform/sun4u/lib/sparcv9/libwrsmconf.so.1
    347   1872      comay 	platform/sun4u/sbin
    348   1872      comay 	platform/sun4u/wanboot
    349   1872      comay 	platform/sun4v/wanboot
    350   1872      comay 	sbin/metadb
    351   1872      comay 	sbin/metadevadm
    352   1872      comay 	sbin/metainit
    353   1872      comay 	sbin/metarecover
    354   1872      comay 	sbin/metastat
    355   1872      comay 	usr/include/sys/dcam
    356   1872      comay 	usr/lib/devfsadm/linkmod/SUNW_dcam1394_link.so
    357   1991      heppo 	usr/lib/ldoms
    358   1872      comay 	usr/platform/SUNW,SPARC-Enterprise/lib/dscp.ppp.options
    359   1872      comay 	usr/platform/SUNW,SPARC-Enterprise/lib/libdscp.so
    360   1872      comay 	usr/platform/SUNW,SPARC-Enterprise/lib/libdscp.so.1
    361   1872      comay 	usr/platform/SUNW,SPARC-Enterprise/lib/llib-ldscp.ln
    362   1872      comay 	usr/platform/SUNW,SPARC-Enterprise/sbin/prtdscp
    363      0     stevel 	var/adm/pool
    364      0     stevel 	var/log/pool
    365   9201       Jack 	var/svc/manifest/network/iscsi/iscsi-initiator.xml
    366   8199      Allan 	var/svc/manifest/network/npiv_config.xml
    367   1872      comay 	var/svc/manifest/network/rpc/mdcomm.xml
    368   1872      comay 	var/svc/manifest/network/rpc/meta.xml
    369   1872      comay 	var/svc/manifest/network/rpc/metamed.xml
    370   1872      comay 	var/svc/manifest/network/rpc/metamh.xml
    371   4746       rica 	var/svc/manifest/network/tnctl.xml
    372   4746       rica 	var/svc/manifest/network/tnd.xml
    373   1872      comay 	var/svc/manifest/platform/i86pc/eeprom.xml
    374   1872      comay 	var/svc/manifest/platform/sun4u/dcs.xml
    375   1872      comay 	var/svc/manifest/platform/sun4u/dscp.xml
    376   1872      comay 	var/svc/manifest/platform/sun4u/efdaemon.xml
    377   2239      comay 	var/svc/manifest/platform/sun4u/oplhpd.xml
    378   1872      comay 	var/svc/manifest/platform/sun4u/sckmd.xml
    379   1872      comay 	var/svc/manifest/platform/sun4u/sf880drd.xml
    380   2239      comay 	var/svc/manifest/platform/sun4v
    381      0     stevel 	var/svc/manifest/system/cvc.xml
    382   9484    garrett 	var/svc/manifest/system/device/devices-audio.xml
    383   8199      Allan 	var/svc/manifest/system/device/devices-fc-fabric.xml
    384      0     stevel 	var/svc/manifest/system/dumpadm.xml
    385  10264      Zhong 	var/svc/manifest/system/fcoe_initiator.xml
    386   9895      Kevin 	var/svc/manifest/system/fcoe_target.xml
    387   8199      Allan 	var/svc/manifest/system/filesystem/rmvolmgr.xml
    388      0     stevel 	var/svc/manifest/system/fmd.xml
    389   2912      artem 	var/svc/manifest/system/hal.xml
    390    172     esolom 	var/svc/manifest/system/intrd.xml
    391   4746       rica 	var/svc/manifest/system/labeld.xml
    392      0     stevel 	var/svc/manifest/system/mdmonitor.xml
    393      0     stevel 	var/svc/manifest/system/metainit.xml
    394   2239      comay 	var/svc/manifest/system/metasync.xml
    395      0     stevel 	var/svc/manifest/system/picl.xml
    396   1069    garypen 	var/svc/manifest/system/poold.xml
    397   1069    garypen 	var/svc/manifest/system/pools.xml
    398      0     stevel 	var/svc/manifest/system/power.xml
    399   3247   gjelinek 	var/svc/manifest/system/resource-mgmt.xml
    400    953    rm88369 	var/svc/manifest/system/scheduler.xml
    401   8199      Allan 	var/svc/manifest/system/stmf.xml
    402      0     stevel 	var/svc/manifest/system/sysevent.xml
    403   7688      Aaron 	var/svc/manifest/system/vtdaemon.xml
    404      0     stevel 	var/svc/manifest/system/zones.xml
    405      0     stevel "
    406      0     stevel 
    407      0     stevel #
    408   1872      comay # Fourth list: files to be preserved, ie unconditionally restored to
    409   1872      comay # "child" versions
    410      0     stevel #
    411      0     stevel preserve_files="
    412   7720        Ken 	etc/hostid
    413    222      comay 	kernel/misc/amd64/sysinit
    414   1872      comay 	kernel/misc/amd64/usbs49_fw
    415   1872      comay 	kernel/misc/sparcv9/usbs49_fw
    416      0     stevel 	kernel/misc/sysinit
    417   1197   yz147069 	kernel/misc/usbs49_fw
    418      0     stevel 	var/adm/aculog
    419      0     stevel 	var/adm/spellhist
    420      0     stevel 	var/adm/utmpx
    421      0     stevel 	var/adm/wtmpx
    422      0     stevel 	var/log/authlog
    423      0     stevel 	var/log/syslog
    424      0     stevel 	var/saf/zsmon/log
    425      0     stevel "
    426      0     stevel 
    427      0     stevel realmode_files="
    428      0     stevel 	boot/solaris/bootenv.rc
    429      0     stevel 	boot/solaris/devicedb/master
    430   7836       John "
    431   7836       John 
    432   7836       John #
    433   7836       John # /usr/sadm/install/scripts/i.build class runs class client provided
    434   7836       John # script. The files below are managed by build class and its build script.
    435   7836       John # They are added /bfu.conflict/NEW and the acr.sh process runs the script
    436   7836       John # as part of conflict resolution. 
    437   7836       John #
    438   7836       John build_class_script_files="
    439   7836       John 	etc/mpapi.conf
    440   7836       John 	etc/hba.conf
    441   7836       John 	etc/ima.conf
    442      0     stevel "
    443      0     stevel 
    444      0     stevel fail() {
    445      0     stevel 	print "$*" >& 2
    446      0     stevel 	print "bfu aborting" >& 2
    447   3948         dp 	rm -f "$bfu_zone_list"
    448      0     stevel 	exit 1
    449      0     stevel }
    450      0     stevel 
    451      0     stevel filelist() {
    452      0     stevel 	files="$all_zones_files $preserve_files"
    453      0     stevel 	if [ $1 = "global" ]; then
    454      0     stevel 		files="$global_zone_only_files $files"
    455      0     stevel 	fi
    456      0     stevel 	find $files -depth -type f ! -name core -print 2>/dev/null | sort -u || {
    457      0     stevel 		#
    458      0     stevel 		# Force cpio to return non-zero by printing an error message
    459      0     stevel 		# to stdout that it won't be able to lstat().
    460      0     stevel 		#
    461      0     stevel 		echo 'filelist: sort failed'
    462      0     stevel 		fail "sort failed"
    463      0     stevel 	}
    464      0     stevel }
    465      0     stevel 
    466      0     stevel realmode_filelist() {
    467      0     stevel 	find $realmode_files -depth -type f ! -name core -print 2>/dev/null | sort
    468      0     stevel }
    469      0     stevel 
    470      0     stevel smf_inetd_conversions="
    471      0     stevel 	100134
    472      0     stevel 	100150
    473      0     stevel 	100155
    474      0     stevel 	100229
    475      0     stevel 	100230
    476      0     stevel 	100234
    477      0     stevel 	100242
    478      0     stevel 	100422
    479      0     stevel 	chargen
    480      0     stevel 	comsat
    481      0     stevel 	daytime
    482      0     stevel 	discard
    483      0     stevel 	echo
    484      0     stevel 	eklogin
    485      0     stevel 	exec
    486      0     stevel 	finger
    487      0     stevel 	ftp
    488      0     stevel 	gssd
    489      0     stevel 	klogin
    490      0     stevel 	krb5_prop
    491      0     stevel 	kshell
    492      0     stevel 	ktkt_warnd
    493      0     stevel 	login
    494      0     stevel 	metad
    495      0     stevel 	metamedd
    496      0     stevel 	metamhd
    497      0     stevel 	name
    498      0     stevel 	printer
    499      0     stevel 	rexd
    500      0     stevel 	rquotad
    501      0     stevel 	rstatd
    502      0     stevel 	rusersd
    503      0     stevel 	shell
    504      0     stevel 	smserverd
    505      0     stevel 	sprayd
    506      0     stevel 	sun-dr
    507      0     stevel 	talk
    508      0     stevel 	telnet
    509      0     stevel 	time
    510      0     stevel 	uucp
    511      0     stevel 	walld
    512      0     stevel "
    513    305   ericheng 
    514    305   ericheng enable_next_boot () {
    515    305   ericheng 	if [ -x /tmp/bfubin/svccfg ]; then
    516    305   ericheng 	    svcadm disable -t $1
    517    305   ericheng 	    [ $? = 0 ] || echo "warning: unable to temporarily disable $1"
    518   9263       Sean 	    eval $BFUSVCCFG -s $1 setprop general/enabled = true
    519    305   ericheng 	    [ $? = 0 ] || echo "warning: unable to enable $1 for next boot"
    520    305   ericheng 	fi
    521    305   ericheng }
    522      0     stevel 
    523   5895   yz147064 #
    524   5895   yz147064 # If we're in the global zone, import the manifest for the specified service.
    525   5895   yz147064 # Note that we will need to see whether we are in an smf root if we are using
    526   5895   yz147064 # an alternate root. If so, import the service directly; otherwise, print the
    527   5895   yz147064 # warning messages.
    528   5895   yz147064 #
    529   5895   yz147064 # $1: the path of the xml file (the related path to /var/svc/manifest)
    530   5895   yz147064 # $2: the service name - specified only if the service is enabled after reboot.
    531   5895   yz147064 #
    532   5895   yz147064 smf_import_service() {
    533   5895   yz147064 	if [[ $zone = global && -f $rootprefix/var/svc/manifest/$1 ]]; then
    534   5895   yz147064 		if [[ -n $rootprefix && -x /usr/sbin/svccfg ]]; then
    535   5895   yz147064 			SVCCFG_REPOSITORY=$rootprefix/etc/svc/repository.db \
    536   5895   yz147064 			/usr/sbin/svccfg import $rootprefix/var/svc/manifest/$1
    537   5895   yz147064 		elif [[ -n $rootprefix ]]; then
    538   5895   yz147064 			echo "Warning: This system does not have SMF, so I"
    539   5895   yz147064 			echo "cannot ensure the pre-import of $1. If it does"
    540   5895   yz147064 			echo "not work, reboot your alternate root to fix it."
    541   5895   yz147064 		elif [[ -x /tmp/bfubin/svccfg ]]; then
    542   5895   yz147064 			if [[ "${2}a" == a ]]; then
    543   9263       Sean 				eval $BFUSVCCFG import /var/svc/manifest/$1
    544   5895   yz147064 			else
    545   5895   yz147064 				tmpfile=/tmp/`echo "$1" | tr / :`.$$
    546   5895   yz147064 				sed -e "s/enabled='true'/enabled='false'/" \
    547   5895   yz147064 				    /var/svc/manifest/$1 > "$tmpfile"
    548   9263       Sean 				eval $BFUSVCCFG import "$tmpfile"
    549   5895   yz147064 				#
    550   5895   yz147064 				# Make sure the service is enabled after reboot.
    551   5895   yz147064 				#
    552   5895   yz147064 				enable_next_boot $2
    553   5895   yz147064 			fi
    554   5895   yz147064 		fi
    555   5895   yz147064 	fi
    556   5895   yz147064 }
    557   5895   yz147064 
    558      0     stevel smf_inetd_disable() {
    559      0     stevel 	inetconf=$rootprefix/etc/inet/inetd.conf
    560      0     stevel 	inettmp=/tmp/inetd.tmp.$$
    561      0     stevel 
    562      0     stevel 	sed "$(for i in $smf_inetd_conversions; do 
    563      0     stevel 		echo "s:^[ 	]*$i[ 	/]:#SMFbfu# &:"
    564      0     stevel 	done)" $inetconf > $inettmp && ! cmp -s $inettmp $inetconf &&
    565      0     stevel 	    cp $inettmp $inetconf
    566      0     stevel 
    567      0     stevel 	rm -f -- $inettmp
    568      0     stevel }
    569      0     stevel 
    570      0     stevel smf_inetd_reenable() {
    571      0     stevel 	inetconf=$rootprefix/etc/inet/inetd.conf
    572      0     stevel 	inettmp=/tmp/inetd.tmp.$$
    573      0     stevel 
    574      0     stevel 	sed 's/^#SMFbfu# //' $inetconf > $inettmp && cp $inettmp $inetconf
    575      0     stevel 
    576      0     stevel 	rm -f -- $inettmp
    577      0     stevel }
    578      0     stevel 
    579      0     stevel smf_tftp_reinstall() {
    580      0     stevel 	inetconf=$rootprefix/etc/inet/inetd.conf
    581      0     stevel 	inettmp=/tmp/inetd.tmp.$$
    582      0     stevel 
    583      0     stevel 	if grep '^#SMFbfu# tftp' $inetconf >/dev/null ; then
    584      0     stevel 		# BFU previously commented out, put it back in place
    585      0     stevel 	    	sed 's/^#SMFbfu# tftp/tftp/' $inetconf > $inettmp &&
    586      0     stevel 		    cp $inettmp $inetconf
    587      0     stevel 	elif ! grep '^[#	 ]*tftp' $inetconf >/dev/null; then
    588      0     stevel 		# No entry, append to end
    589      0     stevel 		cat >>$inetconf <<EOF
    590      0     stevel # TFTPD - tftp server (primarily used for booting)
    591      0     stevel #tftp	dgram	udp6	wait	root	/usr/sbin/in.tftpd	in.tftpd -s /tftpboot
    592      0     stevel EOF
    593      0     stevel 	fi
    594      0     stevel 
    595      0     stevel 	rm -f -- $inettmp
    596      0     stevel }
    597      0     stevel 
    598      0     stevel inetd_conf_svm_hack() {
    599      0     stevel 	# Since inetd.conf is updated by SUNWmdr's postinstall script,
    600      0     stevel 	# we will update the actual inetd.conf here to reflect the postinstall
    601      0     stevel 	# changes.
    602      0     stevel 
    603      0     stevel 	inetconf=$rootprefix/etc/inet/inetd.conf
    604      0     stevel 	inettmp=/tmp/inetd.tmp.$$
    605      0     stevel 	inetnew=/tmp/inetd.new.$$
    606      0     stevel 
    607      0     stevel 	#
    608      0     stevel 	# only change inetd.conf if the rpc.metad entry is out of date
    609      0     stevel 	#
    610      0     stevel 
    611      0     stevel 	if ! grep "^[# 	]*100229/1-2" $inetconf > /dev/null ; then
    612      0     stevel 
    613      0     stevel 		# Grab existing rpc entries for rpc.metad
    614      0     stevel 		# and convert spaces to tabs within the rpc entry, as well as
    615      0     stevel 		# the transport method; 
    616      0     stevel 		# or add a new entry in case there was none.
    617      0     stevel 		if grep "^[# 	]*100229/1" $inetconf > /dev/null ; then
    618      0     stevel 			grep "^# METAD - SLVM metadb" $inetconf > $inettmp
    619      0     stevel 			grep "^[# 	]*100229/1" $inetconf | \
    620      0     stevel 			    sed -e 's/[ 	][ 	]*/	/g' \
    621      0     stevel 				-e 's?100229/1?100229/1-2?' >> $inettmp
    622      0     stevel 		else
    623      0     stevel 			echo '# METAD - SVM metadb Daemon' > $inettmp
    624      0     stevel 			echo "100229/1-2\ttli\trpc/tcp\twait\troot\t/usr/sbin/rpc.metad\trpc.metad" >> $inettmp
    625      0     stevel 		fi
    626      0     stevel 
    627      0     stevel 		grep -v '^# METAD - SLVM metadb' $inetconf | \
    628      0     stevel 		    grep -v '^[# 	]*100229/1' > $inetnew
    629      0     stevel 		cat $inettmp >> $inetnew
    630      0     stevel 
    631      0     stevel 		if ! diff $inetnew $inetconf > /dev/null ; then
    632      0     stevel 			print "Updating inet.conf metad entry ... \c"
    633      0     stevel 			if cp $inetnew $inetconf ; then
    634      0     stevel 				print "done."
    635      0     stevel 			else
    636      0     stevel 				print "failed."
    637      0     stevel 			fi
    638      0     stevel 		fi
    639      0     stevel 		rm -f $inettmp $inetnew
    640      0     stevel 	fi
    641      0     stevel 
    642      0     stevel 	#
    643      0     stevel 	# only change inetd.conf if the rpc.mdcommd entry is out of date
    644      0     stevel 	#
    645      0     stevel 
    646      0     stevel 	if ! grep "^[# 	]*100422/1" $inetconf > /dev/null ; then
    647      0     stevel 
    648      0     stevel 		# Grab existing rpc entries for rpc.mdcommd
    649      0     stevel 		# and convert spaces to tabs within the rpc entry,
    650      0     stevel 		# or add a new entry in case there was none.
    651      0     stevel 		if grep "^[#    ]*100422/1" $inetconf > /dev/null ; then
    652      0     stevel 			grep "^# MDMN_COMMD - SVM Multi node" $inetconf > $inettmp
    653      0     stevel 			grep "^[#       ]*100422/1" $inetconf | \
    654      0     stevel 				sed -e 's/[         ][      ]*/     /g' >> $inettmp 
    655      0     stevel 		else
    656      0     stevel 			echo '# MDMN_COMMD - SVM Multi node communication daemon' >$inettmp
    657      0     stevel 			echo '100422/1\ttli\trpc/tcp\twait\troot\t/usr/sbin/rpc.mdcommd\trpc.mdcommd' >> $inettmp
    658      0     stevel 		fi
    659      0     stevel 
    660      0     stevel 		grep -v '^# MDMN_COMMD - SVM Multi node' $inetconf | \
    661      0     stevel 		grep -v '^[#        ]*100422/1' > $inetnew
    662      0     stevel 		cat $inettmp >> $inetnew
    663      0     stevel 
    664      0     stevel 		if ! diff $inetnew $inetconf > /dev/null ; then
    665      0     stevel 			print "Updating inetd.conf rpc.mdcommd entry ... \c"
    666      0     stevel 			if cp $inetnew $inetconf; then
    667      0     stevel 				print "done."
    668      0     stevel 			else
    669      0     stevel 				print "failed."
    670      0     stevel 			fi
    671      0     stevel 		fi
    672      0     stevel 
    673      0     stevel 		rm -f $inettmp $inetnew
    674   5895   yz147064 	fi
    675   5895   yz147064 }
    676   5895   yz147064 
    677   5895   yz147064 upgrade_aggr_and_linkprop () {
    678   8275       Eric 	# Since aggregation.conf and linkprop.conf are upgraded by 
    679   5895   yz147064 	# SUNWcnetr's postinstall script, put the relevant portions of the
    680   5895   yz147064 	# postinstall script here, modified to rename the old files instead
    681   5895   yz147064 	# of removing them.
    682   5895   yz147064 
    683   5895   yz147064 	#
    684   5895   yz147064 	# Convert datalink configuration into a series of dladm(1M) commands
    685   5895   yz147064 	# and keep them in an upgrade script. This script will then be run
    686   5895   yz147064 	# in the network-physical service.
    687   5895   yz147064 	#
    688   5895   yz147064 	# Note that we cannot use the /var/svc/profile/upgrade script because
    689   5895   yz147064 	# that script is run in the manifest-import service which is too late
    690   5895   yz147064 	# for the datalink configuration.
    691   5895   yz147064 	#
    692   5895   yz147064 	UPGRADE_SCRIPT=/var/svc/profile/upgrade_datalink
    693   5895   yz147064 
    694   5895   yz147064 	AGGR_CONF=/etc/aggregation.conf
    695   5895   yz147064 	ORIG=$rootprefix$AGGR_CONF
    696   5895   yz147064 	if [[ ! -f $ORIG ]]; then
    697   5895   yz147064 		# Try the alternate location.
    698   5895   yz147064 		AGGR_CONF=/etc/dladm/aggregation.conf
    699   5895   yz147064 		ORIG=$rootprefix$AGGR_CONF
    700   5895   yz147064 	fi
    701   5895   yz147064 
    702   5895   yz147064 	if [[ -f $ORIG ]]; then
    703   5895   yz147064 		# Strip off comments, then each remaining line defines
    704   5895   yz147064 		# an aggregation the administrator configured on the old
    705   5895   yz147064 		# system.  Each line corresponds to one dladm command
    706   5895   yz147064 		# that is appended to the upgrade script.
    707   5895   yz147064 		cat $ORIG | grep '^[^#]' | while read line; do
    708   5895   yz147064 			echo $line | while read aggr_index rest
    709   5895   yz147064 			do
    710   5895   yz147064 				policy=`echo $rest | /usr/bin/awk '{print $1}'`
    711   5895   yz147064 				nports=`echo $rest | /usr/bin/awk '{print $2}'`
    712   5895   yz147064 				ports=`echo $rest | /usr/bin/awk '{print $3}'`
    713   5895   yz147064 				mac=`echo $rest | /usr/bin/awk '{print $4}'`
    714   5895   yz147064 				lacp_mode=`echo $rest | /usr/bin/awk \
    715   5895   yz147064 				    '{print $5}'`
    716   5895   yz147064 				lacp_timer=`echo $rest | /usr/bin/awk \
    717   5895   yz147064 				    '{print $6}'`
    718   5895   yz147064 				dladm_string="dladm create-aggr -P $policy -l \
    719   5895   yz147064 				    $lacp_mode -T $lacp_timer"
    720   5895   yz147064 				# A fixed MAC address
    721   5895   yz147064 				if [[ $mac != "auto" ]]; then
    722   5895   yz147064 					dladm_string="$dladm_string -u $mac"
    723   5895   yz147064 				fi
    724   5895   yz147064 				i=1
    725   5895   yz147064 				while [ $i -le $nports ]; do
    726   5895   yz147064 					device=`echo $ports | cut -d, -f$i`
    727   5895   yz147064 					# Older aggregation.conf files have the
    728   5895   yz147064 					# format of device_name/port_number.
    729   5895   yz147064 					# We don't need the port number, so get
    730   5895   yz147064 					# rid of it if it is there.
    731   5895   yz147064 					device=`echo $device | cut -d/ -f1`
    732   5895   yz147064 					((i = i + 1))
    733   5895   yz147064 					dladm_string="$dladm_string -d \
    734   5895   yz147064 					    $device"
    735   5895   yz147064 				done
    736   5895   yz147064 				dladm_string="$dladm_string $aggr_index"
    737   5895   yz147064 				echo $dladm_string >> \
    738   5895   yz147064 					$rootprefix$UPGRADE_SCRIPT
    739   5895   yz147064 			done
    740   5895   yz147064 		done
    741   5895   yz147064 		mv $ORIG $ORIG.bak
    742   5895   yz147064 	fi
    743   5895   yz147064 
    744   5895   yz147064 	# Upgrade linkprop.conf
    745   5895   yz147064 	ORIG=$rootprefix/etc/dladm/linkprop.conf
    746   5895   yz147064 
    747   5895   yz147064 	if [[ -f $ORIG ]]; then
    748   5895   yz147064 		# Strip off comments, then each remaining line lists
    749   5895   yz147064 		# properties the administrator configured for a	
    750   5895   yz147064 		# particular interface.  Each line includes several
    751   5895   yz147064 		# properties, but we can only set one property per
    752   5895   yz147064 		# dladm invocation.
    753   5895   yz147064 		cat $ORIG | grep '^[^#]' | while read line; do
    754   5895   yz147064 			echo $line | while read link rest
    755   5895   yz147064 			do
    756   5895   yz147064 				while [ -n "$rest" ]; do
    757   5895   yz147064 					linkprop=`echo $rest | cut -d";" -f1`
    758   5895   yz147064 					rest=`echo $rest | cut -d";" -f2-`
    759   5895   yz147064 					echo dladm set-linkprop -p $linkprop \
    760   5895   yz147064 					    $link >> $rootprefix$UPGRADE_SCRIPT
    761   5895   yz147064 				done
    762   5895   yz147064 			done
    763   5895   yz147064 		done
    764   5895   yz147064 		mv $ORIG $ORIG.bak
    765   4022   jw149990 	fi
    766   7586        Xin }
    767   7586        Xin 
    768   8275       Eric upgrade_vlan () {
    769   8275       Eric 	# Convert hostname.*** and zonecfg vlan configurations
    770   8275       Eric 	UPGRADE_SCRIPT=/var/svc/profile/upgrade_datalink
    771   8275       Eric 
    772   8275       Eric 	for ifname in $host_ifs $zone_ifs
    773   8275       Eric 	do
    774   8275       Eric 		phys=`echo $ifname | sed "s/[0-9]*$//"`
    775   8275       Eric 		devnum=`echo $ifname | sed "s/$phys//g"`
    776   8275       Eric 		if [ "$phys$devnum" != $ifname -o \
    777   8275       Eric 		    -n "`echo $devnum | tr -d '[0-9]'`" ]; then
    778   8275       Eric 			echo "skipping invalid interface $ifname"
    779   8275       Eric 			continue
    780   8275       Eric 		fi
    781   8275       Eric 
    782   8275       Eric 		vid=`expr $devnum / 1000`
    783   8275       Eric 		inst=`expr $devnum % 1000`
    784   8275       Eric 
    785   8275       Eric 		if [ "$vid" != "0" ]; then
    786   8275       Eric 			echo dladm create-vlan -l $phys$inst -v $vid $ifname \
    787   8275       Eric 			    >> $rootprefix$UPGRADE_SCRIPT
    788   8275       Eric 		fi
    789   8275       Eric 	done
    790   8275       Eric }
    791   8275       Eric 
    792   7586        Xin # Update aac.conf for set legacy-name-enable properly
    793   7586        Xin update_aac_conf()
    794   7586        Xin {
    795   7586        Xin 	conffile=$rootprefix/kernel/drv/aac.conf
    796   7586        Xin 	childconffile=$rootprefix/bfu.child/kernel/drv/aac.conf
    797   7586        Xin 
    798   7586        Xin 	# Already using autoenumeration mode, return
    799   7586        Xin 	egrep -s "legacy-name-enable" $childconffile && \
    800   7586        Xin 	    grep "legacy-name-enable" $childconffile | egrep -s "no" && return
    801   7586        Xin 
    802   7586        Xin 	# Else enable legacy mode
    803   7586        Xin 	sed -e 's/legacy-name-enable="no"/legacy-name-enable="yes"/g' \
    804   7586        Xin 	    < $conffile > /tmp/aac.conf.$$
    805   7586        Xin 	mv -f /tmp/aac.conf.$$ $conffile
    806  10639     Darren }
    807  10639     Darren 
    808  10639     Darren update_etc_inet_sock2path()
    809  10639     Darren {
    810  10639     Darren 	#
    811  10639     Darren 	# The PF_PACKET module may need to be added to the configuration
    812  10639     Darren 	# file socket sockets.
    813  10639     Darren 	#
    814  10639     Darren 	# When being added to the system, the socket itself will remain
    815  10639     Darren 	# inactive until the next reboot when soconfig is run. When being
    816  10639     Darren 	# removed, the kernel configuration stays active until the system
    817  10639     Darren 	# is rebooted and the sockets will continue to work until it is
    818  10639     Darren 	# unloaded from the kernel, after which applications will fail.
    819  10639     Darren 	#
    820  10639     Darren 	sockfile=$rootprefix/etc/inet/sock2path
    821  10639     Darren 	xgrep=/usr/xpg4/bin/grep
    822  10639     Darren 
    823  10639     Darren 	${ZCAT} ${cpiodir}/generic.usr$ZFIX | cpio -it 2>/dev/null |
    824  10639     Darren 	    ${xgrep} -q sockpfp
    825  10639     Darren 	if [ $? -eq 1 ] ; then
    826  10639     Darren 		${xgrep} -v -E '^	32	[14]	0	sockpfp' \
    827  10639     Darren 		    ${sockfile} > /tmp/sock2path.tmp.$$
    828  10639     Darren 		cp /tmp/sock2path.tmp.$$ ${sockfile}
    829  10639     Darren 	else
    830  10639     Darren 		if ! ${xgrep} -q -E \
    831  10639     Darren 		    '^	31	[14]	0	sockpfp' ${sockfile}; then
    832  10639     Darren 			echo '' >> ${sockfile}
    833  10639     Darren 			echo '	32	1	0	sockpfp' >> ${sockfile}
    834  10639     Darren 			echo '	32	4	0	sockpfp' >> ${sockfile}
    835  10639     Darren 		fi
    836  10639     Darren 	fi
    837   4022   jw149990 }
    838   4022   jw149990 
    839   4022   jw149990 # update x86 version mpt.conf for property tape
    840   4022   jw149990 mpttapeprop='[ 	]*tape[ 	]*=[ 	]*"sctp"[ 	]*;'
    841   4022   jw149990 update_mptconf_i386()
    842   4022   jw149990 {
    843   4022   jw149990 	conffile=$rootprefix/kernel/drv/mpt.conf
    844   4022   jw149990 	test -f $conffile || return
    845   4022   jw149990 	egrep -s "$mpttapeprop" $conffile
    846   4022   jw149990 	if [ $? -ne 0 ] ; then
    847   4022   jw149990 	    echo 'tape="sctp";' >> $conffile
    848   6356        mrj 	fi
    849   6356        mrj }
    850   6356        mrj 
    851   6356        mrj # update x86 etc/mach file after xVM_uppc is added,
    852   6356        mrj # which makes xpv_psm a non-default psm module
    853   6356        mrj update_etc_mach_i386()
    854   6356        mrj {
    855   6356        mrj 	etc_mach=$rootprefix/etc/mach
    856   6356        mrj 	test -f $etc_mach || return
    857   6356        mrj 	grep -w "xpv_psm" $etc_mach > /dev/null 2>&1
    858   6356        mrj 	if [ $? -ne 0 ] ; then
    859   6356        mrj 	    echo 'xpv_psm' >> $etc_mach
    860      0     stevel 	fi
    861   6777   jw149990 }
    862   6777   jw149990 
    863   6777   jw149990 # check and update driver class for scsi-self-identifying
    864   6777   jw149990 chk_update_drv_class()
    865   6777   jw149990 {
    866   6777   jw149990 
    867   6777   jw149990     drvclassfile=$rootprefix/etc/driver_classes
    868   6777   jw149990     name2majorfile=$rootprefix/etc/name_to_major
    869   6777   jw149990     drvname=$1
    870   6777   jw149990     classentry="^$drvname[ 	].*scsi-self-identifying"
    871   6777   jw149990 
    872   6777   jw149990     [ -f $drvclassfile ] || return
    873   6777   jw149990     [ -f $name2majorfile ] || return
    874   6777   jw149990 
    875   6777   jw149990     grep -w $drvname $name2majorfile > /dev/null 2>&1 || return
    876   6777   jw149990 
    877   6777   jw149990     egrep -s "$classentry" $drvclassfile
    878   6777   jw149990     if [ $? -ne 0 ]; then
    879   6777   jw149990 	echo "$drvname	scsi-self-identifying" >> $drvclassfile
    880   6777   jw149990     fi
    881   6777   jw149990 }
    882   6777   jw149990 
    883   6777   jw149990 update_drvclass_i386()
    884   6777   jw149990 {
    885   6777   jw149990     chk_update_drv_class ahci
    886   6777   jw149990     chk_update_drv_class si3124
    887   6777   jw149990     chk_update_drv_class marvell88sx
    888   6777   jw149990     chk_update_drv_class nv_sata
    889      0     stevel }
    890      0     stevel 
    891      0     stevel update_policy_conf() {
    892      0     stevel 	# update /etc/security/policy.conf with the default
    893      0     stevel 	# Solaris crypt(3c) policy.
    894      0     stevel 	
    895      0     stevel 	dest=$rootprefix/etc/security/policy.conf
    896      0     stevel 
    897      0     stevel 	grep 'CRYPT_' $dest > /dev/null 2>&1
    898      0     stevel 	if [ $? = 1 ] ; then
    899      0     stevel 		print "Updating entries for crypt(3c), see policy.conf(4)"
    900      0     stevel 	cat >> $dest <<EOM
    901      0     stevel 
    902      0     stevel # crypt(3c) Algorithms Configuration
    903      0     stevel #
    904      0     stevel # CRYPT_ALGORITHMS_ALLOW specifies the algorithms that are allowed to
    905      0     stevel # be used for new passwords.  This is enforced only in crypt_gensalt(3c).
    906      0     stevel #
    907      0     stevel CRYPT_ALGORITHMS_ALLOW=1,2a,md5
    908      0     stevel 
    909      0     stevel # To deprecate use of the traditional unix algorithm, uncomment below
    910      0     stevel # and change CRYPT_DEFAULT= to another algorithm.  For example,
    911      0     stevel # CRYPT_DEFAULT=1 for BSD/Linux MD5.
    912      0     stevel #
    913      0     stevel #CRYPT_ALGORITHMS_DEPRECATE=__unix__
    914      0     stevel 
    915      0     stevel # The Solaris default is the traditional UNIX algorithm.  This is not
    916      0     stevel # listed in crypt.conf(4) since it is internal to libc.  The reserved
    917      0     stevel # name __unix__ is used to refer to it.
    918      0     stevel #
    919      0     stevel CRYPT_DEFAULT=__unix__
    920      0     stevel EOM
    921      0     stevel 	fi
    922      0     stevel 	grep PRIV_ $dest >/dev/null 2>&1
    923      0     stevel 	if [ $? = 1 ]; then
    924      0     stevel 		echo "Updating entries for privileges(5)," \
    925      0     stevel 		     "see policy.conf(4) for details."
    926      0     stevel cat >> $dest <<EOM
    927      0     stevel #
    928      0     stevel # These settings determine the default privileges users have.  If not set,
    929      0     stevel # the default privileges are taken from the inherited set.
    930      0     stevel # There are two different settings; PRIV_DEFAULT determines the default
    931      0     stevel # set on login; PRIV_LIMIT defines the Limit set on login.
    932      0     stevel # Individual users can have privileges assigned or taken away through
    933      0     stevel # user_attr.  Privileges can also be assigned to profiles in which case
    934      0     stevel # the users with those profiles can use those privileges through pfexec(1m).
    935      0     stevel # For maximum future compatibility, the specifications should
    936      0     stevel # always include "basic" or "all"; privileges should then be removed using
    937      0     stevel # the negation.  E.g., PRIV_LIMIT=all,!sys_linkdir takes away only the
    938      0     stevel # sys_linkdir privilege, regardless of future additional privileges.
    939      0     stevel # Similarly, PRIV_DEFAULT=basic,!file_link_any takes away only the
    940      0     stevel # file_link_any privilege from the basic privilege set; only that notation
    941      0     stevel # is immune from a future addition of currently unprivileged operations to
    942      0     stevel # the basic privilege set.
    943      0     stevel # NOTE: removing privileges from the the Limit set requires EXTREME care
    944      0     stevel # as any set-uid root program may suddenly fail because it lacks certain
    945      0     stevel # privilege(s).
    946      0     stevel #
    947      0     stevel #PRIV_DEFAULT=basic
    948      0     stevel #PRIV_LIMIT=all
    949      0     stevel EOM
    950      0     stevel 	fi
    951      0     stevel 
    952      0     stevel }
    953      0     stevel 
    954      0     stevel #
    955      0     stevel # Cleanup nfsmapid configuration before extracting
    956      0     stevel # root bits.  Remove if they exist:
    957      0     stevel #	nfsmapid entry in inetd.conf
    958      0     stevel #	nfsmapid entry in /etc/net/ti*/services
    959      0     stevel #
    960      0     stevel # Going forward neither should exist, but no harm if services entry exists
    961      0     stevel # Going way backwards (pre-04/28/2004), inetd.conf must exist but will
    962      0     stevel # be a conflict that should be merged in
    963      0     stevel #
    964      0     stevel nfsmapid_cfg() {
    965      0     stevel 	inetdconf=$rootprefix/etc/inet/inetd.conf
    966      0     stevel 	tmpinetcf=/tmp/inetd.conf.$$
    967      0     stevel 	cp -pf ${inetdconf} ${tmpinetcf}
    968      0     stevel 	cat /dev/null > ${inetdconf} 2>&1
    969      0     stevel        	sed -e "/^#[#	 ]*NFSv4/d"		\
    970      0     stevel 	    -e "/^[#	 ]*100166\/1/d"		\
    971      0     stevel 	    ${tmpinetcf} > ${inetdconf} 2>&1
    972      0     stevel 	rm -f ${tmpinetcf}
    973      0     stevel 
    974      0     stevel 	tmpservices=/tmp/services.$$
    975      0     stevel 
    976      0     stevel 	services=$rootprefix/etc/net/ticotsord/services
    977      0     stevel 	cp -pf ${services} ${tmpservices}
    978      0     stevel 	cat /dev/null > ${services} 2>&1
    979      0     stevel        	sed -e "/^[#	 ]*nfsmapid/d"		\
    980      0     stevel 	    ${tmpservices} > ${services} 2>&1
    981      0     stevel 	rm -f ${tmpservices}
    982      0     stevel 
    983      0     stevel 	services=$rootprefix/etc/net/ticots/services
    984      0     stevel 	cp -pf ${services} ${tmpservices}
    985      0     stevel 	cat /dev/null > ${services} 2>&1
    986      0     stevel        	sed -e "/^[#	 ]*nfsmapid/d"		\
    987      0     stevel 	    ${tmpservices} > ${services} 2>&1
    988      0     stevel 	rm -f ${tmpservices}
    989      0     stevel 
    990      0     stevel 	services=$rootprefix/etc/net/ticlts/services
    991      0     stevel 	cp -pf ${services} ${tmpservices}
    992      0     stevel 	cat /dev/null > ${services} 2>&1
    993      0     stevel        	sed -e "/^[#	 ]*nfsmapid/d"		\
    994      0     stevel 	    ${tmpservices} > ${services} 2>&1
    995      0     stevel 	rm -f ${tmpservices}
    996   9484    garrett }
    997   9484    garrett 
    998   9484    garrett #
    999   9484    garrett # Detect Boomer audio framework; used to emit a notice at the end of BFU
   1000   9484    garrett # telling the user to run update_audio to complete the upgrade.
   1001   9484    garrett #
   1002   9484    garrett BOOMER_PRESENT_SYS=false
   1003   9484    garrett BOOMER_PRESENT_BFU=false
   1004  10157    gdamore BOOMER_DRIVERS="audio"
   1005  10331    gdamore AUSTR_PRESENT_SYS=false
   1006  10331    gdamore AUSTR_PRESENT_BFU=false
   1007   9484    garrett 
   1008   9484    garrett check_boomer_sys() {
   1009   9484    garrett 	typeset root=$1
   1010   9484    garrett 	typeset n2m=$root/etc/name_to_major
   1011   9484    garrett 	typeset drv
   1012   9484    garrett 
   1013   9484    garrett 	for drv in $BOOMER_DRIVERS; do
   1014   9484    garrett 		if ! grep -w $drv $n2m > /dev/null 2>&1; then
   1015   9484    garrett 			return 1
   1016   9484    garrett 		fi
   1017   9484    garrett 	done
   1018   9484    garrett 
   1019   9484    garrett 	return 0
   1020   9484    garrett }
   1021   9484    garrett 
   1022   9484    garrett check_boomer_bfu() {
   1023   9484    garrett 	$ZCAT $cpiodir/generic.root$ZFIX | cpio -it 2>/dev/null |
   1024   9484    garrett 	    grep devices-audio.xml > /dev/null 2>&1
   1025      0     stevel }
   1026      0     stevel 
   1027  10331    gdamore check_austr_sys() {
   1028  10331    gdamore 	typeset root=$1
   1029  10331    gdamore 	typeset n2m=$root/etc/name_to_major
   1030  10331    gdamore 	typeset drv
   1031  10331    gdamore 
   1032  10331    gdamore 	if ! grep -w austr $n2m > /dev/null 2>&1; then
   1033  10331    gdamore 		return 1
   1034  10331    gdamore 	fi
   1035  10331    gdamore 	return 0
   1036  10331    gdamore }
   1037  10331    gdamore 
   1038  10331    gdamore check_austr_bfu() {
   1039  10331    gdamore 	$ZCAT $cpiodir/generic.kernel$ZFIX | cpio -it 2>/dev/null |
   1040  10331    gdamore 	    grep austr > /dev/null 2>&1
   1041  10331    gdamore }
   1042  10331    gdamore 
   1043  10331    gdamore #
   1044   2315     rmesta #
   1045      0     stevel # Define global variables
   1046      0     stevel #
   1047      0     stevel CALL_DEVID_DESTROY=""
   1048      0     stevel #
   1049      0     stevel # List of SDS commands that must be deleted.
   1050      0     stevel #
   1051      0     stevel SDSCMDLIST="
   1052      0     stevel growfs
   1053      0     stevel metaclear
   1054      0     stevel metadb
   1055      0     stevel metadetach
   1056      0     stevel metahs
   1057      0     stevel metainit
   1058      0     stevel metaoffline
   1059      0     stevel metaonline
   1060      0     stevel metaparam
   1061      0     stevel metarename
   1062      0     stevel metareplace
   1063      0     stevel metaroot
   1064      0     stevel metaset
   1065      0     stevel metastat
   1066      0     stevel metasync
   1067      0     stevel metattach
   1068      0     stevel rpc.metad
   1069      0     stevel rpc.metamhd
   1070      0     stevel "
   1071      0     stevel #
   1072      0     stevel # List of SDS configuration files that must be deleted.
   1073      0     stevel #
   1074      0     stevel SDSCONFIGLIST="
   1075      0     stevel lock
   1076      0     stevel md.cf
   1077      0     stevel mddb.cf
   1078      0     stevel md.tab
   1079      0     stevel devpath
   1080      0     stevel md.ctlrmap
   1081      0     stevel "
   1082      0     stevel #
   1083      0     stevel # List of rc scripts that must be deleted.
   1084      0     stevel #
   1085      0     stevel RCLIST="
   1086      0     stevel etc/init.d/SUNWmd.init
   1087      0     stevel etc/init.d/SUNWmd.sync
   1088      0     stevel etc/init.d/lvm.init
   1089      0     stevel etc/init.d/lvm.sync
   1090      0     stevel etc/rcS.d/S35SUNWmd.init
   1091      0     stevel etc/rcS.d/S35lvm.init
   1092      0     stevel etc/rc2.d/S95SUNWmd.sync
   1093      0     stevel etc/rc2.d/S95lvm.sync
   1094      0     stevel etc/rcS.d/S35slvm.init
   1095      0     stevel etc/rc2.d/S95slvm.sync
   1096      0     stevel etc/init.d/slvm.init
   1097      0     stevel etc/init.d/slvm.sync
   1098      0     stevel etc/init.d/init.mdlogd
   1099      0     stevel etc/rc3.d/S25mdlogd
   1100      0     stevel "
   1101      0     stevel #
   1102      0     stevel # List of flashprom-related files that must be deleted.
   1103      0     stevel #
   1104      0     stevel FLASHPROMLIST="
   1105      0     stevel etc/rc2.d/S75flashprom
   1106      0     stevel etc/init.d/flashprom
   1107      0     stevel usr/platform/SUNW,Ultra-2/lib/flash-update.sh
   1108      0     stevel usr/platform/SUNW,Ultra-4/lib/flash-update.sh
   1109      0     stevel usr/platform/SUNW,Ultra-Enterprise/lib/flash-update.sh
   1110      0     stevel usr/platform/sun4u/doc/flashupdate.txt
   1111      0     stevel usr/platform/sun4u/lib/flash-update.sh
   1112      0     stevel usr/platform/sun4u/lib/prom/SUNW,Ultra-2
   1113      0     stevel usr/platform/sun4u/lib/prom/SUNW,Ultra-4
   1114      0     stevel usr/platform/sun4u/lib/prom/SUNW,Ultra-Enterprise
   1115      0     stevel "
   1116      0     stevel 
   1117      0     stevel #
   1118      0     stevel # delete the entries associated with bootlist from /etc/system
   1119      0     stevel #
   1120      0     stevel 
   1121      0     stevel delete_system_bootlist() {
   1122      0     stevel 	sed -e /"Begin MDD database info"/,/"End MDD database info"/d \
   1123      0     stevel 	    < ${SYSTEM_FILE} > /tmp/system.$$
   1124      0     stevel 	cp /tmp/system.$$ ${SYSTEM_FILE} || \
   1125      0     stevel 	    echo "copy error: /tmp/system.$$ to ${SYSTEM_FILE}"
   1126      0     stevel }
   1127      0     stevel 
   1128      0     stevel #
   1129      0     stevel # Add entries in md.conf for bootlist
   1130      0     stevel #
   1131      0     stevel 
   1132      0     stevel fix_mdconf() {
   1133      0     stevel 	cp ${mdconf} /tmp/md.conf.$$
   1134      0     stevel 	echo >> /tmp/md.conf.$$
   1135      0     stevel 	echo "# Begin MDD database info (do not edit)" >> /tmp/md.conf.$$
   1136      0     stevel 	sed -e 's/^set md://' -e 's/$/;/' ${SYSTEM_FILE} | \
   1137      0     stevel 	    grep mddb_bootlist >> /tmp/md.conf.$$
   1138      0     stevel 	echo "# End MDD database info (do not edit)" >> /tmp/md.conf.$$
   1139      0     stevel 	cp /tmp/md.conf.$$ ${mdconf} || \
   1140      0     stevel 	    echo "copy error: /tmp/md.conf.$$ to ${mdconf}"
   1141      0     stevel }
   1142      0     stevel 
   1143      0     stevel #
   1144      0     stevel # add_devid_destroy(filename)
   1145      0     stevel # returns contents in filename
   1146      0     stevel # md_devid_destroy property is required when upgrading
   1147      0     stevel # from pre SVM to SVM releases or when the device ID returned from
   1148      0     stevel # the driver changes.
   1149      0     stevel # It is specifically placed between
   1150      0     stevel # # Begin MDD database info and # End MDD database info because
   1151      0     stevel # on the subsequent reboot, this line will be removed automatically when
   1152      0     stevel # metadevadm is run in rc2.d.
   1153      0     stevel #
   1154      0     stevel add_devid_destroy() {
   1155      0     stevel 	cat $1 | awk '{
   1156      0     stevel 		if ( $2 == "End" && $4 == "database") {
   1157      0     stevel 			print "md_devid_destroy=1;"
   1158      0     stevel 		}
   1159      0     stevel 		print $0
   1160      0     stevel 	}' >> /tmp/t$$
   1161      0     stevel 	mv /tmp/t$$ $1
   1162   4119   tn143363 }
   1163   4119   tn143363 
   1164   4119   tn143363 #
   1165   4119   tn143363 # Reads existing configuration values in /etc/rcap.conf and puts 
   1166   4119   tn143363 # them in repository upon reboot(via /var/svc/profile/upgrade).
   1167   4119   tn143363 #
   1168   4119   tn143363 migrate_rcap_conf() {
   1169   4119   tn143363 	RCAP_CONF="${rootprefix}/etc/rcap.conf"
   1170   4119   tn143363 	PROFILE_UPGRADE="${rootprefix}/var/svc/profile/upgrade"
   1171   4119   tn143363 	SVCCFG="/usr/sbin/svccfg"
   1172   4119   tn143363 	RCAP_FMRI="svc:/system/rcap:default"
   1173   4119   tn143363 	PG="config"
   1174   4119   tn143363 
   1175   4119   tn143363 	pressure=`awk '$1 == "RCAPD_MEMORY_CAP_ENFORCEMENT_PRESSURE" \
   1176   4119   tn143363 	    && NF == 3 {print $3}' $RCAP_CONF`
   1177   4119   tn143363 
   1178   4119   tn143363 	reconfig_int=`awk '$1 == "RCAPD_RECONFIGURATION_INTERVAL" \
   1179   4119   tn143363 	    && NF == 3 {print $3}' $RCAP_CONF`
   1180   4119   tn143363 
   1181   4119   tn143363 	walk_int=`awk '$1 == "RCAPD_PROC_WALK_INTERVAL" && \
   1182   4119   tn143363 	    NF == 3 {print $3}' $RCAP_CONF`
   1183   4119   tn143363 
   1184   4119   tn143363 	report_int=`awk '$1 == "RCAPD_REPORT_INTERVAL" && \
   1185   4119   tn143363 	    NF == 3 {print $3}' $RCAP_CONF`
   1186   4119   tn143363 
   1187   4119   tn143363 	rss_sample_int=`awk '$1 == "RCAPD_RSS_SAMPLE_INTERVAL" && \
   1188   4119   tn143363 	    NF == 3 {print $3}' $RCAP_CONF`
   1189   4119   tn143363 
   1190   4119   tn143363 	# Blindly update default configuration values with
   1191   4119   tn143363 	# pre-existing values
   1192   4119   tn143363 	#
   1193   4119   tn143363 	echo "# Migrating pre-existing rcap configuration" >> \
   1194   4119   tn143363 	    $PROFILE_UPGRADE
   1195   4119   tn143363 
   1196   4119   tn143363 	echo "$SVCCFG -s $RCAP_FMRI setprop ${PG}/pressure = " \
   1197   4119   tn143363 	    "$pressure" >> $PROFILE_UPGRADE
   1198   4119   tn143363 
   1199   4119   tn143363 	echo "$SVCCFG -s $RCAP_FMRI " \
   1200   4119   tn143363 	    "setprop ${PG}/reconfig_interval = $reconfig_int" >> \
   1201   4119   tn143363 	    $PROFILE_UPGRADE
   1202   4119   tn143363 
   1203   4119   tn143363 	echo "$SVCCFG -s $RCAP_FMRI " \
   1204   4119   tn143363 	    "setprop ${PG}/walk_interval = $walk_int" >> \
   1205   4119   tn143363 	    $PROFILE_UPGRADE
   1206   4119   tn143363 
   1207   4119   tn143363 	echo "$SVCCFG -s $RCAP_FMRI " \
   1208   4119   tn143363 	    "setprop ${PG}/report_interval = $report_int" >> \
   1209   4119   tn143363 	    $PROFILE_UPGRADE
   1210   4119   tn143363 
   1211   4119   tn143363 	echo "$SVCCFG -s $RCAP_FMRI " \
   1212   4119   tn143363 	    "setprop ${PG}/rss_sample_interval = $rss_sample_int" >> \
   1213   4119   tn143363 	    $PROFILE_UPGRADE
   1214   4119   tn143363 
   1215   4119   tn143363 	echo "/usr/sbin/svcadm refresh $RCAP_FMRI" >> \
   1216   4119   tn143363 	    $PROFILE_UPGRADE
   1217   4119   tn143363 
   1218   4119   tn143363 	echo "rm /etc/rcap.conf" >> \
   1219   4119   tn143363 	    $PROFILE_UPGRADE
   1220      0     stevel }
   1221      0     stevel 
   1222      0     stevel #
   1223   7103    ml93401 # Migrate an existing extended accounting configuration from /etc/acctadm.conf
   1224   7103    ml93401 # to the smf(5) repository upon reboot.  Enable the instance if the 
   1225   7103    ml93401 # configuration differs from the default configuration.
   1226   7103    ml93401 #
   1227   7103    ml93401 migrate_acctadm_conf()
   1228   7103    ml93401 {
   1229   7103    ml93401 	cat >> $rootprefix/var/svc/profile/upgrade <<\_EOF
   1230   7103    ml93401 	if [ -f /etc/acctadm.conf ]; then 
   1231   7103    ml93401 		. /etc/acctadm.conf
   1232   7103    ml93401 
   1233   7103    ml93401 		fmri="svc:/system/extended-accounting:flow"
   1234   9263       Sean 		eval $BFUSVCCFG -s $fmri setprop config/file = \
   1235   7103    ml93401 		    ${ACCTADM_FLOW_FILE:="none"}
   1236   9263       Sean 		eval $BFUSVCCFG -s $fmri setprop config/tracked = \
   1237   7103    ml93401 		    ${ACCTADM_FLOW_TRACKED:="none"}
   1238   9263       Sean 		eval $BFUSVCCFG -s $fmri setprop config/untracked = \
   1239   7103    ml93401 		    ${ACCTADM_FLOW_UNTRACKED:="extended"}
   1240   7103    ml93401 		if [ ${ACCTADM_FLOW_ENABLE:="no"} = "yes" ]; then
   1241   9263       Sean 			eval $BFUSVCCFG -s $fmri setprop config/enabled = "true"
   1242   9263       Sean 		else
   1243   9263       Sean 			eval $BFUSVCCFG -s $fmri setprop config/enabled = "false"
   1244   7103    ml93401 		fi
   1245   7103    ml93401 		if [ $ACCTADM_FLOW_ENABLE = "yes" -o \
   1246   7103    ml93401 		    $ACCTADM_FLOW_FILE != "none" -o \
   1247   7103    ml93401 		    $ACCTADM_FLOW_TRACKED != "none" ]; then
   1248   7103    ml93401 			svcadm enable $fmri
   1249   7103    ml93401 		fi
   1250   7103    ml93401 
   1251   7103    ml93401 		fmri="svc:/system/extended-accounting:process"
   1252   9263       Sean 		eval $BFUSVCCFG -s $fmri setprop config/file = \
   1253   7103    ml93401 		    ${ACCTADM_PROC_FILE:="none"}
   1254   9263       Sean 		eval $BFUSVCCFG -s $fmri setprop config/tracked = \
   1255   7103    ml93401 		    ${ACCTADM_PROC_TRACKED:="none"}
   1256   9263       Sean 		eval $BFUSVCCFG -s $fmri setprop config/untracked = \
   1257   7103    ml93401 		    ${ACCTADM_PROC_UNTRACKED:="extended"}
   1258   7103    ml93401 		if [ ${ACCTADM_PROC_ENABLE:="no"} = "yes" ]; then
   1259   9263       Sean 			eval $BFUSVCCFG -s $fmri setprop config/enabled = "true"
   1260   9263       Sean 		else
   1261   9263       Sean 			eval $BFUSVCCFG -s $fmri setprop config/enabled = "false"
   1262   7103    ml93401 		fi
   1263   7103    ml93401 		if [ $ACCTADM_PROC_ENABLE = "yes" -o \
   1264   7103    ml93401 		    $ACCTADM_PROC_FILE != "none" -o \
   1265   7103    ml93401 		    $ACCTADM_PROC_TRACKED != "none" ]; then
   1266   7103    ml93401 			svcadm enable $fmri
   1267   7103    ml93401 		fi
   1268   7103    ml93401 
   1269   7103    ml93401 		fmri="svc:/system/extended-accounting:task"
   1270   9263       Sean 		eval $BFUSVCCFG -s $fmri setprop config/file = \
   1271   7103    ml93401 		    ${ACCTADM_TASK_FILE:="none"}
   1272   9263       Sean 		eval $BFUSVCCFG -s $fmri setprop config/tracked = \
   1273   7103    ml93401 		    ${ACCTADM_TASK_TRACKED:="none"}
   1274   9263       Sean 		eval $BFUSVCCFG -s $fmri setprop config/untracked = \
   1275   7103    ml93401 		    ${ACCTADM_TASK_UNTRACKED:="extended"}
   1276   7103    ml93401 		if [ ${ACCTADM_TASK_ENABLE:="no"} = "yes" ]; then
   1277   9263       Sean 			eval $BFUSVCCFG -s $fmri setprop config/enabled = "true"
   1278   9263       Sean 		else
   1279   9263       Sean 			eval $BFUSVCCFG -s $fmri setprop config/enabled = "false"
   1280   7103    ml93401 		fi
   1281   7103    ml93401 		if [ $ACCTADM_TASK_ENABLE = "yes" -o \
   1282   7103    ml93401 		    $ACCTADM_TASK_FILE != "none" -o \
   1283   7103    ml93401 		    $ACCTADM_TASK_TRACKED != "none" ]; then
   1284   8275       Eric 			svcadm enable $fmri
   1285   8275       Eric 		fi
   1286   8275       Eric 
   1287   8275       Eric 		fmri="svc:/system/extended-accounting:net"
   1288   9263       Sean 		eval $BFUSVCCFG -s $fmri setprop config/file = \
   1289   8275       Eric 		    ${ACCTADM_NET_FILE:="none"}
   1290   9263       Sean 		eval $BFUSVCCFG -s $fmri setprop config/tracked = \
   1291   8275       Eric 		    ${ACCTADM_NET_TRACKED:="none"}
   1292   9263       Sean 		eval $BFUSVCCFG -s $fmri setprop config/untracked = \
   1293   8275       Eric 		    ${ACCTADM_NET_UNTRACKED:="extended"}
   1294   8275       Eric 		if [ ${ACCTADM_NET_ENABLE:="no"} = "yes" ]; then
   1295   9263       Sean 			eval $BFUSVCCFG -s $fmri setprop config/enabled = "true"
   1296   9263       Sean 		else
   1297   9263       Sean 			eval $BFUSVCCFG -s $fmri setprop config/enabled = "false"
   1298   8275       Eric 		fi
   1299   8275       Eric 		if [ $ACCTADM_NET_ENABLE = "yes" -o \
   1300   8275       Eric 		    $ACCTADM_NET_FILE != "none" -o \
   1301   8275       Eric 		    $ACCTADM_NET_TRACKED != "none" ]; then
   1302   7103    ml93401 			svcadm enable $fmri
   1303   7103    ml93401 		fi
   1304   7103    ml93401 
   1305   7103    ml93401 		rm /etc/acctadm.conf
   1306   7103    ml93401 	fi
   1307   7103    ml93401 _EOF
   1308   7103    ml93401 }
   1309   7103    ml93401 
   1310   7103    ml93401 #
   1311      0     stevel # smf(5) "Greenline" doesn't install the init.d or rc*.d scripts for
   1312      0     stevel # converted services.  Clean up previous scripts for such services.
   1313      0     stevel #
   1314      0     stevel smf_obsolete_rc_files="
   1315      0     stevel 	etc/init.d/ANNOUNCE
   1316      0     stevel 	etc/init.d/MOUNTFSYS
   1317      0     stevel 	etc/init.d/RMTMPFILES
   1318   7103    ml93401 	etc/init.d/acctadm
   1319      0     stevel 	etc/init.d/audit
   1320      0     stevel 	etc/init.d/autofs
   1321  10370     Thomas 	etc/init.d/boot.server
   1322      0     stevel 	etc/init.d/coreadm
   1323      0     stevel 	etc/init.d/cron
   1324      0     stevel 	etc/init.d/cryptosvc
   1325      0     stevel 	etc/init.d/cvc
   1326      0     stevel 	etc/init.d/devfsadm
   1327      0     stevel 	etc/init.d/dhcp
   1328      0     stevel 	etc/init.d/dhcpagent
   1329      0     stevel 	etc/init.d/domainname
   1330      0     stevel 	etc/init.d/efcode
   1331      0     stevel 	etc/init.d/inetd
   1332      0     stevel 	etc/init.d/inetinit
   1333      0     stevel 	etc/init.d/inetsvc
   1334      0     stevel 	etc/init.d/initboot
   1335      0     stevel 	etc/init.d/ipfboot
   1336      0     stevel 	etc/init.d/kdc
   1337      0     stevel 	etc/init.d/kdc.master
   1338      0     stevel 	etc/init.d/keymap
   1339      0     stevel 	etc/init.d/ldap.client
   1340      0     stevel 	etc/init.d/libc.mount
   1341      0     stevel 	etc/init.d/network
   1342      0     stevel 	etc/init.d/nfs.client
   1343      0     stevel 	etc/init.d/nodename
   1344      0     stevel 	etc/init.d/nscd
   1345      0     stevel 	etc/init.d/perf
   1346      0     stevel 	etc/init.d/picld
   1347      0     stevel 	etc/init.d/power
   1348      0     stevel 	etc/init.d/rcapd
   1349      0     stevel 	etc/init.d/rootusr
   1350      0     stevel 	etc/init.d/rpc
   1351      0     stevel 	etc/init.d/savecore
   1352   1872      comay 	etc/init.d/sckm
   1353      0     stevel 	etc/init.d/sf880dr
   1354      0     stevel 	etc/init.d/slpd
   1355      0     stevel 	etc/init.d/sshd
   1356      0     stevel 	etc/init.d/standardmounts
   1357      0     stevel 	etc/init.d/svm.init
   1358      0     stevel 	etc/init.d/svm.sync
   1359      0     stevel 	etc/init.d/sysid.net
   1360      0     stevel 	etc/init.d/sysid.sys
   1361      0     stevel 	etc/init.d/syslog
   1362      0     stevel 	etc/init.d/utmpd
   1363   2912      artem 	etc/init.d/volmgt
   1364      0     stevel 	etc/init.d/xntpd
   1365      0     stevel 	etc/init.d/zones
   1366      0     stevel 	etc/rc0.d/K00ANNOUNCE
   1367      0     stevel 	etc/rc0.d/K01zones
   1368      0     stevel 	etc/rc0.d/K03sshd
   1369    196      frits 	etc/rc0.d/K05volmgt
   1370   2118        jjj 	etc/rc0.d/K07snmpdx
   1371      0     stevel 	etc/rc0.d/K10rcapd
   1372      0     stevel 	etc/rc0.d/K21dhcp
   1373  10370     Thomas 	etc/rc0.d/K27boot.server
   1374      0     stevel 	etc/rc0.d/K28kdc
   1375      0     stevel 	etc/rc0.d/K28kdc.master
   1376      0     stevel 	etc/rc0.d/K28nfs.server
   1377      0     stevel 	etc/rc0.d/K32cryptosvc
   1378      0     stevel 	etc/rc0.d/K33audit
   1379      0     stevel 	etc/rc0.d/K33efcode
   1380      0     stevel 	etc/rc0.d/K34svm.sync
   1381      0     stevel 	etc/rc0.d/K36sendmail
   1382      0     stevel 	etc/rc0.d/K36utmpd
   1383      0     stevel 	etc/rc0.d/K37power
   1384      0     stevel 	etc/rc0.d/K40cron
   1385      0     stevel 	etc/rc0.d/K40inetd
   1386      0     stevel 	etc/rc0.d/K40nscd
   1387      0     stevel 	etc/rc0.d/K40sf880dr
   1388      0     stevel 	etc/rc0.d/K40slpd
   1389      0     stevel 	etc/rc0.d/K40syslog
   1390      0     stevel 	etc/rc0.d/K40xntpd
   1391      0     stevel 	etc/rc0.d/K41autofs
   1392      0     stevel 	etc/rc0.d/K41ldap.client
   1393      0     stevel 	etc/rc0.d/K41nfs.client
   1394      0     stevel 	etc/rc0.d/K41rpc
   1395   1872      comay 	etc/rc0.d/K42sckm
   1396      0     stevel 	etc/rc0.d/K43inet
   1397      0     stevel 	etc/rc0.d/K68picld
   1398      0     stevel 	etc/rc0.d/K83devfsadm
   1399      0     stevel 	etc/rc0.d/K90dhcpagent
   1400      0     stevel 	etc/rc1.d/K00ANNOUNCE
   1401      0     stevel 	etc/rc1.d/K01zones
   1402      0     stevel 	etc/rc1.d/K03sshd
   1403    196      frits 	etc/rc1.d/K05volmgt
   1404   2118        jjj 	etc/rc1.d/K07snmpdx
   1405      0     stevel 	etc/rc1.d/K10rcapd
   1406      0     stevel 	etc/rc1.d/K21dhcp
   1407  10370     Thomas 	etc/rc1.d/K27boot.server
   1408      0     stevel 	etc/rc1.d/K28kdc
   1409      0     stevel 	etc/rc1.d/K28kdc.master
   1410      0     stevel 	etc/rc1.d/K28nfs.server
   1411      0     stevel 	etc/rc1.d/K33audit
   1412      0     stevel 	etc/rc1.d/K33efcode
   1413      0     stevel 	etc/rc1.d/K34svm.sync
   1414      0     stevel 	etc/rc1.d/K36sendmail
   1415      0     stevel 	etc/rc1.d/K36utmpd
   1416      0     stevel 	etc/rc1.d/K37power
   1417      0     stevel 	etc/rc1.d/K40cron
   1418      0     stevel 	etc/rc1.d/K40inetd
   1419      0     stevel 	etc/rc1.d/K40nscd
   1420      0     stevel 	etc/rc1.d/K40sf880dr
   1421      0     stevel 	etc/rc1.d/K40slpd
   1422      0     stevel 	etc/rc1.d/K40syslog
   1423      0     stevel 	etc/rc1.d/K40xntpd
   1424      0     stevel 	etc/rc1.d/K41autofs
   1425      0     stevel 	etc/rc1.d/K41ldap.client
   1426      0     stevel 	etc/rc1.d/K41rpc
   1427   1872      comay 	etc/rc1.d/K42sckm
   1428      0     stevel 	etc/rc1.d/K43inet
   1429      0     stevel 	etc/rc1.d/K99libc.mount
   1430      0     stevel 	etc/rc1.d/S01MOUNTFSYS
   1431      0     stevel 	etc/rc2.d/K01zones
   1432      0     stevel 	etc/rc2.d/K03sshd
   1433    196      frits 	etc/rc2.d/K05volmgt
   1434   2118        jjj 	etc/rc2.d/K07snmpdx
   1435      0     stevel 	etc/rc2.d/K21dhcp
   1436  10370     Thomas 	etc/rc2.d/K27boot.server
   1437      0     stevel 	etc/rc2.d/K28kdc
   1438      0     stevel 	etc/rc2.d/K28kdc.master
   1439      0     stevel 	etc/rc2.d/K28nfs.server
   1440      0     stevel 	etc/rc2.d/S01MOUNTFSYS
   1441      0     stevel 	etc/rc2.d/S05RMTMPFILES
   1442      0     stevel 	etc/rc2.d/S21perf
   1443      0     stevel 	etc/rc2.d/S30sysid.net
   1444      0     stevel 	etc/rc2.d/S65ipfboot
   1445      0     stevel 	etc/rc2.d/S69domainname
   1446      0     stevel 	etc/rc2.d/S69inet
   1447   1872      comay 	etc/rc2.d/S70sckm
   1448      0     stevel 	etc/rc2.d/S71ldap.client
   1449      0     stevel 	etc/rc2.d/S71rpc
   1450      0     stevel 	etc/rc2.d/S71sysid.sys
   1451      0     stevel 	etc/rc2.d/S72inetsvc
   1452      0     stevel 	etc/rc2.d/S72slpd
   1453      0     stevel 	etc/rc2.d/S73nfs.client
   1454      0     stevel 	etc/rc2.d/S74autofs
   1455      0     stevel 	etc/rc2.d/S74syslog
   1456      0     stevel 	etc/rc2.d/S74xntpd
   1457      0     stevel 	etc/rc2.d/S75cron
   1458      0     stevel 	etc/rc2.d/S75savecore
   1459      0     stevel 	etc/rc2.d/S76nscd
   1460      0     stevel 	etc/rc2.d/S77inetd
   1461      0     stevel 	etc/rc2.d/S77sf880dr
   1462      0     stevel 	etc/rc2.d/S85power
   1463      0     stevel 	etc/rc2.d/S88sendmail
   1464      0     stevel 	etc/rc2.d/S88utmpd
   1465      0     stevel 	etc/rc2.d/S95svm.sync
   1466      0     stevel 	etc/rc2.d/S98efcode
   1467      0     stevel 	etc/rc2.d/S98libc.mount
   1468      0     stevel 	etc/rc2.d/S99audit
   1469      0     stevel 	etc/rc2.d/S99rcapd
   1470      0     stevel 	etc/rc3.d/S13kdc.master
   1471      0     stevel 	etc/rc3.d/S14kdc
   1472      0     stevel 	etc/rc3.d/S15nfs.server
   1473  10370     Thomas 	etc/rc3.d/S16boot.server
   1474      0     stevel 	etc/rc3.d/S34dhcp
   1475   2118        jjj 	etc/rc3.d/S76snmpdx
   1476    196      frits 	etc/rc3.d/S81volmgt
   1477      0     stevel 	etc/rc3.d/S89sshd
   1478      0     stevel 	etc/rc3.d/S99zones
   1479      0     stevel 	etc/rcS.d/K01zones
   1480      0     stevel 	etc/rcS.d/K03sshd
   1481    196      frits 	etc/rcS.d/K05volmgt
   1482   2118        jjj 	etc/rcS.d/K07snmpdx
   1483      0     stevel 	etc/rcS.d/K10rcapd
   1484      0     stevel 	etc/rcS.d/K21dhcp
   1485  10370     Thomas 	etc/rcS.d/K27boot.server
   1486      0     stevel 	etc/rcS.d/K28kdc
   1487      0     stevel 	etc/rcS.d/K28kdc.master
   1488      0     stevel 	etc/rcS.d/K28nfs.server
   1489      0     stevel 	etc/rcS.d/K33audit
   1490      0     stevel 	etc/rcS.d/K33efcode
   1491      0     stevel 	etc/rcS.d/K34svm.sync
   1492      0     stevel 	etc/rcS.d/K36sendmail
   1493      0     stevel 	etc/rcS.d/K36utmpd
   1494      0     stevel 	etc/rcS.d/K37power
   1495      0     stevel 	etc/rcS.d/K40cron
   1496      0     stevel 	etc/rcS.d/K40inetd
   1497      0     stevel 	etc/rcS.d/K40nscd
   1498      0     stevel 	etc/rcS.d/K40sf880dr
   1499      0     stevel 	etc/rcS.d/K40slpd
   1500      0     stevel 	etc/rcS.d/K40syslog
   1501      0     stevel 	etc/rcS.d/K40xntpd
   1502      0     stevel 	etc/rcS.d/K41autofs
   1503      0     stevel 	etc/rcS.d/K41ldap.client
   1504      0     stevel 	etc/rcS.d/K41rpc
   1505   1872      comay 	etc/rcS.d/K42sckm
   1506      0     stevel 	etc/rcS.d/K43inet
   1507      0     stevel 	etc/rcS.d/K99libc.mount
   1508      0     stevel 	etc/rcS.d/S10cvc
   1509      0     stevel 	etc/rcS.d/S28network.sh
   1510      0     stevel 	etc/rcS.d/S29nodename.sh
   1511      0     stevel 	etc/rcS.d/S30rootusr.sh
   1512      0     stevel 	etc/rcS.d/S33keymap.sh
   1513      0     stevel 	etc/rcS.d/S35svm.init
   1514      0     stevel 	etc/rcS.d/S40standardmounts.sh
   1515      0     stevel 	etc/rcS.d/S42coreadm
   1516      0     stevel 	etc/rcS.d/S45initboot
   1517      0     stevel 	etc/rcS.d/S50devfsadm
   1518      0     stevel 	etc/rcS.d/S72cryptosvc
   1519      0     stevel 	etc/rcS.d/S95picld
   1520      0     stevel "
   1521      0     stevel 
   1522      0     stevel # Obsolete smf manifests
   1523      0     stevel smf_obsolete_manifests="
   1524   3781    ceastha 	var/svc/manifest/application/print/cleanup.xml
   1525      0     stevel 	var/svc/manifest/network/tftp.xml
   1526      0     stevel 	var/svc/manifest/network/lp.xml
   1527   2912      artem 	var/svc/manifest/system/filesystem/volfs.xml
   1528   2958   dr146992 	var/svc/manifest/network/pfil.xml
   1529   3385   qh201292 	var/svc/manifest/platform/sun4u/mpxio-upgrade.xml
   1530   4097    gd78059 	var/svc/manifest/network/tname.xml
   1531   5895   yz147064 	var/svc/manifest/network/aggregation.xml
   1532   5895   yz147064 	var/svc/manifest/network/datalink.xml
   1533   5895   yz147064 	var/svc/manifest/network/datalink-init.xml
   1534   9201       Jack 	var/svc/manifest/network/iscsi_initiator.xml
   1535   9895      Kevin 	var/svc/manifest/network/fcoe_config.xml
   1536  10702     Darren 	var/svc/manifest/network/rpc/ocfserv.xml
   1537      0     stevel "
   1538      0     stevel 
   1539      0     stevel # smf services whose manifests have been renamed
   1540      0     stevel smf_renamed_manifests="
   1541      0     stevel 	var/svc/manifest/milestone/name-service.xml
   1542     25      szhou 	var/svc/manifest/system/filesystem/boot-archive.xml
   1543      0     stevel "
   1544      0     stevel 
   1545      0     stevel # Obsolete smf methods
   1546      0     stevel smf_obsolete_methods="
   1547   3781    ceastha 	lib/svc/method/print-cleanup
   1548      0     stevel 	lib/svc/method/print-server
   1549   2912      artem 	lib/svc/method/svc-volfs
   1550   2958   dr146992 	lib/svc/method/pfil
   1551   5895   yz147064 	lib/svc/method/aggregation
   1552   5895   yz147064 	lib/svc/method/datalink
   1553   5895   yz147064 	lib/svc/method/datalink-init
   1554   6426   mp153739 	lib/svc/method/svc-kdc
   1555   6426   mp153739 	lib/svc/method/svc-kdc.master
   1556   6426   mp153739 	lib/svc/method/svc-kdc.slave
   1557   6426   mp153739 	lib/svc/share/krb_include.sh
   1558   9201       Jack 	lib/svc/method/iscsid
   1559   9895      Kevin 	lib/svc/method/fcoeconfig
   1560      0     stevel "
   1561      0     stevel 
   1562      0     stevel smf_cleanup () {
   1563      0     stevel 	(
   1564      0     stevel 		cd $root;
   1565      0     stevel 		print "Removing obsolete rc.d scripts ... \c"
   1566      0     stevel 		rm -f $smf_obsolete_rc_files
   1567      0     stevel 		print "done."
   1568      0     stevel 	)
   1569      0     stevel }
   1570      0     stevel 
   1571      0     stevel smf_new_profiles () {
   1572      0     stevel 	[[ "$bfu_isa" = "sparc" ]] || return 0
   1573      0     stevel 
   1574      0     stevel 	[[ -x /tmp/bfubin/svccfg ]] || return 0
   1575      0     stevel 
   1576      0     stevel 	print "Clearing platform profile hash ..."
   1577      0     stevel 
   1578      0     stevel 	# platform_SUNW,Sun-Fire.xml (and other new and
   1579      0     stevel 	# corrected platforms) were delivered in Build 68.
   1580      0     stevel 	if [ ! -f \
   1581      0     stevel 		$rootprefix/var/svc/profile/platform_SUNW,Sun-Fire.xml \
   1582      0     stevel 		]; then
   1583      0     stevel 		for pfx in " " "v"; do
   1584      0     stevel 			for plname in \
   1585      0     stevel 			    none \
   1586      0     stevel 			    SUNW_Sun_Fire_880 \
   1587      0     stevel 			    SUNW_Sun_Fire_V890 \
   1588      0     stevel 			    SUNW_Sun_Fire_15000 \
   1589      0     stevel 			    SUNW_UltraEnterprise_10000; do
   1590   9263       Sean 				eval $BFUSVCCFG -f - <<EOF
   1591      0     stevel select smf/manifest
   1592      0     stevel delpg ${pfx}ar_svc_profile_platform_${plname}_xml
   1593      0     stevel exit
   1594      0     stevel EOF
   1595      0     stevel 			done
   1596      0     stevel 		done
   1597      0     stevel 	fi
   1598      0     stevel }
   1599      0     stevel 
   1600      0     stevel smf_handle_new_services () {
   1601      0     stevel 	#
   1602      0     stevel 	# Detect, prior to extraction the arrival of new,
   1603      0     stevel 	# default-enabled-in-profile services.  If so, add a command
   1604      0     stevel 	# such that they are enabled.
   1605      0     stevel 	#
   1606      0     stevel 	if [ ! -f $rootprefix/var/svc/profile/system/sac.xml ]; then
   1607      0     stevel 		echo /usr/sbin/svcadm enable system/sac >> \
   1608    172     esolom 		    $rootprefix/var/svc/profile/upgrade
   1609    172     esolom 	fi
   1610    172     esolom 	if [[ $zone = global &&
   1611    172     esolom             ! -f $rootprefix/var/svc/manifest/system/intrd.xml ]]; then
   1612    172     esolom 		echo /usr/sbin/svcadm enable system/intrd >> \
   1613    196      frits 		    $rootprefix/var/svc/profile/upgrade
   1614    196      frits 	fi
   1615    196      frits 	if [[ $zone = global &&
   1616    953    rm88369 	    ! -f $rootprefix/var/svc/manifest/system/scheduler.xml ]]; then
   1617    953    rm88369 		echo /usr/sbin/svcadm enable system/scheduler >> \
   1618   2912      artem 		    $rootprefix/var/svc/profile/upgrade
   1619   2912      artem 	fi
   1620   2912      artem 	if [[ $zone = global &&
   1621   2912      artem 	    ! -f $rootprefix/var/svc/manifest/system/hal.xml ]]; then
   1622   2912      artem 		echo /usr/sbin/svcadm enable system/hal >> \
   1623   2912      artem 		    $rootprefix/var/svc/profile/upgrade
   1624   2912      artem 	fi
   1625   2912      artem 	if [[ $zone = global &&
   1626   2912      artem 	    ! -f $rootprefix/var/svc/manifest/system/filesystem/rmvolmgr.xml ]]; then
   1627   2912      artem 		echo /usr/sbin/svcadm enable system/filesystem/rmvolmgr >> \
   1628      0     stevel 		    $rootprefix/var/svc/profile/upgrade
   1629      0     stevel 	fi
   1630   4235    markfen 	if [[ $zone = global &&
   1631   4235    markfen 	    ! -f $rootprefix/var/svc/manifest/network/ipsec/manual-key.xml &&
   1632   4235    markfen 	    -f $rootprefix/etc/inet/secret/ipseckeys ]]; then
   1633   4235    markfen 		smf_enable svc:/network/ipsec/manual-key:default
   1634   4235    markfen 	fi
   1635   4235    markfen 	if [[ $zone = global &&
   1636   4235    markfen 	    ! -f $rootprefix/var/svc/manifest/network/ipsec/ike.xml &&
   1637   4239     danmcd 	    -f $rootprefix/etc/inet/ike/config ]]; then
   1638   4235    markfen 		smf_enable svc:/network/ipsec/ike:default
   1639   4418    rm88369 	fi
   1640   4418    rm88369 	if [[ $zone = global &&
   1641   4418    rm88369 	    ! -f $rootprefix/var/svc/manifest/system/pools.xml &&
   1642   4418    rm88369 	    -f $rootprefix/etc/pooladm.conf ]]; then
   1643   4418    rm88369 		smf_enable svc:/system/pools:default
   1644  10480  Alexandre 	fi
   1645  10480  Alexandre 	if [[ $zone = global && $karch = sun4v &&
   1646  10480  Alexandre 	    ! -f $rootprefix/var/svc/manifest/platforms/sun4v/ldoms-agents.xml ]]; then
   1647  10480  Alexandre 		smf_enable svc:/ldoms/agents:default
   1648   4235    markfen 	fi
   1649      0     stevel }
   1650      0     stevel 
   1651      0     stevel smf_copy_manifest() {
   1652      0     stevel 	mfstbase=`basename $1`
   1653      0     stevel 	mymfs=$rootprefix/var/svc/manifest/$2/$mfstbase
   1654      0     stevel 	if [[ ! -f $mymfs ]] || ! cmp -s $manifest_src/$1 $mymfs ; then
   1655      0     stevel 		cp $manifest_src/$1 $mymfs ||
   1656      0     stevel 		    echo "bfu: could not copy $manifest_src/$1"
   1657      0     stevel 	fi
   1658      0     stevel }
   1659      0     stevel 
   1660      0     stevel smf_copy_method() {
   1661      0     stevel 	cp $manifest_src/$1 $rootprefix/lib/svc/method ||
   1662      0     stevel 	    echo "bfu: could not copy $manifest_src/$1"
   1663      0     stevel }
   1664      0     stevel 
   1665      0     stevel smf_cleanup_initd() {
   1666      0     stevel 	rm -f $rootprefix/etc/rc?.d/[SK]??$1
   1667      0     stevel }
   1668      0     stevel 
   1669      0     stevel smf_delete_manifest() {
   1670   5895   yz147064 (
   1671   5895   yz147064 	mfst=$1
   1672   5895   yz147064 	cd $root
   1673   5895   yz147064 	[[ -f $mfst ]] || return;
   1674   5895   yz147064 	if [ -r /etc/svc/volatile/repository_door ]; then
   1675   9263       Sean 		ENTITIES=`eval $BFUSVCCFG inventory $mfst`
   1676   5895   yz147064 		for fmri in $ENTITIES; do
   1677   5895   yz147064 			if [[ -n $root && $root != "/" ]]; then
   1678   5895   yz147064 				SVCCFG_REPOSITORY=$root/etc/svc/repository.db
   1679   5895   yz147064 				export SVCCFG_REPOSITORY
   1680   5895   yz147064 			fi
   1681   9263       Sean 			eval $BFUSVCCFG delete -f $fmri >/dev/null 2>&1
   1682   5895   yz147064 			if [[ -n $root && $root != "/" ]]; then
   1683   5895   yz147064 				unset SVCCFG_REPOSITORY
   1684   5895   yz147064 			fi
   1685   5895   yz147064 		done
   1686   5895   yz147064 	fi
   1687   5895   yz147064 	rm $mfst
   1688   5895   yz147064 )
   1689      0     stevel }
   1690      0     stevel 
   1691      0     stevel smf_delete_methods() {
   1692   5895   yz147064 (
   1693   5895   yz147064 	cd $root;
   1694   5895   yz147064 	rm -f $smf_obsolete_methods
   1695   5895   yz147064 )
   1696      0     stevel }	
   1697      0     stevel 
   1698      0     stevel smf_delete_renamed_manifests() {
   1699   5895   yz147064 (
   1700   5895   yz147064 	cd $root;
   1701   5895   yz147064 	rm -f $smf_renamed_manifests
   1702   5895   yz147064 )
   1703   5895   yz147064 }
   1704   5895   yz147064 
   1705   5895   yz147064 smf_cleanup_dlmgmtd() {
   1706   5895   yz147064 (
   1707   5895   yz147064 	#
   1708   5895   yz147064 	# Delete the service instance, then refresh all its dependents in the
   1709   5895   yz147064 	# cases of alternative root and zones.
   1710   5895   yz147064 	#
   1711   5895   yz147064 	smf_delete_manifest "var/svc/manifest/network/dlmgmt.xml"
   1712   5895   yz147064 
   1713   5895   yz147064 	if [[ -n $root && $root != "/" ]]; then
   1714   5895   yz147064 		export SVCCFG_REPOSITORY=$root/etc/svc/repository.db
   1715   9263       Sean 		eval $BFUSVCCFG -s svc:/network/physical:nwam refresh
   1716   9263       Sean 		eval $BFUSVCCFG -s svc:/network/physical:default refresh
   1717   9263       Sean 		eval $BFUSVCCFG -s svc:/system/device/local:default refresh
   1718   5895   yz147064 		unset SVCCFG_REPOSITORY
   1719   5895   yz147064 	fi
   1720   5895   yz147064 	cd $root
   1721   5895   yz147064 	rm -f lib/svc/method/svc-dlmgmtd
   1722   5895   yz147064 	rm -f etc/.dlmgmt_door
   1723   5895   yz147064 	rm -f sbin/dlmgmtd
   1724   5895   yz147064 )
   1725      0     stevel }
   1726      0     stevel 
   1727   7688      Aaron smf_cleanup_vt() {
   1728   7688      Aaron 	(
   1729   7688      Aaron 		smf_delete_manifest var/src/manifest/system/vtdaemon.xml
   1730   7688      Aaron 		cd $root
   1731   7688      Aaron 		rm -f lib/svc/method/vtdaemon
   1732   7688      Aaron 
   1733   7702      Aaron 		vt_conslogin_instances=`/tmp/bfubin/svcs -o FMRI | \
   1734   7688      Aaron 		    grep console-login:vt`
   1735   7688      Aaron 		for i in $vt_conslogin_instances; do
   1736   9263       Sean 			eval $BFUSVCCFG delete -f $i
   1737   7688      Aaron 		done
   1738   7688      Aaron 	)
   1739   7688      Aaron }
   1740   7688      Aaron 
   1741   9484    garrett smf_cleanup_boomer() {
   1742   9484    garrett 	(
   1743   9484    garrett 		smf_delete_manifest var/src/manifest/system/devices-audio.xml
   1744   9484    garrett 		cd $root
   1745   9484    garrett 		rm -f lib/svc/method/devices-audio
   1746   9484    garrett 
   1747   9484    garrett 		/tmp/bfubin/svccfg delete -f svc:/system/device/audio
   1748   9484    garrett 	)
   1749   9484    garrett }
   1750   9484    garrett 
   1751      0     stevel old_mfst_dir="var/svc/manifest.orig"
   1752      0     stevel new_mfst_dir="var/svc/manifest"
   1753      0     stevel 
   1754      0     stevel smf_enable() {
   1755      0     stevel 	echo "svcadm enable $*" >> $rootprefix/var/svc/profile/upgrade
   1756      0     stevel }
   1757      0     stevel 
   1758      0     stevel smf_check_repository() {
   1759      0     stevel 	repository=etc/svc/repository.db
   1760      0     stevel 	[[ -f $rootprefix/$repository ]] || return
   1761      0     stevel 
   1762      0     stevel 	print -n "$rootprefix/$repository: " >&2
   1763      0     stevel 
   1764      0     stevel 	sqlite="${SQLITEBIN-$GATE/public/bin/$bfu_isa/sqlite}"
   1765      0     stevel 	[[ -x $sqlite ]] || sqlite=/lib/svc/bin/sqlite
   1766      0     stevel 	if [[ ! -x $sqlite ]]; then
   1767      0     stevel 		echo "no sqlite binary: skipped integrity check" >&2
   1768      0     stevel 		return
   1769      0     stevel 	fi
   1770      0     stevel 
   1771      0     stevel 	rm -f /tmp/bfurepo.db;
   1772      0     stevel 	cp $rootprefix/$repository /tmp/bfurepo.db
   1773      0     stevel 	bad_errors=`echo "PRAGMA integrity_check;" |
   1774      0     stevel 	    $sqlite /tmp/bfurepo.db 2>&1 | grep -v '^ok$'`
   1775      0     stevel 	if [[ $? -eq 0 ]]; then
   1776      0     stevel 		echo "integrity check failed:" >&2
   1777      0     stevel 		echo "$bad_errors" >&2
   1778      0     stevel 		echo >&2
   1779      0     stevel 		if [[ $force_override = no ]]; then
   1780      0     stevel 			cat >&2 <<EOF
   1781      0     stevel Reseed the repository (see http://greenline.eng/quickstart.shtml#newrep)
   1782      0     stevel before BFUing (or use the -f flag to force BFU to continue).  Re-seeding
   1783      0     stevel will lose all smf(5) customizations.
   1784      0     stevel EOF
   1785      0     stevel 			echo >&2
   1786      0     stevel 			exit 2;
   1787      0     stevel 		else
   1788      0     stevel 			echo "driving on anyway" >&2
   1789      0     stevel 		fi
   1790      0     stevel 	else
   1791      0     stevel 		echo "passed integrity check" >&2;
   1792      0     stevel 	fi
   1793      0     stevel }
   1794      0     stevel 
   1795      0     stevel smf_bkbfu_warning() {
   1796      0     stevel 	print ""
   1797      0     stevel 	print "*************************************************************"
   1798      0     stevel 	print " WARNING: BFU'ing $1 backwards across 5090532."
   1799      0     stevel 	print " Fixes have been made but the services cannot be refreshed"
   1800      0     stevel 	print " on the $1's inactive repository. Next boot for the"
   1801      0     stevel 	print " $1 will probably result in maintenance mode due to"
   1802      0     stevel 	print " dependency cycles. If so, at the $1's console, run:"
   1803      0     stevel 	print ""
   1804      0     stevel 	print " /usr/sbin/svcadm refresh system/sysidtool:system"
   1805      0     stevel 	print " /usr/sbin/svcadm refresh system/sysidtool:net"
   1806      0     stevel 	print " /usr/sbin/svcadm clear milestone/single-user"
   1807      0     stevel 	print " /usr/sbin/svcadm clear system/sysidtool:system"
   1808      0     stevel 	print " /usr/sbin/svcadm clear system/sysidtool:net"
   1809      0     stevel 	print ""
   1810      0     stevel 	print " to resolve."
   1811      0     stevel 	print " To avoid these problems, reseed the zone's repository."
   1812      0     stevel 	print " See http://greenline.eng/quickstart.shtml#newrep ."
   1813      0     stevel 	print " Note: Re-seeding will lose all smf(5) customization."
   1814      0     stevel 	print "*************************************************************"
   1815      0     stevel 	print ""
   1816      0     stevel }
   1817      0     stevel 
   1818      0     stevel smf_is_sysconfig() {
   1819      0     stevel 	#
   1820      0     stevel 	# Return success if going to post-5090532, i.e. post-sysconfig bits
   1821      0     stevel 	#
   1822      0     stevel 	# By now, we're going to post-smf bits - so multi-user.xml must
   1823      0     stevel 	# exist (since it was introduced by first SMF putback).
   1824      0     stevel 	# 
   1825      0     stevel 	# Function return status is return status of last command executed.
   1826      0     stevel 	# So, no need to check return status from grep below.
   1827      0     stevel 
   1828      0     stevel 	grep sysconfig $rootprefix/var/svc/manifest/milestone/multi-user.xml \
   1829      0     stevel 		>/dev/null 2>&1
   1830      0     stevel }
   1831      0     stevel 
   1832      0     stevel smf_bkbfu_past_sysconfig() {
   1833      0     stevel 	#
   1834      0     stevel 	# Check if bfu'ing back from post-5090532 to pre-5090532 bits.
   1835      0     stevel 	#
   1836      0     stevel 	if [[ -f $rootprefix/var/svc/manifest/milestone/sysconfig.xml ]] &&
   1837      0     stevel 	    ! smf_is_sysconfig ; then
   1838      0     stevel 		return 0
   1839      0     stevel 	fi
   1840      0     stevel 	return 1
   1841      0     stevel }
   1842      0     stevel 
   1843      0     stevel smf_bkbfu_repair_sysconfig() {
   1844      0     stevel 	#
   1845      0     stevel 	# Perform the necessary corrections when bfu'ing backwards
   1846      0     stevel 	# from post-5090532 to pre-5090532 bits.
   1847      0     stevel 	#
   1848      0     stevel 	# Get the pre-5090532 non-ON manifests, and issue minimal fixes
   1849      0     stevel 	# to the repository, to enable re-boot.
   1850      0     stevel 	#
   1851      0     stevel 	smf_copy_manifest pre-5090532/sysidtool.xml system
   1852      0     stevel 	if [[ $zone = global && $karch = i86pc ]]; then
   1853      0     stevel 		smf_copy_manifest pre-5090532/kdmconfig.xml platform/i86pc
   1854      0     stevel 	fi
   1855      0     stevel 	#
   1856      0     stevel 	# Now, remove sysidtool:{system, net}'s dependency on
   1857      0     stevel 	# single-user and filesystem-local.
   1858      0     stevel 	#
   1859      0     stevel 	# If $rootprefix is not empty, this could be the global zone,
   1860      0     stevel 	# with an alternate root BFU, or a non-global zone. For either
   1861      0     stevel 	# case, the repository to be updated is not the live one: use
   1862      0     stevel 	# SVCCFG_REPOSITORY to point to the repository to be updated.
   1863      0     stevel 	#
   1864      0     stevel 	# Note that in the alternate-root case, doing this seems better
   1865      0     stevel 	# than forcing the user to re-seed, or to dis-allow it. The
   1866      0     stevel 	# issue of svccfg and the repository not matching seems remote,
   1867      0     stevel 	# given that from initial SMF integration (on10_64) to on10_74,
   1868      0     stevel 	# there was no mismatch. In the remote possibility that there is a
   1869      0     stevel 	# mis-match (in the future) causing these calls to be suspect,
   1870      0     stevel 	# the user is already being advised, via the warning message, to
   1871      0     stevel 	# reseed the repository in case of trouble. If a mis-match is ever
   1872      0     stevel 	# introduced, code such as this would have to be fixed, so this
   1873      0     stevel 	# aspect of the warning is useful only during the interim period.
   1874      0     stevel 	#
   1875      0     stevel 	# NOTE that this is not an issue for non-global zones'
   1876      0     stevel 	# repositories - they couldn't be out-of-sync with
   1877      0     stevel 	# /tmp/bfubin/svccfg.
   1878      0     stevel 	#
   1879      0     stevel 	if [[ -n $rootprefix ]]; then
   1880      0     stevel 		export SVCCFG_REPOSITORY=$rootprefix/etc/svc/repository.db
   1881      0     stevel 		if [[ $zone = global ]]; then
   1882      0     stevel 			smf_bkbfu_warning "alternate root"
   1883      0     stevel 		else
   1884      0     stevel 			smf_bkbfu_warning "zone"
   1885      0     stevel 		fi
   1886      0     stevel 	fi
   1887      0     stevel 	#
   1888      0     stevel 	# Using the newer "-s" option to svccfg in the following is OK
   1889      0     stevel 	# since its introduction preceded 5090532 (and this routine wouldn't
   1890      0     stevel 	# be called unless the machine is running post-5090532 bits).
   1891      0     stevel 	#
   1892   9263       Sean 	eval $BFUSVCCFG -s system/sysidtool:net delpg single-user
   1893   9263       Sean 	eval $BFUSVCCFG -s system/sysidtool:system delpg single-user
   1894   9263       Sean 	eval $BFUSVCCFG -s system/sysidtool:net delpg filesystem_local
   1895   9263       Sean 	eval $BFUSVCCFG -s system/sysidtool:system delpg filesystem_local
   1896      0     stevel 
   1897      0     stevel 	#
   1898      0     stevel 	# On a live system, issue the refresh; For alternate root or non-global
   1899      0     stevel 	# zone, the user was asked to issue the refreshes and "clear"s in the
   1900      0     stevel 	# message above after a post-bfu reboot.
   1901      0     stevel 	#
   1902      0     stevel 	if [[ -z $rootprefix ]]; then
   1903      0     stevel 		/tmp/bfubin/svcadm refresh system/sysidtool:system \
   1904      0     stevel 		    system/sysidtool:net
   1905      0     stevel 	fi
   1906      0     stevel 
   1907      0     stevel 	#
   1908      0     stevel 	# Now, reset SVCCFG_REPOSITORY, if it was set
   1909      0     stevel 	#
   1910      0     stevel 	[[ -n $rootprefix ]] && unset SVCCFG_REPOSITORY
   1911      0     stevel 
   1912      0     stevel 	#
   1913      0     stevel 	# Remove the sysconfig.xml manifest when going back.  So backward
   1914      0     stevel 	# bfu check continues to work, and all manifests are correct.
   1915      0     stevel 	#
   1916      0     stevel 	cat >> $rootprefix/var/svc/profile/upgrade <<-EOF
   1917      0     stevel 	rm -f /var/svc/manifest/milestone/sysconfig.xml
   1918      0     stevel 	EOF
   1919      0     stevel }
   1920      0     stevel 
   1921   3446        mrj #
   1922   3446        mrj # Return true if $file exists in $archive.  $file may also be a pattern.
   1923   3446        mrj #
   1924   3446        mrj archive_file_exists()
   1925   3446        mrj {
   1926   3446        mrj 	archive=$1
   1927   3446        mrj 	file=$2
   1928   3446        mrj 
   1929   3446        mrj 	$ZCAT $cpiodir/${archive}${ZFIX} | cpio -it 2>/dev/null | \
   1930   3446        mrj 	    egrep -s "$file"
   1931   3446        mrj }
   1932   3446        mrj 
   1933   3446        mrj #
   1934   6423    gw25295 # extract one or more files from an archive into a temporary directory
   1935   6423    gw25295 # provided by the caller.  The caller is responsible for checking to
   1936   6423    gw25295 # to see whether the desired file or files were extracted
   1937   6423    gw25295 #
   1938   6423    gw25295 # $1 - archive
   1939   6423    gw25295 # $2 - temporary dir
   1940   6423    gw25295 # remaining args: file(s) to be extracted.
   1941   6423    gw25295 #
   1942   6423    gw25295 archive_file_peek() {
   1943   6423    gw25295 	compressed_archive=`pwd`/$1
   1944   6423    gw25295 	tdir=$2
   1945   6423    gw25295 	shift
   1946   6423    gw25295 	shift
   1947   6423    gw25295 	if [ ! -d $tdir ] ; then
   1948   6423    gw25295 		return
   1949   6423    gw25295 	fi
   1950   6423    gw25295 	(cd $tdir; $ZCAT $compressed_archive | cpio -idmucB $* 2>&1 )
   1951   6423    gw25295 }
   1952   6423    gw25295 
   1953   6423    gw25295 #
   1954   3446        mrj # If we're no longer delivering the eeprom service, remove it from the system,
   1955   3446        mrj # as eeprom -I is removed as well.
   1956   3446        mrj #
   1957   3446        mrj smf_fix_i86pc_profile () {
   1958   3446        mrj 	mfst="var/svc/manifest/platform/i86pc/eeprom.xml"
   1959   3446        mrj 	profile="var/svc/profile/platform_i86pc.xml"
   1960   3446        mrj 
   1961   3446        mrj 	if [ ! "$karch" = "i86pc" ]; then
   1962   3446        mrj 		return
   1963   3446        mrj 	fi
   1964   3446        mrj 
   1965   3446        mrj 	if ! archive_file_exists generic.root "^$profile"; then
   1966   3446        mrj 		rm -f $rootprefix/$profile
   1967   3604    johnlev 		rm -f $rootprefix/var/svc/profile/platform.xml
   1968   3446        mrj 	fi
   1969   3446        mrj 
   1970   3446        mrj 	if [ ! -f $rootprefix/$mfst ]; then
   1971   3446        mrj 		return
   1972   3446        mrj 	fi
   1973   3446        mrj 
   1974   3446        mrj 	if archive_file_exists generic.root "^$mfst"; then
   1975   3446        mrj 		return
   1976   3446        mrj 	fi
   1977   3446        mrj 
   1978   3446        mrj 	rm -f $rootprefix/$mfst
   1979   3446        mrj 
   1980   3446        mrj 	#
   1981   3446        mrj 	# we must disable via svccfg directly, as manifest-import runs after
   1982   3446        mrj 	# this service tries to run
   1983   3446        mrj 	#
   1984   3446        mrj 	[[ -n "$rootprefix" ]] &&
   1985   3446        mrj 	    export SVCCFG_REPOSITORY=$rootprefix/etc/svc/repository.db
   1986   9263       Sean 	eval $BFUSVCCFG delete -f platform/i86pc/eeprom
   1987   3446        mrj 	[[ -n "$rootprefix" ]] && unset SVCCFG_REPOSITORY
   1988   3446        mrj }
   1989   3446        mrj 
   1990   7887      Liane #
   1991   7887      Liane # If the new system doesn't support the templates DTD extensions
   1992   7887      Liane # (due to backwards bfu), the global.xml manifest should be deleted.
   1993   7887      Liane #
   1994   7887      Liane smf_bkbfu_templates() {
   1995   7887      Liane 	mfst="var/svc/manifest/system/svc/global.xml"
   1996   7887      Liane 
   1997   7887      Liane 	grep "pg_pattern" \
   1998   7887      Liane 	    $rootprefix/usr/share/lib/xml/dtd/service_bundle.dtd.1> \
   1999   7887      Liane 	    /dev/null 2>&1
   2000   7887      Liane 	if [ $? -eq 1 ]; then
   2001   7887      Liane 		rm -f $rootprefix/$mfst
   2002   7887      Liane 	fi
   2003   7887      Liane 
   2004   7887      Liane }
   2005   7887      Liane 
   2006      0     stevel smf_apply_conf () {
   2007      0     stevel 	#
   2008      0     stevel 	# Go thru the original manifests and move any that were unchanged
   2009      0     stevel 	# (or are not system-provided) back to their proper location.  This
   2010      0     stevel 	# will avoid superfluous re-import on reboot, as the inode and mtime
   2011      0     stevel 	# are both part of the hash.
   2012      0     stevel 	#
   2013      0     stevel 	if [ -d $rootprefix/$old_mfst_dir ]; then
   2014      0     stevel 		for f in `cd $rootprefix/$old_mfst_dir ; find . -type f`
   2015      0     stevel 		do
   2016      0     stevel 			old=$rootprefix/$old_mfst_dir/$f
   2017      0     stevel 			new=$rootprefix/$new_mfst_dir/$f
   2018      0     stevel 			if [ ! -f $new ]; then
   2019      0     stevel 				mkdir -m 0755 -p `dirname $new`
   2020      0     stevel 				mv $old $new
   2021      0     stevel 				continue
   2022      0     stevel 			fi
   2023      0     stevel 			cmp -s $old $new && mv $old $new
   2024      0     stevel 		done
   2025      0     stevel 		rm -rf $rootprefix/$old_mfst_dir
   2026      0     stevel 	fi
   2027      0     stevel 
   2028      0     stevel 	if [ -f $rootprefix/etc/init.d/inetd ]; then
   2029      0     stevel 		#
   2030      0     stevel 		# BFUing to non-SMF system -- undo our previous changes,
   2031      0     stevel 		# run an old hack, and skip the remainder of this function.
   2032      0     stevel 		#
   2033      0     stevel 		smf_inetd_reenable
   2034      0     stevel 		smf_tftp_reinstall
   2035      0     stevel 
   2036      0     stevel 		# Update inetd.conf only if we find rpc.metad file.
   2037      0     stevel 		[ -f $usr/sbin/rpc.metad ] &&
   2038      0     stevel 		    inetd_conf_svm_hack
   2039      0     stevel 
   2040      0     stevel 		return
   2041      0     stevel 	fi
   2042      0     stevel 
   2043      0     stevel 	#
   2044      0     stevel 	# At this point, the archive in question is a SMF version.  If
   2045      0     stevel 	# the smf(5) repository does not yet exist, create it by copying
   2046      0     stevel 	# the appropriate seed repository.  Since updating of non-global
   2047      0     stevel 	# zones only occurs when the live system is bfu'ed, the
   2048      0     stevel 	# appropriate seed is guaranteed to exist under the /lib
   2049      0     stevel 	# directory.
   2050      0     stevel 	#
   2051      0     stevel 	repository=$rootprefix/etc/svc/repository.db
   2052      0     stevel 	if [ ! -f $repository ]; then
   2053      0     stevel 		print "Initializing service configuration repository ..."
   2054      0     stevel 		if [ $zone = global ]; then
   2055      0     stevel 			cp $rootprefix/lib/svc/seed/global.db $repository
   2056      0     stevel 		else
   2057      0     stevel 			cp /lib/svc/seed/nonglobal.db $repository
   2058      0     stevel 		fi
   2059      0     stevel 		chmod 0600 $repository
   2060      0     stevel 		chown root:sys $repository
   2061      0     stevel 	fi
   2062      0     stevel 
   2063      0     stevel 	print "Removing obsolete smf services ..."
   2064      0     stevel 	for f in $smf_obsolete_manifests; do
   2065      0     stevel 		smf_delete_manifest $f
   2066      0     stevel 	done
   2067      0     stevel 	smf_delete_methods
   2068      0     stevel 	smf_delete_renamed_manifests
   2069   5895   yz147064 
   2070   5895   yz147064 	if [[ $dlmgmtd_status = cleanup ]]; then
   2071   5895   yz147064 		smf_cleanup_dlmgmtd
   2072   7688      Aaron 	fi
   2073   7688      Aaron 
   2074   7688      Aaron 	#
   2075   7688      Aaron 	# When doing backwards BFU, if the target does not contain
   2076   7688      Aaron 	# vtdaemon manifest, delete it and delete all the additional
   2077   7688      Aaron 	# console-login service instances which were used to provide
   2078   7688      Aaron 	# additional console sessions.
   2079   7688      Aaron 	#
   2080   7688      Aaron 	if ((! $ZCAT $cpiodir/generic.root$ZFIX | cpio -it 2>/dev/null | \
   2081   7688      Aaron 	    grep vtdaemon.xml > /dev/null 2>&1) && [ $zone = global ]); then
   2082   7688      Aaron 		smf_cleanup_vt
   2083   9484    garrett 	fi
   2084   9484    garrett 
   2085   9484    garrett 	#
   2086   9484    garrett 	# Remove the Boomer audio service when BFUing to legacy audio bits
   2087   9484    garrett 	#
   2088   9484    garrett 	if ! check_boomer_bfu && [ $zone = global ]; then
   2089   9484    garrett 		smf_cleanup_boomer
   2090    305   ericheng 	fi
   2091      0     stevel 
   2092      0     stevel 	print "Disabling unneeded inetd.conf entries ..."
   2093      0     stevel 	smf_inetd_disable
   2094      0     stevel 	smf_tftp_reinstall
   2095      0     stevel 
   2096      0     stevel 	print "Connecting platform and name service profiles ..."
   2097      0     stevel 
   2098      0     stevel 	rm -f $rootprefix/var/svc/profile/name_service.xml
   2099      0     stevel 
   2100      0     stevel 	grep ldap $rootprefix/etc/nsswitch.conf >/dev/null 2>&1
   2101      0     stevel 	is_ldap=$?
   2102      0     stevel 	grep nisplus $rootprefix/etc/nsswitch.conf >/dev/null 2>&1
   2103      0     stevel 	is_nisplus=$?
   2104      0     stevel 	grep nis $rootprefix/etc/nsswitch.conf >/dev/null 2>&1
   2105      0     stevel 	is_nis=$?
   2106      0     stevel 
   2107      0     stevel 	if [ $is_ldap  = 0 ]; then
   2108      0     stevel 		ns_profile=ns_ldap.xml
   2109      0     stevel 	elif [ $is_nisplus = 0  ]; then
   2110      0     stevel 		ns_profile=ns_nisplus.xml
   2111      0     stevel 	elif [ $is_nis = 0 ]; then
   2112      0     stevel 		ns_profile=ns_nis.xml
   2113      0     stevel 	else
   2114      0     stevel 		ns_profile=ns_files.xml
   2115      0     stevel 	fi
   2116      0     stevel 
   2117      0     stevel 	ln -s $ns_profile $rootprefix/var/svc/profile/name_service.xml
   2118      0     stevel 
   2119      0     stevel 	rm -f $rootprefix/var/svc/profile/inetd_services.xml
   2120      0     stevel 	ln -s inetd_upgrade.xml $rootprefix/var/svc/profile/inetd_services.xml
   2121      0     stevel 
   2122      0     stevel 	print "Marking converted services as enabled ..."
   2123      0     stevel 
   2124      0     stevel 	[ -f $rootprefix/etc/resolv.conf ] && smf_enable network/dns/client
   2125      0     stevel 	[ -f $rootprefix/etc/inet/dhcpsvc.conf ] && \
   2126      0     stevel 	    smf_enable network/dhcp-server
   2127   4235    markfen   
   2128   4119   tn143363 	# Not concerned about enabling/disabling rcap but will migrate
   2129   4119   tn143363 	# configuration parameters if rcap.conf exists
   2130   4119   tn143363 	#
   2131   4119   tn143363 	if [ -f $rootprefix/etc/rcap.conf ]; then
   2132   4119   tn143363 		migrate_rcap_conf
   2133   4119   tn143363 	fi
   2134   7103    ml93401 
   2135   7103    ml93401 	migrate_acctadm_conf
   2136      0     stevel 
   2137      0     stevel 	if [ $zone = global ]; then
   2138      0     stevel 		if [ -f $rootprefix/etc/dfs/dfstab ] &&
   2139      0     stevel 		    grep '^[ 	]*[^# 	]' $rootprefix/etc/dfs/dfstab \
   2140      0     stevel 		    > /dev/null; then
   2141      0     stevel 		    	smf_enable network/nfs/server
   2142      0     stevel 		fi
   2143      0     stevel 	else
   2144      0     stevel 		echo "/usr/sbin/svcadm disable network/nfs/server" >> \
   2145      0     stevel 		    $rootprefix/var/svc/profile/upgrade
   2146      0     stevel 	fi
   2147      0     stevel 
   2148      0     stevel 	[ -f $rootprefix/etc/inet/ntp.conf ] && smf_enable network/ntp
   2149      0     stevel 
   2150      0     stevel 
   2151      0     stevel 	domainname=`cat $rootprefix/etc/defaultdomain 2>/dev/null`
   2152      0     stevel         if [ ! -z "$domainname" -a -d $rootprefix/var/yp/$domainname ]; then
   2153      0     stevel 		smf_enable network/nis/server
   2154      0     stevel 
   2155      0     stevel 		# Determining whether we're a NIS master requires
   2156      0     stevel 		# looking through the maps.
   2157      0     stevel 		cat >>$rootprefix/var/svc/profile/upgrade <<\_EOF
   2158      0     stevel # Determine whether we are a YP master.
   2159      0     stevel domain=`/usr/bin/domainname`
   2160      0     stevel hostname=`uname -n | cut -d. -f1 | tr '[A-Z]' '[a-z]'`
   2161      0     stevel 
   2162      0     stevel if [ -x /usr/sbin/makedbm ]; then
   2163      0     stevel 	if [ -f /var/yp/NISLDAPmapping ]; then
   2164      0     stevel 		master=`/usr/sbin/makedbm -u /var/yp/\$domain/LDAP_passwd.byname | grep YP_MASTER_NAME | nawk '{ print $2 }'`
   2165      0     stevel 	else
   2166      0     stevel 		master=`/usr/sbin/makedbm -u /var/yp/\$domain/passwd.byname | grep YP_MASTER_NAME | nawk '{ print $2 }'`
   2167      0     stevel 	fi
   2168      0     stevel fi
   2169      0     stevel 
   2170      0     stevel # If we are the master server, enable appropriate services.
   2171      0     stevel if [ "$master" = "$hostname" -a "$YP_SERVER" = "TRUE" ]; then
   2172      0     stevel 	/usr/sbin/svcadm enable network/nis/xfr
   2173      0     stevel 	/usr/sbin/svcadm enable network/nis/passwd
   2174      0     stevel 
   2175      0     stevel 	if [ ! -f /var/yp/NISLDAPmapping ]; then
   2176      0     stevel 		[ -f /var/yp/updaters ] && \
   2177      0     stevel 		    /usr/svc/svcadm enable network/nis/update
   2178      0     stevel 	fi
   2179      0     stevel fi
   2180      0     stevel _EOF
   2181      0     stevel 	fi
   2182      0     stevel 
   2183      0     stevel 	# Check if mddbs don't exist on the image.  If so, disable SVM services.
   2184      0     stevel 	MDDB_STATUS=1
   2185      0     stevel 	if [ -f $rootprefix/kernel/drv/md.conf ]; then
   2186      0     stevel 		sed -e 's/#.*$//' $rootprefix/kernel/drv/md.conf | \
   2187      0     stevel 		    egrep '^[        ]*mddb_bootlist' >/dev/null 2>&1
   2188      0     stevel 		MDDB_STATUS=$?
   2189      0     stevel 	fi
   2190      0     stevel 
   2191      0     stevel 	if [ $MDDB_STATUS -ne 0 ]; then
   2192      0     stevel 		for svc in metainit mdmonitor; do
   2193      0     stevel 		    echo "/usr/sbin/svcadm disable system/$svc:default" >> \
   2194      0     stevel 			$rootprefix/var/svc/profile/upgrade
   2195      0     stevel 		done
   2196      0     stevel 
   2197      0     stevel 		for svc in meta mdcomm metamed metamh; do
   2198      0     stevel 		    echo "/usr/sbin/svcadm disable network/rpc/$svc:default" \
   2199      0     stevel 			>> $rootprefix/var/svc/profile/upgrade
   2200      0     stevel 		done
   2201      0     stevel 	fi
   2202      0     stevel 
   2203      0     stevel 	# Workaround inetd's handling of "tcp6/udp6" when no IPv6 interfaces
   2204      0     stevel 	# are configured.
   2205      0     stevel 	for svc in meta mdcomm metamed metamh; do
   2206      0     stevel 	    echo "/usr/sbin/inetadm -m network/rpc/$svc:default proto=tcp" \
   2207      0     stevel 		">/dev/null 2>&1" >> $rootprefix/var/svc/profile/upgrade
   2208      0     stevel 	done
   2209      0     stevel 
   2210      0     stevel 	manifest_src=${MANIFEST_SRC-$GATE/public/smf}
   2211      0     stevel 	[[ -d $manifest_src ]] ||
   2212   7309       Mark 	    manifest_src=${GATE}/public/smf
   2213      0     stevel 	[[ -d $manifest_src ]] || manifest_src=/net/greenline.eng/meta0/smf
   2214      0     stevel 
   2215      0     stevel 	if smf_bkbfu_past_sysconfig ; then
   2216      0     stevel 		echo "BFU'ing backwards across 5090532! Now repairing..."
   2217      0     stevel 		smf_bkbfu_repair_sysconfig
   2218      0     stevel 	fi
   2219      0     stevel 
   2220      0     stevel 	#
   2221      0     stevel 	# If bfu'ing milestone/sysconfig bits or onwards, update the
   2222      0     stevel 	# corresponding non-ON manifests - sysidtool and kdmconfig.
   2223      0     stevel 	#
   2224      0     stevel 	sysidmfst=$rootprefix/var/svc/manifest/system/sysidtool.xml
   2225      0     stevel 	kdmmfst=$rootprefix/var/svc/manifest/platform/i86pc/kdmconfig.xml
   2226      0     stevel 	if smf_is_sysconfig ; then
   2227      0     stevel 		if [[ ! -f $sysidmfst ]]; then
   2228      0     stevel 			#
   2229      0     stevel 			# if WOS build on machine is pre-greenline, and
   2230      0     stevel 			# we're bfu'ing to the sysconfig bits.
   2231      0     stevel 			#
   2232      0     stevel 			smf_copy_manifest post-5090532/sysidtool.xml system
   2233      0     stevel 			if [[ $zone = global ]]; then
   2234      0     stevel 				smf_copy_method sysidtool-net
   2235      0     stevel 				smf_copy_method sysidtool-system
   2236      0     stevel 			fi
   2237      0     stevel 			echo "Converted system/sysidtool (post-5090532)"
   2238      0     stevel 		else
   2239      0     stevel 			#
   2240      0     stevel 			# If sysidtool.xml already exists, update it
   2241      0     stevel 			# if necessary. Future updates of sysidtool.xml
   2242      0     stevel 			# must occur in the dir: $manifest_src/post-5090532
   2243      0     stevel 			#
   2244      0     stevel 			smf_copy_manifest post-5090532/sysidtool.xml system
   2245      0     stevel 		fi
   2246      0     stevel 		if [[ $zone = global && $karch = i86pc ]]; then
   2247      0     stevel 			if [[ ! -f $kdmmfst ]]; then
   2248      0     stevel 				#
   2249      0     stevel 				# if WOS build on machine is pre-greenline, and
   2250      0     stevel 				# we're bfu'ing to the sysconfig bits.
   2251      0     stevel 				#
   2252      0     stevel 				smf_copy_manifest post-5090532/kdmconfig.xml \
   2253      0     stevel 				    platform/i86pc
   2254      0     stevel 				smf_copy_method   svc-kdmconfig
   2255      0     stevel 				smf_cleanup_initd kdmconfig
   2256      0     stevel 				echo "Converted platform/i86pc/kdmconfig"
   2257      0     stevel 				echo "(post-5090532)"
   2258      0     stevel 			else
   2259      0     stevel 				#
   2260      0     stevel 				# If kdmconfig.xml already exists, update
   2261      0     stevel 				# it if necessary. Future updates of
   2262      0     stevel 				# kdmconfig.xml must occur in the dir:
   2263      0     stevel 				# $manifest_src/post-5090532
   2264      0     stevel 				#
   2265      0     stevel 				smf_copy_manifest post-5090532/kdmconfig.xml \
   2266      0     stevel 				    platform/i86pc
   2267      0     stevel 			fi
   2268      0     stevel 		fi
   2269      0     stevel 	else
   2270      0     stevel 		if [[ ! -f $sysidmfst ]]; then
   2271      0     stevel 			smf_copy_manifest pre-5090532/sysidtool.xml system
   2272      0     stevel 			if [[ $zone = global ]]; then
   2273      0     stevel 				smf_copy_method sysidtool-net
   2274      0     stevel 				smf_copy_method sysidtool-system
   2275      0     stevel 			fi
   2276      0     stevel 			echo "Converted system/sysidtool"
   2277      0     stevel 		fi
   2278      0     stevel 		if [[ $zone = global && $karch = i86pc && ! -f $kdmmfst ]];
   2279      0     stevel 		then
   2280      0     stevel 			smf_copy_manifest pre-5090532/kdmconfig.xml \
   2281      0     stevel 			    platform/i86pc
   2282      0     stevel 			smf_copy_method   svc-kdmconfig
   2283      0     stevel 			smf_cleanup_initd kdmconfig
   2284      0     stevel 			echo "Converted platform/i86pc/kdmconfig"
   2285      0     stevel 		fi
   2286      0     stevel 	fi
   2287      0     stevel 
   2288      0     stevel 	# If we've still got the old dtlogin manifest delivered by earlier
   2289      0     stevel 	# versions of bfu, delete it, as it was broken and should have
   2290      0     stevel 	# never been delivered.  A new version delivered by the CDE
   2291      0     stevel 	# consolidation should be left alone.
   2292      0     stevel 	if [[ -f $rootprefix/var/svc/manifest/application/dtlogin.xml &&
   2293      0     stevel 	    `grep -c GLXXX \
   2294      0     stevel 	    $rootprefix/var/svc/manifest/application/dtlogin.xml` -gt 0 &&
   2295      0     stevel 	    -x /tmp/bfubin/svccfg ]]; then
   2296      0     stevel 
   2297      0     stevel 		# Delete the obsolete manifest.
   2298      0     stevel 		rm -f $rootprefix/var/svc/manifest/application/dtlogin.xml
   2299      0     stevel 
   2300      0     stevel 		# Delete the service from repository, then use dtconfig -e to
   2301      0     stevel 		# revert to whatever the WOS bits are using if dtlogin was
   2302      0     stevel 		# enabled.
   2303      0     stevel 		cat >> $rootprefix/var/svc/profile/upgrade <<-EOFA
   2304      0     stevel if /usr/bin/svcprop -q application/cde-login; then
   2305      0     stevel 	if [ \`/usr/bin/svcprop -p general/enabled \
   2306      0     stevel 		application/cde-login:default\` = "true" ]; then
   2307      0     stevel 		do_dtconfig=1;
   2308      0     stevel 	else
   2309      0     stevel 		do_dtconfig=0;
   2310      0     stevel 	fi
   2311      0     stevel 
   2312      0     stevel 	/usr/sbin/svccfg delete -f application/cde-login
   2313      0     stevel 	type instance_refresh 2>&1 > /dev/null
   2314      0     stevel 	if [ \$? = 0 ]; then
   2315      0     stevel 		instance_refresh system/console-login
   2316      0     stevel 	else
   2317      0     stevel 		/usr/sbin/svcadm refresh system/console-login
   2318      0     stevel 	fi
   2319      0     stevel 
   2320      0     stevel 	if [ \$do_dtconfig -eq 1 -a -x /usr/dt/bin/dtconfig ]; then
   2321      0     stevel 		/usr/dt/bin/dtconfig -e
   2322      0     stevel 	fi
   2323      0     stevel fi
   2324      0     stevel EOFA
   2325      0     stevel 	fi
   2326      0     stevel 
   2327      0     stevel 
   2328      0     stevel 	# Enable the inetd-upgrade service to convert any changes to inetd.conf
   2329      0     stevel 	smf_enable network/inetd-upgrade
   2330      0     stevel 
   2331      0     stevel 	# If global zone, and bfu'ing from smf, and the inetd-upgrade
   2332      0     stevel 	# service has an obsolete dependency, then add a clear of inetd
   2333      0     stevel 	# and inetd-upgrade to the upgrade file as either may drop into
   2334      0     stevel 	# maintenance due to a dependency loop resulting from the new
   2335      0     stevel 	# inetd manifest
   2336      0     stevel 	if [[ $zone = global && -x /tmp/bfubin/svccfg ]]; then
   2337      0     stevel 		/tmp/bfubin/svcprop -q -p network/entities network/inetd-upgrade
   2338      0     stevel 		if [[ $? = 0 ]]; then
   2339      0     stevel 		    	echo "/usr/sbin/svcadm clear network/inetd" >> \
   2340      0     stevel 			    $rootprefix/var/svc/profile/upgrade
   2341      0     stevel 			echo "/usr/sbin/svcadm clear network/inetd-upgrade" >> \
   2342      0     stevel 			    $rootprefix/var/svc/profile/upgrade
   2343      0     stevel 		fi
   2344      0     stevel 	fi
   2345      0     stevel 
   2346   5895   yz147064 	#
   2347   5895   yz147064 	# Import the name-service-cache service. This is to get the service
   2348   5895   yz147064 	# (with correct dependencies) in the repository before reboot.
   2349   5895   yz147064 	#
   2350   5895   yz147064 	smf_import_service system/name-service-cache.xml
   2351   5895   yz147064 
   2352   5895   yz147064 	#
   2353   5895   yz147064 	# Import the datalink-management service.
   2354   5895   yz147064 	#
   2355   5895   yz147064 	smf_import_service network/dlmgmt.xml \
   2356   5895   yz147064 	    svc:/network/datalink-management:default
   2357   7195    rm88369 
   2358   7195    rm88369 	#
   2359   7195    rm88369 	# Import the ldap/client service. This is to get the service
   2360   7195    rm88369 	# (with correct dependencies) in the repository before reboot.
   2361   7195    rm88369 	#
   2362   7195    rm88369 	smf_import_service network/ldap/client.xml
   2363      0     stevel 
   2364      0     stevel 	# Enable new NFS status and nlockmgr services if client is enabled
   2365      0     stevel 	cat >> $rootprefix/var/svc/profile/upgrade <<-EOF
   2366      0     stevel 	    cl="svc:/network/nfs/client:default"
   2367      0     stevel 	    if [ \`/usr/bin/svcprop -p general/enabled \$cl\` = "true" ]; then
   2368      0     stevel 		/usr/sbin/svcadm enable svc:/network/nfs/status:default
   2369      0     stevel 		/usr/sbin/svcadm enable svc:/network/nfs/nlockmgr:default
   2370      0     stevel 	    fi
   2371      0     stevel 
   2372      0     stevel EOF
   2373      0     stevel 
   2374      0     stevel 	kpmani="$rootprefix/var/svc/manifest/network/security/krb5_prop.xml"
   2375      0     stevel 	if grep svc-kdc.slave $kpmani > /dev/null 2>&1; then
   2376      0     stevel 		cat >> $rootprefix/var/svc/profile/upgrade <<EOF
   2377      0     stevel 		# We are deleting and reimporting kpropd's manifest, because we
   2378      0     stevel 		# need to change the restarter.
   2379      0     stevel 		kpfmri="svc:/network/security/krb5_prop"
   2380      0     stevel 		kkfmri="svc:/network/security/krb5kdc:default"
   2381      0     stevel 		lkpmani="/var/svc/manifest/network/security/krb5_prop.xml"
   2382      0     stevel 		restarter=\`svcprop -c -p general/restarter \$kpfmri 2>&1\`
   2383      0     stevel 		case \$restarter in
   2384      0     stevel 			*network/inetd:default)
   2385      0     stevel 				kken=\`svcprop -c -p general/enabled \$kkfmri\`
   2386   9263       Sean 				eval $BFUSVCCFG delete -f \$kpfmri
   2387   9263       Sean 				eval $BFUSVCCFG import \$lkpmani 
   2388      0     stevel 				# Enable kpropd if krb5kdc is enabled, since
   2389      0     stevel 				# krb5kdc would have run kpropd
   2390      0     stevel 				if [ \$kken = "true" ]; then
   2391      0     stevel 					svcadm enable \$kpfmri
   2392      0     stevel 				fi
   2393      0     stevel 				;;
   2394      0     stevel 		esac
   2395      0     stevel EOF
   2396      0     stevel 	fi
   2397      0     stevel 
   2398      0     stevel 	# Enable print server if there are local queues
   2399      0     stevel 	queues=`echo $rootprefix/etc/lp/printers/*/configuration`
   2400      0     stevel 	if [ "$queues" != "$rootprefix/etc/lp/printers/*/configuration" ]; then
   2401      0     stevel 		smf_enable application/print/server
   2402      0     stevel 	fi
   2403      0     stevel 
   2404      0     stevel 	# Enable rarpd and bootparamd if they would have been running pre-SMF
   2405      0     stevel 	if [ -d $rootprefix/tftpboot ] || [ -d $rootprefix/rplboot ]; then
   2406      0     stevel 		smf_enable network/rarp
   2407      0     stevel 		smf_enable network/rpc/bootparams
   2408      0     stevel 	fi
   2409      0     stevel 
   2410      0     stevel 	touch $rootprefix/var/svc/profile/.upgrade_prophist
   2411   1120   mb158278 
   2412   1120   mb158278 	cat >> $rootprefix/var/svc/profile/upgrade <<EOF
   2413   1120   mb158278 	# We are deleting and reimporting dcs's manifest, because we
   2414   1120   mb158278 	# need to change the restarter.
   2415   1120   mb158278 	dcsfmri="svc:/platform/sun4u/dcs:default"
   2416   1120   mb158278 	dcsmani="/var/svc/manifest/platform/sun4u/dcs.xml"
   2417   1120   mb158278 	restarter=\`svcprop -c -p general/restarter \$dcsfmri 2>&1\`
   2418   1120   mb158278 	case \$restarter in
   2419   1120   mb158278 		*network/inetd:default)
   2420   1120   mb158278 			en=\`svcprop -c -p general/enabled \$dcsfmri\`
   2421   9263       Sean 			eval $BFUSVCCFG delete -f \$dcsfmri
   2422   9263       Sean 			eval $BFUSVCCFG import \$dcsmani
   2423   1120   mb158278 			if [ \$en = "true" ]; then
   2424   1120   mb158278 				svcadm enable \$dcsfmri
   2425   1120   mb158278 			fi
   2426   1120   mb158278 			;;
   2427   1120   mb158278 	esac
   2428   1120   mb158278 EOF
   2429      0     stevel 
   2430   3446        mrj 	smf_fix_i86pc_profile
   2431   7887      Liane 
   2432   7887      Liane 	smf_bkbfu_templates
   2433      0     stevel }
   2434      0     stevel 
   2435   6934       rica tx_check_update() {
   2436   6934       rica #
   2437   6934       rica # If a lbl_edition file is found it's a likely sign that old unbundled
   2438   6934       rica # Trusted Extensions packages are installed and TX is active.  Update
   2439   6934       rica # etc/system if needed, to complete enabling of the bundled TX.
   2440   6934       rica #
   2441   6934       rica 	LMOD1=$rootprefix/kernel/sys/lbl_edition
   2442   6934       rica 	LMOD2=$rootprefix/kernel/sys/amd64/lbl_edition
   2443   6934       rica 	LMOD3=$rootprefix/kernel/sys/sparcv9/lbl_edition
   2444   6934       rica 
   2445   6934       rica 	grep "^set sys_labeling=" $rootprefix/bfu.child/etc/system > \
   2446   6934       rica 	    /dev/null 2>&1
   2447   6934       rica 	if [ $? -eq 0 ]; then
   2448   6934       rica 		return
   2449   6934       rica 	fi
   2450   6934       rica 
   2451   6934       rica 	if [ -f $LMOD1 -o -f $LMOD2 -o -f $LMOD3 ]; then
   2452   6934       rica 		echo "set sys_labeling=1" >> $rootprefix/bfu.child/etc/system
   2453   6934       rica 		if [ $? -ne 0 ]; then
   2454   6934       rica     			echo "cannot set sys_labeling in $rootprefix/bfu.child/etc/system"
   2455   6934       rica 			return
   2456   6934       rica 		fi
   2457   6934       rica 
   2458   6934       rica 		rm -f $LMOD1 $LMOD2 $LMOD3
   2459   6934       rica 	fi
   2460   6934       rica }
   2461   6934       rica 
   2462   6934       rica tx_check_bkbfu() {
   2463   6934       rica #
   2464   6934       rica # Emit a warning message if bfu'ing a Trusted Extensions-enabled system
   2465   6934       rica # backwards to pre TX-merge bits.  In this case, unbundled packages must
   2466   6934       rica # be reinstalled to complete restoration of old TX bits.
   2467   6934       rica #
   2468   6934       rica 	bsmconv=$rootprefix/etc/security/bsmconv
   2469   6934       rica 
   2470   6934       rica 	# This check is only needed in global zone
   2471   6934       rica 	if [[ $zone != global ]]; then
   2472   6934       rica 		return
   2473   6934       rica 	fi
   2474   6934       rica 
   2475   6934       rica 	# No warning needed if TX is not currently enabled
   2476   6934       rica 	grep "^set sys_labeling=" $rootprefix/bfu.child/etc/system > \
   2477   6934       rica 	    /dev/null 2>&1
   2478   6934       rica 	if [ $? -ne 0 ]; then
   2479   6934       rica 		return
   2480   6934       rica 	fi
   2481   6934       rica 
   2482   6934       rica 	if [ ! -f $bsmconv ]; then
   2483   6934       rica 		return
   2484   6934       rica 	fi
   2485   6934       rica 	grep " -x /usr/bin/plabel " $bsmconv > /dev/null 2>&1
   2486   6934       rica 	if [ $? != 0 ]; then
   2487   6934       rica 		return
   2488   6934       rica 	fi
   2489   6934       rica 
   2490   6934       rica 	print ""
   2491   6934       rica 	print "*************************************************************"
   2492   6934       rica 	print " WARNING: BFU'ing TX backwards across 6533113."
   2493   6934       rica 	print " Must re-install unbundled TX packages to remain Trusted."
   2494   6934       rica 	print "*************************************************************"
   2495   6934       rica 	print ""
   2496   6934       rica }
   2497   6934       rica 
   2498   4088     rscott #
   2499   4088     rscott # The directboot putback moved the console property from
   2500   4088     rscott # /boot/solaris/bootenv.rc to /boot/grub/menu.lst.  It should be kept in both.
   2501   4088     rscott #
   2502   4088     rscott cleanup_eeprom_console()
   2503   4088     rscott {
   2504   4088     rscott 	bootenvrc="$root/boot/solaris/bootenv.rc"
   2505   4088     rscott 	menu_console=`eeprom console 2>/dev/null | \
   2506   4088     rscott 	    grep -v 'data not available' | cut -d= -f2-`
   2507   5084    johnlev 	bootenv_console=`grep '^setprop[	 ]\{1,\}console\>' $bootenvrc`
   2508   4088     rscott 	if [ -n "$menu_console" ] && [ -z "$bootenv_console" ]; then
   2509   4088     rscott 		echo "setprop console '$menu_console'" >> $bootenvrc
   2510   4088     rscott 	fi
   2511   4088     rscott }
   2512   4088     rscott 
   2513      0     stevel EXTRACT_LOG=/tmp/bfu-extract-log.$$
   2514      0     stevel 
   2515      0     stevel rm -f $EXTRACT_LOG
   2516      0     stevel 
   2517      0     stevel extraction_error() {
   2518      0     stevel 	echo error $* >> $EXTRACT_LOG
   2519      0     stevel }
   2520      0     stevel 
   2521      0     stevel #
   2522      0     stevel # Make a local copy of bfu in /tmp and execute that instead.
   2523      0     stevel # This makes us immune to loss of networking and/or changes
   2524      0     stevel # to the original copy that might occur during execution.
   2525      0     stevel #
   2526      0     stevel cd .
   2527      0     stevel abspath=`[[ $0 = /* ]] && print $0 || print $PWD/$0`
   2528      0     stevel if [[ $abspath != /tmp/* ]]; then
   2529      0     stevel 	localpath=/tmp/bfu.$$
   2530      0     stevel 	print "Copying $abspath to $localpath"
   2531      0     stevel 	cp $abspath $localpath
   2532      0     stevel 	chmod +x $localpath
   2533      0     stevel 	print "Executing $localpath $*\n"
   2534      0     stevel 	exec $localpath $*
   2535      0     stevel fi
   2536      0     stevel 
   2537      0     stevel export PATH=/usr/bin:/usr/sbin:/sbin
   2538      0     stevel 
   2539      0     stevel usage() {
   2540      0     stevel 	echo "Usage:"
   2541      0     stevel 	echo "    bfu    [-fh] <archive_dir> [root-dir]"
   2542      0     stevel 	echo "\tUpdate a single machine by loading archives on root-dir."
   2543      0     stevel 	echo "\troot-dir defaults to / (a live bfu).\n"
   2544      0     stevel 	echo "    bfu -c [-fh] <archive_dir> <exec-dir>"
   2545      0     stevel 	echo "\tUpdate all diskless clients by loading archives on each client"
   2546      0     stevel 	echo "\tthat mounts exec-dir as /usr.  <exec-dir> must start with"
   2547      0     stevel 	echo "\t/export/exec and each client's root must be in /export/root.\n"
   2548      0     stevel 	echo "\t-f        force bfu to continue even if it doesn't seem safe"
   2549      0     stevel 	fail "\t-h|-help  print this usage message and exit\n"
   2550      0     stevel }
   2551      0     stevel 
   2552      0     stevel diskless=no
   2553      0     stevel force_override=no
   2554      0     stevel while [ $# -gt 0 ]; do
   2555      0     stevel 	case $1 in
   2556      0     stevel 		-c)		diskless=yes;;
   2557      0     stevel 		-f)		force_override=yes;;
   2558      0     stevel 		-h|-help)	usage;;
   2559      0     stevel 		*)      	break;;
   2560      0     stevel 	esac
   2561      0     stevel 	shift
   2562      0     stevel done
   2563      0     stevel 
   2564   3446        mrj # Variables for x86 platforms
   2565      0     stevel boot_is_pcfs=no
   2566      0     stevel have_realmode=no
   2567      0     stevel is_pcfs_boot=no
   2568   3147   xc151355 new_dladm=no
   2569   3446        mrj 
   2570   3446        mrj # Set when moving to either directboot or multiboot
   2571   3446        mrj multi_or_direct=no
   2572   3446        mrj 
   2573   3446        mrj #
   2574   3446        mrj # Shows which type of archives we have, which type of system we are
   2575   3446        mrj # running on (before the bfu), and what the failsafe archives are
   2576   3446        mrj # (again, before the bfu).  failsafe_type is only needed on diskful
   2577   3446        mrj # bfu's, so it's not set in the diskless case.
   2578   5084    johnlev # Possible values: unknown, dca, multiboot, directboot, xpv
   2579   3446        mrj #
   2580   3446        mrj archive_type=unknown
   2581   3446        mrj system_type=unknown
   2582   3446        mrj failsafe_type=unknown
   2583      0     stevel 
   2584      0     stevel test $# -ge 1 || usage
   2585      0     stevel 
   2586      0     stevel if [ -x /usr/bin/ppriv ]; then
   2587      0     stevel 	# We prefer to use ppriv, as it is a more accurate test, and also
   2588   3948         dp 	# has the benefit of preventing use from within a nonglobal zone.
   2589      0     stevel 	ppriv $$ | grep -w "E: all" > /dev/null 2>&1 || \
   2590      0     stevel 	    fail "bfu requires all privileges"
   2591      0     stevel else
   2592      0     stevel 	# Fall back to old id check if system does not yet have ppriv.
   2593      0     stevel 	uid=`id | nawk '{print $1}'`
   2594      0     stevel 	[ "$uid" = "uid=0(root)" ] || \
   2595      0     stevel 	    fail "You must be super-user to run this script."
   2596      0     stevel fi
   2597      0     stevel 
   2598      0     stevel bfu_isa=`uname -p`
   2599      0     stevel target_isa=$bfu_isa
   2600      0     stevel karch=`uname -m`
   2601      0     stevel plat=`uname -i`
   2602      0     stevel 
   2603      0     stevel cpiodir=$1
   2604      0     stevel 
   2605      0     stevel if [ "$cpiodir" = again ]; then
   2606      0     stevel 	cpiodir=`nawk '/^bfu.ed from / { print $3; exit }' /etc/motd`
   2607      0     stevel fi
   2608      0     stevel 
   2609      0     stevel [[ "$cpiodir" = */* ]] || cpiodir=$ARCHIVE/archives/$target_isa/$1
   2610      0     stevel 
   2611      0     stevel [[ "$cpiodir" = /* ]] || fail "archive-dir must be an absolute path"
   2612      0     stevel 
   2613      0     stevel cd $cpiodir
   2614      0     stevel case `echo generic.root*` in
   2615      0     stevel 	generic.root)		ZFIX="";	ZCAT="cat";;
   2616      0     stevel 	generic.root.gz)	ZFIX=".gz";	ZCAT="gzip -d -c";;
   2617      0     stevel 	generic.root.Z)		ZFIX=".Z";	ZCAT="zcat";;
   2618      0     stevel 	*) fail "generic.root missing or in unknown compression format";;
   2619      0     stevel esac
   2620      0     stevel 
   2621   3446        mrj #
   2622   3446        mrj # Determine what kind of archives we're installing, using the following rules:
   2623   3446        mrj #
   2624   5084    johnlev # 1. If i86xpv archives exist, the archives are xpv
   2625   5084    johnlev # 2. If strap.com is present, the archives are pre-multiboot
   2626   5084    johnlev # 3. If symdef is present, the archives are directboot
   2627   5084    johnlev # 4. Otherwise, the archives are multiboot
   2628   3446        mrj #
   2629   3446        mrj if [ $target_isa = i386 ]; then
   2630   5084    johnlev 	if [ -f $cpiodir/i86xpv.root$ZFIX ]; then
   2631   5084    johnlev 		archive_type=xpv
   2632   5084    johnlev 		multi_or_direct=yes
   2633   5084    johnlev 	elif [ -f $cpiodir/i86pc.boot$ZFIX ] && \
   2634   3446        mrj 	    archive_file_exists i86pc.boot "strap.com"; then
   2635   3446        mrj 		archive_type=dca
   2636   3446        mrj 	elif [ -f $cpiodir/i86pc.root$ZFIX ] && \
   2637   3446        mrj 	    archive_file_exists i86pc.boot symdef; then
   2638   3446        mrj 		archive_type=directboot
   2639   3446        mrj 		multi_or_direct=yes
   2640   3446        mrj 	else
   2641   3446        mrj 		archive_type=multiboot
   2642   3446        mrj 		multi_or_direct=yes
   2643   3446        mrj 	fi
   2644   3446        mrj fi
   2645   3446        mrj 
   2646      0     stevel if [ $diskless = no ]; then
   2647      0     stevel 	root=${2:-/}
   2648      0     stevel 	[[ "$root" = /* ]] || fail "root-dir must be an absolute path"
   2649      0     stevel 	usrroot=$root
   2650      0     stevel 	usr=${usrroot%/}/usr
   2651      0     stevel 	rootlist=$root
   2652      0     stevel 
   2653      0     stevel 	[[ -f $root/etc/system ]] || \
   2654   3948         dp 	    fail "$root/etc/system not found; nonglobal zone target not allowed"
   2655      0     stevel 
   2656   6423    gw25295 	rootfstype=`df -n $root | awk '{print $3}'`
   2657   6423    gw25295 
   2658   6423    gw25295 	if [ "$rootfstype" = "zfs" ]; then
   2659   6423    gw25295 		archive_has_zfs_root_support=no
   2660   6423    gw25295 		mkdir /tmp/zfschk.$$
   2661   6423    gw25295 		archive_file_peek generic.lib /tmp/zfschk.$$ \
   2662   6423    gw25295 		    "lib/svc/share/fs_include.sh"
   2663   6423    gw25295 		if [ -f /tmp/zfschk.$$/lib/svc/share/fs_include.sh ] ; then
   2664   6423    gw25295 			if grep '^readswapdev' \
   2665   6423    gw25295 			     /tmp/zfschk.$$/lib/svc/share/fs_include.sh \
   2666   6423    gw25295 			     >/dev/null 2>&1 ; then
   2667   6423    gw25295 				archive_has_zfs_root_support=yes
   2668   6423    gw25295 			fi
   2669   6423    gw25295 		fi
   2670   6423    gw25295 		rm -fr /tmp/zfschk.$$
   2671   6423    gw25295 
   2672   6423    gw25295 		if [ "$archive_has_zfs_root_support" = "no" ] ; then
   2673   6423    gw25295 			fail "Cannot bfu a system with zfs root to an archive with no zfs root support"
   2674   6423    gw25295 		fi
   2675   6423    gw25295 	fi
   2676   6423    gw25295 
   2677      0     stevel 	# Make sure we extract the sun4u-us3 libc_psr.so.1
   2678      0     stevel 	if [ -d $root/platform/sun4u -a \
   2679      0     stevel 	   ! -d $root/platform/sun4u-us3 ]
   2680      0     stevel 	then
   2681      0     stevel 		mkdir $root/platform/sun4u-us3
   2682      0     stevel 		chmod 755 $root/platform/sun4u-us3
   2683      0     stevel 		chown root $root/platform/sun4u-us3
   2684      0     stevel 		chgrp sys $root/platform/sun4u-us3
   2685   5084    johnlev 	fi
   2686   5084    johnlev 
   2687   5741        mrj 	if [ $target_isa = i386 ]; then
   2688   5741        mrj 		if [ $archive_type = xpv ]; then
   2689   5741        mrj 			#
   2690   5741        mrj 			# On i386, we want to apply the archives for both
   2691   5741        mrj 			# platforms (i86pc and i86xpv) if they exist.  We
   2692   5741        mrj 			# force the platform to i86xpv so that both will be
   2693   5741        mrj 			# applied.
   2694   5741        mrj 			#
   2695   5741        mrj 			karch=i86pc
   2696   5741        mrj 			plat=i86xpv
   2697   5741        mrj 		fi
   2698   5741        mrj 		if [ ! -d $root/platform/i86hvm ]; then
   2699   5741        mrj 			mkdir $root/platform/i86hvm
   2700   5741        mrj 		fi
   2701      0     stevel 	fi
   2702      0     stevel 
   2703      0     stevel 	if [ $karch != $plat -a -f ${cpiodir}/${plat}.usr$ZFIX ]; then
   2704      0     stevel 		usrarchs="$karch $plat"
   2705      0     stevel 	else
   2706      0     stevel 		usrarchs="$karch"
   2707      0     stevel 	fi
   2708      0     stevel 	if [ $karch != $plat -a -f ${cpiodir}/${plat}.root$ZFIX ]; then
   2709      0     stevel 		rootarchs="$karch $plat"
   2710      0     stevel 	else
   2711      0     stevel 		rootarchs="$karch"
   2712      0     stevel 	fi
   2713      0     stevel 
   2714      0     stevel 	if [ -h ${root}/platform/${plat} ]; then
   2715      0     stevel 		rm -f ${root}/platform/${plat}
   2716      0     stevel 	fi
   2717      0     stevel 	if [ -h ${usr}/platform/${plat} ]; then
   2718      0     stevel 		rm -f ${usr}/platform/${plat}
   2719      0     stevel 	fi
   2720      0     stevel 
   2721      0     stevel 	if [ $plat != $karch -a -f ${cpiodir}/${plat}.root$ZFIX \
   2722      0     stevel 	    -a -f ${cpiodir}/${plat}.usr$ZFIX ]
   2723      0     stevel 	then
   2724      0     stevel 		cd $cpiodir
   2725      0     stevel 		#
   2726      0     stevel 		#  Look through all the archives we build and match
   2727      0     stevel 		#  the names of built archives with the names of
   2728      0     stevel 		#  directories installed on this machine.  We assume
   2729      0     stevel 		#  here that we can get the names of all architectures
   2730      0     stevel 		#  by pattern matching the names of .root archives - so
   2731      0     stevel 		#  if we ever had a case where we had only a .usr archive
   2732      0     stevel 		#  we wouldn't find that archive.
   2733      0     stevel 		#
   2734      0     stevel 		for i in *.root*
   2735      0     stevel 		do
   2736      0     stevel 			platname=${i%.root*}
   2737      0     stevel 			if [ -z "${platname}" -o ${platname} = $karch -o \
   2738      0     stevel 			    $platname = generic -o ${platname} = $plat ]; then
   2739      0     stevel 				continue;
   2740      0     stevel 			fi
   2741      0     stevel 			if [ -d ${root}/platform/${platname} -o \
   2742      0     stevel 			    -h ${root}/platform/${platname} ]; then
   2743      0     stevel 				rootarchs="${rootarchs} ${platname}"
   2744      0     stevel 			fi
   2745      0     stevel 			if [ -d ${usr}/platform/${platname} -o \
   2746      0     stevel 			    -h ${usr}/platform/${platname} ]; then
   2747      0     stevel 				usrarchs="${usrarchs} ${platname}"
   2748      0     stevel 			fi
   2749      0     stevel 			if [ -h ${root}/platform/${platname} ]; then
   2750      0     stevel 				rm -f ${root}/platform/${platname}
   2751      0     stevel 			fi
   2752      0     stevel 			if [ -h ${usr}/platform/${platname} ]; then
   2753      0     stevel 				rm -f ${usr}/platform/${platname}
   2754      0     stevel 			fi
   2755      0     stevel 		done
   2756      0     stevel 	fi
   2757   6423    gw25295 	if [ "$rootfstype" = "ufs" ] ; then
   2758   6423    gw25295 		rootslice=`df -k $root | nawk 'NR > 1 { print $1 }' | \
   2759   6423    gw25295 		    sed s/dsk/rdsk/`
   2760   6423    gw25295 	fi
   2761   6423    gw25295 
   2762      0     stevel 	print "Loading $cpiodir on $root"
   2763      0     stevel else
   2764      0     stevel 	usrroot=$2
   2765      0     stevel 	usr=$2/usr
   2766      0     stevel 	[[ "$usr" = /export/exec/* ]] || fail "exec-dir $usrroot sounds bogus"
   2767      0     stevel 	case $2 in
   2768      0     stevel 	    *sparc*)
   2769      0     stevel 		target_isa=sparc ;;
   2770      0     stevel 	    *i386*)
   2771      0     stevel 		target_isa=i386 ;;
   2772      0     stevel 	esac
   2773      0     stevel 	cd $cpiodir
   2774      0     stevel 	test -f generic.root$ZFIX || fail "$cpiodir/generic.root$ZFIX missing"
   2775      0     stevel 	allarchs=$(echo $(ls *.root$ZFIX | grep -v generic.root$ZFIX | \
   2776      0     stevel 		sed -e 's/.root.*//'))
   2777   5084    johnlev 
   2778   5084    johnlev 	if [ $target_isa = i386 -a $archive_type = xpv ]; then
   2779   5084    johnlev 		#
   2780   5084    johnlev 		# On i386, we want to apply the archives for both platforms
   2781   5084    johnlev 		# (i86pc and i86xpv) if they exist.  We force the platform
   2782   5084    johnlev 		# to i86xpv so that both will be applied.
   2783   5084    johnlev 		#
   2784   5084    johnlev 		karch=i86pc
   2785   5084    johnlev 		plat=i86xpv
   2786   5084    johnlev 	else
   2787   5084    johnlev 		# XXX Pick karch as last available root arch
   2788   5084    johnlev 		karch=${allarchs##* }
   2789   5084    johnlev 		# XXX Pick plat as first available root arch
   2790   5084    johnlev 		plat=${allarchs%% *}
   2791   5084    johnlev 	fi
   2792   5084    johnlev 
   2793      0     stevel 	rootlist=""
   2794      0     stevel 	for root in /export/root/*
   2795      0     stevel 	do
   2796      0     stevel 		test -f $root/etc/vfstab &&
   2797      0     stevel 			egrep -s $usrroot $root/etc/vfstab &&
   2798      0     stevel 			rootlist="$rootlist $root"
   2799      0     stevel 	done
   2800      0     stevel 	test -n "$rootlist" || fail "no clients to upgrade"
   2801      0     stevel 	print "Loading $cpiodir usr archives on:\n\t$usr\n"
   2802      0     stevel 	print "Loading $cpiodir root archives on:"
   2803      0     stevel 	for root in $rootlist
   2804      0     stevel 	do
   2805      0     stevel 		print "\t$root"
   2806      0     stevel 	done
   2807   3977       lalt fi
   2808   3977       lalt 
   2809   4015       lalt if grep '^[ 	]*zfsroot:' $root/etc/system >/dev/null && \
   2810   4015       lalt 	    archive_file_exists i86pc.boot boot/grub/zfs_stage1_5; then
   2811   3977       lalt 	echo "Cannot BFU a system with the mountroot version"\
   2812   3977       lalt 		"of zfs boot support."
   2813   4015       lalt 	echo "For information on how to transition this system to the new"
   2814   4015       lalt 	echo "zfs boot support, see:"
   2815   4015       lalt 	echo "http://www.opensolaris.org/os/community/zfs/boot/zfsboot-manual/mntroot-transition/"
   2816   3977       lalt 	fail ""
   2817      0     stevel fi
   2818      0     stevel 
   2819      0     stevel nss_lib="$usr/lib/mps/libnss3.so"
   2820      0     stevel nss_lib64="$usr/lib/mps/64/libnss3.so"
   2821      0     stevel valid_rpath="\$ORIGIN:/usr/lib/mps/secv1:/usr/lib/mps"
   2822   3529        rie rpath_msg="R(UN)?PATH from file ${nss_lib}\)"
   2823      0     stevel if [ ! -x /usr/bin/ldd ]; then
   2824      0     stevel 	if [ "$force_override" = yes ]; then
   2825      0     stevel 		echo "/usr/bin/ldd is missing but -f is set; continuing."
   2826      0     stevel 	else
   2827      0     stevel 		echo "/usr/bin/ldd is missing."
   2828      0     stevel 		fail "Install the SUNWtoo package."
   2829      0     stevel 	fi
   2830      0     stevel fi
   2831   3529        rie nss_rpath=`ldd -s $nss_lib | egrep "$rpath_msg" | head -1 | cut -d'=' -f2 | \
   2832      0     stevel 		awk '{print $1}'`
   2833   7309       Mark update_script="${GATE}/public/bin/update_nsspkgs"
   2834      0     stevel if [ $valid_rpath != "$nss_rpath" ]; then
   2835      0     stevel 	if [ "$force_override" = yes ]; then
   2836      0     stevel 		echo "$nss_lib is not valid but -f is set; continuing."
   2837      0     stevel 	else
   2838      0     stevel 		echo "$nss_lib is not valid."
   2839      0     stevel 		fail "Run $update_script to update the SUNWtls package."
   2840      0     stevel 	fi
   2841      0     stevel fi
   2842      0     stevel if [ $target_isa = i386 -a ! -f $nss_lib64 ]; then
   2843      0     stevel 	echo "$nss_lib64 does not exist."
   2844      0     stevel 	fail "Run $update_script to update the NSS packages."
   2845      0     stevel fi
   2846      0     stevel 
   2847   7309       Mark update_script="${GATE}/public/bin/migrate_bind9"
   2848      0     stevel if [[ ! -f $usr/lib/dns/libdns.so ]] && ! $ZCAT $cpiodir/generic.usr$ZFIX | \
   2849      0     stevel 	    cpio -it 2>/dev/null |  egrep -s '^usr/sbin/ndc' ; then
   2850      0     stevel 	if [ "$force_override" = yes ]; then
   2851      0     stevel 		echo "BIND 9 has not been installed, but -f is set; continuing."
   2852      0     stevel 	else
   2853      0     stevel 		echo "BIND 8 has been removed from ON; BIND 9 is available from SFW."
   2854      0     stevel 		fail "Run $update_script to migrate to BIND 9."
   2855      0     stevel 	fi
   2856      0     stevel fi
   2857      0     stevel 
   2858   7309       Mark update_script="${GATE}/public/bin/update_ce"
   2859    741   masputra if ifconfig -a | egrep '^ce' >/dev/null 2>/dev/null; then
   2860    741   masputra 	# CE version 1.148 or later is required
   2861      0     stevel 	cever=`modinfo | grep 'CE Ethernet' | sed 's/.*v1\.//' | tr -d ')' | \
   2862    741   masputra 	    nawk '{ if ($1 < 148) print "BAD"; else print $1 }'`
   2863      0     stevel 	if [ "$cever" = "BAD" ]; then
   2864      0     stevel 		fail "You must run $update_script to upgrade your ce driver."
   2865      0     stevel 	fi
   2866   2912      artem fi
   2867   2912      artem 
   2868   7309       Mark update_script="${GATE}/public/bin/update_dbus"
   2869   2919      artem if [ ! -x $usr/lib/dbus-daemon ]; then
   2870   2912      artem 	fail "Run $update_script to update D-Bus."
   2871      0     stevel fi
   2872      0     stevel 
   2873   3446        mrj #
   2874   3446        mrj # We need biosdev if we're moving from pre-multiboot to multiboot or directboot
   2875   5084    johnlev # kernels.  If we already have an i86xpv kernel, then we must already be a
   2876   5084    johnlev # directboot kernel, and can therefore skip the check.
   2877   5084    johnlev #
   2878   5084    johnlev if [ $target_isa = i386 ] && [ $multi_or_direct = yes ] && \
   2879   5084    johnlev     [ $diskless = no ] && [ ! -d /platform/i86xpv/ ]; then
   2880      0     stevel 	prtconf -v | grep biosdev >/dev/null 2>&1
   2881   2866      szhou 	if [ $? -ne 0 ] && [ ! -f $rootprefix/platform/i86pc/multiboot ]; then
   2882      0     stevel 		echo "biosdev cannot be run on this machine."
   2883      0     stevel 		echo "Transitioning from classic to multiboot requires a"
   2884      0     stevel 		echo "bootconf which is compatible with biosdev."
   2885      0     stevel 		echo "bfu to onnv_12 first, then to a build with multiboot."
   2886      0     stevel 		fail ""
   2887      0     stevel 	fi
   2888    305   ericheng fi
   2889    305   ericheng 
   2890   5895   yz147064 #
   2891   5895   yz147064 # Check whether the archives have a datalink-management services; this is
   2892   5895   yz147064 # later used to determine whether we need to upgrade the existing datalink
   2893   5895   yz147064 # configuration and if the datalink-management service needs to be removed.
   2894   5895   yz147064 #
   2895   5895   yz147064 if archive_file_exists generic.sbin "sbin/dlmgmtd"; then
   2896   5895   yz147064 	dlmgmtd_exists=true
   2897   5895   yz147064 else
   2898   5895   yz147064 	dlmgmtd_exists=false
   2899   5895   yz147064 fi
   2900   5895   yz147064 #
   2901   5895   yz147064 # Set the value of dlmgmtd_status based on the existence of the
   2902   5895   yz147064 # /sbin/dlmgmtd file
   2903   5895   yz147064 #
   2904   5895   yz147064 dlmgmtd_status=none
   2905   5895   yz147064 if [[ -f $root/sbin/dlmgmtd ]] && ! $dlmgmtd_exists ; then
   2906   5895   yz147064 	dlmgmtd_status=cleanup
   2907   5895   yz147064 elif [[ ! -f $root/sbin/dlmgmtd ]] && $dlmgmtd_exists ; then
   2908   5895   yz147064 	dlmgmtd_status=new
   2909   3147   xc151355 fi
   2910   3147   xc151355 
   2911   3147   xc151355 #
   2912   3147   xc151355 # Check whether the archives have an etc/dladm directory; this is
   2913   3147   xc151355 # later used to determine if aggregation.conf needs to be moved.
   2914   3147   xc151355 #
   2915   3147   xc151355 if $ZCAT $cpiodir/generic.root$ZFIX | cpio -it 2>/dev/null | \
   2916   3147   xc151355     grep etc/dladm > /dev/null 2>&1 ; then
   2917   3147   xc151355 	new_dladm=yes
   2918  10616  Sebastien fi
   2919  10616  Sebastien 
   2920  10616  Sebastien #
   2921  10616  Sebastien # The Clearview IP Tunneling project changes the format of the
   2922  10616  Sebastien # /etc/dladm/datalink.conf file.  The conversion is done in the
   2923  10616  Sebastien # dlmgmtd daemon, so there is no backwards conversion when bfu'ing
   2924  10616  Sebastien # backwards.  The solution is to have bfu save the old file away when
   2925  10616  Sebastien # bfu'ing across this project, and restore it when bfu'ing back.
   2926  10616  Sebastien #
   2927  10616