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 / OSRSwap.ycp < prev    next >
Text File  |  2006-11-29  |  4KB  |  149 lines

  1. /**
  2.  *  File:
  3.  *    OSRSwap.ycp
  4.  *
  5.  *  Module:
  6.  *    YaST OS Repair. Automatic error detection & repair tool for Linux.
  7.  *
  8.  *  Summary:
  9.  *    YaST OS Repair. Automatic error detection & repair tool for Linux.
  10.  *
  11.  *  Author:
  12.  *    Johannes Buchhold <jbuch@suse.de>
  13.  *
  14.  * $Id: OSRSwap.ycp 25357 2005-09-05 15:16:52Z jsuchome $
  15.  */
  16. {
  17.   module "OSRSwap";
  18.  
  19.   import "OSRExecute";
  20.   import "OSRPopup";
  21.  
  22.   import "Mode";
  23.   import "Storage";
  24.   import "Partitions";
  25.  
  26.   textdomain "repair";
  27.  
  28.   /**
  29.    * Create swap area on a swap partition.
  30.    */
  31.   global define symbol Repair( string target )``{
  32.  
  33.       //////////////////////////////////////////////////////////////////////////
  34.       //
  35.       //  Repair swap area with mkswap
  36.       //
  37.       //////////////////////////////////////////////////////////////////////////
  38.  
  39.       // "%1": will be replaced with "/dev/hda" or "/dev/sda" ...
  40.       string error_message = sformat(_("
  41. The partition %1 has the file system ID 130, but
  42. contains no valid swap area. To create
  43. a valid swap area, press Repair.
  44.  
  45. Press Skip to not perform the repair.
  46. "), target);
  47.  
  48.       // helptext 1/2
  49.       string help_text         = _("
  50. <p>A partition with the ID 130 should be 
  51. a Linux swap partition. All swap partitions
  52. need a valid swap area, which is created with
  53. the tool mkswap.</p>
  54. ") +
  55.  
  56.       // helptext 2/2
  57. _("<p>If you know how to use mkswap, 
  58. close this tool and create a new swap area
  59. on the damaged swap partition. Otherwise
  60. close this help dialog and press
  61. Repair for automatic
  62. repair.</p>
  63. ");
  64.  
  65.       while( true )
  66.       {
  67.       if (!OSRPopup::Repair(_("Error Detected"), error_message, help_text))
  68.           return `cancel;
  69.  
  70.       UI::OpenDialog(`VBox(`VSpacing(1),
  71.                    `Label(_("Creating swap area...")),
  72.                    `VSpacing(1)));
  73.  
  74.       boolean ret = OSRExecute::Command(.local.bash,"/sbin/mkswap "+target);
  75.  
  76.       UI::CloseDialog();
  77.       if ( ret ) return `ok;
  78.       }
  79.   };
  80.  
  81.   /**
  82.    *  Get all valid swap-partitions.
  83.    *  @return list The list of valid swap-partitions.
  84.    */
  85.   global define list<string> Partitions() ``{
  86.  
  87.     list<string> ret = [];
  88.     foreach (string dev, map disk, (map<string,map<string,any> >)Storage::GetTargetMap(), ``{
  89.     if( disk["type"]:`CT_UNKNOWN==`CT_DISK )
  90.     {
  91.         list l = filter (map p, disk["partitions"]:[], ``(
  92.         !p["delete"]:false &&
  93.         (p["fsid"]:0 == Partitions::fsid_swap ||
  94.          p["detected_fs"]:nil == `swap))
  95.         );
  96.  
  97.         ret = (list<string>) union (ret, maplist (map p, (list<map<string,any> >)l,
  98.                               ``(p["device"]:"")));
  99.     }
  100.     });
  101.  
  102.     y2debug ("GetPartitionList ret=%1", ret );
  103.     return ret;
  104.   };
  105.  
  106.  
  107.   /**
  108.    *  Returns a list of names (e.g. ["/dev/hda1", "/dev/hdb3"]) of all
  109.    *    partitions that can be mounted to the system as swap out of
  110.    *    the specified list.
  111.    *
  112.    *  @param list partition_list A list of partitions out of which
  113.    *    the "swapable" partitions are to be returned,
  114.    *    e.g. ["/dev/hda1", "/dev/hdb3"] -
  115.    *  @return list The list of partition names that were successfully added
  116.    *    to the system as swap partitions.
  117.    */
  118.   global define list<string> ValidPartitions(list<string> partition_list) ``{
  119.  
  120.       list<string> swap_possible_list = [];
  121.       list already_swapped_on = Storage::SwappingPartitions();
  122.  
  123.       foreach(string partition_item, partition_list, ``{
  124.  
  125.       if (contains(already_swapped_on, partition_item) || Mode::test ())
  126.       {
  127.           // this partition is already swapped on,so it seems to be swapable
  128.           swap_possible_list = add( swap_possible_list, partition_item );
  129.       }
  130.       else
  131.       {
  132.           // run /sbin/swapon
  133.           if ( WFM::Execute (.local.bash, "/sbin/swapon " + partition_item )  == 0)
  134.           {
  135.           // run /sbin/swapoff
  136.           if( WFM::Execute (.local.bash,  "/sbin/swapoff " + partition_item ) == 0 ) {
  137.               swap_possible_list = add(swap_possible_list, partition_item);
  138.           }
  139.           else {
  140.               y2error("swapoff paritition %1 is not possible",partition_item);
  141.           }
  142.           }
  143.       }
  144.       });
  145.       return swap_possible_list;
  146.   };
  147.  
  148. }//EOF
  149.