blob: 92c4e58abc6c985452a9a6ba77d977ef02e7b546 (
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
warn "PATCHING\n";
log::l("PATCHING\n");
use install_any;
undef *find_root_parts;
*find_root_parts = sub {
my ($fstab, $prefix) = @_;
map {
my $handle = any::inspect($_, $prefix);
my $s = $handle && cat_("$handle->{dir}/etc/redhat-release");
if ($s) {
chomp($s);
$s =~ s/\s+for\s+\S+//;
log::l("find_root_parts found $_->{device}: $s");
{ release => $s, part => $_ };
} else { () }
} @$fstab;
};
use pkgs;
package pkgs;
my $old_compare_pkg = \&URPM::Package::compare_pkg;
undef *URPM::Package::compare_pkg;
*URPM::Package::compare_pkg = sub {
my ($lpkg, $rpkg) = @_;
my $c = ($lpkg->release =~ /mdk$/ ? 1 : 0) - ($rpkg->release =~ /mdk$/ ? 1 : 0);
if ($c) {
my $lpkg_ver = $lpkg->version . '-' . $lpkg->release;
my $rpkg_ver = $rpkg->version . '-' . $rpkg->release;
log::l($lpkg->name . ' ' . $rpkg->name . ': prefering ' . ($c == 1 ? "$lpkg_ver over $rpkg_ver" : "$rpkg_ver over $lpkg_ver"));
return $c;
}
&$old_compare_pkg;
};
my $old_compare = \&URPM::Package::compare;
undef *URPM::Package::compare;
*URPM::Package::compare = sub {
my ($lpkg, $rpkg_ver) = @_;
my $c = ($lpkg->release =~ /mdk$/ ? 1 : 0) - ($rpkg_ver =~ /mdk$/ ? 1 : 0);
if ($c) {
my $lpkg_ver = $lpkg->version . '-' . $lpkg->release;
log::l($lpkg->name . ' ' . ': prefering ' . ($c == 1 ? "$lpkg_ver over $rpkg_ver" : "$rpkg_ver over $lpkg_ver"));
return $c;
}
&$old_compare;
};
use install2;
package install2;
my $old_choosePackages = \&choosePackages;
undef *choosePackages;
*choosePackages = sub {
my @should_not_be_dirs = qw(/usr/X11R6/lib/X11/xkb /usr/share/locale/zh_TW/LC_TIME /usr/include/GL);
my @should_be_dirs = qw(/etc/X11/xkb);
foreach (@should_not_be_dirs) {
my $f = "$::prefix$_";
rm_rf($f) if !-l $f && -d $f;
}
foreach (@should_be_dirs) {
my $f = "$::prefix$_";
rm_rf($f) if -l $f || !-d $f;
}
unlink "$::prefix/etc/X11/XF86Config";
unlink "$::prefix/etc/X11/XF86Config-4";
&$old_choosePackages;
};
use fs;
package fs;
my $old = \&read_fstab;
undef *read_fstab;
*read_fstab = sub {
my @l = &$old;
my %label2device = map {
my $dev = devices::make($_->{device});
if (my ($label) = `tune2fs -l $dev 2>/dev/null` =~ /volume name:\s*(\S+)/) {
log::l("device $_->{device} has label $label");
$label => $_->{device};
} else {
();
}
} fsedit::read_proc_partitions([]);
foreach (@l) {
my ($label) = ($_->{device_LABEL} || $_->{device}) =~ /^LABEL=(.*)/ or next;
if ($label2device{$label}) {
$_->{device} = $label2device{$label};
} else {
log::l("can't find label $label");
}
}
@l;
};
use any;
package any;
undef *fix_broken_alternatives;
*fix_broken_alternatives = sub {
#- fix bad update-alternatives that may occurs after upgrade (and sometimes for install too).
-d "$::prefix/etc/alternatives" or return;
foreach (all("$::prefix/etc/alternatives")) {
log::l("setting alternative $_");
run_program::rooted($::prefix, 'update-alternatives', '--auto', $_);
}
};
|