summaryrefslogtreecommitdiffstats
path: root/rescue/drvinst
blob: 1e3899f4bd0bc1518f2ecb9a82ff21f53046f8df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/usr/bin/perl

#
# Guillaume Cottenceau (gc@mandrakesoft.com)
#
# Copyright 2000 MandrakeSoft
#
# This software may be freely redistributed under the terms of the GNU
# public license.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#

local $_ = join '', @ARGV;

"@ARGV" =~ /-h/ and die "usage: drivers_install [drivertype1 drivertype2..]\n";


sub pci_probe {
    my @l;
    foreach (`/usr/bin/lspcidrake`) {
	push @l, do {
	    if (/^(\S+)\s*: (.+) \[([^\]]+)/) {
		{ driver => $1,  description => $2, type => $3 };
	    } elsif (/^(\S+)\s*: (.+)/) {
		{ driver => $1,  description => $2, type => 'NOT_DEFINED' };
	    } else {
		next;
	    }
	};
    }
    @l;
}

sub install_module($$) {
    my ($driver, $descr) = @_;
    print "Installing driver $driver (for \"$descr\")\n";
    system("/sbin/modprobe", $driver) and print "\tfailed\n";
    my $already_usb if 0;
    if (!$already_usb && $driver =~ /usb/) {
	$already_usb = 1;
	print "Installing driver usbkdb\n";
	system('/sbin/modprobe', 'usbkbd') and print "\tfailed\n";
	print "Installing driver keybdev\n";
	system('/sbin/modprobe', 'keybdev') and print "\tfailed\n";
    }
}


#- start
foreach $card (pci_probe()) {
    $card->{type} eq "DISPLAY_VGA" and next;
    $card->{driver} eq "unknown" and next;
    $card->{driver} =~ "Card:" and next;

    if (!@ARGV || grep { $card->{type} =~ /$_/i } @ARGV) {
	install_module($card->{driver}, $card->{description});
    }
}



#-------------------------------------------------
#- $Log$
#- Revision 1.5  2001/09/27 16:00:05  gc
#- don't install usb keyboard drivers more than once
#-
#- Revision 1.4  2001/09/27 15:57:55  gc
#- try to fix usb keyboards
#-
#- Revision 1.3  2001/03/29 11:33:28  gc
#- test for "Card:" and not install, some videoboards are not reported as DISPLAY_VGA :-(
#-
#- Revision 1.2  2001/02/12 18:42:17  uid553
#- pixelization
#-
#- Revision 1.1  2001/02/12 14:31:10  uid535
#- - add lspci, lspcidrake, vim-minimal
#- - better /etc/issue
#- - better PS1
#- - write embryonic tool (installation of detected drivers according to pci cards)
#-
+ my $is_users = $what eq 'users';
+ foreach (cat_($is_users ? '/etc/passwd' : '/etc/group')) {
+ if ($is_users) {
+ push @users, $1 if m/^([^#:]+):[^:]+:[^:]+:/; # or next;
+ } else {
+ push @users, $1 if m/^([^#:]+):[^:]*:[^:]*:/; # or next;
+ }
}
return sort(@users);
}