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