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 / include / repair / osr_module_bootloader.ycp < prev    next >
Text File  |  2006-11-29  |  29KB  |  809 lines

  1. /**
  2.  * File:
  3.  *   osr_module_bootloader.ycp
  4.  *
  5.  * Module:
  6.  *   YaST Repair bootloader module.
  7.  *
  8.  * Summary:
  9.  *   YaST Repair. Automatic error detection & repair tool for Linux.
  10.  *
  11.  * Author:
  12.  *   Johannes Buchhold <jbuch@suse.de>
  13.  *
  14.  * $Id: osr_module_bootloader.ycp 24138 2005-07-18 15:30:14Z jsuchome $
  15.  */
  16.  
  17. {
  18.   textdomain "repair";
  19.  
  20.   import "Bootloader";
  21.   import "Label";
  22.   import "Mode";
  23.   import "Popup";
  24.   import "Stage";
  25.   import "Storage";
  26.  
  27.   import "OSR";
  28.   import "OSRCommon";
  29.   import "OSRBoot";
  30.   import "OSRSummary";
  31.   import "OSRStatus";
  32.   import "OSRSystem";
  33.   import "OSRFstab";
  34.   import "OSRFsck";
  35.   import "OSRDirect";
  36.  
  37.  
  38.   //////////////////////////////////////////////////////////////////////
  39.   //
  40.   //  DETECTION METHODS
  41.   //
  42.   //////////////////////////////////////////////////////////////////////
  43.  
  44.   /**
  45.    * Check the base boot loader and kernel configuration files
  46.    */
  47.   define boolean OSRBootloaderSysconfigFiles()``{
  48.       /////////////////////////////////////////////////////////////////////////
  49.       //
  50.       // Check sysconfig files ...
  51.       //
  52.       /////////////////////////////////////////////////////////////////////////
  53.  
  54.       // change root for SCR
  55.       OSRSystem::SetTargetRoot();
  56.  
  57.       if( ! OSRBoot::CheckSysconfigFiles( OSRSystem::TargetRoot() ) )
  58.       {
  59.         OSRSummary::DetectError("",
  60.            // summary error text, %1 are file names
  61.            sformat(_("The following configuration files were not found:<br>%1"),
  62.            mergestring( OSRBoot::not_valid_files, "<br>")));
  63.  
  64.         OSRSummary::SetRepairSummary(OSRBoot::RepairSysconfigFiles(),
  65.                        // summary header
  66.                        _("Installing new boot loader..."),
  67.                        // summary text
  68.                        _("New boot loader installation was successful."),
  69.                        // summary text
  70.                        _("Skipped installing a new boot loader."),
  71.                        // summary text
  72.                        _("New boot loader installation was not successful."));
  73.  
  74.       }
  75.       else {
  76.         OSRSummary::DetectOK("",
  77.             // summary text, %1 are file names
  78.             sformat(_("Configuration files were found:<br>%1"),
  79.             mergestring ((list<string>) maplist(string k, string file,
  80.                 (map<string,string>) OSRBoot::needed_config_files, ``(file)), "<br>")));
  81.         OSRCommon::ProvideBoolean("config_files", true );
  82.       }
  83.       return true;
  84.   }
  85.  
  86.   /**
  87.    * Find the type of the boot loader e.g.: lilo, grub
  88.    */
  89.   define boolean OSRBootloaderType() ``{
  90.       /////////////////////////////////////////////////////////////////////////
  91.       //
  92.       // Searching type of the boot loader type ...
  93.       //
  94.       /////////////////////////////////////////////////////////////////////////
  95.       string loader_type = Bootloader::getLoaderType();
  96.       if ( loader_type != "" && loader_type != nil )
  97.       {
  98.         OSRSummary::DetectOK("",
  99.             // summary text, %1 is boot loader type
  100.             sformat(_("Found %1 boot loader"), loader_type ));
  101.         OSRCommon::ProvideString("bootloader_type", loader_type);
  102.       }
  103.       else {
  104.         // summary error text
  105.         OSRSummary::DetectError("", _("No boot loader was found"));
  106.         OSRSummary::SetRepairSummary(OSRBoot::InstallNewLoader(),
  107.                         // summary header
  108.                        _("Installing new boot loader..."),
  109.                         // summary text
  110.                        _("New boot loader installation was successful"),
  111.                         // summary text
  112.                        _("Skipped installing a new boot loader"),
  113.                         // summary text
  114.                        _("New boot loader installation was not successful"));
  115.  
  116.       }
  117.       return true;
  118.   }
  119.  
  120.  
  121.   /**
  122.    * Find the root and boot partition.
  123.    */
  124.   define boolean OSRBootloaderBootRoot()``{
  125.       /////////////////////////////////////////////////////////////////////////
  126.       //
  127.       // Searching for root and boot partition  ...
  128.       //
  129.       /////////////////////////////////////////////////////////////////////////
  130.       list<string> not_found    = [];
  131.  
  132.       // Set boot and root device
  133.       OSRBoot::root_device = OSRCommon::RequireString("root_partition");
  134.       OSRBoot::boot_device = OSRFstab::BootDev();
  135.  
  136.       //if not boot device is specified use root device
  137.       if( OSRBoot::boot_device == "" )
  138.       {
  139.       OSRBoot::boot_device = OSRBoot::root_device;
  140.       }
  141.  
  142.       //Change root back to / for Boot::Set()
  143.       OSRSystem::SetOrgRoot();
  144.       if (!Mode::test ())
  145.     Bootloader::Propose();
  146.       OSRSystem::SetTargetRoot();
  147.  
  148.       string root_device = Bootloader::getRootDevice();
  149.       string boot_device = Bootloader::getBootDevice();
  150.       y2milestone("Boot::Set() new root %1 and boot %2 device", root_device,
  151.          boot_device);
  152.       if( boot_device != OSRBoot::boot_device )
  153.       {
  154.         y2error(" boot_device and Bootloader::getBootDevice differ");
  155.       }
  156.       if( root_device != OSRBoot::root_device )
  157.       {
  158.         y2error(" root_device and Bootloader::getRootDevice differ");
  159.       }
  160.  
  161.  
  162.       // summary header
  163.       string summary_header = _("Searching for root device...");
  164.       if( OSRBoot::root_device != "" && OSRBoot::root_device != nil )
  165.       {
  166.         OSRSummary::DetectOK(summary_header,
  167.             // summary text
  168.             sformat(_("Root device was found: %1"), OSRBoot::root_device ));
  169.         OSRCommon::ProvideString("root_device", OSRBoot::root_device );
  170.       }
  171.       else {
  172.         // summary text
  173.         OSRSummary::DetectError(summary_header, _("No root device was found"));
  174.         not_found = add( not_found, "root");
  175.       }
  176.  
  177.       // summary header
  178.       summary_header = _("Searching for boot device...");
  179.       if( OSRBoot::boot_device != "" && OSRBoot::boot_device != nil )
  180.       {
  181.         OSRSummary::DetectOK(summary_header,
  182.             // summary text
  183.             sformat(_("Boot device was found: %1"), OSRBoot::boot_device ));
  184.         OSRCommon::ProvideString("boot_device", OSRBoot::boot_device );
  185.       }
  186.       else {
  187.         // summary text
  188.         OSRSummary::DetectError(summary_header, _("No boot device was found"));
  189.         not_found = add( not_found, "boot" );
  190.       }
  191.  
  192.       // Root or boot not found
  193.       // OSRStatus::error
  194.       if( size ( not_found ) > 0 )
  195.       {
  196.         // popup header
  197.         string header = _("No Valid Root Partition");
  198.         // popup text
  199.         string text =  _("
  200. No valid root partitions detected
  201. in your system. Probably, there is no valid
  202. Linux system on this computer. If you are
  203. sure that you installed a Linux system, 
  204. press Retry Scanning. Otherwise, skip scanning
  205. the system and start a new installation.
  206. ");
  207.  
  208.         if (not_found[0]:"" == "boot")
  209.         {
  210.             // popup header
  211.             header =  _("No Valid Boot Partition Found");
  212.             // popup text
  213.             text =  _("
  214. No valid boot partitions detected
  215. in your system. Probably, there is no valid
  216. Linux system on this computer. If you are
  217. sure that you installed a Linux system, 
  218. press Retry Scanning. Otherwise, skip scanning
  219. the system and start a new installation.
  220. ");
  221.         }
  222.         if( Popup::AnyQuestion(header, text,
  223.             // button label
  224.             _("&Retry Scanning"), Label::CancelButton(), `focus_yes ) )
  225.         {
  226.             OSRStatus::RestartScan("find_harddisks");
  227.             return true;
  228.         }
  229.         else
  230.         {
  231.             OSRStatus::ErrorSeverityBlocking();
  232.             if (Stage::initial ())
  233.             {
  234.                 OSR::SetReboot();
  235.                 y2milestone ( "Make a hard reboot" );
  236.             }
  237.             return false;
  238.         }
  239.      }
  240.       if ( OSRCommon::RequireBoolean("mounted_all") != true )
  241.       {
  242.       if( ! OSRFstab::ReadedSuccessfully())
  243.           OSRCommon::ProvideList("just_umounted", OSRFstab::UmountAllFrom( OSRSystem::TargetRoot()));
  244.  
  245.       list<map> mounted      = OSRFstab::MountAll( OSRSystem::TargetRoot());
  246.       list<map> success      = filter(map mpe , mounted, ``(mpe["status"]:false == true));
  247.  
  248.       OSRCommon::ProvideBoolean("mounted_all", true );
  249.       OSRCommon::ProvideList("just_mounted", union( OSRCommon::RequireList("just_mounted"), success));
  250.       }
  251.  
  252.       return true;
  253.   }
  254.  
  255.   /**
  256.    * Check if all needed boot loader packages are installed.
  257.    */
  258.   define boolean OSRBootloaderPackagesInstalled()``{
  259.       /////////////////////////////////////////////////////////////////////////
  260.       //
  261.       // Check boot loader packages
  262.       //
  263.       /////////////////////////////////////////////////////////////////////////
  264.       string bootloader                 = OSRCommon::RequireString("bootloader_type");
  265.  
  266.       // usr "" for root_mountpoint !! root_mountpoint set by OSRBoot::CheckSysconfigFiles..
  267.       if( OSRBoot::CheckLoaderPackages(bootloader, "", "installed" ))
  268.       {
  269.         OSRSummary::DetectOK("",
  270.             // summary text, %1 are packages
  271.             sformat(_("Packages needed by the boot loader were found:<br>%1"),
  272.             mergestring( OSRBoot::BootloaderPackages( bootloader ), "<br>")));
  273.  
  274.       OSRCommon::ProvideBoolean("bootloader_packages_installed", true);
  275.       }
  276.       else if( size( OSRBoot::missing_packages ) != 0 )
  277.       {
  278.         OSRSummary::DetectError("",
  279.             // summary (error) text, %1 are packages
  280.             sformat(_("Missing packages needed by the boot loader:<br>%1"),
  281.             mergestring(OSRBoot::missing_packages, "<br>")));
  282.  
  283.         OSRSummary::SetRepairSummary(
  284.             // popup text
  285.             OSRBoot::InstallLoaderPackage(bootloader,"", _("
  286. The following packages needed by the
  287. boot loader are not installed in the
  288. system.
  289. ")),
  290.                         // summary header
  291.                         _("Installing packages..."),
  292.                         // summary text
  293.                         _("Package installation was successful."),
  294.                         // summary text
  295.                         _("Missing packages were not installed."),
  296.                         // summary text
  297.                         _("Package installation was not successful."));
  298.       }
  299.       else
  300.       {
  301.         // summary (error) text
  302.         OSRSummary::DetectError("", _("Cannot initialize package database."));
  303.  
  304.         // popup header
  305.         if( Popup::AnyQuestion(_("Cannot Initialize the Package Database"),
  306.             // popup text
  307.             _("
  308. Could not initialize the package database.
  309. Probably, there is no valid package database
  310. on this computer.
  311. To check the package database,
  312. press Retry Scanning.
  313. Otherwise press Cancel and continue with other tests.
  314. "),
  315.             // button label
  316.             _("&Retry Scanning"), Label::CancelButton(), `focus_yes) )
  317.         {
  318.           OSRStatus::RestartScan("check_package_database");
  319.           return true;
  320.         }
  321.         OSRStatus::RepairOmit();
  322.       }
  323.       return true;
  324.   }
  325.  
  326.  
  327.   /**
  328.    * Verifying installed boot loader packages
  329.    */
  330.   define boolean OSRBootloaderPackagesVerified()``{
  331.  
  332.       string bootloader = OSRCommon::RequireString("bootloader_type");
  333.       if( OSRBoot::CheckLoaderPackages(bootloader, "", "verify" ) )
  334.       {
  335.  
  336.         OSRSummary::DetectOK("", sformat(
  337. // summary text, %1 are packages
  338. _("Packages needed by the boot loader were checked successfully:<br>%1"),
  339.             mergestring(OSRBoot::BootloaderPackages(bootloader), "<br>" )));
  340.  
  341.         OSRCommon::ProvideBoolean("bootloader_packages_vertified", true);
  342.       }
  343.       else
  344.       {
  345.         OSRSummary::DetectError("", sformat(
  346. // summary text (error), %1 are packages
  347. _("Packages needed by the boot loader were not checked successfully:<br>%1"),
  348.             mergestring(OSRBoot::missing_packages, "<br>")));
  349.  
  350.         OSRSummary::SetRepairSummary(
  351.             // popup text
  352.             OSRBoot::InstallLoaderPackage(bootloader, "", _("
  353. The state of the following packages
  354. needed by the boot loader is not
  355. valid. Press Repair to update
  356. these packages.
  357. ")),
  358.                         // summary header
  359.                         _("Updating packages..."),
  360.                         // summary text
  361.                         _("Successfully updated packages."),
  362.                         // summary text
  363.                         _("Packages were not updated."),
  364.                         // summary text
  365.                         _("Package update was not successful."));
  366.       }
  367.       return true;
  368.   }
  369.  
  370.   /**
  371.    * Check the boot loader version.
  372.    */
  373.   define boolean OSRBootloaderPackagesVersion()``{
  374.  
  375.       string bootloader = OSRCommon::RequireString("bootloader_type");
  376.       if( OSRBoot::CheckLoaderPackages(bootloader,"", "version" ) )
  377.       {
  378.         // summary text
  379.         OSRSummary::DetectOK("", sformat(_("Package versions are OK:<br>%1"),
  380.             mergestring(OSRBoot::PackageVersionStrings(bootloader,
  381.                 OSRBoot::BootloaderPackages(bootloader)), "<br>")));
  382.  
  383.     OSRCommon::ProvideBoolean("bootloader_packages_version", true);
  384.       }
  385.       else {
  386.         OSRSummary::DetectError("",
  387.             // summary text
  388.             sformat(_("Package versions are obsolete:<br>%1"),
  389.             mergestring(OSRBoot::PackageVersionStrings(bootloader,
  390.                 OSRBoot::missing_packages), "<br>")));
  391.  
  392.         OSRSummary::SetRepairSummary(
  393.             // popup text
  394.             OSRBoot::InstallLoaderPackage(bootloader, "", _("
  395. The following packages are 
  396. obsolete. Press Repair to update
  397. these packages.
  398. ")),
  399.                         // summary header
  400.                         _("Updating packages..."),
  401.                         // summary text
  402.                         _("Successfully updated packages."),
  403.                         // summary text
  404.                         _("Packages were not updated."),
  405.                         // summary text
  406.                         _("Package update was not successful."));
  407.       }
  408.       return true;
  409.   }
  410.  
  411.  
  412.   define boolean OSRBootloaderCheckInitrd() ``{
  413.  
  414.       if( OSRBoot::CheckInitrdModules("") )
  415.       {
  416.         // summary text
  417.         OSRSummary::DetectOK("", sformat(_("All needed initrd modules found")));
  418.         OSRCommon::ProvideBoolean("bootloader_initrd_valid", true);
  419.       }
  420.       else
  421.       {
  422.         OSRSummary::SetRepairSummary(OSRBoot::RepairInitrdModules(),
  423.                         // summary header
  424.                         _("Repairing missing initrd modules..."),
  425.                         // summary text
  426.                         _("Repair was successful."),
  427.                         // summary text
  428.                         _("Repair was skipped."),
  429.                         // summary text
  430.                         _("Repair was not successful."));
  431.       }
  432.       return true;
  433.   }
  434.  
  435.  
  436.   /**
  437.    *  Checks if the boot loader configuration file exists at
  438.    *  the standard location
  439.    */
  440.   define boolean OSRBootloaderConfExists() ``{
  441.  
  442.       string  bootloader    = OSRCommon::RequireString("bootloader_type");
  443.  
  444.       if ( OSRBoot::ExistsConf(bootloader, OSRSystem::TargetRoot() ))
  445.       {
  446.         // summary text
  447.         OSRSummary::DetectOK("",_("File exists"));
  448.         OSRCommon::ProvideBoolean("bootloader_conf_exists", true);
  449.       }
  450.       else
  451.       {
  452.         OSRSummary::DetectError("",
  453.             // summary text
  454.             _("Configuration file was not found or is empty"));
  455.  
  456.         OSRSummary::SetRepairSummary(OSRBoot::RepairConfig(bootloader,true),
  457.                         // summary header
  458.                         _("Creating new boot loader configuration file..."),
  459.                         // summary text
  460.                         _("Creation was not successful"),
  461.                         // summary text
  462.                         _("Creation was skipped"),
  463.                         // summary text
  464.                         _("Creation was not successful"));
  465.       }
  466.       return true;
  467.   };
  468.  
  469.  
  470.   /**
  471.    * Check boot loader conf file,
  472.    * e.g. /etc/lilo.conf or ( /etc/grub.conf && /boot/grub/menu.lst )
  473.    */
  474.   define boolean OSRBootloaderCheckConf()``{
  475.  
  476.       string  bootloader    = OSRCommon::RequireString("bootloader_type");
  477.  
  478.       if( OSRBoot::CheckConfig( bootloader, OSRSystem::TargetRoot(),
  479.                 OSRCommon::RequireString("root_device"),
  480.                 OSRCommon::RequireString("boot_device") ))
  481.       {
  482.         OSRSummary::DetectOK("",
  483.             // summary text
  484.             _("Boot loader configuration file check was successful"));
  485.         OSRCommon::ProvideBoolean("bootloader_conf_check", true);
  486.       }
  487.       else
  488.       {
  489.         OSRSummary::DetectError("",
  490.             // summary text
  491.             _("Boot loader configuration file contains errors"));
  492.         OSRSummary::SetRepairSummary(OSRBoot::RepairConfig(bootloader,true),
  493.                         // summary header
  494.                         _("Repairing boot loader configuration..."),
  495.                         // summary text
  496.                         _("Repair was successful"),
  497.                         // summary text
  498.                         _("Repair was skipped"),
  499.                         // summary text
  500.                         _("Repair was not successful"));
  501.       }
  502.       return true;
  503.   }
  504.  
  505.  
  506.   /**
  507.    *
  508.    */
  509.   define boolean OSRBootloaderAskUser()``{
  510.       string bootloader     = OSRCommon::RequireString("bootloader_type");
  511.       // summary header
  512.       string summary_header =_("Asking about boot loader...");
  513.  
  514.       // don't start OSRBootloaderAskUser twice
  515.       if( OSRCommon::RequireBoolean("bootloader_ask_user")) return true;
  516.  
  517.       y2milestone("ask the user! error was found before %1",
  518.         OSRBoot::bootloader_error_found );
  519.       //if no error was found ask the user
  520.       if( ! OSRBoot::bootloader_error_found )
  521.       {
  522.         // popup header
  523.         if ( Popup::AnyQuestion(_("Boot Loader Check"),
  524.             // popup text
  525.             _("
  526. No error found in the boot loader 
  527. settings of the system. 
  528.  
  529. It is sometimes possible that your
  530. boot loader is damaged anyway. The only way to
  531. detect such an exceptional case is to ask
  532. the user.
  533.  
  534. If you can shut down your system and have it 
  535. start correctly, you have a valid
  536. boot loader installation. In this case, 
  537. press Continue.
  538. If your system does not start correctly,
  539. press Repair.
  540. "),
  541.             // button label
  542.             _("&Repair"),
  543.             Label::ContinueButton(),
  544.             `focus_no
  545.             ))
  546.       {
  547.           // summary text
  548.           OSRSummary::DetectError(summary_header, _("Error detected by user..."));
  549.           OSRSummary::SetRepairSummary(OSRBoot::RepairConfig(bootloader,false),
  550.                         // summary header
  551.                         _("Repairing boot loader configuration..."),
  552.                         // summary text
  553.                         _("Repair was successful"),
  554.                         // summary text
  555.                         _("Repair was skipped"),
  556.                         // summary text
  557.                         _("Repair was not successful"));
  558.       }
  559.       else {
  560.           // summary text
  561.           OSRSummary::DetectOK(summary_header, _("No error found..."));
  562.       }
  563.       }
  564.       OSRCommon::ProvideBoolean("bootloader_ask_user", true);
  565.       return true;
  566.   }
  567.  
  568.   /**
  569.    *  Reset boot loader temporary settings.
  570.    */
  571.   define boolean OSRBootloaderReset() ``{
  572.  
  573.       OSRSystem::SetOrgRoot();
  574.       OSRBoot::Reset();
  575.       return true;
  576.   }
  577.  
  578.   define symbol OSRDirectBootloader()``{
  579.       y2milestone("Direct start boot loader");
  580.  
  581.       OSRBoot::root_device = OSRDirect::mounted_root_partition;
  582.       OSRBoot::boot_device = OSRFstab::BootDev();
  583.  
  584.       y2milestone("root_device_1 %1", OSRBoot::root_device);
  585.       y2milestone("boot_device_1 %1", OSRBoot::boot_device);
  586.       // patch storage entries for Boot::Set!!
  587.       map part = Storage::GetPartition( Storage::GetTargetMap(), 
  588.                                         OSRBoot::root_device );
  589.       part["mount"] = "/";
  590.       Storage::ChangeVolumeProperties(part);
  591.  
  592.       //if not boot device is specified use root device
  593.       if( OSRBoot::boot_device == "" )
  594.       {
  595.       OSRBoot::boot_device = OSRBoot::root_device;
  596.       }
  597.       else {
  598.       map part = Storage::GetPartition( Storage::GetTargetMap(), 
  599.                                         OSRBoot::boot_device );
  600.       part["mount"] = "/boot";
  601.       Storage::ChangeVolumeProperties(part);
  602.       }
  603.  
  604.       y2milestone("root_device_2 %1", OSRBoot::root_device);
  605.       y2milestone("boot_device_2 %1", OSRBoot::boot_device);
  606.  
  607.       Bootloader::Propose();
  608.  
  609.       // compare expected with actual boot, root device
  610.       if(  Bootloader::getBootDevice() != OSRBoot::boot_device )
  611.       {
  612.         y2error(" boot_device and Bootloader::getBootDevice differ");
  613.         Bootloader::setBootDevice (OSRBoot::boot_device);
  614.       }
  615.       if( Bootloader::getRootDevice() != OSRBoot::root_device )
  616.       {
  617.         y2error(" root_device and Bootloader::getRootDevice differ");
  618.         Bootloader::setRootDevice (OSRBoot::root_device);
  619.       }
  620.  
  621.       OSRBoot::root_mountpoint = OSRSystem::TargetRoot();
  622.  
  623.       OSRBoot::CheckInitrdModules( OSRSystem::TargetRoot());
  624.  
  625.       UI::NormalCursor();
  626.       OSRBoot::repair_grub_config();
  627.  
  628.       OSRFstab::Reset();
  629.       OSRFsck::Reset();
  630.       OSRBoot::Reset();
  631.  
  632.       return `next;
  633.   }
  634.  
  635.   //////////////////////////////////////////////////////////////////////
  636.   //
  637.   //  METHODS
  638.   //
  639.   //////////////////////////////////////////////////////////////////////
  640.  
  641.   /**
  642.    *  Initialization of the module map that contains all important information
  643.    *  for this module.
  644.    *
  645.    *  @return map The map that contains all information about the module osr_module_init.
  646.    */
  647.   define map OSRBootloaderInit() ``{
  648.  
  649.       y2milestone ("OSRBootloaderInit");
  650.  
  651.       return  $[
  652.           "name"              :  "osr_module_bootloader",
  653.                                  // module headline
  654.           "headline"          :  _("Boot Loader"),
  655.  
  656.           "global_entries"    : $[
  657.                       "boot_check" :
  658.                                   // module action label
  659.                       $[ "text" : _("Check Boot Loader Configuration"),
  660.                                   // bootloader module helptext
  661.                          "help" : _("
  662. <p>
  663. The boot loader is the first thing
  664. you should see after you turn
  665. on a computer with a Linux installion.
  666. Starting a Linux system without
  667. a boot loader is not possible.</P>
  668. ")+
  669.  
  670. _("<P>If you have installed more than
  671. one operating system on a computer,
  672. the boot loader allows you to select
  673. which system to start.</P>
  674. ") +
  675.  
  676. _("<P>For this check, the repair system 
  677. tries to detect the installed boot
  678. loader. Afterwards, the configuration
  679. files of the found boot loader are
  680. checked. If no boot loader or an error
  681. in the configuration is detected, you
  682. have the possibility to install a new
  683. boot loader. 
  684. </P>
  685. "),
  686.                          "requires" : [ "fstab_check" ]
  687.                       ]
  688.           ],
  689.           "static_provides" : $[],
  690.           "reset_methods"      : [
  691.                                       // summary
  692.                       $["summary"   : _("Resetting boot loader settings..."),
  693.                         "method"    : OSRBootloaderReset,
  694.                         "provides"  : 10
  695.                       ]
  696.           ],
  697.           // the sequence of the detection methods of this module
  698.           "detect_methods"    :  [
  699.                       $[ "name"   : "find_config_files",
  700.                                       // module method progress label
  701.                          "summary"  : _("Searching configuration files..."),
  702.                          "method"   : OSRBootloaderSysconfigFiles,
  703.                          "requires" :  ["valid_target", "root_mounted" ],
  704.                          "provides" :  ["config_files"],
  705.                          "group"    : "boot_check",
  706.                          "progress" : 10
  707.                       ],
  708.                       $[ "name"   : "find_bootloader_type",
  709.                                       // module method progress label
  710.                          "summary"  : _("Searching for boot loader..."),
  711.                          "method"   : OSRBootloaderType,
  712.                          "requires" :  ["config_files"],
  713.                          "provides" :  ["bootloader_type"],
  714.                          "group"    : "boot_check",
  715.                          "progress" : 10
  716.                       ],
  717.                      $[ "name"    : "find_boot_root",
  718.                          "summary"  : "",
  719.                          "method"   : OSRBootloaderBootRoot,
  720.                          "requires" :  ["bootloader_type"],
  721.                          "provides" :  ["boot_device", "root_device"],
  722.                          "group"    : "boot_check",
  723.                          "progress" : 10
  724.                       ],
  725.                       $[ "name"   : "bootloader_package_installed",
  726.                                       // module method progress label
  727.                          "summary"  : _("Searching for packages..."),
  728.                          "method"   : OSRBootloaderPackagesInstalled,
  729.                          "requires" :  ["bootloader_type", "boot_device", "root_device"],
  730.                          "provides" :  ["bootloader_packages_installed"],
  731.                          "group"    : "boot_check",
  732.                          "progress" : 10
  733.                       ],
  734.                       $[ "name" : "verify_bootloader_package",
  735.                                       // module method progress label
  736.                          "summary"  : _("Verifying packages..."),
  737.                          "method"   : OSRBootloaderPackagesVerified,
  738.                          "requires" :  ["bootloader_packages_installed"],
  739.                          "provides" :  ["bootloader_packages_vertified"],
  740.                          "group"    : "boot_check",
  741.                          "progress" : 10
  742.                       ],
  743.                       $[ "name" : "bootloader_package_version",
  744.                                       // module method progress label
  745.                          "summary"  : _("Checking versions..."),
  746.                          "method"   : OSRBootloaderPackagesVersion,
  747.                          "requires" :  ["bootloader_packages_vertified"],
  748.                          "provides" :  ["bootloader_packages_version"],
  749.                          "group"    : "boot_check",
  750.                          "progress" : 10
  751.                       ],
  752.                        $[ "name"    : "bootloader_initrd_modules",
  753.                                       // module method progress label
  754.                          "summary"  : _("Checking initrd modules..."),
  755.                          "method"   : OSRBootloaderCheckInitrd,
  756.                          "requires" :  ["bootloader_packages_version"],
  757.                          "provides" :  ["bootloader_initrd_valid"],
  758.                          "group"    : "boot_check",
  759.                          "progress" : 10
  760.                       ],
  761.                       $[ "name" : "bootloader_conf_exists",
  762.                                       // module method progress label
  763.                          "summary"  : _("Searching boot loader configuration file..."),
  764.                          "method"   : OSRBootloaderConfExists,
  765.                          "requires" :  ["bootloader_initrd_valid"],
  766.                          "provides" :  ["bootloader_conf_exists"],
  767.                          "group"    : "boot_check",
  768.                          "progress" : 10
  769.                       ],
  770.                       $[ "name" : "bootloader_conf_check",
  771.                                       // module method progress label
  772.                          "summary"  : _("Checking boot loader configuration file..."),
  773.                          "method"   : OSRBootloaderCheckConf,
  774.                          "requires" :  ["bootloader_conf_exists"],
  775.                          "provides" :  ["bootloader_conf_check"],
  776.                          "group"    : "boot_check",
  777.                          "progress" : 10
  778.                       ],
  779.                       $[ "name" : "bootloader_ask_user",
  780.                          "summary"  : "",
  781.                          "method"   : OSRBootloaderAskUser,
  782.                          "requires" :  ["bootloader_conf_check"],
  783.                          "provides" :  ["bootloader_ask_user"],
  784.                          "group"    : "boot_check",
  785.                          "progress" : 10
  786.                       ]
  787.           ],
  788.           "direct_methods"  : [
  789.                        $[
  790.                          "name"     : "direct_methods_booloader",
  791.                                           // module method action label
  792.                          "button_text"  : _("Install New Boot Loader"),
  793.                          "method"       : OSRDirectBootloader,
  794.                          "initial_only" : false,
  795.                          "description"  : _("
  796. If you do not see a boot menu after
  797. turning on your computer or after
  798. restarting, press this button to
  799. install a new boot loader.
  800. "),
  801.                          "visible"      : true,
  802.                          "initial_root" : true
  803.                        ]
  804.           ]
  805.       ];
  806.   }
  807.  
  808. }//EOF
  809.