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$pfi_frontend" = "Xauto" ]; then 67 if [ "X$TTY_INST" = "X" ]; then 68 if $(is_livecd); then 69 TTY=/dev/ttyv1 70 pfi_frontend="cursesvty" 71 else 72 TTY=$(tty) 73 pfi_frontend="curseslog" 74 fi 75 else 76 pfi_frontend="cursesx11" 77 fi 78 fi 79 80 case "X$pfi_frontend" in 81 Xqt) 82 $pfi_backend -r $RENDEZVOUS -t $pfi_dfui_transport 83 RESULT=$? 84 ;; 85 Xcgi) 86 $pfi_backend -r $RENDEZVOUS -t $pfi_dfui_transport 87 RESULT=$? 88 ;; 89 Xcursesvty) 90 ps auwwwxxx > /tmp/ps.txt 91 if grep -q dfuife_curses /tmp/ps.txt; then 92 # Frontend is already running. 93 else 94 ESCDELAY=$pfi_curses_escdelay \ 95 /usr/sbin/dfuife_curses \ 96 -r $RENDEZVOUS \ 97 -t $pfi_dfui_transport \ 98 -b /usr/share/installer/fred.txt \ 99 2>/dev/ttyv0 <$TTY >$TTY & 100 fi 101 rm -f /tmp/ps.txt 102 sleep 1 103 vidcontrol -s 2 </dev/ttyv0 104 $pfi_backend \ 105 -o $SOURCE_DIR \ 106 -r $RENDEZVOUS \ 107 -t $pfi_dfui_transport 108 RESULT=$? 109 sleep 1 110 killall dfuife_curses 111 vidcontrol -s 1 </dev/ttyv0 112 ;; 113 Xcurseslog) 114 ps auwwwxxx > /tmp/ps.txt 115 if grep -q dfuife_curses /tmp/ps.txt; then 116 # Frontend is already running. 117 else 118 ESCDELAY=$pfi_curses_escdelay \ 119 /usr/sbin/dfuife_curses \ 120 -r $RENDEZVOUS \ 121 -t $pfi_dfui_transport \ 122 -b /usr/share/installer/fred.txt \ 123 2>/tmp/dfuife_curses.log <$TTY >$TTY & 124 fi 125 rm -f /tmp/ps.txt 126 sleep 1 127 $pfi_backend \ 128 -o $SOURCE_DIR \ 129 -r $RENDEZVOUS \ 130 -t $pfi_dfui_transport \ 131 >/dev/null 2>&1 132 RESULT=$? 133 sleep 1 134 killall -q dfuife_curses 135 ;; 136 Xcursesx11) 137 ps auwwwxxx > /tmp/ps.txt 138 if grep -q dfuife_curses /tmp/ps.txt; then 139 echo "Frontend is already running" 140 else 141 ESCDELAY=$pfi_curses_escdelay \ 142 /usr/sbin/dfuife_curses \ 143 -r $RENDEZVOUS \ 144 -t $pfi_dfui_transport \ 145 -b /usr/share/installer/fred.txt \ 146 >$TTY_INST <$TTY_INST 2>&1 & 147 fi 148 rm -f /tmp/ps.txt 149 sleep 1 150 $pfi_backend -r $RENDEZVOUS -t $pfi_dfui_transport 151 RESULT=$? 152 sleep 1 153 killall dfuife_curses 154 ;; 155 Xnone) 156 RESULT=0 157 ;; 158 *) 159 echo "Unknown installer frontend '$pfi_frontend'." 160 return 161 ;; 162 esac 163 164 case "$RESULT" in 165 0) 166 ;; 167 5) 168 $pfi_shutdown_command 169 ;; 170 *) 171 ;; 172 esac 173} 174 175is_livecd() 176{ 177 local _ttyv1=$(grep -w "^ttyv1" /etc/ttys) 178 local guest=$(sysctl -n kern.vmm_guest) 179 180 # 181 # ttyv1 isn't configured for the LiveCD/DVD so use 182 # that as a clue for now. Vkernels will be forced 183 # to use 'curseslog' to avoid polluting its only 184 # terminal. 185 # 186 [ "${guest}" = "vkernel" ] && return 1; 187 188 if [ -z "${_ttyv1}" ]; then 189 return 0 # Return success, it's a LiveCD 190 else 191 return 1 192 fi 193} 194 195### MAIN ### 196 197if [ $# -gt 1 ]; then 198 echo "usage: installer [source_directory]" 199 exit 1 200fi 201 202# 203# Source directory for the installation 204# 205SOURCE_DIR=${sdir}/ 206 207ps auwwwxxx > /tmp/ps.txt 208if grep -q dfuibe_installer /tmp/ps.txt; then 209 # Installer is already running. Log in normally. 210 rm -f /tmp/ps.txt 211else 212 rm -f /tmp/ps.txt 213 installer_start 214fi 215 216### END of installer ### 217