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