1 1.1 mrg #!/bin/sh 2 1.16 kre # $NetBSD: binstall.sh,v 1.16 2018/09/16 14:23:04 kre Exp $ 3 1.1 mrg # 4 1.1 mrg 5 1.1 mrg vecho () { 6 1.1 mrg # echo if VERBOSE on 7 1.1 mrg if [ "$VERBOSE" = "1" ]; then 8 1.1 mrg echo "$@" 1>&2 9 1.1 mrg fi 10 1.1 mrg return 0 11 1.1 mrg } 12 1.1 mrg 13 1.10 mrg Options () { 14 1.10 mrg echo "Options:" 15 1.10 mrg echo " -h - display this message" 16 1.10 mrg echo " -u - install sparc64 (UltraSPARC) boot block" 17 1.10 mrg echo " -U - install sparc boot block" 18 1.10 mrg echo " -b<bootprog> - second-stage boot program to install" 19 1.10 mrg echo " -f<pathname> - path to device/file image for filesystem" 20 1.10 mrg echo " -m<path> - Look for boot programs in <path> (default: /usr/mdec)" 21 1.10 mrg echo " -i<progname> - Use the installboot program at <progname>" 22 1.11 pk echo " (default: /usr/sbin/installboot)" 23 1.10 mrg echo " -v - verbose mode" 24 1.10 mrg echo " -t - test mode (implies -v)" 25 1.10 mrg } 26 1.10 mrg 27 1.1 mrg Usage () { 28 1.10 mrg echo "Usage: $0 [options] <"'"net"|"ffs"'"> <directory>" 29 1.10 mrg Options 30 1.1 mrg exit 1 31 1.1 mrg } 32 1.1 mrg 33 1.1 mrg Help () { 34 1.1 mrg echo "This script copies the boot programs to one of several" 35 1.11 pk echo "commonly used places." 36 1.1 mrg echo "When installing an \"ffs\" boot program, this script also runs" 37 1.1 mrg echo "installboot(8) which installs the default proto bootblocks into" 38 1.11 pk echo "the appropriate filesystem partition or filesystem image." 39 1.10 mrg Options 40 1.1 mrg exit 0 41 1.1 mrg } 42 1.1 mrg 43 1.3 kim Secure () { 44 1.8 jmc echo "This script has to be run when the kernel is in 'insecure' mode," 45 1.8 jmc echo "or when applying bootblocks to a file image (ala vnd)." 46 1.3 kim echo "The best way is to run this script in single-user mode." 47 1.3 kim exit 1 48 1.3 kim } 49 1.1 mrg 50 1.1 mrg PATH=/bin:/usr/bin:/sbin:/usr/sbin 51 1.12 lukem : ${MDEC:=/usr/mdec} 52 1.12 lukem : ${INSTALLBOOT:=/usr/sbin/installboot} 53 1.12 lukem : ${BOOTPROG:=boot} 54 1.12 lukem : ${OFWBOOTBLK:=ofwboot} 55 1.15 he if [ "`sysctl -n machdep.cpu_arch`" = 9 ]; then 56 1.5 mrg ULTRASPARC=1 57 1.5 mrg else 58 1.5 mrg ULTRASPARC=0 59 1.5 mrg fi 60 1.3 kim 61 1.10 mrg set -- `getopt "b:hf:i:m:tUuv" "$@"` 62 1.1 mrg if [ $? -gt 0 ]; then 63 1.1 mrg Usage 64 1.1 mrg fi 65 1.1 mrg 66 1.1 mrg for a in $* 67 1.1 mrg do 68 1.1 mrg case $1 in 69 1.1 mrg -h) Help; shift ;; 70 1.5 mrg -u) ULTRASPARC=1; shift ;; 71 1.7 mrg -U) ULTRASPARC=0; shift ;; 72 1.12 lukem -b) BOOTPROG=$2; OFWBOOTBLK=$2; shift 2 ;; 73 1.11 pk -f) DEV=$2; shift 2 ;; 74 1.1 mrg -m) MDEC=$2; shift 2 ;; 75 1.10 mrg -i) INSTALLBOOT=$2; shift 2 ;; 76 1.1 mrg -t) TEST=1; VERBOSE=1; shift ;; 77 1.1 mrg -v) VERBOSE=1; shift ;; 78 1.1 mrg --) shift; break ;; 79 1.1 mrg esac 80 1.1 mrg done 81 1.1 mrg 82 1.11 pk if [ "`sysctl -n kern.securelevel`" -gt 0 ] && [ ! -f "$DEV" ]; then 83 1.8 jmc Secure 84 1.8 jmc fi 85 1.8 jmc 86 1.1 mrg DOIT=${TEST:+echo "=>"} 87 1.1 mrg 88 1.1 mrg if [ $# != 2 ]; then 89 1.1 mrg Usage 90 1.1 mrg fi 91 1.1 mrg 92 1.1 mrg WHAT=$1 93 1.1 mrg DEST=$2 94 1.1 mrg 95 1.1 mrg if [ ! -d $DEST ]; then 96 1.1 mrg echo "$DEST: not a directory" 97 1.1 mrg Usage 98 1.1 mrg fi 99 1.1 mrg 100 1.5 mrg if [ "$ULTRASPARC" = "1" ]; then 101 1.11 pk machine=sparc64 102 1.5 mrg targ=ofwboot 103 1.15 he stage2="" 104 1.13 mrg netboot=ofwboot 105 1.12 lukem BOOTPROG=$OFWBOOTBLK 106 1.11 pk BOOTXX=${MDEC}/bootblk 107 1.5 mrg else 108 1.11 pk machine=sparc 109 1.5 mrg targ=boot 110 1.15 he stage2=${targ} 111 1.5 mrg netboot=boot.net 112 1.11 pk BOOTXX=${MDEC}/bootxx 113 1.5 mrg fi 114 1.1 mrg 115 1.1 mrg case $WHAT in 116 1.1 mrg "ffs") 117 1.11 pk if [ "$DEV" = "" ]; then 118 1.11 pk # Lookup device mounted on DEST 119 1.11 pk DEV=`mount | while read line; do 120 1.11 pk set -- $line 121 1.11 pk vecho "Inspecting \"$line\"" 122 1.16 kre if [ "$2" = "on" ] && [ "$3" = "$DEST" ]; then 123 1.11 pk if [ ! -b $1 ]; then 124 1.11 pk continue 125 1.11 pk fi 126 1.11 pk RAW=\`echo -n "$1" | sed -e 's;/dev/;/dev/r;'\` 127 1.11 pk if [ ! -c \$RAW ]; then 128 1.11 pk continue 129 1.11 pk fi 130 1.11 pk echo -n $RAW 131 1.11 pk break; 132 1.1 mrg fi 133 1.11 pk done` 134 1.11 pk if [ "$DEV" = "" ]; then 135 1.11 pk echo "Cannot find \"$DEST\" in mount table" 136 1.11 pk exit 1 137 1.1 mrg fi 138 1.8 jmc fi 139 1.11 pk 140 1.1 mrg vecho Boot device: $DEV 141 1.11 pk vecho Primary boot program: $BOOTXX 142 1.11 pk vecho Secondary boot program: $DEST/$targ 143 1.11 pk 144 1.11 pk $DOIT cp -p -f ${MDEC}/${BOOTPROG} $DEST/$targ 145 1.1 mrg sync; sync; sync 146 1.15 he vecho ${INSTALLBOOT} ${VERBOSE:+-v} -m $machine $DEV ${BOOTXX} $stage2 147 1.15 he $DOIT ${INSTALLBOOT} ${VERBOSE:+-v} -m $machine $DEV ${BOOTXX} $stage2 148 1.1 mrg ;; 149 1.1 mrg 150 1.1 mrg "net") 151 1.11 pk vecho Network boot program: $DEST/$boot.${machine}.netbsd 152 1.11 pk $DOIT cp -p -f ${MDEC}/$netboot $DEST/$boot.${machine}.netbsd 153 1.1 mrg ;; 154 1.1 mrg 155 1.1 mrg *) 156 1.1 mrg echo "$WHAT: not recognised" 157 1.1 mrg exit 1 158 1.1 mrg ;; 159 1.1 mrg esac 160 1.1 mrg 161 1.1 mrg exit $? 162