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