home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / root / sbin / inst_setup < prev    next >
Text File  |  2006-11-29  |  7KB  |  272 lines

  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. if [ -s /etc/install.inf ]; then
  57. #  # fix fonts for japanese
  58. #  lang=`awk '{ if(/^Locale:/) print $2 }' /etc/install.inf`
  59. #  if [ "$lang" = ja_JP ]; then
  60. #    rm -f /usr/X11R6/lib/X11/fonts/truetype/FZSongTi.ttf
  61. #    rm -f /usr/X11R6/lib/X11/fonts/truetype/gulim.ttf
  62. #  fi
  63.   if [ "$(hostname)" = "(none)" ] ; then
  64.     # hostname and domainname may come from cmdline
  65.     if test -z "$hostname" ; then
  66.         hostname=$(awk ' /^Hostname:/ { print $2 }' < /etc/install.inf)
  67.     fi
  68.     if test -z "$hostname" ; then
  69.         hostname=$(awk ' /^IP:/ { print $2 }' < /etc/install.inf)
  70.     fi
  71.     if test -z "$hostname" ; then
  72.         hostname=linux
  73.     fi
  74.  
  75.     if test -z "$domain"  ; then
  76.         domain=$(awk ' /^Domain:/ { print $2 }' < /etc/install.inf)
  77.     fi
  78.     if test -z "$domain"  ; then
  79.         domain=local
  80.     fi
  81.     hostname $hostname
  82.     domainname $domain
  83.   fi
  84. #
  85. else
  86.  # hostname may come from cmdline
  87.  if test -z "$hostname" ; then
  88.   hostname=`hostname`
  89.  fi
  90. fi
  91. #
  92. # a few files should be restored when installation has completed if we
  93. # return to linuxrc.
  94. FILES_TO_RESTORE="/etc/ld.so.cache"
  95. for file in $FILES_TO_RESTORE ; do
  96.   test -e $file && mv $file $file.initrd
  97. done
  98. #
  99.  
  100. ldconfig
  101.  
  102. # start dbus & hal
  103. if [ -x /usr/bin/dbus-daemon -a -x /usr/sbin/hald ] ; then
  104.   rm -f /var/run/dbus/pid /var/run/hal/haldaemon.pid
  105.   echo -n "starting hald..."
  106.   if /usr/bin/dbus-daemon --system && /usr/sbin/hald ; then
  107.     echo " ok"
  108.   else
  109.     echo " failed"
  110.   fi
  111. fi
  112.  
  113. # driver update: rebuild yast update tree
  114. [ -L /y2update ] && rm -f /y2update
  115. [ -d /update/y2update ] && mv /update/y2update /update/y2update.bak
  116. for i in /update/[0-9]*/y2update ; do
  117.   [ -d "$i" ] && cp -a "$i" /update
  118. done
  119. if [ -d /update/y2update ] ; then
  120.   rm -rf /update/y2update.bak
  121. else
  122.   [ -d /update/y2update.bak ] && mv /update/y2update.bak /update/y2update
  123. fi
  124.  
  125. # driver update: add files to inst-sys
  126. for i in /update/[0-9]*/inst-sys ; do
  127.   [ -d "$i" ] && adddir "$i" /
  128. done
  129.  
  130. # driver update: run update.pre scripts
  131. for i in /update/[0-9]*/install/update.pre ; do
  132.   [ -x "$i" ] && "$i"
  133. done
  134.  
  135. # unpack license files for yast
  136. if [ -f /license.zip ] ; then
  137.   mkdir -p /var/lib/YaST2/license
  138.   ( [ -d /var/lib/YaST2/license ] && cd /var/lib/YaST2/license && unzip -qqo /license.zip )
  139. fi
  140.  
  141. # start syslog
  142. if [ -x /sbin/syslogd ] ; then
  143.   checkproc /sbin/syslogd || {
  144.     echo -n "starting syslogd (logging to /dev/tty4)..."
  145.     sh -c '/sbin/syslogd >&1' 2>/dev/null
  146.     echo " ok"
  147.   }
  148. fi
  149.  
  150. # start klog
  151. if [ -x /sbin/klogd ] ; then
  152.   checkproc /sbin/klogd || {
  153.     echo -n "starting klogd..."
  154.     if /sbin/klogd -c 1 ; then
  155.       echo " ok"
  156.     else
  157.       echo " failed"
  158.     fi
  159.   }
  160. fi
  161.  
  162. # Update module config.
  163. #
  164. # Note: modules are all from initrd, but new ones might have come in via
  165. # driver updates.
  166. #
  167. depmod -a 2>/dev/null
  168.  
  169. test -x /etc/init.d/ia32el && /etc/init.d/ia32el start
  170.  
  171. # boot with usessh=1 or use linuxrc to enable ssh 
  172. # vnc=1 will override the install mode
  173. if grep -q "^UseSSH:.*1" /etc/install.inf ; then
  174.   test -x /sbin/inst_setup_ssh && . /sbin/inst_setup_ssh
  175. fi
  176.  
  177. # for yast debugging.
  178. if grep -iwq y2debug < /proc/cmdline ; then
  179.   export Y2DEBUG=1
  180.   export Y2MAXLOGSIZE=50000
  181.   export Y2MAXLOGNUM=5
  182.   test -d $INSTSYS/root/.yast2 && cp -a $INSTSYS/root/.yast2 /root
  183. fi
  184.  
  185. export XCURSOR_THEME=crystalwhite
  186. export YAST2_STORAGE_NO_EVMS=10.2
  187. grep -qwi give_me_evms_access /proc/cmdline && unset YAST2_STORAGE_NO_EVMS
  188.  
  189. grep -qwi start_shell /proc/cmdline && START_SHELL=1
  190. grep -qi "^StartShell:.*1" /etc/install.inf && START_SHELL=1
  191. # leave a core file if yast crashes
  192. ulimit -c unlimited
  193.  
  194. # start shell, useful on iSeries or via serial console
  195. function start_shell() {
  196.   echo 
  197.   echo "ATTENTION: Starting shell... (use 'exit' to proceed)"
  198.   bash --init-file /root/.bash_login
  199. }
  200. [ "$START_SHELL" ] && start_shell
  201.  
  202. # anounce VNC via slpd
  203. if grep -qi "^VNC:.*1" /etc/install.inf ; then
  204.   echo starting slpd to announce VNC...
  205.   test -x /usr/sbin/slpd  &&  /usr/sbin/slpd ; ec=$?
  206.   if test "$ec" = "0" ; then
  207.     (
  208.     sleep 3
  209.     /usr/bin/slptool register "service:YaST.installation.suse:vnc://${hostname}:5901"
  210.     ) &> /tmp/slptool_register.txt &
  211.   else
  212.     echo "slpd returned with exit code $ec, VNC will not be announced"
  213.   fi
  214.   # vnc=1 usessh=1 should start sshd, but the result is a vnc installation
  215.   YAST2_SSH=false
  216. fi
  217.  
  218. ec=
  219. if [ "$YAST2_SSH" = "true" ] ; then
  220. cat <<EOF
  221.  
  222.       ***  login using 'ssh -X root@${hostname}'  ***
  223.       ***  run '$yast' to start the installation  ***
  224.  
  225. EOF
  226. while true ; do
  227. #echo -n .
  228. sleep 3
  229. # this file is created from YaST2.firstboot after installation
  230. test ! -f /tmp/YaST2_ssh_installation_finished && continue
  231. # you can touch this file to keep the ssh shell
  232. # useful for debugging the installer
  233. test -f /tmp/YaST2_keep_sshd_running && continue
  234. break
  235. done
  236.  
  237. ec=$(cat /tmp/YaST2_ssh_installation_finished)
  238. rm -f /tmp/YaST2_ssh_installation_finished
  239. elif [ "$yast" = yast ] ; then
  240. # now, run yast
  241. echo "starting yast..."
  242.   /sbin/yast "$@" ; ec=$?
  243. elif [ "$yast" ] ; then
  244. # now, run yast
  245. echo "starting $yast..."
  246.   "$yast" "$@" ; ec=$?
  247. fi
  248.  
  249. # start shell, useful on iSeries or via serial console
  250. [ "$START_SHELL" ] && start_shell
  251.  
  252. # stop various daemons
  253. killall hald >/dev/null 2>&1
  254. killall dbus-daemon >/dev/null 2>&1
  255. killall slpd >/dev/null 2>&1
  256. killall Xvnc >/dev/null 2>&1
  257. killall sshd >/dev/null 2>&1
  258.  
  259. umount devpts 2>/dev/null
  260.  
  261. for file in $FILES_TO_RESTORE ; do
  262.   test -e $file.initrd && mv $file.initrd $file
  263. done
  264.  
  265. rm -f /etc/modules.conf
  266.  
  267. # clean up after yast
  268. sed -n '1{h;n};x;H;${x;p}' /proc/mounts | awk '{ if($2 ~ /^\/var/) system("umount " $2) }'
  269.  
  270. exit $ec
  271.  
  272.