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 / AutoinstConfig.ycp < prev    next >
Text File  |  2006-11-29  |  9KB  |  350 lines

  1. /**
  2.  * File:    modules/AutoinstConfig.ycp
  3.  * Module:    Auto-Installation
  4.  * Summary:    This module handles the configuration for auto-installation
  5.  * Authors:    Anas Nashif <nashif@suse.de>
  6.  *
  7.  * $Id: AutoinstConfig.ycp 29265 2006-03-22 14:48:47Z ug $
  8.  */
  9. {
  10.     module "AutoinstConfig";
  11.     textdomain "autoinst";
  12.  
  13.     import "Misc";
  14.     import "Mode";
  15.     import "Installation";
  16.     import "URL";
  17.  
  18.     include "autoinstall/xml.ycp";
  19.  
  20.  
  21.  
  22.  
  23.  
  24.     // Profile Repository
  25.     global string Repository = "";
  26.  
  27.     // Package Repository
  28.     global string PackageRepository = "";
  29.  
  30.     // Classes
  31.     global string classDir = "";
  32.  
  33.     // Current file name
  34.     global string currentFile = "";
  35.  
  36.     //
  37.     // Temporary directory for storing profile before installation starts
  38.     //
  39.     global string tmpDir = (string)SCR::Read( .target.tmpdir );
  40.  
  41.     //
  42.     // Main directory for data generated during installation
  43.     //
  44.     global string var_dir = "/var/adm/autoinstall";
  45.  
  46.     //
  47.     // Directory for the pre/post and chroot scripts
  48.     //
  49.     global string scripts_dir = var_dir + "/scripts";
  50.     global string initscripts_dir = var_dir + "/init.d";
  51.  
  52.     //
  53.     // Directory where log files of pre/post and chroot scripts are kept
  54.     //
  55.     global string logs_dir = var_dir + "/logs";
  56.  
  57.     //
  58.     // Destination dir
  59.     //
  60.     global string destdir = Installation::destdir;
  61.  
  62.  
  63.     //
  64.     // Cache directory
  65.     //
  66.     global string cache = var_dir + "/cache";
  67.  
  68.     //
  69.     // Temporary file name for retrieved system profile
  70.     //
  71.     global string xml_tmpfile = tmpDir + "/autoinst.xml";
  72.  
  73.     //
  74.     // Final location for retrieved system profile
  75.     //
  76.     global string xml_file = cache + "/installedSystem.xml";
  77.  
  78.  
  79.     //
  80.     // Direcotry for runtime operation data
  81.     //
  82.     global string runtime_dir = "/var/lib/autoinstall";
  83.  
  84.     //
  85.     // Directory where complete configuration files are kept.
  86.     //
  87.     global string files_dir = var_dir + "/files";
  88.  
  89.     //
  90.     // Directory to store profile for possible user manipulation.
  91.     //
  92.     global string profile_dir    = "/tmp/profile";
  93.  
  94.     //
  95.     // The user  modified version of the Profile
  96.     //
  97.     global string modified_profile = profile_dir + "/modified.xml";
  98.  
  99.  
  100.     global string autoconf_file = runtime_dir + "/autoconf/autoconf.xml";
  101.  
  102.     //
  103.     // Parsed data from XML control in YCP format
  104.     //
  105.     global string parsedControlFile = cache + "/autoinst.ycp";
  106.  
  107.  
  108.     global string remote_rules_location = "rules/rules.xml";
  109.     global string local_rules_location = tmpDir + "/rules";
  110.     global string local_rules_file = local_rules_location + "/rules.xml";
  111.  
  112.    // Data from command line
  113.     global map urltok = $[];
  114.  
  115.     global string scheme =  "";
  116.     global string host = "";
  117.     global string filepath = "";
  118.     global string directory = "";
  119.     global string port = "";
  120.     global string user = "";
  121.     global string pass = "";
  122.  
  123.  
  124.     //
  125.     // Default runlevel
  126.     //
  127.     global string default_rl = "5";
  128.  
  129.  
  130.     //
  131.     // Confirm installation
  132.     //
  133.     global boolean Confirm = true;
  134.  
  135.  
  136.     global string OriginalURI = "";
  137.  
  138.     global string message = "";
  139.  
  140.     // Class merging.
  141.     // lists not to be merged, instead they will be "added"
  142.     //
  143.     global list<string> dontmerge = [];
  144.  
  145.     //
  146.     // Halt after initial phase
  147.     //
  148.     global boolean Halt = false;
  149.  
  150.     //
  151.     // Dont Hard Reboot
  152.     //
  153.     global boolean ForceBoot = false;
  154.  
  155.     //
  156.     // Show Reboot Message
  157.     //
  158.     global boolean RebootMsg = false;
  159.  
  160.  
  161.     //
  162.     // remote profile (invented for pre-probing of s390)
  163.     // in case of a remote profile, the profile can be fetched
  164.     // before the probing stage DASD module can has run
  165.     //
  166.     global boolean remoteProfile = true;
  167.  
  168.     include "autoinstall/io.ycp";
  169.  
  170.  
  171.     /**
  172.      * Return location of profile from command line.
  173.      * @return map with protocol, server, path
  174.      * @example autoyast=http://www.server.com/profiles/
  175.      */
  176.     global define boolean ParseCmdLine (string autoinstall)
  177.         ``{
  178.         import "URL";
  179.  
  180.         map result = $[];
  181.         string cmdLine = "";
  182.  
  183.         if (size(autoinstall) > 0   )
  184.         {
  185.             cmdLine = autoinstall;
  186.             if (cmdLine == "default")
  187.             {
  188.                 result["scheme"] = "file";
  189.                 result["path"]   = "/autoinst.xml";
  190.             }
  191.             else
  192.             {
  193.                 result = URL::Parse (cmdLine);
  194.                 OriginalURI = cmdLine;
  195.             }
  196.         }
  197.  
  198.  
  199.         if (result["scheme"]:"" == "")
  200.         {
  201.             // Autoinstall mode was not activated from command line.
  202.             // There must be a floppy with an 'autoinst.xml' in order
  203.             // to be able to reach this point, so we set floppy with
  204.             // autoinst.xml as the control file.
  205.  
  206.             result = add(result, "scheme", "floppy");
  207.             result = add(result, "path","/autoinst.xml");
  208.         }
  209.         urltok = result;
  210.  
  211.         scheme        = urltok["scheme"]:"default";
  212.         host        = urltok["host"]:"";
  213.         filepath    = urltok["path"]:"";
  214.         port        = urltok["port"]:"";
  215.         user            = urltok["user"]:"";
  216.         pass        = urltok["pass"]:"";
  217.  
  218.         if( scheme == "default" || scheme == "file" || scheme == "floppy" ) {
  219.                 remoteProfile = false;
  220.         }
  221.         y2milestone("urltok = %1", urltok );
  222.         return true;;
  223.     }
  224.  
  225.  
  226.  
  227.     /**
  228.      * SetProtocolMessage ()
  229.      * @return void
  230.      */
  231.  
  232.     global define void SetProtocolMessage () ``{
  233.  
  234.         if (scheme == "floppy")
  235.         {
  236.             message =  _("Retrieving control file from floppy.");
  237.         }
  238.         else if (scheme == "tftp")
  239.         {
  240.             message =  sformat ( _("Retrieving control file (%1) from TFTP server: %2."), filepath,  host );
  241.         }
  242.         else if (scheme == "nfs")
  243.         {
  244.             message =  sformat ( _("Retrieving control file (%1) from NFS server: %2."), filepath, host );
  245.         }
  246.         else if (scheme == "http")
  247.         {
  248.             message =  sformat ( _("Retrieving control file (%1) from HTTP server: %2."), filepath, host );
  249.         }
  250.         else if (scheme == "ftp")
  251.         {
  252.             message =  sformat ( _("Retrieving control file (%1) from FTP server: %2."), filepath,  host );
  253.         }
  254.         else if (scheme == "file")
  255.         {
  256.             message =  sformat ( _("Copying control file from file: %1."),  filepath);
  257.         }
  258.         else if (scheme == "device")
  259.         {
  260.             message =  sformat ( _("Copying control file from device: /dev/%1."),  filepath );
  261.         }
  262.         else if (scheme == "default")
  263.         {
  264.             message =   _("Copying control file from default location.");
  265.         }
  266.         else
  267.         {
  268.             message =   _("Source unknown.");
  269.         }
  270.         return;
  271.     }
  272.  
  273.  
  274.     /**
  275.      * Save Configuration global settings
  276.      * @return    void
  277.      */
  278.     global define void Save ()
  279.         ``{
  280.         // Write sysconfig variables.
  281.         y2milestone("Saving configuration data");
  282.  
  283.         SCR::Write( .sysconfig.autoinstall.REPOSITORY, Repository );
  284.         SCR::Write( .sysconfig.autoinstall.CLASS_DIR, classDir);
  285.  
  286.         return;
  287.     }
  288.  
  289.     /**
  290.      * Constructor
  291.      * @return void
  292.      */
  293.     global define void AutoinstConfig ()
  294.         ``{
  295.         if (Mode::autoinst ())
  296.         {
  297.             any autoinstall = SCR::Read(.etc.install_inf.AutoYaST);
  298.             if (autoinstall != nil && is ( autoinstall , string ) )
  299.             {
  300.                 ParseCmdLine((string) autoinstall);
  301.                 y2milestone("cmd line=%1", autoinstall );
  302.                 SetProtocolMessage();
  303.             }
  304.         }
  305.         else if (Mode::config () )
  306.         {
  307.             // Load configuration data from /etc/sysconfig/autoinstall
  308.             Repository = Misc::SysconfigRead( .sysconfig.autoinstall.REPOSITORY, "/var/lib/autoinstall/repository/");
  309.             classDir = Misc::SysconfigRead( .sysconfig.autoinstall.CLASS_DIR, Repository + "/classes" );
  310.             string tmp_dontmerge = Misc::SysconfigRead( .sysconfig.autoinstall.XSLT_DONTMERGE, "addon,conf" );
  311.  
  312.             dontmerge = splitstring(tmp_dontmerge, ",");
  313.  
  314.             // Set the defaults, just in case.
  315.             if (Repository == "" || Repository == nil )
  316.             {
  317.                 Repository = "/var/lib/autoinstall/repository";
  318.             }
  319.         } 
  320.         else if (Mode::test () && Mode::normal ())
  321.         {
  322.             local_rules_file = (string)WFM::Args(1);
  323.         }
  324.         return;
  325.     }
  326.  
  327.     global string MainHelp() {
  328.         string main_help = _("<h3>AutoYaST Configuration Management System</h3>
  329. <p>Almost all resources of the control file can be
  330. configured using the configuration management system.</p>
  331. ")
  332.             +
  333. _("<p>Most of the modules used to create the configuration are identical to those available
  334. through the YaST2 Control Center. Instead of configuring this system, the data
  335. entered is collected and exported to the control file that can be used to
  336. install another system using AutoYaST.
  337. </p>
  338. ")
  339.             +
  340. _("<p>In addition to the existing and familiar modules,
  341. new interfaces were created for special and complex configurations, including
  342. partitioning, general options, and software.</p>
  343. ");
  344.         return  main_help;
  345.     }
  346.  
  347.  
  348.  
  349. }
  350.