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