1 1.1 mrg #!/bin/sh 2 1.5 mrg # $NetBSD: binstall.sh,v 1.5 2000/08/10 13:27:47 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.1 mrg Usage () { 14 1.1 mrg echo "Usage: $0 [-hvt] [-m<path>] net|ffs directory" 15 1.1 mrg exit 1 16 1.1 mrg } 17 1.1 mrg 18 1.1 mrg Help () { 19 1.1 mrg echo "This script copies the boot programs to one of several" 20 1.1 mrg echo "commonly used places. It takes care of stripping the" 21 1.1 mrg echo "a.out(5) header off the installed boot program on sun4 machines." 22 1.1 mrg echo "When installing an \"ffs\" boot program, this script also runs" 23 1.1 mrg echo "installboot(8) which installs the default proto bootblocks into" 24 1.1 mrg echo "the appropriate filesystem partition." 25 1.1 mrg echo "Options:" 26 1.1 mrg echo " -h - display this message" 27 1.5 mrg echo " -u - install sparc64 (UltraSPARC) boot block" 28 1.4 pk echo " -b<bootprog> - second-stage boot program to install" 29 1.1 mrg echo " -m<path> - Look for boot programs in <path> (default: /usr/mdec)" 30 1.1 mrg echo " -v - verbose mode" 31 1.1 mrg echo " -t - test mode (implies -v)" 32 1.1 mrg exit 0 33 1.1 mrg } 34 1.1 mrg 35 1.3 kim Secure () { 36 1.3 kim echo "This script has to be run when the kernel is in 'insecure' mode." 37 1.3 kim echo "The best way is to run this script in single-user mode." 38 1.3 kim exit 1 39 1.3 kim } 40 1.1 mrg 41 1.1 mrg PATH=/bin:/usr/bin:/sbin:/usr/sbin 42 1.1 mrg MDEC=${MDEC:-/usr/mdec} 43 1.4 pk BOOTPROG=${BOOTPROG:-boot} 44 1.5 mrg OFWBOOT=${OFWBOOTBLK:-ofwboot.sparc64} 45 1.5 mrg if [ "`uname -m`" = sparc64 ]; then 46 1.5 mrg ULTRASPARC=1 47 1.5 mrg else 48 1.5 mrg ULTRASPARC=0 49 1.5 mrg fi 50 1.3 kim 51 1.3 kim if [ "`sysctl -n kern.securelevel`" -gt 0 ]; then 52 1.3 kim Secure 53 1.3 kim fi 54 1.1 mrg 55 1.4 pk set -- `getopt "b:hm:tv" "$@"` 56 1.1 mrg if [ $? -gt 0 ]; then 57 1.1 mrg Usage 58 1.1 mrg fi 59 1.1 mrg 60 1.1 mrg for a in $* 61 1.1 mrg do 62 1.1 mrg case $1 in 63 1.1 mrg -h) Help; shift ;; 64 1.5 mrg -u) ULTRASPARC=1; shift ;; 65 1.5 mrg -b) BOOTPROG=$2; OFWBOOT=$2; shift 2 ;; 66 1.1 mrg -m) MDEC=$2; shift 2 ;; 67 1.5 mrg -o) OFWBOOT=$2; shift 2 ;; 68 1.1 mrg -t) TEST=1; VERBOSE=1; shift ;; 69 1.1 mrg -v) VERBOSE=1; shift ;; 70 1.1 mrg --) shift; break ;; 71 1.1 mrg esac 72 1.1 mrg done 73 1.1 mrg 74 1.1 mrg DOIT=${TEST:+echo "=>"} 75 1.1 mrg 76 1.1 mrg if [ $# != 2 ]; then 77 1.1 mrg Usage 78 1.1 mrg fi 79 1.1 mrg 80 1.1 mrg WHAT=$1 81 1.1 mrg DEST=$2 82 1.1 mrg 83 1.1 mrg if [ ! -d $DEST ]; then 84 1.1 mrg echo "$DEST: not a directory" 85 1.1 mrg Usage 86 1.1 mrg fi 87 1.1 mrg 88 1.5 mrg SKIP=0 89 1.1 mrg 90 1.5 mrg if [ "$ULTRASPARC" = "1" ]; then 91 1.5 mrg targ=ofwboot 92 1.5 mrg netboot=ofwboot.net.sparc64 93 1.5 mrg nettarg=boot.sparc.netbsd 94 1.5 mrg BOOTPROG=$OFWBOOT 95 1.5 mrg else 96 1.5 mrg targ=boot 97 1.5 mrg netboot=boot.net 98 1.5 mrg nettarg=boot.sparc64.netbsd 99 1.5 mrg fi 100 1.1 mrg 101 1.1 mrg case $WHAT in 102 1.1 mrg "ffs") 103 1.1 mrg DEV=`mount | while read line; do 104 1.1 mrg set -- $line 105 1.1 mrg vecho "Inspecting \"$line\"" 106 1.1 mrg if [ "$2" = "on" -a "$3" = "$DEST" ]; then 107 1.1 mrg if [ ! -b $1 ]; then 108 1.1 mrg continue 109 1.1 mrg fi 110 1.1 mrg RAW=\`echo -n "$1" | sed -e 's;/dev/;/dev/r;'\` 111 1.1 mrg if [ ! -c \$RAW ]; then 112 1.1 mrg continue 113 1.1 mrg fi 114 1.1 mrg echo -n $RAW 115 1.1 mrg break; 116 1.1 mrg fi 117 1.1 mrg done` 118 1.1 mrg if [ "$DEV" = "" ]; then 119 1.1 mrg echo "Cannot find \"$DEST\" in mount table" 120 1.1 mrg exit 1 121 1.1 mrg fi 122 1.5 mrg TARGET=$DEST/$targ 123 1.1 mrg vecho Boot device: $DEV 124 1.1 mrg vecho Target: $TARGET 125 1.4 pk $DOIT dd if=${MDEC}/${BOOTPROG} of=$TARGET bs=32 skip=$SKIP 126 1.1 mrg sync; sync; sync 127 1.5 mrg if [ "$ULTRASPARC" = "1" ]; then 128 1.5 mrg vecho ${MDEC}/installboot -u ${VERBOSE:+-v} ${MDEC}/bootblk.sparc64 $DEV 129 1.5 mrg $DOIT ${MDEC}/installboot -u ${VERBOSE:+-v} ${MDEC}/bootblk.sparc64 $DEV 130 1.5 mrg else 131 1.5 mrg vecho ${MDEC}/installboot ${VERBOSE:+-v} $TARGET ${MDEC}/bootxx $DEV 132 1.5 mrg $DOIT ${MDEC}/installboot ${VERBOSE:+-v} $TARGET ${MDEC}/bootxx $DEV 133 1.5 mrg fi 134 1.1 mrg ;; 135 1.1 mrg 136 1.1 mrg "net") 137 1.5 mrg TARGET=$DEST/$nettarg 138 1.1 mrg vecho Target: $TARGET 139 1.5 mrg $DOIT cp -f ${MDEC}/$netboot $TARGET 140 1.1 mrg ;; 141 1.1 mrg 142 1.1 mrg *) 143 1.1 mrg echo "$WHAT: not recognised" 144 1.1 mrg exit 1 145 1.1 mrg ;; 146 1.1 mrg esac 147 1.1 mrg 148 1.1 mrg exit $? 149