Merge branch 'vendor/FLEX'
[dragonfly.git] / usr.sbin / installer / installer / installer.sh
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
8 background_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
25 installer_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
157 if [ "X$1" = "Xserial" ]; then
158         SERIAL=YES
159 fi
160
161 TTY=`w | awk '{ print $2 }' | tail -n1`
162 if [ "tty$TTY" = "ttyd0" ]; then
163         SERIAL=YES
164 fi
165
166 ps auwwwxxx > /tmp/ps.txt
167 if grep -q dfuibe_installer /tmp/ps.txt; then
168         # Installer is already running. Log in normally.
169         rm -f /tmp/ps.txt
170 else
171         rm -f /tmp/ps.txt
172         installer_start
173 fi
174
175 ### END of installer ###