home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / root / usr / lib / YaST2 / startup / YaST2.call < prev    next >
Text File  |  2006-11-29  |  26KB  |  860 lines

  1. #!/bin/sh
  2. #================
  3. # FILE          : YaST2.call
  4. #----------------
  5. # PROJECT       : YaST (Yet another Setup Tool v2)
  6. # COPYRIGHT     : (c) 2004 SUSE Linux AG, Germany. All rights reserved
  7. #               :
  8. # AUTHORS       : Steffen Winterfeldt <snwint@suse.de>
  9. #               : Arvin Schnell <arvin@suse.de>
  10. #               : Marcus Schaefer <ms@suse.de>
  11. #               : Lukas Ocilka <locilka@suse.cz>
  12. #               :
  13. # BELONGS TO    : System installation and Administration
  14. #               :
  15. # DESCRIPTION   : This is the main script to start the YaST2 installer
  16. #               : according to the possible installation environments
  17. #               : These are:
  18. #               : ---
  19. #               : - Standard Installation Qt/X11 or text based
  20. #               : - Via serial line ttyS0/115200 baud, 8N1, RTS/CTS
  21. #               :   which is the same as the NCURSES mode
  22. #               : - VNC Installation via browser
  23. #               : 
  24. #               :
  25. # STATUS        : $Id: YaST2.call 34465 2006-11-20 10:51:04Z ms $
  26. #----------------
  27. #
  28. #set -x
  29.  
  30. . /etc/YaST2/XVersion
  31.  
  32. #=============================================
  33. # Functions...
  34. #---------------------------------------------
  35. #----[ wait_for_x11 ]----#
  36. function wait_for_x11() {
  37. #------------------------------------------------------
  38. # after a X-Server has been started you can wait until
  39. # the server is ready for requests using this function
  40. # ---
  41.     server_running=0
  42.     TESTX=/usr/sbin/testX
  43.     while kill -0 $xserver_pid 2>/dev/null ; do
  44.         sleep 1
  45.         if test -e /tmp/.X11-unix/X0 && test -x $TESTX ; then
  46.             $TESTX "$YaST2color" 2>/dev/null
  47.             err=$?
  48.             # exit code 1 -> XOpenDisplay failed...
  49.             if test $err = 1;then
  50.                 log "\tTestX: XOpenDisplay failed"
  51.                 server_running=0
  52.                 continue
  53.             fi
  54.             # exit code 2 -> color or dimensions doesn't fit...
  55.             if test $err = 2;then
  56.                 log "\tTestX: color or dimensions doesn't fit"
  57.                 kill $xserver_pid
  58.                 server_running=0
  59.                 break;
  60.             fi
  61.             # server is running, detach oom-killer from it
  62.             echo -n '-17' > /proc/$xserver_pid/oom_adj
  63.             server_running=1
  64.             break
  65.         fi
  66.     done
  67. }
  68.  
  69. #----[ get_bus_id ]----#
  70. function get_bus_id () {
  71. #------------------------------------------------------
  72. # ask the PCi bus for the location of the first
  73. # graphics card.
  74. # ---
  75.     for line in $(/sbin/lspci -n | grep "Class 0300" | cut -f 1 -d " ");do
  76.         echo $line |\
  77.             grep -q -E "^[0-9a-f]{2}:[0-9a-f]{2}\.[0-9a-f]"
  78.         if [ $? = 0 ];then
  79.             PCIBus=$(echo $line | cut -f1 -d:);
  80.             PCISlot=$(echo $line | cut -f2 -d: | cut -f 1 -d.);
  81.             PCIFunc=$(echo $line | cut -f2 -d.);
  82.             log "\tFound standard BusID: $PCIBus:$PCISlot:$PCIFunc"
  83.             printf "PCI:%d@0:%d:%d" \
  84.                 0x$PCIBus 0x$PCISlot 0x$PCIFunc
  85.             break
  86.         else
  87.             echo $line |\
  88.                 grep -q -E "^[0-9a-f]{4}:[0-9a-f]{2}:[0-9a-f]{2}\.[0-9a-f]"
  89.             if [ $? = 0 ];then
  90.                 PCIDomain=$(echo $line | cut -f1 -d:);
  91.                 PCIBus=$(echo $line | cut -f2 -d:);
  92.                 PCISlot=$(echo $line | cut -f3 -d: | cut -f 1 -d.);
  93.                 PCIFunc=$(echo $line | cut -f2 -d.);
  94.                 log "\tFound domain BusID: $PCIBus@$PCIDomain:$PCISlot $PCIFunc"
  95.                 printf "PCI:%d@%d:%d:%d" \
  96.                     0x$PCIBus 0x$PCIDomain 0x$PCISlot 0x$PCIFunc
  97.                 break
  98.             fi
  99.         fi
  100.     done
  101. }
  102.  
  103. #----[ count_qt_geometry ]----#
  104. function count_qt_geometry () {
  105.     # current X-resolution, display 0
  106.     XRES=$(/usr/sbin/xquery -d :0 -r)
  107.  
  108.     log "\t===Qt Geometry==="
  109.     log "\tResolution: ${XRES}"
  110.  
  111.     # failed to get display info
  112.     if [ "$?" != "0" ]; then
  113.     X_GEOMETRY=""
  114.     return
  115.     fi
  116.  
  117.     # current X and Y resolution
  118.     XRES_X=$(echo $XRES | sed '
  119.     s|[0123456789]\+ \([0123456789]\+\)x[0123456789]\+|\1|
  120.     s|[^0123456789]||g')
  121.     XRES_Y=$(echo $XRES | sed '
  122.     s|[0123456789]\+ [0123456789]\+x\([0123456789]\+\)|\1|
  123.     s|[^0123456789]||g')
  124.  
  125.     log "\tX: ${XRES_X}"
  126.     log "\tY: ${XRES_Y}"
  127.  
  128.     # default values
  129.     OFFSET_X=0
  130.     OFFSET_Y=0
  131.     BACKGROUND_IMAGE=""
  132.  
  133.     # wrong X and/or Y resolution
  134.     if [ "${XRES_X}" == "" ] || [ "${XRES_Y}" == "" ]; then
  135.     X_GEOMETRY=""
  136.     log "\tError: Cannot get X and/or Y from given resolution"
  137.     return
  138.     # reasonable sizes
  139.     else
  140.     # must be bigger or equal to 1400x1050
  141.     if [ "$(expr $XRES_X \>= 1400)" == "1" ] && [ "$(expr $XRES_Y \>= 1050)" == "1" ]; then
  142.         WINDOW_SIZE_X=1024
  143.         WINDOW_SIZE_Y=786
  144.     # exception for PPC: 832x624, see bugzilla #207321
  145.     elif [ "${XRES_X}" == "832" ] && [ "${XRES_Y}" == "624" ]; then
  146.         WINDOW_SIZE_X=${XRES_X}
  147.         WINDOW_SIZE_Y=${XRES_Y}
  148.     # must be bigger or equal to 800x600
  149.     elif [ "$(expr $XRES_X \>= 800)" == "1" ] && [ "$(expr $XRES_Y \>= 600)" == "1" ]; then
  150.         WINDOW_SIZE_X=800
  151.         WINDOW_SIZE_Y=600
  152.     # or fullscreen
  153.     else
  154.         WINDOW_SIZE_X=${XRES_X}
  155.         WINDOW_SIZE_Y=${XRES_Y}
  156.     fi
  157.  
  158.     # Conversion from jpg to png is done later
  159.     BACKGROUND_IMAGE="/usr/lib/YaST2/startup/InstallImages/${XRES_X}x${XRES_Y}.jpg"
  160.  
  161.     # X and Y offsets
  162.     OFFSET_X=$(expr ${XRES_X} - ${WINDOW_SIZE_X})
  163.     OFFSET_X=$(expr ${OFFSET_X} / 2)
  164.     OFFSET_Y=$(expr ${XRES_Y} - ${WINDOW_SIZE_Y})
  165.     OFFSET_Y=$(expr ${OFFSET_Y} / 2)
  166.     fi
  167.  
  168.     log "\tWindow size X: ${WINDOW_SIZE_X}"
  169.     log "\tWindow size Y: ${WINDOW_SIZE_Y}"
  170.     log "\tOffset X: ${OFFSET_X}"
  171.     log "\tOffset Y: ${OFFSET_Y}"
  172.  
  173.     if [ "${OFFSET_X}" == "0" ] || [ "${OFFSET_Y}" == "0" ] || [ "${OFFSET_X}" == "" ] || [ "${OFFSET_Y}" == "" ]; then
  174.     # will run in fullscreen mode
  175.     X_GEOMETRY=""
  176.     else
  177.     # final window geometry, 'Window_XxWindow_Y+Offset_X+Offset_Y'
  178.     X_GEOMETRY="${WINDOW_SIZE_X}x${WINDOW_SIZE_Y}+${OFFSET_X}+${OFFSET_Y}"
  179.     fi
  180.  
  181.     log "\tUsed geometry: ${X_GEOMETRY}"
  182. }
  183.  
  184. #----[ prepare_for_qt ]----#
  185. function prepare_for_qt () {
  186. #------------------------------------------------------
  187. # prepare Qt installation 
  188. # ---
  189.     local fbdevname
  190.     #=============================================
  191.     # Setup Qt environment
  192.     #---------------------------------------------
  193.     set_inst_qt_env
  194.     set_splash 100
  195.  
  196.     #=============================================
  197.     # patch X11 conf. if not update/continue mode
  198.     #---------------------------------------------
  199.     if [ ! -f /var/lib/YaST2/runme_at_boot ];then
  200.     if [ ! -f /etc/X11/xorg.conf.instorig ];then
  201.         # create backup copy...
  202.         cp /etc/X11/xorg.conf /etc/X11/xorg.conf.instorig
  203.  
  204.         # Activate correct device/screen section...
  205.         sed -e "s#Screen.*Screen\[.*\]#Screen   "\""Screen[$X11_CONFIG_ID]#" \
  206.             /etc/X11/xorg.conf >/etc/X11/xorg.conf.new
  207.         mv /etc/X11/xorg.conf.new /etc/X11/xorg.conf
  208.         
  209.         # update core pointer input device section...
  210.         if [ -f "/usr/sbin/xupdate" ];then
  211.             cat /etc/X11/xorg.conf | \
  212.                 /usr/sbin/xupdate > /etc/X11/xorg.conf.new
  213.             mv /etc/X11/xorg.conf.new /etc/X11/xorg.conf
  214.         fi
  215.  
  216.         # update driver and busID if accelerated driver should be used...
  217.         if [ "$X11_CONFIG_ID" = 0 ];then
  218.             # replace BusID placeholder with real busID
  219.             XBusID=$(get_bus_id)
  220.             if [ ! -z "$XBusID" ];then
  221.                 sed -e 's/#BusID/BusID/' \
  222.                     -e "s#1:0:0#$XBusID#" /etc/X11/xorg.conf \
  223.                 > /etc/X11/xorg.conf.new
  224.                 mv /etc/X11/xorg.conf.new /etc/X11/xorg.conf
  225.             fi
  226.  
  227.             # replace driver placeholder with real name
  228.             sed -e "s#ChangeMe#$XServer#" /etc/X11/xorg.conf \
  229.             > /etc/X11/xorg.conf.new
  230.             mv /etc/X11/xorg.conf.new /etc/X11/xorg.conf
  231.         fi
  232.         # check DefaultDepth setup
  233.         if [ -f /sys/class/graphics/fb0/name ];then
  234.             read fbdevname < /sys/class/graphics/fb0/name
  235.             case "$fbdevname" in
  236.                 # The DefaultDepth 16 will not work if the card does not
  237.                 # have enough video ram, or if 15bit has to be used
  238.                 # Let the X11 fbdev driver use whatever the kernel driver uses
  239.                 platinum|control|valkyrie|OFfb)
  240.                 ;;
  241.                 # Force DefaultDepth 16, or QT will not look nice
  242.                 # nvidiafb uses 'NV%x'
  243.                 # rivafb uses 'NV%x'
  244.                 # aty128fb uses 'ATY Rage128'
  245.                 # radeonfb uses 'ATI Radeon XX '
  246.                 NV*|*Rage128|*Radeon*)
  247.                 sed -i -e "/@DefaultDepth@/s/^.*/DefaultDepth 16/" /etc/X11/xorg.conf
  248.                 ;;
  249.                 # drivers that are not yet tested
  250.                 # atyfb uses 'ATY Mach64', may not have enough video ram
  251.                 MATROX|*Mach64)
  252.                 ;;
  253.                 *)
  254.                 ;;
  255.             esac
  256.         fi
  257.     fi
  258.     fi
  259.     #=============================================
  260.     # start X-Server and wait until ready
  261.     #---------------------------------------------
  262.     if [ ! -z "$NEED_XSERVER" ];then
  263.         export DISPLAY=:0
  264.         [ -z $Xstartpath ] || ln -snf $Xbindir/XFree86 /var/X11R6/bin/X
  265.         $Xexecutable -deferglyphs 16 2>/dev/tty8 1>&2 vt07 &
  266.         xserver_pid=$!
  267.         wait_for_x11
  268.         if [ "$server_running" = 1 ];then
  269.             log "\tX-Server is ready: $xserver_pid"
  270.         fi
  271.     fi
  272.     #=============================================
  273.     # set YaST2 Qt options for local displays
  274.     #---------------------------------------------
  275.     if [ ! -z "$NEED_XSERVER" ];then
  276.         Y2_UI_ARGS="--noborder --auto-fonts"
  277. ##* Bugzilla #208307 Use only the fullscreen mode
  278. ##*        count_qt_geometry # currently not used
  279. ##*        if [ "${X_GEOMETRY}" == "" ]; then
  280.             log "\tUI_args: Running in fullscreen mode"
  281.             Y2_UI_ARGS="${Y2_UI_ARGS} --fullscreen"
  282. ##*        else
  283. ##*            log "\tUI_args: Running in window"
  284. ##*            Y2_UI_ARGS="${Y2_UI_ARGS} -geometry ${X_GEOMETRY}"
  285. ##*        fi
  286.     fi
  287. }
  288.  
  289. #----[ prepare_for_ncurses ]----#
  290. function prepare_for_ncurses () {
  291. #------------------------------------------------------
  292. # prepare NCURSES installation
  293. # ---
  294.     #=============================================
  295.     # Create Braille config if not update mode
  296.     #---------------------------------------------
  297.     if [ $INST_MODE = "normal" ];then
  298.     if [ ! -z "$Braille" ];then
  299.         log "Braille config needed, setting up braille display"
  300.         sed -e "s#brlname=.*#brlname=$Braille#" \
  301.             -e "s#brlport=.*#brlport=$Brailledevice#" /etc/suse-blinux.conf \
  302.         >/tmp/suse-blinux.conf
  303.         mv -f /tmp/suse-blinux.conf /etc
  304.         /etc/init.d/suse-blinux start
  305.     fi
  306.     fi
  307.     #=============================================
  308.     # Check for FbIterm
  309.     #---------------------------------------------
  310.     check_run_fbiterm
  311.     log "\tCheck for FB-I-terminal: RUN_FBITERM = $RUN_FBITERM"
  312. }
  313.  
  314. #----[ prepare_for_ssh ]----#
  315. function prepare_for_ssh () {
  316. #------------------------------------------------------
  317. # prepare SSH installation 
  318. # ---
  319. #
  320.     :
  321. }
  322.  
  323. #----[ prepare_for_vnc ]----#
  324. function prepare_for_vnc () {
  325. #------------------------------------------------------
  326. # prepare VNC installation 
  327. # ---
  328. #
  329.     #=============================================
  330.     # Setup splash screen
  331.     #---------------------------------------------
  332.     set_splash 100
  333.  
  334.     #=============================================
  335.     # Setup y2base options
  336.     #---------------------------------------------
  337.     # xxx
  338.     #Y2_UI_ARGS="--fullscreen --noborder --auto-fonts"
  339.     Y2_UI_ARGS="--noborder --auto-fonts"
  340.  
  341.     #=============================================
  342.     # Setup VNC server and start it
  343.     #---------------------------------------------
  344.     setupVNCAuthentication
  345.     if [ $VNCPASS_EXCEPTION = 0 ];then
  346.         disable_splash
  347.         startVNCServer
  348.         wait_for_x11
  349.         if [ "$server_running" = 1 ];then
  350.             log "\tXvnc-Server is ready: $xserver_pid"
  351.         fi
  352.     fi
  353. }
  354.  
  355. #----[ check_Qt ]----#
  356. function check_Qt () {
  357. #------------------------------------------------------
  358. # check if the prepared medium Qt is valid
  359. # ---
  360.     if [ ! -z "$NEED_XSERVER" ];then
  361.         if [ "$server_running" = 0 ];then
  362.             # /.../
  363.             # X-Server couldn't be started, selecting
  364.             # NCURSES mode as fallback ?
  365.             # ---
  366.             log "\tX-Server couldn't be started, falling back to ncurses"
  367.             Y2_MODE_FLAGS='("text_fallback")'
  368.             SELECTED_MEDIUM="NCURSES"
  369.             prepare_for_ncurses
  370.             Y2_MODE=ncurses
  371.         fi
  372.     else
  373.         /usr/sbin/testX --fast 2>/dev/null
  374.         if test $? = 1;then
  375.             log "\tCannot access Display: $DISPLAY, falling back to ncurses"
  376.             SELECTED_MEDIUM="NCURSES"
  377.             prepare_for_ncurses
  378.             Y2_MODE=ncurses
  379.         fi
  380.     fi
  381. }
  382.  
  383. #----[ check_network ]----#
  384. function check_network () {
  385. #------------------------------------------------------
  386. # check if the prepared medium SSH is valid. It is valid
  387. # if there is a network interface accessable and we are
  388. # able to use ncurses or X11
  389. # ---
  390.     if ! found_iface ; then
  391.         # /.../
  392.         # No network interface found for SSH or VNC installation
  393.         # this is a fatal error here
  394.         # ---
  395.         log "\tNo network interface found, fatal error"
  396.         fatalError
  397.     fi
  398.     if [ ! -z "$DISPLAY" ];then
  399.         log "\tDisplay: $DISPLAY found for network install"
  400.         Y2_MODE=qt
  401.     fi
  402.     if ! check_qt ; then
  403.         log "\tQt plugin check failed falling back to ncurses"
  404.         Y2_MODE=ncurses
  405.     fi
  406. }
  407.  
  408. #----[ check_vnc ]----#
  409. function check_vnc () {
  410. #------------------------------------------------------
  411. # check if the prepared medium VNC is valid
  412. # ---
  413.     check_network
  414.     if [ $VNCPASS_EXCEPTION = 1 ];then
  415.         log "\tVNC access has been disabled due to a password exception"
  416.         log "\tPlease make sure the password is at least 8 characters long"
  417.         fatalError
  418.     fi
  419.     if [ "$server_running" = 0 ];then
  420.         # /.../
  421.         # XVnc server couldn't be started, what to do now, I think
  422.         # this is a fatal error here
  423.         # ---
  424.         log "\tXVnc server couldn't be started, fatal error"
  425.         fatalError
  426.     fi
  427. }
  428.  
  429. #----[ set background image for yast ]----#
  430. function set_yast_background () {
  431.     # set up a background if any needed
  432.     if [ "${BACKGROUND_IMAGE}" != "" ]; then
  433.         TMPDIR="/tmp/installimg"
  434.  
  435.         # selected image doesn't exist, usign fallback
  436.         if ! [ -e "${BACKGROUND_IMAGE}" ]; then
  437.         BACKGROUND_IMAGE="/usr/lib/YaST2/startup/InstallImages/fallback.png"
  438.         log "\tNot a supported resolution, using fallback image"
  439.         # convert stored JPG to PNG
  440.         else
  441.         log "\tUsing background: ${BACKGROUND_IMAGE}"
  442.         mkdir -p ${TMPDIR}
  443.         # convert JPG to PNM
  444.         jpegtopnm ${BACKGROUND_IMAGE} > ${TMPDIR}/img.pnm 2>${TMPDIR}/jpegtopnm.log
  445.         # convert PNM to PNG
  446.         pnmtopng ${TMPDIR}/img.pnm > ${TMPDIR}/img.png 2>${TMPDIR}/pnmtopng.log
  447.         # remove PNM
  448.         rm -rf ${TMPDIR}/img.pnm
  449.         # set the BACKGROUND_IMAGE to the converted one
  450.         BACKGROUND_IMAGE=${TMPDIR}/img.png
  451.         fi
  452.  
  453.         # set the background
  454.         fvwm-root --dither ${BACKGROUND_IMAGE}
  455.  
  456.         # remove PNG silently if exists
  457.         rm -rf ${TMPDIR}/img.png
  458.     fi
  459. }
  460.  
  461. #----[ start_yast ]----#
  462. function start_yast () {
  463. #------------------------------------------------------
  464. # Start YaST2 refering to the contents of the Y2_*
  465. # startup variables
  466. # ---
  467.     local overcommit
  468.     read  overcommit < /proc/sys/vm/overcommit_memory
  469.     echo "*** Starting YaST2 ***"
  470.     log "\tAllow big memory allocation: overcommit_memory=1"
  471.     echo 1 > /proc/sys/vm/overcommit_memory
  472.     if [ "$SPLASH" = yes -a -x /sbin/splash -a -n "$SPLASHCFG" ];then
  473.         /sbin/splash -t "YaST running"
  474.     fi
  475.     export QT_IM_MODULE=xim
  476.  
  477.     if [ "$RUN_FBITERM" = "1" ]; then
  478.         OPT_FBITERM=/usr/bin/fbiterm
  479.     else
  480.         OPT_FBITERM=
  481.     fi
  482.  
  483. ##*    # bugzilla #208307
  484. ##*    set_yast_background # currently not used
  485.  
  486.     log "\tStarting YaST2:"
  487.     log "\tMODULE_NAME: $Y2_MODULE_NAME"
  488.     log "\tMODE_FLAGS:  $Y2_MODE_FLAGS"
  489.     log "\tMODULE_ARGS: $Y2_MODULE_ARGS"
  490.     log "\tMODE:        $Y2_MODE"
  491.     log "\tUI_ARGS:     $Y2_UI_ARGS"
  492.     log "\tQT_IM_MODULE:$QT_IM_MODULE"
  493.     $OPT_FBITERM y2base \
  494.             "$Y2_MODULE_NAME"   \
  495.             $Y2_MODE_FLAGS      \
  496.             $Y2_MODULE_ARGS     \
  497.             $Y2_MODE            \
  498.             $Y2_UI_ARGS
  499.     Y2_EXIT_CODE=$?
  500.     Y2_ABORT_MESSAGE="YaST seems to be aborted abnormally !"
  501.     Y2_OK_MESSAGE="YaST procedure ended successfully"
  502.     if [ -s /etc/yast.inf ];then
  503.         #=============================================
  504.         # check yast.inf contents
  505.         #---------------------------------------------
  506.         cat /etc/yast.inf | grep -q -i "Aborted: 1"
  507.         if [ $? = 0 ];then
  508.             log "\t$Y2_ABORT_MESSAGE"
  509.         fi
  510.     else
  511.         #=============================================
  512.         # YaST ended successfully
  513.         #---------------------------------------------
  514.         log "\t$Y2_OK_MESSAGE"
  515.     fi
  516.     if [ $SELECTED_MEDIUM = "SSH" ] && [ ! "$VNC" = 1 ];then
  517.         echo "*** Preparing SSH installation for reboot ***"
  518.         echo "*** NOTE: after reboot, you have to reconnect and call ***"
  519.         echo "*** /usr/lib/YaST2/startup/YaST2.ssh ***"
  520.         log "\tPreparing SSH installation for reboot"
  521.         echo $Y2_EXIT_CODE > /tmp/YaST2_ssh_installation_finished
  522.     fi
  523.     if [ $Y2_EXIT_CODE -eq 0 ];then
  524.         start_yast_and_reboot
  525.         start_yast_again
  526.     fi
  527.     log "\tReset memory allocation: overcommit_memory=$overcommit"
  528.     echo $overcommit > /proc/sys/vm/overcommit_memory
  529. }
  530.  
  531. #----[ start_yast_and_reboot ]----#
  532. function start_yast_and_reboot () {
  533. #------------------------------------------------------
  534. # This function will reboot the system and start yast
  535. # again by touching the file /var/lib/YaST2/runme_at_boot.
  536. # The function is triggered by the file /var/lib/YaST2/reboot
  537. # ---
  538.     if [ -f /var/lib/YaST2/reboot ];then
  539.         rm -f /var/lib/YaST2/reboot
  540.         touch /var/lib/YaST2/runme_at_boot
  541.         /sbin/shutdown -r now
  542.     fi
  543. }
  544.  
  545. #----[ start_yast_again ]----#
  546. function start_yast_again () {
  547. #------------------------------------------------------
  548. # This function will restart yast again with the same
  549. # options as used before. The function is triggered by 
  550. # the file /var/lib/YaST2/restart_yast
  551. # ---
  552.     if [ -f /var/lib/YaST2/restart_yast ];then
  553.         rm -f /var/lib/YaST2/restart_yast
  554.         start_yast
  555.     fi
  556. }
  557.  
  558. #=============================================
  559. # Start the Magic :-)
  560. #=============================================
  561. # 1) Source common script functions
  562. #---------------------------------------------
  563. . /usr/lib/YaST2/startup/common/functions.sh
  564. . /usr/lib/YaST2/startup/requires
  565. . /usr/lib/YaST2/startup/arch/ia64/x11.sh
  566.  
  567. #=============================================
  568. # 1.1) set splash progress bar to 90%
  569. #---------------------------------------------
  570. set_splash 90
  571. #=============================================
  572. # 1.2) set root HOME directory
  573. #---------------------------------------------
  574. export HOME=/root
  575. #=============================================
  576. # 1.3) set HTTP/FTP proxy and configure syslog
  577. #---------------------------------------------
  578. set_syslog ; set_proxy
  579.  
  580. #=============================================
  581. # 2) Initialize...
  582. #---------------------------------------------
  583. # 2.1) setup PATH
  584. PATH=$ybindir:$PATH
  585. [ -z Xstartpath ] || PATH=/var/X11R6/bin:$PATH
  586. #=============================================
  587. # 2.2) get X11 driver directory
  588. #---------------------------------------------
  589. X11_DRIVER_DIR=$Xdriverpath
  590. if [ -d $Xdriver64path ];then
  591.     X11_DRIVER_DIR=$Xdriver64path
  592. fi
  593. #=============================================
  594. # 2.3) obtain RAM size in Kb
  595. #---------------------------------------------
  596. MEM_TOTAL=`awk '/^MemTotal:/{ print $2 }' /proc/meminfo`
  597. if [ ${#MEM_TOTAL} -gt 9 ];then
  598.     MEM_TOTAL=1000000000
  599. fi
  600. #=============================================
  601. # 2.4) check for valid framebuffer
  602. #---------------------------------------------
  603. FBDEV_OK=0
  604. if (: < /dev/fb0) 2>/dev/null ; then
  605.     FBDEV_OK=1
  606. fi
  607. #=============================================
  608. # 2.5) setup installation mode (update y/n)
  609. #---------------------------------------------
  610. INST_MODE="normal"
  611. if [ -f /var/lib/YaST2/update_mode ];then
  612.     INST_MODE="update"
  613. fi
  614. #=============================================
  615. # 2.6) import install.inf
  616. #---------------------------------------------
  617. import_install_inf
  618.  
  619. #=============================================
  620. # 2.7) set LOG prefix
  621. #---------------------------------------------
  622. LOG_PREFIX="Stage [call]"
  623.  
  624. #=============================================
  625. # 3) Medium prequalification
  626. #---------------------------------------------
  627. # Check which installation mediums can be used. There are
  628. # four mediums available: Qt(0) SSH(1), VNC(2) and NCURSES(3).
  629. # The following checks will create an array which contains
  630. # the possible mediums. An index of 1 indicates "can be used"
  631. # an index of 0 indicated "cannot be used"
  632. # ---
  633. MEDIUM=(1 1 1 1)
  634.  
  635. #=============================================
  636. # 3.1) prequalification checks for Qt
  637. #---------------------------------------------
  638. log "Starting prequalification checks..."
  639. log "==================================="
  640. # 3.1.1) Qt plugin check...
  641. if ! check_qt ; then
  642.     log "\tQt plugin check failed -> Medium Qt disabled"
  643.     MEDIUM[0]=0
  644. fi
  645. # 3.1.2) X-Server module check...
  646. # BEG IA64: use accelerated X11 driver
  647. ia64_check_x11
  648. # END IA64:
  649. XServerAccel=$XServer
  650. if [ "$XServer" = "vmware" ];then
  651.     if [ ! -f "$X11_DRIVER_DIR/${XServer}_drv.so" ];then
  652.         log "\t$XServer driver not installed -> Medium Qt disabled"
  653.         MEDIUM[0]=0
  654.     fi
  655.     X11_CONFIG_ID=vmware
  656. else
  657.     XServer=fbdev
  658.     if [ $FBDEV_OK -eq 0 ];then
  659.         log "\tNo Framebuffer available: Using vesa driver"
  660.         XServer=vesa
  661.     fi
  662.     if [ ! -f "$X11_DRIVER_DIR/${XServer}_drv.so" ];then
  663.         log "\t$XServer driver not installed -> Medium Qt disabled"
  664.         MEDIUM[0]=0
  665.     fi
  666.     X11_CONFIG_ID=$XServer
  667. fi
  668. if [ "$acceleratedx" = "1" ];then
  669.     if [ ! -f "$X11_DRIVER_DIR/${XServerAccel}_drv.so" ];then
  670.         log "\t$XServerAccel driver not installed -> X11 acceleration disabled"
  671.     else
  672.         log "\tUsing accelerated driver -> $XServerAccel"
  673.         if [ $XServerAccel = "i810" ];then
  674.             log "\tIntel driver requested: loading intel agp module"
  675.             load_module intel-agp
  676.         fi
  677.         MEDIUM[0]=1
  678.         XServer=$XServerAccel
  679.         X11_CONFIG_ID=0
  680.     fi
  681. fi
  682. # 3.1.3) Memory check >= 90MB for Qt/X11...
  683. if [ $MEM_TOTAL -lt "$MEM_NEEDED" ];then
  684.     log "\tMemory requirement > 90MB not fulfilled -> Medium Qt disabled"
  685.     MEDIUM[0]=0
  686. fi
  687. # 3.1.4) Check if we need to start our own X11 server...
  688. if [ -z "$DISPLAY" ];then
  689.     NEED_XSERVER=1
  690. fi
  691. # 3.1.5) Check for xorg.conf...
  692. if [ ! -f /etc/X11/xorg.conf ];then
  693. if [ ! -f $Xorgconftempl ];then
  694.     log "\tNo X11 configuration template found -> Medium Qt disabled"
  695.     MEDIUM[0]=0
  696. else
  697.     cp $Xorgconftempl /etc/X11/xorg.conf
  698. fi
  699. fi 
  700. # 3.1.6) Check for WindowManager configuration
  701. if [ ! -f $Xsharedir/fvwm/fvwmrc.yast2 ];then
  702.     log "\tNo Windowmanager configuration found -> Medium Qt disabled"
  703.     MEDIUM[0]=0
  704. fi
  705. # 3.1.7) Check for remote display usage
  706. if [ ! -z $Display_IP ];then
  707.     log "\tRemote Display usage -> Medium Qt enabled"
  708.     log "\tExporting DISPLAY to host: $Display_IP:0.0"
  709.     export DISPLAY="$Display_IP:0.0"
  710.     NEED_XSERVER=""
  711.     MEDIUM[0]=1
  712. fi
  713.  
  714. #=============================================
  715. # 3.2) prequalification checks for SSH
  716. #---------------------------------------------
  717. # 3.2.1) Check for SSH daemon
  718. if [ -f /var/run/sshd.*pid ];then
  719.     ps `cat /var/run/sshd.*pid` >/dev/null || MEDIUM[2]=0
  720. else
  721.     log "\tNo SSH daemon running -> Medium SSH disabled"
  722.     MEDIUM[1]=0
  723. fi
  724.  
  725. #=============================================
  726. # 3.3) prequalification checks for VNC
  727. #---------------------------------------------
  728. # 3.3.1) Check for WindowManager configuration
  729. if [ ! -f $Xsharedir/fvwm/fvwmrc.yast2 ];then
  730.     log "\tNo Windowmanager configuration found -> Medium VNC disabled"
  731.     MEDIUM[2]=0
  732. fi
  733. # 3.3.2) Check for VNC X-Server binary
  734. if [ ! -x $Xbindir/Xvnc ] ; then
  735.     log "\tNo Xvnc server installed -> Medium VNC disabled"
  736.     MEDIUM[2]=0
  737. fi
  738. # 3.3.3) Check for testX binary
  739. if [ ! -x /usr/sbin/testX ] ; then
  740.     log "\tNo testX binary installed -> Medium VNC disabled"
  741.     MEDIUM[2]=0
  742. fi
  743.  
  744. #=============================================
  745. # 4) Evaluate medium selection
  746. #---------------------------------------------
  747. # At this point we are evaluating the variables which have
  748. # been imported from the install.inf file into the current
  749. # environment. The standard method of installing the system
  750. # should be Qt based. Refering to the variables Textmode,
  751. # Braille, UseSSH and VNC another medium could be selected
  752. # VNC overrides UseSSH
  753. # ---
  754. log "Evaluate medium selection..."
  755. log "============================"
  756. SELECTED_MEDIUM="QT"
  757. if [ "$Textmode" = 1 ];then
  758.     log "\tMedium Textmode (ncurses) has been selected"
  759.     SELECTED_MEDIUM="NCURSES"
  760. fi
  761. if [ ! -z "$Braille" ];then
  762.     log "\tMedium Braille (ncurses) has been selected"
  763.     SELECTED_MEDIUM="NCURSES"
  764. fi
  765. if [ "$UseSSH" = 1 ];then
  766.     log "\tMedium SSH has been selected"
  767.     SELECTED_MEDIUM="SSH"
  768. fi
  769. if [ "$VNC" = 1 ];then
  770.     log "\tMedium VNC has been selected"
  771.     SELECTED_MEDIUM="VNC"
  772. fi
  773.  
  774. #=============================================
  775. # 5) Check selected medium
  776. #---------------------------------------------
  777. # Refering to the prequalification check results we need to
  778. # check if the selected medium is valid according to the
  779. # MEDIUM flag entry. If the medium is not valid we will
  780. # fallback to NCURSES mode
  781. # ---
  782. log "Check selected medium..."
  783. log "========================"
  784. log "\tWished medium is: $SELECTED_MEDIUM"
  785. case $SELECTED_MEDIUM in
  786.     QT)  {
  787.         if [ ${MEDIUM[0]} -eq 0 ];then
  788.             log "\tMedium Qt not available, falling back to ncurses"
  789.             SELECTED_MEDIUM="NCURSES"
  790.         fi
  791.     } ;;
  792.     SSH) {
  793.         if [ ${MEDIUM[1]} -eq 0 ];then
  794.             log "\tMedium SSH not available, falling back to ncurses"
  795.             SELECTED_MEDIUM="NCURSES"
  796.         fi
  797.     } ;;
  798.     VNC) {
  799.         if [ ${MEDIUM[2]} -eq 0 ];then
  800.             log "\tMedium VNC not available, falling back to ncurses"
  801.             SELECTED_MEDIUM="NCURSES"
  802.         fi
  803.     } ;;
  804. esac
  805. log "\tSelected medium is: $SELECTED_MEDIUM"
  806.  
  807. #=============================================
  808. # 6) Prepare selected medium
  809. #---------------------------------------------
  810. case $SELECTED_MEDIUM in
  811.     QT)      prepare_for_qt      ; Y2_MODE=qt      ;;
  812.     SSH)     prepare_for_ssh     ; Y2_MODE=ncurses ;;
  813.     VNC)     prepare_for_vnc     ; Y2_MODE=qt      ;;
  814.     NCURSES) prepare_for_ncurses ; Y2_MODE=ncurses ;;
  815. esac
  816.  
  817. #=============================================
  818. # 7) Check prepared medium
  819. #---------------------------------------------
  820. case $SELECTED_MEDIUM in
  821.     QT)  check_Qt      ;;
  822.     SSH) check_network ;;
  823.     VNC) check_vnc     ;;
  824. esac
  825.  
  826. # The prepare_for_ncurses in step 6 is kinda useless if step 7 can
  827. # change Y2MODE to ncurses in several ways
  828. # Anyway, #150799
  829. if [ "$Y2_MODE" = "ncurses" ]; then
  830.     Y2_UI_ARGS=--nothreads
  831. fi
  832.  
  833. #=============================================
  834. # 8) Call YaST2
  835. #---------------------------------------------
  836. Y2_MODULE_NAME=${1:-installation}; shift
  837. Y2_MODULE_ARGS=\(\"$*\"\)
  838. start_yast
  839.  
  840. #=============================================
  841. # 9) Clean sweep
  842. #---------------------------------------------
  843. # 9.1) clear Qt environment...
  844. clr_inst_qt_env
  845.  
  846. # 9.2) kill X-Server...
  847. if [ "$server_running" = 1 ];then
  848.     sleep 1 && kill $xserver_pid
  849.     while kill -0 $xserver_pid 2>/dev/null ; do
  850.         sleep 1
  851.     done
  852. fi
  853.  
  854. #=============================================
  855. # 10) exit with YaST2 exit code
  856. #---------------------------------------------
  857. exit $Y2_EXIT_CODE
  858.  
  859.  
  860.