Thread: [oneSIS-devel] SF.net SVN: onesis:[420] trunk/oneSIS.pm/lib/oneSIS.pm
Brought to you by:
jjengla
From: <jj...@us...> - 2008-08-01 23:49:25
|
Revision: 420 http://onesis.svn.sourceforge.net/onesis/?rev=420&view=rev Author: jjengla Date: 2008-08-01 23:49:35 +0000 (Fri, 01 Aug 2008) Log Message: ----------- oneSIS.pm: fixed begign bug in update_ramdisk_elems() .default files were being recreated uneccessarily Modified Paths: -------------- trunk/oneSIS.pm/lib/oneSIS.pm Modified: trunk/oneSIS.pm/lib/oneSIS.pm =================================================================== --- trunk/oneSIS.pm/lib/oneSIS.pm 2008-08-01 18:55:26 UTC (rev 419) +++ trunk/oneSIS.pm/lib/oneSIS.pm 2008-08-01 23:49:35 UTC (rev 420) @@ -1893,21 +1893,32 @@ if ($ramdisk_elem->hidden()) { $mypath =~ s|^(.*/)(.*)$|$1.$2|; } - unless ($dryrun) { - # Delete any existing link/file/directory - if (-e "/ram/$path" || -l "/ram/$path") { - `rm -rf /ram/$path`; # unpure! + + my $default_exists = 0; + if (-l "/ram/$path") { + my $target = readlink ("/ram/$path"); + if ($target eq "$mypath.default") { + $default_exists = 1; } - oneSIS::mk_path($dir, '/ram'); - if (!symlink("$mypath.default", "/ram/$path")) { - warn "oneSIS: Error(2) creating symlink for $path: $!\n"; + } + + unless ($default_exists) { + unless ($dryrun) { + # Delete any existing link/file/directory + if (-e "/ram/$path" || -l "/ram/$path") { + `rm -rf /ram/$path`; # unpure! + } + oneSIS::mk_path($dir, '/ram'); + if (!symlink("$mypath.default", "/ram/$path")) { + warn "oneSIS: Error(2) creating symlink for $path: $!\n"; + } } + if ($type eq 'LINKBACK' && $ramdisk_elem->linkback() eq 'SERVICE') { + $quiet || print "oneSIS: Updating SERVICE $type: /ram$path -> $mypath.default\n"; + } else { + $quiet || print "oneSIS: Linking to default: /ram$path -> $mypath.default\n"; + } } - if ($type eq 'LINKBACK' && $ramdisk_elem->linkback() eq 'SERVICE') { - $quiet || print "oneSIS: Updating SERVICE $type: /ram$path -> $mypath.default\n"; - } else { - $quiet || print "oneSIS: Linking to default: /ram$path -> $mypath.default\n"; - } } } ## foreach my $path (keys %create_elem) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jj...@us...> - 2008-08-29 22:18:03
|
Revision: 423 http://onesis.svn.sourceforge.net/onesis/?rev=423&view=rev Author: jjengla Date: 2008-08-29 22:18:12 +0000 (Fri, 29 Aug 2008) Log Message: ----------- Added -l (label) and -f (fastboot) options to DISKMOUNT Changed oneSIS::setup_localdisks() -- only partition when the configured partition layout changes -- only mkswap if a partition is not configured as swap space -- added fastboot code to skip mkfs if the on-disk label matches the configured label (and no re-partitioning has been done) Modified Paths: -------------- trunk/oneSIS.pm/lib/oneSIS.pm Modified: trunk/oneSIS.pm/lib/oneSIS.pm =================================================================== --- trunk/oneSIS.pm/lib/oneSIS.pm 2008-08-22 16:11:41 UTC (rev 422) +++ trunk/oneSIS.pm/lib/oneSIS.pm 2008-08-29 22:18:12 UTC (rev 423) @@ -449,6 +449,8 @@ |([\s\t]+-p\s\S+)? # match optional PROPERTY )* |([\s\t]+-t\s\S+)? # match optional filesystem type + |([\s\t]+-l\s\S+)? # match optional filesystem label + |([\s\t]+-f)? # match optional fastmount flag )* $/x) { my ($type, $disk, $size, $mountpoint) = ($1, $2, $3, $4); @@ -467,11 +469,12 @@ warn "* * * $line\n"; next LINE; } - elsif ($type eq 'DEPLOY') { - $localdisk_elem->label($mountpoint); - } + + # Set default label + $localdisk_elem->label($mountpoint); + # Loop over supplied options - while ($options =~ /-([cnpt])[\s\t]+(\S+)/g) { + while ($options =~ /-([cnptlf])(?:[\s\t]+(\S+))?/g) { my ($option, $value) = ($1, $2); if ($option eq 't') { if (! defined $localdisk_elem->fstype($value)) { @@ -479,6 +482,12 @@ warn "* * * $line\n"; } } + elsif ($option eq 'l') { + $localdisk_elem->label($value); + } + elsif ($option eq 'f') { + $localdisk_elem->fastmount(1); + } elsif ($option eq 'c') { foreach my $myclass (split ',', $value) { if ($config->class_exists($myclass)) { @@ -2101,7 +2110,7 @@ # (key=device name; value=oneSIS::file_elem object) # undef: on error my ($config, $localdisk_elems, $hostname, $classname, $action, $basedir) = @_; - my (%partitions,%labels,@swap,%diskleft); + my (%partitions,%labels,@swap,%diskleft,%fastmount,%device,%partitioned); my (%fstype,%sfdisk_input,%diskinfo,%order); my ($mydisks,$label,$device,$partsize) = (undef,undef,undef,undef); my ($output) = (undef); @@ -2322,14 +2331,17 @@ my $partname = "/dev/$dev_part$partnum"; # check for cciss devices $partname = "/dev/$dev_part" . "p$partnum" if $dev_part =~ /cciss/; + $device{$partname} = $device; if ($localdisk_elem->type() eq 'SWAP') { push @swap, $partname; + $fastmount{$partname} = $localdisk_elem->fastmount(); push @{$sfdisk_input{$device}}, ",$partsize,S"; } elsif ($localdisk_elem->type() eq 'MOUNT') { $mounts{$partname} = $localdisk_elem->file_elem(); $fstype{$partname} = $localdisk_elem->fstype(); $labels{$partname} = $localdisk_elem->label(); + $fastmount{$partname} = $localdisk_elem->fastmount(); push @{$sfdisk_input{$device}}, ",$partsize,L,*"; } } @@ -2343,12 +2355,25 @@ # Create disk partitions foreach my $device (keys %sfdisk_input) { if ($#{$sfdisk_input{$device}} != -1) { + my ($before, $after); my $input = join("\\n", @{$sfdisk_input{$device}}); - print "oneSIS: Partitioning /dev/$device ...\n"; - $output = `/bin/echo -e "$input" | /sbin/sfdisk --force -Lq -uB /dev/$device 2>&1`; - if ($? >> 8) { - warn "oneSIS: Error creating partitions on /dev/$device: $output\n"; + $before = $after = `/bin/echo -e "$input" | /sbin/sfdisk -n -Lq -uB /dev/$device 2>&1`; + $before =~ s/(?:.*\n)+Old situation:(?:.*\n)+?((?:\/dev.*\n)+)(?:.*\n)+/$1/; + + $after =~ s/(?:.*\n)+New situation:(?:.*\n)+?((?:\/dev.*\n)+)(?:.*\n)+/$1/; + if ($before eq $after) { + print "oneSIS: Partition layout of /dev/$device unchanged. Skipping partitioning ...\n"; } + else { + print "oneSIS: Partitioning /dev/$device ...\n"; + $output = `/bin/echo -e "$input" | /sbin/sfdisk --force -Lq -uB /dev/$device 2>&1`; + if ($? >> 8) { + warn "oneSIS: Error creating partitions on /dev/$device: $output\n"; + } + else { + $partitioned{$device} = 1; + } + } } } @@ -2356,21 +2381,28 @@ # need to wait for the created partition to show up ... # particularly w/ /dev/cciss/cXdY like devices # - sleep 3; + sleep 3 if scalar(keys %partitioned) > 0; # Initialize swap partitions foreach my $part (@swap) { - print "oneSIS: Making swap space on $part ...\n"; - $output = `/sbin/mkswap -L swap $part 2>&1`; + # Only do a mkswap if the swapon fails + $output = `/sbin/swapon $part 2>&1`; if ($? >> 8) { - warn "oneSIS: Error making swap partition $part: $output\n"; - } - if ($action == 0) { - $output = `/sbin/swapon $part 2>&1`; + print "oneSIS: Making swap space on $part ...\n"; + $output = `/sbin/mkswap -L swap $part 2>&1`; if ($? >> 8) { - warn "oneSIS: Error activating swap partition $part: $output\n"; + warn "oneSIS: Error making swap partition $part: $output\n"; } + else { + $output = `/sbin/swapon $part 2>&1`; + if ($? >> 8) { + warn "oneSIS: Error activating swap partition $part: $output\n"; + } + } } + unless ($action == 0) { + $output = `/sbin/swapoff $part 2>&1`; + } } # Format, label, and mount partitions @@ -2378,46 +2410,76 @@ my $file_elem = $mounts{$partition}; my $mountpoint = $file_elem->path(); my $fstype = $fstype{$partition}; + my $do_fastmount = $fastmount{$partition}; + my $device = $device{$partition}; my $mkfsopts = ""; - # varying options for differing filesystem types -cdm - $mkfsopts = " -q -b 4096 " if $fstype =~ /^ext[23]$/i; - $mkfsopts = " -f " if $fstype eq "xfs" or $fstype eq "reiserfs" or $fstype eq "jfs"; - $mkfsopts = " -f -y " if $fstype eq "reiser4"; - - # Format partition - print "oneSIS: Making $fstype filesystem on $partition for $basedir/$mountpoint ...\n"; - $output = `/sbin/mkfs.$fstype $mkfsopts $partition 2>&1`; - if ($? >> 8) { - warn "oneSIS: Error! Problem making $fstype partition on $partition:\n"; - warn "* * * $output\n"; - delete $mounts{$partition}; - next PARTITION; + # Verify label if we are doing a fastmount + # ext filesystems only at the moment + $do_fastmount = 0 if $partitioned{$device}; + if ($do_fastmount) { + if ($fstype !~ /^ext[23]$/i) { + print "oneSIS: Fastmount option not yet supported on $fstype"; + $do_fastmount = 0; + } + else { + my $disklabel = `/sbin/e2label $partition`; + chomp $disklabel; + if (defined ($label = $labels{$partition})) { + unless ($label eq $disklabel) { + $do_fastmount = 0; + } + } + else { + $do_fastmount = 0; + } + } } - # Label partition - if (defined ($label = $labels{$partition})) { - print "oneSIS: Labeling $partition: $label\n"; - my $label_cmd = ""; - $label_cmd = "/sbin/e2label $partition $label" if $fstype =~ /^ext[23]$/i; - $label_cmd = "/usr/sbin/xfs_admin -L $label $partition" if $fstype eq "xfs"; - $label_cmd = "/sbin/reiserfstune $partition -l $label " if $fstype eq "reiserfs" or $fstype eq "reiser4"; - $label_cmd = "/sbin/jfs_tune -L $label $partition" if $fstype eq "jfs"; + unless ($do_fastmount) { + # varying options for differing filesystem types -cdm + $mkfsopts = " -q -b 4096 " if $fstype =~ /^ext[23]$/i; + $mkfsopts = " -f " if $fstype eq "xfs" or $fstype eq "reiserfs" or $fstype eq "jfs"; + $mkfsopts = " -f -y " if $fstype eq "reiser4"; - $output = `$label_cmd 2>&1`; + # Format partition + my $mntpoint = "$basedir/$mountpoint"; + $mntpoint =~ s|/+|/|g; + print "oneSIS: Making $fstype filesystem on $partition for $mntpoint ...\n"; + $output = `/sbin/mkfs.$fstype $mkfsopts $partition 2>&1`; if ($? >> 8) { - warn "oneSIS: Error! Problem labelling partition $partition:\n"; + warn "oneSIS: Error! Problem making $fstype partition on $partition:\n"; warn "* * * $output\n"; + delete $mounts{$partition}; + next PARTITION; } - if (!$label_cmd) { - warn "oneSIS: Warning! Did not label partition $partition:\n"; - warn "* * * Filesystem type: $fstype\n"; + + # Label partition + if (defined ($label = $labels{$partition})) { + print "oneSIS: Labeling $partition: $label\n"; + my $label_cmd = ""; + $label_cmd = "/sbin/e2label $partition $label" if $fstype =~ /^ext[23]$/i; + $label_cmd = "/usr/sbin/xfs_admin -L $label $partition" if $fstype eq "xfs"; + $label_cmd = "/sbin/reiserfstune $partition -l $label " if $fstype eq "reiserfs" or $fstype eq "reiser4"; + $label_cmd = "/sbin/jfs_tune -L $label $partition" if $fstype eq "jfs"; + + $output = `$label_cmd 2>&1`; + if ($? >> 8) { + warn "oneSIS: Error! Problem labelling partition $partition:\n"; + warn "* * * $output\n"; + } + if (!$label_cmd) { + warn "oneSIS: Warning! Did not label partition $partition:\n"; + warn "* * * Filesystem type: $fstype\n"; + } } } # Mount partition if ($action == 0) { - print "oneSIS: Mounting $partition on $basedir/$mountpoint\n"; + my $mntpoint = "$basedir/$mountpoint"; + $mntpoint =~ s|/+|/|g; + print "oneSIS: Mounting $partition on $mntpoint\n"; # Remember original directory's mode, user, and group my $transformed_path = transform_path($basedir, $mountpoint); my (undef,undef,$mode,undef,$uid,$gid) = lstat($transformed_path); @@ -2429,8 +2491,6 @@ next PARTITION; } - ## !! Change this to use mirror_props() ################ - # Set up permissions, user, and group of mounted filesystem to be the # same as its corresponding directory in the master image if ((chmod $mode, "$basedir/$mountpoint") < 1) { @@ -4204,6 +4264,7 @@ } $self->{FSTYPE} = 'ext2'; $self->{LABEL} = undef; + $self->{FASTMOUNT} = 0; $self->{MODIFIER} = new oneSIS::modifier(); return $self; @@ -4287,6 +4348,17 @@ return $self->{LABEL}; } +# localdisk_elem->fastmount() method +sub fastmount { +# Desc: Gets or sets flag to fastmount a disk (skip partitioning/mkfs) +# Input: 1) $ I? 1: Require label +# The data is set to the value of the argument, if given. +# Returns: $ label + my $self = shift; + if (@_) { $self->{FASTMOUNT} = shift; } + return $self->{FASTMOUNT}; +} + # localdisk_elem->file_elem() method sub file_elem { # Desc: Returns the file_elem object contained in this object This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jj...@us...> - 2009-02-06 22:22:18
|
Revision: 444 http://onesis.svn.sourceforge.net/onesis/?rev=444&view=rev Author: jjengla Date: 2009-02-06 21:47:30 +0000 (Fri, 06 Feb 2009) Log Message: ----------- mk-diskful: fixed a bug that was causing disk partitioning to be skipped incorrectly Modified Paths: -------------- trunk/oneSIS.pm/lib/oneSIS.pm Modified: trunk/oneSIS.pm/lib/oneSIS.pm =================================================================== --- trunk/oneSIS.pm/lib/oneSIS.pm 2009-02-04 18:08:47 UTC (rev 443) +++ trunk/oneSIS.pm/lib/oneSIS.pm 2009-02-06 21:47:30 UTC (rev 444) @@ -2358,8 +2358,7 @@ my ($before, $after); my $input = join("\\n", @{$sfdisk_input{$device}}); $before = $after = `/bin/echo -e "$input" | /sbin/sfdisk -n -Lq -uB /dev/$device 2>&1`; - $before =~ s/(?:.*\n)+Old situation:(?:.*\n)+?((?:\/dev.*\n)+)(?:.*\n)+/$1/; - + $before =~ s/(?:.*\n)+Old situation:(?:.*\n)+?((?:\/dev.*\n)+|No partitions found)(?:.*\n)+/$1/; $after =~ s/(?:.*\n)+New situation:(?:.*\n)+?((?:\/dev.*\n)+)(?:.*\n)+/$1/; if ($before eq $after) { print "oneSIS: Partition layout of /dev/$device unchanged. Skipping partitioning ...\n"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jj...@us...> - 2009-08-10 18:14:19
|
Revision: 467 http://onesis.svn.sourceforge.net/onesis/?rev=467&view=rev Author: jjengla Date: 2009-08-10 18:14:11 +0000 (Mon, 10 Aug 2009) Log Message: ----------- Fix bug in grep in oneSIS::get_hostname() -- contributed by Robin Humble <rjh...@ci...> Modified Paths: -------------- trunk/oneSIS.pm/lib/oneSIS.pm Modified: trunk/oneSIS.pm/lib/oneSIS.pm =================================================================== --- trunk/oneSIS.pm/lib/oneSIS.pm 2009-07-29 17:33:11 UTC (rev 466) +++ trunk/oneSIS.pm/lib/oneSIS.pm 2009-08-10 18:14:11 UTC (rev 467) @@ -1197,7 +1197,7 @@ close CMDLINE; # grep for ip in /etc/hosts if ($hiparray[0]) { - my $hosts_name = `/bin/grep -w $hiparray[0] /etc/hosts`; + my $hosts_name = `/bin/grep -wF $hiparray[0] /etc/hosts`; chomp $hosts_name; @hiparray = split (/\s+/, $hosts_name); $hostname=$hiparray[1]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mr...@us...> - 2009-10-06 19:20:40
|
Revision: 468 http://onesis.svn.sourceforge.net/onesis/?rev=468&view=rev Author: mr_ep Date: 2009-10-06 19:20:23 +0000 (Tue, 06 Oct 2009) Log Message: ----------- more robust /etc/hosts parsing when looking up a hostname from an IP Modified Paths: -------------- trunk/oneSIS.pm/lib/oneSIS.pm Modified: trunk/oneSIS.pm/lib/oneSIS.pm =================================================================== --- trunk/oneSIS.pm/lib/oneSIS.pm 2009-08-10 18:14:11 UTC (rev 467) +++ trunk/oneSIS.pm/lib/oneSIS.pm 2009-10-06 19:20:23 UTC (rev 468) @@ -1197,11 +1197,13 @@ close CMDLINE; # grep for ip in /etc/hosts if ($hiparray[0]) { - my $hosts_name = `/bin/grep -wF $hiparray[0] /etc/hosts`; - chomp $hosts_name; - @hiparray = split (/\s+/, $hosts_name); - $hostname=$hiparray[1]; - $got_hostname = 1; + if (open(HOSTS, "</etc/hosts")) { + $hostname = (grep {s/^\s*$hiparray[0]\s+(\S+)\s*/$1/} <HOSTS>)[0]; + $got_hostname = 1 if defined $hostname; + close(HOSTS); + } else { + warn "Couldn't open /etc/hosts: $!"; + } } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mr...@us...> - 2009-10-08 18:08:58
|
Revision: 469 http://onesis.svn.sourceforge.net/onesis/?rev=469&view=rev Author: mr_ep Date: 2009-10-08 18:08:49 +0000 (Thu, 08 Oct 2009) Log Message: ----------- okay, I think the hosts parsing is really fixed now... Modified Paths: -------------- trunk/oneSIS.pm/lib/oneSIS.pm Modified: trunk/oneSIS.pm/lib/oneSIS.pm =================================================================== --- trunk/oneSIS.pm/lib/oneSIS.pm 2009-10-06 19:20:23 UTC (rev 468) +++ trunk/oneSIS.pm/lib/oneSIS.pm 2009-10-08 18:08:49 UTC (rev 469) @@ -1198,8 +1198,9 @@ # grep for ip in /etc/hosts if ($hiparray[0]) { if (open(HOSTS, "</etc/hosts")) { - $hostname = (grep {s/^\s*$hiparray[0]\s+(\S+)\s*/$1/} <HOSTS>)[0]; - $got_hostname = 1 if defined $hostname; + $hostname = (grep /^\s*$hiparray[0]\s+\S+/, <HOSTS>)[0]; + $hostname = defined $hostname ? (split /\s+/, $hostname)[1] : ''; + $got_hostname = 1 if $hostname; close(HOSTS); } else { warn "Couldn't open /etc/hosts: $!"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jj...@us...> - 2010-05-19 21:48:02
|
Revision: 475 http://onesis.svn.sourceforge.net/onesis/?rev=475&view=rev Author: jjengla Date: 2010-05-19 21:47:56 +0000 (Wed, 19 May 2010) Log Message: ----------- Add abiltiy to set hostname via /etc/oneSIS/hostname Modified Paths: -------------- trunk/oneSIS.pm/lib/oneSIS.pm Modified: trunk/oneSIS.pm/lib/oneSIS.pm =================================================================== --- trunk/oneSIS.pm/lib/oneSIS.pm 2010-04-19 19:16:19 UTC (rev 474) +++ trunk/oneSIS.pm/lib/oneSIS.pm 2010-05-19 21:47:56 UTC (rev 475) @@ -1146,7 +1146,8 @@ # Desc: Returns the hostname of this node. The hostname is usually given # by DHCP and set in the initrd. If the hostname of the node # isn't set, it tries to match a hostname from A MAC_ADDR directive, -# then from a kernel commandline parameter (hostname=). +# then from a kernel commandline parameter (hostname=), then +# from /etc/oneSIS/hostname # Input: 1) $ I oneSIS::config object # Returns: $ hostname # undef: on error or empty hostname @@ -1187,7 +1188,8 @@ unless ($got_hostname) { if (!open(CMDLINE, "</proc/cmdline")) { warn "oneSIS: Error! Could not open /proc/cmdline: $!\n"; - } else { + } + else { my @hiparray = (); while (defined ($_ = <CMDLINE>)) { if (/(?:^|[\s\t]+)ip=(.*)/) { @@ -1197,17 +1199,32 @@ close CMDLINE; # grep for ip in /etc/hosts if ($hiparray[0]) { - if (open(HOSTS, "</etc/hosts")) { - $hostname = (grep /^\s*$hiparray[0]\s+\S+/, <HOSTS>)[0]; - $hostname = defined $hostname ? (split /\s+/, $hostname)[1] : ''; - $got_hostname = 1 if $hostname; - close(HOSTS); - } else { - warn "Couldn't open /etc/hosts: $!"; + my $hosts_name = `/bin/grep -w $hiparray[0] /etc/hosts`; + chomp $hosts_name; + if ($hosts_name ne '') { + @hiparray = split (/\s+/, $hosts_name); + $hostname=$hiparray[1]; + $got_hostname = 1; } } } } + # Attempt to get hostname from hard-coded config file + # (useful for diskfull nodes) + unless ($got_hostname) { + if (-e "/etc/oneSIS/hostname") { + if (open(HOSTNAME, "</etc/oneSIS/hostname")) { + while (defined ($_ = <HOSTNAME>)) { + next if /^[\s\t]*\#/; + if (/^[\s\t]*(\S+)/) { + $hostname = $1; + $got_hostname = 1; + } + } + close HOSTNAME; + } + } + } if ($got_hostname) { system("/bin/hostname $hostname"); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: Marcus R E. <mr...@sa...> - 2010-05-20 22:46:24
|
This commit appears to re-introduce a bug that I had fixed in r468. Namely that if your /etc/hosts file happens to have a hostname in a comment line before its actual IP line, oneSIS's parsing breaks. If that was unintentional, please consider restoring the parsing I had in there. It's more robust. Thanks, -Marcus On Wed, 2010-05-19 at 15:47 -0600, jj...@us... wrote: > Revision: 475 > http://onesis.svn.sourceforge.net/onesis/?rev=475&view=rev > Author: jjengla > Date: 2010-05-19 21:47:56 +0000 (Wed, 19 May 2010) > > Log Message: > ----------- > Add abiltiy to set hostname via /etc/oneSIS/hostname > > Modified Paths: > -------------- > trunk/oneSIS.pm/lib/oneSIS.pm > > Modified: trunk/oneSIS.pm/lib/oneSIS.pm > =================================================================== > --- trunk/oneSIS.pm/lib/oneSIS.pm 2010-04-19 19:16:19 UTC (rev 474) > +++ trunk/oneSIS.pm/lib/oneSIS.pm 2010-05-19 21:47:56 UTC (rev 475) > @@ -1146,7 +1146,8 @@ > # Desc: Returns the hostname of this node. The hostname is usually given > # by DHCP and set in the initrd. If the hostname of the node > # isn't set, it tries to match a hostname from A MAC_ADDR directive, > -# then from a kernel commandline parameter (hostname=). > +# then from a kernel commandline parameter (hostname=), then > +# from /etc/oneSIS/hostname > # Input: 1) $ I oneSIS::config object > # Returns: $ hostname > # undef: on error or empty hostname > @@ -1187,7 +1188,8 @@ > unless ($got_hostname) { > if (!open(CMDLINE, "</proc/cmdline")) { > warn "oneSIS: Error! Could not open /proc/cmdline: $!\n"; > - } else { > + } > + else { > my @hiparray = (); > while (defined ($_ = <CMDLINE>)) { > if (/(?:^|[\s\t]+)ip=(.*)/) { > @@ -1197,17 +1199,32 @@ > close CMDLINE; > # grep for ip in /etc/hosts > if ($hiparray[0]) { > - if (open(HOSTS, "</etc/hosts")) { > - $hostname = (grep /^\s*$hiparray[0]\s+\S+/, <HOSTS>)[0]; > - $hostname = defined $hostname ? (split /\s+/, $hostname)[1] : ''; > - $got_hostname = 1 if $hostname; > - close(HOSTS); > - } else { > - warn "Couldn't open /etc/hosts: $!"; > + my $hosts_name = `/bin/grep -w $hiparray[0] /etc/hosts`; > + chomp $hosts_name; > + if ($hosts_name ne '') { > + @hiparray = split (/\s+/, $hosts_name); > + $hostname=$hiparray[1]; > + $got_hostname = 1; > } > } > } > } > + # Attempt to get hostname from hard-coded config file > + # (useful for diskfull nodes) > + unless ($got_hostname) { > + if (-e "/etc/oneSIS/hostname") { > + if (open(HOSTNAME, "</etc/oneSIS/hostname")) { > + while (defined ($_ = <HOSTNAME>)) { > + next if /^[\s\t]*\#/; > + if (/^[\s\t]*(\S+)/) { > + $hostname = $1; > + $got_hostname = 1; > + } > + } > + close HOSTNAME; > + } > + } > + } > if ($got_hostname) { > system("/bin/hostname $hostname"); > } > > > This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. > > ------------------------------------------------------------------------------ > > _______________________________________________ > oneSIS-devel mailing list > one...@li... > https://lists.sourceforge.net/lists/listinfo/onesis-devel > |
From: Josh E. <jj...@gm...> - 2010-05-21 12:02:08
|
I must have been using an older revision. I'll fix it today. -JE On Thu, May 20, 2010 at 3:45 PM, Marcus R Epperson <mr...@sa...> wrote: > This commit appears to re-introduce a bug that I had fixed in r468. > Namely that if your /etc/hosts file happens to have a hostname in a > comment line before its actual IP line, oneSIS's parsing breaks. > > If that was unintentional, please consider restoring the parsing I had > in there. It's more robust. > > Thanks, > -Marcus > > On Wed, 2010-05-19 at 15:47 -0600, jj...@us... wrote: >> Revision: 475 >> http://onesis.svn.sourceforge.net/onesis/?rev=475&view=rev >> Author: jjengla >> Date: 2010-05-19 21:47:56 +0000 (Wed, 19 May 2010) >> >> Log Message: >> ----------- >> Add abiltiy to set hostname via /etc/oneSIS/hostname >> >> Modified Paths: >> -------------- >> trunk/oneSIS.pm/lib/oneSIS.pm >> >> Modified: trunk/oneSIS.pm/lib/oneSIS.pm >> =================================================================== >> --- trunk/oneSIS.pm/lib/oneSIS.pm 2010-04-19 19:16:19 UTC (rev 474) >> +++ trunk/oneSIS.pm/lib/oneSIS.pm 2010-05-19 21:47:56 UTC (rev 475) >> @@ -1146,7 +1146,8 @@ >> # Desc: Returns the hostname of this node. The hostname is usually given >> # by DHCP and set in the initrd. If the hostname of the node >> # isn't set, it tries to match a hostname from A MAC_ADDR directive, >> -# then from a kernel commandline parameter (hostname=). >> +# then from a kernel commandline parameter (hostname=), then >> +# from /etc/oneSIS/hostname >> # Input: 1) $ I oneSIS::config object >> # Returns: $ hostname >> # undef: on error or empty hostname >> @@ -1187,7 +1188,8 @@ >> unless ($got_hostname) { >> if (!open(CMDLINE, "</proc/cmdline")) { >> warn "oneSIS: Error! Could not open /proc/cmdline: $!\n"; >> - } else { >> + } >> + else { >> my @hiparray = (); >> while (defined ($_ = <CMDLINE>)) { >> if (/(?:^|[\s\t]+)ip=(.*)/) { >> @@ -1197,17 +1199,32 @@ >> close CMDLINE; >> # grep for ip in /etc/hosts >> if ($hiparray[0]) { >> - if (open(HOSTS, "</etc/hosts")) { >> - $hostname = (grep /^\s*$hiparray[0]\s+\S+/, <HOSTS>)[0]; >> - $hostname = defined $hostname ? (split /\s+/, $hostname)[1] : ''; >> - $got_hostname = 1 if $hostname; >> - close(HOSTS); >> - } else { >> - warn "Couldn't open /etc/hosts: $!"; >> + my $hosts_name = `/bin/grep -w $hiparray[0] /etc/hosts`; >> + chomp $hosts_name; >> + if ($hosts_name ne '') { >> + @hiparray = split (/\s+/, $hosts_name); >> + $hostname=$hiparray[1]; >> + $got_hostname = 1; >> } >> } >> } >> } >> + # Attempt to get hostname from hard-coded config file >> + # (useful for diskfull nodes) >> + unless ($got_hostname) { >> + if (-e "/etc/oneSIS/hostname") { >> + if (open(HOSTNAME, "</etc/oneSIS/hostname")) { >> + while (defined ($_ = <HOSTNAME>)) { >> + next if /^[\s\t]*\#/; >> + if (/^[\s\t]*(\S+)/) { >> + $hostname = $1; >> + $got_hostname = 1; >> + } >> + } >> + close HOSTNAME; >> + } >> + } >> + } >> if ($got_hostname) { >> system("/bin/hostname $hostname"); >> } >> >> >> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. >> >> ------------------------------------------------------------------------------ >> >> _______________________________________________ >> oneSIS-devel mailing list >> one...@li... >> https://lists.sourceforge.net/lists/listinfo/onesis-devel >> > > > > > ------------------------------------------------------------------------------ > > _______________________________________________ > oneSIS-devel mailing list > one...@li... > https://lists.sourceforge.net/lists/listinfo/onesis-devel > |
From: <jj...@us...> - 2010-05-21 17:36:31
|
Revision: 476 http://onesis.svn.sourceforge.net/onesis/?rev=476&view=rev Author: jjengla Date: 2010-05-21 17:36:25 +0000 (Fri, 21 May 2010) Log Message: ----------- Reapplied hostname parsing patch from mr...@sa... Modified Paths: -------------- trunk/oneSIS.pm/lib/oneSIS.pm Modified: trunk/oneSIS.pm/lib/oneSIS.pm =================================================================== --- trunk/oneSIS.pm/lib/oneSIS.pm 2010-05-19 21:47:56 UTC (rev 475) +++ trunk/oneSIS.pm/lib/oneSIS.pm 2010-05-21 17:36:25 UTC (rev 476) @@ -1199,12 +1199,12 @@ close CMDLINE; # grep for ip in /etc/hosts if ($hiparray[0]) { - my $hosts_name = `/bin/grep -w $hiparray[0] /etc/hosts`; - chomp $hosts_name; - if ($hosts_name ne '') { - @hiparray = split (/\s+/, $hosts_name); - $hostname=$hiparray[1]; - $got_hostname = 1; + if (open(HOSTS, "</etc/hosts")) { + $hostname = (grep {s/^\s*$hiparray[0]\s+(\S+)\s*/$1/} <HOSTS>)[0]; + $got_hostname = 1 if defined $hostname; + close(HOSTS); + } else { + warn "Couldn't open /etc/hosts: $!"; } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: ron m. <rmi...@gm...> - 2010-05-21 17:40:16
|
onesis users: who's out there? Hey, I am wondering how many of you would object to a condor-style email being sent from your onesis installations to a program that would log (at onesis.org) the users of onesis. Why do this? It helps those of us trying to push this technology. Condor had great help once people saw the usage. It's pretty cool that su- er, oracle, ships onesis -- who else does? If not that, maybe people could just send a list of systems and sizes and we could put it on the web page. onesis is great and does not get enough recognition. I'm speaking of somebody who had a distro that got dumped in favor of onesis -- by me! :-) ron |
From: <jj...@us...> - 2010-05-21 17:39:40
|
Revision: 477 http://onesis.svn.sourceforge.net/onesis/?rev=477&view=rev Author: jjengla Date: 2010-05-21 17:39:34 +0000 (Fri, 21 May 2010) Log Message: ----------- Reapplied real patch from mrepper Modified Paths: -------------- trunk/oneSIS.pm/lib/oneSIS.pm Modified: trunk/oneSIS.pm/lib/oneSIS.pm =================================================================== --- trunk/oneSIS.pm/lib/oneSIS.pm 2010-05-21 17:36:25 UTC (rev 476) +++ trunk/oneSIS.pm/lib/oneSIS.pm 2010-05-21 17:39:34 UTC (rev 477) @@ -1200,8 +1200,9 @@ # grep for ip in /etc/hosts if ($hiparray[0]) { if (open(HOSTS, "</etc/hosts")) { - $hostname = (grep {s/^\s*$hiparray[0]\s+(\S+)\s*/$1/} <HOSTS>)[0]; - $got_hostname = 1 if defined $hostname; + $hostname = (grep /^\s*$hiparray[0]\s+\S+/, <HOSTS>)[0]; + $hostname = defined $hostname ? (split /\s+/, $hostname)[1] : ''; + $got_hostname = 1 if $hostname; close(HOSTS); } else { warn "Couldn't open /etc/hosts: $!"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jj...@us...> - 2011-10-07 16:21:34
|
Revision: 501 http://onesis.svn.sourceforge.net/onesis/?rev=501&view=rev Author: jjengla Date: 2011-10-07 16:21:28 +0000 (Fri, 07 Oct 2011) Log Message: ----------- allow oneSIS::match_range() to match on multiple comma-seperated ranges Modified Paths: -------------- trunk/oneSIS.pm/lib/oneSIS.pm Modified: trunk/oneSIS.pm/lib/oneSIS.pm =================================================================== --- trunk/oneSIS.pm/lib/oneSIS.pm 2011-10-04 19:46:01 UTC (rev 500) +++ trunk/oneSIS.pm/lib/oneSIS.pm 2011-10-07 16:21:28 UTC (rev 501) @@ -1488,65 +1488,75 @@ # Returns: 0: hostname does not match range # 1: hostname does match range # undef: on error - my ($rangedesc, $hostname) = @_; + my ($range_in, $hostname) = @_; if ($#_ != 1) { return undef; } - my @prefix_parts; - my @prefixes; - my $idx = 0; - my $match = 0; + my @ranges; - if ($rangedesc !~ /^((\w|[-.])+?)\[((\d+(-\d+)?)(,(\d+(-\d+)?))*)\]/) { - return undef; + # Split multiple comma-seperated ranges into an array + while ($range_in =~ s/^(([^[]+?(\[.*?\])?)+?),//go) { + push @ranges, $1; } + push @ranges, $range_in; - # Check if hostname matches the range expression - while ($rangedesc =~ s/^((\w|[-.])+?)\[((\d+(-\d+)?)(,(\d+(-\d+)?))*)\]//g) { - my ($prefix, $rangespec) = ($1, $3); - $prefixes[$idx] = $prefix; - while ($rangespec =~ s/^,?(?:(\d+)(?:-(\d+))?)(.*)/$3/g) { - my ($start, $end) = ($1, $2); - $end = $start if !defined $end; - push @{$prefix_parts[$idx]}, [$start, $end]; + # Check for valid range + for my $rangedesc (@ranges) { + if ($rangedesc !~ /^((\w|[-.])+?)\[((\d+(-\d+)?)(,(\d+(-\d+)?))*)\]/o) { + next; } - $idx++; - } - PREFIX: for (my $i=0; $i <= $#prefixes; $i++) { - my $prefix = $prefixes[$i]; - RANGE: foreach my $range (@{$prefix_parts[$i]}) { - my ($start, $end) = ($$range[0], $$range[1]); - if ($hostname =~ /^$prefix(\d+)/) { - my $digit = $1; - if ($digit >= $start && $digit <= $end) { - $match = 1; - last RANGE; + # Check if hostname matches the range expression + my @prefix_parts; + my @prefixes; + my $idx = 0; + my $match = 0; + while ($rangedesc =~ s/^((\w|[-.])+?)\[((\d+(-\d+)?)(,(\d+(-\d+)?))*)\]//go) { + my ($prefix, $rangespec) = ($1, $3); + $prefixes[$idx] = $prefix; + while ($rangespec =~ s/^,?(?:(\d+)(?:-(\d+))?)(.*)/$3/go) { + my ($start, $end) = ($1, $2); + $end = $start if !defined $end; + push @{$prefix_parts[$idx]}, [$start, $end]; + } + $idx++; + } + + PREFIX: for (my $i=0; $i <= $#prefixes; $i++) { + my $prefix = $prefixes[$i]; + RANGE: foreach my $range (@{$prefix_parts[$i]}) { + my ($start, $end) = ($$range[0], $$range[1]); + if ($hostname =~ /^$prefix(\d+)/) { + my $digit = $1; + if ($digit >= $start && $digit <= $end) { + $match = 1; + last RANGE; + } + else { + $match = 0; + } } else { $match = 0; + last PREFIX; } } + if ($match) { + $hostname =~ s/^$prefix(\d+)//; + } else { - $match = 0; last PREFIX; } } + if ($match) { - $hostname =~ s/^$prefix(\d+)//; + # Check for matching suffixes + if ($hostname eq $rangedesc) { + return 1; + } } - else { - last PREFIX; - } } - - if ($match) { - # Check for matching suffixes - if ($hostname eq $rangedesc) { - return 1; - } - } return 0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jj...@us...> - 2011-10-21 21:14:50
|
Revision: 503 http://onesis.svn.sourceforge.net/onesis/?rev=503&view=rev Author: jjengla Date: 2011-10-21 21:14:44 +0000 (Fri, 21 Oct 2011) Log Message: ----------- bugfix in oneSIS::copy_file() Modified Paths: -------------- trunk/oneSIS.pm/lib/oneSIS.pm Modified: trunk/oneSIS.pm/lib/oneSIS.pm =================================================================== --- trunk/oneSIS.pm/lib/oneSIS.pm 2011-10-21 20:58:47 UTC (rev 502) +++ trunk/oneSIS.pm/lib/oneSIS.pm 2011-10-21 21:14:44 UTC (rev 503) @@ -3368,9 +3368,11 @@ my $filename = $1; if (defined (copy_file($final_target, "$dest_dir/$filename"))) { - chdir($dest_dir); - unless (symlink($filename, $src_file)) { - warn "oneSIS: Error! Could not create symlink for $src: $!\n"; + unless ($filename eq $src_file) { + chdir($dest_dir); + unless (symlink($filename, $src_file)) { + warn "oneSIS: Error! Could not create symlink for $src: $!\n"; + } } } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mr...@us...> - 2012-08-31 00:51:06
|
Revision: 509 http://onesis.svn.sourceforge.net/onesis/?rev=509&view=rev Author: mr_ep Date: 2012-08-31 00:50:59 +0000 (Fri, 31 Aug 2012) Log Message: ----------- If we need to create a partition 2 TiB in size or larger, use GNU parted and GPT rather than sfdisk and DOS/MBR partition tables, which are limited to less than 2 TiB. (we'll probably end up using parted/GPT for all partitioning at some point, but this should work in the meantime) Modified Paths: -------------- trunk/oneSIS.pm/lib/oneSIS.pm Modified: trunk/oneSIS.pm/lib/oneSIS.pm =================================================================== --- trunk/oneSIS.pm/lib/oneSIS.pm 2012-04-03 23:23:53 UTC (rev 508) +++ trunk/oneSIS.pm/lib/oneSIS.pm 2012-08-31 00:50:59 UTC (rev 509) @@ -2420,7 +2420,7 @@ sub setup_localdisks { # Desc: Configures local disks specified in the config as swap space -# or mounted ext2 filesystems +# or mounted ext{2,3,4} filesystems # Input: 1) $ I oneSIS::config object # 2) \@ I array of localdisk_elem objects # 3) $ I hostname of this node @@ -2436,10 +2436,10 @@ # undef: on error my ($config, $localdisk_elems, $hostname, $classname, $action, $basedir) = @_; my (%partitions,%labels,@swap,%diskleft,%fastmount,%device,%partitioned); - my (%fstype,%sfdisk_input,%diskinfo,%order); + my (%fstype,%sfdisk_input,%parted_input,%diskinfo,%order); my ($mydisks,$label,$device,$partsize) = (undef,undef,undef,undef); my ($output) = (undef); - my ($disksize, $disks_already_checked, $order) = (0, 0, 0); + my ($disksize, $disks_already_checked, $order, $have_large_partitions) = (0, 0, 0, 0); our (%mounts); if (! defined $action) { @@ -2607,6 +2607,12 @@ $partsize = $diskleft{$device}; } + # sfdisk only does DOS/MBR partition tables, which have a (2 TiB - 512) partition size limit. + # GNU parted can do GPT, which supports partitions up to 8 ZiB (should last us a while). + if ($partsize >= 2*1024*1024*1024) { # 2 TiB in 1024-byte blocks + $have_large_partitions = 1; + } + # Keep track of free disk space $diskleft{$device} -= $partsize; @@ -2627,8 +2633,10 @@ } my $offset = 2048; # Allow initial space for embedding large bootloaders - # Build input for partitioning with sfdisk + # Build input for partitioning either with sfdisk or parted. DEVICE: foreach my $device (keys %partitions) { + # Have parted make a GPT partition table + push @{$parted_input{$device}}, "mklabel gpt"; # Handle either devfs or udev(regular) style device names my $dev_part = $device; @@ -2642,9 +2650,6 @@ my $diskObj = $localdisk_elem->disk(); $partnum++; - # Reserve 2048 bytes for embedding the bootloader - my $partstart = $part==0 ? 2048 : ''; - # Add extended partition if necessary if ($part == 3 && $num_parts >= 4) { my $ext_size = $diskObj->size(); @@ -2661,6 +2666,7 @@ # check for cciss devices $partname = "/dev/$dev_part" . "p$partnum" if $dev_part =~ /cciss/; $device{$partname} = $device; + push @{$parted_input{$device}}, sprintf "mkpart primary %dMiB %dMiB", int($offset/1024), int(($offset+$partsize)/1024)-1; if ($localdisk_elem->type() eq 'SWAP') { push @swap, $partname; $fastmount{$partname} = $localdisk_elem->fastmount(); @@ -2673,6 +2679,7 @@ $labels{$partname} = $localdisk_elem->label(); $fastmount{$partname} = $localdisk_elem->fastmount(); push @{$sfdisk_input{$device}}, "$offset,$partsize,L,*"; + push @{$parted_input{$device}}, sprintf "set %d boot on", $part+1; $offset += $partsize; } } @@ -2687,23 +2694,39 @@ foreach my $device (keys %sfdisk_input) { if ($#{$sfdisk_input{$device}} != -1) { my ($before, $after); - my $input = join("\\n", @{$sfdisk_input{$device}}); - $before = $after = `/bin/echo -e "$input" | /sbin/sfdisk -n -Lq -uB /dev/$device 2>&1`; - $before =~ s/(?:.*\n)+Old situation:(?:.*\n)+?((?:\/dev.*\n)+|No partitions found)(?:.*\n)+/$1/; - $after =~ s/(?:.*\n)+New situation:(?:.*\n)+?((?:\/dev.*\n)+)(?:.*\n)+/$1/; - if ($before eq $after) { - print "oneSIS: Partition layout of /dev/$device unchanged. Skipping partitioning ...\n"; + print "oneSIS: Partitioning /dev/$device ...\n"; + if ($have_large_partitions) { + # Use parted to make GPT partitions + # TODO: skip if already partitioned? + for my $parted_command (@{$parted_input{$device}}) { + $output = `/sbin/parted -s /dev/$device -- $parted_command 2>&1`; + if ($? >> 8) { + warn "oneSIS: Error creating partitions on /dev/$device: $output\n"; + } + else { + $partitioned{$device} = 1; + } + } + } else { + # Use sfdisk to make DOS/MBR partitions + my $sfdisk_input = join("\\n", @{$sfdisk_input{$device}}); + $before = $after = `/bin/echo -e "$sfdisk_input" | /sbin/sfdisk -n -Lq -uB /dev/$device 2>&1`; + $before =~ s/(?:.*\n)+Old situation:(?:.*\n)+?((?:\/dev.*\n)+|No partitions found)(?:.*\n)+/$1/; + $after =~ s/(?:.*\n)+New situation:(?:.*\n)+?((?:\/dev.*\n)+)(?:.*\n)+/$1/; + if ($before eq $after) { + print "oneSIS: Partition layout of /dev/$device unchanged. Skipping partitioning ...\n"; + } + else { + print "oneSIS: Partitioning /dev/$device ...\n"; + $output = `/bin/echo -e "$sfdisk_input" | /sbin/sfdisk --force -Lq -uB /dev/$device 2>&1`; + if ($? >> 8) { + warn "oneSIS: Error creating partitions on /dev/$device: $output\n"; + } + else { + $partitioned{$device} = 1; + } + } } - else { - print "oneSIS: Partitioning /dev/$device ...\n"; - $output = `/bin/echo -e "$input" | /sbin/sfdisk --force -Lq -uB /dev/$device 2>&1`; - if ($? >> 8) { - warn "oneSIS: Error creating partitions on /dev/$device: $output\n"; - } - else { - $partitioned{$device} = 1; - } - } } } @@ -3168,12 +3191,12 @@ my ($device) = @_; my ($diskinfo, $disksize); - $disksize = `/sbin/sfdisk -s /dev/$device 2>&1`; + $disksize = `/sbin/sfdisk -s /dev/$device 2>/dev/null`; if ($? >> 8) { warn "oneSIS: Error(1) running sfdisk: $disksize"; return undef; } - $diskinfo = `/sbin/sfdisk -l /dev/$device 2>&1`; + $diskinfo = `/sbin/sfdisk -l /dev/$device 2>/dev/null`; if ($? >> 8) { warn "oneSIS: Error(2) running sfdisk: $diskinfo"; return undef; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jj...@us...> - 2013-07-03 17:20:50
|
Revision: 517 http://sourceforge.net/p/onesis/code/517 Author: jjengla Date: 2013-07-03 17:20:47 +0000 (Wed, 03 Jul 2013) Log Message: ----------- Fix add_localdisk_elems() Modified Paths: -------------- trunk/oneSIS.pm/lib/oneSIS.pm Modified: trunk/oneSIS.pm/lib/oneSIS.pm =================================================================== --- trunk/oneSIS.pm/lib/oneSIS.pm 2013-06-14 16:28:13 UTC (rev 516) +++ trunk/oneSIS.pm/lib/oneSIS.pm 2013-07-03 17:20:47 UTC (rev 517) @@ -6762,7 +6762,7 @@ return \@{$self->{EXCLUDEDEPLOYS}}; } -# config->add_localdisk_elem() method ## !! TODO: roll into add_deploydisk_elem or copy code changes !! +# config->add_localdisk_elem() method sub add_localdisk_elem { # Desc: Adds a localdisk_elem to the configuration # Input: 1) \@ I array of localdisk identifiers (number, device) @@ -6771,21 +6771,21 @@ # 4) $ I mount point of partition (only for MOUNT type) # Returns: $ oneSIS::localdisk_elem object # undef: on error - my $self = shift; + my $self = shift; - if ($#_ != 2 && $#_ != 3) { - return undef; - } - my ($disk, $type, $size, $mountpoint) = @_; - my ($diskObj, $localdisk_elem) = (undef,undef); + if ($#_ != 2 && $#_ != 3) { + return undef; + } + my ($disks, $type, $size, $mountpoint) = @_; + my ($diskObj, $localdisk_elem) = (undef,undef); + my $all_diskObjs = $self->get_all_disks(); + my @diskObjs; - # Strip off /dev + for my $disk (@$disks) { $disk =~ s|/dev/||; - - # Get an existing disk or add a new one - my $disks = $self->get_all_disks(); - if (exists ($$disks{$disk})) { - $diskObj = $$disks{$disk}; + # Get an existing disk object or add a new one + if (exists ($$all_diskObjs{$disk})) { + $diskObj = $$all_diskObjs{$disk}; } else { $diskObj = $self->add_disk($disk); @@ -6793,30 +6793,16 @@ return undef; } } + push @diskObjs, $diskObj; + } - if ($#_ == 2 && $type eq 'SWAP') { - $localdisk_elem = new oneSIS::localdisk_elem($diskObj, $type, $size); - if (!defined $localdisk_elem) { - return undef; - } - } - elsif ($#_ == 3 && $type eq 'MOUNT') { - $localdisk_elem = new oneSIS::localdisk_elem($diskObj, $type, $size, $mountpoint); - if (!defined $localdisk_elem) { - return undef; - } - } - else { - return undef; - } + $localdisk_elem = new oneSIS::localdisk_elem(\@diskObjs, $type, $size, $mountpoint); + if (!defined $localdisk_elem) { + return undef; + } - if (!defined $localdisk_elem) { - return undef; - } - else { - push @{$self->{LOCALDISK_ELEMS}}, $localdisk_elem; - return $localdisk_elem; - } + push @{$self->{LOCALDISK_ELEMS}}, $localdisk_elem; + return $localdisk_elem; } # config->get_all_localdisk_elems() method This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jj...@us...> - 2014-08-29 16:46:57
|
Revision: 523 http://sourceforge.net/p/onesis/code/523 Author: jjengla Date: 2014-08-29 16:46:54 +0000 (Fri, 29 Aug 2014) Log Message: ----------- Fix parsing bug in DISKMOUNT Modified Paths: -------------- trunk/oneSIS.pm/lib/oneSIS.pm Modified: trunk/oneSIS.pm/lib/oneSIS.pm =================================================================== --- trunk/oneSIS.pm/lib/oneSIS.pm 2014-04-07 16:18:05 UTC (rev 522) +++ trunk/oneSIS.pm/lib/oneSIS.pm 2014-08-29 16:46:54 UTC (rev 523) @@ -448,7 +448,7 @@ } $config->add_directive($line); } - elsif ($line =~ /^[\s\t]*(DISK|DEPLOY)MOUNT:?[\s\t]+((?:[^-]+,?)+)[\s\t]+(\d+\%?)[\s\t]+(\S+) + elsif ($line =~ /^[\s\t]*(DISK|DEPLOY)MOUNT:?[\s\t]+((?:[^-\s\t]+,?)+)[\s\t]+(\d+\%?)[\s\t]+(\S+) ( ( ([\s\t]+-c\s\S+)? # match optional CLASS This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jj...@us...> - 2014-09-12 16:33:33
|
Revision: 524 http://sourceforge.net/p/onesis/code/524 Author: jjengla Date: 2014-09-12 16:33:23 +0000 (Fri, 12 Sep 2014) Log Message: ----------- Parsing bug for DISKSWAP Modified Paths: -------------- trunk/oneSIS.pm/lib/oneSIS.pm Modified: trunk/oneSIS.pm/lib/oneSIS.pm =================================================================== --- trunk/oneSIS.pm/lib/oneSIS.pm 2014-08-29 16:46:54 UTC (rev 523) +++ trunk/oneSIS.pm/lib/oneSIS.pm 2014-09-12 16:33:23 UTC (rev 524) @@ -465,7 +465,7 @@ my @disks; map {push @disks, $_} split(',', $disks); my $options = $line; - $options =~ s/^[\s\t]*(DISK|DEPLOY)MOUNT:?[\s\t]+((?:[^-]+,?)+)[\s\t]+(\d+\%?)[\s\t]+(\S+)//; + $options =~ s/^[\s\t]*(DISK|DEPLOY)MOUNT:?[\s\t]+((?:[^-\s\t]+,?)+)[\s\t]+(\d+\%?)[\s\t]+(\S+)//; my $localdisk_elem = undef; if ($type eq 'DISK') { @@ -536,7 +536,7 @@ } $config->add_directive($line); } - elsif ($line =~ /^[\s\t]*(DISK|DEPLOY)SWAP:?[\s\t]+((?:[^-]+,?)+)[\s\t]+(\d+\%?) + elsif ($line =~ /^[\s\t]*(DISK|DEPLOY)SWAP:?[\s\t]+((?:[^-\s\t]+,?)+)[\s\t]+(\d+\%?) ( ( ([\s\t]+-c\s\S+)? # match optional CLASS @@ -550,7 +550,7 @@ my @disks; map {push @disks, $_} split(',', $disks); my $options = $line; - $options =~ s/^[\s\t]*(DISK|DEPLOY)SWAP:?[\s\t]+((?:[^-]+,?)+)[\s\t]+(\d+\%?)//; + $options =~ s/^[\s\t]*(DISK|DEPLOY)SWAP:?[\s\t]+((?:[^-\s\t]+,?)+)[\s\t]+(\d+\%?)//; my $localdisk_elem = undef; if ($type eq 'DISK') { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jj...@us...> - 2014-09-16 18:47:47
|
Revision: 525 http://sourceforge.net/p/onesis/code/525 Author: jjengla Date: 2014-09-16 18:47:39 +0000 (Tue, 16 Sep 2014) Log Message: ----------- Added DISKMOUNT -nm option (nomount) Modified Paths: -------------- trunk/oneSIS.pm/lib/oneSIS.pm Modified: trunk/oneSIS.pm/lib/oneSIS.pm =================================================================== --- trunk/oneSIS.pm/lib/oneSIS.pm 2014-09-12 16:33:23 UTC (rev 524) +++ trunk/oneSIS.pm/lib/oneSIS.pm 2014-09-16 18:47:39 UTC (rev 525) @@ -459,6 +459,7 @@ |([\s\t]+-r\s\d+)? # match optional raid level |([\s\t]+-l\s\S+)? # match optional filesystem label |([\s\t]+-f)? # match optional fastmount flag + |([\s\t]+-nm)? # match optional nomount flag (DISKMOUNT only) )* $/x) { my ($type, $disks, $size, $mountpoint) = ($1, $2, $3, $4); @@ -484,7 +485,7 @@ $localdisk_elem->label($mountpoint); # Loop over supplied options - while ($options =~ /-([cnptrlf])(?:[\s\t]+([^-]\S*))?/g) { + while ($options =~ /-([cnptrlf]|nm)(?:[\s\t]+([^-]\S*))?/g) { my ($option, $value) = ($1, $2); if ($option eq 't') { if (! defined $localdisk_elem->fstype($value)) { @@ -504,6 +505,9 @@ elsif ($option eq 'f') { $localdisk_elem->fastmount(1); } + elsif ($option eq 'nm') { + $localdisk_elem->nomount(1); + } elsif ($option eq 'c') { foreach my $myclass (split ',', $value) { if ($config->class_exists($myclass)) { @@ -2872,6 +2876,7 @@ my $mountpoint = $localdisk_elem->file_elem()->path(); my $fstype = $localdisk_elem->fstype(); my $do_fastmount = $localdisk_elem->fastmount(); + my $nomount = $localdisk_elem->nomount(); my $label = $localdisk_elem->label(); my $device = $device{$partition}; my $mkfsopts = ""; @@ -2938,7 +2943,7 @@ } # Mount partition - if ($action == 0) { + if ($action == 0 && $nomount == 0) { my $mntpoint = "$basedir/$mountpoint"; $mntpoint =~ s|/+|/|g; print "oneSIS: Mounting $partition on $mntpoint\n"; @@ -4736,6 +4741,7 @@ $self->{RAIDLEVEL} = undef; $self->{LABEL} = undef; $self->{FASTMOUNT} = 0; + $self->{NOMOUNT} = 0; $self->{MODIFIER} = new oneSIS::modifier(); return $self; @@ -4854,14 +4860,25 @@ # localdisk_elem->fastmount() method sub fastmount { # Desc: Gets or sets flag to fastmount a disk (skip partitioning/mkfs) -# Input: 1) $ I? 1: Require label +# Input: 1) $ I? nomount flag # The data is set to the value of the argument, if given. -# Returns: $ label +# Returns: $ fastmount flag my $self = shift; if (@_) { $self->{FASTMOUNT} = shift; } return $self->{FASTMOUNT}; } +# localdisk_elem->nomount() method +sub nomount { +# Desc: Gets or sets flag to skip mounting of a disk (just partition/mkfs) +# Input: 1) $ I? nomount flag +# The data is set to the value of the argument, if given. +# Returns: $ nomount flag + my $self = shift; + if (@_) { $self->{NOMOUNT} = shift; } + return $self->{NOMOUNT}; +} + # localdisk_elem->file_elem() method sub file_elem { # Desc: Returns the file_elem object contained in this object This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jj...@us...> - 2017-03-15 15:55:03
|
Revision: 532 http://sourceforge.net/p/onesis/code/532 Author: jjengla Date: 2017-03-15 15:55:01 +0000 (Wed, 15 Mar 2017) Log Message: ----------- Fix sfdisk output parsing for util-linux >= 2.26 (contributed by Kaizaad Bilimorya <ka...@sh...>) Modified Paths: -------------- trunk/oneSIS.pm/lib/oneSIS.pm Modified: trunk/oneSIS.pm/lib/oneSIS.pm =================================================================== --- trunk/oneSIS.pm/lib/oneSIS.pm 2017-02-25 00:07:17 UTC (rev 531) +++ trunk/oneSIS.pm/lib/oneSIS.pm 2017-03-15 15:55:01 UTC (rev 532) @@ -2818,7 +2818,7 @@ # Use sfdisk to make DOS/MBR partitions my $sfdisk_input = join("\\n", @{$sfdisk_input{$device}}); $before = $after = `/bin/echo -e "$sfdisk_input" | /sbin/sfdisk -n -Lq -uB /dev/$device 2>&1`; - $before =~ s/(?:.*\n)+Old situation:(?:.*\n)+?((?:\/dev.*\n)+|No partitions found)(?:.*\n)+/$1/; + $before =~ s/(?:.*\n)+Old situation:(?:.*\n)+?((?:\/dev.*\n)+|(?:)|No partitions found)(?:.*\n)+/$1/; $after =~ s/(?:.*\n)+New situation:(?:.*\n)+?((?:\/dev.*\n)+)(?:.*\n)+/$1/; if ($before eq $after) { print "oneSIS: Partition layout of /dev/$device unchanged. Skipping partitioning ...\n"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jj...@us...> - 2017-07-11 15:21:15
|
Revision: 534 http://sourceforge.net/p/onesis/code/534 Author: jjengla Date: 2017-07-11 15:21:12 +0000 (Tue, 11 Jul 2017) Log Message: ----------- Implement fastmount option for xfs (submitted by Volkmar Glauche <vol...@un...>) Modified Paths: -------------- trunk/oneSIS.pm/lib/oneSIS.pm Modified: trunk/oneSIS.pm/lib/oneSIS.pm =================================================================== --- trunk/oneSIS.pm/lib/oneSIS.pm 2017-07-11 15:19:58 UTC (rev 533) +++ trunk/oneSIS.pm/lib/oneSIS.pm 2017-07-11 15:21:12 UTC (rev 534) @@ -2918,11 +2918,20 @@ # ext filesystems only at the moment $do_fastmount = 0 if (defined $device && exists $partitioned{$device}); if ($do_fastmount) { - if ($fstype !~ /^ext[234]$/i) { - print "oneSIS: Fastmount option not yet supported on $fstype"; - $do_fastmount = 0; + if ($fstype =~ /^xfs$/i) { + my $disklabel = `/usr/sbin/xfs_admin -l $partition`; + chomp $disklabel; + $disklabel =~ /label = "(.*)"/; + if (defined $label) { + unless ($label eq $1) { + $do_fastmount = 0; + } + } + else { + $do_fastmount = 0; + } } - else { + elsif ($fstype =~ /^ext[234]$/i) { my $disklabel = `/sbin/e2label $partition`; chomp $disklabel; if (defined $label) { @@ -2934,6 +2943,10 @@ $do_fastmount = 0; } } + else { + print "oneSIS: Fastmount option not yet supported on $fstype\n"; + $do_fastmount = 0; + } } unless ($do_fastmount) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |