Merge commit 'origin/vendor/PAM_PASSWDQC'
[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         case "X$pfi_frontend" in
84         Xqt)
85                 $pfi_backend -r $RENDEZVOUS -t $pfi_dfui_transport
86                 RESULT=$?
87                 ;;
88         Xcgi)
89                 $pfi_backend -r $RENDEZVOUS -t $pfi_dfui_transport
90                 RESULT=$?
91                 ;;
92         Xcurses)
93                 ps auwwwxxx > /tmp/ps.txt
94                 if grep -q dfuife_curses /tmp/ps.txt; then
95                         # Frontend is already running.
96                 else
97                         ESCDELAY=$pfi_curses_escdelay \
98                             /usr/sbin/dfuife_curses \
99                                 -r $RENDEZVOUS \
100                                 -t $pfi_dfui_transport \
101                                 -b /usr/share/installer/fred.txt \
102                             2>/dev/ttyv0 </dev/ttyv1 >/dev/ttyv1 &
103                 fi
104                 rm -f /tmp/ps.txt
105                 sleep 1
106                 vidcontrol -s 2 </dev/ttyv0
107                 $pfi_backend -r $RENDEZVOUS -t $pfi_dfui_transport
108                 RESULT=$?
109                 sleep 1
110                 killall dfuife_curses
111                 vidcontrol -s 1 </dev/ttyv0
112                 ;;
113         Xxorg)
114                 ps auwwwxxx > /tmp/ps.txt
115                 if grep -q dfuife_curses /tmp/ps.txt; then
116                         echo "Frontend is already running"
117                 else
118                         ESCDELAY=$pfi_curses_escdelay \
119                         /usr/sbin/dfuife_curses \
120                         -r $RENDEZVOUS \
121                         -t $pfi_dfui_transport \
122                         -b /usr/share/installer/fred.txt \
123                         >$TTY_INST <$TTY_INST 2>&1 &
124                 fi
125                 rm -f /tmp/ps.txt
126                 sleep 1
127                 $pfi_backend -r $RENDEZVOUS -t $pfi_dfui_transport
128                 RESULT=$?
129                 sleep 1
130                 killall dfuife_curses
131                 ;;
132         Xnone)
133                 RESULT=0
134                 ;;
135         *)
136                 echo "Unknown installer frontend '$pfi_frontend'."
137                 return
138                 ;;
139         esac
140
141         case "$RESULT" in
142         0)
143                 ;;
144         5)
145                 $pfi_shutdown_command
146                 ;;
147         *)
148                 ;;
149         esac
150 }
151
152 ### MAIN ###
153
154 if [ "X$1" = "Xserial" ]; then
155         SERIAL=YES
156 fi
157
158 TTY=`w | awk '{ print $2 }' | tail -n1`
159 if [ "tty$TTY" = "ttyd0" ]; then
160         SERIAL=YES
161 fi
162
163 ps auwwwxxx > /tmp/ps.txt
164 if grep -q dfuibe_installer /tmp/ps.txt; then
165         # Installer is already running. Log in normally.
166         rm -f /tmp/ps.txt
167 else
168         rm -f /tmp/ps.txt
169         installer_start
170 fi
171
172 ### END of installer ###