Apt-Mirror

apt-mirror clean 腳本沒有刪除任何內容

  • April 7, 2015

我正在使用apt-mirror創建本地 Ubuntu 鏡像。它確實成功地從另一個鏡像下載文件(每周大約有幾個 GB),但從不刪除任何內容或指示可以刪除的文件。最終,我可能會用完可用空間。

apt-mirror始終包含的輸出

可以釋放 0 個文件和 0 個目錄中的 0.0 個字節。

為此目的執行 /var/spool/apt-mirror/var/clean.sh。

clean.sh每次apt-mirror執行時都會執行,因為的內容/var/spool/apt-mirror/var/postmirror.sh只是

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

執行clean.sh會產生以下輸出:

刪除 0 個不必要的文件

$$ 0 bytes $$… 完畢。 刪除 0 個不必要的目錄…完成。

這是我的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

解決方案:

將最後一行更改為:

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

解釋:

問題出在你的最後一行,它定義了要清理的儲存庫。clean採用它應該刪除的儲存庫的名稱:

## 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;
}

儲存文件的目錄採用 的形式/var/spool/apt-mirror/mirror/mirror.domain,因此要決定要清理哪些目錄,它應該匹配這些目錄中的任何一個,如果不匹配則什麼也不做。

這就是為什麼更改網址以匹配其他網址是解決方案的原因。

引用自:https://unix.stackexchange.com/questions/137848