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 / BootZIPL.ycp < prev    next >
Text File  |  2006-11-29  |  10KB  |  391 lines

  1. /**
  2.  * File:
  3.  *      modules/BootZIPL.ycp
  4.  *
  5.  * Module:
  6.  *      Bootloader installation and configuration
  7.  *
  8.  * Summary:
  9.  *      Module containing specific functions for ZIPL configuration
  10.  *      and installation
  11.  *
  12.  * Authors:
  13.  *      Jiri Srain <jsrain@suse.cz>
  14.  *
  15.  * $Id: BootZIPL.ycp 31597 2006-06-21 12:30:47Z uli $
  16.  *
  17.  */
  18.  
  19. {
  20.     module "BootZIPL";
  21.  
  22.     textdomain "bootloader";
  23.  
  24.     import "Kernel";
  25.     import "StorageControllers";
  26.     import "BootCommon";
  27.     import "Mode";
  28.     import "Stage";
  29.     import "Installation";
  30.  
  31.     include "bootloader/routines/popups.ycp";
  32.     include "bootloader/zipl/widgets.ycp";
  33.  
  34.  
  35. // local data
  36.  
  37.  
  38.     map<string,map<string,any> > hw_descr = $[
  39.     "ctc" : $[
  40.         "skeleton": "hwcfg-ctc",
  41.         "target" : "ctc-bus-ccw-%1",
  42.         "options" : $[
  43.         "CCW_CHAN_IDS" : "%1 %2",
  44.         "CCW_CHAN_MODE" : "%3",
  45.         ],
  46.     ],
  47.     "qeth" : $[
  48.         "skeleton" : "hwcfg-qeth",
  49.         "target" : "qeth-bus-ccw-%1",
  50.         "options" : $[
  51.         "CCW_CHAN_IDS" : "%1 %2 %3",
  52.         "CCW_CHAN_MODE" : "%4",
  53.         ],
  54.     ],
  55.     "iucv" : $[
  56.         "skeleton" : "hwcfg-iucv",
  57.         "target" : "iucv-id-%1",
  58.     ],
  59.     ];
  60.  
  61.  
  62. // misc. functions
  63.  
  64.     /**
  65.       * Update /etc/zip.conf before the update (fix kernel path)
  66.       */
  67.     global define void UpdateZiplConfBeforeUpdate () {
  68.     // update the partition layout if needed
  69.     // ?? FIXME any other conditions?
  70.     if (Mode::update ())
  71.     {
  72.         map output = (map)SCR::Execute (.target.bash_output, sformat (
  73.           "/bin/cp %1/etc/zipl.conf %1/etc/zipl.conf.YaST2save",
  74.           Installation::destdir));
  75.         y2milestone ("Result of backup original elilo.conf: %1", output);
  76.         output = (map)SCR::Execute (.target.bash_output, sformat (
  77.         "/bin/cp /usr/lib/YaST2/bin/update_zipl_conf %1/usr/lib/YaST2/bin/",
  78.         Installation::destdir
  79.         ));
  80.         y2milestone ("Result of copying from / to %1: %2",
  81.         Installation::destdir,
  82.         output
  83.         );
  84.         output = (map)SCR::Execute (.target.bash_output, sformat (
  85.         "chroot %1 /usr/lib/YaST2/bin/update_zipl_conf",
  86.         Installation::destdir));
  87.         if (output["exit"]:0 != 0)
  88.         {
  89.         y2error ("Update of /etc/zipl.conf failed: %1", output);
  90.         }
  91.         else
  92.         {
  93.         BootCommon::was_proposed = false;
  94.         BootCommon::was_read = false;
  95.         }
  96.     }
  97.     }
  98.  
  99.     /**
  100.       * Empty summary dialog
  101.       * @return symbol always `back
  102.       */
  103.     global define symbol runSummaryDialog () ``{
  104.     displayNoSupportPopup ();
  105.     return `back;
  106.     }
  107.  
  108.     /**
  109.       * Update /etc/sysconfig/hardware configuration
  110.       * Use data from install.inf file
  111.       * @return boolean true on success
  112.       */
  113.     global define boolean updateHardwareConfig () ``{
  114.     if (! Stage::initial () || Mode::update ())
  115.         return true;
  116.  
  117.     boolean failed = false;
  118.     string cfg = (string)SCR::Read (.etc.install_inf.Hardware);
  119.     y2milestone ("Read hardware configuration from install.inf: %1", cfg);
  120.     list<string> l = splitstring (cfg, ";");
  121.     foreach (string s, l, ``{
  122.         list<string> args = splitstring (s, ",");
  123.         args = maplist (string a, args, ``{
  124.         while (a != "" && substring (a, 0, 1) == " ")
  125.             a = substring (a, 1);
  126.         while (a != "" && substring (a, size (a) - 1, 1) == " ")
  127.             a = substring (a, 0, size (a) - 1);
  128.         return a;
  129.         });
  130.         string key = args[0]:"";
  131.         string a1 = args[1]:"";
  132.         string a2 = args[2]:"";
  133.         string a3 = args[3]:"";
  134.         string a4 = args[4]:"";
  135.         if (key != "")
  136.         {
  137.         map<string,any> descr = hw_descr[key]:$[];
  138.         string src = (string)(descr["skeleton"]:"");
  139.         string dst = sformat ((string)(descr["target"]:""),
  140.             a1, a2, a3, a4);
  141.         y2milestone ("Template: %1, Target: %2", src, dst);
  142.         string command = sformat (
  143.     "/bin/cp /etc/sysconfig/hardware/skel/%1 /etc/sysconfig/hardware/hwcfg-%2",
  144.             src, dst);
  145.         if (0 != SCR::Execute (.target.bash, command))
  146.         {
  147.             Report::Error (
  148.                 // error report
  149.             _("Copying hardware configuration template failed."));
  150.             failed = true;
  151.         }
  152.         path p = add (.sysconfig.hardware.value, dst);
  153.         foreach (string k, string v,
  154.             (map<string,string>)(descr["options"]:$[]),
  155.         ``{
  156.             path op = add (p, k);
  157.             v = sformat (v, a1, a2, a3, a4);
  158.             if (! SCR::Write (op, v))
  159.             failed = true;
  160.         });
  161.         }
  162.     });
  163.     if (! SCR::Write (.sysconfig.hardware, nil))
  164.         failed = true;;
  165.     return failed;
  166.     }
  167.  
  168.  
  169. // general functions
  170.  
  171.     /**
  172.       * Propose bootloader settings
  173.       */
  174.     global define void Propose () ``{
  175.     BootCommon::DetectDisks ();
  176.     string root_device = BootCommon::RootPartitionDevice;
  177.     map <string, any> file_desc = ( map<string, any> ) SCR::Execute( .target.bash_output, "echo $TERM" );
  178.     string env_term = file_desc[ "stdout" ]: "";
  179.     string termparm = "TERM=dumb";
  180.     if ( env_term == "linux\n" )
  181.     {
  182.       termparm = "TERM=linux console=ttyS0 console=ttyS1";
  183.     }
  184.     string parameters = sformat ("%1 %2 %3",
  185.       StorageControllers::dasdParam,
  186.       BootCommon::GetAdditionalKernelParams (),
  187.       termparm);
  188.  
  189.     BootCommon::globals = $[
  190.         "default":"ipl",
  191.         "menuname":"menu",
  192.         "prompt":"1",
  193.         "target":"/boot/zipl",
  194.         "timeout":"10"
  195.     ];
  196.     BootCommon::sections = [
  197.         $[
  198.         "append":parameters,
  199.         "initrd":"/boot/initrd",
  200.         "kernel":"/boot/image",
  201.         "name":"ipl",
  202.         "original_name":"ipl",
  203.         "root":BootCommon::RootPartitionDevice,
  204.         "target":"/boot/zipl",
  205.         "type":"image"
  206.         ],
  207.         $[
  208.         "append":parameters,
  209.         "initrd":"/boot/initrd",
  210.         "kernel":"/boot/image",
  211.         "name":"failsafe",
  212.         "original_name":"failsafe",
  213.         "root":BootCommon::RootPartitionDevice,
  214.         "target":"/boot/zipl",
  215.         "type":"image"
  216.         ]
  217.     ];
  218.     }
  219.  
  220. /**
  221.  * Read settings from disk
  222.  * @param reread boolean true to force reread settings from system
  223.  * @return boolean true on success
  224.  */
  225. global boolean Read (boolean reread) {
  226.     BootCommon::InitializeLibrary (reread, "zipl");
  227.     if (reread)
  228.     {
  229.     BootCommon::ReadFiles ();
  230.     }
  231.     BootCommon::DetectDisks ();
  232.     boolean ret = BootCommon::Read (false);
  233.     return ret;
  234. }
  235.  
  236. /**
  237.  * Save all bootloader configuration files to the cache of the PlugLib
  238.  * PlugLib must be initialized properly !!!
  239.  * @param clean boolean true if settings should be cleaned up (checking their
  240.  *  correctness, supposing all files are on the disk
  241.  * @param init boolean true to init the library
  242.  * @param flush boolean true to flush settings to the disk
  243.  * @return boolean true if success
  244.  */
  245. global boolean Save (boolean clean, boolean init, boolean flush) {
  246.     boolean ret = BootCommon::Save (clean, init, flush);
  247.     if (Mode::normal ())
  248.     return ret;
  249.  
  250.     updateHardwareConfig ();
  251.     return ret;
  252. }
  253.     /**
  254.       * Save all bootloader configuration files
  255.       * @return boolean true if success
  256.       */
  257. /*
  258. map settings = $[
  259.   "global":$[
  260.     "default":"ipl",
  261.     "menuname":"menu1",
  262.     "prompt":1,
  263.     "timeout":10
  264.   ],
  265.   "sections":[
  266.     $[
  267.       "append":"selinux=0 TERM=dumb elevator=cfq",
  268.       "initrd":"/boot/initrd",
  269.       "kernel":"/boot/image",
  270.       "name":"ipl",
  271.       "original_name":"ipl",
  272.       "root":BootCommon::RootPartitionDevice,
  273.       "target":"/boot/zipl",
  274.       "type":"image"
  275.     ],
  276.     $[
  277.       "append":"selinux=0 TERM=dumb",
  278.       "initrd":"/boot/initrd",
  279.       "kernel":"/boot/image",
  280.       "name":"failsafe",
  281.       "original_name":"ipl",
  282.       "root":BootCommon::RootPartitionDevice,
  283.       "target":"/boot/zipl",
  284.       "type":"image"
  285.     ]
  286.   ]
  287. ];*/
  288.  
  289.  
  290.     /**
  291.       * Display bootloader summary
  292.       * @return a list of summary lines
  293.       */
  294.     global define list<string> Summary () ``{
  295.     // summary
  296.     return [_("Install S390 Boot Loader")];
  297.     }
  298.  
  299.     /**
  300.       * Update read settings to new version of configuration files
  301.       */
  302.     global define void Update () ``{
  303.     y2milestone ("No update functionality implemented");
  304.     }
  305.  
  306.     /**
  307.       * Write bootloader settings to disk
  308.       * @return boolean true on success
  309.       */
  310.     global define boolean Write () ``{
  311.     boolean ret = BootCommon::UpdateBootloader ();
  312.     ret = ret && BootCommon::InitializeBootloader ();
  313.     return ret;
  314.     }
  315.  
  316.  
  317.     /**
  318.       * Update bootlaoder configuration sequence
  319.       * @param ws_data map of wizard sequencer data
  320.       * @return map modified map of wizard sequencer data
  321.       */
  322.     global define map FixSequence (map ws_data) ``{
  323.         map aliases = $[
  324.         "summary" : ``(BootZIPL::runSummaryDialog ()),
  325.         ];
  326.         ws_data["aliases"] = aliases;
  327.         return ws_data;
  328.     }
  329.  
  330.     /**
  331.       * Get the list of all dump devices
  332.       * @return list of all dump devices, as list of maps containg keys
  333.       *  "label", "target" and "dumpto"
  334.       */
  335. /*    global define list<map<string,string> > GetDumpDevices () ``{
  336.     list<map<string,string> > dd = maplist (list<map> d,
  337.         BootCommon::sections,
  338.     ``(
  339.         listmap (map e, d, ``(
  340.         $[ e["key"]:"": e["value"]:"" ]
  341.         ))
  342.     ));
  343.     return filter (map<string,string> s, dd, ``(
  344.         s["dumpto"]:"" != ""
  345.     ));
  346.     }*/
  347.  
  348.     /**
  349.       * Return map of provided functions
  350.       * @return a map of functions (eg. $["write":``(BootZIPL::Write ())])
  351.       */
  352.     global define map<string, any> GetFunctions () ``{
  353.     return $[
  354.         "read"    : Read,
  355.         "propose"    : Propose,
  356.         "save"    : Save,
  357.         "summary"    : Summary,
  358.         "update"    : Update,
  359.         "widgets"    : Widgets,
  360.         "write"    : Write,
  361.     ];
  362.     }
  363.  
  364.     /**
  365.       * Initializer of S390 bootloader
  366.       */
  367.     global define void Initializer () ``{
  368.     y2milestone ("Called S390 (zipl) initializer");
  369.     BootCommon::current_bootloader_attribs = $[
  370.         "section_title" : "label",
  371.         "kernel_key" : "image",
  372.         "propose" : true,
  373.         "read" : true,
  374.         "scratch" : true,
  375.     ];
  376.     }
  377.  
  378.  
  379. /**
  380.  * Constructor
  381.  */
  382. global void BootZIPL () {
  383.     BootCommon::bootloader_attribs["zipl"] = $[
  384.         "loader_name" : "zipl",
  385.     "required_packages" : [], // FIXME
  386.     "initializer" : BootZIPL::Initializer,
  387.     ];
  388. }
  389.  
  390. } // EOF
  391.