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 \ 13 -o $SOURCE_DIR \ 14 -r $RENDEZVOUS \ 15 -t $TRANSPORT \ 16 >/dev/null 2>&1 17 RESULT=$? 18 case "$RESULT" in 19 0) 20 ;; 21 5) 22 $pfi_shutdown_command 23 ;; 24 *) 25 ;; 26 esac 27} 28 29installer_start() 30{ 31 # Console start sequence: 32 # - Backend (and all other logging) goes to console (ttyv0) 33 # - curses frontend starts on ttyv1. 34 # - Uses vidcontrol -s 2 to switch to ttyv1 once the frontend is up. 35 36 echo -n "Starting installer. " 37 38 if [ -r /etc/defaults/pfi.conf ]; then 39 . /etc/defaults/pfi.conf 40 fi 41 42 if [ -r /etc/pfi.conf ]; then 43 echo "Reading /etc/pfi.conf ..." 44 . /etc/pfi.conf 45 else 46 echo "/etc/pfi.conf not found, starting interactive install." 47 fi 48 49 # We can set up any install variables and such 50 # here by examining pfi_* variables. 51 52 if [ "X$pfi_run" != "X" ]; then 53 pfi_frontend=none 54 $pfi_run 55 fi 56 57 case "X$pfi_dfui_transport" in 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$pfi_frontend" = "Xauto" ]; then 71 if [ "X$TTY_INST" = "X" ]; then 72 if $(is_installmedia); then 73 TTY=/dev/ttyv1 74 pfi_frontend="cursesvty" 75 else 76 TTY=$(tty) 77 pfi_frontend="curseslog" 78 fi 79 else 80 pfi_frontend="cursesx11" 81 fi 82 fi 83 84 case "X$pfi_frontend" in 85 Xqt) 86 $pfi_backend \ 87 -o $SOURCE_DIR \ 88 -r $RENDEZVOUS \ 89 -t $pfi_dfui_transport 90 RESULT=$? 91 ;; 92 Xcgi) 93 $pfi_backend \ 94 -o $SOURCE_DIR \ 95 -r $RENDEZVOUS \ 96 -t $pfi_dfui_transport 97 RESULT=$? 98 ;; 99 Xcursesvty) 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 <$TTY >$TTY & 110 fi 111 rm -f /tmp/ps.txt 112 sleep 1 113 vidcontrol -s 2 </dev/ttyv0 114 $pfi_backend \ 115 -o $SOURCE_DIR \ 116 -r $RENDEZVOUS \ 117 -t $pfi_dfui_transport 118 RESULT=$? 119 sleep 1 120 killall dfuife_curses 121 vidcontrol -s 1 </dev/ttyv0 122 ;; 123 Xcurseslog) 124 ps auwwwxxx > /tmp/ps.txt 125 if grep -q dfuife_curses /tmp/ps.txt; then 126 # Frontend is already running. 127 else 128 ESCDELAY=$pfi_curses_escdelay \ 129 /usr/sbin/dfuife_curses \ 130 -r $RENDEZVOUS \ 131 -t $pfi_dfui_transport \ 132 -b /usr/share/installer/fred.txt \ 133 2>/tmp/dfuife_curses.log <$TTY >$TTY & 134 fi 135 rm -f /tmp/ps.txt 136 sleep 1 137 $pfi_backend \ 138 -o $SOURCE_DIR \ 139 -r $RENDEZVOUS \ 140 -t $pfi_dfui_transport \ 141 >/dev/null 2>&1 142 RESULT=$? 143 sleep 1 144 killall -q dfuife_curses 145 ;; 146 Xcursesx11) 147 ps auwwwxxx > /tmp/ps.txt 148 if grep -q dfuife_curses /tmp/ps.txt; then 149 echo "Frontend is already running" 150 else 151 ESCDELAY=$pfi_curses_escdelay \ 152 /usr/sbin/dfuife_curses \ 153 -r $RENDEZVOUS \ 154 -t $pfi_dfui_transport \ 155 -b /usr/share/installer/fred.txt \ 156 >$TTY_INST <$TTY_INST 2>&1 & 157 fi 158 rm -f /tmp/ps.txt 159 sleep 1 160 $pfi_backend \ 161 -o $SOURCE_DIR \ 162 -r $RENDEZVOUS \ 163 -t $pfi_dfui_transport 164 RESULT=$? 165 sleep 1 166 killall dfuife_curses 167 ;; 168 Xnone) 169 RESULT=0 170 ;; 171 *) 172 echo "Unknown installer frontend '$pfi_frontend'." 173 return 174 ;; 175 esac 176 177 case "$RESULT" in 178 0) 179 ;; 180 5) 181 $pfi_shutdown_command 182 ;; 183 *) 184 ;; 185 esac 186} 187 188is_installmedia() 189{ 190 local _ttyv1=$(grep -w "^ttyv1" /etc/ttys) 191 local guest=$(sysctl -n kern.vmm_guest) 192 193 # 194 # ttyv1 isn't configured for the install media so use 195 # that as a clue for now. Vkernels will be forced 196 # to use 'curseslog' to avoid polluting its only 197 # terminal. 198 # 199 [ "${guest}" = "vkernel" ] && return 1; 200 201 if [ -z "${_ttyv1}" ]; then 202 return 0 # Return success, it's a USB image, ISO etc. 203 else 204 return 1 205 fi 206} 207 208### MAIN ### 209 210if [ $# -gt 1 ]; then 211 echo "usage: installer [source_directory]" 212 exit 1 213elif [ $# = 1 -a ! -d $1 ]; then 214 echo "source_directory does not exist or is no directory" 215 exit 1 216fi 217 218# 219# Source directory for the installation 220# 221if [ $# = 1 ]; then 222 SOURCE_DIR=$1 223else 224 SOURCE_DIR=/ 225fi 226 227ps auwwwxxx > /tmp/ps.txt 228if grep -q dfuibe_installer /tmp/ps.txt; then 229 # Installer is already running. Log in normally. 230 rm -f /tmp/ps.txt 231else 232 rm -f /tmp/ps.txt 233 installer_start 234fi 235 236### END of installer ### 237