Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
distfiles cada vez mas GRANDE
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index Spanish
View previous topic :: View next topic  
Author Message
salvapc
Tux's lil' helper
Tux's lil' helper


Joined: 03 Nov 2002
Posts: 99
Location: Murcia (Spain)

PostPosted: Tue Oct 07, 2003 9:22 am    Post subject: distfiles cada vez mas GRANDE Reply with quote

Cuanto mas tiempo pasa y mas actualizo mi gentoo el distfiles va creciendo y creciendo con todas las versiones antiguas de los paquetes.

¿Hay alguna utilidad en gentoo que examine este directorio y te borre los paquetes antiguos ???
Si ya se que lo puede hacer a mano, pero es eterno ....
Back to top
View user's profile Send private message
asph
l33t
l33t


Joined: 25 Aug 2003
Posts: 738
Location: Barcelona, Spain

PostPosted: Tue Oct 07, 2003 10:10 am    Post subject: Reply with quote

Realmente no hay ninguna aplicacion que haga eso bien, ni siquiera en gentoolkit. De todas formas se posteo en los foros un script que examina el directorio /usr/portage/distfiles, comprueba las versiones instaladas de los paquetes y borra los tar.gz que no coinciden, con lo que te quedan solo las tarballs de los paquetes actuales. Wow :)

Yo lo he probado y lo uso de vez en cuando y no he tenido problemas, pero recuerda que lo ha escrito un usuario y no tiene ninguna garantía ni se hace responsable por posibles daños a tu sistema.


Versión Perl

Code:
#!/usr/bin/perl -w
use strict;

my $lastname = 0;
my $lastversion;
my $lastext;
my @stalefiles;
my @files;

# Insert your exclusions here with trailing '-'
my %maskedfiles = (
   'X420src-' => 1,
   'gcc-' => 1,
   'freetype-' => 1
);

# Root check
if ($< != 0) {
   print "You must be root to run this script.\n";
   exit 0;
}

# Determine sources present on the system
print "Determining available tarballs in /usr/portage/distfiles ...\n";
opendir(DIR, "/usr/portage/distfiles");
@files = sort(readdir(DIR));
closedir(DIR);

# Grab names/versions, checking each time whether current distfile
# has been superceded. Push anonymous array ref containing required
# info into @stalefiles array.
print "Determining stale versions ...\n";
foreach (@files) {
   my $name;
   my $version;
   # Only operate on tarballs   
   if (/(.+?\-)([0-9r\.\-]+)(\.tar\.gz|\.tgz|\.tar.bz2)/s) {
      $name = $1;
      $version = $2;
      next if ($maskedfiles{$name}); # Ignore "masked" files
      if ($lastname && $name eq $lastname) {
         if ($version gt $lastversion) {
            push (@stalefiles, [$name, $version, $lastversion, $lastext]);
         }
      }
      $lastname = $name;
      $lastversion = $version;
      $lastext = $3;
   }
}

if (@stalefiles == 0) {
   print "\nNo stale distfiles have been detected on your system!\n";
   exit 0;
}

if ($ARGV[0] && $ARGV[0] eq '--nopretend') {
   # User requested deletion so here goes ...
   print "*Nopretend* mode, deleting stale files:\n\n";
   foreach (@stalefiles) {
      my ($name, $version, $lastversion, $ext) = @{$_};
      unlink('/usr/portage/distfiles/' . $name . $lastversion . $ext);
      print "Deleted: $name$lastversion in favour of $name$version\n";
   }
}
else
{
   # Safe mode (default)!
   print "\7*Pretend* mode, will only pretend to delete files.\nTo actually delete the files, reinvoke with the --nopretend parameter.\n\n";
   foreach (@stalefiles) {
      my ($name, $version, $lastversion, $ext) = @{$_};
      print "Would delete: $name$lastversion in favour of $name$version\n";
   }
}
1;


Versión Python

Code:
#!/usr/bin/env python
import sys
import re
import string
import os
import os.path
import commands
import getopt

make_conf = {}
make_conf['PORTDIR'] = '/usr/portage'
make_conf['DISTDIR'] = '/usr/portage/distfiles'

def read_make_conf(make_conf):
    file = open('/etc/make.conf', 'r')
    while 1:
        line = file.readline()
        if line == '':
            break
        match = re.search('^\s*(\w+)=(.+)$', line)
        if match != None:
            make_conf[match.group(1)] = match.group(2)
    file.close()

    for var, value in make_conf.items():
        while 1:
            match = re.search('"?\$\{(\w+)\}"?', make_conf[var])
            if match == None:
                break
            make_conf[var] = re.sub('"?\$\{' + match.group(1) + '\}"?',
                                    make_conf[match.group(1)],
                                    value)
    return make_conf

opt_p = 0
try:
    if len(sys.argv) > 1:
        opt_p = getopt.getopt(sys.argv[1:], "p")[0][0][0] == '-p'
except getopt.GetoptError:
    print "oj!"
    pass

make_conf = read_make_conf(make_conf)
           
print 'PORTDIR =', make_conf['PORTDIR']
print 'DISTDIR =', make_conf['DISTDIR']
if make_conf.has_key('PORTDIR_OVERLAY'):
    print 'PORTDIR_OVERLAY =', make_conf['PORTDIR_OVERLAY']
else:
    print 'PORTDIR_OVERLAY ='
   
files = {}
status, packages = commands.getstatusoutput('qpkg -v -I -nc')
if status != 0:
    sys.exit("Can't list packages\n")
for package in string.split(packages):
    match = re.search('(.*)/(.*)-(\d.*)', package)
    category, program, version = match.group(1, 2, 3)
    digest_suffix = ('/' + category
                     + '/' + program + '/files/digest-' + program
                     + '-' + version)
    digest = make_conf['PORTDIR'] + digest_suffix
    if (make_conf.has_key('PORTDIR_OVERLAY')
        and (not os.path.isfile(digest))):
        digest = make_conf['PORTDIR_OVERLAY'] + digest_suffix
    if os.path.isfile(digest):
        file = open(digest, 'r')
        while 1:
            line = file.readline()
            if line == '':
                break
            fields = string.split(line)
            if len(fields) == 4:
                [hashtype, hash, filename, size] = fields
                files[filename] = 1
        file.close()

if len(files.keys()) == 0:
    sys.exit("sanity check: no package files found.  This can't be right.\n")

try:
    list = os.listdir(make_conf['DISTDIR'])
except os.OSError:
    sys.exit("can't open " + make_conf['DISTDIR'])

for file in list:
    abs_file = make_conf['DISTDIR'] + '/' + file
    if (os.path.isfile(abs_file) and (not os.path.islink(abs_file))
        and (not (files.has_key(file) and files[file]))):
        if opt_p:
            print 'Would erase', abs_file
        else:
            os.remove(abs_file)

_________________
gentoo sex is updatedb; locate; talk; date; cd; strip; look; touch; finger; unzip; uptime; gawk; head; emerge --oneshot condom; mount; fsck; gasp; more; yes; yes; yes; more; umount; emerge -C condom; make clean; sleep
Back to top
View user's profile Send private message
nohuman
Apprentice
Apprentice


Joined: 14 Jun 2003
Posts: 160
Location: Valencia

PostPosted: Tue Oct 07, 2003 4:38 pm    Post subject: Reply with quote

Hi!

Que yo sepa el distfiles una vez instalado el programa no sirve para nada, a no ser que quieras volver a compilar y evitar tener que bajarte el fichero de nuevo.
Yo suelo usar el metodo rm *

Un Saludos
Back to top
View user's profile Send private message
asph
l33t
l33t


Joined: 25 Aug 2003
Posts: 738
Location: Barcelona, Spain

PostPosted: Wed Oct 08, 2003 7:08 am    Post subject: Reply with quote

Imagina por un momento, que tienes una conexión de 56k. Acabas de bajar la nueva version de XFree (60 megs +o-), 4.3.1-r2. Dios, después de esas horas que has estado descargando el paquete, es una delicia compilarlo e instalarlo. Una vez finalizada la instalación, decides 'rm /usr/portage/distfiles/*'.. eres de esos que teniendo 48 gb's libres no te gusta desperdiciar espacio.

Al cabo de tres días, sale una nueva revisión de Xfree, la 4.3.1-r3. Tienes que volver a bajar las 60 megs mas la revisión!! Asi que decides borrar la partición de gentoo, y ponerte Windows XP.

Ves las consecuencias que esto puede tener sobre algunos usuarios?? xDD
Si no borras los distfiles, solo se hubiese bajado la revision (tipo parche), y te ahorras una buena cantidad de megs. Si esto lo multiplicas por todos los paquetes que tienes instalados, estamos hablando de un considerable ahorro de bandwith :)
_________________
gentoo sex is updatedb; locate; talk; date; cd; strip; look; touch; finger; unzip; uptime; gawk; head; emerge --oneshot condom; mount; fsck; gasp; more; yes; yes; yes; more; umount; emerge -C condom; make clean; sleep
Back to top
View user's profile Send private message
salvapc
Tux's lil' helper
Tux's lil' helper


Joined: 03 Nov 2002
Posts: 99
Location: Murcia (Spain)

PostPosted: Thu Oct 09, 2003 1:42 pm    Post subject: Reply with quote

nohuman wrote:

Que yo sepa el distfiles una vez instalado el programa no sirve para nada, a no ser que quieras volver a compilar y evitar tener que bajarte el fichero de nuevo.
Yo suelo usar el metodo rm *

Un Saludos

Eso no es solucion, por lo menos yo si que recompilo por lo que sea de vez en cuando algunos paquetes, por que se te olvido un USE que necisitas o algo asi.
En mi caso aun peor ya que tengo una red y todas las demas maquinas cogen los paquetes de esta y nunca sabes hasta que punto van o no a necesitarlos.
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Spanish All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum