1ead1f93eSLiane Praza#!/bin/ksh93 -p 2ead1f93eSLiane Praza# 3ead1f93eSLiane Praza# CDDL HEADER START 4ead1f93eSLiane Praza# 5ead1f93eSLiane Praza# The contents of this file are subject to the terms of the 6ead1f93eSLiane Praza# Common Development and Distribution License (the "License"). 7ead1f93eSLiane Praza# You may not use this file except in compliance with the License. 8ead1f93eSLiane Praza# 9ead1f93eSLiane Praza# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10ead1f93eSLiane Praza# or http://www.opensolaris.org/os/licensing. 11ead1f93eSLiane Praza# See the License for the specific language governing permissions 12ead1f93eSLiane Praza# and limitations under the License. 13ead1f93eSLiane Praza# 14ead1f93eSLiane Praza# When distributing Covered Code, include this CDDL HEADER in each 15ead1f93eSLiane Praza# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16ead1f93eSLiane Praza# If applicable, add the following below this CDDL HEADER, with the 17ead1f93eSLiane Praza# fields enclosed by brackets "[]" replaced with your own identifying 18ead1f93eSLiane Praza# information: Portions Copyright [yyyy] [name of copyright owner] 19ead1f93eSLiane Praza# 20ead1f93eSLiane Praza# CDDL HEADER END 21ead1f93eSLiane Praza# 22ead1f93eSLiane Praza 23ead1f93eSLiane Praza# 2467274386SJohn Levon# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. 254358e1dfSRichard Lowe# Copyright 2010, Richard Lowe 26b3013b70SAndy Fiddaman# Copyright 2021 OmniOS Community Edition (OmniOSce) Association. 279f923083SAlexander Pyhalov# 28ead1f93eSLiane Praza 29ead1f93eSLiane PrazaPATH=/usr/bin:/usr/sbin 30ead1f93eSLiane Prazaexport PATH 31ead1f93eSLiane Praza 32ead1f93eSLiane PrazaDEFAULTONURI="http://ipkg.sfbay/on-nightly" 33ead1f93eSLiane PrazaDEFAULTONPUB="on-nightly" 34ead1f93eSLiane Praza 35ead1f93eSLiane Prazausage() 36ead1f93eSLiane Praza{ 3767274386SJohn Levon echo "usage: $0 [opts] [-s beName] -t beName" 3867274386SJohn Levon echo "usage: $0 [opts] -r" 3967274386SJohn Levon echo 404358e1dfSRichard Lowe echo "\t-c consolidation : consolidation being upgraded" 4167274386SJohn Levon echo "\t-d repodir : directory for repositories" 424358e1dfSRichard Lowe echo "\t-r : configure publisher only" 4367274386SJohn Levon echo "\t-s : source BE to clone" 4467274386SJohn Levon echo "\t-t : new BE name" 4567274386SJohn Levon echo "\t-u uri : origin URI for redist repository" 4667274386SJohn Levon echo "\t-U prefix: prefix for redist repository" 4767274386SJohn Levon echo "\t-v : verbose" 4867274386SJohn Levon echo "\t-Z : skip updating zones" 4967274386SJohn Levon echo 5067274386SJohn Levon echo "Update to an ON build:" 5167274386SJohn Levon echo "\tonu -t newbe -d /path/to/my/ws/packages/\`uname -p\`/nightly" 5267274386SJohn Levon echo 5367274386SJohn Levon echo "Update to the nightly build:" 5467274386SJohn Levon echo "\tonu -t newbe" 5567274386SJohn Levon echo 564358e1dfSRichard Lowe echo "Re-enable the publishers in the current BE:" 5767274386SJohn Levon echo "\tonu -r -d /path/to/my/ws/packages/\`uname -p\`/nightly" 58ead1f93eSLiane Praza exit 1 59ead1f93eSLiane Praza} 60ead1f93eSLiane Praza 61ead1f93eSLiane Prazaexit_error() 62ead1f93eSLiane Praza{ 63ead1f93eSLiane Praza echo $* 64ead1f93eSLiane Praza exit 2 65ead1f93eSLiane Praza} 66ead1f93eSLiane Praza 67ead1f93eSLiane Prazado_cmd() 68ead1f93eSLiane Praza{ 69ead1f93eSLiane Praza [ $verbose -gt 0 ] && echo $* 70ead1f93eSLiane Praza $* 71ead1f93eSLiane Praza exit_code=$? 72ead1f93eSLiane Praza [ $exit_code -eq 0 ] && return 73ead1f93eSLiane Praza # pkg(1) returns 4 if "nothing to do", which is safe to ignore 74ead1f93eSLiane Praza [ $1 = "pkg" -a $exit_code -eq 4 ] && return 75ead1f93eSLiane Praza exit_error "$*" failed: exit code $exit_code 76ead1f93eSLiane Praza} 77ead1f93eSLiane Praza 7867274386SJohn Levonconfigure_publishers() 7967274386SJohn Levon{ 8067274386SJohn Levon root=$1 8167274386SJohn Levon 824358e1dfSRichard Lowe # 834358e1dfSRichard Lowe # Get the publisher name from the 'list -v' output. It may seem we 844358e1dfSRichard Lowe # could do this more tidily using 'info', but that is 854358e1dfSRichard Lowe # internationalized. 864358e1dfSRichard Lowe # 874358e1dfSRichard Lowe typeset on_publisher=$(pkg -R $root list -Hv \ 884358e1dfSRichard Lowe "${consolidation}-incorporation" | cut -d/ -f3) 894358e1dfSRichard Lowe 90b3013b70SAndy Fiddaman if [[ "$on_publisher" != "$redistpub" ]]; then 91b3013b70SAndy Fiddaman do_cmd pkg -R $root set-publisher -r --no-refresh \ 92b3013b70SAndy Fiddaman --set-property signature-policy=verify \ 93b3013b70SAndy Fiddaman --non-sticky $on_publisher 94b3013b70SAndy Fiddaman fi 95b3013b70SAndy Fiddaman 96b3013b70SAndy Fiddaman do_cmd pkg -R $root set-publisher -r -e --no-refresh -P \ 97b3013b70SAndy Fiddaman --set-property signature-policy=verify -O $uri $redistpub 98b3013b70SAndy Fiddaman 9967274386SJohn Levon do_cmd pkg -R $root refresh --full 10067274386SJohn Levon} 10167274386SJohn Levon 102b3013b70SAndy Fiddamanprepare_image() 103b3013b70SAndy Fiddaman{ 104b3013b70SAndy Fiddaman print "**\n** Preparing for ONU from $distribution\n**" 105b3013b70SAndy Fiddaman 106b3013b70SAndy Fiddaman case $distribution in 1074772ec9fSJoshua M. Clulow omnios|helios) 108b3013b70SAndy Fiddaman # This removes files from the image that cause conflicts with 109b3013b70SAndy Fiddaman # stock illumos-gate, and removes omnios-only kernel drivers 110b3013b70SAndy Fiddaman # etc. 111b3013b70SAndy Fiddaman do_cmd pkg -R $root change-facet -r onu.ooceonly=false 112b3013b70SAndy Fiddaman ;; 113b3013b70SAndy Fiddaman esac 114b3013b70SAndy Fiddaman} 115b3013b70SAndy Fiddaman 116639a4b99SJohn Levonupdate() 117639a4b99SJohn Levon{ 11867274386SJohn Levon root=$1 11967274386SJohn Levon 120b3013b70SAndy Fiddaman pkg -R $root list -q entire && do_cmd pkg -R $root uninstall entire 12167274386SJohn Levon 12267274386SJohn Levon configure_publishers $root 12367274386SJohn Levon 124b3013b70SAndy Fiddaman prepare_image 125b3013b70SAndy Fiddaman 126*b934d23bSHans Rosenfeld do_cmd pkg -R $root image-update $update_args 127639a4b99SJohn Levon} 128639a4b99SJohn Levon 129639a4b99SJohn Levonupdate_zone() 130639a4b99SJohn Levon{ 131b3013b70SAndy Fiddaman OIFS="$IFS" 132b3013b70SAndy Fiddaman IFS=":" 133b3013b70SAndy Fiddaman set -- $1 134b3013b70SAndy Fiddaman zone=$2; state=$3; path=$4; brand=$6 135b3013b70SAndy Fiddaman IFS="$OIFS" 136639a4b99SJohn Levon 137b3013b70SAndy Fiddaman [[ "$zone" == "global" ]] && return 138b3013b70SAndy Fiddaman [[ "$state" == "incomplete" ]] && return 139b3013b70SAndy Fiddaman [[ "$state" == "configured" ]] && return 140b3013b70SAndy Fiddaman [[ "$brand" == "$nlbrand" ]] || return 141639a4b99SJohn Levon 142639a4b99SJohn Levon if [ "$zone_warned" = 0 ]; then 143639a4b99SJohn Levon echo "WARNING: Use of onu(1) will prevent use of zone attach in the new BE" >&2 144639a4b99SJohn Levon echo "See onu(1)" >&2 145639a4b99SJohn Levon zone_warned=1 146639a4b99SJohn Levon fi 147639a4b99SJohn Levon 148b3013b70SAndy Fiddaman print "**\n** Updating zone $zone (brand $brand)\n**" 149b3013b70SAndy Fiddaman update "$path/root" 150b3013b70SAndy Fiddaman} 151639a4b99SJohn Levon 152b3013b70SAndy Fiddamantypeset -l distribution 153b3013b70SAndy Fiddamanif [[ -r /etc/os-release ]]; then 154b3013b70SAndy Fiddaman distribution=$(awk -F= '$1 == "ID" { print $2 }' /etc/os-release) 155b3013b70SAndy Fiddamanelif [[ -r /etc/release ]]; then 156b3013b70SAndy Fiddaman distribution=$(awk 'NR == 1 { print $1 }' /etc/release) 157b3013b70SAndy Fiddamanelse 158b3013b70SAndy Fiddaman distribution=unknown 159b3013b70SAndy Fiddamanfi 160639a4b99SJohn Levon 161b3013b70SAndy Fiddamancase $distribution in 162b3013b70SAndy Fiddaman openindiana) 163b3013b70SAndy Fiddaman nlbrand=nlipkg 164b3013b70SAndy Fiddaman ;; 1654772ec9fSJoshua M. Clulow omnios|helios) 166b3013b70SAndy Fiddaman nlbrand=ipkg 167b3013b70SAndy Fiddaman ;; 168b3013b70SAndy Fiddaman *) 169b3013b70SAndy Fiddaman nlbrand=unknown 170b3013b70SAndy Fiddaman ;; 171b3013b70SAndy Fiddamanesac 172639a4b99SJohn Levon 173ead1f93eSLiane Prazasourcebe="" 174ead1f93eSLiane Prazatargetbe="" 175ead1f93eSLiane Prazauri="" 176ead1f93eSLiane Prazarepodir="" 1774358e1dfSRichard Loweconsolidation="osnet" 178ead1f93eSLiane Prazaverbose=0 179639a4b99SJohn Levonno_zones=0 180639a4b99SJohn Levonzone_warned=0 18167274386SJohn Levonreposonly=0 182*b934d23bSHans Rosenfeldupdate_args="" 183ead1f93eSLiane Praza 1844358e1dfSRichard Lowewhile getopts :c:d:Ors:t:U:u:vZ i ; do 185ead1f93eSLiane Praza case $i in 1864358e1dfSRichard Lowe c) 1874358e1dfSRichard Lowe consolidation=$OPTARG 1884358e1dfSRichard Lowe ;; 189ead1f93eSLiane Praza d) 190ead1f93eSLiane Praza repodir=$OPTARG 191ead1f93eSLiane Praza ;; 1924358e1dfSRichard Lowe O) # no-op, compatibility with recommended use 193ead1f93eSLiane Praza ;; 19467274386SJohn Levon r) 19567274386SJohn Levon reposonly=1 19667274386SJohn Levon ;; 197ead1f93eSLiane Praza s) 198ead1f93eSLiane Praza sourcebe=$OPTARG 199ead1f93eSLiane Praza ;; 200ead1f93eSLiane Praza t) 201ead1f93eSLiane Praza targetbe=$OPTARG 202ead1f93eSLiane Praza ;; 203ead1f93eSLiane Praza U) 204ead1f93eSLiane Praza redistpub=$OPTARG 205ead1f93eSLiane Praza ;; 206ead1f93eSLiane Praza u) 207ead1f93eSLiane Praza uri=$OPTARG 208ead1f93eSLiane Praza ;; 209ead1f93eSLiane Praza v) 210ead1f93eSLiane Praza verbose=1 211ead1f93eSLiane Praza ;; 212639a4b99SJohn Levon Z) 213639a4b99SJohn Levon no_zones=1 214639a4b99SJohn Levon ;; 215ead1f93eSLiane Praza *) 216ead1f93eSLiane Praza usage 217ead1f93eSLiane Praza esac 218ead1f93eSLiane Prazadone 219ead1f93eSLiane Prazashift `expr $OPTIND - 1` 220ead1f93eSLiane Praza 221*b934d23bSHans Rosenfeld# Pass remaining arguments to pkg update. 222*b934d23bSHans Rosenfeldif [ -n "$1" ]; then 223*b934d23bSHans Rosenfeld update_args="$*" 224*b934d23bSHans Rosenfeldfi 22567274386SJohn Levon 22667274386SJohn Levonif [ "$reposonly" -eq 1 ]; then 22767274386SJohn Levon [ -n "$sourcebe" ] && usage 22867274386SJohn Levon [ -n "$targetbe" ] && usage 22967274386SJohn Levon [ "$no_zones" -eq 1 ] && usage 23067274386SJohn Levonelse 23167274386SJohn Levon [ -z "$targetbe" ] && usage 23267274386SJohn Levonfi 233ead1f93eSLiane Praza[ -z "$uri" ] && uri=$ONURI 234ead1f93eSLiane Praza[ -z "$uri" ] && uri=$DEFAULTONURI 235ead1f93eSLiane Praza[ -z "$redistpub" ] && redistpub=$ONPUB 236ead1f93eSLiane Praza[ -z "$redistpub" ] && redistpub=$DEFAULTONPUB 237ead1f93eSLiane Praza 238ead1f93eSLiane Prazaif [ -n "$repodir" ]; then 239ead1f93eSLiane Praza redistdir=$repodir/repo.redist 240ead1f93eSLiane Praza [ -d $redistdir ] || exit_error "$redistdir not found" 2414358e1dfSRichard Lowe typeset cfgfile=$redistdir/cfg_cache 2424358e1dfSRichard Lowe [[ ! -e $cfgfile ]] && cfgfile=$redistdir/pkg5.repository 2434358e1dfSRichard Lowe # need an absolute path 2444358e1dfSRichard Lowe [[ $redistdir == /* ]] || redistdir=$PWD/$redistdir 2459f923083SAlexander Pyhalov redistpub=$(python@PYTHON_VERSION@ <<# EOF 246b3013b70SAndy Fiddaman try: # python3 247b3013b70SAndy Fiddaman import configparser 248b3013b70SAndy Fiddaman p = configparser.ConfigParser() 249b3013b70SAndy Fiddaman except: # python2 250b3013b70SAndy Fiddaman import ConfigParser 251b3013b70SAndy Fiddaman p = ConfigParser.SafeConfigParser() 2524358e1dfSRichard Lowe p.read("$cfgfile") 253ead1f93eSLiane Praza pp = p.get("publisher", "prefix") 254b3013b70SAndy Fiddaman print("{}".format(pp)) 2554358e1dfSRichard Lowe EOF) || exit_error "Cannot determine publisher prefix" 2564358e1dfSRichard Lowe [[ -n "$redistpub" ]] || exit_error "Repository has no publisher prefix" 2574358e1dfSRichard Lowe uri="file://$redistdir" 258ead1f93eSLiane Prazafi 259ead1f93eSLiane Praza 26067274386SJohn Levonif [ "$reposonly" -eq 1 ]; then 26167274386SJohn Levon configure_publishers / 26267274386SJohn Levon exit 0 26367274386SJohn Levonfi 26467274386SJohn Levon 265ead1f93eSLiane Prazacreateargs="" 266ead1f93eSLiane Praza[ -n "$sourcebe" ] && createargs="-e $sourcebe" 267ead1f93eSLiane Praza 268ead1f93eSLiane Praza# ksh seems to have its own mktemp with slightly different semantics 269ead1f93eSLiane Prazatmpdir=`/usr/bin/mktemp -d /tmp/onu.XXXXXX` 270ead1f93eSLiane Praza[ -z "$tmpdir" ] && exit_error "mktemp failed" 271ead1f93eSLiane Praza 272ead1f93eSLiane Prazado_cmd beadm create $createargs $targetbe 273ead1f93eSLiane Prazado_cmd beadm mount $targetbe $tmpdir 274639a4b99SJohn Levonupdate $tmpdir 275ead1f93eSLiane Prazado_cmd beadm activate $targetbe 276ead1f93eSLiane Praza 277639a4b99SJohn Levonif [ "$no_zones" != 1 ]; then 278639a4b99SJohn Levon for zone in `do_cmd zoneadm -R $tmpdir list -cip`; do 279639a4b99SJohn Levon update_zone $zone 280639a4b99SJohn Levon done 281639a4b99SJohn Levonfi 282ead1f93eSLiane Praza 283ead1f93eSLiane Prazaexit 0 284