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 / modules / BootLILO.ycp < prev    next >
Text File  |  2006-11-29  |  7KB  |  268 lines

  1. /**
  2.  * File:
  3.  *      modules/BootLILO.ycp
  4.  *
  5.  * Module:
  6.  *      Bootloader installation and configuration
  7.  *
  8.  * Summary:
  9.  *      Module containing specific functions for LILO configuration
  10.  *      and installation
  11.  *
  12.  * Authors:
  13.  *      Jiri Srain <jsrain@suse.cz>
  14.  *
  15.  * $Id: BootLILO.ycp 25406 2005-09-06 13:47:39Z jsrain $
  16.  *
  17.  */
  18.  
  19. {
  20. module "BootLILO";
  21.  
  22. textdomain "bootloader";
  23.  
  24. import "Arch";
  25. import "BootCommon";
  26. import "Kernel";
  27. import "Mode";
  28. import "Pkg";
  29. import "Storage";
  30.  
  31. include "bootloader/routines/popups.ycp";
  32. include "bootloader/routines/dialogs_i386.ycp";
  33.  
  34. /**
  35.  * Propose sections to bootloader menu
  36.  * modifies internal sreuctures
  37.  */
  38. global void CreateSections () {
  39.     list<map<string,any> > out = [
  40.     BootCommon::CreateLinuxSection ("linux")
  41.     ];
  42.     list<string> others = (list<string>)Storage::GetForeignPrimary();
  43.     if (others != nil && size (others) > 0)
  44.     {
  45.     foreach (string o, others, {
  46.         list<string> parts = splitstring (o, " ");
  47.         while (parts[0]:" " == "")
  48.         parts = remove (parts, 0);
  49.         string dev = parts[0]:"";
  50.         parts = remove (parts, 0);
  51.         string label = mergestring (parts, " ");
  52.  
  53.         // don't add rewritten location (#19990)
  54.         if (dev != "" && label != ""
  55.         && dev != BootCommon::loader_device
  56.         && (
  57.             BootCommon::AddFirmwareToBootloader (BootCommon::mbrDisk)
  58.             || label != "Vendor diagnostics"
  59.         )
  60.         )
  61.         {
  62.         map<string,any> m = $[
  63.             "name" : BootCommon::translateSectionTitle (
  64.             BootCommon::removeBlanks (label)),
  65.             "original_name" : label,
  66.             "type" : "chainloader",
  67.             "chainloader" : dev,
  68.             "__auto" : true,
  69.             "__changed" : false,
  70.             "__devs" : [dev],
  71.         ];
  72.         out = add (out, m);
  73.         }
  74.     });
  75.     }
  76.     out = add (out, BootCommon::CreateLinuxSection ("failsafe"));
  77.     out = add (out, BootCommon::CreateLinuxSection ("memtest86"));
  78. //    out = add (out, BootCommon::CreateLinuxSection ("wildcard"));
  79.     out = filter (map<string,any> s, out, { return s != $[] && s != nil;});
  80.     BootCommon::sections = out;
  81. }
  82.  
  83. /**
  84.  * Propose global options of bootloader
  85.  * modifies internal structures
  86.  */
  87. global void CreateGlobals () {
  88.     BootCommon::globals = $[
  89.     "default" : BootCommon::sections[0, "name"]:"",
  90.     "timeout" : "8",
  91.     "gfxmenu" : "/boot/message",
  92.     "prompt" : "1",
  93.     ];
  94. }
  95.  
  96. // general functions
  97.  
  98.     /**
  99.       * Propose bootloader settings
  100.       */
  101.     global define void Propose () ``{
  102.     y2debug ("Started propose: Glob: %1, Sec: %2",
  103.         BootCommon::globals, BootCommon::sections);
  104.     BootCommon::i386LocationProposal ();
  105.  
  106.     if (BootCommon::sections == nil || size (BootCommon::sections) == 0)
  107.     {
  108.         CreateSections ();
  109.         BootCommon::kernelCmdLine = Kernel::GetCmdLine ();
  110.     }
  111.     else
  112.     {
  113.             if (Mode::autoinst ())
  114.             {
  115.                 // TODO whatever will be needed
  116.         y2debug ("nothing to to in AI mode if sections exist");
  117.             }
  118.             else
  119.         BootCommon::FixSections (BootLILO::CreateSections);
  120.     }
  121.     if (BootCommon::globals == nil || size (BootCommon::globals) == 0)
  122.     {
  123.         CreateGlobals ();
  124.     }
  125.     else
  126.     {
  127.             if (Mode::autoinst ())
  128.             {
  129.                 // TODO whatever will be needed
  130.         y2debug ("nothing to to in AI mode if globals are defined");
  131.             }
  132.             else
  133.         BootCommon::FixGlobals ();
  134.     }
  135.  
  136.     y2milestone ("Proposed sections: %1", BootCommon::sections);
  137.     y2milestone ("Proposed globals: %1", BootCommon::globals);
  138.     }
  139.  
  140. /**
  141.  * Read settings from disk
  142.  * @param reread boolean true to force reread settings from system
  143.  * @return boolean true on success
  144.  */
  145. global boolean Read (boolean reread) {
  146.     BootCommon::InitializeLibrary (reread, "lilo");
  147.     if (reread)
  148.     {
  149.     BootCommon::ReadFiles ();
  150.     }
  151.     BootCommon::DetectDisks ();
  152.     boolean ret = BootCommon::Read (false);
  153.     BootCommon::loader_device = BootCommon::globals["stage1_dev"]:"";
  154.     return ret;
  155. }
  156.  
  157. /**
  158.  * Save all bootloader configuration files to the cache of the PlugLib
  159.  * PlugLib must be initialized properly !!!
  160.  * @param clean boolean true if settings should be cleaned up (checking their
  161.  *  correctness, supposing all files are on the disk
  162.  * @param init boolean true to init the library
  163.  * @param flush boolean true to flush settings to the disk
  164.  * @return boolean true if success
  165.  */
  166. global boolean Save (boolean clean, boolean init, boolean flush) {
  167.     BootCommon::globals["stage1_dev"] = BootCommon::loader_device;
  168.     boolean ret = BootCommon::Save (clean, init, flush);
  169.     return ret;
  170. }
  171.  
  172.  
  173. /**
  174.  * Update read settings to new version of configuration files
  175.  */
  176. global void Update () {
  177.     BootCommon::UpdateDeviceMap ();
  178.     BootCommon::UpdateSections (true, BootCommon::CreateLinuxSection);
  179.     BootCommon::UpdateGlobals ();
  180.     BootCommon::loader_device
  181.     = BootCommon::UpdateDevice (BootCommon::loader_device);
  182. }
  183.  
  184.     /**
  185.       * Write bootloader settings to disk
  186.       * @return boolean true on success
  187.       */
  188.     global define boolean Write () {
  189.     boolean ret = BootCommon::UpdateBootloader ();
  190.     BootCommon::updateMBR ();
  191.     if (BootCommon::InstallingToFloppy ())
  192.     {
  193.         if (! saveToFLoppyPopup ())
  194.         {
  195.         y2error ("Preparing floppy disk failed.");
  196.         ret = false;
  197.         }
  198.     }
  199.     // create backup copy first
  200.     if (BootCommon::createBackupBS ()
  201.         && BootCommon::getDeviceOfRaid (BootCommon::BootPartitionDevice)
  202.         != BootCommon::BootPartitionDevice
  203.         && contains (BootCommon::getPartitionList(`boot),
  204.         BootCommon::BootPartitionDevice))
  205.     {
  206.         y2milestone ("Creating backup copy to bootsector");
  207.         SCR::Execute (.target.bash, sformat ("/sbin/lilo -b %1",
  208.         BootCommon::BootPartitionDevice));
  209.     }
  210.  
  211.     ret = ret && BootCommon::InitializeBootloader ();
  212.     ret = ret && BootCommon::PostUpdateMBR ();
  213.     return ret;
  214.     }
  215.  
  216. global map<string,symbol()> Dialogs () {
  217.     return $[
  218.     "installation"    : i386InstallDetailsDialog,
  219.     "loader"    : i386LoaderDetailsDialog,
  220.     ];
  221. }
  222.  
  223.  
  224. /**
  225.  * Return map of provided functions
  226.  * @return a map of functions (eg. $["write":BootLILO::Write])
  227.  */
  228. global map<string, any> GetFunctions () {
  229.     return $[
  230.     "dialogs"    : Dialogs,
  231.     "read"        : Read,
  232.     "propose"    : Propose,
  233.     "save"        : Save,
  234.     "summary"    : BootCommon::i386Summary,
  235.     "update"    : Update,
  236.     "write"        : Write,
  237.     ];
  238. }
  239.  
  240. /**
  241.   * Initializer of LILO bootloader
  242.   */
  243. global void Initializer () {
  244.     y2milestone ("Called LILO initializer");
  245.     BootCommon::current_bootloader_attribs = $[
  246.     "propose" : true,
  247.     "read" : true,
  248.     "scratch" : true,
  249.     "restore_mbr" : true,
  250.     "bootloader_on_disk" : true,
  251.     ];
  252. }
  253.  
  254. /**
  255.   * Constructor
  256.   */
  257. global void BootLILO () {
  258.     BootCommon::bootloader_attribs["lilo"] = $[
  259.     "required_packages" : ["lilo"],
  260.     "loader_name" : "LILO",
  261.     "initializer" : BootLILO::Initializer,
  262.     ];
  263. }
  264.  
  265.  
  266.  
  267. }
  268.