home *** CD-ROM | disk | FTP | other *** search
- ### -*-perl-*-
-
- # This is a new 2 stage swap module
- # select_swap, init_swap
-
- @swappars = ();
-
- sub select_swap {
- local ( $found, @swapinfolist, $msg, $ent, $par, $blk );
- local ( $p, $r );
-
- &rhs_infobox ("Swap Space",
- <<EOM
- >
- Looking for swap partitions...
- >
- EOM
- , 50);
-
- @swapinfolist = ();
- $found = 0;
- open(SAVEERR, ">&STDERR");
- open(STDERR, ">/dev/null");
- open(PROC, "fdisk -l |") || die "Can't call fdisk!";
- while (<PROC>) {
- if (/^(.{10}).{5}(.{31}).*Linux swap$/) {
- $p = $1; $r = $2;
- $p =~ s/\s$//;
- if (! &member($p, @swappars)) {
- $swapinfolist[@swapinfolist] = "$p $r";
- }
- $found = 1;
- }
- }
- close PROC;
- open(STDERR, ">&SAVEERR");
-
- if (! $found) {
- &rhs_msgbox("Notice",
- <<EOM
- >
- No swap partitions were found.
- >
- If this is an error,
- back up and reconstruct your partitions. Swap
- partitions must be designated as type 82.
- >
- EOM
- , 60);
- return 0;
- }
-
- if (@swapinfolist == 0) {
- &rhs_msgbox("Notice",
- <<EOM
- >
- All swap partitions are active.
- >
- EOM
- , 45);
- return 1;
- }
-
- foreach $ent (@swapinfolist) {
- $ent =~ /^(.{10}).{22}(.{8})/;
- $par = $1;
- $blk = $2;
- $par =~ s/\s$//;
- if (&rhs_yesno("Add Swap",
- <<EOM
- >
- This appears to be a swap partition:
- >
- > Device Begin Start End Blocks
- >$ent
- >
- Do you want to use this as a swap partition?
- >
- EOM
- , 52)) {
- $swappars[@swappars] = $par;
- $swapparsblk{$par} = $blk;
- }
- }
-
- return 1;
- }
-
- sub init_swap {
- local ($ent, $ret);
-
- open(FD, ">/tmp/swap");
-
- foreach $ent (@swappars) {
- print FD "$ent\n";
- &rhs_infobox ("Format Swap",
- <<EOM
- >
- Formatting and initializing $ent as swapspace.
- >
- This may take a minute.
- >
- EOM
- , 70);
- $ret = &invoke("mkswap -c $ent $swapparsblk{$ent}");
- $ret += &invoke("swapon $ent > /dev/null") unless ($ret);
- if ($ret) {
- &rhs_msgbox ("Format Swap",
- <<EOM
- >
- An error occurred while setting up $ent as swapspace.
- >
- EOM
- , 50);
- }
- }
-
- close FD;
-
- return 1;
- }
-
- sub swap_off {
- local ( $ent, @result );
-
- @result = ();
-
- if (@swappars == 0) {
- &rhs_msgbox("Error",
- <<EOM
- >
- No swap partitions are active.
- >
- EOM
- , 60);
- return 1;
- }
-
- foreach $ent (@swappars) {
- if (&rhs_yesno("Swap Off",
- <<EOM
- >
- Turn off swapping on device $ent ?
- >
- EOM
- , 60)) {
- &invoke("swapoff $ent");
- } else {
- push(@result, $ent);
- }
- }
-
- @swappars = @result;
- return 1;
- }
-
- sub finish_swap {
-
- local ( $ent );
-
- open(FD, ">>$fsmount/etc/fstab");
-
- print FD
- <<EOM
-
- #
- # Swap partitions
- #
-
- EOM
- ;
-
- foreach $ent (sort @swappars) {
- printf(FD "%-30s %-15s %-6s %s\n", $ent, "none", "swap", "sw");
- }
-
- close FD;
- }
-
- sub swap_reset {
-
- local ( $ent );
-
- foreach $ent (@swappars) {
- &invoke("swapoff $ent");
- }
- @swappars = ();
- }
-
- #####################
- 1;
-