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