1 1.1 mrg #!/bin/sh 2 1.10 mrg # $NetBSD: binstall.sh,v 1.10 2002/01/02 04:13:42 mrg 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.10 mrg echo " (default: /usr/mdec/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.1 mrg echo "commonly used places. It takes care of stripping the" 36 1.1 mrg echo "a.out(5) header off the installed boot program on sun4 machines." 37 1.1 mrg echo "When installing an \"ffs\" boot program, this script also runs" 38 1.1 mrg echo "installboot(8) which installs the default proto bootblocks into" 39 1.1 mrg echo "the appropriate filesystem partition." 40 1.10 mrg Options 41 1.1 mrg exit 0 42 1.1 mrg } 43 1.1 mrg 44 1.3 kim Secure () { 45 1.8 jmc echo "This script has to be run when the kernel is in 'insecure' mode," 46 1.8 jmc echo "or when applying bootblocks to a file image (ala vnd)." 47 1.3 kim echo "The best way is to run this script in single-user mode." 48 1.3 kim exit 1 49 1.3 kim } 50 1.1 mrg 51 1.1 mrg PATH=/bin:/usr/bin:/sbin:/usr/sbin 52 1.1 mrg MDEC=${MDEC:-/usr/mdec} 53 1.10 mrg INSTALLBOOT=${INSTALLBOOT:=${MDEC}/installboot} 54 1.4 pk BOOTPROG=${BOOTPROG:-boot} 55 1.6 mrg OFWBOOT=${OFWBOOTBLK:-ofwboot} 56 1.7 mrg if [ "`sysctl -n hw.machine`" = sparc64 ]; then 57 1.5 mrg ULTRASPARC=1 58 1.5 mrg else 59 1.5 mrg ULTRASPARC=0 60 1.5 mrg fi 61 1.3 kim 62 1.10 mrg set -- `getopt "b:hf:i:m:tUuv" "$@"` 63 1.1 mrg if [ $? -gt 0 ]; then 64 1.1 mrg Usage 65 1.1 mrg fi 66 1.1 mrg 67 1.1 mrg for a in $* 68 1.1 mrg do 69 1.1 mrg case $1 in 70 1.1 mrg -h) Help; shift ;; 71 1.5 mrg -u) ULTRASPARC=1; shift ;; 72 1.7 mrg -U) ULTRASPARC=0; shift ;; 73 1.5 mrg -b) BOOTPROG=$2; OFWBOOT=$2; shift 2 ;; 74 1.8 jmc -f) FILENAME=$2; shift 2 ;; 75 1.1 mrg -m) MDEC=$2; shift 2 ;; 76 1.10 mrg -i) INSTALLBOOT=$2; shift 2 ;; 77 1.1 mrg -t) TEST=1; VERBOSE=1; shift ;; 78 1.1 mrg -v) VERBOSE=1; shift ;; 79 1.1 mrg --) shift; break ;; 80 1.1 mrg esac 81 1.1 mrg done 82 1.1 mrg 83 1.8 jmc if [ "`sysctl -n kern.securelevel`" -gt 0 ] && [ ! -f "$FILENAME" ]; then 84 1.8 jmc Secure 85 1.8 jmc fi 86 1.8 jmc 87 1.1 mrg DOIT=${TEST:+echo "=>"} 88 1.1 mrg 89 1.1 mrg if [ $# != 2 ]; then 90 1.1 mrg Usage 91 1.1 mrg fi 92 1.1 mrg 93 1.1 mrg WHAT=$1 94 1.1 mrg DEST=$2 95 1.1 mrg 96 1.1 mrg if [ ! -d $DEST ]; then 97 1.1 mrg echo "$DEST: not a directory" 98 1.1 mrg Usage 99 1.1 mrg fi 100 1.1 mrg 101 1.5 mrg SKIP=0 102 1.1 mrg 103 1.5 mrg if [ "$ULTRASPARC" = "1" ]; then 104 1.5 mrg targ=ofwboot 105 1.6 mrg netboot=ofwboot.net 106 1.5 mrg nettarg=boot.sparc.netbsd 107 1.5 mrg BOOTPROG=$OFWBOOT 108 1.5 mrg else 109 1.5 mrg targ=boot 110 1.5 mrg netboot=boot.net 111 1.5 mrg nettarg=boot.sparc64.netbsd 112 1.5 mrg fi 113 1.1 mrg 114 1.1 mrg case $WHAT in 115 1.1 mrg "ffs") 116 1.1 mrg DEV=`mount | while read line; do 117 1.1 mrg set -- $line 118 1.1 mrg vecho "Inspecting \"$line\"" 119 1.1 mrg if [ "$2" = "on" -a "$3" = "$DEST" ]; then 120 1.1 mrg if [ ! -b $1 ]; then 121 1.1 mrg continue 122 1.1 mrg fi 123 1.1 mrg RAW=\`echo -n "$1" | sed -e 's;/dev/;/dev/r;'\` 124 1.1 mrg if [ ! -c \$RAW ]; then 125 1.1 mrg continue 126 1.1 mrg fi 127 1.1 mrg echo -n $RAW 128 1.1 mrg break; 129 1.1 mrg fi 130 1.1 mrg done` 131 1.8 jmc if [ "$FILENAME" != "" ]; then 132 1.8 jmc DEV=$FILENAME 133 1.8 jmc fi 134 1.1 mrg if [ "$DEV" = "" ]; then 135 1.1 mrg echo "Cannot find \"$DEST\" in mount table" 136 1.1 mrg exit 1 137 1.1 mrg fi 138 1.5 mrg TARGET=$DEST/$targ 139 1.1 mrg vecho Boot device: $DEV 140 1.1 mrg vecho Target: $TARGET 141 1.4 pk $DOIT dd if=${MDEC}/${BOOTPROG} of=$TARGET bs=32 skip=$SKIP 142 1.1 mrg sync; sync; sync 143 1.5 mrg if [ "$ULTRASPARC" = "1" ]; then 144 1.10 mrg vecho ${INSTALLBOOT} -u ${VERBOSE:+-v} ${MDEC}/bootblk $DEV 145 1.10 mrg $DOIT ${INSTALLBOOT} -u ${VERBOSE:+-v} ${MDEC}/bootblk $DEV 146 1.5 mrg else 147 1.10 mrg vecho ${INSTALLBOOT} ${VERBOSE:+-v} $TARGET ${MDEC}/bootxx $DEV 148 1.10 mrg $DOIT ${INSTALLBOOT} ${VERBOSE:+-v} $TARGET ${MDEC}/bootxx $DEV 149 1.5 mrg fi 150 1.1 mrg ;; 151 1.1 mrg 152 1.1 mrg "net") 153 1.5 mrg TARGET=$DEST/$nettarg 154 1.1 mrg vecho Target: $TARGET 155 1.5 mrg $DOIT cp -f ${MDEC}/$netboot $TARGET 156 1.1 mrg ;; 157 1.1 mrg 158 1.1 mrg *) 159 1.1 mrg echo "$WHAT: not recognised" 160 1.1 mrg exit 1 161 1.1 mrg ;; 162 1.1 mrg esac 163 1.1 mrg 164 1.1 mrg exit $? 165