Subject: Re: transition of pkgsrc to a new machine
To: None <tech-pkg@netbsd.org>
From: Tero Kivinen <kivinen@ssh.fi>
List: tech-pkg
Date: 10/07/2002 04:03:09
knappe@tu-harburg.de (Frank Knappe) writes:
> I would prefer the installation from source, because I have all the
> sources in pkgsrc_distfiles and this machine has only a dialup
> connection.
> I will look into the suggestion with pkgchk.
The script included at the end of this email might be useful. I used
to have almost all packages installed on my system (I usually do
pkg_delete -r '*'; pkg_chk -C pkgchk.conf -a -k where the pkgchk.conf
have names of all packages with no conflicts). The good thing about
that is that when someone says about have you tried the tool xxx, I
usuall have that one already installed :-)
The bad thing is that the pkg_chk takes quite a long time, and during
that time the machine is mostly unusable as there are lots of binaries
missing.
Then I realized that as I actually only use only few of those packages
I could extract that information and create pkgchk.conf that only
contains the packages that I have used in last say 200 days.
This ended up to small perl script called pkg_show_used. It will check
for all packages installed on your system and check if they have any
files that has been modified or accessed in last <n> days. If so it
will find out the directory of the package and print it out. The
output of this script is directly suitable for pkg_chk.
Of course using this requires that you take backups in ways that do
not modify the timestamps in files.
Have fun:
----------------------------------------------------------------------
#!/usr/pkg/bin/perl -w
# -*- perl -*-
if ($#ARGV >= 0) {
$days = $ARGV[0];
} else {
$days = 200;
}
$check_time = time() - $days * 86400;
open(PKG_INFO, "pkg_info |") || die "Cannot run pkg_info: $!";
while (<PKG_INFO>) {
chomp;
s/ .*//g;
s/-[^-]*$//;
push(@pkgs, $_);
}
close(PKG_INFO);
foreach $pkg (@pkgs) {
open(PKG_INFO, "pkg_info -q -L $pkg |") ||
die "Cannot run pkg_info -q -L $pkg: $!";
print(STDERR "# Checking $pkg...");
while (<PKG_INFO>) {
chomp;
(undef, undef, undef, undef, undef, undef, undef,
undef, $a, $m, $c) = stat($_);
if (defined($a) && defined($m) && defined($c) &&
($a > $check_time || $m > $check_time || $c > $check_time)) {
push(@used_pkgs, $pkg);
print(STDERR "used");
last;
}
}
print(STDERR "\n");
close(PKG_INFO);
}
foreach $pkg (@used_pkgs) {
open(PKG_INFO, "pkg_info -q -B $pkg |") ||
die "Cannot run pkg_info -q -B $pkg : $!";
while (<PKG_INFO>) {
next if (!/^PKGPATH=\s*(.*)$/);
print($1, "\n");
last;
}
close(PKG_INFO);
}
--
kivinen@ssh.fi
SSH Communications Security http://www.ssh.fi/
SSH IPSEC Toolkit http://www.ssh.fi/ipsec/