#!/usr/bin/perl -w

use strict;
my $prog=$0;
$0=~s!.*/!!;

my $repository=shift || usage();
my $dstdir=shift || usage();

opendir(DIR, $repository) || die("$0: opendir $repository: $!\n");
my @avail=grep { /\.i386\.rpm$/ || /\.noarch\.rpm$/ } readdir(DIR);
closedir(DIR) || die("$0: closedir $repository: $!\n");

my %avail;
for (@avail)
{
	# NAME VER   REL  ARCH     RPM
	/^(.*)-[^-]+-[^-]+\.[^\.]+.rpm$/ || die("$0: Couldn't parse RPM name: $_\n");
	die("$0: Duplicate RPM for $1: $_ vs $avail{$1}\n") if exists($avail{$1});
	$avail{$1}=$_;
}

my @rpm;
while (<STDIN>)
{
	chomp;
	next if $_ eq "";
	die("$0: Can't find wanted rpm: $_\n") unless exists($avail{$_});
	push(@rpm, $avail{$_});
}

die("$0: Can't find destination directory: $dstdir\n") unless (-d $dstdir);
die("$0: Destination directory already contains a RedHat installation\n")
	if (-d "$dstdir/var");

mkdir("$dstdir/var", 0755) && 
	mkdir("$dstdir/var/lib", 0755) && 
	mkdir("$dstdir/var/lib/rpm", 0755) &&
	mkdir("$dstdir/ram", 0755) ||
	die("Couldn't make initial directories in $dstdir: $!\n");

system("rpm", "-r", $dstdir, "--initdb") == 0 
	|| die("rpm --initdb failed (\$?=$?)\n");

my @excludedirs=qw(/etc/locale /usr/lib/locale /usr/share/locale 
	/usr/include /usr/lib/gconv /usr/share/zoneinfo /usr/share/i18n 
	/usr/share/terminfo);

system("rpm", "-r", $dstdir,
	"--excludedocs",
	(map { ("--excludepath", $_) } @excludedirs),
	"-ivh", 
	map { "$repository/$_"} @rpm);
# == 0
#	|| die("rpm -i failed (\$?=$?)\n");

system("rm", "-r", "-f", map { "$dstdir/$_" } @excludedirs);

sub usage
{
	die("Usage: $0 repository destination-directory\n");
}

