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 / clients / inst_prepdisk.ycp < prev    next >
Text File  |  2006-11-29  |  5KB  |  152 lines

  1. /**
  2.  * Module:        inst_prepdisk.ycp
  3.  *
  4.  * Authors:        Mathias Kettner (kettner@suse.de) (initial)
  5.  *            Stefan Schubert (schubi@suse.de)
  6.  *            Klaus Kaempf (kkaempf@suse.de)
  7.  *
  8.  * Purpose:
  9.  * Displays a progress bar showing progress of disk preparation.
  10.  * The user has the opportunity to cancel the installation. The
  11.  * disks are partitioned. Swap is created and used. File systems
  12.  * are created for the new partitions. Mount points are created
  13.  * and mounted for the targets / and /boot.
  14.  *
  15.  *
  16.  * SCR:    Write(.disk + scrpath + .partitions, targetpartitions)
  17.  *    Execute (.target.mkdir, [ <mountpoint>, 0755] )
  18.  *    Execute (.target.mount, [<device>, <mountpoint>] )
  19.  *
  20.  *
  21.  * possible return values: `back, `abort `next
  22.  
  23.  *
  24.  * $Id: inst_prepdisk.ycp 27702 2006-02-07 18:15:33Z fehr $
  25.  */
  26.  
  27.  // TODO: - check for errors on non i386
  28.  //       - lvm?
  29.  
  30. {
  31.   textdomain "storage";
  32.   import "Installation";
  33.   import "Mode";
  34.   import "Stage";
  35.   import "Wizard";
  36.   import "Storage";
  37.   import "Hotplug";
  38.  
  39.   if (Mode::update ())
  40.     return `auto;
  41.  
  42.   include "partitioning/partition_defines.ycp";
  43.  
  44.   boolean test_mode        = Mode::test();
  45.   boolean this_is_for_real    = !test_mode;
  46.  
  47.   SCR::Write( .target.ycp, Storage::SaveDumpPath("targetMap_ps"), 
  48.               Storage::GetTargetMap() );
  49.  
  50. // Define macro that creates a dialog with progressbar
  51. define void MakefsDialog()
  52.     ``{
  53.     // html-format
  54.     // advise the user to wait for completion
  55.     // part 1 of 2
  56.     string helptext = _("<p>
  57. Please wait while your hard disk is prepared for installation...
  58. <br></p>");
  59.     if( !Stage::initial () )
  60.     {
  61.     helptext = _("<p>
  62. Please wait while your hard disk is prepared...
  63. <br></p>");
  64.     }
  65.     // rich-text format help text part 2 of 2
  66.     helptext = helptext + _("\
  67. <p>
  68. Depending on the size of your hard disk and your processor speed, this action
  69. might take some time.  Five minutes are not unusual for disks larger than 4 GB.
  70. Often, the progress meter does not show a linear progress. Even if it looks
  71. slow near the end (\"95 %\"), please be patient. The formatting tool 
  72. performs various checks. </p>");
  73.  
  74.     // The Wizard module sets a special protection mode for "Accept"
  75.     // buttons to prevent sloppy calls to Wizard::SetContents()
  76.     // from disabling it. This doesn't apply here, however -
  77.     // switching protection mode off.
  78.     UI::WizardCommand(`ProtectNextButton( false ) );
  79.     
  80.     // hard disk will be made ready for installing Linux
  81.     Wizard::SetContents(_("Preparing Your Hard Disk"),
  82.             `ProgressBar(`id(`progress), " ", 100),
  83.             helptext, false, false);
  84.     };
  85.  
  86.   y2milestone( "BEGINNING of inst_prepdisk" );
  87.  
  88.   // check for ppc-PReP/CHRP system, they need a special boot partition
  89.   // todo -> put this in a lib, we need it also in inst_custom_part ...
  90.  
  91.   MakefsDialog();
  92.  
  93.   y2milestone( "installation=%1", Stage::initial() );
  94.   symbol ret_val = `next;
  95.  
  96.   integer ret = Storage::CommitChanges();
  97.   y2milestone( "CommitChanges ret:%1", ret );
  98.   if( ret!=0 )
  99.       {
  100.       string txt = sformat(_("Failure occurred during following action:
  101. %2
  102.  
  103. System error code was: %1
  104. "), ret, Storage::LastAction() );
  105.       string ext = Storage::ExtendedErrorMsg();
  106.       if( size(ext)>0 )
  107.       {
  108.       txt = txt + "\n\n" + ext;
  109.       }
  110.       Popup::Error( txt );
  111.       ret_val = `abort;
  112.       }
  113.  
  114.   //mount proc and usbfs during installation
  115.   if( Stage::initial() )
  116.       {
  117.       Storage::WriteFstab();
  118.       /*
  119.        * If a kernel without initrd is booted, then there is a small window
  120.        * between mounting the root filesystem until /etc/init.d/boot
  121.        * mounts /dev as tmpfs mount. A few device nodes have to be on-disk,
  122.        * like /dev/console, /dev/null etc.
  123.        * During install time, provide the same set of device nodes to the chroot
  124.        * They are needed at the end for the bootloader installation.
  125.        */
  126.       string cmd = "mkdir -vp " + Storage::PathToDestdir("/dev") +
  127.       "; cp --preserve=all --recursive --remove-destination /lib/udev/devices/* " + Storage::PathToDestdir("/dev") +
  128.       "; mount -v --bind /dev " + Storage::PathToDestdir("/dev");
  129.       y2milestone( "cmd %1", cmd );
  130.       map m = (map) SCR::Execute(.target.bash_output, cmd );
  131.       y2milestone( "ret %1", m );
  132.       string destproc = Installation::scr_destdir+"/proc";
  133.       SCR::Execute (.target.mount, ["proc", destproc], "-t proc");
  134.       if (Hotplug::haveUSB)
  135.       {
  136.       SCR::Execute( .target.mount, ["usbfs", destproc +"/bus/usb"],
  137.             "-t usbfs" );
  138.       }
  139.       destproc = Installation::scr_destdir+"/sys";
  140.       SCR::Execute (.target.mount, ["sysfs", destproc], "-t sysfs");
  141.       }
  142.  
  143.   Storage::UpdateTargetMap();
  144.  
  145.   SCR::Write( .target.ycp, Storage::SaveDumpPath("targetMap_pe"), 
  146.           Storage::GetTargetMap() );
  147.  
  148.   y2milestone("END of inst_prepdisk.ycp");
  149.  
  150.   return ret_val;
  151. }
  152.