1 1.1 mrg #!/bin/sh 2 1.18 kre # $NetBSD: binstall.sh,v 1.18 2018/09/22 03:29:51 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.18 kre while getopts b:hf:i:m:tUuv a 57 1.1 mrg do 58 1.18 kre case "$a" in 59 1.18 kre h) Help;; 60 1.18 kre u) ULTRASPARC=true;; 61 1.18 kre U) ULTRASPARC=false;; 62 1.18 kre b) BOOTPROG=$OPTARG; OFWBOOTBLK=$OPTARG;; 63 1.18 kre f) DEV=$OPTARG;; 64 1.18 kre m) MDEC=$OPTARG;; 65 1.18 kre i) INSTALLBOOT=$OPTARG;; 66 1.18 kre t) TEST=1; VERBOSE=-v;; 67 1.18 kre v) VERBOSE=-v;; 68 1.18 kre \?) Usage;; 69 1.1 mrg esac 70 1.1 mrg done 71 1.18 kre shift $(( $OPTIND - 1 )) 72 1.1 mrg 73 1.17 kre if [ "$( sysctl -n kern.securelevel )" -gt 0 ] && ! [ -f "$DEV" ]; then 74 1.8 jmc Secure 75 1.8 jmc fi 76 1.8 jmc 77 1.1 mrg DOIT=${TEST:+echo "=>"} 78 1.1 mrg 79 1.1 mrg if [ $# != 2 ]; then 80 1.1 mrg Usage 81 1.1 mrg fi 82 1.1 mrg 83 1.1 mrg WHAT=$1 84 1.1 mrg DEST=$2 85 1.1 mrg 86 1.17 kre if ! [ -d "$DEST" ]; then 87 1.1 mrg echo "$DEST: not a directory" 88 1.1 mrg Usage 89 1.1 mrg fi 90 1.1 mrg 91 1.17 kre if $ULTRASPARC 92 1.17 kre then 93 1.11 pk machine=sparc64 94 1.5 mrg targ=ofwboot 95 1.15 he stage2="" 96 1.13 mrg netboot=ofwboot 97 1.12 lukem BOOTPROG=$OFWBOOTBLK 98 1.11 pk BOOTXX=${MDEC}/bootblk 99 1.5 mrg else 100 1.11 pk machine=sparc 101 1.5 mrg targ=boot 102 1.15 he stage2=${targ} 103 1.5 mrg netboot=boot.net 104 1.11 pk BOOTXX=${MDEC}/bootxx 105 1.5 mrg fi 106 1.1 mrg 107 1.1 mrg case $WHAT in 108 1.1 mrg "ffs") 109 1.17 kre if [ -z "$DEV" ]; then 110 1.11 pk # Lookup device mounted on DEST 111 1.17 kre DEV=$( mount | while read line; do 112 1.11 pk set -- $line 113 1.11 pk vecho "Inspecting \"$line\"" 114 1.16 kre if [ "$2" = "on" ] && [ "$3" = "$DEST" ]; then 115 1.17 kre [ -b "$1" ] || continue 116 1.17 kre case "$1" in 117 1.17 kre (*/*) RAW="${1%/*}/r${1##*/}";; 118 1.17 kre (*) RAW="r$1";; 119 1.17 kre esac 120 1.17 kre [ -c "$RAW" ] || continue 121 1.17 kre echo -n "$RAW" 122 1.11 pk break; 123 1.1 mrg fi 124 1.17 kre done ) 125 1.17 kre if [ -z "$DEV" ]; then 126 1.11 pk echo "Cannot find \"$DEST\" in mount table" 127 1.11 pk exit 1 128 1.1 mrg fi 129 1.8 jmc fi 130 1.11 pk 131 1.17 kre vecho "Boot device: $DEV" 132 1.17 kre vecho "Primary boot program: $BOOTXX" 133 1.17 kre vecho "Secondary boot program: $DEST/$targ" 134 1.11 pk 135 1.17 kre $DOIT cp -p -f "${MDEC}/${BOOTPROG}" "$DEST/$targ" 136 1.1 mrg sync; sync; sync 137 1.17 kre vecho "${INSTALLBOOT} ${VERBOSE} -m $machine $DEV $BOOTXX $stage2" 138 1.17 kre $DOIT "${INSTALLBOOT}" ${VERBOSE} -m "$machine" \ 139 1.17 kre "$DEV" "$BOOTXX" "$stage2" 140 1.1 mrg ;; 141 1.1 mrg 142 1.1 mrg "net") 143 1.17 kre vecho "Network boot program: $DEST/$boot.${machine}.netbsd" 144 1.17 kre $DOIT cp -p -f "${MDEC}/$netboot" "$DEST/$boot.${machine}.netbsd" 145 1.1 mrg ;; 146 1.1 mrg 147 1.1 mrg *) 148 1.1 mrg echo "$WHAT: not recognised" 149 1.1 mrg exit 1 150 1.1 mrg ;; 151 1.1 mrg esac 152 1.1 mrg 153 1.1 mrg exit $? 154