home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / root / usr / share / YaST2 / clients / inst_suseconfig.ycp < prev    next >
Text File  |  2006-11-29  |  6KB  |  232 lines

  1. /**
  2.  * File:    clients/inst_suseconfig.ycp
  3.  * Package:    Installation
  4.  * Summary:    Run SUSEconfig
  5.  * Authors:    Andreas Schwab <schwab@suse.de>
  6.  *        Stefan Hundhammer <sh@suse.de>
  7.  *
  8.  * $Id: inst_suseconfig.ycp 30530 2006-04-27 09:21:14Z ms $
  9.  *
  10.  * Purpose:
  11.  * - shows the "Finishing the installation" frame
  12.  * - runs "SuSEconfig"
  13.  * - runs "init" to reread inittab, which has been changed by SuSEconfig.
  14.  * - shows the loginname which can be used.
  15.  */
  16.  
  17. {
  18.  
  19.     textdomain "installation";
  20.  
  21.     import "Arch";
  22.     import "Directory";
  23.     import "Installation";
  24.     import "Mode";
  25.     import "Stage";
  26.     import "Popup";
  27.     import "Wizard";
  28.     import "Kernel";
  29.     import "GetInstArgs";
  30.     import "Product"; // ugly, because of initializing the &product; macro
  31.  
  32.     if ( GetInstArgs::going_back())    // going backwards?
  33.     return `auto;            // don't execute this once more
  34.  
  35.     boolean reread_inittab = false;
  36.  
  37.     integer    current_step    = 0;    // Required by logStep()
  38.  
  39.     string log_destination = ">> " + Directory::logdir + "/y2log.SuSEconfig";        // Required by doStep()
  40.  
  41.     if ( Stage::cont () )
  42.     {
  43.     reread_inittab = true;
  44.     }
  45.  
  46.     /**
  47.      * Display a step in the LogView widget and increment the progress bar.
  48.      * Uses global variable 'current_step'.
  49.      *
  50.      * @param step_descr description of the step.
  51.      */
  52.     define void logStep( string step_descr ) ``{
  53.     current_step = current_step + 1;
  54.     UI::ChangeWidget( `id(`progress), `Value, current_step );
  55.     UI::ChangeWidget( `id(`log), `LastLine, step_descr + "\n" );
  56.     };
  57.  
  58.  
  59.     /**
  60.      * Run a step on the target and log its output to the globally specified
  61.      * 'log_destination'.
  62.      *
  63.      * @param step command to execute in this step
  64.      */
  65.     define void runStep( string step ) ``{
  66.  
  67.     string command = sformat( "HOME=%1 %2 %3 2>&1", Directory::tmpdir, step, log_destination );
  68.     // Setting $HOME to Directory::tmpdir to avoid cluttering '/' with spurious files - bug #13204
  69.  
  70.     if ( Mode::test () )
  71.     {
  72.         y2milestone( "Test mode - NOT executing '%1'", command );
  73.         sleep( 300 );
  74.     }
  75.     else
  76.     {
  77.         y2milestone( "Executing '%1'", command );
  78.         SCR::Execute( .target.bash, command );
  79.     }
  80.     };
  81.  
  82.  
  83.     ////////////////////////////////////////////////////////////////////////////////
  84.     //                      Main Dialog
  85.     ////////////////////////////////////////////////////////////////////////////////
  86.  
  87.  
  88.     /* Help text for SUSEconfig dialog */
  89.     string help = _("<p><tt>SuSEconfig</tt> must write the configuration
  90. of your &product; system. Depending on the CPU and the amount of memory,
  91. this process can take some time.</p>
  92. ");
  93.  
  94.  
  95.     list<string> modules = (list<string>) SCR::Read( .run.get.suseconfig.modules );
  96.     integer max_steps = size( modules ) + 1; // + ldconfig
  97.  
  98.     if ( reread_inittab )
  99.     {
  100.     max_steps = max_steps + 1;        // restart 'init'
  101.     }
  102.  
  103.     term contents = `VBox(
  104.               `LogView(`id(`log), "", 10, 0 ),
  105.  
  106.               // Progress bar that displays overall progress in this dialog
  107.               `ProgressBar(`id(`progress), _("Progress"), max_steps, 0 )
  108.               );
  109.  
  110.     UI::SetProductName (Product::name); // really ugly, bot works
  111.     Wizard::SetContents(
  112.               // Dialog title for SuSEconfig dialog
  113.               _("Writing the system configuration"),
  114.               contents, help, GetInstArgs::enable_back(), GetInstArgs::enable_next());
  115.     Wizard::DisableAbortButton();
  116.  
  117.  
  118.     // --------------------------------------------------------------
  119.     // Put config of installed kernel into kernel sources
  120.  
  121.     y2debug( "Testmode: %1", Mode::test () );
  122.  
  123.     //
  124.     // Preliminary 'ldconfig' - this takes a long time at first run.
  125.     //
  126.     // SusEconfig calls this internally, too, but we want to avoid giving the
  127.     // impression the very first SuSEconfig module takes that long: It's
  128.     // simply not true, it's 'ldconfig' that takes this long. So make this fact
  129.     // transparent by explicitly calling it (and informing the user about that)
  130.     // prior to calling any SuSEconfig module.
  131.     //
  132.  
  133.     logStep( _("Setting up linker cache") );
  134.     runStep( "/sbin/ldconfig" );
  135.  
  136.     // This is the same as:
  137.     //    runStep( "/sbin/SuSEconfig --verbose --module aaa_at_first" );
  138.     // but that "aaa_at_first" module will go away soon. Or so it is said. ;-)
  139.  
  140.  
  141.     if ( Stage::initial () || Stage::cont ()
  142.      || tolower( (string) SCR::Read(.sysconfig.suseconfig.ENABLE_SUSECONFIG) ) == "yes" )
  143.     {
  144.     //
  145.     // Call each SuSEconfig module individually
  146.     //
  147.  
  148.     foreach (string mod, modules, ``{
  149.         // inform user about current SuSEconfig step
  150.         logStep( sformat (_("Running SuSEconfig.%1"), mod));
  151.         runStep( "/sbin/SuSEconfig --verbose --module "   + mod );
  152.     });
  153.  
  154.     if ( ! Mode::test () )
  155.     {
  156.         SCR::Execute (.target.remove, "/var/lib/YaST2/run_suseconfig");
  157.     }
  158.  
  159.  
  160.     //
  161.     // Call "all the rest" of the SuSEconfig main program
  162.     //
  163.  
  164.     // inform user that SuSEconfig has finished
  165.     logStep( _("Finishing SuSEconfig") );
  166.     runStep( "/sbin/SuSEconfig --verbose --nomodule" );
  167.     }
  168.     else
  169.     {
  170.     // inform user that SuSEconfig has been disabled
  171.     logStep( _("SuSEconfig disabled in /etc/sysconfig/suseconfig") );
  172.     y2milestone( "SuSEconfig disabled in /etc/sysconfig/suseconfig" );
  173.     }
  174.  
  175.  
  176.  
  177.     //
  178.     // Tell init to reread inittab which might have been changed by SuSEconfig.
  179.     //
  180.  
  181.     if ( reread_inittab )
  182.     {
  183.     runStep( "/sbin/init q" );
  184.     }
  185.  
  186.  
  187.     // The final LogView line to be displayed after SuSEconfig etc. is done.
  188.     UI::ChangeWidget( `id(`log), `LastLine, "\n" + _("Done.") + "\n" );
  189.  
  190.  
  191.     if ( Mode::test () )
  192.     {
  193.     UI::MakeScreenShot();    // doesn't work manually - not widget with keyboard focus!
  194.     sleep( 5*1000 );
  195.     }
  196.  
  197.     if ( Kernel::GetInformAboutKernelChange () )
  198.     {
  199.     // inform the user that he/she has to reboot to activate new kernel
  200.     Popup::Message(_("Reboot your system
  201. to activate the new kernel.
  202. "));
  203.     }
  204.  
  205.     // ...
  206.     // Migrate configuration from XFree86 3.x to XFree86 4.x
  207.     // if possible
  208.     // ---
  209.     if ( Mode::update () )
  210.     {
  211.         if (SCR::Read(.target.size, "/etc/X11/XF86Config")!= -1) {
  212.             integer flag = (integer)
  213.                 SCR::Execute (.target.bash,
  214.                         "/usr/bin/tail -n 1 /etc/X11/XF86Config | grep -q '#3x'"
  215.                         );
  216.             if (flag == 0)
  217.             {
  218.                 SCR::Execute (.target.bash, Directory::ybindir + "/xmigrate.pl");
  219.             }
  220.         }
  221.     }
  222.  
  223.     if ( Mode::update () )
  224.     {
  225.     return `next;
  226.     }
  227.     else
  228.     {
  229.     return `auto;
  230.     }
  231. }
  232.