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