diff options
Diffstat (limited to 'perl-install/fs/mount_options.pm')
| -rw-r--r-- | perl-install/fs/mount_options.pm | 98 | 
1 files changed, 54 insertions, 44 deletions
| diff --git a/perl-install/fs/mount_options.pm b/perl-install/fs/mount_options.pm index e31db1653..0b63f7260 100644 --- a/perl-install/fs/mount_options.pm +++ b/perl-install/fs/mount_options.pm @@ -1,4 +1,4 @@ -package fs::mount_options; # $Id$ +package fs::mount_options;  use diagnostics;  use strict; @@ -12,6 +12,7 @@ sub list() {      my %non_defaults = (  			sync => 'async', noatime => 'atime', noauto => 'auto', ro => 'rw',   			user => 'nouser', nodev => 'dev', noexec => 'exec', nosuid => 'suid', +			user_xattr => 'nouser_xattr',  		       );      my @user_implies = qw(noexec nodev nosuid);      \%non_defaults, \@user_implies; @@ -26,30 +27,31 @@ sub unpack {      my @auto_fs = fs::type::guessed_by_mount();      my %per_fs = (  		  iso9660 => [ qw(unhide) ], -		  vfat => [ qw(umask=0 umask=0022) ], +		  vfat => [ qw(flush umask=0 umask=0022) ],  		  ntfs => [ qw(umask=0 umask=0022) ],  		  nfs => [ qw(rsize=8192 wsize=8192) ], -		  smbfs => [ qw(username= password=) ], -		  davfs => [ qw(username= password= uid= gid=) ], +		  cifs => [ qw(username= password=) ], +		  davfs2 => [ qw(username= password= uid= gid=) ],  		  reiserfs => [ 'notail' ],  		 ); -    push @{$per_fs{$_}}, 'usrquota', 'grpquota' foreach 'ext2', 'ext3', 'xfs'; +    push @{$per_fs{$_}}, 'usrquota', 'grpquota' foreach 'ext2', 'ext3', 'ext4', 'xfs'; +    push @{$per_fs{$_}}, 'acl' foreach 'ext2', 'ext3', 'ext4', 'reiserfs';      while (my ($fs, $l) = each %per_fs) { -	$part->{fs_type} eq $fs || $part->{fs_type} eq 'auto' && member($fs, @auto_fs) or next; +	member($part->{fs_type}, $fs, 'auto') && member($fs, @auto_fs) or next;  	$non_defaults->{$_} = 1 foreach @$l;      } -    $non_defaults->{encrypted} = 1; - -    $non_defaults->{supermount} = 1 if $part->{fs_type} =~ /:/ || member($part->{fs_type}, 'auto', @auto_fs); +    $non_defaults->{relatime} = 1 if isTrueLocalFS($part) || $part->{fs_type} eq 'ntfs-3g';      my $defaults = { reverse %$non_defaults };      my %options = map { $_ => '' } keys %$non_defaults;      my @unknown;      foreach (split(",", $packed_options)) { -	if ($_ eq 'user') { -	    $options{$_} = 1 foreach 'user', @$user_implies; +	if ($_ eq 'defaults') { +	    #- skip +	} elsif (member($_, 'user', 'users')) { +	    $options{$_} = 1 foreach $_, @$user_implies;  	} elsif (exists $non_defaults->{$_}) {  	    $options{$_} = 1;  	} elsif ($defaults->{$_}) { @@ -84,8 +86,9 @@ sub pack_ {  	push @l, 'umask=' . min(@umasks);      } -    if (delete $options->{user}) { -	push @l, 'user'; +    if (my $user = find { delete $options->{$_} } 'users', 'user') { +	push @l, $user; +	delete $options->{user};  	foreach (@$user_implies) {  	    if (!delete $options->{$_}) {  		# overriding @@ -100,48 +103,51 @@ sub pack_ {  }  sub pack {      my ($part, $options, $unknown) = @_; -    $part->{options} = pack_($part, $options, $unknown); +    $unknown =~ s/ /,/g; +    $part->{options} = pack_($part, $options, $unknown) || 'defaults';      noreturn();  }  # update me on each util-linux new release:  sub help() {      ( +	'acl' => N("Enable POSIX Access Control Lists"), -	'encrypted' => N("Use an encrypted file system"), +	'flush' => N("Flush write cache on file close"),  	'grpquota' => N("Enable group disk quota accounting and optionally enforce limits"), -	'noatime' => N("Do not update inode access times on this file system +	'noatime' => N("Do not update inode access times on this filesystem +(e.g, for faster access on the news spool to speed up news servers)."), + +	'relatime' => N("Update inode access times on this filesystem in a more efficient way  (e.g, for faster access on the news spool to speed up news servers)."),  	'noauto' => N("Can only be mounted explicitly (i.e., -the -a option will not cause the file system to be mounted)."), +the -a option will not cause the filesystem to be mounted)."), -	'nodev' => N("Do not interpret character or block special devices on the file system."), +	'nodev' => N("Do not interpret character or block special devices on the filesystem."),  	'noexec' => N("Do not allow execution of any binaries on the mounted -file system. This option might be useful for a server that has file systems +filesystem. This option might be useful for a server that has filesystems  containing binaries for architectures other than its own."),  	'nosuid' => N("Do not allow set-user-identifier or set-group-identifier  bits to take effect. (This seems safe, but is in fact rather unsafe if you  have suidperl(1) installed.)"), -	'ro' => N("Mount the file system read-only."), +	'ro' => N("Mount the filesystem read-only."), -	'sync' => N("All I/O to the file system should be done synchronously."), +	'sync' => N("All I/O to the filesystem should be done synchronously."), -	'supermount' => '', +	'users' => N("Allow every user to mount and umount the filesystem."),          -	'user' => N("Allow an ordinary user to mount the file system. The -name of the mounting user is written to mtab so that he can unmount the file -system again. This option implies the options noexec, nosuid, and nodev -(unless overridden by subsequent options, as in the option line -user,exec,dev,suid )."), +	'user' => N("Allow an ordinary user to mount the filesystem."),           	'usrquota' => N("Enable user disk quota accounting, and optionally enforce limits"), +        'user_xattr' => N("Support \"user.\" extended attributes"), +          'umask=0' => N("Give write access to ordinary users"),          'umask=0022' => N("Give read-only access to ordinary users"), @@ -157,11 +163,11 @@ sub rationalize {      if ($part->{fs_type} ne 'reiserfs') {  	$options->{notail} = 0;      } -    if (!fs::type::can_be_one_of_those_fs_types($part, 'vfat', 'smbfs', 'iso9660', 'udf')) { +    if (!fs::type::can_be_one_of_those_fs_types($part, 'vfat', 'cifs', 'iso9660', 'udf')) {  	delete $options->{'codepage='};      }      if (member($part->{mntpoint}, fs::type::directories_needed_to_boot())) { -	foreach (qw(users user noauto supermount)) { +	foreach (qw(users user noauto)) {  	    if ($options->{$_}) {  		$options->{$_} = 0;  		$options->{$_} = 0 foreach qw(nodev noexec nosuid); @@ -174,17 +180,15 @@ sub rationalize {  sub set_default {      my ($part, %opts) = @_; -    #- opts are: useSupermount security iocharset codepage ignore_is_removable +    #- opts are: security iocharset codepage ignore_is_removable      my ($options, $unknown) = &unpack($part);      if (!$opts{ignore_is_removable} && $part->{is_removable}   	  && !member($part->{mntpoint}, fs::type::directories_needed_to_boot())   	  && (!$part->{fs_type} || $part->{fs_type} eq 'auto' || $part->{fs_type} =~ /:/)) { -	$options->{supermount} = $opts{useSupermount} && !($opts{useSupermount} eq 'magicdev' && $part->{media_type} eq 'cdrom'); -	$part->{fs_type} = !$options->{supermount} ? 'auto' : -		    $part->{media_type} eq 'cdrom' ? 'udf:iso9660' : 'ext2:vfat'; -	$options->{sync} = 1 if $part->{media_type} ne 'cdrom'; +	$part->{fs_type} = 'auto'; +	$options->{flush} = 1 if $part->{media_type} ne 'cdrom';      }      if ($part->{media_type} eq 'cdrom') { @@ -193,22 +197,24 @@ sub set_default {      if ($part->{media_type} eq 'fd') {  	# slow device so do not loose time, write now! -	$options->{sync} = 1; +	$options->{flush} = 1;      } -    if (isTrueFS($part)) { +    if (isTrueLocalFS($part)) {  	#- noatime on laptops (do not wake up the hd) +	#- otherwise relatime (wake up the hd less often / better performances)  	#- Do  not  update  inode  access times on this -	#- file system (e.g, for faster access  on  the +	#- filesystem (e.g, for faster access  on  the  	#- news spool to speed up news servers). -	$options->{noatime} = detect_devices::isLaptop(); +	$options->{relatime} = $options->{noatime} = 0; +	$options->{ detect_devices::isLaptop() ? 'noatime' : 'relatime' } = 1 if !$opts{force_atime};      }      if ($part->{fs_type} eq 'nfs') {  	put_in_hash($options, {   			       nosuid => 1, 'rsize=8192,wsize=8192' => 1, soft => 1,  			      });      } -    if ($part->{fs_type} eq 'smbfs') { +    if ($part->{fs_type} eq 'cifs') {  	add2hash($options, { 'username=' => '%' }) if !$options->{'credentials='};      }      if (fs::type::can_be_this_fs_type($part, 'vfat')) { @@ -218,27 +224,31 @@ sub set_default {  			      }) if $part->{is_removable};  	put_in_hash($options, { -			       'umask=0' => $opts{security} < 3, 'umask=0022' => $opts{security} < 4, +			       'umask=0' => $opts{security} <= 1 && !isESP($part),  			       'iocharset=' => $opts{iocharset}, 'codepage=' => $opts{codepage},  			      });      }      if ($part->{fs_type} eq 'ntfs') {  	put_in_hash($options, { ro => 1, 'nls=' => $opts{iocharset}, -				'umask=0' => $opts{security} < 3, 'umask=0022' => $opts{security} < 4, +				'umask=0' => $opts{security} < 1, 'umask=0022' => $opts{security} < 2,  			      });      }      if (fs::type::can_be_this_fs_type($part, 'iso9660')) { -	put_in_hash($options, { user => 1, noexec => 0, 'iocharset=' => $opts{iocharset} }); +	put_in_hash($options, { users => 1, noexec => 0, 'iocharset=' => $opts{iocharset} });      }      if ($part->{fs_type} eq 'reiserfs') {  	$options->{notail} = 1; +	$options->{user_xattr} = 1; +    } +    if (member($part->{fs_type}, qw(ext2 ext3 ext4))) { +	$options->{acl} = 1;      }      if (isLoopback($part) && !isSwap($part)) { #- no need for loop option for swap files  	$options->{loop} = 1;      }      # rationalize: no need for user -    if ($options->{autofs} || $options->{supermount}) { +    if ($options->{autofs}) {  	$options->{users} = $options->{user} = 0;      } @@ -256,7 +266,7 @@ sub set_default {  sub set_all_default {      my ($all_hds, %opts) = @_; -    #- opts are: useSupermount security iocharset codepage +    #- opts are: security iocharset codepage      foreach my $part (fs::get::really_all_fstab($all_hds)) {  	set_default($part, %opts); | 
