summaryrefslogtreecommitdiffstats
path: root/RPM4/examples/rpminstall
blob: fef5cafdfd13f6da0e2093857771dd000ca33ff9 (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
#!/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);