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 Xnpipe) 55 RENDEZVOUS="installer" 56 ;; 57 Xtcp) 58 RENDEZVOUS="9999" 59 ;; 60 *) 61 echo "Unsupported DFUI transport '$pfi_dfui_transport'." 62 return 63 ;; 64 esac 65 66 if [ "X$SERIAL" = "XYES" ]; then 67 background_backend $RENDEZVOUS $pfi_dfui_transport & 68 sleep 1 69 ESCDELAY=$pfi_curses_escdelay \ 70 /usr/sbin/dfuife_curses \ 71 -r $RENDEZVOUS \ 72 -t $pfi_dfui_transport \ 73 -b /usr/share/installer/fred.txt \ 74 2>/dev/null 75 pfi_frontend=none 76 fi 77 78 if [ "X$pfi_frontend" = "Xauto" ]; then 79 if [ "X$DISPLAY" = "X" ]; then 80 pfi_frontend="curses" 81 else 82 pfi_frontend="xorg" 83 fi 84 fi 85 86 case "X$pfi_frontend" in 87 Xqt) 88 $pfi_backend -r $RENDEZVOUS -t $pfi_dfui_transport 89 RESULT=$? 90 ;; 91 Xcgi) 92 $pfi_backend -r $RENDEZVOUS -t $pfi_dfui_transport 93 RESULT=$? 94 ;; 95 Xcurses) 96 ps auwwwxxx > /tmp/ps.txt 97 if grep -q dfuife_curses /tmp/ps.txt; then 98 # Frontend is already running. 99 else 100 ESCDELAY=$pfi_curses_escdelay \ 101 /usr/sbin/dfuife_curses \ 102 -r $RENDEZVOUS \ 103 -t $pfi_dfui_transport \ 104 -b /usr/share/installer/fred.txt \ 105 2>/dev/ttyv0 </dev/ttyv1 >/dev/ttyv1 & 106 fi 107 rm -f /tmp/ps.txt 108 sleep 1 109 vidcontrol -s 2 </dev/ttyv0 110 $pfi_backend -r $RENDEZVOUS -t $pfi_dfui_transport 111 RESULT=$? 112 sleep 1 113 killall dfuife_curses 114 vidcontrol -s 1 </dev/ttyv0 115 ;; 116 Xxorg) 117 ps auwwwxxx > /tmp/ps.txt 118 if grep -q dfuife_curses /tmp/ps.txt; then 119 echo "Frontend is already running" 120 else 121 ESCDELAY=$pfi_curses_escdelay \ 122 /usr/sbin/dfuife_curses \ 123 -r $RENDEZVOUS \ 124 -t $pfi_dfui_transport \ 125 -b /usr/share/installer/fred.txt \ 126 >$TTY_INST <$TTY_INST 2>&1 & 127 fi 128 rm -f /tmp/ps.txt 129 sleep 1 130 $pfi_backend -r $RENDEZVOUS -t $pfi_dfui_transport 131 RESULT=$? 132 sleep 1 133 killall dfuife_curses 134 ;; 135 Xnone) 136 RESULT=0 137 ;; 138 *) 139 echo "Unknown installer frontend '$pfi_frontend'." 140 return 141 ;; 142 esac 143 144 case "$RESULT" in 145 0) 146 ;; 147 5) 148 $pfi_shutdown_command 149 ;; 150 *) 151 ;; 152 esac 153} 154 155### MAIN ### 156 157if [ "X$1" = "Xserial" ]; then 158 SERIAL=YES 159fi 160 161TTY=`w | awk '{ print $2 }' | tail -n1` 162if [ "tty$TTY" = "ttyd0" ]; then 163 SERIAL=YES 164fi 165 166ps auwwwxxx > /tmp/ps.txt 167if grep -q dfuibe_installer /tmp/ps.txt; then 168 # Installer is already running. Log in normally. 169 rm -f /tmp/ps.txt 170else 171 rm -f /tmp/ps.txt 172 installer_start 173fi 174 175### END of installer ### 176