- fix hostname display for ssh install (#230617)
[opensuse:installation-images.git] / data / root / etc / inst_setup
1 #! /bin/sh
2 #
3
4 #                              ***  NOTE  ***
5 #
6 # linuxrc now takes care of integrating the instsys. No need to fiddle with
7 # symlinks and such here.
8 #
9 # linuxrc-based tools are in /lbin.
10 #
11 # linuxrc passes the root directory of the freshly mounted instsys in
12 # the environment variable INSTSYS.
13 #
14
15 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11/bin:/lbin
16
17 # tmpfs has mode 1777, sshd doesnt like that
18 chmod 755 /
19
20 # see bug 46535
21 [ -e /proc/sys/vm/local-oom-kill ] && echo 1 > /proc/sys/vm/local-oom-kill
22
23 if [ -f /.timestamp ] ; then
24   read build_time < /.timestamp
25   now_time=`TZ= LANG= LC_ALL= date +%Y%m%d`
26   if [ "$now_time" -lt "$build_time" ] ; then
27        echo
28        echo "your system time is not correct:"
29        TZ= date
30        echo "setting system time to:"
31        TZ= LANG= LC_ALL= date ${build_time#????*}1234${build_time%*????}.56
32        echo
33        /sbin/hwclock --systohc -u &
34        sleep 3
35   fi
36 fi
37
38 if [ -d /dev/pts ] ; then
39   grep -q devpts /proc/mounts || mount -t devpts devpts /dev/pts
40 fi
41
42 # no old hotplug stuff
43 echo  > /proc/sys/kernel/hotplug
44
45 # FIXME fix udev to not delete valid device nodes
46 # /proc/self/fd/N will fail
47 exec < /dev/console > /dev/console 2>&1 3>&1
48
49 yast="$1"
50 shift
51 echo $yast > /tmp/linuxrc_installer_name
52 export YAST2_SSH=false
53 unset SSH_FAILED
54 stty sane
55
56 # hostname may come from cmdline
57 if test -z "$hostname" ; then
58   hostname=`hostname`
59 fi
60 if [ -s /etc/install.inf ]; then
61 #  # fix fonts for japanese
62 #  lang=`awk '{ if(/^Locale:/) print $2 }' /etc/install.inf`
63 #  if [ "$lang" = ja_JP ]; then
64 #    rm -f /usr/X11R6/lib/X11/fonts/truetype/FZSongTi.ttf
65 #    rm -f /usr/X11R6/lib/X11/fonts/truetype/gulim.ttf
66 #  fi
67   if [ "$hostname" = "(none)" ] ; then
68         # hostname and domainname may come from cmdline
69         if test -z "$hostname" ; then
70                 hostname=$(awk ' /^Hostname:/ { print $2 }' < /etc/install.inf)
71         fi
72         if test -z "$hostname" ; then
73                 hostname=$(awk ' /^IP:/ { print $2 }' < /etc/install.inf)
74         fi
75         if test -z "$hostname" ; then
76                 hostname=linux
77         fi
78
79         if test -z "$domain"  ; then
80                 domain=$(awk ' /^Domain:/ { print $2 }' < /etc/install.inf)
81         fi
82         if test -z "$domain"  ; then
83                 domain=local
84         fi
85         hostname $hostname
86         domainname $domain
87   fi
88 fi
89 #
90 # a few files should be restored when installation has completed if we
91 # return to linuxrc.
92 FILES_TO_RESTORE="/etc/ld.so.cache"
93 for file in $FILES_TO_RESTORE ; do
94   test -e $file && mv $file $file.initrd
95 done
96 #
97
98 ldconfig
99
100 # start dbus & hal
101 if [ -x /usr/bin/dbus-daemon -a -x /usr/sbin/hald ] ; then
102   rm -f /var/run/dbus/pid /var/run/hal/haldaemon.pid
103   echo -n "starting hald..."
104   if /usr/bin/dbus-daemon --system && /usr/sbin/hald ; then
105     echo " ok"
106   else
107     echo " failed"
108   fi
109 fi
110
111 # driver update: rebuild yast update tree
112 [ -L /y2update ] && rm -f /y2update
113 [ -d /update/y2update ] && mv /update/y2update /update/y2update.bak
114 for i in /update/[0-9]*/y2update ; do
115   [ -d "$i" ] && cp -a "$i" /update
116 done
117 if [ -d /update/y2update ] ; then
118   rm -rf /update/y2update.bak
119 else
120   [ -d /update/y2update.bak ] && mv /update/y2update.bak /update/y2update
121 fi
122
123 # driver update: add files to inst-sys
124 for i in /update/[0-9]*/inst-sys ; do
125   [ -d "$i" ] && adddir "$i" /
126 done
127
128 # driver update: run update.pre scripts
129 for i in /update/[0-9]*/install/update.pre ; do
130   [ -x "$i" ] && "$i"
131 done
132
133 # unpack license files for yast
134 if [ -f /license.zip ] ; then
135   mkdir -p /var/lib/YaST2/license
136   ( [ -d /var/lib/YaST2/license ] && cd /var/lib/YaST2/license && unzip -qqo /license.zip )
137 fi
138
139 # start syslog
140 if [ -x /sbin/syslogd ] ; then
141   checkproc /sbin/syslogd || {
142     echo -n "starting syslogd (logging to /dev/tty4)..."
143     sh -c '/sbin/syslogd >&1' 2>/dev/null
144     echo " ok"
145   }
146 fi
147
148 # start klog
149 if [ -x /sbin/klogd ] ; then
150   checkproc /sbin/klogd || {
151     echo -n "starting klogd..."
152     if /sbin/klogd -c 1 ; then
153       echo " ok"
154     else
155       echo " failed"
156     fi
157   }
158 fi
159
160 # Update module config.
161 #
162 # Note: modules are all from initrd, but new ones might have come in via
163 # driver updates.
164 #
165 depmod -a 2>/dev/null
166
167 test -x /etc/init.d/ia32el && /etc/init.d/ia32el start
168
169 # boot with usessh=1 or use linuxrc to enable ssh 
170 # vnc=1 will override the install mode
171 if grep -q "^UseSSH:.*1" /etc/install.inf ; then
172   test -x /sbin/inst_setup_ssh && . /sbin/inst_setup_ssh
173 fi
174
175 # for yast debugging.
176 if grep -iwq y2debug < /proc/cmdline ; then
177   export Y2DEBUG=1
178   export Y2MAXLOGSIZE=50000
179   export Y2MAXLOGNUM=5
180   test -d $INSTSYS/root/.yast2 && cp -a $INSTSYS/root/.yast2 /root
181 fi
182
183 export XCURSOR_THEME=crystalwhite
184
185 grep -qwi start_shell /proc/cmdline && START_SHELL=1
186 grep -qi "^StartShell:.*1" /etc/install.inf && START_SHELL=1
187 # leave a core file if yast crashes
188 ulimit -c unlimited
189
190 # start shell, useful on iSeries or via serial console
191 function start_shell() {
192   echo 
193   echo "ATTENTION: Starting shell... (use 'exit' to proceed)"
194   bash --init-file /root/.bash_login
195 }
196 [ "$START_SHELL" ] && start_shell
197
198 # anounce VNC via slpd
199 if grep -qi "^VNC:.*1" /etc/install.inf ; then
200   echo starting slpd to announce VNC...
201   test -x /usr/sbin/slpd  &&  /usr/sbin/slpd ; ec=$?
202   if test "$ec" = "0" ; then
203     (
204     sleep 3
205     /usr/bin/slptool register "service:YaST.installation.suse:vnc://${hostname}:5901"
206     ) &> /tmp/slptool_register.txt &
207   else
208     echo "slpd returned with exit code $ec, VNC will not be announced"
209   fi
210   # vnc=1 usessh=1 should start sshd, but the result is a vnc installation
211   YAST2_SSH=false
212 fi
213
214 ec=
215 if [ "$YAST2_SSH" = "true" ] ; then
216 cat <<EOF
217
218       ***  login using 'ssh -X root@${hostname}'  ***
219       ***  run '$yast' to start the installation  ***
220
221 EOF
222 while true ; do
223 #echo -n .
224 sleep 3
225 # this file is created from YaST2.firstboot after installation
226 test ! -f /tmp/YaST2_ssh_installation_finished && continue
227 # you can touch this file to keep the ssh shell
228 # useful for debugging the installer
229 test -f /tmp/YaST2_keep_sshd_running && continue
230 break
231 done
232
233 ec=$(cat /tmp/YaST2_ssh_installation_finished)
234 rm -f /tmp/YaST2_ssh_installation_finished
235 elif [ "$yast" = yast ] ; then
236 # now, run yast
237 echo "starting yast..."
238   /sbin/yast "$@" ; ec=$?
239 elif [ "$yast" ] ; then
240 # now, run yast
241 echo "starting $yast..."
242   "$yast" "$@" ; ec=$?
243 fi
244
245 # start shell, useful on iSeries or via serial console
246 [ "$START_SHELL" ] && start_shell
247
248 # stop various daemons
249 killall hald >/dev/null 2>&1
250 killall dbus-daemon >/dev/null 2>&1
251 killall slpd >/dev/null 2>&1
252 killall Xvnc >/dev/null 2>&1
253 killall sshd >/dev/null 2>&1
254
255 umount devpts 2>/dev/null
256
257 for file in $FILES_TO_RESTORE ; do
258   test -e $file.initrd && mv $file.initrd $file
259 done
260
261 rm -f /etc/modules.conf
262
263 # clean up after yast
264 sed -n '1{h;n};x;H;${x;p}' /proc/mounts | awk '{ if($2 ~ /^\/var/) system("umount " $2) }'
265
266 exit $ec
267