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