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