[kernel] r15347 - in dists/trunk/linux-2.6/debian: . templates
Ben Hutchings
benh at alioth.debian.org
Wed Mar 10 03:57:53 UTC 2010
Author: benh
Date: Wed Mar 10 03:57:49 2010
New Revision: 15347
Log:
linux-base: For consistency with fresh installations, use or assign UUIDs rather than labels where both are available (Closes: #572376)
Modified:
dists/trunk/linux-2.6/debian/changelog
dists/trunk/linux-2.6/debian/linux-base.postinst
dists/trunk/linux-2.6/debian/linux-base.templates
dists/trunk/linux-2.6/debian/templates/control.main.in
Modified: dists/trunk/linux-2.6/debian/changelog
==============================================================================
--- dists/trunk/linux-2.6/debian/changelog Wed Mar 10 01:06:40 2010 (r15346)
+++ dists/trunk/linux-2.6/debian/changelog Wed Mar 10 03:57:49 2010 (r15347)
@@ -11,6 +11,8 @@
of unknown filesystem type (Closes: #572341, #572445)
* linux-base: Don't accept empty filesystem labels as identifiers
(Closes: #572438)
+ * linux-base: For consistency with fresh installations, use or assign
+ UUIDs rather than labels where both are available (Closes: #572376)
-- Ben Hutchings <ben at decadent.org.uk> Sun, 28 Feb 2010 17:01:33 +0000
Modified: dists/trunk/linux-2.6/debian/linux-base.postinst
==============================================================================
--- dists/trunk/linux-2.6/debian/linux-base.postinst Wed Mar 10 01:06:40 2010 (r15346)
+++ dists/trunk/linux-2.6/debian/linux-base.postinst Wed Mar 10 03:57:49 2010 (r15347)
@@ -22,6 +22,7 @@
use Debconf::Client::ConfModule ':all';
use FileHandle;
use POSIX ();
+use UUID;
package DebianKernel::DiskId;
@@ -1086,33 +1087,46 @@
# with few exceptions. Such as including a '^'.
suffix => '^old'});
-### Filesystem relabelling
+### Filesystem labels and UUIDs
-sub ext2_label {
+sub ext2_set_label {
my ($bdev, $label) = @_;
- system('e2label', $bdev, $label) == 0 or die "e2label failed: $?";
+ system('tune2fs', '-L', $label, $bdev) == 0 or die "tune2fs failed: $?";
+}
+sub ext2_set_uuid {
+ my ($bdev, $uuid) = @_;
+ system('tune2fs', '-U', $uuid, $bdev) == 0 or die "tune2fs failed: $?";
}
-sub jfs_label {
+sub jfs_set_label {
my ($bdev, $label) = @_;
system('jfs_tune', '-L', $label, $bdev) == 0 or die "jfs_tune failed: $?";
}
+sub jfs_set_uuid {
+ my ($bdev, $uuid) = @_;
+ system('jfs_tune', '-U', $uuid, $bdev) == 0 or die "jfs_tune failed: $?";
+}
-sub fat_label {
+sub fat_set_label {
my ($bdev, $label) = @_;
- system('dosfslabel', $bdev, $label) == 0 or die "dosfslabel failed: $?";;
+ system('dosfslabel', $bdev, $label) == 0 or die "dosfslabel failed: $?";
}
-sub ntfs_label {
+sub ntfs_set_label {
my ($bdev, $label) = @_;
system('ntfslabel', $bdev, $label) == 0 or die "ntfslabel failed: $?";
}
-sub reiserfs_label {
+sub reiserfs_set_label {
my ($bdev, $label) = @_;
system('reiserfstune', '--label', $label, $bdev)
or die "reiserfstune failed: $?";
}
+sub reiserfs_set_uuid {
+ my ($bdev, $uuid) = @_;
+ system('reiserfstune', '--uuid', $uuid, $bdev)
+ or die "reiserfstune failed: $?";
+}
# There is no command to relabel swap, and we mustn't run mkswap if
# the partition is already in use. Thankfully the header format is
@@ -1129,9 +1143,10 @@
# };
# and has the signature 'SWAPSPACE2' at the end of the first page.
use constant { SWAP_SIGNATURE => 'SWAPSPACE2',
+ SWAP_UUID_OFFSET => 1036, SWAP_UUID_LEN => 16,
SWAP_LABEL_OFFSET => 1052, SWAP_LABEL_LEN => 16 };
-sub swap_label {
- my ($bdev, $label) = @_;
+sub _swap_set_field {
+ my ($bdev, $offset, $value) = @_;
my $pagesize = POSIX::sysconf(POSIX::_SC_PAGESIZE) or die "$!";
my ($length, $signature);
@@ -1146,11 +1161,10 @@
die "swap signature not found on $bdev";
}
- # Set the label
- $label = pack('Z' . SWAP_LABEL_LEN, $label);
- POSIX::lseek($fd, SWAP_LABEL_OFFSET, POSIX::SEEK_SET);
- $length = POSIX::write($fd, $label, SWAP_LABEL_LEN);
- if (!defined($length) || $length != SWAP_LABEL_LEN) {
+ # Set the field
+ POSIX::lseek($fd, $offset, POSIX::SEEK_SET);
+ $length = POSIX::write($fd, $value, length($value));
+ if (!defined($length) || $length != length($value)) {
my $error = "$!";
POSIX::close($fd);
die $error;
@@ -1158,29 +1172,54 @@
POSIX::close($fd);
}
+sub swap_set_label {
+ my ($bdev, $label) = @_;
+ _swap_set_field($bdev, SWAP_LABEL_OFFSET, pack('Z' . SWAP_LABEL_LEN, $label));
+}
+sub swap_set_uuid {
+ my ($bdev, $uuid) = @_;
+ my $uuid_bin;
+ if (UUID::parse($uuid, $uuid_bin) != 0 ||
+ length($uuid_bin) != SWAP_UUID_LEN) {
+ die "internal error: invalid UUID string";
+ }
+ _swap_set_field($bdev, SWAP_UUID_OFFSET, $uuid_bin);
+}
-sub ufs_label {
+sub ufs_set_label {
my ($bdev, $label) = @_;
system('tunefs.ufs', '-L', $label, $bdev) or die "tunefs.ufs failed: $?";
}
-sub xfs_label {
+sub xfs_set_label {
my ($bdev, $label) = @_;
system('xfs_admin', '-L', $label, $bdev) or die "xfs_admin failed: $?";
}
-
-my %label_types = (ext2 => { len => 16, relabel => \&ext2_label },
- ext3 => { len => 16, relabel => \&ext2_label },
- ext4 => { len => 16, relabel => \&ext2_label },
- jfs => { len => 16, relabel => \&jfs_label },
- msdos => { len => 11, relabel => \&fat_label },
- ntfs => { len => 128, relabel => \&ntfs_label },
- reiserfs => { len => 16, relabel => \&reiserfs_label },
- swap => { len => SWAP_LABEL_LEN,
- relabel => \&swap_label },
- ufs => { len => 32, relabel => \&ufs_label },
- vfat => { len => 11, relabel => \&fat_label },
- xfs => { len => 12, relabel => \&xfs_label });
+sub xfs_set_uuid {
+ my ($bdev, $uuid) = @_;
+ system('xfs_admin', '-U', $uuid, $bdev) or die "xfs_admin failed: $?";
+}
+
+my %filesystem_types = (
+ ext2 => { label_len => 16, set_label => \&ext2_set_label,
+ set_uuid => \&ext2_set_uuid },
+ ext3 => { label_len => 16, set_label => \&ext2_set_label,
+ set_uuid => \&ext2_set_uuid },
+ ext4 => { label_len => 16, set_label => \&ext2_set_label,
+ set_uuid => \&ext2_set_uuid },
+ jfs => { label_len => 16, set_label => \&jfs_set_label,
+ set_uuid => \&jfs_set_uuid },
+ msdos => { label_len => 11, set_label => \&fat_set_label },
+ ntfs => { label_len => 128, set_label => \&ntfs_set_label },
+ reiserfs => { label_len => 16, set_label => \&reiserfs_set_label,
+ set_uuid => \&reiserfs_set_uuid },
+ swap => { label_len => SWAP_LABEL_LEN, set_label => \&swap_set_label,
+ set_uuid => \&swap_set_uuid },
+ ufs => { label_len => 32, set_label => \&ufs_set_label },
+ vfat => { label_len => 11, set_label => \&fat_set_label },
+ xfs => { label_len => 12, set_label => \&xfs_set_label,
+ set_uuid => \&xfs_set_uuid }
+ );
my %bdev_map;
my @matched_configs;
@@ -1253,13 +1292,16 @@
sub add_tag {
# Map disks to labels/UUIDs and vice versa. Include all disks in
# the reverse mapping so we can detect ambiguity.
- my ($bdev, $name, $value) = @_;
+ my ($bdev, $name, $value, $new) = @_;
my $id = "$name=$value";
push @{$id_map{$id}}, $bdev;
if (exists($bdev_map{$bdev})) {
$bdev_map{$bdev}->{$name} = $value;
push @{$bdev_map{$bdev}->{ids}}, $id;
}
+ if ($new) {
+ $bdev_map{$bdev}->{new_id} = $id;
+ }
}
sub scan_devices {
@@ -1280,18 +1322,26 @@
}
}
-sub assign_labels {
+sub assign_new_ids {
my $hostname = (POSIX::uname())[1];
- # For all devices that have no alternate device ids, suggest labelling
- # them based on fstab or just using a generic label.
+ # For all devices that have no alternate device ids, suggest setting
+ # UUIDs, labelling them based on fstab or just using a generic label.
for my $bdev (keys(%bdev_map)) {
next if $#{$bdev_map{$bdev}->{ids}} >= 0;
my $type = $bdev_map{$bdev}->{type};
- next unless defined($type) && exists($label_types{$type});
+ next unless defined($type) && exists($filesystem_types{$type});
- my $label_len = $label_types{$type}->{len};
+ if (defined($filesystem_types{$type}->{set_uuid})) {
+ my ($uuid_bin, $uuid);
+ UUID::generate($uuid_bin);
+ UUID::unparse($uuid_bin, $uuid);
+ add_tag($bdev, 'UUID', $uuid, 1);
+ next;
+ }
+
+ my $label_len = $filesystem_types{$type}->{len};
my $label;
use bytes; # string lengths are in bytes
@@ -1331,17 +1381,23 @@
} while (exists($id_map{"LABEL=$label"}));
}
- add_tag($bdev, 'LABEL', $label);
- $bdev_map{$bdev}->{relabel} = 1;
+ add_tag($bdev, 'LABEL', $label, 1);
}
}
-sub relabel {
+sub set_new_ids {
for my $bdev (keys(%bdev_map)) {
my $bdev_info = $bdev_map{$bdev};
- if ($bdev_info->{relabel}) {
- my $relabel = $label_types{$bdev_info->{type}}->{relabel};
- &{$relabel}($bdev, $bdev_info->{LABEL});
+ if ($bdev_info->{new_id}) {
+ my ($name, $value) = split(/=/, $bdev_info->{new_id}, 2);
+ my $setter;
+ if ($name eq 'UUID') {
+ $setter = $filesystem_types{$bdev_info->{type}}->{set_uuid};
+ } elsif ($name eq 'LABEL') {
+ $setter = $filesystem_types{$bdev_info->{type}}->{set_label};
+ }
+ defined($setter) or die "internal error: invalid new_id type";
+ &{$setter}($bdev, $value);
}
}
}
@@ -1410,14 +1466,15 @@
if ($answer eq 'true') {
scan_devices();
- assign_labels();
+ assign_new_ids();
- if (grep({$bdev_map{$_}->{relabel}} keys(%bdev_map))) {
+ if (grep({$bdev_map{$_}->{new_id}} keys(%bdev_map))) {
$question = 'linux-base/disk-id-convert-plan';
($ret, $seen) = subst($question, 'relabel',
join("\\n",
- map({sprintf("%s: %s", $_, $bdev_map{$_}->{LABEL})}
- grep({$bdev_map{$_}->{relabel}}
+ map({sprintf("%s: %s",
+ $_, $bdev_map{$_}->{new_id})}
+ grep({$bdev_map{$_}->{new_id}}
keys(%bdev_map)))));
die "Error setting debconf substitutions in $question: $seen" if $ret;
} else {
@@ -1448,7 +1505,7 @@
if ($answer ne 'true') {
# TODO: go back to the auto/manual question or allow editing the plan
} else {
- relabel();
+ set_new_ids();
update_config();
}
}
Modified: dists/trunk/linux-2.6/debian/linux-base.templates
==============================================================================
--- dists/trunk/linux-2.6/debian/linux-base.templates Wed Mar 10 01:06:40 2010 (r15346)
+++ dists/trunk/linux-2.6/debian/linux-base.templates Wed Mar 10 03:57:49 2010 (r15347)
@@ -15,7 +15,7 @@
Type: boolean
Default: true
Description: Apply these configuration changes to disk device ids?
- These devices will be relabelled:
+ These devices will be assigned UUIDs or labels:
.
${relabel}
.
Modified: dists/trunk/linux-2.6/debian/templates/control.main.in
==============================================================================
--- dists/trunk/linux-2.6/debian/templates/control.main.in Wed Mar 10 01:06:40 2010 (r15346)
+++ dists/trunk/linux-2.6/debian/templates/control.main.in Wed Mar 10 03:57:49 2010 (r15347)
@@ -79,7 +79,7 @@
Package: linux-base
Architecture: all
-Depends: libapt-pkg-perl, ${misc:Depends}
+Depends: libapt-pkg-perl, libuuid-perl, ${misc:Depends}
Description: Linux image base package
This package contains files and support scripts for all Linux
images.
More information about the Kernel-svn-changes
mailing list