[prev in list] [next in list] [prev in thread] [next in thread] 

List:       linux-fai
Subject:    Re: Disk labels in setup_harddisks
From:       Devlin <devlin () softhome ! net>
Date:       2002-07-11 19:55:57
[Download RAW message or body]

The following patch fixes my last setup_harddisks patch.  I forgot to 
make $MPOptions{} use CheckOption() in the last one; this one does use 
it.  This is a patch to a clean setup_harddisks.

--- setup_harddisks.orig        Thu Jul 11 15:49:11 2002
+++ setup_harddisks     Thu Jul 11 15:49:02 2002
@@ -107,29 +107,28 @@
  #    "fstab-options":
  #         These options are copied to the fstab-file. The
  #         default is "default"
  #
  #   After the semicolon there could be extra options like:
-#     -i <bytes>   : Bytes per inodes
-#                    (only ext2/3 filesystem)
-#     -m <blocks>% : reserved blocks percentage for superuser
-#                    (only ext2/3 filesystem)
-#     -j          : format in ext3
-#     -c           : check for bad blocks
-#     format       : Always format this partition even if preserve
-#     lazyformat   : Do not format if partition has not moved
-#                    (useful for testing the installation)
-#     boot         : make this partition the boot-partition (the
-#                    linux root filesystem is the default)
-#     ext2         : Extended 2 filesystem (this is the default)
-#     swap         : swap partition
-#     dosfat16     : DOS 16bit FAT file system
-#     winfat32     : Win95 FAT32 file system
-#     writable     : mounts a preserved partition writable
-#     reiser       : reiserfs
-#       -h <hash>  : set reiserfs hash
-#       -v <ver>   : set reiserfs version
+#     -c             : check for bad blocks
+#     format         : Always format this partition even if preserve
+#     lazyformat     : Do not format if partition has not moved
+#                      (useful for testing the installation)
+#     boot           : make this partition the boot-partition (the
+#                      linux root filesystem is the default)
+#     ext2           : Extended 2 filesystem (this is the default)
+#       -i <bytes>   : Bytes per inodes
+#       -m <blocks>% : reserved blocks percentage for superuser
+#       -j          : format in ext3
+#       -L <label>   : use a disk label
+#     swap           : swap partition
+#     dosfat16       : DOS 16bit FAT file system
+#     winfat32       : Win95 FAT32 file system
+#     writable       : mounts a preserved partition writable
+#     reiser         : reiserfs
+#       -h <hash>    : set reiserfs hash
+#       -v <ver>     : set reiserfs version
  #
  use strict;
  # getopts variables:
  our ($opt_X, $opt_f, $opt_c, $opt_d);
  my $test;
@@ -307,10 +306,21 @@
      }
      ($ConfigFileExists == 0) && die "ERROR: no config file found\n";
  }

  #****************************************************
+# check for an option
+#****************************************************
+sub CheckOption{
+    # a list of all options that take string parameters
+    my $stringopts = "L";
+
+    if ( $_[1] == "" ) { return 1==0; }
+    return $_[0] =~ /\b(?<!-[$stringopts] )(?i:$_[1])\b/;
+}
+
+#****************************************************
  # parse config-file
  #****************************************************
  sub ParseConfigFile{
      my $size=""; my $mountpoint=""; my $device ="";
      my $fstaboptions=""; my $options=""; my $disk=""; my $command = "";
@@ -322,10 +332,11 @@
      (print "parsing config file: $filename\n");
      $disk = "";
      my $a = 1, my $paras ="", my $number=0;
      while (my $line = <FILE>){
         chomp($line);
+       $line =~ s/\s+/ /g;
         $a++;
         next if( $line =~ /^#|^\s*$/ );

         # disk_config - command
         if ($line =~ /^disk_config(.*)/i){
@@ -380,11 +391,11 @@
                     $mountpoint = "no$NofNotMoPart";
                 }
                 if($mountpoint eq "swap"){
                     $NofSwapPart++;
                     $mountpoint = "swap$NofSwapPart";
-                   ($options !~ /\bswap\b/i) && ($options .= " swap");
+                   !CheckOption($options, "swap") && ($options .= " 
swap");
                     ($fstaboptions) || ($fstaboptions = "sw");
                 }
                 if($mountpoint =~ m#^/#){
                     ($fstaboptions) || ($fstaboptions = "defaults");
                 }
@@ -394,11 +405,11 @@
                     $PrimPartNo++;
                     ($PrimPartNo == 3) && ($disk =~ /^sd/) && 
($PrimPartNo++);
                      ($PrimPartNo >4 ) && die "ERROR: Too much primary 
partitions (max 4).".
                                  " All logicals together need one 
primary too.\n";
                     $MountpointPart{$mountpoint} = 
PartName($disk,$PrimPartNo);
-                   if($options =~ /\bboot\b/i){
+                   if(CheckOption($options, "boot")){
                         ($BootPartition) && die "ERROR: only one 
partition can be bootable at a time.";
                         $BootPartition = $MountpointPart{$mountpoint};
                         $BOOT_DEVICE = $disk;
                     }
                 } else {
@@ -418,11 +429,11 @@
                           && die "ERROR: too much primary partitions 
(max 4).".
                                 " All logicals together need one primary 
too.\n";
                         $MountpointPart{$extmp} = 
PartName($disk,$PrimPartNo);
                         $DiskMountpoints{$disk} .= " $extmp";
                     }
-                   ($options =~ /\bboot\b/i) && die "ERROR: line $a, 
only primary partitions can be bootable.\n";
+                   CheckOption($options, "boot") && die "ERROR: line 
$a, only primary partitions can be bootable.\n";
                 }
                 ($DiskMountpoints{$disk} =~ /\b$mountpoint\b/)
                     && die "ERROR in config file line $a, Mountpoint 
redefined: $mountpoint\n$line\n";
                 $DiskMountpoints{$disk} .= " $mountpoint";
                 # size
@@ -458,11 +469,11 @@
                     $LastPresPart = $device;
                     ($MPMinSize{$mountpoint} < 1)
                       && die "ERROR: unable to preserve partitions of 
size 0.\n$line\n ";
                   } else {
                     # If not preserve we must know the filesystemtype
-                   ($options !~ 
/\b(ext2|ext3|auto|swap|dosfat16|winfat32|reiser)\b/i ) && 
($options .= " auto");
+                   CheckOption($options, 
"(ext2|ext3|auto|swap|dosfat16|winfat32|reiser)" ) && ($options .= " 
auto");
                   }
                 if($size =~ /^(\d*)(\-?)(\d*)$/){
                     $Min = $1;
                     $Min||= 1;
                     $Max = $3;
@@ -485,14 +496,14 @@
                     $MPPreserve{$mountpoint} = "";
                 }
                 # fstaboptions
                 $MPfstaboptions{$mountpoint} = $fstaboptions;
                 # extra options
-               ($options =~ /\b(ext[23]|auto)\b/i) && 
($MPID{$mountpoint} = 83); # Linux native
-               ($options =~ /\bswap\b/i) && ($MPID{$mountpoint} = 
82); # Linux swap
-               ($options =~ /\bdosfat16\b/i) && ($MPID{$mountpoint} = 
6); # DOS FAT 16bit (>=32MB, will be changed later)
-               ($options =~ /\bwinfat32\b/i) && ($MPID{$mountpoint} = 
"b"); # Win 95 FAT 32
+               CheckOption($options, "(ext[23]|auto)") && 
($MPID{$mountpoint} = 83); # Linux native
+               CheckOption($options, "swap") && ($MPID{$mountpoint} = 
82); # Linux swap
+               CheckOption($options, "dosfat16") && 
($MPID{$mountpoint} = 6); # DOS FAT 16bit (>=32MB, will be changed later)
+               CheckOption($options, "winfat32") && 
($MPID{$mountpoint} = "b"); # Win 95 FAT 32
                 $MPOptions{$mountpoint} = $options;
                 if($test == 1){
                     print 
"$mountpoint,$MPMinSize{$mountpoint}-$MPMaxSize{$mountpoint},";
                     print "$fstaboptions,$options";
                     ($MPPreserve{$mountpoint} eq "yes") && (print " 
Preserve: $MountpointPart{$mountpoint}");
@@ -586,11 +597,11 @@
         }
      }
      $EndPos = $DiskSize{$disk} - 1;
      &SetGroupPos($DynGroup,$StartPos,$EndPos);
      foreach $mountpoint(split(/\s/,$DiskMountpoints{$disk})) {
-       ($MPOptions{$mountpoint} =~ /\bdosfat16\b/i)
+       CheckOption($MPOptions{$mountpoint}, "dosfat16")
             && (($MPSize{$mountpoint} * $DiskUnits{$disk} * 
$sectorsize) < 32 * $megabyte)
                 && ($MPID{$mountpoint} = 4); # DOS 16-bit FAT <32MB
      }
  }

@@ -740,21 +751,21 @@
                  $mountpointname = "no mountpoint";
              } else {
                 $mountpointname = $mountpoint;
             }
             # preserved partition
-           if ( ($MPPreserve{$mountpoint} eq "yes") && 
($MPOptions{$mountpoint} !~ /\bformat\b/i)){
+           if ( ($MPPreserve{$mountpoint} eq "yes") && 
!CheckOption($MPOptions{$mountpoint}, "format")){
                 print "Preserve Partition $device";
                  if ($mountpoint =~ /^no$1/){
                      print " with no mountpoint\n";
                  } else {
                     print " with mountpoint $mountpoint\n";
                 }
                 next;
             }
             # lazy format
-           if ( ( $MPOptions{$mountpoint} =~ /\blazyformat\b/i )
+           if ( CheckOption( $MPOptions{$mountpoint}, "lazyformat" )
                && ($MPStart{$mountpoint} == $PartOldStartSec{$device})
                && (($MPStart{$mountpoint} + $MPSize{$mountpoint} - 1) == 
$PartOldEndSec{$device}) ){
                 print "Lazy format: $device";
                  if ($mountpoint =~ /^no$1/){
                      print " with no mountpoint";
@@ -777,11 +788,11 @@
                     (($? >> 8) == 0) || (die "\nMKSWAP ERROR:\n 
$result\n");
                 }
                 next;
             }
             # Linux Reiser file system
-           if ($MPOptions{$mountpoint} =~ /\breiser\b/i) {
+           if (CheckOption($MPOptions{$mountpoint}, "reiser")) {
                 print "Make Reiser Filesystem:\n";
                 $command = "echo y | mkreiserfs $mkreiserfs_options";
                 ($MPOptions{$mountpoint} =~ /(\-h\s*\w+)\b/) && 
($command .= " $1");
                 ($MPOptions{$mountpoint} =~ /(\-v\s*\d+)\b/) && 
($command .= " $1");
                 $command .= " /dev/$device";
@@ -791,27 +802,28 @@
                     (($? >> 8) == 0) || die "\nMKREISERFS ERROR:\n 
$result\n";
                 }
                 next;
             }
             # Linux Extended 2 file system
-           if ($MPOptions{$mountpoint} =~ /\b(ext[23]|auto)\b/i) {
+           if (CheckOption($MPOptions{$mountpoint}, "(ext[23]|auto)")) {
                 print "Make Extended 2/3 Filesystem:\n";
                 $command = "mke2fs $mke2fs_options";
                 ($MPOptions{$mountpoint} =~ /(\-c)\b/i) && 
($command .= " $1");
                 ($MPOptions{$mountpoint} =~ /(\-i\s*\d+)\b/) && 
($command .= " $1");
                 ($MPOptions{$mountpoint} =~ /(\-m\s*\d+)\b/) && 
($command .= " $1");
                 ($MPOptions{$mountpoint} =~ /(\-j)\b/) && ($command .= " 
$1");
+               ($MPOptions{$mountpoint} =~ /(\-L\s*\S+)\b/) && 
($command .= " $1");
                 $command .= " /dev/$device";
                 print "  $command\n";
                 if ($test != 1){
                     $result = `$command`;
                     (($? >> 8) == 0) || die "\nMKE2FS ERROR:\n 
$result\n";
                 }
                 next;
             }
             # DOS 16bit FAT / Win95 FAT 32
-           if ($MPOptions{$mountpoint} =~ /\b(dosfat16|winfat32)\b/i) {
+           if (CheckOption($MPOptions{$mountpoint}, 
"(dosfat16|winfat32)")) {
                 print "Clear first sector for DOS/Windows\n";
                 $command = "dd if=/dev/zero 
of=/dev/$MountpointPart{$mountpoint} bs=512 count=1";
                 print "  $command\n";
                 if ($test != 1){
                     $result = `$command`;
@@ -834,13 +846,13 @@
  #
  #<file sys>          <mount point>     <type>   <options>   <dump>   
<pass>
  EOM
      # 1. /
      $type = "ext2";
-    ($MPOptions{'/'} =~ /\b(reiser)\b/i) && ($type = "reiserfs");
-    ($MPOptions{'/'} =~ /\b(ext3)\b/i) && ($type = "ext3");
-    ($MPOptions{'/'} =~ /\b(ext2)\b/i) && ($type = "ext2");
+    CheckOption($MPOptions{'/'}, "(reiser)") && ($type = "reiserfs");
+    CheckOption($MPOptions{'/'}, "(ext3)") && ($type = "ext3");
+    CheckOption($MPOptions{'/'}, "(ext2)") && ($type = "ext2");
      $FileSystemTab .= 
BuildfstabLine("/dev/$MountpointPart{'/'}","/",$type,$MPfstaboptions{'/'},0,
1);
      # 2. swap partitions
      foreach my $mountpoint (%PartMountpoint){
         next if( $mountpoint !~ /^swap/i);
         $FileSystemTab .= 
BuildfstabLine("/dev/$MountpointPart{$mountpoint}",
@@ -851,14 +863,14 @@
      # 4. sorted others
      foreach my $mountpoint (sort %PartMountpoint){
         next if ( ($mountpoint !~ m#^/#) || ($mountpoint eq "/"));
         $device = $MountpointPart{$mountpoint};
         $type = "ext2";
-       ($MPOptions{$mountpoint} =~ /\b(dosfat16|winfat32)\b/i) && 
($type = "vfat");
-       ($MPOptions{$mountpoint} =~ /\b(reiser)\b/i) && ($type = 
"reiserfs");
-       ($MPOptions{$mountpoint} =~ /\b(ext3)\b/i) && ($type = "ext3");
-       ($MPOptions{$mountpoint} =~ /\b(ext2)\b/i) && ($type = "ext2");
+       CheckOption($MPOptions{$mountpoint}, "(dosfat16|winfat32)") && 
($type = "vfat");
+       CheckOption($MPOptions{$mountpoint}, "(reiser)") && ($type = 
"reiserfs");
+       CheckOption($MPOptions{$mountpoint}, "(ext3)") && ($type = 
"ext3");
+       CheckOption($MPOptions{$mountpoint}, "(ext2)") && ($type = 
"ext2");
         $FileSystemTab .= 
BuildfstabLine("/dev/$device",$mountpoint,$type,$MPfstaboptions
{$mountpoint},0,2);
      }
      # write it
      $filename = "$ENV{LOGDIR}/fstab";
      print $FileSystemTab;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic