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 / AutoInstall.ycp < prev    next >
Text File  |  2006-11-29  |  6KB  |  180 lines

  1. /**
  2.  * File:    modules/AutoInstall.ycp
  3.  * Package:    Auto-installation
  4.  * Summary:    Auto-installation related functions module
  5.  * Author:    Anas Nashif <nashif@suse.de>
  6.  *
  7.  * $Id: AutoInstall.ycp 30346 2006-04-21 12:40:09Z ug $
  8.  */
  9. {
  10.     module "AutoInstall";
  11.     textdomain "autoinst";
  12.  
  13.     import "Profile";
  14.     import "Mode";
  15.     import "Stage";
  16.     import "AutoinstConfig";
  17.     import "AutoInstallRules";
  18.     import "Report";
  19.     import "TFTP";
  20.  
  21.     global boolean autoconf = false;
  22.  
  23.     global define boolean callbackTrue() {
  24.         return true;
  25.     }
  26.  
  27.     global define boolean callbackFalse() {
  28.         return false;
  29.     }
  30.  
  31.     /**
  32.      * Read saved data in continue mode
  33.      * @return boolean true on success
  34.      */
  35.     global define boolean Continue()
  36.     {
  37.         //
  38.         // First check if there are some other control files availabe
  39.         // i.e. for post-installation only
  40.         //
  41.         boolean ret = false;
  42.         if ( SCR::Read(.target.size, AutoinstConfig::autoconf_file) != -1 )
  43.         {
  44.             y2milestone("XML Post installation data found: %1", AutoinstConfig::autoconf_file );
  45.             ret = Profile::ReadXML (   AutoinstConfig::autoconf_file  );
  46.             SCR::Execute(.target.bash, sformat("/bin/mv %1 %2",
  47.                         AutoinstConfig::autoconf_file, AutoinstConfig::cache));
  48.             return (ret);
  49.         }
  50.         else
  51.         {
  52.             ret = Profile::ReadProfileStructure ( AutoinstConfig::parsedControlFile );
  53.             if ( Profile::current == $[] || !ret ) {
  54.                 y2milestone( "No saved autoinstall data found" );
  55.                 return (false);
  56.             } else {
  57.                 y2milestone( "Found and read saved autoinst data");
  58.                 SCR::Execute(.target.remove, AutoinstConfig::parsedControlFile);
  59.                 return (true);
  60.             }
  61.         }
  62.  
  63.         return false;
  64.  
  65.     }
  66.  
  67.     /**
  68.      * Constructer
  69.      * @return void
  70.      */
  71.     global define void AutoInstall()
  72.     {
  73.         if (Stage::cont ())
  74.         {
  75.             boolean ret = Continue();
  76.             if (ret && size ( Profile::current ) > 0) {
  77.                 y2milestone("Enabling Auto-Installation mode");
  78.                 Mode::SetMode("autoinstallation");
  79.             } else if (Mode::autoinst ()) {
  80.                 y2milestone("No autoyast data found, switching back to manual installation");
  81.                 Mode::SetMode("installation");
  82.             }
  83.         }
  84.         else if (Stage::initial ())
  85.         {
  86.  
  87.             if ( SCR::Read(.target.size, AutoinstConfig::xml_tmpfile) != -1
  88.                     && size ( Profile::current ) == 0)
  89.             {
  90.                 y2milestone("autoyast: %1 found", AutoinstConfig::xml_tmpfile);
  91.                 // Profile is available and it has not been parsed yet.
  92.                 Profile::ReadXML(  AutoinstConfig::xml_tmpfile );
  93.             }
  94.         }
  95.         return;
  96.     }
  97.  
  98.  
  99.     /**
  100.      * Save configuration
  101.      * @return boolean true on success
  102.      */
  103.     global define boolean Save()
  104.     {
  105.         if (Mode::autoinst ())
  106.             return (Profile::SaveProfileStructure( AutoinstConfig::parsedControlFile ));
  107.         else
  108.             return true;
  109.     }
  110.  
  111.     /**
  112.      * Finish Auto-Installation by saving misc files
  113.      * @param string destdir
  114.      * @return void
  115.      */
  116.     global define void Finish ( string destdir )
  117.     {
  118.         list dircontents = (list)SCR::Read(.target.dir, AutoinstConfig::tmpDir
  119.                                 + "/pre-scripts/");
  120.         if (size(dircontents) > 0 )
  121.         {
  122.             SCR::Execute(.target.bash, "/bin/cp " +  AutoinstConfig::tmpDir
  123.                     + "/pre-scripts/* " + destdir + AutoinstConfig::scripts_dir);
  124.             SCR::Execute(.target.bash, "/bin/cp " +  AutoinstConfig::tmpDir
  125.                     + "/pre-scripts/logs/* " + destdir + AutoinstConfig::logs_dir);
  126.         }
  127.  
  128.         SCR::Execute(.target.bash, sformat("/bin/cp %1 %2%3",
  129.                     AutoinstConfig::xml_tmpfile ,  destdir ,  AutoinstConfig::xml_file) );
  130.         SCR::Execute(.target.bash, sformat("/bin/chmod 700 %1%2",
  131.                     destdir ,  AutoinstConfig::xml_file) );
  132.  
  133.         return;
  134.     }
  135.  
  136.  
  137.     /**
  138.      * Put PXE file on the boot server using tftp
  139.      * @return true on success
  140.      */
  141.     global boolean PXELocalBoot ()
  142.     {
  143.         string tmpdir = (string)SCR::Read(.target.tmpdir);
  144.         string hexfile = sformat("%1/%2", tmpdir, AutoInstallRules::hostid );
  145.         map pxe = Profile::current["pxe"]:$[];
  146.         string server = pxe["tftp-server"]:"";
  147.         if (server!="" && pxe["pxe_localboot"]:false)
  148.         {
  149.             y2milestone("putting pxe local boot file on server :%1", server);
  150.             string config = pxe["pxelinux-config"]:"";
  151.             string dir = pxe["pxelinux-dir"]:"pxelinux.cfg";
  152.             if (config == "")
  153.             {
  154.                 config = "DEFAULT linux\nLABEL linux\n  localboot 0";
  155.             }
  156.  
  157.             SCR::Write(.target.string, hexfile,  config);
  158.  
  159.             return TFTP::Put(server, dir + "/" + AutoInstallRules::hostid,
  160.                 hexfile );
  161.         }
  162.         return true;
  163.     }
  164.  
  165.     /**
  166.     * Turn off the second stage of autoyast
  167.     *
  168.     */
  169.     global boolean TurnOff () {
  170.         if( ! Profile::current["general","mode","second_stage"]:true ) {
  171.             y2milestone("switching from autoinstallation to manual installation in second stage");
  172.             SCR::Execute(.target.bash, "/bin/grep -v -i '^autoyast:' /etc/install.inf > /tmp/install.inf.new");
  173.             SCR::Execute(.target.bash, "/bin/mv /tmp/install.inf.new /etc/install.inf");
  174.         }
  175.     }
  176.  
  177. //EOF
  178. }
  179.  
  180.