apt-mirror script limpo não está apagando nada

4

Estou usando apt-mirror para criar um espelho local do Ubuntu. Ele consegue fazer o download de arquivos de outro espelho (há cerca de dois gigabytes por semana), mas nunca remove nada ou indica arquivos que podem ser excluídos. Eu posso ficar sem espaço livre, eventualmente.

A saída de apt-mirror sempre inclui

0.0 bytes in 0 files and 0 directories can be freed.

Run /var/spool/apt-mirror/var/clean.sh for this purpose.

O clean.sh é executado toda vez que apt-mirror é executado, porque o conteúdo de /var/spool/apt-mirror/var/postmirror.sh é apenas

/var/spool/apt-mirror/var/clean.sh

A execução de clean.sh produz esta saída:

Removing 0 unnecessary files [0 bytes]... done.

Removing 0 unnecessary directories... done.

Este é o meu arquivo mirror.list :

############# config ##################
#
# set base_path    /var/spool/apt-mirror
#
# set mirror_path  $base_path/mirror
# set skel_path    $base_path/skel
# set var_path     $base_path/var
# set cleanscript $var_path/clean.sh
# set defaultarch  <running host architecture>
# set postmirror_script $var_path/postmirror.sh
# set run_postmirror 0
set nthreads     20
set _tilde 0
#
############# end config ##############

deb-i386 http://ubuntu.c3sl.ufpr.br/ubuntu/ trusty main restricted universe multiverse 
deb-i386 http://ubuntu.c3sl.ufpr.br/ubuntu/ trusty-updates main restricted universe multiverse 
deb-i386 http://ubuntu.c3sl.ufpr.br/ubuntu/ trusty-backports main restricted universe multiverse 
deb-i386 http://ubuntu.c3sl.ufpr.br/ubuntu/ trusty-security main restricted universe multiverse 

deb-amd64 http://ubuntu.c3sl.ufpr.br/ubuntu/ trusty main restricted universe multiverse 
deb-amd64 http://ubuntu.c3sl.ufpr.br/ubuntu/ trusty-updates main restricted universe multiverse 
deb-amd64 http://ubuntu.c3sl.ufpr.br/ubuntu/ trusty-backports main restricted universe multiverse 
deb-amd64 http://ubuntu.c3sl.ufpr.br/ubuntu/ trusty-security main restricted universe multiverse 

clean http://archive.ubuntu.com/ubuntu
    
por That Brazilian Guy 18.06.2014 / 16:48

1 resposta

6

Solução:

Altere a última linha para:

clean http://ubuntu.c3sl.ufpr.br/ubuntu/

Explicação:

O problema está na sua última linha, onde define qual repositório deve ser limpo. clean leva o nome do repositório no qual ele deve ser removido:

## Parse config

open CONFIG, "<$config_file" or die("apt-mirror: can't open config file ($config_file)");
while (<CONFIG>)
{
    ## Here we detect the line starting with "clean" and process the URL
    if ( $config_line eq "clean" )
    {
        $config_line[0] =~ s[^(\w+)://][];
        $config_line[0] =~ s[/$][];
        $config_line[0] =~ s[~][%7E]g if get_variable("_tilde");
        $clean_directory{ $config_line[0] } = 1;
        next;
    }
    die("apt-mirror: invalid line in config file ($.: $config_line ...)");
}
## we store the results in the "clean_directory" variable, now we will
## loop through all of them:
foreach ( keys %clean_directory )
{
    process_directory($_) if -d $_ && !-l $_;
}
## and proceed to take the actions:
sub process_directory
{
    my $dir       = shift;
    my $is_needed = 0;
    return 1 if $skipclean{$dir};
    opendir( my $dir_h, $dir ) or die "apt-mirror: can't opendir $dir: $!";
    foreach ( grep { !/^\.$/ && !/^\.\.$/ } readdir($dir_h) )
    {
        my $item = $dir . "/" . $_;
        $is_needed |= process_directory($item) if -d $item && !-l $item;
        $is_needed |= process_file($item)      if -f $item;
        $is_needed |= process_symlink($item)   if -l $item;
    }
    closedir $dir_h;
    push @rm_dirs, $dir unless $is_needed;
    return $is_needed;
}

Os diretórios onde os arquivos são armazenados estão na forma de /var/spool/apt-mirror/mirror/mirror.domain , então para decidir quais diretórios limpar, ele deve corresponder a qualquer um desses diretórios, se não fizer nada, então.

É por isso que mudar o URL para corresponder aos outros é a solução.

    
por 18.06.2014 / 17:22

Tags