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