devfs - Change make_dev_covering to use dev_ops
[dragonfly.git] / nrelease / gui / usr / local / bin / installer
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 # $DragonFly: src/nrelease/gui/usr/local/bin/installer,v 1.2 2008/10/23 16:45:36 swildner Exp $
6
7 ### SUBS ###
8
9 background_backend()
10 {
11         RENDEZVOUS=$1
12         TRANSPORT=$2
13         $pfi_backend -r $RENDEZVOUS -t $TRANSPORT >/dev/null 2>&1
14         RESULT=$?
15         case "$RESULT" in
16         0)
17                 ;;
18         5)
19                 $pfi_shutdown_command
20                 ;;
21         *)
22                 ;;
23         esac
24 }
25
26 installer_start()
27 {
28         # Console start sequence:
29         # - Backend (and all other logging) goes to console (ttyv0)
30         # - curses frontend starts on ttyv1.
31         # - Uses vidcontrol -s 2 to switch to ttyv1 once the frontend is up.
32
33         echo -n "Starting installer.  "
34
35         if [ -r /etc/defaults/pfi.conf ]; then
36                 . /etc/defaults/pfi.conf
37         fi
38
39         if [ -r /etc/pfi.conf ]; then
40                 echo "Reading /etc/pfi.conf ..."
41                 . /etc/pfi.conf
42         else
43                 echo "/etc/pfi.conf not found, starting interactive install."
44         fi
45
46         # We can set up any install variables and such
47         # here by examining pfi_* variables.
48
49         if [ "X$pfi_run" != "X" ]; then
50                 pfi_frontend=none
51                 $pfi_run
52         fi
53
54         case "X$pfi_dfui_transport" in
55         Xcaps)
56                 sysctl kern.caps_enabled=1
57                 RENDEZVOUS="installer"
58                 ;;
59         Xnpipe)
60                 RENDEZVOUS="installer"
61                 ;;
62         Xtcp)
63                 RENDEZVOUS="9999"
64                 ;;
65         *)
66                 echo "Unsupported DFUI transport '$pfi_dfui_transport'."
67                 return
68                 ;;
69         esac
70
71         if [ "X$SERIAL" = "XYES" ]; then
72                 background_backend $RENDEZVOUS $pfi_dfui_transport &
73                 sleep 1
74                 ESCDELAY=$pfi_curses_escdelay \
75                     /usr/sbin/dfuife_curses \
76                         -r $RENDEZVOUS \
77                         -t $pfi_dfui_transport \
78                         -b /usr/share/installer/fred.txt \
79                     2>/dev/null
80                 pfi_frontend=none
81         fi
82
83         if [ "X$pfi_frontend" = "Xauto" ]; then
84                 if [ "X$DISPLAY" = "X" ]; then
85                         pfi_frontend="curses"
86                 else
87                         pfi_frontend="xorg"
88                 fi
89         fi
90
91         case "X$pfi_frontend" in
92         Xqt)
93                 $pfi_backend -r $RENDEZVOUS -t $pfi_dfui_transport
94                 RESULT=$?
95                 ;;
96         Xcgi)
97                 $pfi_backend -r $RENDEZVOUS -t $pfi_dfui_transport
98                 RESULT=$?
99                 ;;
100         Xcurses)
101                 ps auwwwxxx > /tmp/ps.txt
102                 if grep -q dfuife_curses /tmp/ps.txt; then
103                         # Frontend is already running.
104                 else
105                         ESCDELAY=$pfi_curses_escdelay \
106                             /usr/sbin/dfuife_curses \
107                                 -r $RENDEZVOUS \
108                                 -t $pfi_dfui_transport \
109                                 -b /usr/share/installer/fred.txt \
110                             2>/dev/ttyv0 </dev/ttyv1 >/dev/ttyv1 &
111                 fi
112                 rm -f /tmp/ps.txt
113                 sleep 1
114                 vidcontrol -s 2 </dev/ttyv0
115                 $pfi_backend -r $RENDEZVOUS -t $pfi_dfui_transport
116                 RESULT=$?
117                 sleep 1
118                 killall dfuife_curses
119                 vidcontrol -s 1 </dev/ttyv0
120                 ;;
121         Xxorg)
122                 ps auwwwxxx > /tmp/ps.txt
123                 if grep -q dfuife_curses /tmp/ps.txt; then
124                         echo "Frontend is already running"
125                 else
126                         ESCDELAY=$pfi_curses_escdelay \
127                         /usr/sbin/dfuife_curses \
128                         -r $RENDEZVOUS \
129                         -t $pfi_dfui_transport \
130                         -b /usr/share/installer/fred.txt \
131                         >$TTY_INST <$TTY_INST 2>&1 &
132                 fi
133                 rm -f /tmp/ps.txt
134                 sleep 1
135                 $pfi_backend -r $RENDEZVOUS -t $pfi_dfui_transport
136                 RESULT=$?
137                 sleep 1
138                 killall dfuife_curses
139                 ;;
140         Xnone)
141                 RESULT=0
142                 ;;
143         *)
144                 echo "Unknown installer frontend '$pfi_frontend'."
145                 return
146                 ;;
147         esac
148
149         case "$RESULT" in
150         0)
151                 ;;
152         5)
153                 $pfi_shutdown_command
154                 ;;
155         *)
156                 ;;
157         esac
158 }
159
160 ### MAIN ###
161
162 if [ "X$1" = "Xserial" ]; then
163         SERIAL=YES
164 fi
165
166 TTY=`w | awk '{ print $2 }' | tail -n1`
167 if [ "tty$TTY" = "ttyd0" ]; then
168         SERIAL=YES
169 fi
170
171 ps auwwwxxx > /tmp/ps.txt
172 if grep -q dfuibe_installer /tmp/ps.txt; then
173         # Installer is already running. Log in normally.
174         rm -f /tmp/ps.txt
175 else
176         rm -f /tmp/ps.txt
177         installer_start
178 fi
179
180 ### END of installer ###