Archives Verzeichnis klein halten

Smalltalk
Antworten
Benutzeravatar
SBKL|M37hM4n
Beiträge: 51
Registriert: 05.10.2002 18:20:33
Wohnort: Johanngeorgenstadt
Kontaktdaten:

Archives Verzeichnis klein halten

Beitrag von SBKL|M37hM4n » 08.11.2003 19:57:20

Hi,

da ich ab und zu ein neues System installiere, und ich nur ISDN habe d.h. es mir zu lange dauert immer wieder die aktuellsten Archive runterzuladen habe ich einen Rechner der diese runterläd und "sammelt".
Logischerweise wird dadurch /var/cache/apt/archives/ immmer immer größer und deshalb habe ich ein kleines PHP Script gecodet, das (je nach Einstellung) alle, bis auf die aktuellste Version eines Packages löscht.
Der Unterschied zu apt-get autoclean ist, das es von sämlichen Packeten die letzte Version erhält. Wenn man also mal etwas installiert und wieder gelöscht hat, aber jetzt wieder braucht, hat man noch diese letzte Version. apt-get autoclean hätte diese schon gelöscht AFAIK. Außerdem kann man durch Veränderung der Variable $cnt (am Anfang des Scripts) festlegen, ob mehr als die aktuellste Version übrig bleiben sollen, z.b. die letzten 2 oder 3 Versionen.

Wen es interresiert, hier mein Script:

Code: Alles auswählen

#!/bin/php
<?php
        // Wieviele Versionen gezaehlt ab der letzten, sollen erhalten bleiben??
        $cnt = 1;

        // Archiveverzeichnis einlesen ...
        $dir = opendir('/var/cache/apt/archives/');
        while ($file = readdir($dir))
        {
                $data = explode('_',$file);
                $package[$data[0]]['versions'][]  = $data[1];
                $package[$data[0]]['fullnames'][] = $file;
        }

        // Für jedes gefundene Package ...
        foreach ($package as $key => $val)
        {
                // zaehlen wieviele Versionen es gibt
                $versions = count($val['versions']);

                // Wenn mehr Versionen als oben festgelegt, dann ...
                if ($versions > $cnt)
                {
//                      echo $key."\n";
                        // Array sortieren
                        natcasesort($val['versions']);
                        natcasesort($val['fullnames']);

//                      foreach ($val['versions'] as $version)
//                      { echo $version."\n"; }

                        $x = 1;
                        foreach ($val['fullnames'] as $fullname)
                        {
                                // Und durchzaehlen wieviele Speicherplatz frei wird ...
                                if ($x < ($versions-($cnt-1)))
                                {
                                        $size += filesize('/var/cache/apt/archives/'.$fullname);
//                                      $fp = fopen('packages',"a");
//                                      fwrite($fp,$fullname."\n");
//                                      fclose($fp);
                                        // Und die zu loeschenden Files in ein Array hauhen ...
                                        $files[] = $fullname;
                                }
                                $x++;
                        }
                }
        }

        // Und wenn mehr oder gleich ein Package zu löschen ist, diese(s) auflisten, löschen und sagen wieviel MB frei wurden ...
        if (count($files) >= 1)
        {
                echo "Folgende Packete werden entfernt werden:\n";
                foreach ($files as $file)
                { echo $file." "; exec ('rm /var/cache/apt/archives/'.$file); }
                $mb  = $size/1024/1024;
                $dot = strpos($mb,".");
                echo "\n\n".substr($mb,0,$dot+3)." MB wurden dadurch frei.";
        }
        else
        // Wenn keine Dateien zum löschen gefunden wurden, dann Fehlermeldung ausgeben.
        {
                echo "Es wurden keine Packete gefunden die geloescht werden haetten koennen. Es wurden nur die Aktuellsten Packete gefunden.";
        }
?>
have fun.

mfg sbkl ...

Antworten