1#!/bin/sh 2 3# installer - start installer frontend and backend as per pfi config. 4# $Id: installer,v 1.20 2005/04/13 03:32:16 cpressey Exp $ 5 6### SUBS ### 7 8background_backend() 9{ 10 RENDEZVOUS=$1 11 TRANSPORT=$2 12 $pfi_backend -r $RENDEZVOUS -t $TRANSPORT >/dev/null 2>&1 13 RESULT=$? 14 case "$RESULT" in 15 0) 16 ;; 17 5) 18 $pfi_shutdown_command 19 ;; 20 *) 21 ;; 22 esac 23} 24 25installer_start() 26{ 27 # Console start sequence: 28 # - Backend (and all other logging) goes to console (ttyv0) 29 # - curses frontend starts on ttyv1. 30 # - Uses vidcontrol -s 2 to switch to ttyv1 once the frontend is up. 31 32 echo -n "Starting installer. " 33 34 if [ -r /etc/defaults/pfi.conf ]; then 35 . /etc/defaults/pfi.conf 36 fi 37 38 if [ -r /etc/pfi.conf ]; then 39 echo "Reading /etc/pfi.conf ..." 40 . /etc/pfi.conf 41 else 42 echo "/etc/pfi.conf not found, starting interactive install." 43 fi 44 45 # We can set up any install variables and such 46 # here by examining pfi_* variables. 47 48 if [ "X$pfi_run" != "X" ]; then 49 pfi_frontend=none 50 $pfi_run 51 fi 52 53 case "X$pfi_dfui_transport" in 54 Xcaps) 55 sysctl kern.caps_enabled=1 56 RENDEZVOUS="installer" 57 ;; 58 Xnpipe) 59 RENDEZVOUS="installer" 60 ;; 61 Xtcp) 62 RENDEZVOUS="9999" 63 ;; 64 *) 65 echo "Unsupported DFUI transport '$pfi_dfui_transport'." 66 return 67 ;; 68 esac 69 70 if [ "X$SERIAL" = "XYES" ]; then 71 background_backend $RENDEZVOUS $pfi_dfui_transport & 72 sleep 1 73 ESCDELAY=$pfi_curses_escdelay \ 74 /usr/sbin/dfuife_curses \ 75 -r $RENDEZVOUS \ 76 -t $pfi_dfui_transport \ 77 -b /usr/share/installer/fred.txt \ 78 2>/dev/null 79 pfi_frontend=none 80 fi 81 82 if [ "X$pfi_frontend" = "Xauto" ]; then 83 if [ "X$DISPLAY" = "X" ]; then 84 pfi_frontend="curses" 85 else 86 pfi_frontend="xorg" 87 fi 88 fi 89 90 case "X$pfi_frontend" in 91 Xqt) 92 $pfi_backend -r $RENDEZVOUS -t $pfi_dfui_transport 93 RESULT=$? 94 ;; 95 Xcgi) 96 $pfi_backend -r $RENDEZVOUS -t $pfi_dfui_transport 97 RESULT=$? 98 ;; 99 Xcurses) 100 ps auwwwxxx > /tmp/ps.txt 101 if grep -q dfuife_curses /tmp/ps.txt; then 102 # Frontend is already running. 103 else 104 ESCDELAY=$pfi_curses_escdelay \ 105 /usr/sbin/dfuife_curses \ 106 -r $RENDEZVOUS \ 107 -t $pfi_dfui_transport \ 108 -b /usr/share/installer/fred.txt \ 109 2>/dev/ttyv0 </dev/ttyv1 >/dev/ttyv1 & 110 fi 111 rm -f /tmp/ps.txt 112 sleep 1 113 vidcontrol -s 2 </dev/ttyv0 114 $pfi_backend -r $RENDEZVOUS -t $pfi_dfui_transport 115 RESULT=$? 116 sleep 1 117 killall dfuife_curses 118 vidcontrol -s 1 </dev/ttyv0 119 ;; 120 Xxorg) 121 ps auwwwxxx > /tmp/ps.txt 122 if grep -q dfuife_curses /tmp/ps.txt; then 123 echo "Frontend is already running" 124 else 125 ESCDELAY=$pfi_curses_escdelay \ 126 /usr/sbin/dfuife_curses \ 127 -r $RENDEZVOUS \ 128 -t $pfi_dfui_transport \ 129 -b /usr/share/installer/fred.txt \ 130 >$TTY_INST <$TTY_INST 2>&1 & 131 fi 132 rm -f /tmp/ps.txt 133 sleep 1 134 $pfi_backend -r $RENDEZVOUS -t $pfi_dfui_transport 135 RESULT=$? 136 sleep 1 137 killall dfuife_curses 138 ;; 139 Xnone) 140 RESULT=0 141 ;; 142 *) 143 echo "Unknown installer frontend '$pfi_frontend'." 144 return 145 ;; 146 esac 147 148 case "$RESULT" in 149 0) 150 ;; 151 5) 152 $pfi_shutdown_command 153 ;; 154 *) 155 ;; 156 esac 157} 158 159### MAIN ### 160 161if [ "X$1" = "Xserial" ]; then 162 SERIAL=YES 163fi 164 165TTY=`w | awk '{ print $2 }' | tail -n1` 166if [ "tty$TTY" = "ttyd0" ]; then 167 SERIAL=YES 168fi 169 170ps auwwwxxx > /tmp/ps.txt 171if grep -q dfuibe_installer /tmp/ps.txt; then 172 # Installer is already running. Log in normally. 173 rm -f /tmp/ps.txt 174else 175 rm -f /tmp/ps.txt 176 installer_start 177fi 178 179### END of installer ### 180