Bring in Louisa Luciani's GSoC 2008 work, a DragonFly LiveDVD that is
[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.1 2008/09/01 21:20:31 swildner 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 </dev/ttyv0
117                 $pfi_backend -r $RENDEZVOUS -t $pfi_dfui_transport
118                 RESULT=$?
119                 sleep 1
120                 killall dfuife_curses
121                 vidcontrol -s 1 </dev/ttyv0
122                 ;;
123         Xxorg)
124                 ps auwwwxxx > /tmp/ps.txt
125                 if grep -q dfuife_curses /tmp/ps.txt; then
126                         echo "Frontend is already running"
127                 else
128                         ESCDELAY=$pfi_curses_escdelay \
129                         $FRONTEND \
130                         -r $RENDEZVOUS \
131                         -t $pfi_dfui_transport \
132                         -b $FRED \
133                         >$TTY_INST <$TTY_INST 2>&1 &
134                 fi
135                 rm -f /tmp/ps.txt
136                 sleep 1
137                 $pfi_backend -r $RENDEZVOUS -t $pfi_dfui_transport
138                 RESULT=$?
139                 sleep 1
140                 killall dfuife_curses
141                 ;;
142         Xnone)
143                 RESULT=0
144                 ;;
145         *)
146                 echo "Unknown installer frontend '$pfi_frontend'."
147                 return
148                 ;;
149         esac
150
151         case "$RESULT" in
152         0)
153                 ;;
154         5)
155                 $pfi_shutdown_command
156                 ;;
157         *)
158                 ;;
159         esac
160 }
161
162 ### MAIN ###
163
164 if [ "X$1" = "Xserial" ]; then
165         SERIAL=YES
166 fi
167
168 TTY=`w | awk '{ print $2 }' | tail -n1`
169 if [ "tty$TTY" = "ttyd0" ]; then
170         SERIAL=YES
171 fi
172
173 ps auwwwxxx > /tmp/ps.txt
174 if grep -q dfuibe_installer /tmp/ps.txt; then
175         # Installer is already running. Log in normally.
176         rm -f /tmp/ps.txt
177 else
178         rm -f /tmp/ps.txt
179         installer_start
180 fi
181
182 ### END of installer ###