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