glasswalk3r has asked for the wisdom of the Perl Monks concerning the following question:
Hello follow monks,
Are you aware of any technique to reduce the size of a CPAN::Mini repository?
I was checking my local mirror here and it is around 4.9Gb on a OpenBSD 6 box with FFS.
Taking a look at my ID under authors directory, I see that there are tarballs over there that are not even listed on my PAUSE account anymore (might be some issue regarding mirror synchronization). Anyway, I guess that for my purposes I could use only the latest available distribution for everybody.
A quick check on CPAN::Mini and minicpan documentation doesn't show anything that would help with that.
Is there any trick to take care of it?
Thanks!
I tried this:
use warnings; use strict; use DBI; use Set::Tiny; use CPAN; CPAN::HandleConfig->load; CPAN::Shell::setup_output; CPAN::Index->force_reload; my $dbfile = '/home/vagrant/.cpan/cpandb.sql'; my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfile","",""); my $query_distros = $dbh->prepare(q{select A.dist_file from dists A jo +in auths B on A.auth_id = B.auth_id where B.cpanid = ?}); my $query_authors = $dbh->prepare(q{select cpanid from auths}); $query_authors->execute(); my $removed = 0; while (my $row = $query_authors->fetchrow_arrayref()) { my $distros = get_distro_files($dbh, $query_distros, $row->[0]); my $path = '/minicpan/authors/id/' . substr($row->[0],0,1) . '/' . + substr($row->[0],0,2) . '/' . $row->[0]; next unless ( -d $path ); opendir(DIR,$path) or die "Cannot read $path: $!"; my @files = readdir(DIR); close(DIR); shift(@files); shift(@files); foreach my $distro_file(@files) { next if $distro_file eq 'CHECKSUMS'; my $to_remove = $path . '/' . $distro_file; next unless (-f $to_remove); unless ($distros->has($distro_file)) { my $to_remove = $path . '/' . $distro_file; print "$to_remove can be removed\n"; unlink( $to_remove ) or warn "could not remove $to_remove: + $!"; $removed++; } } } $dbh->disconnect(); print "Total removed: $removed\n"; sub get_distro_files { my ($dbh, $sth, $author) = @_; $sth->bind_param(1, $author); $sth->execute(); my @distros; while ( my $row = $sth->fetchrow_arrayref() ) { push(@distros, $row->[0]); } return Set::Tiny->new(@distros); }
Still pending to validate if it didn't break anything...
Anyway, I was able to reduce it to 3.0Gb from the initial 4.9Gb...
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: CPAN::Mini on a diet
by marto (Cardinal) on Mar 22, 2017 at 10:40 UTC | |
by glasswalk3r (Friar) on Mar 22, 2017 at 14:19 UTC | |
by marto (Cardinal) on Mar 22, 2017 at 14:23 UTC | |
by glasswalk3r (Friar) on Mar 22, 2017 at 17:23 UTC | |
by glasswalk3r (Friar) on Mar 24, 2017 at 01:14 UTC | |
|
Re: CPAN::Mini on a diet
by Anonymous Monk on Mar 21, 2017 at 23:30 UTC | |
by glasswalk3r (Friar) on Mar 22, 2017 at 00:00 UTC | |
by Anonymous Monk on Mar 22, 2017 at 00:31 UTC | |
by glasswalk3r (Friar) on Mar 22, 2017 at 00:43 UTC | |
by Anonymous Monk on Mar 22, 2017 at 01:46 UTC |