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