home *** CD-ROM | disk | FTP | other *** search
/ Caldera Network Desktop 1.0 / caldera-network-desktop-1.0.bin / images / ramdisk2.img / usr / lib / perl / swap < prev    next >
Text File  |  1995-10-06  |  3KB  |  192 lines

  1. ### -*-perl-*-
  2.  
  3. # This is a new 2 stage swap module
  4. # select_swap, init_swap
  5.  
  6. @swappars = ();
  7.  
  8. sub select_swap {
  9.     local ( $found, @swapinfolist, $msg, $ent, $par, $blk );
  10.     local ( $p, $r );
  11.  
  12.     &rhs_infobox ("Swap Space",
  13. <<EOM
  14. >
  15. Looking for swap partitions...
  16. >
  17. EOM
  18.           , 50);
  19.  
  20.     @swapinfolist = ();
  21.     $found = 0;
  22.     open(SAVEERR, ">&STDERR");
  23.     open(STDERR, ">/dev/null");
  24.     open(PROC, "fdisk -l |") || die "Can't call fdisk!";
  25.     while (<PROC>) {
  26.         if (/^(.{10}).{5}(.{31}).*Linux swap$/) {
  27.         $p = $1; $r = $2;
  28.         $p =~ s/\s$//;
  29.         if (! &member($p, @swappars)) {
  30.         $swapinfolist[@swapinfolist] = "$p $r";
  31.         }
  32.         $found = 1;
  33.         }
  34.     }
  35.     close PROC;
  36.     open(STDERR, ">&SAVEERR");
  37.  
  38.     if (! $found) {
  39.     &rhs_msgbox("Notice",
  40. <<EOM
  41. >
  42. No swap partitions were found.
  43. >
  44. If this is an error, 
  45. back up and reconstruct your partitions. Swap 
  46. partitions must be designated as type 82.
  47. >
  48. EOM
  49.             , 60);
  50.     return 0;
  51.     }
  52.  
  53.     if (@swapinfolist == 0) {
  54.     &rhs_msgbox("Notice",
  55. <<EOM
  56. >
  57. All swap partitions are active.
  58. >
  59. EOM
  60.             , 45);
  61.     return 1;
  62.     }
  63.  
  64.     foreach $ent (@swapinfolist) {
  65.         $ent =~ /^(.{10}).{22}(.{8})/;
  66.         $par = $1;
  67.         $blk = $2;
  68.     $par =~ s/\s$//;
  69.     if (&rhs_yesno("Add Swap",
  70. <<EOM
  71. >
  72. This appears to be a swap partition:
  73. >
  74. >   Device  Begin   Start     End  Blocks
  75. >$ent
  76. >
  77. Do you want to use this as a swap partition?
  78. >
  79. EOM
  80.              , 52)) {
  81.         $swappars[@swappars] = $par;
  82.         $swapparsblk{$par} = $blk;
  83.     }
  84.     }
  85.  
  86.     return 1;
  87. }
  88.  
  89. sub init_swap {
  90.     local ($ent, $ret);
  91.  
  92.     open(FD, ">/tmp/swap");
  93.     
  94.     foreach $ent (@swappars) {
  95.     print FD "$ent\n";
  96.     &rhs_infobox ("Format Swap",
  97. <<EOM
  98. >
  99. Formatting and initializing $ent as swapspace.
  100. >
  101. This may take a minute.
  102. >
  103. EOM
  104.           , 70);
  105.     $ret = &invoke("mkswap -c $ent $swapparsblk{$ent}");
  106.     $ret += &invoke("swapon $ent > /dev/null") unless ($ret);
  107.     if ($ret) {
  108.         &rhs_msgbox ("Format Swap",
  109. <<EOM
  110. >
  111. An error occurred while setting up $ent as swapspace.
  112. >
  113. EOM
  114.           , 50);
  115.     }
  116.     }
  117.  
  118.     close FD;
  119.  
  120.     return 1;
  121. }
  122.  
  123. sub swap_off {
  124.     local ( $ent, @result );
  125.  
  126.     @result = ();
  127.  
  128.     if (@swappars == 0) {
  129.     &rhs_msgbox("Error",
  130. <<EOM
  131. >
  132. No swap partitions are active.
  133. >
  134. EOM
  135.             , 60);
  136.     return 1;
  137.     }
  138.  
  139.     foreach $ent (@swappars) {
  140.     if (&rhs_yesno("Swap Off",
  141. <<EOM
  142. >
  143. Turn off swapping on device $ent ?
  144. >
  145. EOM
  146.                , 60)) {
  147.         &invoke("swapoff $ent");
  148.     } else {
  149.         push(@result, $ent);
  150.     }
  151.     }
  152.  
  153.     @swappars = @result;
  154.     return 1;
  155. }
  156.  
  157. sub finish_swap {
  158.  
  159.     local ( $ent );
  160.  
  161.     open(FD, ">>$fsmount/etc/fstab");
  162.  
  163.     print FD
  164. <<EOM
  165.  
  166. #
  167. # Swap partitions
  168. #
  169.  
  170. EOM
  171.     ;
  172.  
  173.     foreach $ent (sort @swappars) {
  174.     printf(FD "%-30s %-15s %-6s %s\n", $ent, "none", "swap", "sw");
  175.     }
  176.  
  177.     close FD;
  178. }
  179.  
  180. sub swap_reset {
  181.  
  182.     local ( $ent );
  183.  
  184.     foreach $ent (@swappars) {
  185.     &invoke("swapoff $ent");
  186.     }
  187.     @swappars = ();
  188. }
  189.  
  190. #####################
  191. 1;
  192.