summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--urpm.pm34
-rw-r--r--urpm/args.pm3
-rw-r--r--urpm/install.pm4
3 files changed, 39 insertions, 2 deletions
diff --git a/urpm.pm b/urpm.pm
index 7c208505..2cbb3d2d 100644
--- a/urpm.pm
+++ b/urpm.pm
@@ -93,6 +93,40 @@ sub create_var_lib_rpm {
]);
}
+sub modify_rpm_macro {
+ my ($name, $to_remove, $to_add) = @_;
+
+ my $val = URPM::expand('%' . $name);
+ $val =~ s/$to_remove/$to_add/ or $val = join(' ', grep {$_} $val, $to_add);
+ URPM::add_macro("$name $val");
+}
+
+sub set_tune_rpm {
+ my ($urpm, $para) = @_;
+
+ my %h = map { $_ => 1 } map {
+ if ($_ eq 'all') {
+ ('nofsync', 'private');
+ } else {
+ $_;
+ }
+ } split(',', $para);
+
+ $urpm->{tune_rpm} = \%h;
+}
+
+sub tune_rpm {
+ my ($urpm) = @_;
+
+ if ($urpm->{tune_rpm}{nofsync}) {
+ modify_rpm_macro('__dbi_other', 'fsync', 'nofsync');
+ }
+ if ($urpm->{tune_rpm}{private}) {
+ urpm::sys::clean_rpmdb_shared_regions($urpm->{root});
+ modify_rpm_macro('__dbi_other', 'usedbenv', 'private');
+ }
+}
+
sub protocol_from_url {
my ($url) = @_;
$url =~ m!^(\w+)(_[^:]*)?:! && $1;
diff --git a/urpm/args.pm b/urpm/args.pm
index cb4d0e9f..049aaafa 100644
--- a/urpm/args.pm
+++ b/urpm/args.pm
@@ -54,6 +54,7 @@ my %options_spec_all = (
'urpmi-root=s' => sub { urpm::set_files($urpm, $_[1]) },
'wait-lock' => \$options{wait_lock},
'use-copied-hdlist' => sub { $urpm->{options}{use_copied_hdlist} = 1 },
+ 'tune-rpm=s' => sub { urpm::set_tune_rpm($urpm, $_[1]) },
);
my %options_spec = (
@@ -423,6 +424,8 @@ sub parse_cmdline {
$options{verbose} >= 0 or $urpm->{info} = sub {};
$options{verbose} > 0 or $urpm->{log} = sub {};
+ $urpm->{tune_rpm} and urpm::tune_rpm($urpm);
+
if ($tool ne 'urpmi.addmedia' && $tool ne 'urpmi.update' &&
$options{probe_with} && !$options{usedistrib}) {
die N("Can't use %s without %s", "--probe-$options{probe_with}", "--use-distrib");
diff --git a/urpm/install.pm b/urpm/install.pm
index 1251c8e0..683047ce 100644
--- a/urpm/install.pm
+++ b/urpm/install.pm
@@ -254,8 +254,8 @@ sub install {
}
unlink @produced_deltas;
- if ($urpm->{root} && !$options{test}) {
- $urpm->{debug} and $urpm->{debug}("workaround bug in rpmlib by removing /var/lib/rpm/__db*");
+ if ($urpm->{root} && !$options{test} || $urpm->{tune_rpm}{private}) {
+ $urpm->{root} && $urpm->{debug} and $urpm->{debug}("workaround bug in rpmlib by removing /var/lib/rpm/__db*");
urpm::sys::clean_rpmdb_shared_regions($urpm->{root});
}