diff options
Diffstat (limited to 'perl-install/devices.pm')
-rw-r--r-- | perl-install/devices.pm | 77 |
1 files changed, 11 insertions, 66 deletions
diff --git a/perl-install/devices.pm b/perl-install/devices.pm index ecfb47275..7ac79dcce 100644 --- a/perl-install/devices.pm +++ b/perl-install/devices.pm @@ -1,4 +1,4 @@ -package devices; # $Id: devices.pm 270810 2010-09-09 08:11:23Z bor $ +package devices; use diagnostics; use strict; @@ -28,7 +28,7 @@ sub set_loop { my $dev = find_free_loop(); if ($o_encrypt_key && $o_encryption) { - eval { modules::load('cryptoloop', 'cbc', if_(arch() =~ /i.86/, 'aes-i586'), if_( arch() =~ /x86_64/, 'aes-x86_64'), 'aes_generic') }; + eval { modules::load('cryptoloop', list_modules::category2modules('various/crypto')) }; my $cmd = "losetup -p 0 -e $o_encryption $dev $file"; log::l("calling $cmd"); open(my $F, "|$cmd"); @@ -52,22 +52,9 @@ sub find_compressed_image { undef; } -sub get_dynamic_major { - my ($name) = @_; - cat_('/proc/devices') =~ /^(\d+) \Q$name\E$/m && $1; -} - sub init_device_mapper() { require modules; eval { modules::load('dm-mod') }; - make('urandom'); - my $control = '/dev/mapper/control'; - if (! -e $control) { - my ($major) = get_dynamic_major('misc') or return; - my ($minor) = cat_('/proc/misc') =~ /(\d+) device-mapper$/m or return; - mkdir_p(dirname($control)); - syscall_('mknod', $control, c::S_IFCHR() | 0600, makedev($major, $minor)) or die "mknod $control failed: $!"; - } } sub entry { @@ -91,62 +78,20 @@ sub entry { $type = c::S_IFBLK(); $major = ($1 eq 'ida' ? 72 : 104) + $2; $minor = 16 * $3 + ($4 || 0); - } elsif (m,(ataraid)/d(\d+)(?:p(\d+))?,) { - # ATA raid "ataraid/d0{p1}" - $type = c::S_IFBLK(); - $major = 114; - $minor = 16 * $1 + ($2 || 0); } elsif (my ($prefix, $nb) = /(.*?)(\d+)$/) { - my $f = ${{"fd" => sub { c::S_IFBLK(), 2, 0 }, - "hidbp-mse-" => sub { c::S_IFCHR(), 10, 32 }, - "lp" => sub { c::S_IFCHR(), 6, 0 }, - "usb/lp" => sub { c::S_IFCHR(), 180, 0 }, - "input/event" => sub { c::S_IFCHR(), 13, 64 }, - "loop" => sub { c::S_IFBLK(), 7, 0 }, + my $f = ${{ "md" => sub { c::S_IFBLK(), 9, 0 }, - "nst" => sub { c::S_IFCHR(), 9, 128 }, - "sr" => sub { c::S_IFBLK(), 11, 0 }, - "tty" => sub { c::S_IFCHR(), 4, 0 }, - "ttyS" => sub { c::S_IFCHR(), 4, 64 }, "ubd/" => sub { c::S_IFBLK(), 98, 0 }, - "dm-" => sub { c::S_IFBLK(), get_dynamic_major('device-mapper'), 0 }, }}{$prefix}; - if($f) { + if ($f) { ($type, $major, $minor) = $f->(); $minor += $nb; } } unless ($type) { ($type, $major, $minor) = - @{ ${{"aztcd" => [ c::S_IFBLK(), 29, 0 ], - "bpcd" => [ c::S_IFBLK(), 41, 0 ], - "cdu31a" => [ c::S_IFBLK(), 15, 0 ], - "cdu535" => [ c::S_IFBLK(), 24, 0 ], - "cm206cd" => [ c::S_IFBLK(), 32, 0 ], - "gscd" => [ c::S_IFBLK(), 16, 0 ], - "mcd" => [ c::S_IFBLK(), 23, 0 ], - "mcdx" => [ c::S_IFBLK(), 20, 0 ], - "mem" => [ c::S_IFCHR(), 1, 1 ], - "optcd" => [ c::S_IFBLK(), 17, 0 ], - "kbd" => [ c::S_IFCHR(), 11, 0 ], - "psaux" => [ c::S_IFCHR(), 10, 1 ], + @{ ${{ "atibm" => [ c::S_IFCHR(), 10, 3 ], - "random" => [ c::S_IFCHR(), 1, 8 ], - "urandom" => [ c::S_IFCHR(), 1, 9 ], - "sbpcd" => [ c::S_IFBLK(), 25, 0 ], - "sjcd" => [ c::S_IFBLK(), 18, 0 ], - "tty" => [ c::S_IFCHR(), 5, 0 ], - "input/mice" - => [ c::S_IFCHR(), 13, 63 ], - "adbmouse" => [ c::S_IFCHR(), 10, 10 ], #- PPC - "vcsa" => [ c::S_IFCHR(), 7, 128 ], - "zero" => [ c::S_IFCHR(), 1, 5 ], - "null" => [ c::S_IFCHR(), 1, 3 ], - - "initrd" => [ c::S_IFBLK(), 1, 250 ], - "console" => [ c::S_IFCHR(), 5, 1 ], - "systty" => [ c::S_IFCHR(), 4, 0 ], - "lvm" => [ c::S_IFBLK(), 109, 0 ], }}{$_} || [] }; } # Lookup non listed devices in /sys @@ -177,7 +122,7 @@ sub entry { # Now device mapper devices are links and do not appear in /proc or /sys unless ($type) { if (-e "/dev/$_") { - my (undef,undef,$mode,undef,undef,undef,$rdev,undef) = stat("/dev/$_"); + my (undef, undef, $mode, undef, undef, undef, $rdev, undef) = stat("/dev/$_"); ($major, $minor) = unmakedev($rdev); $type = $mode & c::S_IFMT(); } @@ -212,7 +157,7 @@ sub make($) { sub simple_partition_scan { my ($part) = @_; - $part->{device} =~ /([hsv]d[a-z])(\d+)$/; + $part->{device} =~ /((?:[hsv]|xv)d[a-z]|mmcblk|(nvme\d+n)\d+p)(\d+)$/; } sub part_number { my ($part) = @_; @@ -225,12 +170,12 @@ sub part_prefix { sub prefix_for_dev { my ($dev) = @_; - $dev . ($dev =~ /\d$/ || $dev =~ m!mapper/! ? 'p' : ''); + $dev . ($dev =~ /\d$/ ? 'p' : ''); } sub should_prefer_UUID { my ($dev) = @_; - $dev =~ /^([hsv]d)/; + $dev =~ /^((?:[hsv]|xv)d|mmcblk|nvme)/; } sub symlink_now_and_register { @@ -239,9 +184,9 @@ sub symlink_now_and_register { #- add a static udev device node, we can't do it with a udev rule, #- eg, ttySL0 is a symlink created by a daemon - symlinkf($if, "$::prefix/lib/udev/devices/$of"); + symlinkf($if, "$::prefix/usr/lib/udev/devices/$of"); - symlinkf($if, "$::prefix/dev/$of"); + symlinkf($if, "/dev/$of"); } |