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
|
#!/usr/bin/perl
##- Nanar <nanardon@mandrake.org>
##-
##- This program is free software; you can redistribute it and/or modify
##- it under the terms of the GNU General Public License as published by
##- the Free Software Foundation; either version 2, or (at your option)
##- any later version.
##-
##- This program is distributed in the hope that it will be useful,
##- but WITHOUT ANY WARRANTY; without even the implied warranty of
##- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
##- GNU General Public License for more details.
##-
##- 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# $Id$
use strict;
use Hdlist;
use Getopt::Long qw(:config pass_through);
sub help {
die "
Usage $0 [options] [-i rpm_to_install.rpm] [-e rpm_name_to_remove]
This script mimic a simple rpm programs for installing or removing packages
options:
--dbpath path alternate path to rpmdb
--root root set rootdir for installation
--test only test, do not install pkg
--justdb only install package in the db, not on filesystem
Notice it permit to install and to remove package in same time ! :)
";
}
my (@rpmi, @rpme);
my @installflags;
my ($root, $dbpath) =
(undef, undef );
GetOptions(
'root=s' => \$root,
'dbpath=s' => \$dbpath,
'test' => sub { push(@installflags, 'TEST') },
'justdb' => sub { push(@installflags, 'JUSTDB') },
'h|help' => sub { help() },
);
{
my $install = 1;
while (my $arg = shift(@ARGV)) {
$arg =~ /^-i$/ and do {
$install = 1;
next;
};
$arg =~ m/^-e$/ and do {
$install = 0;
next;
};
if ($install) {
push(@rpmi, $arg);
} else {
push(@rpme, $arg);
}
}
}
(@rpmi || @rpme) or help();
if (defined($dbpath)) {
Hdlist::add_macro("_dbpath $dbpath");
}
my $db = newdb(0, $root);
foreach my $rpm (@rpmi) {
my $hdr = rpm2header($rpm) or do {
warn "Can't get header from $rpm, skipping";
next;
};
$db->transadd($hdr, $rpm, 1);
}
foreach my $rpm (@rpme) {
$db->transremove($rpm) or warn "Can't remove unknown package $rpm, skipping";
}
$db->transcheck();
my @pb = $db->transpb();
if (@pb) { die(join('\n', map { s/^/\t/ } format_rpmpb(@pb))); }
$db->transrun(undef, @installflags);
|